为了账号安全,请及时绑定邮箱和手机立即绑定

Moodle 插件:检查管理员是否在管理中添加指向插件的链接

Moodle 插件:检查管理员是否在管理中添加指向插件的链接

PHP
浮云间 2023-04-02 10:15:29
我是 moodle 插件开发的新手,正在尝试创建一个向管理员显示页面的插件,我可以在其中添加我的 php 代码。简而言之,我希望插件执行的操作已经在我上传到 moodle 根目录的标准 php 文件中实现了。从这里您可以调用文件,例如 yourdomain.co.uk/moodlelocation/myfile.php,它将按预期运行。这样做的问题是它不安全,因为任何人都可以加载 myfile.php 并依次在页面上运行脚本。这也意味着任何其他人使用此脚本(完成后将免费赠送)需要通过 FTP 连接到他们的主机并将两个 php 文件上传到他们的 moodle 安装。因此,我认为插件(一个非常非常基本的插件)可能是最好的解决方案。然后他们可以通过“站点管理”在管理员中加载页面。例如站点管理 > 开发 > MyPlugin。我假设我也可以将插件的主页限制为仅限管理员 (??)。总而言之,我可以创建一个 php 页面,让我的脚本摇摆不定,但我需要将其制作成一个插件。我做了一些阅读,我认为“本地”插件是最简单的方法(??)。我已经设法使用 local/webguides/inex.php 中的以下内容启动并运行本地插件:<?php// Standard config file and local library.require_once(__DIR__ . '/../../config.php');// Setting up the page.$PAGE->set_context(context_system::instance());$PAGE->set_pagelayout('standard');$PAGE->set_title("webguides");$PAGE->set_heading("webguides");$PAGE->set_url(new moodle_url('/local/webguides/index.php'));// Ouput the page header.echo $OUTPUT->header();echo 'MY php CODE here etc';?>这工作正常但有两个问题:任何人都可以通过http://domain/local/webguides/index.php访问它站点管理中没有指向它的链接(因此用户需要输入 URL)。谁能阐明我将如何实现上述两个步骤?提前致谢ps 理想情况下,我希望将插件保留在尽可能少的文件中,因此如果可以将所需的代码添加到 local/webguides/index.php 文件中,那将是首选。
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

您需要创建一个功能,然后在显示页面之前需要该功能。


首先,看一下local/readme.txt- 这给出了本地插件所需文件的概述。


或者阅读https://docs.moodle.org/dev/Local_plugins上的文档


还可以查看现有的本地插件,以便了解它们是如何创建的 - https://moodle.org/plugins/?q=type:local


至少,你需要


local/webguides/db/access.php - this will have the capability

local/webguides/lang/en/local_webguides.php

local/webguides/version.php

加上你的索引文件


local/webguides/index.php

在db/access.php文件中有类似的东西


defined('MOODLE_INTERNAL') || die();


$capabilities = array(


    'local/webguides:view' => array(

        'captype' => 'read',

        'contextlevel' => CONTEXT_SYSTEM,

        'archetypes' => array(

        ),

    ),


);

您可能还需要'riskbitmask' => RISK_XXX取决于您的代码中是否存在任何风险。如RISK_CONFIG,RISK_PERSONAL等


在lang/en/local_webguides.php有类似的东西


defined('MOODLE_INTERNAL') || die();


$string['pluginname'] = 'Webguides';

$string['webguides:view'] = 'Able to view webguids';

在version.php有类似的东西


defined('MOODLE_INTERNAL') || die();


$plugin->version   = 2020051901;        // The current plugin version (Date: YYYYMMDDXX)

$plugin->requires  = 2015051109;        // Requires this Moodle version.

$plugin->component = 'local_webguides'; // Full name of the plugin (used for diagnostics).

替换2015051109为您正在使用的 Moodle 版本 - 这将位于version.php根文件夹中。


然后在你的index.php文件中使用它靠近顶部。


require_capability('local/webguides:view', context_system::instance());

因此只有具有该能力的用户才能访问该页面。


编辑:


settings.php您可以使用类似的方式添加链接


defined('MOODLE_INTERNAL') || die;


if ($hassiteconfig) {

    $page = new admin_externalpage(

        'local_webguides',

        get_string('pluginname', 'local_webguides'),

        new moodle_url('/local/webguides/index.php'),

        'local/webguides:view'

    );


    $ADMIN->add('localplugins', $page);

}

然后在你的索引页广告这个


require_once($CFG->libdir.'/adminlib.php');

并删除require_login()并require_capability()替换为


admin_externalpage_setup('local_webguides');


查看完整回答
反对 回复 2023-04-02
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信