2016-06-24 3 views
2

私はMoodle 2.7を使用していますし、Quiz activityに概要ページが学習者のすべての試みがのためにそこにあります。 テーブルは今能力を持つ唯一の管理ユーザーやユーザー'mod/quiz:viewreports'がテーブルを参照することができmymoodle/mod/quiz/report.php?id=50&mode=overview表示データ

の下にあります。 を使用しないでユーザーを追加するには、このレポートを見ることができますか?

今の機能を持たないすべてのユーザーが、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); 
} 

テーブル機能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の管理者

答えて

1

レポートを表示するための機能のメカニズムを完全にバイパスするには、 'mod/quiz:viewreports'キーに対応する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 
    ) 
), 

を/mod/quiz/db/access.phpし、代わりに行くことができ、あなたがエントリに調整するか、有効にすることができ、あなたによります必需品。詳細については、以下を参照してください https://docs.moodle.org/dev/Access_API

を次にあなたが

  1. は、現在のユーザー($ USER-> ID)のIDを確認することができ、このユーザはできるかできない場合
  2. を決定するためにいくつかのカスタム関数を書きますレポートを参照してください。

注:信頼性が高く安全であるため、機能メカニズムをバイパスしません。ただし、あなたが定義したユーザーグループだけを許可するために調整することができます。

+0

ありがとうございました。私は結果を試して比較し、ここでフィードバックをします。 – StartVader