仅向测验中的选定用户显示数据 activity

Show data only to selected user in Quiz activity

我正在使用 Moodle 2.7,在 Quiz activity 中有 所有尝试 学习者 [=38] 的概述页面=]. table 在 mymoodle/mod/quiz/report.php?id=50&mode=overview

现在只有管理员用户或具有权限 'mod/quiz:viewreports'的用户可以看到table。 如何添加用户,不使用任何能力,谁能看到这份报告?

现在每个没有能力的用户都会收到来自 report.php 的错误:

$reportlist = quiz_report_list($context);
if (empty($reportlist) !totara_is_manager($userid)) {
    print_error('erroraccessingreport', 'quiz');
}

// Validate the requested report name.
if ($mode == '') {
    // Default to first accessible report and redirect.
    $url->param('mode', reset($reportlist));
    redirect($url);
} else if (!in_array($mode, $reportlist)) {
    print_error('erroraccessingreport', 'quiz');
}
if (!is_readable("report/$mode/report.php")) {
    print_error('reportnotfound', 'quiz', '', $mode);
}

table函数reportlib.php:

function quiz_report_list($context) {
    global $DB;
    static $reportlist = null;
    if (!is_null($reportlist)) {
        return $reportlist;
    }

    $reports = $DB->get_records('quiz_reports', null, 'displayorder DESC', 'name, capability');
    $reportdirs = core_component::get_plugin_list('quiz');
    // Order the reports tab in descending order of displayorder.
    $reportcaps = array();
    foreach ($reports as $key => $report) {
        if (array_key_exists($report->name, $reportdirs)) {
            $reportcaps[$report->name] = $report->capability;
        }
    }

    // Add any other reports, which are on disc but not in the DB, on the end.
    foreach ($reportdirs as $reportname => $notused) {
        if (!isset($reportcaps[$reportname])) {
            $reportcaps[$reportname] = null;
        }
    }
    $reportlist = array();
    foreach ($reportcaps as $name => $capability) {
        if (empty($capability)) {
            $capability = 'mod/quiz:viewreports';
        }
        if (has_capability($capability, $context)) {
            $reportlist[] = $name;
        }
    }
    return $reportlist;
}

我想通过他们的 id 添加指定人员,他们将充当 managers

如果您想完全绕过功能的查看报告机制,那么您可以随时注释 access.php 中对应于键 'mod/quiz:viewreports' 的数组值。换句话说,您可以转到 /mod/quiz/db/access.php 并替换

// View the quiz reports.
'mod/quiz:viewreports' => array(
    'riskbitmask' => RISK_PERSONAL,
    'captype' => 'read',
    'contextlevel' => CONTEXT_MODULE,
    'archetypes' => array(
        'teacher' => CAP_ALLOW,
        'editingteacher' => CAP_ALLOW,
        'manager' => CAP_ALLOW
    )
),

// View the quiz reports.
'mod/quiz:viewreports' => array(
   // 'riskbitmask' => RISK_PERSONAL,
   // 'captype' => 'read',
   // 'contextlevel' => CONTEXT_MODULE,
   // 'archetypes' => array(
   //     'teacher' => CAP_ALLOW,
   //     'editingteacher' => CAP_ALLOW,
   //     'manager' => CAP_ALLOW
    )
),

或者,您可以根据需要调整或打开条目。有关详细信息,请参阅: https://docs.moodle.org/dev/Access_API

那你可以

  1. 检查当前用户的ID($USER->id)和
  2. 编写一些自定义函数来决定该用户是否可以看到报告。

注意:不过,我不会绕过功能机制,因为它既可靠又安全。但是,您可以调整它以仅允许您定义的用户组。