Moodleのログを解析向けに出力するカスタマイズ

と言っていいものか分からないが、行ったことをまとめておく。大したことはやっていない。SCORM受講ログの取得に十時間以上かかってしまったし、コースログの取得はPHPのmemory_limitとのたたかいであった。やはりPHPはパフォーマンスの問題がある。Try & Error の開発がしやすいこととのトレードオフなのだろうが…。

  1. ユーザ名を特定困難、識別可能な内部IDで出力する
    [code]— course/lib.php.20151020 2015-10-20 11:26:45.000000000 +0900
    +++ course/lib.php.20151016 2015-10-16 19:34:45.000000000 +0900
    @@ -424,7 +424,7 @@
    $link = new moodle_url("/iplookup/index.php?ip=$log->ip&user=$log->userid");
    $row[] = $OUTPUT->action_link($link, $log->ip, new popup_action(‘click’, $link, ‘iplookup’, array(‘height’ => 440, ‘width’ => 700)));

    – $row[] = html_writer::link(new moodle_url("/user/view.php?id={$log->userid}&course={$log->course}"), $log->userid);
    + $row[] = html_writer::link(new moodle_url("/user/view.php?id={$log->userid}&course={$log->course}"), fullname($log, has_capability(‘moodle/site:viewfullnames’, context_course::instance($course->id))));

    $displayaction="$log->module $log->action";
    if ($brokenurl) {
    @@ -531,7 +531,7 @@
    $link = new moodle_url("/iplookup/index.php?ip=$log->ip&user=$log->userid");
    echo $OUTPUT->action_link($link, $log->ip, new popup_action(‘click’, $link, ‘iplookup’, array(‘height’ => 400, ‘width’ => 700)));
    echo "</td>\n";
    – $fullname = $log->userid;
    + $fullname = fullname($log, has_capability(‘moodle/site:viewfullnames’, context_course::instance($course->id)));
    echo "<td class=\"r$row c3\" >\n";
    echo " <a href=\"$CFG->wwwroot/user/view.php?id={$log->userid}\">$fullname</a>\n";
    echo "</td>\n";
    @@ -619,7 +619,7 @@

    $coursecontext = context_course::instance($course->id);
    $firstField = format_string($courses[$log->course], true, array(‘context’ => $coursecontext));
    – $fullname = $log->userid;
    + $fullname = fullname($log, has_capability(‘moodle/site:viewfullnames’, $coursecontext));
    $actionurl = $CFG->wwwroot. make_log_url($log->module,$log->url);
    $row = array($firstField, userdate($log->time, $strftimedatetime), $log->ip, $fullname, $log->module.’ ‘.$log->action.’ (‘.$actionurl.’)’, $log->info);
    $csvexporter->add_data($row);
    @@ -730,7 +730,7 @@
    $myxls->write($row, 0, format_string($courses[$log->course], true, array(‘context’ => $coursecontext)), ”);
    $myxls->write_date($row, 1, $log->time, $formatDate); // write_date() does conversion/timezone support. MDL-14934
    $myxls->write($row, 2, $log->ip, ”);
    – $fullname = $log->userid;
    + $fullname = fullname($log, has_capability(‘moodle/site:viewfullnames’, $coursecontext));
    $myxls->write($row, 3, $fullname, ”);
    $actionurl = $CFG->wwwroot. make_log_url($log->module,$log->url);
    $myxls->write($row, 4, $log->module.’ ‘.$log->action.’ (‘.$actionurl.’)’, ”);
    @@ -844,7 +844,7 @@
    $myxls->write_string($row, 0, format_string($courses[$log->course], true, array(‘context’ => $coursecontext)));
    $myxls->write_date($row, 1, $log->time);
    $myxls->write_string($row, 2, $log->ip);
    – $fullname = $log->userid;
    + $fullname = fullname($log, has_capability(‘moodle/site:viewfullnames’, $coursecontext));
    $myxls->write_string($row, 3, $fullname);
    $actionurl = $CFG->wwwroot. make_log_url($log->module,$log->url);
    $myxls->write_string($row, 4, $log->module.’ ‘.$log->action.’ (‘.$actionurl.’)’);

    — mod/quiz/report/attemptsreport.php 2015-10-16 19:03:12.000000000 +0900
    +++ mod/quiz/report/attemptsreport.php.20151016 2015-10-16 19:04:44.000000000 +0900
    @@ -153,10 +153,10 @@
    $headers[] = ”;
    }
    if (!$table->is_downloading()) {
    – $columns[] = ‘userid’;
    + $columns[] = ‘username’;
    $headers[] = get_string(‘name’);
    } else {
    – $columns[] = ‘userid’;
    + $columns[] = ‘username’;
    $headers[] = get_string(‘name’);
    }

    — mod/scorm/report/interactions/report.php.20151020 2015-10-20 11:21:52.000000000 +0900
    +++ mod/scorm/report/interactions/report.php.20151016 2015-10-16 12:33:37.000000000 +0900
    @@ -418,9 +418,9 @@
    $row[] = $OUTPUT->user_picture($user, array(‘courseid’=>$course->id));
    }
    if (!$download) {
    – $row[] = ‘<a href="’.$CFG->wwwroot.’/user/view.php?id=’.$scouser->userid.’&amp;course=’.$course->id.’">’.$scouser->userid.'</a>’;
    + $row[] = ‘<a href="’.$CFG->wwwroot.’/user/view.php?id=’.$scouser->userid.’&amp;course=’.$course->id.’">’.$scouser->username.'</a>’;
    } else {
    – $row[] = $scouser->userid;
    + $row[] = $scouser->username;
    }
    if (empty($timetracks->start)) {
    $row[] = ‘-‘;

    — mod/scorm/report/basic/report.php.20151020 2015-10-20 11:04:48.000000000 +0900
    +++ mod/scorm/report/basic/report.php.20151016 2015-10-16 11:02:03.000000000 +0900
    @@ -121,7 +121,7 @@
    $columns[]= ‘picture’;
    $headers[]= ”;
    }
    – $columns[] = ‘userid’;
    + $columns[] = ‘username’;
    $headers[] = get_string(‘name’);

    $columns[]= ‘attempt’;
    @@ -383,9 +383,9 @@
    $row[] = $OUTPUT->user_picture($user, array(‘courseid’=>$course->id));
    }
    if (!$download) {
    – $row[] = ‘<a href="’.$CFG->wwwroot.’/user/view.php?id=’.$scouser->userid.’&amp;course=’.$course->id.’">’.$scouser->userid.'</a>’;
    + $row[] = ‘<a href="’.$CFG->wwwroot.’/user/view.php?id=’.$scouser->userid.’&amp;course=’.$course->id.’">’.$scouser->username.'</a>’;
    } else {
    – $row[] = $scouser->userid;
    + $row[] = $scouser->username;
    }
    if (empty($timetracks->start)) {
    $row[] = ‘-‘;

    — mod/scorm/report/objectives/report.php.20151020 2015-10-20 11:23:52.000000000 +0900
    +++ mod/scorm/report/objectives/report.php.20151016 2015-10-16 12:34:18.000000000 +0900
    @@ -422,9 +422,9 @@
    }
    if (!$download) {
    $row[] = ‘<a href="’.$CFG->wwwroot.’/user/view.php?id=’.$scouser->userid.
    – ‘&amp;course=’.$course->id.’">’.$scouser->userid.'</a>’;
    + ‘&amp;course=’.$course->id.’">’.$scouser->username.'</a>’;
    } else {
    – $row[] = $scouser->userid;
    + $row[] = $scouser->username;
    }
    if (empty($timetracks->start)) {
    $row[] = ‘-‘;
    [/code]

  2. 時刻処理に適したunixtime型で出力する
    [code]

    — course/lib.php 2015-10-20 11:46:28.000000000 +0900
    +++ course/lib.php.20151020 2015-10-20 11:26:45.000000000 +0900
    @@ -558,7 +558,6 @@
    $header = array();
    $header[] = get_string(‘course’);
    $header[] = get_string(‘time’);
    – $header[] = get_string(‘time’);
    $header[] = get_string(‘ip_address’);
    $header[] = get_string(‘fullnameuser’);
    $header[] = get_string(‘action’);
    @@ -622,7 +621,7 @@
    $firstField = format_string($courses[$log->course], true, array(‘context’ => $coursecontext));
    $fullname = $log->userid;
    $actionurl = $CFG->wwwroot. make_log_url($log->module,$log->url);
    – $row = array($firstField, userdate($log->time, $strftimedatetime), $log->time, $log->ip, $fullname, $log->module.’ ‘.$log->action.’ (‘.$actionurl.’)’, $log->info);
    + $row = array($firstField, userdate($log->time, $strftimedatetime), $log->ip, $fullname, $log->module.’ ‘.$log->action.’ (‘.$actionurl.’)’, $log->info);
    $csvexporter->add_data($row);
    }
    $csvexporter->download_file();

    — mod/quiz/report/attemptsreport_table.php 2015-10-20 11:20:12.000000000 +0900
    +++ mod/quiz/report/attemptsreport_table.php.20151020 2015-10-20 11:01:19.000000000 +0900
    @@ -163,7 +163,7 @@
    */
    public function col_timestart($attempt) {
    if ($attempt->attempt) {
    – return $attempt->timestart;
    + return userdate($attempt->timestart, $this->strtimeformat);
    } else {
    return ‘-‘;
    }
    @@ -176,7 +176,7 @@
    */
    public function col_timefinish($attempt) {
    if ($attempt->attempt && $attempt->timefinish) {
    – return $attempt->timefinish;
    + return userdate($attempt->timefinish, $this->strtimeformat);
    } else {
    return ‘-‘;
    }
    @@ -189,7 +189,7 @@
    */
    public function col_duration($attempt) {
    if ($attempt->timefinish) {
    – return $attempt->timefinish – $attempt->timestart;
    + return format_time($attempt->timefinish – $attempt->timestart);
    } else {
    return ‘-‘;
    }

    — mod/scorm/report/interactions/report.php 2015-10-20 11:23:34.000000000 +0900
    +++ mod/scorm/report/interactions/report.php.20151020 2015-10-20 11:21:52.000000000 +0900
    @@ -435,14 +435,14 @@
    $row[] = $scouser->attempt;
    }
    if ($download ==’ODS’ || $download ==’Excel’ ) {
    – $row[] = $timetracks->start;
    + $row[] = userdate($timetracks->start, get_string("strftimedatetime", "langconfig"));
    } else {
    – $row[] = $timetracks->start;
    + $row[] = userdate($timetracks->start);
    }
    if ($download ==’ODS’ || $download ==’Excel’ ) {
    – $row[] = $timetracks->finish;
    + $row[] = userdate($timetracks->finish, get_string(‘strftimedatetime’, ‘langconfig’));
    } else {
    – $row[] = $timetracks->finish;
    + $row[] = userdate($timetracks->finish);
    }
    $row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $scouser->attempt);
    }

    — mod/scorm/report/basic/report.php 2015-10-20 11:12:59.000000000 +0900
    +++ mod/scorm/report/basic/report.php.20151020 2015-10-20 11:04:48.000000000 +0900
    @@ -399,14 +399,14 @@
    $row[] = $scouser->attempt;
    }
    if ($download ==’ODS’ || $download ==’Excel’ ) {
    – $row[] = $timetracks->start;
    + $row[] = userdate($timetracks->start, get_string("strftimedatetime", "langconfig"));
    } else {
    – $row[] = $timetracks->start;
    + $row[] = userdate($timetracks->start);
    }
    if ($download ==’ODS’ || $download ==’Excel’ ) {
    – $row[] = $timetracks->finish;
    + $row[] = userdate($timetracks->finish, get_string(‘strftimedatetime’, ‘langconfig’));
    } else {
    – $row[] = $timetracks->finish;
    + $row[] = userdate($timetracks->finish);
    }
    $row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $scouser->attempt);
    }

    — mod/scorm/report/objectives/report.php 2015-10-20 11:24:46.000000000 +0900
    +++ mod/scorm/report/objectives/report.php.20151020 2015-10-20 11:23:52.000000000 +0900
    @@ -439,14 +439,14 @@
    $row[] = $scouser->attempt;
    }
    if ($download ==’ODS’ || $download ==’Excel’ ) {
    – $row[] = $timetracks->start;
    + $row[] = userdate($timetracks->start, get_string("strftimedatetime", "langconfig"));
    } else {
    – $row[] = $timetracks->start;
    + $row[] = userdate($timetracks->start);
    }
    if ($download ==’ODS’ || $download ==’Excel’ ) {
    – $row[] = $timetracks->finish;
    + $row[] = userdate($timetracks->finish, get_string(‘strftimedatetime’, ‘langconfig’));
    } else {
    – $row[] = $timetracks->finish;
    + $row[] = userdate($timetracks->finish);
    }
    $row[] = scorm_grade_user_attempt($scorm, $scouser->userid, $scouser->attempt);
    }
    [/code]

1件のコメント

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です