<?php // $Id: reportsgraph.php,v 1.8.2.3 2008/11/29 14:30:58 skodak Exp $ require_once '../../../config.php'; require_once $CFG->dirroot . '/lib/statslib.php'; require_once $CFG->dirroot . '/lib/graphlib.php'; $report = required_param('report', PARAM_INT); $time = required_param('time', PARAM_INT); $numcourses = required_param('numcourses', PARAM_INT); require_login(); require_capability('report/courseoverview:view', get_context_instance(CONTEXT_SYSTEM)); stats_check_uptodate(); $param = stats_get_parameters($time, $report, SITEID, STATS_MODE_RANKED); if (!empty($param->sql)) { $sql = $param->sql; } else { $sql = "SELECT courseid," . $param->fields . " FROM " . $CFG->prefix . 'stats_' . $param->table . " WHERE timeend >= {$param->timeafter} AND stattype = 'activity' AND roleid = 0" . " GROUP BY courseid " . $param->extras . " ORDER BY " . $param->orderby; } $courses = get_records_sql($sql, 0, $numcourses); if (empty($courses)) { print_error('statsnodata', "", $CFG->wwwroot . '/' . $CFG->admin . '/report/courseoverview/index.php'); } $graph = new graph(750, 400); $graph->parameter['legend'] = 'outside-right'; $graph->parameter['legend_size'] = 10; $graph->parameter['x_axis_angle'] = 90; $graph->parameter['title'] = false; // moodle will do a nicer job. $graph->y_tick_labels = null; $graph->offset_relation = null; if ($report != STATS_REPORT_ACTIVE_COURSES) {
print_log_graph($course, $user->id, "userday.png"); echo '</div>'; print_log($course, $user->id, usergetmidnight(time()), "l.time DESC", $page, $perpage, "user.php?id={$course->id}&user={$user->id}&mode={$mode}"); break; case "alllogs": echo '<div class="graph">'; print_log_graph($course, $user->id, "usercourse.png"); echo '</div>'; print_log($course, $user->id, 0, "l.time DESC", $page, $perpage, "user.php?id={$course->id}&user={$user->id}&mode={$mode}"); break; case 'stats': if (empty($CFG->enablestats)) { error("Stats is not enabled."); } require_once $CFG->dirroot . '/lib/statslib.php'; $statsstatus = stats_check_uptodate($course->id); if ($statsstatus !== NULL) { notify($statsstatus); } $earliestday = get_field_sql('SELECT timeend FROM ' . $CFG->prefix . 'stats_user_daily ORDER BY timeend'); $earliestweek = get_field_sql('SELECT timeend FROM ' . $CFG->prefix . 'stats_user_weekly ORDER BY timeend'); $earliestmonth = get_field_sql('SELECT timeend FROM ' . $CFG->prefix . 'stats_user_monthly ORDER BY timeend'); if (empty($earliestday)) { $earliestday = time(); } if (empty($earliestweek)) { $earliestweek = time(); } if (empty($earliestmonth)) { $earliestmonth = time(); }
/** * Fetch statistics data and generate a line chart. * * The statistic chart can be view, posts separated by roles and dates. * * @param int $courseid course id. * @param int $report the report type constant eg. STATS_REPORT_LOGINS as defined on statslib. * @param int $time timestamp of the selected time period. * @param int $mode the report mode, eg. STATS_MODE_DETAILED as defined on statslib. * @param int $userid selected user id. * @param int $roleid selected role id. */ function report_stats_print_chart($courseid, $report, $time, $mode, $userid = 0, $roleid = 0) { global $DB, $CFG, $OUTPUT; $course = $DB->get_record("course", array("id" => $courseid), '*', MUST_EXIST); $coursecontext = context_course::instance($course->id); stats_check_uptodate($course->id); $param = stats_get_parameters($time, $report, $course->id, $mode); if (!empty($userid)) { $param->table = 'user_' . $param->table; } // TODO: cleanup this ugly mess. $sql = 'SELECT ' . (empty($param->fieldscomplete) ? 'id,roleid,timeend,' : '') . $param->fields . ' FROM {stats_' . $param->table . '} WHERE ' . ($course->id == SITEID ? '' : ' courseid = ' . $course->id . ' AND ') . (!empty($userid) ? ' userid = ' . $userid . ' AND ' : '') . (!empty($roleid) ? ' roleid = ' . $roleid . ' AND ' : '') . (!empty($param->stattype) ? ' stattype = \'' . $param->stattype . '\' AND ' : '') . ' timeend >= ' . $param->timeafter . ' ' . $param->extras . ' ORDER BY timeend DESC'; $stats = $DB->get_records_sql($sql, $param->params); $stats = stats_fix_zeros($stats, $param->timeafter, $param->table, !empty($param->line2), !empty($param->line3)); $stats = array_reverse($stats); $chart = new \core\chart_line(); if (empty($param->crosstab)) { $data = []; $times = []; foreach ($stats as $stat) { // Build the array of formatted times indexed by timestamp used as labels. if (!array_key_exists($stat->timeend, $times)) { $times[$stat->timeend] = userdate($stat->timeend, get_string('strftimedate'), $CFG->timezone); // Just add the data if the time hasn't been added yet. // The number of lines of data must match the number of labels. $data['line1'][] = $stat->line1; if (isset($stat->line2)) { $data['line2'][] = $stat->line2; } if (isset($stat->line3)) { $data['line3'][] = $stat->line3; } } } foreach ($data as $line => $serie) { $series = new \core\chart_series($param->{$line}, array_values($serie)); $chart->add_series($series); } } else { $data = array(); $times = array(); $roles = array(); $missedlines = array(); $rolenames = role_fix_names(get_all_roles($coursecontext), $coursecontext, ROLENAME_ALIAS, true); foreach ($stats as $stat) { $data[$stat->roleid][$stat->timeend] = $stat->line1; if (!empty($stat->zerofixed)) { $missedlines[] = $stat->timeend; } if ($stat->roleid != 0) { if (!array_key_exists($stat->roleid, $roles)) { $roles[$stat->roleid] = $rolenames[$stat->roleid]; } } else { if (!array_key_exists($stat->roleid, $roles)) { $roles[$stat->roleid] = get_string('all'); } } // Build the array of formatted times indexed by timestamp used as labels. if (!array_key_exists($stat->timeend, $times)) { $times[$stat->timeend] = userdate($stat->timeend, get_string('strftimedate'), $CFG->timezone); } } // Fill empty days with zero to avoid chart errors. foreach (array_keys($times) as $t) { foreach ($data as $roleid => $stuff) { if (!array_key_exists($t, $stuff)) { $data[$roleid][$t] = 0; } } } krsort($roles); foreach ($roles as $roleid => $rolename) { ksort($data[$roleid]); $series = new \core\chart_series($rolename, array_values($data[$roleid])); $chart->add_series($series); } } $chart->set_labels(array_values($times)); echo $OUTPUT->render_chart($chart, false); }