Moodle 中具有灵活访问控制的附加网页

Additional web page with flexible access control in Moodle

在 Moodle 2.6 中,我创建了一个新网页 external.php 并将其复制到服务器上的根文件夹中。该网页包含一个 activity(我自己的 HTML 和 JavaScript),特定课程的参与者必须可以访问该网页。我现在有 3 门课程(我们称它们为 A、B 和 C),我希望网页内容对 A 和 B 的参与者可见,但对 C 的参与者不可见。

到目前为止,我设法通过 isloggedin() 限制了访问,它工作正常,但这只是一种妥协。

所以我的问题是:是否可以将访问此网页(它不是课程的一部分,也无意成为)的参与者限制为课程 A 和 B,但不是 C?

这是我的代码 external.php:

<?php
require_once('config.php');
// Open the page if the user is logged in
if (isloggedin()) {
    $PAGE->set_context(get_system_context());
    $PAGE->set_pagelayout('standart');
    $PAGE->set_title("Experimental page");
    $PAGE->set_heading("External");
    $PAGE->set_url($CFG->wwwroot . '/external.php');

    // Adding navbar
    $PAGE->navbar->ignore_active();
    $strHome = "important";
    $PAGE->navbar->add($strHome, new moodle_url('external.php'));

    echo $OUTPUT->header();

    // Variables for the content (html and javascript)
    $jscr = ""; // some code
    $htmlscr = ""; // some code

    // Actual content goes here
    echo $htmlscr;
    echo $jscr;
    echo $OUTPUT->footer();
}
// Else output error message
else {
    echo "<h2>Please log in to procede</h2>";
}
?>

非常感谢!

在文档中搜索并询问有经验的人几天后,我找到了解决方案。

我替换了:

if (isloggedin()) {
    MY CODE INSIDE
}

与:

if ((is_enrolled(context_course::instance(18), $USER)) or (is_enrolled(context_course::instance(20), $USER)) or is_siteadmin()) {
    MY CODE INSIDE
}

此代码允许注册 ID 为 1820 的课程的学生访问 MY CODE INSIDE 以及 管理员.

课程id可以在打开课程主页面的浏览器地址栏中找到。

希望对其他 Moodle 管理员有所帮助。