diff --git a/course/lib.php b/course/lib.php
index e3094fddecb..e731709b266 100644
--- a/course/lib.php
+++ b/course/lib.php
@@ -230,629 +230,6 @@ function build_mnet_logs_array($hostid, $course, $user=0, $date=0, $order="l.tim
return $result;
}
-function build_logs_array($course, $user=0, $date=0, $order="l.time ASC", $limitfrom='', $limitnum='',
- $modname="", $modid=0, $modaction="", $groupid=0) {
- global $DB, $SESSION, $USER;
- // It is assumed that $date is the GMT time of midnight for that day,
- // and so the next 86400 seconds worth of logs are printed.
-
- /// Setup for group handling.
-
- /// If the group mode is separate, and this user does not have editing privileges,
- /// then only the user's group can be viewed.
- if ($course->groupmode == SEPARATEGROUPS and !has_capability('moodle/course:managegroups', context_course::instance($course->id))) {
- if (isset($SESSION->currentgroup[$course->id])) {
- $groupid = $SESSION->currentgroup[$course->id];
- } else {
- $groupid = groups_get_all_groups($course->id, $USER->id);
- if (is_array($groupid)) {
- $groupid = array_shift(array_keys($groupid));
- $SESSION->currentgroup[$course->id] = $groupid;
- } else {
- $groupid = 0;
- }
- }
- }
- /// If this course doesn't have groups, no groupid can be specified.
- else if (!$course->groupmode) {
- $groupid = 0;
- }
-
- $joins = array();
- $params = array();
-
- if ($course->id != SITEID || $modid != 0) {
- $joins[] = "l.course = :courseid";
- $params['courseid'] = $course->id;
- }
-
- if ($modname) {
- $joins[] = "l.module = :modname";
- $params['modname'] = $modname;
- }
-
- if ('site_errors' === $modid) {
- $joins[] = "( l.action='error' OR l.action='infected' )";
- } else if ($modid) {
- $joins[] = "l.cmid = :modid";
- $params['modid'] = $modid;
- }
-
- if ($modaction) {
- $firstletter = substr($modaction, 0, 1);
- if ($firstletter == '-') {
- $joins[] = $DB->sql_like('l.action', ':modaction', false, true, true);
- $params['modaction'] = '%'.substr($modaction, 1).'%';
- } else {
- $joins[] = $DB->sql_like('l.action', ':modaction', false);
- $params['modaction'] = '%'.$modaction.'%';
- }
- }
-
-
- /// Getting all members of a group.
- if ($groupid and !$user) {
- if ($gusers = groups_get_members($groupid)) {
- $gusers = array_keys($gusers);
- $joins[] = 'l.userid IN (' . implode(',', $gusers) . ')';
- } else {
- $joins[] = 'l.userid = 0'; // No users in groups, so we want something that will always be false.
- }
- }
- else if ($user) {
- $joins[] = "l.userid = :userid";
- $params['userid'] = $user;
- }
-
- if ($date) {
- $enddate = $date + 86400;
- $joins[] = "l.time > :date AND l.time < :enddate";
- $params['date'] = $date;
- $params['enddate'] = $enddate;
- }
-
- $selector = implode(' AND ', $joins);
-
- $totalcount = 0; // Initialise
- $result = array();
- $result['logs'] = get_logs($selector, $params, $order, $limitfrom, $limitnum, $totalcount);
- $result['totalcount'] = $totalcount;
- return $result;
-}
-
-
-function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
- $url="", $modname="", $modid=0, $modaction="", $groupid=0) {
-
- global $CFG, $DB, $OUTPUT;
-
- if (!$logs = build_logs_array($course, $user, $date, $order, $page*$perpage, $perpage,
- $modname, $modid, $modaction, $groupid)) {
- echo $OUTPUT->notification("No logs found!");
- echo $OUTPUT->footer();
- exit;
- }
-
- $courses = array();
-
- if ($course->id == SITEID) {
- $courses[0] = '';
- if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
- foreach ($ccc as $cc) {
- $courses[$cc->id] = $cc->shortname;
- }
- }
- } else {
- $courses[$course->id] = $course->shortname;
- }
-
- $totalcount = $logs['totalcount'];
- $count=0;
- $ldcache = array();
- $tt = getdate(time());
- $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
-
- $strftimedatetime = get_string("strftimedatetime");
-
- echo "
\n";
- print_string("displayingrecords", "", $totalcount);
- echo "
\n";
-
- echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
-
- $table = new html_table();
- $table->classes = array('logtable','generaltable');
- $table->align = array('right', 'left', 'left');
- $table->head = array(
- get_string('time'),
- get_string('ip_address'),
- get_string('fullnameuser'),
- get_string('action'),
- get_string('info')
- );
- $table->data = array();
-
- if ($course->id == SITEID) {
- array_unshift($table->align, 'left');
- array_unshift($table->head, get_string('course'));
- }
-
- // Make sure that the logs array is an array, even it is empty, to avoid warnings from the foreach.
- if (empty($logs['logs'])) {
- $logs['logs'] = array();
- }
-
- foreach ($logs['logs'] as $log) {
-
- if (isset($ldcache[$log->module][$log->action])) {
- $ld = $ldcache[$log->module][$log->action];
- } else {
- $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
- $ldcache[$log->module][$log->action] = $ld;
- }
- if ($ld && is_numeric($log->info)) {
- // ugly hack to make sure fullname is shown correctly
- if ($ld->mtable == 'user' && $ld->field == $DB->sql_concat('firstname', "' '" , 'lastname')) {
- $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
- } else {
- $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
- }
- }
-
- //Filter log->info
- $log->info = format_string($log->info);
-
- // If $log->url has been trimmed short by the db size restriction
- // code in add_to_log, keep a note so we don't add a link to a broken url
- $brokenurl=(core_text::strlen($log->url)==100 && core_text::substr($log->url,97)=='...');
-
- $row = array();
- if ($course->id == SITEID) {
- if (empty($log->course)) {
- $row[] = get_string('site');
- } else {
- $row[] = "wwwroot}/course/view.php?id={$log->course}\">". format_string($courses[$log->course])."";
- }
- }
-
- $row[] = userdate($log->time, '%a').' '.userdate($log->time, $strftimedatetime);
-
- $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}"), fullname($log, has_capability('moodle/site:viewfullnames', context_course::instance($course->id))));
-
- $displayaction="$log->module $log->action";
- if ($brokenurl) {
- $row[] = $displayaction;
- } else {
- $link = make_log_url($log->module,$log->url);
- $row[] = $OUTPUT->action_link($link, $displayaction, new popup_action('click', $link, 'fromloglive'), array('height' => 440, 'width' => 700));
- }
- $row[] = $log->info;
- $table->data[] = $row;
- }
-
- echo html_writer::table($table);
- echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
-}
-
-
-function print_mnet_log($hostid, $course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
- $url="", $modname="", $modid=0, $modaction="", $groupid=0) {
-
- global $CFG, $DB, $OUTPUT;
-
- if (!$logs = build_mnet_logs_array($hostid, $course, $user, $date, $order, $page*$perpage, $perpage,
- $modname, $modid, $modaction, $groupid)) {
- echo $OUTPUT->notification("No logs found!");
- echo $OUTPUT->footer();
- exit;
- }
-
- if ($course->id == SITEID) {
- $courses[0] = '';
- if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname,c.visible')) {
- foreach ($ccc as $cc) {
- $courses[$cc->id] = $cc->shortname;
- }
- }
- }
-
- $totalcount = $logs['totalcount'];
- $count=0;
- $ldcache = array();
- $tt = getdate(time());
- $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
-
- $strftimedatetime = get_string("strftimedatetime");
-
- echo "\n";
- print_string("displayingrecords", "", $totalcount);
- echo "
\n";
-
- echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
-
- echo "\n";
- echo "";
- if ($course->id == SITEID) {
- echo "| ".get_string('course')." | \n";
- }
- echo "".get_string('time')." | \n";
- echo "".get_string('ip_address')." | \n";
- echo "".get_string('fullnameuser')." | \n";
- echo "".get_string('action')." | \n";
- echo "".get_string('info')." | \n";
- echo "
\n";
-
- if (empty($logs['logs'])) {
- echo "
\n";
- return;
- }
-
- $row = 1;
- foreach ($logs['logs'] as $log) {
-
- $log->info = $log->coursename;
- $row = ($row + 1) % 2;
-
- if (isset($ldcache[$log->module][$log->action])) {
- $ld = $ldcache[$log->module][$log->action];
- } else {
- $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
- $ldcache[$log->module][$log->action] = $ld;
- }
- if (0 && $ld && !empty($log->info)) {
- // ugly hack to make sure fullname is shown correctly
- if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
- $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
- } else {
- $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
- }
- }
-
- //Filter log->info
- $log->info = format_string($log->info);
-
- echo '';
- if ($course->id == SITEID) {
- $courseshortname = format_string($courses[$log->course], true, array('context' => context_course::instance(SITEID)));
- echo "| \n";
- echo " wwwroot}/course/view.php?id={$log->course}\">".$courseshortname."\n";
- echo " | \n";
- }
- echo "".userdate($log->time, '%a').
- ' '.userdate($log->time, $strftimedatetime)." | \n";
- echo "\n";
- $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 " | \n";
- $fullname = fullname($log, has_capability('moodle/site:viewfullnames', context_course::instance($course->id)));
- echo "\n";
- echo " wwwroot/user/view.php?id={$log->userid}\">$fullname\n";
- echo " | \n";
- echo "\n";
- echo $log->action .': '.$log->module;
- echo " | \n";
- echo "{$log->info} | \n";
- echo "
\n";
- }
- echo "\n";
-
- echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
-}
-
-
-function print_log_csv($course, $user, $date, $order='l.time DESC', $modname,
- $modid, $modaction, $groupid) {
- global $DB, $CFG;
-
- require_once($CFG->libdir . '/csvlib.class.php');
-
- $csvexporter = new csv_export_writer('tab');
-
- $header = array();
- $header[] = get_string('course');
- $header[] = get_string('time');
- $header[] = get_string('ip_address');
- $header[] = get_string('fullnameuser');
- $header[] = get_string('action');
- $header[] = get_string('info');
-
- if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
- $modname, $modid, $modaction, $groupid)) {
- return false;
- }
-
- $courses = array();
-
- if ($course->id == SITEID) {
- $courses[0] = '';
- if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
- foreach ($ccc as $cc) {
- $courses[$cc->id] = $cc->shortname;
- }
- }
- } else {
- $courses[$course->id] = $course->shortname;
- }
-
- $count=0;
- $ldcache = array();
- $tt = getdate(time());
- $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
-
- $strftimedatetime = get_string("strftimedatetime");
-
- $csvexporter->set_filename('logs', '.txt');
- $title = array(get_string('savedat').userdate(time(), $strftimedatetime));
- $csvexporter->add_data($title);
- $csvexporter->add_data($header);
-
- if (empty($logs['logs'])) {
- return true;
- }
-
- foreach ($logs['logs'] as $log) {
- if (isset($ldcache[$log->module][$log->action])) {
- $ld = $ldcache[$log->module][$log->action];
- } else {
- $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
- $ldcache[$log->module][$log->action] = $ld;
- }
- if ($ld && is_numeric($log->info)) {
- // ugly hack to make sure fullname is shown correctly
- if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
- $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
- } else {
- $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
- }
- }
-
- //Filter log->info
- $log->info = format_string($log->info);
- $log->info = strip_tags(urldecode($log->info)); // Some XSS protection
-
- $coursecontext = context_course::instance($course->id);
- $firstField = format_string($courses[$log->course], true, array('context' => $coursecontext));
- $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);
- }
- $csvexporter->download_file();
- return true;
-}
-
-
-function print_log_xls($course, $user, $date, $order='l.time DESC', $modname,
- $modid, $modaction, $groupid) {
-
- global $CFG, $DB;
-
- require_once("$CFG->libdir/excellib.class.php");
-
- if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
- $modname, $modid, $modaction, $groupid)) {
- return false;
- }
-
- $courses = array();
-
- if ($course->id == SITEID) {
- $courses[0] = '';
- if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
- foreach ($ccc as $cc) {
- $courses[$cc->id] = $cc->shortname;
- }
- }
- } else {
- $courses[$course->id] = $course->shortname;
- }
-
- $count=0;
- $ldcache = array();
- $tt = getdate(time());
- $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
-
- $strftimedatetime = get_string("strftimedatetime");
-
- $nroPages = ceil(count($logs)/(EXCELROWS-FIRSTUSEDEXCELROW+1));
- $filename = 'logs_'.userdate(time(),get_string('backupnameformat', 'langconfig'),99,false);
- $filename .= '.xls';
-
- $workbook = new MoodleExcelWorkbook('-');
- $workbook->send($filename);
-
- $worksheet = array();
- $headers = array(get_string('course'), get_string('time'), get_string('ip_address'),
- get_string('fullnameuser'), get_string('action'), get_string('info'));
-
- // Creating worksheets
- for ($wsnumber = 1; $wsnumber <= $nroPages; $wsnumber++) {
- $sheettitle = get_string('logs').' '.$wsnumber.'-'.$nroPages;
- $worksheet[$wsnumber] = $workbook->add_worksheet($sheettitle);
- $worksheet[$wsnumber]->set_column(1, 1, 30);
- $worksheet[$wsnumber]->write_string(0, 0, get_string('savedat').
- userdate(time(), $strftimedatetime));
- $col = 0;
- foreach ($headers as $item) {
- $worksheet[$wsnumber]->write(FIRSTUSEDEXCELROW-1,$col,$item,'');
- $col++;
- }
- }
-
- if (empty($logs['logs'])) {
- $workbook->close();
- return true;
- }
-
- $formatDate =& $workbook->add_format();
- $formatDate->set_num_format(get_string('log_excel_date_format'));
-
- $row = FIRSTUSEDEXCELROW;
- $wsnumber = 1;
- $myxls =& $worksheet[$wsnumber];
- foreach ($logs['logs'] as $log) {
- if (isset($ldcache[$log->module][$log->action])) {
- $ld = $ldcache[$log->module][$log->action];
- } else {
- $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
- $ldcache[$log->module][$log->action] = $ld;
- }
- if ($ld && is_numeric($log->info)) {
- // ugly hack to make sure fullname is shown correctly
- if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
- $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
- } else {
- $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
- }
- }
-
- // Filter log->info
- $log->info = format_string($log->info);
- $log->info = strip_tags(urldecode($log->info)); // Some XSS protection
-
- if ($nroPages>1) {
- if ($row > EXCELROWS) {
- $wsnumber++;
- $myxls =& $worksheet[$wsnumber];
- $row = FIRSTUSEDEXCELROW;
- }
- }
-
- $coursecontext = context_course::instance($course->id);
-
- $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 = 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.')', '');
- $myxls->write($row, 5, $log->info, '');
-
- $row++;
- }
-
- $workbook->close();
- return true;
-}
-
-function print_log_ods($course, $user, $date, $order='l.time DESC', $modname,
- $modid, $modaction, $groupid) {
-
- global $CFG, $DB;
-
- require_once("$CFG->libdir/odslib.class.php");
-
- if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
- $modname, $modid, $modaction, $groupid)) {
- return false;
- }
-
- $courses = array();
-
- if ($course->id == SITEID) {
- $courses[0] = '';
- if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
- foreach ($ccc as $cc) {
- $courses[$cc->id] = $cc->shortname;
- }
- }
- } else {
- $courses[$course->id] = $course->shortname;
- }
-
- $count=0;
- $ldcache = array();
- $tt = getdate(time());
- $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
-
- $strftimedatetime = get_string("strftimedatetime");
-
- $nroPages = ceil(count($logs)/(EXCELROWS-FIRSTUSEDEXCELROW+1));
- $filename = 'logs_'.userdate(time(),get_string('backupnameformat', 'langconfig'),99,false);
- $filename .= '.ods';
-
- $workbook = new MoodleODSWorkbook('-');
- $workbook->send($filename);
-
- $worksheet = array();
- $headers = array(get_string('course'), get_string('time'), get_string('ip_address'),
- get_string('fullnameuser'), get_string('action'), get_string('info'));
-
- // Creating worksheets
- for ($wsnumber = 1; $wsnumber <= $nroPages; $wsnumber++) {
- $sheettitle = get_string('logs').' '.$wsnumber.'-'.$nroPages;
- $worksheet[$wsnumber] = $workbook->add_worksheet($sheettitle);
- $worksheet[$wsnumber]->set_column(1, 1, 30);
- $worksheet[$wsnumber]->write_string(0, 0, get_string('savedat').
- userdate(time(), $strftimedatetime));
- $col = 0;
- foreach ($headers as $item) {
- $worksheet[$wsnumber]->write(FIRSTUSEDEXCELROW-1,$col,$item,'');
- $col++;
- }
- }
-
- if (empty($logs['logs'])) {
- $workbook->close();
- return true;
- }
-
- $formatDate =& $workbook->add_format();
- $formatDate->set_num_format(get_string('log_excel_date_format'));
-
- $row = FIRSTUSEDEXCELROW;
- $wsnumber = 1;
- $myxls =& $worksheet[$wsnumber];
- foreach ($logs['logs'] as $log) {
- if (isset($ldcache[$log->module][$log->action])) {
- $ld = $ldcache[$log->module][$log->action];
- } else {
- $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
- $ldcache[$log->module][$log->action] = $ld;
- }
- if ($ld && is_numeric($log->info)) {
- // ugly hack to make sure fullname is shown correctly
- if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
- $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
- } else {
- $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
- }
- }
-
- // Filter log->info
- $log->info = format_string($log->info);
- $log->info = strip_tags(urldecode($log->info)); // Some XSS protection
-
- if ($nroPages>1) {
- if ($row > EXCELROWS) {
- $wsnumber++;
- $myxls =& $worksheet[$wsnumber];
- $row = FIRSTUSEDEXCELROW;
- }
- }
-
- $coursecontext = context_course::instance($course->id);
-
- $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 = 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.')');
- $myxls->write_string($row, 5, $log->info);
-
- $row++;
- }
-
- $workbook->close();
- return true;
-}
-
/**
* Checks the integrity of the course data.
*
diff --git a/lib/datalib.php b/lib/datalib.php
index 43e2411beb3..96a940cf683 100644
--- a/lib/datalib.php
+++ b/lib/datalib.php
@@ -1671,116 +1671,6 @@ function user_accesstime_log($courseid=0) {
}
}
-/**
- * Select all log records based on SQL criteria
- *
- * @package core
- * @category log
- * @global moodle_database $DB
- * @param string $select SQL select criteria
- * @param array $params named sql type params
- * @param string $order SQL order by clause to sort the records returned
- * @param string $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set)
- * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set)
- * @param int $totalcount Passed in by reference.
- * @return array
- */
-function get_logs($select, array $params=null, $order='l.time DESC', $limitfrom='', $limitnum='', &$totalcount) {
- global $DB;
-
- if ($order) {
- $order = "ORDER BY $order";
- }
-
- $selectsql = "";
- $countsql = "";
-
- if ($select) {
- $select = "WHERE $select";
- }
-
- $sql = "SELECT COUNT(*)
- FROM {log} l
- $select";
-
- $totalcount = $DB->count_records_sql($sql, $params);
- $allnames = get_all_user_name_fields(true, 'u');
- $sql = "SELECT l.*, $allnames, u.picture
- FROM {log} l
- LEFT JOIN {user} u ON l.userid = u.id
- $select
- $order";
-
- return $DB->get_records_sql($sql, $params, $limitfrom, $limitnum) ;
-}
-
-
-/**
- * Select all log records for a given course and user
- *
- * @package core
- * @category log
- * @global moodle_database $DB
- * @uses DAYSECS
- * @param int $userid The id of the user as found in the 'user' table.
- * @param int $courseid The id of the course as found in the 'course' table.
- * @param string $coursestart unix timestamp representing course start date and time.
- * @return array
- */
-function get_logs_usercourse($userid, $courseid, $coursestart) {
- global $DB;
-
- $params = array();
-
- $courseselect = '';
- if ($courseid) {
- $courseselect = "AND course = :courseid";
- $params['courseid'] = $courseid;
- }
- $params['userid'] = $userid;
- // We have to sanitize this param ourselves here instead of relying on DB.
- // Postgres complains if you use name parameter or column alias in GROUP BY.
- // See MDL-27696 and 51c3e85 for details.
- $coursestart = (int)$coursestart;
-
- return $DB->get_records_sql("SELECT FLOOR((time - $coursestart)/". DAYSECS .") AS day, COUNT(*) AS num
- FROM {log}
- WHERE userid = :userid
- AND time > $coursestart $courseselect
- GROUP BY FLOOR((time - $coursestart)/". DAYSECS .")", $params);
-}
-
-/**
- * Select all log records for a given course, user, and day
- *
- * @package core
- * @category log
- * @global moodle_database $DB
- * @uses HOURSECS
- * @param int $userid The id of the user as found in the 'user' table.
- * @param int $courseid The id of the course as found in the 'course' table.
- * @param string $daystart unix timestamp of the start of the day for which the logs needs to be retrived
- * @return array
- */
-function get_logs_userday($userid, $courseid, $daystart) {
- global $DB;
-
- $params = array('userid'=>$userid);
-
- $courseselect = '';
- if ($courseid) {
- $courseselect = "AND course = :courseid";
- $params['courseid'] = $courseid;
- }
- $daystart = (int)$daystart; // note: unfortunately pg complains if you use name parameter or column alias in GROUP BY
-
- return $DB->get_records_sql("SELECT FLOOR((time - $daystart)/". HOURSECS .") AS hour, COUNT(*) AS num
- FROM {log}
- WHERE userid = :userid
- AND time > $daystart $courseselect
- GROUP BY FLOOR((time - $daystart)/". HOURSECS .") ", $params);
-}
-
/// GENERAL HELPFUL THINGS ///////////////////////////////////
/**
diff --git a/lib/deprecatedlib.php b/lib/deprecatedlib.php
index 375906a6ec6..01bd4caf5ad 100644
--- a/lib/deprecatedlib.php
+++ b/lib/deprecatedlib.php
@@ -5618,3 +5618,756 @@ function message_is_user_blocked($recipient, $sender = null) {
return \core_message\api::is_user_blocked($recipient, $sender);
}
+
+/**
+ * Display logs.
+ *
+ * @deprecated since 3.2
+ */
+function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
+ $url="", $modname="", $modid=0, $modaction="", $groupid=0) {
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ global $CFG, $DB, $OUTPUT;
+
+ if (!$logs = build_logs_array($course, $user, $date, $order, $page*$perpage, $perpage,
+ $modname, $modid, $modaction, $groupid)) {
+ echo $OUTPUT->notification("No logs found!");
+ echo $OUTPUT->footer();
+ exit;
+ }
+
+ $courses = array();
+
+ if ($course->id == SITEID) {
+ $courses[0] = '';
+ if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+ foreach ($ccc as $cc) {
+ $courses[$cc->id] = $cc->shortname;
+ }
+ }
+ } else {
+ $courses[$course->id] = $course->shortname;
+ }
+
+ $totalcount = $logs['totalcount'];
+ $ldcache = array();
+
+ $strftimedatetime = get_string("strftimedatetime");
+
+ echo "\n";
+ print_string("displayingrecords", "", $totalcount);
+ echo "
\n";
+
+ echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
+
+ $table = new html_table();
+ $table->classes = array('logtable','generaltable');
+ $table->align = array('right', 'left', 'left');
+ $table->head = array(
+ get_string('time'),
+ get_string('ip_address'),
+ get_string('fullnameuser'),
+ get_string('action'),
+ get_string('info')
+ );
+ $table->data = array();
+
+ if ($course->id == SITEID) {
+ array_unshift($table->align, 'left');
+ array_unshift($table->head, get_string('course'));
+ }
+
+ // Make sure that the logs array is an array, even it is empty, to avoid warnings from the foreach.
+ if (empty($logs['logs'])) {
+ $logs['logs'] = array();
+ }
+
+ foreach ($logs['logs'] as $log) {
+
+ if (isset($ldcache[$log->module][$log->action])) {
+ $ld = $ldcache[$log->module][$log->action];
+ } else {
+ $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
+ $ldcache[$log->module][$log->action] = $ld;
+ }
+ if ($ld && is_numeric($log->info)) {
+ // ugly hack to make sure fullname is shown correctly
+ if ($ld->mtable == 'user' && $ld->field == $DB->sql_concat('firstname', "' '" , 'lastname')) {
+ $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
+ } else {
+ $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
+ }
+ }
+
+ //Filter log->info
+ $log->info = format_string($log->info);
+
+ // If $log->url has been trimmed short by the db size restriction
+ // code in add_to_log, keep a note so we don't add a link to a broken url
+ $brokenurl=(core_text::strlen($log->url)==100 && core_text::substr($log->url,97)=='...');
+
+ $row = array();
+ if ($course->id == SITEID) {
+ if (empty($log->course)) {
+ $row[] = get_string('site');
+ } else {
+ $row[] = "wwwroot}/course/view.php?id={$log->course}\">". format_string($courses[$log->course])."";
+ }
+ }
+
+ $row[] = userdate($log->time, '%a').' '.userdate($log->time, $strftimedatetime);
+
+ $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}"), fullname($log, has_capability('moodle/site:viewfullnames', context_course::instance($course->id))));
+
+ $displayaction="$log->module $log->action";
+ if ($brokenurl) {
+ $row[] = $displayaction;
+ } else {
+ $link = make_log_url($log->module,$log->url);
+ $row[] = $OUTPUT->action_link($link, $displayaction, new popup_action('click', $link, 'fromloglive'), array('height' => 440, 'width' => 700));
+ }
+ $row[] = $log->info;
+ $table->data[] = $row;
+ }
+
+ echo html_writer::table($table);
+ echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
+}
+
+/**
+ * Display MNET logs.
+ *
+ * @deprecated since 3.2
+ */
+function print_mnet_log($hostid, $course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
+ $url="", $modname="", $modid=0, $modaction="", $groupid=0) {
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ global $CFG, $DB, $OUTPUT;
+
+ if (!$logs = build_mnet_logs_array($hostid, $course, $user, $date, $order, $page*$perpage, $perpage,
+ $modname, $modid, $modaction, $groupid)) {
+ echo $OUTPUT->notification("No logs found!");
+ echo $OUTPUT->footer();
+ exit;
+ }
+
+ if ($course->id == SITEID) {
+ $courses[0] = '';
+ if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname,c.visible')) {
+ foreach ($ccc as $cc) {
+ $courses[$cc->id] = $cc->shortname;
+ }
+ }
+ }
+
+ $totalcount = $logs['totalcount'];
+ $ldcache = array();
+
+ $strftimedatetime = get_string("strftimedatetime");
+
+ echo "\n";
+ print_string("displayingrecords", "", $totalcount);
+ echo "
\n";
+
+ echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
+
+ echo "\n";
+ echo "";
+ if ($course->id == SITEID) {
+ echo "| ".get_string('course')." | \n";
+ }
+ echo "".get_string('time')." | \n";
+ echo "".get_string('ip_address')." | \n";
+ echo "".get_string('fullnameuser')." | \n";
+ echo "".get_string('action')." | \n";
+ echo "".get_string('info')." | \n";
+ echo "
\n";
+
+ if (empty($logs['logs'])) {
+ echo "
\n";
+ return;
+ }
+
+ $row = 1;
+ foreach ($logs['logs'] as $log) {
+
+ $log->info = $log->coursename;
+ $row = ($row + 1) % 2;
+
+ if (isset($ldcache[$log->module][$log->action])) {
+ $ld = $ldcache[$log->module][$log->action];
+ } else {
+ $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
+ $ldcache[$log->module][$log->action] = $ld;
+ }
+ if (0 && $ld && !empty($log->info)) {
+ // ugly hack to make sure fullname is shown correctly
+ if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
+ $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
+ } else {
+ $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
+ }
+ }
+
+ //Filter log->info
+ $log->info = format_string($log->info);
+
+ echo '';
+ if ($course->id == SITEID) {
+ $courseshortname = format_string($courses[$log->course], true, array('context' => context_course::instance(SITEID)));
+ echo "| \n";
+ echo " wwwroot}/course/view.php?id={$log->course}\">".$courseshortname."\n";
+ echo " | \n";
+ }
+ echo "".userdate($log->time, '%a').
+ ' '.userdate($log->time, $strftimedatetime)." | \n";
+ echo "\n";
+ $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 " | \n";
+ $fullname = fullname($log, has_capability('moodle/site:viewfullnames', context_course::instance($course->id)));
+ echo "\n";
+ echo " wwwroot/user/view.php?id={$log->userid}\">$fullname\n";
+ echo " | \n";
+ echo "\n";
+ echo $log->action .': '.$log->module;
+ echo " | \n";
+ echo "{$log->info} | \n";
+ echo "
\n";
+ }
+ echo "\n";
+
+ echo $OUTPUT->paging_bar($totalcount, $page, $perpage, "$url&perpage=$perpage");
+}
+
+/**
+ * Display logs in CSV format.
+ *
+ * @deprecated since 3.2
+ */
+function print_log_csv($course, $user, $date, $order='l.time DESC', $modname,
+ $modid, $modaction, $groupid) {
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ global $DB, $CFG;
+
+ require_once($CFG->libdir . '/csvlib.class.php');
+
+ $csvexporter = new csv_export_writer('tab');
+
+ $header = array();
+ $header[] = get_string('course');
+ $header[] = get_string('time');
+ $header[] = get_string('ip_address');
+ $header[] = get_string('fullnameuser');
+ $header[] = get_string('action');
+ $header[] = get_string('info');
+
+ if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
+ $modname, $modid, $modaction, $groupid)) {
+ return false;
+ }
+
+ $courses = array();
+
+ if ($course->id == SITEID) {
+ $courses[0] = '';
+ if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+ foreach ($ccc as $cc) {
+ $courses[$cc->id] = $cc->shortname;
+ }
+ }
+ } else {
+ $courses[$course->id] = $course->shortname;
+ }
+
+ $count=0;
+ $ldcache = array();
+ $tt = getdate(time());
+ $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
+
+ $strftimedatetime = get_string("strftimedatetime");
+
+ $csvexporter->set_filename('logs', '.txt');
+ $title = array(get_string('savedat').userdate(time(), $strftimedatetime));
+ $csvexporter->add_data($title);
+ $csvexporter->add_data($header);
+
+ if (empty($logs['logs'])) {
+ return true;
+ }
+
+ foreach ($logs['logs'] as $log) {
+ if (isset($ldcache[$log->module][$log->action])) {
+ $ld = $ldcache[$log->module][$log->action];
+ } else {
+ $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
+ $ldcache[$log->module][$log->action] = $ld;
+ }
+ if ($ld && is_numeric($log->info)) {
+ // ugly hack to make sure fullname is shown correctly
+ if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
+ $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
+ } else {
+ $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
+ }
+ }
+
+ //Filter log->info
+ $log->info = format_string($log->info);
+ $log->info = strip_tags(urldecode($log->info)); // Some XSS protection
+
+ $coursecontext = context_course::instance($course->id);
+ $firstField = format_string($courses[$log->course], true, array('context' => $coursecontext));
+ $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);
+ }
+ $csvexporter->download_file();
+ return true;
+}
+
+/**
+ * Display logs in XLS format.
+ *
+ * @deprecated since 3.2
+ */
+function print_log_xls($course, $user, $date, $order='l.time DESC', $modname,
+ $modid, $modaction, $groupid) {
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ global $CFG, $DB;
+
+ require_once("$CFG->libdir/excellib.class.php");
+
+ if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
+ $modname, $modid, $modaction, $groupid)) {
+ return false;
+ }
+
+ $courses = array();
+
+ if ($course->id == SITEID) {
+ $courses[0] = '';
+ if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+ foreach ($ccc as $cc) {
+ $courses[$cc->id] = $cc->shortname;
+ }
+ }
+ } else {
+ $courses[$course->id] = $course->shortname;
+ }
+
+ $count=0;
+ $ldcache = array();
+ $tt = getdate(time());
+ $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
+
+ $strftimedatetime = get_string("strftimedatetime");
+
+ $nroPages = ceil(count($logs)/(EXCELROWS-FIRSTUSEDEXCELROW+1));
+ $filename = 'logs_'.userdate(time(),get_string('backupnameformat', 'langconfig'),99,false);
+ $filename .= '.xls';
+
+ $workbook = new MoodleExcelWorkbook('-');
+ $workbook->send($filename);
+
+ $worksheet = array();
+ $headers = array(get_string('course'), get_string('time'), get_string('ip_address'),
+ get_string('fullnameuser'), get_string('action'), get_string('info'));
+
+ // Creating worksheets
+ for ($wsnumber = 1; $wsnumber <= $nroPages; $wsnumber++) {
+ $sheettitle = get_string('logs').' '.$wsnumber.'-'.$nroPages;
+ $worksheet[$wsnumber] = $workbook->add_worksheet($sheettitle);
+ $worksheet[$wsnumber]->set_column(1, 1, 30);
+ $worksheet[$wsnumber]->write_string(0, 0, get_string('savedat').
+ userdate(time(), $strftimedatetime));
+ $col = 0;
+ foreach ($headers as $item) {
+ $worksheet[$wsnumber]->write(FIRSTUSEDEXCELROW-1,$col,$item,'');
+ $col++;
+ }
+ }
+
+ if (empty($logs['logs'])) {
+ $workbook->close();
+ return true;
+ }
+
+ $formatDate =& $workbook->add_format();
+ $formatDate->set_num_format(get_string('log_excel_date_format'));
+
+ $row = FIRSTUSEDEXCELROW;
+ $wsnumber = 1;
+ $myxls =& $worksheet[$wsnumber];
+ foreach ($logs['logs'] as $log) {
+ if (isset($ldcache[$log->module][$log->action])) {
+ $ld = $ldcache[$log->module][$log->action];
+ } else {
+ $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
+ $ldcache[$log->module][$log->action] = $ld;
+ }
+ if ($ld && is_numeric($log->info)) {
+ // ugly hack to make sure fullname is shown correctly
+ if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
+ $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
+ } else {
+ $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
+ }
+ }
+
+ // Filter log->info
+ $log->info = format_string($log->info);
+ $log->info = strip_tags(urldecode($log->info)); // Some XSS protection
+
+ if ($nroPages>1) {
+ if ($row > EXCELROWS) {
+ $wsnumber++;
+ $myxls =& $worksheet[$wsnumber];
+ $row = FIRSTUSEDEXCELROW;
+ }
+ }
+
+ $coursecontext = context_course::instance($course->id);
+
+ $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 = 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.')', '');
+ $myxls->write($row, 5, $log->info, '');
+
+ $row++;
+ }
+
+ $workbook->close();
+ return true;
+}
+
+/**
+ * Display logs in ODS format.
+ *
+ * @deprecated since 3.2
+ */
+function print_log_ods($course, $user, $date, $order='l.time DESC', $modname,
+ $modid, $modaction, $groupid) {
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ global $CFG, $DB;
+
+ require_once("$CFG->libdir/odslib.class.php");
+
+ if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
+ $modname, $modid, $modaction, $groupid)) {
+ return false;
+ }
+
+ $courses = array();
+
+ if ($course->id == SITEID) {
+ $courses[0] = '';
+ if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+ foreach ($ccc as $cc) {
+ $courses[$cc->id] = $cc->shortname;
+ }
+ }
+ } else {
+ $courses[$course->id] = $course->shortname;
+ }
+
+ $ldcache = array();
+
+ $strftimedatetime = get_string("strftimedatetime");
+
+ $nroPages = ceil(count($logs)/(EXCELROWS-FIRSTUSEDEXCELROW+1));
+ $filename = 'logs_'.userdate(time(),get_string('backupnameformat', 'langconfig'),99,false);
+ $filename .= '.ods';
+
+ $workbook = new MoodleODSWorkbook('-');
+ $workbook->send($filename);
+
+ $worksheet = array();
+ $headers = array(get_string('course'), get_string('time'), get_string('ip_address'),
+ get_string('fullnameuser'), get_string('action'), get_string('info'));
+
+ // Creating worksheets
+ for ($wsnumber = 1; $wsnumber <= $nroPages; $wsnumber++) {
+ $sheettitle = get_string('logs').' '.$wsnumber.'-'.$nroPages;
+ $worksheet[$wsnumber] = $workbook->add_worksheet($sheettitle);
+ $worksheet[$wsnumber]->set_column(1, 1, 30);
+ $worksheet[$wsnumber]->write_string(0, 0, get_string('savedat').
+ userdate(time(), $strftimedatetime));
+ $col = 0;
+ foreach ($headers as $item) {
+ $worksheet[$wsnumber]->write(FIRSTUSEDEXCELROW-1,$col,$item,'');
+ $col++;
+ }
+ }
+
+ if (empty($logs['logs'])) {
+ $workbook->close();
+ return true;
+ }
+
+ $formatDate =& $workbook->add_format();
+ $formatDate->set_num_format(get_string('log_excel_date_format'));
+
+ $row = FIRSTUSEDEXCELROW;
+ $wsnumber = 1;
+ $myxls =& $worksheet[$wsnumber];
+ foreach ($logs['logs'] as $log) {
+ if (isset($ldcache[$log->module][$log->action])) {
+ $ld = $ldcache[$log->module][$log->action];
+ } else {
+ $ld = $DB->get_record('log_display', array('module'=>$log->module, 'action'=>$log->action));
+ $ldcache[$log->module][$log->action] = $ld;
+ }
+ if ($ld && is_numeric($log->info)) {
+ // ugly hack to make sure fullname is shown correctly
+ if (($ld->mtable == 'user') and ($ld->field == $DB->sql_concat('firstname', "' '" , 'lastname'))) {
+ $log->info = fullname($DB->get_record($ld->mtable, array('id'=>$log->info)), true);
+ } else {
+ $log->info = $DB->get_field($ld->mtable, $ld->field, array('id'=>$log->info));
+ }
+ }
+
+ // Filter log->info
+ $log->info = format_string($log->info);
+ $log->info = strip_tags(urldecode($log->info)); // Some XSS protection
+
+ if ($nroPages>1) {
+ if ($row > EXCELROWS) {
+ $wsnumber++;
+ $myxls =& $worksheet[$wsnumber];
+ $row = FIRSTUSEDEXCELROW;
+ }
+ }
+
+ $coursecontext = context_course::instance($course->id);
+
+ $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 = 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.')');
+ $myxls->write_string($row, 5, $log->info);
+
+ $row++;
+ }
+
+ $workbook->close();
+ return true;
+}
+
+/**
+ * Build an array of logs.
+ *
+ * @deprecated since 3.2
+ */
+function build_logs_array($course, $user=0, $date=0, $order="l.time ASC", $limitfrom='', $limitnum='',
+ $modname="", $modid=0, $modaction="", $groupid=0) {
+ global $DB, $SESSION, $USER;
+
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+ // It is assumed that $date is the GMT time of midnight for that day,
+ // and so the next 86400 seconds worth of logs are printed.
+
+ // Setup for group handling.
+
+ // If the group mode is separate, and this user does not have editing privileges,
+ // then only the user's group can be viewed.
+ if ($course->groupmode == SEPARATEGROUPS and !has_capability('moodle/course:managegroups', context_course::instance($course->id))) {
+ if (isset($SESSION->currentgroup[$course->id])) {
+ $groupid = $SESSION->currentgroup[$course->id];
+ } else {
+ $groupid = groups_get_all_groups($course->id, $USER->id);
+ if (is_array($groupid)) {
+ $groupid = array_shift(array_keys($groupid));
+ $SESSION->currentgroup[$course->id] = $groupid;
+ } else {
+ $groupid = 0;
+ }
+ }
+ }
+ // If this course doesn't have groups, no groupid can be specified.
+ else if (!$course->groupmode) {
+ $groupid = 0;
+ }
+
+ $joins = array();
+ $params = array();
+
+ if ($course->id != SITEID || $modid != 0) {
+ $joins[] = "l.course = :courseid";
+ $params['courseid'] = $course->id;
+ }
+
+ if ($modname) {
+ $joins[] = "l.module = :modname";
+ $params['modname'] = $modname;
+ }
+
+ if ('site_errors' === $modid) {
+ $joins[] = "( l.action='error' OR l.action='infected' )";
+ } else if ($modid) {
+ $joins[] = "l.cmid = :modid";
+ $params['modid'] = $modid;
+ }
+
+ if ($modaction) {
+ $firstletter = substr($modaction, 0, 1);
+ if ($firstletter == '-') {
+ $joins[] = $DB->sql_like('l.action', ':modaction', false, true, true);
+ $params['modaction'] = '%'.substr($modaction, 1).'%';
+ } else {
+ $joins[] = $DB->sql_like('l.action', ':modaction', false);
+ $params['modaction'] = '%'.$modaction.'%';
+ }
+ }
+
+
+ /// Getting all members of a group.
+ if ($groupid and !$user) {
+ if ($gusers = groups_get_members($groupid)) {
+ $gusers = array_keys($gusers);
+ $joins[] = 'l.userid IN (' . implode(',', $gusers) . ')';
+ } else {
+ $joins[] = 'l.userid = 0'; // No users in groups, so we want something that will always be false.
+ }
+ }
+ else if ($user) {
+ $joins[] = "l.userid = :userid";
+ $params['userid'] = $user;
+ }
+
+ if ($date) {
+ $enddate = $date + 86400;
+ $joins[] = "l.time > :date AND l.time < :enddate";
+ $params['date'] = $date;
+ $params['enddate'] = $enddate;
+ }
+
+ $selector = implode(' AND ', $joins);
+
+ $totalcount = 0; // Initialise
+ $result = array();
+ $result['logs'] = get_logs($selector, $params, $order, $limitfrom, $limitnum, $totalcount);
+ $result['totalcount'] = $totalcount;
+ return $result;
+}
+
+/**
+ * Select all log records for a given course and user.
+ *
+ * @deprecated since 3.2
+ * @param int $userid The id of the user as found in the 'user' table.
+ * @param int $courseid The id of the course as found in the 'course' table.
+ * @param string $coursestart unix timestamp representing course start date and time.
+ * @return array
+ */
+function get_logs_usercourse($userid, $courseid, $coursestart) {
+ global $DB;
+
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ $params = array();
+
+ $courseselect = '';
+ if ($courseid) {
+ $courseselect = "AND course = :courseid";
+ $params['courseid'] = $courseid;
+ }
+ $params['userid'] = $userid;
+ // We have to sanitize this param ourselves here instead of relying on DB.
+ // Postgres complains if you use name parameter or column alias in GROUP BY.
+ // See MDL-27696 and 51c3e85 for details.
+ $coursestart = (int)$coursestart;
+
+ return $DB->get_records_sql("SELECT FLOOR((time - $coursestart)/". DAYSECS .") AS day, COUNT(*) AS num
+ FROM {log}
+ WHERE userid = :userid
+ AND time > $coursestart $courseselect
+ GROUP BY FLOOR((time - $coursestart)/". DAYSECS .")", $params);
+}
+
+/**
+ * Select all log records for a given course, user, and day.
+ *
+ * @deprecated since 3.2
+ * @param int $userid The id of the user as found in the 'user' table.
+ * @param int $courseid The id of the course as found in the 'course' table.
+ * @param string $daystart unix timestamp of the start of the day for which the logs needs to be retrived
+ * @return array
+ */
+function get_logs_userday($userid, $courseid, $daystart) {
+ global $DB;
+
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ $params = array('userid'=>$userid);
+
+ $courseselect = '';
+ if ($courseid) {
+ $courseselect = "AND course = :courseid";
+ $params['courseid'] = $courseid;
+ }
+ // Note: unfortunately pg complains if you use name parameter or column alias in GROUP BY.
+ $daystart = (int) $daystart;
+
+ return $DB->get_records_sql("SELECT FLOOR((time - $daystart)/". HOURSECS .") AS hour, COUNT(*) AS num
+ FROM {log}
+ WHERE userid = :userid
+ AND time > $daystart $courseselect
+ GROUP BY FLOOR((time - $daystart)/". HOURSECS .") ", $params);
+}
+
+/**
+ * Select all log records based on SQL criteria.
+ *
+ * @deprecated since 3.2
+ * @param string $select SQL select criteria
+ * @param array $params named sql type params
+ * @param string $order SQL order by clause to sort the records returned
+ * @param string $limitfrom return a subset of records, starting at this point (optional, required if $limitnum is set)
+ * @param int $limitnum return a subset comprising this many records (optional, required if $limitfrom is set)
+ * @param int $totalcount Passed in by reference.
+ * @return array
+ */
+function get_logs($select, array $params=null, $order='l.time DESC', $limitfrom='', $limitnum='', &$totalcount) {
+ global $DB;
+
+ debugging(__FUNCTION__ . '() is deprecated. Please use the report_log framework instead.', DEBUG_DEVELOPER);
+
+ if ($order) {
+ $order = "ORDER BY $order";
+ }
+
+ if ($select) {
+ $select = "WHERE $select";
+ }
+
+ $sql = "SELECT COUNT(*)
+ FROM {log} l
+ $select";
+
+ $totalcount = $DB->count_records_sql($sql, $params);
+ $allnames = get_all_user_name_fields(true, 'u');
+ $sql = "SELECT l.*, $allnames, u.picture
+ FROM {log} l
+ LEFT JOIN {user} u ON l.userid = u.id
+ $select
+ $order";
+
+ return $DB->get_records_sql($sql, $params, $limitfrom, $limitnum) ;
+}
diff --git a/lib/upgrade.txt b/lib/upgrade.txt
index a976d78ac4c..e7966bb9fc6 100644
--- a/lib/upgrade.txt
+++ b/lib/upgrade.txt
@@ -28,6 +28,15 @@ information provided here is intended especially for developers.
- put_records_csv() Please use download_as_dataformat (lib/dataformatlib.php) instead.
- zip_files() - See MDL-24343 for more information.
- unzip_file() - See MDL-24343 for more information.
+ - print_log - See MDL-43681 for more information
+ - print_log_csv - See MDL-43681 for more information
+ - print_log_ods - See MDL-43681 for more information
+ - print_log_xls - See MDL-43681 for more information
+ - print_mnet_log - See MDL-43681 for more information
+ - build_logs_array - See MDL-43681 for more information
+ - get_logs - See MDL-43681 for more information
+ - get_logs_usercourse - See MDL-43681 for more information
+ - get_logs_userdat - See MDL-43681 for more information
* The password_compat library was removed as it is no longer required.
* Phpunit has been upgraded to 5.4.x and following has been deprecated and is not used any more:
- setExpectedException(), use @expectedException or $this->expectException() and $this->expectExceptionMessage()