Merged branch 'w44_MDL-29030_m22_reports' of git://github.com/skodak/moodle.git with conflict resolution
This commit is contained in:
+1
-1
@@ -38,7 +38,7 @@ $strmnetlog = get_string('mnetlog', 'mnet');
|
||||
$strmnetedithost = get_string('reviewhostdetails', 'mnet');
|
||||
|
||||
$logurl = $CFG->wwwroot.
|
||||
'/course/report/log/index.php?chooselog=1&showusers=1&showcourses=1&host_course='.$mnet_peer->id.
|
||||
'/report/log/index.php?chooselog=1&showusers=1&showcourses=1&host_course='.$mnet_peer->id.
|
||||
'%2F1&user='.'0'.
|
||||
'&date=0'.
|
||||
'&modid=&modaction=0&logformat=showashtml';
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportconfiglog', get_string('configlog', 'report_configlog'), "$CFG->wwwroot/$CFG->admin/report/configlog/index.php"));
|
||||
@@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/courseoverview:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_SYSTEM,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
@@ -1,122 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once($CFG->dirroot.'/lib/statslib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$report = optional_param('report', STATS_REPORT_ACTIVE_COURSES, PARAM_INT);
|
||||
$time = optional_param('time', 0, PARAM_INT);
|
||||
$numcourses = optional_param('numcourses', 20, PARAM_INT);
|
||||
|
||||
if (empty($CFG->enablestats)) {
|
||||
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
redirect("$CFG->wwwroot/$CFG->admin/settings.php?section=stats", get_string('mustenablestats', 'admin'), 3);
|
||||
} else {
|
||||
print_error('statsdisable');
|
||||
}
|
||||
}
|
||||
|
||||
admin_externalpage_setup('reportcourseoverview');
|
||||
echo $OUTPUT->header();
|
||||
|
||||
$course = get_site();
|
||||
stats_check_uptodate($course->id);
|
||||
|
||||
$strreports = get_string('reports');
|
||||
$strcourseoverview = get_string('courseoverview');
|
||||
|
||||
$reportoptions = stats_get_report_options($course->id,STATS_MODE_RANKED);
|
||||
|
||||
$earliestday = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_daily}');
|
||||
$earliestweek = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_weekly}');
|
||||
$earliestmonth = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_monthly}');
|
||||
|
||||
if (empty($earliestday)) $earliestday = time();
|
||||
if (empty($earliestweek)) $earliestweek = time();
|
||||
if (empty($earliestmonth)) $earliestmonth = time();
|
||||
|
||||
$now = stats_get_base_daily();
|
||||
$lastweekend = stats_get_base_weekly();
|
||||
$lastmonthend = stats_get_base_monthly();
|
||||
|
||||
$timeoptions = stats_get_time_options($now,$lastweekend,$lastmonthend,$earliestday,$earliestweek,$earliestmonth);
|
||||
|
||||
if (empty($timeoptions)) {
|
||||
print_error('nostatstodisplay', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id);
|
||||
}
|
||||
|
||||
echo '<form action="index.php" method="post">'."\n";
|
||||
echo '<div>';
|
||||
|
||||
$table = new html_table();
|
||||
$table->width = '*';
|
||||
$table->align = array('left','left','left','left','left','left');
|
||||
|
||||
$reporttypemenu = html_writer::select($reportoptions,'report',$report, false);
|
||||
$timeoptionsmenu = html_writer::select($timeoptions,'time',$time, false);
|
||||
|
||||
$table->data[] = array(get_string('statsreporttype'),$reporttypemenu,
|
||||
get_string('statstimeperiod'),$timeoptionsmenu,
|
||||
'<input type="text" name="numcourses" size="3" maxlength="2" value="'.$numcourses.'" />',
|
||||
'<input type="submit" value="'.get_string('view').'" />') ;
|
||||
|
||||
echo html_writer::table($table);
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
|
||||
echo $OUTPUT->heading($reportoptions[$report]);
|
||||
|
||||
|
||||
if (!empty($report) && !empty($time)) {
|
||||
$param = stats_get_parameters($time,$report,SITEID,STATS_MODE_RANKED);
|
||||
if (!empty($param->sql)) {
|
||||
$sql = $param->sql;
|
||||
} else {
|
||||
$sql = "SELECT courseid,".$param->fields."
|
||||
FROM {".'stats_'.$param->table."}
|
||||
WHERE timeend >= $param->timeafter AND stattype = 'activity' AND roleid = 0
|
||||
GROUP BY courseid
|
||||
$param->extras
|
||||
ORDER BY $param->orderby";
|
||||
}
|
||||
|
||||
$courses = $DB->get_records_sql($sql, $param->params, 0, $numcourses);
|
||||
|
||||
if (empty($courses)) {
|
||||
echo $OUTPUT->notification(get_string('statsnodata'));
|
||||
echo '</td></tr></table>';
|
||||
|
||||
} else {
|
||||
if (empty($CFG->gdversion)) {
|
||||
echo '<div class="graph">(' . get_string("gdneed") .')</div>';
|
||||
} else {
|
||||
echo '<div class="graph"><img alt="'.get_string('courseoverviewgraph').'" src="'.$CFG->wwwroot.'/'.$CFG->admin.'/report/courseoverview/reportsgraph.php?time='.$time.'&report='.$report.'&numcourses='.$numcourses.'" /></div>';
|
||||
}
|
||||
|
||||
$table = new html_table();
|
||||
$table->align = array('left','center','center','center');
|
||||
$table->head = array(get_string('course'),$param->line1);
|
||||
if (!empty($param->line2)) {
|
||||
$table->head[] = $param->line2;
|
||||
}
|
||||
if (!empty($param->line3)) {
|
||||
$table->head[] = $param->line3;
|
||||
}
|
||||
|
||||
foreach ($courses as $c) {
|
||||
$a = array();
|
||||
$a[] = '<a href="'.$CFG->wwwroot.'/course/view.php?id='.$c->courseid.'">'.$DB->get_field('course', 'shortname', array('id'=>$c->courseid)).'</a>';
|
||||
|
||||
$a[] = $c->line1;
|
||||
if (isset($c->line2)) {
|
||||
$a[] = $c->line2;
|
||||
}
|
||||
if (isset($c->line3)) {
|
||||
$a[] = round($c->line3,2);
|
||||
}
|
||||
$table->data[] = $a;
|
||||
}
|
||||
echo html_writer::table($table);
|
||||
}
|
||||
}
|
||||
echo $OUTPUT->footer();
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
|
||||
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 {".'stats_'.$param->table."}
|
||||
WHERE timeend >= $param->timeafter AND stattype = 'activity' AND roleid = 0
|
||||
GROUP BY courseid
|
||||
$param->extras
|
||||
ORDER BY $param->orderby";
|
||||
}
|
||||
|
||||
$courses = $DB->get_records_sql($sql, $param->params, 0, $numcourses);
|
||||
|
||||
if (empty($courses)) {
|
||||
$PAGE->set_url('/admin/report/courseoverview/index.php');
|
||||
print_error('statsnodata', 'error', $PAGE->url->out());
|
||||
}
|
||||
|
||||
|
||||
$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) {
|
||||
$graph->parameter['y_decimal_left'] = 2;
|
||||
}
|
||||
|
||||
foreach ($courses as $c) {
|
||||
$graph->x_data[] = $DB->get_field('course', 'shortname', array('id'=>$c->courseid));
|
||||
$graph->y_data['bar1'][] = $c->{$param->graphline};
|
||||
}
|
||||
$graph->y_order = array('bar1');
|
||||
$graph->y_format['bar1'] = array('colour' => 'blue','bar' => 'fill','legend' => $param->{$param->graphline});
|
||||
|
||||
$graph->draw_stack();
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportcourseoverview', get_string('pluginname', 'report_courseoverview'), "$CFG->wwwroot/$CFG->admin/report/courseoverview/index.php",'report/courseoverview:view'));
|
||||
@@ -1,27 +0,0 @@
|
||||
<?PHP
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
@@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
// just a link to course report
|
||||
$ADMIN->add('reports', new admin_externalpage('reportlog', get_string('log', 'admin'), "$CFG->wwwroot/course/report/log/index.php?id=".SITEID, 'coursereport/log:view'));
|
||||
$ADMIN->add('reports', new admin_externalpage('reportloglive', get_string('loglive', 'coursereport_log'), "$CFG->wwwroot/course/report/log/indexlive.php?id=".SITEID, 'coursereport/log:viewlive'));
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/questioninstances:view' => array(
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_SYSTEM,
|
||||
'archetypes' => array(
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:config',
|
||||
)
|
||||
);
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportquestioninstances', get_string('pluginname', 'report_questioninstances'), "$CFG->wwwroot/$CFG->admin/report/questioninstances/index.php", 'report/questioninstances:view'));
|
||||
@@ -1,27 +0,0 @@
|
||||
<?PHP
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/security:view' => array(
|
||||
'riskbitmask' => RISK_CONFIG,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_SYSTEM,
|
||||
'archetypes' => array(
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
)
|
||||
);
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportsecurity', get_string('pluginname', 'report_security'), "$CFG->wwwroot/$CFG->admin/report/security/index.php",'report/security:view'));
|
||||
@@ -1,27 +0,0 @@
|
||||
<?PHP
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
// just a link to course report
|
||||
$ADMIN->add('reports', new admin_externalpage('reportstats', get_string('stats', 'admin'), "$CFG->wwwroot/course/report/stats/index.php", 'coursereport/stats:view'));
|
||||
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Provides an overview of installed reports
|
||||
*
|
||||
* Displays the list of found reports, their version (if found) and
|
||||
* a link to delete the report.
|
||||
*
|
||||
* The code is based on admin/localplugins.php by David Mudrak.
|
||||
*
|
||||
* @package admin
|
||||
* @copyright 2011 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once(dirname(__FILE__) . '/../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->libdir.'/tablelib.php');
|
||||
|
||||
admin_externalpage_setup('managereports');
|
||||
|
||||
$delete = optional_param('delete', '', PARAM_PLUGIN);
|
||||
$confirm = optional_param('confirm', '', PARAM_BOOL);
|
||||
|
||||
/// If data submitted, then process and store.
|
||||
|
||||
if (!empty($delete) and confirm_sesskey()) {
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(get_string('reports'));
|
||||
|
||||
if (!$confirm) {
|
||||
if (get_string_manager()->string_exists('pluginname', 'report_' . $delete)) {
|
||||
$strpluginname = get_string('pluginname', 'report_' . $delete);
|
||||
} else {
|
||||
$strpluginname = $delete;
|
||||
}
|
||||
echo $OUTPUT->confirm(get_string('reportsdeleteconfirm', 'admin', $strpluginname),
|
||||
new moodle_url($PAGE->url, array('delete' => $delete, 'confirm' => 1)),
|
||||
$PAGE->url);
|
||||
echo $OUTPUT->footer();
|
||||
die();
|
||||
|
||||
} else {
|
||||
uninstall_plugin('report', $delete);
|
||||
$a = new stdclass();
|
||||
$a->name = $delete;
|
||||
$pluginlocation = get_plugin_types();
|
||||
$a->directory = $pluginlocation['report'] . '/' . $delete;
|
||||
echo $OUTPUT->notification(get_string('plugindeletefiles', '', $a), 'notifysuccess');
|
||||
echo $OUTPUT->continue_button($PAGE->url);
|
||||
echo $OUTPUT->footer();
|
||||
die();
|
||||
}
|
||||
}
|
||||
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(get_string('reports'));
|
||||
|
||||
/// Print the table of all installed report plugins
|
||||
|
||||
$table = new flexible_table('reportplugins_administration_table');
|
||||
$table->define_columns(array('name', 'version', 'delete'));
|
||||
$table->define_headers(array(get_string('plugin'), get_string('version'), get_string('delete')));
|
||||
$table->define_baseurl($PAGE->url);
|
||||
$table->set_attribute('id', 'reportplugins');
|
||||
$table->set_attribute('class', 'generaltable generalbox boxaligncenter boxwidthwide');
|
||||
$table->setup();
|
||||
|
||||
$plugins = array();
|
||||
foreach (get_plugin_list('report') as $plugin => $plugindir) {
|
||||
if (get_string_manager()->string_exists('pluginname', 'report_' . $plugin)) {
|
||||
$strpluginname = get_string('pluginname', 'report_' . $plugin);
|
||||
} else {
|
||||
$strpluginname = $plugin;
|
||||
}
|
||||
$plugins[$plugin] = $strpluginname;
|
||||
}
|
||||
collatorlib::asort($plugins);
|
||||
|
||||
$like = $DB->sql_like('plugin', '?', true, true, false, '|');
|
||||
$params = array('report|_%');
|
||||
$installed = $DB->get_records_select('config_plugins', "$like AND name = 'version'", $params);
|
||||
$versions = array();
|
||||
foreach ($installed as $config) {
|
||||
$name = preg_replace('/^report_/', '', $config->plugin);
|
||||
$versions[$name] = $config->value;
|
||||
if (!isset($plugins[$name])) {
|
||||
$plugins[$name] = $name;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($plugins as $plugin => $name) {
|
||||
$delete = new moodle_url($PAGE->url, array('delete' => $plugin, 'sesskey' => sesskey()));
|
||||
$delete = html_writer::link($delete, get_string('delete'));
|
||||
|
||||
if (!isset($versions[$plugin])) {
|
||||
if (file_exists("$CFG->dirroot/report/$plugin/version.php")) {
|
||||
// not installed yet
|
||||
$version = '?';
|
||||
} else {
|
||||
// no version info available
|
||||
$version = '-';
|
||||
}
|
||||
} else {
|
||||
$version = $versions[$plugin];
|
||||
if (file_exists("$CFG->dirroot/report/$plugin")) {
|
||||
$version = $versions[$plugin];
|
||||
} else {
|
||||
// somebody removed plugin without uninstall
|
||||
$name = '<span class="notifyproblem">'.$name.' ('.get_string('missingfromdisk').')</span>';
|
||||
$version = $versions[$plugin];
|
||||
}
|
||||
}
|
||||
|
||||
$table->add_data(array($name, $version, $delete));
|
||||
}
|
||||
|
||||
$table->print_html();
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
+14
-11
@@ -454,24 +454,27 @@ if ($hassiteconfig) {
|
||||
$ADMIN->add('coursereports', $page);
|
||||
}
|
||||
}
|
||||
unset($pages);
|
||||
}
|
||||
|
||||
// Now add reports
|
||||
foreach (get_plugin_list('report') as $plugin => $plugindir) {
|
||||
$pages = array();
|
||||
foreach (get_plugin_list('report') as $report => $plugindir) {
|
||||
$settings_path = "$plugindir/settings.php";
|
||||
if (file_exists($settings_path)) {
|
||||
$settings = new admin_settingpage('report' . $report,
|
||||
get_string('pluginname', 'report_' . $report), 'moodle/site:config');
|
||||
include($settings_path);
|
||||
continue;
|
||||
if ($settings) {
|
||||
$pages[] = $settings;
|
||||
}
|
||||
}
|
||||
|
||||
$index_path = "$plugindir/index.php";
|
||||
if (!file_exists($index_path)) {
|
||||
continue;
|
||||
}
|
||||
// old style 3rd party plugin without settings.php
|
||||
$www_path = "$CFG->wwwroot/$CFG->admin/report/$plugin/index.php";
|
||||
$reportname = get_string($plugin, 'report_' . $plugin);
|
||||
$ADMIN->add('reports', new admin_externalpage('report'.$plugin, $reportname, $www_path, 'moodle/site:viewreports'));
|
||||
}
|
||||
$ADMIN->add('modules', new admin_category('reportplugins', get_string('reports')));
|
||||
$ADMIN->add('reportplugins', new admin_externalpage('managereports', get_string('reportsmanage', 'admin'),
|
||||
$CFG->wwwroot . '/' . $CFG->admin . '/reports.php'));
|
||||
foreach ($pages as $page) {
|
||||
$ADMIN->add('reportplugins', $page);
|
||||
}
|
||||
|
||||
// Now add various admin tools
|
||||
|
||||
@@ -36,6 +36,7 @@ require_once($CFG->dirroot . '/backup/moodle2/backup_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_qtype_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_format_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_theme_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_report_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_coursereport_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_plagiarism_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_subplugin.class.php');
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Base class for report backup plugins.
|
||||
*
|
||||
* NOTE: When you back up a course, it potentially may run backup for all
|
||||
* reports. In order to control whether a particular report gets
|
||||
* backed up, a report should make use of the second and third
|
||||
* parameters in get_plugin_element().
|
||||
*
|
||||
* @package moodlecore
|
||||
* @subpackage backup-moodle2
|
||||
* @copyright 2011 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
abstract class backup_report_plugin extends backup_plugin {
|
||||
// Use default parent behaviour
|
||||
}
|
||||
@@ -418,6 +418,10 @@ class backup_course_structure_step extends backup_structure_step {
|
||||
// save course data (in case of user theme, legacy theme, etc)
|
||||
$this->add_plugin_structure('theme', $course, true);
|
||||
|
||||
// attach general report plugin structure to $course element; multiple
|
||||
// reports can save course data if required
|
||||
$this->add_plugin_structure('report', $course, true);
|
||||
|
||||
// attach course report plugin structure to $course element; multiple
|
||||
// course reports can save course data if required
|
||||
$this->add_plugin_structure('coursereport', $course, true);
|
||||
@@ -809,7 +813,7 @@ class backup_gradebook_structure_step extends backup_structure_step {
|
||||
//grade_categories
|
||||
$grade_categories = new backup_nested_element('grade_categories');
|
||||
$grade_category = new backup_nested_element('grade_category', array('id'), array(
|
||||
//'courseid',
|
||||
//'courseid',
|
||||
'parent', 'depth', 'path', 'fullname', 'aggregation', 'keephigh',
|
||||
'dropload', 'aggregateonlygraded', 'aggregateoutcomes', 'aggregatesubcats',
|
||||
'timecreated', 'timemodified', 'hidden'));
|
||||
|
||||
@@ -35,12 +35,14 @@ require_once($CFG->dirroot . '/backup/moodle2/restore_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_qtype_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_format_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_theme_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_report_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_coursereport_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_plagiarism_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_qtype_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_format_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_theme_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_report_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_coursereport_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/backup_plagiarism_plugin.class.php');
|
||||
require_once($CFG->dirroot . '/backup/moodle2/restore_subplugin.class.php');
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Restore for plugin report.
|
||||
*
|
||||
* @package moodlecore
|
||||
* @subpackage backup-moodle2
|
||||
* @copyright 2011 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
abstract class restore_report_plugin extends restore_plugin {
|
||||
// Use default parent behaviour
|
||||
}
|
||||
@@ -1080,6 +1080,9 @@ class restore_course_structure_step extends restore_structure_step {
|
||||
// Apply for 'theme' plugins optional paths at course level
|
||||
$this->add_plugin_structure('theme', $course);
|
||||
|
||||
// Apply for 'report' plugins optional paths at course level
|
||||
$this->add_plugin_structure('report', $course);
|
||||
|
||||
// Apply for 'course report' plugins optional paths at course level
|
||||
$this->add_plugin_structure('coursereport', $course);
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -15,15 +14,19 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
/**
|
||||
* Block for displayed logged in user's course completion status
|
||||
*
|
||||
* @package moodlecore
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package block
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
/**
|
||||
@@ -81,8 +84,8 @@ class block_completionstatus extends block_base {
|
||||
// Check this user is enroled
|
||||
if (!$info->is_tracked_user($USER->id)) {
|
||||
// If not enrolled, but are can view the report:
|
||||
if (has_capability('coursereport/completion:view', get_context_instance(CONTEXT_COURSE, $COURSE->id))) {
|
||||
$this->content->text = '<a href="'.$CFG->wwwroot.'/course/report/completion/index.php?course='.$COURSE->id.
|
||||
if (has_capability('report/completion:view', get_context_instance(CONTEXT_COURSE, $COURSE->id))) {
|
||||
$this->content->text = '<a href="'.$CFG->wwwroot.'/report/completion/index.php?course='.$COURSE->id.
|
||||
'">'.get_string('viewcoursereport', 'completion').'</a>';
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -15,15 +14,16 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
/**
|
||||
* Block for displayed logged in user's course completion status
|
||||
*
|
||||
* @package moodlecore
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package block
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
@@ -62,9 +62,9 @@ if ($USER->id == $user->id) {
|
||||
$can_view = true;
|
||||
} else if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)) {
|
||||
$can_view = true;
|
||||
} else if (has_capability('coursereport/completion:view', $coursecontext)) {
|
||||
} else if (has_capability('report/completion:view', $coursecontext)) {
|
||||
$can_view = true;
|
||||
} else if (has_capability('coursereport/completion:view', $personalcontext)) {
|
||||
} else if (has_capability('report/completion:view', $personalcontext)) {
|
||||
$can_view = true;
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ echo '<th class="c1 header" scope="col">'.get_string('criteria', 'completion').'
|
||||
echo '<th class="c2 header" scope="col">'.get_string('requirement', 'block_completionstatus').'</th>';
|
||||
echo '<th class="c3 header" scope="col">'.get_string('status').'</th>';
|
||||
echo '<th class="c4 header" scope="col">'.get_string('complete').'</th>';
|
||||
echo '<th class="c5 header" scope="col">'.get_string('completiondate', 'coursereport_completion').'</th>';
|
||||
echo '<th class="c5 header" scope="col">'.get_string('completiondate', 'report_completion').'</th>';
|
||||
echo '</tr>';
|
||||
|
||||
// Save row data
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -15,4 +14,18 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
$plugin->version = 2009072800;
|
||||
/**
|
||||
* Version info
|
||||
*
|
||||
* @package block
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
$plugin->version = 2011110300;
|
||||
$plugin->component = 'block_completionstatus';
|
||||
$plugin->dependencies = array('report_completion' => 2011110200);
|
||||
@@ -29,9 +29,7 @@ defined('MOODLE_INTERNAL') || die;
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
require_once($CFG->libdir.'/filelib.php');
|
||||
|
||||
define('COURSE_MAX_LOG_DISPLAY', 150); // days
|
||||
define('COURSE_MAX_LOGS_PER_PAGE', 1000); // records
|
||||
define('COURSE_LIVELOG_REFRESH', 60); // Seconds
|
||||
define('COURSE_MAX_RECENT_PERIOD', 172800); // Two days, in seconds
|
||||
define('COURSE_MAX_SUMMARIES_PER_PAGE', 10); // courses
|
||||
define('COURSE_MAX_COURSES_PER_DROPDOWN',1000); // max courses in log dropdown before switching to optional
|
||||
@@ -830,21 +828,6 @@ function print_log_ods($course, $user, $date, $order='l.time DESC', $modname,
|
||||
}
|
||||
|
||||
|
||||
function print_log_graph($course, $userid=0, $type="course.png", $date=0) {
|
||||
global $CFG, $USER;
|
||||
if (empty($CFG->gdversion)) {
|
||||
echo "(".get_string("gdneed").")";
|
||||
} else {
|
||||
// MDL-10818, do not display broken graph when user has no permission to view graph
|
||||
if (has_capability('coursereport/log:view', get_context_instance(CONTEXT_COURSE, $course->id)) ||
|
||||
($course->showreports and $USER->id == $userid)) {
|
||||
echo '<img src="'.$CFG->wwwroot.'/course/report/log/graph.php?id='.$course->id.
|
||||
'&user='.$userid.'&type='.$type.'&date='.$date.'" alt="" />';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function print_overview($courses, array $remote_courses=array()) {
|
||||
global $CFG, $USER, $DB, $OUTPUT;
|
||||
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'coursereport/completion:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
|
||||
$string['completion:view'] = 'View course completion report';
|
||||
$string['completiondate']='Completion date';
|
||||
$string['pluginpagetype'] = 'Course completion report';
|
||||
$string['pluginname']='Course completion';
|
||||
@@ -1,61 +0,0 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* This file contains functions used by the progress report
|
||||
*
|
||||
* @since 2.0
|
||||
* @package course-report
|
||||
* @copyright 2009 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
/**
|
||||
* This function extends the navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $course The course to object for the report
|
||||
* @param stdClass $context The context of the course
|
||||
*/
|
||||
function completion_report_extend_navigation($navigation, $course, $context) {
|
||||
global $CFG, $OUTPUT;
|
||||
|
||||
if (has_capability('coursereport/completion:view', $context)) {
|
||||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled() && $completion->has_criteria()) {
|
||||
$url = new moodle_url('/course/report/completion/index.php', array('course'=>$course->id));
|
||||
$navigation->add(get_string('pluginname','coursereport_completion'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', ''));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of page types
|
||||
* @param string $pagetype current page type
|
||||
* @param stdClass $parentcontext Block's parent context
|
||||
* @param stdClass $currentcontext Current context of block
|
||||
*/
|
||||
function completion_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
$array = array(
|
||||
'*' => get_string('page-x', 'pagetype'),
|
||||
'course-report-*' => get_string('page-course-report-x', 'pagetype'),
|
||||
'course-report-completion-index' => get_string('pluginpagetype', 'coursereport_completion')
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); // It must be included from a Moodle page
|
||||
}
|
||||
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
if (has_capability('coursereport/completion:view', $context)) {
|
||||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled() && $completion->has_criteria()) {
|
||||
echo '<p>';
|
||||
echo '<a href="'.$CFG->wwwroot.'/course/report/completion/index.php?course='.$course->id.'">'.get_string('coursecompletion').'</a>';
|
||||
echo '</p>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<?PHP
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'coursereport/log:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
),
|
||||
|
||||
'coursereport/log:viewlive' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
),
|
||||
|
||||
'coursereport/log:viewtoday' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -1,169 +0,0 @@
|
||||
<?php
|
||||
// Displays different views of the logs.
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once('../../lib.php');
|
||||
require_once('lib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$id = optional_param('id', 0, PARAM_INT);// Course ID
|
||||
|
||||
$host_course = optional_param('host_course', '', PARAM_PATH);// Course ID
|
||||
|
||||
if (empty($host_course)) {
|
||||
$hostid = $CFG->mnet_localhost_id;
|
||||
if (empty($id)) {
|
||||
$site = get_site();
|
||||
$id = $site->id;
|
||||
}
|
||||
} else {
|
||||
list($hostid, $id) = explode('/', $host_course);
|
||||
}
|
||||
|
||||
$group = optional_param('group', 0, PARAM_INT); // Group to display
|
||||
$user = optional_param('user', 0, PARAM_INT); // User to display
|
||||
$date = optional_param('date', 0, PARAM_FILE); // Date to display - number or some string
|
||||
$modname = optional_param('modname', '', PARAM_PLUGIN); // course_module->id
|
||||
$modid = optional_param('modid', 0, PARAM_FILE); // number or 'site_errors'
|
||||
$modaction = optional_param('modaction', '', PARAM_PATH); // an action as recorded in the logs
|
||||
$page = optional_param('page', '0', PARAM_INT); // which page to show
|
||||
$perpage = optional_param('perpage', '100', PARAM_INT); // how many per page
|
||||
$showcourses = optional_param('showcourses', 0, PARAM_INT); // whether to show courses if we're over our limit.
|
||||
$showusers = optional_param('showusers', 0, PARAM_INT); // whether to show users if we're over our limit.
|
||||
$chooselog = optional_param('chooselog', 0, PARAM_INT);
|
||||
$logformat = optional_param('logformat', 'showashtml', PARAM_ALPHA);
|
||||
|
||||
$params = array();
|
||||
if ($id !== 0) $params['id'] = $id;
|
||||
if ($host_course !== '') $params['host_course'] = $host_course;
|
||||
if ($group !== 0) $params['group'] = $group;
|
||||
if ($user !== 0) $params['user'] = $user;
|
||||
if ($date !== 0) $params['date'] = $date;
|
||||
if ($modname !== '') $params['modname'] = $modname;
|
||||
if ($modid !== 0) $params['modid'] = $modid;
|
||||
if ($modaction !== '') $params['modaction'] = $modaction;
|
||||
if ($page !== '0') $params['page'] = $page;
|
||||
if ($perpage !== '100') $params['perpage'] = $perpage;
|
||||
if ($showcourses !== 0) $params['showcourses'] = $showcourses;
|
||||
if ($showusers !== 0) $params['showusers'] = $showusers;
|
||||
if ($chooselog !== 0) $params['chooselog'] = $chooselog;
|
||||
if ($logformat !== 'showashtml') $params['logformat'] = $logformat;
|
||||
$PAGE->set_url('/course/report/log/index.php', $params);
|
||||
$PAGE->set_pagelayout('report');
|
||||
|
||||
if ($hostid == $CFG->mnet_localhost_id) {
|
||||
if (!$course = $DB->get_record('course', array('id'=>$id))) {
|
||||
print_error('That\'s an invalid course id'.$id);
|
||||
}
|
||||
} else {
|
||||
$course_stub = $DB->get_record('mnet_log', array('hostid'=>$hostid, 'course'=>$id), '*', true);
|
||||
$course->id = $id;
|
||||
$course->shortname = $course_stub->coursename;
|
||||
$course->fullname = $course_stub->coursename;
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
|
||||
require_capability('coursereport/log:view', $context);
|
||||
|
||||
add_to_log($course->id, "course", "report log", "report/log/index.php?id=$course->id", $course->id);
|
||||
|
||||
$strlogs = get_string('logs');
|
||||
$stradministration = get_string('administration');
|
||||
$strreports = get_string('reports');
|
||||
|
||||
session_get_instance()->write_close();
|
||||
|
||||
$navlinks = array();
|
||||
|
||||
if (!empty($chooselog)) {
|
||||
$userinfo = get_string('allparticipants');
|
||||
$dateinfo = get_string('alldays');
|
||||
|
||||
if ($user) {
|
||||
if (!$u = $DB->get_record('user', array('id'=>$user))) {
|
||||
print_error('That\'s an invalid user!');
|
||||
}
|
||||
$userinfo = fullname($u, has_capability('moodle/site:viewfullnames', $context));
|
||||
}
|
||||
if ($date) {
|
||||
$dateinfo = userdate($date, get_string('strftimedaydate'));
|
||||
}
|
||||
|
||||
switch ($logformat) {
|
||||
case 'showashtml':
|
||||
if ($hostid != $CFG->mnet_localhost_id || $course->id == SITEID) {
|
||||
admin_externalpage_setup('reportlog');
|
||||
echo $OUTPUT->header();
|
||||
|
||||
} else {
|
||||
$PAGE->set_title($course->shortname .': '. $strlogs);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->navbar->add($strreports, new moodle_url('/course/report.php', array('id'=>$course->id)));
|
||||
$PAGE->navbar->add($strlogs, new moodle_url('/course/report/log/index.php', array('id'=>$course->id)));
|
||||
$PAGE->navbar->add("$userinfo, $dateinfo");
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
echo $OUTPUT->heading(format_string($course->fullname) . ": $userinfo, $dateinfo (".usertimezone().")");
|
||||
print_mnet_log_selector_form($hostid, $course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers, $logformat);
|
||||
|
||||
if($hostid == $CFG->mnet_localhost_id) {
|
||||
print_log($course, $user, $date, 'l.time DESC', $page, $perpage,
|
||||
"index.php?id=$course->id&chooselog=1&user=$user&date=$date&modid=$modid&modaction=$modaction&group=$group",
|
||||
$modname, $modid, $modaction, $group);
|
||||
} else {
|
||||
print_mnet_log($hostid, $id, $user, $date, 'l.time DESC', $page, $perpage, "", $modname, $modid, $modaction, $group);
|
||||
}
|
||||
break;
|
||||
case 'downloadascsv':
|
||||
if (!print_log_csv($course, $user, $date, 'l.time DESC', $modname,
|
||||
$modid, $modaction, $group)) {
|
||||
echo $OUTPUT->notification("No logs found!");
|
||||
echo $OUTPUT->footer();
|
||||
}
|
||||
exit;
|
||||
case 'downloadasods':
|
||||
if (!print_log_ods($course, $user, $date, 'l.time DESC', $modname,
|
||||
$modid, $modaction, $group)) {
|
||||
echo $OUTPUT->notification("No logs found!");
|
||||
echo $OUTPUT->footer();
|
||||
}
|
||||
exit;
|
||||
case 'downloadasexcel':
|
||||
if (!print_log_xls($course, $user, $date, 'l.time DESC', $modname,
|
||||
$modid, $modaction, $group)) {
|
||||
echo $OUTPUT->notification("No logs found!");
|
||||
echo $OUTPUT->footer();
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
if ($hostid != $CFG->mnet_localhost_id || $course->id == SITEID) {
|
||||
admin_externalpage_setup('reportlog');
|
||||
echo $OUTPUT->header();
|
||||
} else {
|
||||
$PAGE->set_title($course->shortname .': '. $strlogs);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
echo $OUTPUT->heading(get_string('chooselogs') .':');
|
||||
|
||||
print_log_selector_form($course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers, $logformat);
|
||||
|
||||
$livelogs = get_string('livelogs');
|
||||
$url = new moodle_url('/course/report/log/live.php', array('id'=>$course->id));
|
||||
$link = new action_link($url, $livelogs, new popup_action('click', $url, 'livelog', array('height' => 500, 'width' => 800)));
|
||||
|
||||
echo $OUTPUT->render($link);
|
||||
}
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
exit;
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
<?php
|
||||
// Display link to live logs in separate window
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once('../../lib.php');
|
||||
require_once('lib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$id = optional_param('id', 0, PARAM_INT);// Course ID
|
||||
|
||||
if (!$course = $DB->get_record('course', array('id'=>$id)) ) {
|
||||
print_error('invalidcourseid');
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
|
||||
require_capability('coursereport/log:viewlive', $context);
|
||||
|
||||
$strlogs = get_string('logs');
|
||||
$strreports = get_string('reports');
|
||||
|
||||
if ($course->id == SITEID) {
|
||||
admin_externalpage_setup('reportloglive');
|
||||
echo $OUTPUT->header();
|
||||
|
||||
} else {
|
||||
$PAGE->set_title($course->shortname .': '. $strlogs);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->navbar->add($strreports, new moodle_url('/course/report.php', array('id'=>$course->id)), navigation_node::TYPE_CUSTOM);
|
||||
$PAGE->navbar->add($strlogs);
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
echo $OUTPUT->heading(get_string('loglive', 'coursereport_log'));
|
||||
|
||||
echo $OUTPUT->container_start('info');
|
||||
$link = new moodle_url('/course/report/log/live.php?id='. $course->id);
|
||||
echo $OUTPUT->action_link($link, get_string('livelogs'), new popup_action('click', $link, 'livelog', array('height' => 500, 'width' => 800)));
|
||||
echo $OUTPUT->container_end();
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
<?php
|
||||
// Displays live view of recent logs
|
||||
|
||||
require_once("../../../config.php");
|
||||
require_once("../../lib.php");
|
||||
|
||||
$id = required_param('id', PARAM_INT);
|
||||
$page = optional_param('page', 0, PARAM_INT); // which page to show
|
||||
|
||||
if (! $course = $DB->get_record("course", array("id"=>$id))) {
|
||||
print_error('invalidcourseid');
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
require_capability('coursereport/log:viewlive', $context);
|
||||
|
||||
add_to_log($course->id, "course", "report live", "report/log/live.php?id=$course->id", $course->id);
|
||||
|
||||
session_get_instance()->write_close();
|
||||
|
||||
$strlivelogs = get_string("livelogs");
|
||||
$strupdatesevery = get_string("updatesevery", "moodle", COURSE_LIVELOG_REFRESH);
|
||||
|
||||
$PAGE->set_url('/course/report/log/live.php', array('id'=>$course->id));
|
||||
$PAGE->set_pagelayout('popup');
|
||||
$PAGE->set_title("$strlivelogs ($strupdatesevery)");
|
||||
$PAGE->set_periodic_refresh_delay(COURSE_LIVELOG_REFRESH);
|
||||
$PAGE->set_heading($strlivelogs);
|
||||
echo $OUTPUT->header();
|
||||
|
||||
$user=0;
|
||||
$date=time() - 3600;
|
||||
|
||||
print_log($course, $user, $date, "l.time DESC", $page, 500,
|
||||
"live.php?id=$course->id&user=$user&date=$date");
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
exit;
|
||||
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
require_once($CFG->dirroot.'/course/report/log/lib.php');
|
||||
|
||||
if (has_capability('coursereport/log:view', $context)) {
|
||||
echo $OUTPUT->heading(get_string('chooselogs') .':');
|
||||
|
||||
print_log_selector_form($course);
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/log:viewlive', $context)) {
|
||||
echo $OUTPUT->heading(get_string('chooselivelogs') .':');
|
||||
echo '<p>';
|
||||
$link = new moodle_url('/course/report/log/live.php?id='. $course->id);
|
||||
echo $OUTPUT->action_link($link, get_string('livelogs'), new popup_action('click', $link, 'livelog', array('height' => 500, 'width' => 800)));
|
||||
echo '</p>';
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'coursereport/outline:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -1,157 +0,0 @@
|
||||
<?php
|
||||
|
||||
// Display user activity reports for a course (totals)
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
|
||||
$id = required_param('id',PARAM_INT); // course id
|
||||
|
||||
if (!$course = $DB->get_record('course', array('id'=>$id))) {
|
||||
print_error('invalidcourseid');
|
||||
}
|
||||
|
||||
$PAGE->set_url('/course/report/outline/index.php', array('id'=>$id));
|
||||
$PAGE->set_pagelayout('report');
|
||||
|
||||
require_login($course);
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
require_capability('coursereport/outline:view', $context);
|
||||
|
||||
add_to_log($course->id, 'course', 'report outline', "report/outline/index.php?id=$course->id", $course->id);
|
||||
|
||||
$showlastaccess = true;
|
||||
$hiddenfields = explode(',', $CFG->hiddenuserfields);
|
||||
|
||||
if (array_search('lastaccess', $hiddenfields) and !has_capability('moodle/user:viewhiddendetails', $coursecontext)) {
|
||||
$showlastaccess = false;
|
||||
}
|
||||
|
||||
$stractivityreport = get_string('activityreport');
|
||||
$stractivity = get_string('activity');
|
||||
$strlast = get_string('lastaccess');
|
||||
$strreports = get_string('reports');
|
||||
$strviews = get_string('views');
|
||||
$strrelatedblogentries = get_string('relatedblogentries', 'blog');
|
||||
|
||||
$PAGE->set_title($course->shortname .': '. $stractivityreport);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
echo $OUTPUT->heading(format_string($course->fullname));
|
||||
|
||||
if (!$logstart = $DB->get_field_sql("SELECT MIN(time) FROM {log}")) {
|
||||
print_error('logfilenotavailable');
|
||||
}
|
||||
|
||||
echo $OUTPUT->container(get_string('computedfromlogs', 'admin', userdate($logstart)), 'loginfo');
|
||||
|
||||
$outlinetable = new html_table();
|
||||
$outlinetable->attributes['class'] = 'generaltable boxaligncenter';
|
||||
$outlinetable->cellpadding = 5;
|
||||
$outlinetable->id = 'outlinetable';
|
||||
$outlinetable->head = array($stractivity, $strviews);
|
||||
|
||||
if ($CFG->useblogassociations) {
|
||||
$outlinetable->head[] = $strrelatedblogentries;
|
||||
}
|
||||
|
||||
if ($showlastaccess) {
|
||||
$outlinetable->head[] = $strlast;
|
||||
}
|
||||
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
$sections = get_all_sections($course->id);
|
||||
|
||||
$sql = "SELECT cm.id, COUNT('x') AS numviews, MAX(time) AS lasttime
|
||||
FROM {course_modules} cm
|
||||
JOIN {modules} m ON m.id = cm.module
|
||||
JOIN {log} l ON l.cmid = cm.id
|
||||
WHERE cm.course = ? AND l.action LIKE 'view%' AND m.visible = 1
|
||||
GROUP BY cm.id";
|
||||
$views = $DB->get_records_sql($sql, array($course->id));
|
||||
|
||||
$prevsecctionnum = 0;
|
||||
foreach ($modinfo->sections as $sectionnum=>$section) {
|
||||
foreach ($section as $cmid) {
|
||||
$cm = $modinfo->cms[$cmid];
|
||||
if (!$cm->has_view()) {
|
||||
continue;
|
||||
}
|
||||
if (!$cm->uservisible) {
|
||||
continue;
|
||||
}
|
||||
if ($prevsecctionnum != $sectionnum) {
|
||||
$sectionrow = new html_table_row();
|
||||
$sectionrow->attributes['class'] = 'section';
|
||||
$sectioncell = new html_table_cell();
|
||||
$sectioncell->colspan = count($outlinetable->head);
|
||||
|
||||
$sectiontitle = get_section_name($course, $sections[$sectionnum]);
|
||||
|
||||
$sectioncell->text = $OUTPUT->heading($sectiontitle, 3);
|
||||
$sectionrow->cells[] = $sectioncell;
|
||||
$outlinetable->data[] = $sectionrow;
|
||||
|
||||
$prevsecctionnum = $sectionnum;
|
||||
}
|
||||
|
||||
$dimmed = $cm->visible ? '' : 'class="dimmed"';
|
||||
$modulename = get_string('modulename', $cm->modname);
|
||||
|
||||
$reportrow = new html_table_row();
|
||||
$activitycell = new html_table_cell();
|
||||
$activitycell->attributes['class'] = 'activity';
|
||||
|
||||
$activityicon = $OUTPUT->pix_icon('icon', $modulename, $cm->modname, array('class'=>'icon'));
|
||||
|
||||
$attributes = array();
|
||||
if (!$cm->visible) {
|
||||
$attributes['class'] = 'dimmed';
|
||||
}
|
||||
|
||||
$activitycell->text = $activityicon . html_writer::link("$CFG->wwwroot/mod/$cm->modname/view.php?id=$cm->id", format_string($cm->name), $attributes);;
|
||||
|
||||
$reportrow->cells[] = $activitycell;
|
||||
|
||||
$numviewscell = new html_table_cell();
|
||||
$numviewscell->attributes['class'] = 'numviews';
|
||||
|
||||
if (!empty($views[$cm->id]->numviews)) {
|
||||
$numviewscell->text = $views[$cm->id]->numviews;
|
||||
} else {
|
||||
$numviewscell->text = '-';
|
||||
}
|
||||
|
||||
$reportrow->cells[] = $numviewscell;
|
||||
|
||||
if ($CFG->useblogassociations) {
|
||||
require_once($CFG->dirroot.'/blog/lib.php');
|
||||
$blogcell = new html_table_cell();
|
||||
$blogcell->attributes['class'] = 'blog';
|
||||
if ($blogcount = blog_get_associated_count($course->id, $cm->id)) {
|
||||
$blogcell->text = html_writer::link('/blog/index.php?modid='.$cm->id, $blogcount);
|
||||
} else {
|
||||
$blogcell->text = '-';
|
||||
}
|
||||
$reportrow->cells[] = $blogcell;
|
||||
}
|
||||
|
||||
if ($showlastaccess) {
|
||||
$lastaccesscell = new html_table_cell();
|
||||
$lastaccesscell->attributes['class'] = 'lastaccess';
|
||||
|
||||
if (isset($views[$cm->id]->lasttime)) {
|
||||
$timeago = format_time(time() - $views[$cm->id]->lasttime);
|
||||
$lastaccesscell->text = userdate($views[$cm->id]->lasttime)." ($timeago)";
|
||||
}
|
||||
$reportrow->cells[] = $lastaccesscell;
|
||||
}
|
||||
$outlinetable->data[] = $reportrow;
|
||||
}
|
||||
}
|
||||
echo html_writer::table($outlinetable);
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* This file contains functions used by the outline report
|
||||
*
|
||||
* @since 2.0
|
||||
* @package course-report
|
||||
* @copyright 2009 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
/**
|
||||
* This function extends the navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $course The course to object for the report
|
||||
* @param stdClass $context The context of the course
|
||||
*/
|
||||
function outline_report_extend_navigation($navigation, $course, $context) {
|
||||
global $CFG, $OUTPUT;
|
||||
if (has_capability('coursereport/outline:view', $context)) {
|
||||
$url = new moodle_url('/course/report/outline/index.php', array('id'=>$course->id));
|
||||
$navigation->add(get_string( 'activityreport' ), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', ''));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of page types
|
||||
* @param string $pagetype current page type
|
||||
* @param stdClass $parentcontext Block's parent context
|
||||
* @param stdClass $currentcontext Current context of block
|
||||
*/
|
||||
function outline_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
$array = array(
|
||||
'*' => get_string('page-x', 'pagetype'),
|
||||
'course-report-*' => get_string('page-course-report-x', 'pagetype'),
|
||||
'course-report-outline-index' => get_string('pluginpagetype', 'coursereport_outline')
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/outline:view', $context)) {
|
||||
echo '<p>';
|
||||
$activityreport = get_string( 'activityreport' );
|
||||
echo "<a href=\"{$CFG->wwwroot}/course/report/outline/index.php?id={$course->id}\">";
|
||||
echo "$activityreport</a>\n";
|
||||
echo '</p>';
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'coursereport/participation:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -1,305 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once($CFG->dirroot.'/lib/tablelib.php');
|
||||
|
||||
define('DEFAULT_PAGE_SIZE', 20);
|
||||
define('SHOW_ALL_PAGE_SIZE', 5000);
|
||||
|
||||
$id = required_param('id', PARAM_INT); // course id.
|
||||
$roleid = optional_param('roleid', 0, PARAM_INT); // which role to show
|
||||
$instanceid = optional_param('instanceid', 0, PARAM_INT); // instance we're looking at.
|
||||
$timefrom = optional_param('timefrom', 0, PARAM_INT); // how far back to look...
|
||||
$action = optional_param('action', '', PARAM_ALPHA);
|
||||
$page = optional_param('page', 0, PARAM_INT); // which page to show
|
||||
$perpage = optional_param('perpage', DEFAULT_PAGE_SIZE, PARAM_INT); // how many per page
|
||||
|
||||
$url = new moodle_url('/course/report/participation/index.php', array('id'=>$id));
|
||||
if ($roleid !== 0) $url->param('roleid');
|
||||
if ($instanceid !== 0) $url->param('instanceid');
|
||||
if ($timefrom !== 0) $url->param('timefrom');
|
||||
if ($action !== '') $url->param('action');
|
||||
if ($page !== 0) $url->param('page');
|
||||
if ($perpage !== DEFAULT_PAGE_SIZE) $url->param('perpage');
|
||||
$PAGE->set_url($url);
|
||||
$PAGE->set_pagelayout('admin');
|
||||
|
||||
if ($action != 'view' and $action != 'post') {
|
||||
$action = ''; // default to all (don't restrict)
|
||||
}
|
||||
|
||||
if (!$course = $DB->get_record('course', array('id'=>$id))) {
|
||||
print_error('invalidcourse');
|
||||
}
|
||||
|
||||
if ($roleid != 0 and !$role = $DB->get_record('role', array('id'=>$roleid))) {
|
||||
print_error('invalidrole');
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
require_capability('coursereport/participation:view', $context);
|
||||
|
||||
add_to_log($course->id, "course", "report participation", "report/participation/index.php?id=$course->id", $course->id);
|
||||
|
||||
$strparticipation = get_string('participationreport');
|
||||
$strviews = get_string('views');
|
||||
$strposts = get_string('posts');
|
||||
$strview = get_string('view');
|
||||
$strpost = get_string('post');
|
||||
$strallactions = get_string('allactions');
|
||||
$strreports = get_string('reports');
|
||||
|
||||
$actionoptions = array('' => $strallactions,
|
||||
'view' => $strview,
|
||||
'post' => $strpost,);
|
||||
if (!array_key_exists($action, $actionoptions)) {
|
||||
$action = '';
|
||||
}
|
||||
|
||||
$PAGE->set_title($course->shortname .': '. $strparticipation);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
|
||||
$modinfo = get_fast_modinfo($course);
|
||||
|
||||
$modules = $DB->get_records_select('modules', "visible = 1", null, 'name ASC');
|
||||
|
||||
$instanceoptions = array();
|
||||
foreach ($modules as $module) {
|
||||
if (empty($modinfo->instances[$module->name])) {
|
||||
continue;
|
||||
}
|
||||
$instances = array();
|
||||
foreach ($modinfo->instances[$module->name] as $cm) {
|
||||
// Skip modules such as label which do not actually have links;
|
||||
// this means there's nothing to participate in
|
||||
if (!$cm->has_view()) {
|
||||
continue;
|
||||
}
|
||||
$instances[$cm->id] = format_string($cm->name);
|
||||
}
|
||||
if (count($instances) == 0) {
|
||||
continue;
|
||||
}
|
||||
$instanceoptions[] = array(get_string('modulenameplural', $module->name)=>$instances);
|
||||
}
|
||||
|
||||
$timeoptions = array();
|
||||
// get minimum log time for this course
|
||||
$minlog = $DB->get_field_sql('SELECT min(time) FROM {log} WHERE course = ?', array($course->id));
|
||||
|
||||
$now = usergetmidnight(time());
|
||||
|
||||
// days
|
||||
for ($i = 1; $i < 7; $i++) {
|
||||
if (strtotime('-'.$i.' days',$now) >= $minlog) {
|
||||
$timeoptions[strtotime('-'.$i.' days',$now)] = get_string('numdays','moodle',$i);
|
||||
}
|
||||
}
|
||||
// weeks
|
||||
for ($i = 1; $i < 10; $i++) {
|
||||
if (strtotime('-'.$i.' weeks',$now) >= $minlog) {
|
||||
$timeoptions[strtotime('-'.$i.' weeks',$now)] = get_string('numweeks','moodle',$i);
|
||||
}
|
||||
}
|
||||
// months
|
||||
for ($i = 2; $i < 12; $i++) {
|
||||
if (strtotime('-'.$i.' months',$now) >= $minlog) {
|
||||
$timeoptions[strtotime('-'.$i.' months',$now)] = get_string('nummonths','moodle',$i);
|
||||
}
|
||||
}
|
||||
// try a year
|
||||
if (strtotime('-1 year',$now) >= $minlog) {
|
||||
$timeoptions[strtotime('-1 year',$now)] = get_string('lastyear');
|
||||
}
|
||||
|
||||
$roleoptions = array();
|
||||
// TODO: we need a new list of roles that are visible here
|
||||
if ($roles = get_roles_used_in_context($context)) {
|
||||
foreach ($roles as $r) {
|
||||
$roleoptions[$r->id] = $r->name;
|
||||
}
|
||||
}
|
||||
$guestrole = get_guest_role();
|
||||
if (empty($roleoptions[$guestrole->id])) {
|
||||
$roleoptions[$guestrole->id] = $guestrole->name;
|
||||
}
|
||||
|
||||
$roleoptions = role_fix_names($roleoptions, $context);
|
||||
|
||||
// print first controls.
|
||||
echo '<form class="participationselectform" action="index.php" method="get"><div>'."\n".
|
||||
'<input type="hidden" name="id" value="'.$course->id.'" />'."\n";
|
||||
echo '<label for="menuinstanceid">'.get_string('activitymodule').'</label>'."\n";
|
||||
echo html_writer::select($instanceoptions, 'instanceid', $instanceid);
|
||||
echo '<label for="menutimefrom">'.get_string('lookback').'</label>'."\n";
|
||||
echo html_writer::select($timeoptions,'timefrom',$timefrom);
|
||||
echo '<label for="menuroleid">'.get_string('showonly').'</label>'."\n";
|
||||
echo html_writer::select($roleoptions,'roleid',$roleid,false);
|
||||
echo '<label for="menuaction">'.get_string('showactions').'</label>'."\n";
|
||||
echo html_writer::select($actionoptions,'action',$action,false);
|
||||
echo '<input type="submit" value="'.get_string('go').'" />'."\n</div></form>\n";
|
||||
|
||||
$baseurl = $CFG->wwwroot.'/course/report/participation/index.php?id='.$course->id.'&roleid='
|
||||
.$roleid.'&instanceid='.$instanceid.'&timefrom='.$timefrom.'&action='.$action.'&perpage='.$perpage;
|
||||
|
||||
if (!empty($instanceid) && !empty($roleid)) {
|
||||
// from here assume we have at least the module we're using.
|
||||
$cm = $modinfo->cms[$instanceid];
|
||||
$modulename = get_string('modulename', $cm->modname);
|
||||
|
||||
include_once($CFG->dirroot.'/mod/'.$cm->modname.'/lib.php');
|
||||
|
||||
$viewfun = $cm->modname.'_get_view_actions';
|
||||
$postfun = $cm->modname.'_get_post_actions';
|
||||
|
||||
if (!function_exists($viewfun) || !function_exists($postfun)) {
|
||||
print_error('modulemissingcode', 'error', $baseurl, $cm->modname);
|
||||
}
|
||||
|
||||
$viewnames = $viewfun();
|
||||
$postnames = $postfun();
|
||||
|
||||
$table = new flexible_table('course-participation-'.$course->id.'-'.$cm->id.'-'.$roleid);
|
||||
$table->course = $course;
|
||||
|
||||
$table->define_columns(array('fullname','count','select'));
|
||||
$table->define_headers(array(get_string('user'),((!empty($action)) ? get_string($action) : get_string('allactions')),get_string('select')));
|
||||
$table->define_baseurl($baseurl);
|
||||
|
||||
$table->set_attribute('cellpadding','5');
|
||||
$table->set_attribute('class', 'generaltable generalbox reporttable');
|
||||
|
||||
$table->sortable(true,'lastname','ASC');
|
||||
$table->no_sorting('select');
|
||||
|
||||
$table->set_control_variables(array(
|
||||
TABLE_VAR_SORT => 'ssort',
|
||||
TABLE_VAR_HIDE => 'shide',
|
||||
TABLE_VAR_SHOW => 'sshow',
|
||||
TABLE_VAR_IFIRST => 'sifirst',
|
||||
TABLE_VAR_ILAST => 'silast',
|
||||
TABLE_VAR_PAGE => 'spage'
|
||||
));
|
||||
$table->setup();
|
||||
|
||||
switch ($action) {
|
||||
case 'view':
|
||||
$actions = $viewnames;
|
||||
break;
|
||||
case 'post':
|
||||
$actions = $postnames;
|
||||
break;
|
||||
default:
|
||||
// some modules have stuff we want to hide, ie mail blocked etc so do actually need to limit here.
|
||||
$actions = array_merge($viewnames, $postnames);
|
||||
}
|
||||
|
||||
list($actionsql, $params) = $DB->get_in_or_equal($actions, SQL_PARAMS_NAMED, 'action');
|
||||
$actionsql = "action $actionsql";
|
||||
|
||||
$relatedcontexts = get_related_contexts_string($context);
|
||||
|
||||
$sql = "SELECT ra.userid, u.firstname, u.lastname, u.idnumber, l.actioncount AS count
|
||||
FROM (SELECT * FROM {role_assignments} WHERE contextid $relatedcontexts AND roleid = :roleid ) ra
|
||||
JOIN {user} u ON u.id = ra.userid
|
||||
LEFT JOIN (
|
||||
SELECT userid, COUNT(action) AS actioncount FROM {log} WHERE cmid = :instanceid AND time > :timefrom AND $actionsql GROUP BY userid
|
||||
) l ON (l.userid = ra.userid)";
|
||||
$params['roleid'] = $roleid;
|
||||
$params['instanceid'] = $instanceid;
|
||||
$params['timefrom'] = $timefrom;
|
||||
|
||||
list($twhere, $tparams) = $table->get_sql_where();
|
||||
if ($twhere) {
|
||||
$sql .= ' WHERE '.$twhere; //initial bar
|
||||
$params = array_merge($params, $tparams);
|
||||
}
|
||||
|
||||
if ($table->get_sql_sort()) {
|
||||
$sql .= ' ORDER BY '.$table->get_sql_sort();
|
||||
}
|
||||
|
||||
$countsql = "SELECT COUNT(DISTINCT(ra.userid))
|
||||
FROM {role_assignments} ra
|
||||
JOIN {user} u ON u.id = ra.userid
|
||||
WHERE ra.contextid $relatedcontexts AND ra.roleid = :roleid";
|
||||
|
||||
$totalcount = $DB->count_records_sql($countsql, $params);
|
||||
|
||||
if ($twhere) {
|
||||
$matchcount = $DB->count_records_sql($countsql.' AND '.$twhere, $params);
|
||||
} else {
|
||||
$matchcount = $totalcount;
|
||||
}
|
||||
|
||||
echo '<div id="participationreport">' . "\n";
|
||||
echo '<p class="modulename">'.$modulename . ' ' . $strviews.': '.implode(', ',$viewnames).'<br />'."\n"
|
||||
. $modulename . ' ' . $strposts.': '.implode(', ',$postnames).'</p>'."\n";
|
||||
|
||||
$table->initialbars($totalcount > $perpage);
|
||||
$table->pagesize($perpage, $matchcount);
|
||||
|
||||
if (!$users = $DB->get_records_sql($sql, $params, $table->get_page_start(), $table->get_page_size())) {
|
||||
$users = array(); // tablelib will handle saying 'Nothing to display' for us.
|
||||
}
|
||||
|
||||
$data = array();
|
||||
|
||||
$a->count = $totalcount;
|
||||
$a->items = $role->name;
|
||||
|
||||
if ($matchcount != $totalcount) {
|
||||
$a->count = $matchcount.'/'.$a->count;
|
||||
}
|
||||
|
||||
echo '<h2>'.get_string('counteditems', '', $a).'</h2>'."\n";
|
||||
|
||||
echo '<form action="'.$CFG->wwwroot.'/user/action_redir.php" method="post" id="studentsform">'."\n";
|
||||
echo '<div>'."\n";
|
||||
echo '<input type="hidden" name="id" value="'.$id.'" />'."\n";
|
||||
echo '<input type="hidden" name="returnto" value="'. s($FULLME) .'" />'."\n";
|
||||
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />'."\n";
|
||||
|
||||
foreach ($users as $u) {
|
||||
$data = array('<a href="'.$CFG->wwwroot.'/user/view.php?id='.$u->userid.'&course='.$course->id.'">'.fullname($u,true).'</a>'."\n",
|
||||
((!empty($u->count)) ? get_string('yes').' ('.$u->count.') ' : get_string('no')),
|
||||
'<input type="checkbox" class="usercheckbox" name="user'.$u->userid.'" value="'.$u->count.'" />'."\n",
|
||||
);
|
||||
$table->add_data($data);
|
||||
}
|
||||
|
||||
$table->print_html();
|
||||
|
||||
if ($perpage == SHOW_ALL_PAGE_SIZE) {
|
||||
echo '<div id="showall"><a href="'.$baseurl.'&perpage='.DEFAULT_PAGE_SIZE.'">'.get_string('showperpage', '', DEFAULT_PAGE_SIZE).'</a></div>'."\n";
|
||||
}
|
||||
else if ($matchcount > 0 && $perpage < $matchcount) {
|
||||
echo '<div id="showall"><a href="'.$baseurl.'&perpage='.SHOW_ALL_PAGE_SIZE.'">'.get_string('showall', '', $matchcount).'</a></div>'."\n";
|
||||
}
|
||||
|
||||
echo '<div class="selectbuttons">';
|
||||
echo '<input type="button" id="checkall" value="'.get_string('selectall').'" /> '."\n";
|
||||
echo '<input type="button" id="checknone" value="'.get_string('deselectall').'" /> '."\n";
|
||||
if ($perpage >= $matchcount) {
|
||||
echo '<input type="button" id="checknos" value="'.get_string('selectnos').'" />'."\n";
|
||||
}
|
||||
echo '</div>';
|
||||
echo '<div>';
|
||||
echo '<label for="formaction">'.get_string('withselectedusers').'</label>';
|
||||
$displaylist['messageselect.php'] = get_string('messageselectadd');
|
||||
echo html_writer::select($displaylist, 'formaction', '', array(''=>'choosedots'), array('id'=>'formactionselect'));
|
||||
echo $OUTPUT->help_icon('withselectedusers');
|
||||
echo '<input type="submit" value="' . get_string('ok') . '" />'."\n";
|
||||
echo '</div>';
|
||||
echo '</div>'."\n";
|
||||
echo '</form>'."\n";
|
||||
echo '</div>'."\n";
|
||||
|
||||
$PAGE->requires->js_init_call('M.coursereport_participation.init');
|
||||
}
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/participation:view', $context)) {
|
||||
echo '<p>';
|
||||
$participationreport = get_string('participationreport');
|
||||
echo "<a href=\"{$CFG->wwwroot}/course/report/participation/index.php?id={$course->id}\">";
|
||||
echo "$participationreport</a>\n";
|
||||
echo '</p>';
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'coursereport/progress:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); // It must be included from a Moodle page
|
||||
}
|
||||
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
if (has_capability('coursereport/progress:view', $context)) {
|
||||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled()) {
|
||||
echo '<p>';
|
||||
echo '<a href="'.$CFG->wwwroot.'/course/report/progress/?course='.$course->id.'">'.get_string('activitycompletion', 'completion').'</a>';
|
||||
echo '</p>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once($CFG->dirroot.'/lib/statslib.php');
|
||||
require_once($CFG->dirroot.'/course/report/stats/lib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$courseid = optional_param('course', SITEID, PARAM_INT);
|
||||
$report = optional_param('report', 0, PARAM_INT);
|
||||
$time = optional_param('time', 0, PARAM_INT);
|
||||
$mode = optional_param('mode', STATS_MODE_GENERAL, PARAM_INT);
|
||||
$userid = optional_param('userid', 0, PARAM_INT);
|
||||
$roleid = 0;
|
||||
|
||||
if ($report > 50) {
|
||||
$roleid = substr($report,1);
|
||||
$report = 5;
|
||||
}
|
||||
|
||||
if ($report == STATS_REPORT_USER_LOGINS) {
|
||||
$courseid = SITEID; //override
|
||||
}
|
||||
|
||||
if ($mode == STATS_MODE_RANKED) {
|
||||
redirect($CFG->wwwroot.'/course/report/stats/index.php?time='.$time);
|
||||
}
|
||||
|
||||
if (!$course = $DB->get_record("course", array("id"=>$courseid))) {
|
||||
print_error("invalidcourseid");
|
||||
}
|
||||
|
||||
if (!empty($userid)) {
|
||||
if (!$user = $DB->get_record('user', array('id'=>$userid))) {
|
||||
print_error("nousers");
|
||||
}
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
require_capability('coursereport/stats:view', $context);
|
||||
|
||||
$PAGE->set_url(new moodle_url('/course/report/stats/index.php', array('course' => $course->id,
|
||||
'report' => $report,
|
||||
'time' => $time,
|
||||
'mode' => $mode,
|
||||
'userid' => $userid)));
|
||||
|
||||
add_to_log($course->id, "course", "report stats", "report/stats/index.php?course=$course->id", $course->id);
|
||||
stats_check_uptodate($course->id);
|
||||
|
||||
if ($course->id == SITEID) {
|
||||
admin_externalpage_setup('reportstats');
|
||||
echo $OUTPUT->header();
|
||||
} else {
|
||||
$strreports = get_string("reports");
|
||||
$strstats = get_string('stats');
|
||||
|
||||
$PAGE->set_title("$course->shortname: $strstats");
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->set_pagelayout('report');
|
||||
$PAGE->set_headingmenu(report_stats_mode_menu($course, $mode, $time, "$CFG->wwwroot/course/report/stats/index.php"));
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
require($CFG->dirroot.'/course/report/stats/report.php');
|
||||
|
||||
if (empty($CFG->enablestats)) {
|
||||
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
redirect("$CFG->wwwroot/$CFG->admin/settings.php?section=stats", get_string('mustenablestats', 'admin'), 3);
|
||||
} else {
|
||||
print_error('statsdisable');
|
||||
}
|
||||
}
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* This file contains functions used by the log reports
|
||||
*
|
||||
* This file is also required by /admin/reports/stats/index.php.
|
||||
*
|
||||
* @package course-report
|
||||
* @copyright 1999 onwards Martin Dougiamas http://moodle.com
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once($CFG->dirroot.'/lib/statslib.php');
|
||||
|
||||
function report_stats_mode_menu($course, $mode, $time, $url) {
|
||||
global $CFG, $OUTPUT;
|
||||
/*
|
||||
$reportoptions = stats_get_report_options($course->id, $mode);
|
||||
$timeoptions = report_stats_timeoptions($mode);
|
||||
if (empty($timeoptions)) {
|
||||
print_error('nostatstodisplay', '', $CFG->wwwroot.'/course/view.php?id='.$course->id);
|
||||
}
|
||||
*/
|
||||
|
||||
$options = array();
|
||||
$options[STATS_MODE_GENERAL] = get_string('statsmodegeneral');
|
||||
$options[STATS_MODE_DETAILED] = get_string('statsmodedetailed');
|
||||
if (has_capability('coursereport/stats:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
$options[STATS_MODE_RANKED] = get_string('reports');
|
||||
}
|
||||
$popupurl = $url."?course=$course->id&time=$time";
|
||||
$select = new single_select(new moodle_url($popupurl), 'mode', $options, $mode, null);
|
||||
$select->formid = 'switchmode';
|
||||
return $OUTPUT->render($select);
|
||||
}
|
||||
|
||||
|
||||
function report_stats_timeoptions($mode) {
|
||||
global $CFG, $DB;
|
||||
|
||||
if ($mode == STATS_MODE_DETAILED) {
|
||||
$earliestday = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_user_daily}');
|
||||
$earliestweek = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_user_weekly}');
|
||||
$earliestmonth = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_user_monthly}');
|
||||
} else {
|
||||
$earliestday = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_daily}');
|
||||
$earliestweek = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_weekly}');
|
||||
$earliestmonth = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_monthly}');
|
||||
}
|
||||
|
||||
|
||||
if (empty($earliestday)) $earliestday = time();
|
||||
if (empty($earliestweek)) $earliestweek = time();
|
||||
if (empty($earliestmonth)) $earliestmonth = time();
|
||||
|
||||
$now = stats_get_base_daily();
|
||||
$lastweekend = stats_get_base_weekly();
|
||||
$lastmonthend = stats_get_base_monthly();
|
||||
|
||||
return stats_get_time_options($now,$lastweekend,$lastmonthend,$earliestday,$earliestweek,$earliestmonth);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function extends the navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $course The course to object for the report
|
||||
* @param stdClass $context The context of the course
|
||||
*/
|
||||
function stats_report_extend_navigation($navigation, $course, $context) {
|
||||
global $CFG, $OUTPUT;
|
||||
if (has_capability('coursereport/stats:view', $context)) {
|
||||
if (!empty($CFG->enablestats)) {
|
||||
$url = new moodle_url('/course/report/stats/index.php', array('course'=>$course->id));
|
||||
$navigation->add(get_string('stats'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', ''));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of page types
|
||||
* @param string $pagetype current page type
|
||||
* @param stdClass $parentcontext Block's parent context
|
||||
* @param stdClass $currentcontext Current context of block
|
||||
*/
|
||||
function stats_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
$array = array(
|
||||
'*' => get_string('page-x', 'pagetype'),
|
||||
'course-report-*' => get_string('page-course-report-x', 'pagetype'),
|
||||
'course-report-stats-index' => get_string('pluginpagetype', 'coursereport_stats')
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/stats:view', $context)) {
|
||||
if (!empty($CFG->enablestats)) {
|
||||
echo '<p>';
|
||||
echo '<a href="'.$CFG->wwwroot.'/course/report/stats/index.php?course='.$course->id.'">'.get_string('stats').'</a>';
|
||||
echo '</p>';
|
||||
} else {
|
||||
echo '<p>';
|
||||
echo get_string('statsoff');
|
||||
echo '</p>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
<?php
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// //
|
||||
// NOTICE OF COPYRIGHT //
|
||||
// //
|
||||
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
|
||||
// http://moodle.com //
|
||||
// //
|
||||
// Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
// it under the terms of the GNU General Public License as published by //
|
||||
// the Free Software Foundation; either version 2 of the License, or //
|
||||
// (at your option) any later version. //
|
||||
// //
|
||||
// This program is distributed in the hope that it will be useful, //
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||
// GNU General Public License for more details: //
|
||||
// //
|
||||
// http://www.gnu.org/copyleft/gpl.html //
|
||||
// //
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
$plugin->version = 2010090501;
|
||||
$plugin->requires = 2010090501;
|
||||
|
||||
|
||||
+19
-519
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -25,32 +24,34 @@
|
||||
|
||||
require_once("../config.php");
|
||||
require_once("lib.php");
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
$id = required_param('id',PARAM_INT); // course id
|
||||
$user = required_param('user',PARAM_INT); // user id
|
||||
$mode = optional_param('mode', "todaylogs", PARAM_ALPHA);
|
||||
$page = optional_param('page', 0, PARAM_INT);
|
||||
$perpage = optional_param('perpage', 100, PARAM_INT);
|
||||
|
||||
$url = new moodle_url('/course/user.php', array('id'=>$id,'user'=>$user, 'mode'=>$mode));
|
||||
if ($page !== 0) {
|
||||
$url->param('page', $page);
|
||||
}
|
||||
if ($perpage !== 100) {
|
||||
$url->param('perpage', $perpage);
|
||||
}
|
||||
$PAGE->set_url($url);
|
||||
|
||||
if (!$course = $DB->get_record('course', array('id'=>$id))) {
|
||||
print_error('invalidcourseid', 'error');
|
||||
$course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
|
||||
$user = $DB->get_record("user", array("id"=>$user, 'deleted'=>0), '*', MUST_EXIST);
|
||||
|
||||
if ($mode === 'outline' or $mode === 'complete') {
|
||||
$url = new moodle_url('/report/outline/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>$mode));
|
||||
redirect($url);
|
||||
}
|
||||
if ($mode === 'todaylogs' or $mode === 'alllogs') {
|
||||
$logmode = ($mode === 'todaylogs') ? 'today' : 'all';
|
||||
$url = new moodle_url('/report/log/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>$logmode));
|
||||
redirect($url);
|
||||
}
|
||||
if ($mode === 'stats') {
|
||||
$url = new moodle_url('/report/stats/user.php', array('id'=>$user->id, 'course'=>$course->id));
|
||||
redirect($url);
|
||||
}
|
||||
if ($mode === 'coursecompletions' or $mode === 'coursecompletion') {
|
||||
$url = new moodle_url('/report/completion/user.php', array('id'=>$user->id, 'course'=>$course->id));
|
||||
redirect($url);
|
||||
}
|
||||
|
||||
if (! $user = $DB->get_record("user", array("id"=>$user))) {
|
||||
print_error('invaliduserid', 'error');
|
||||
}
|
||||
|
||||
require_login();
|
||||
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
$personalcontext = get_context_instance(CONTEXT_USER, $user->id);
|
||||
|
||||
@@ -76,26 +77,6 @@ $anyreport = has_capability('moodle/user:viewuseractivitiesreport', $personalco
|
||||
|
||||
$modes = array();
|
||||
|
||||
if ($myreports or $anyreport or has_capability('coursereport/outline:view', $coursecontext)) {
|
||||
$modes[] = 'outline';
|
||||
}
|
||||
|
||||
if ($myreports or $anyreport or has_capability('coursereport/outline:view', $coursecontext)) {
|
||||
$modes[] = 'complete';
|
||||
}
|
||||
|
||||
if ($myreports or $anyreport or has_capability('coursereport/log:viewtoday', $coursecontext)) {
|
||||
$modes[] = 'todaylogs';
|
||||
}
|
||||
|
||||
if ($myreports or $anyreport or has_capability('coursereport/log:view', $coursecontext)) {
|
||||
$modes[] = 'alllogs';
|
||||
}
|
||||
|
||||
if ($myreports or $anyreport or has_capability('coursereport/stats:view', $coursecontext)) {
|
||||
$modes[] = 'stats';
|
||||
}
|
||||
|
||||
if (has_capability('moodle/grade:viewall', $coursecontext)) {
|
||||
//ok - can view all course grades
|
||||
$modes[] = 'grade';
|
||||
@@ -113,19 +94,6 @@ if (has_capability('moodle/grade:viewall', $coursecontext)) {
|
||||
$modes[] = 'grade';
|
||||
}
|
||||
|
||||
// Course completion tab
|
||||
if (!empty($CFG->enablecompletion) && ($course->id == SITEID || !empty($course->enablecompletion)) && // completion enabled
|
||||
($myreports || $anyreport || ($course->id == SITEID || has_capability('coursereport/completion:view', $coursecontext)))) { // permissions to view the report
|
||||
|
||||
// Decide if singular or plural
|
||||
if ($course->id == SITEID) {
|
||||
$modes[] = 'coursecompletions';
|
||||
} else {
|
||||
$modes[] = 'coursecompletion';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (empty($modes)) {
|
||||
require_capability('moodle/user:viewuseractivitiesreport', $personalcontext);
|
||||
}
|
||||
@@ -138,18 +106,6 @@ if (!in_array($mode, $modes)) {
|
||||
add_to_log($course->id, "course", "user report", "user.php?id=$course->id&user=$user->id&mode=$mode", "$user->id");
|
||||
|
||||
$stractivityreport = get_string("activityreport");
|
||||
$strparticipants = get_string("participants");
|
||||
$stroutline = get_string("outline");
|
||||
$strcomplete = get_string("complete");
|
||||
$stralllogs = get_string("alllogs");
|
||||
$strtodaylogs = get_string("todaylogs");
|
||||
$strmode = get_string($mode);
|
||||
$fullname = fullname($user, true);
|
||||
|
||||
$link = null;
|
||||
if ($course->id != SITEID && has_capability('moodle/course:viewparticipants', $coursecontext)) {
|
||||
$link = new moodle_url('/user/index.php', array('id'=>$course->id));
|
||||
}
|
||||
|
||||
$PAGE->navigation->extend_for_user($user);
|
||||
$PAGE->navigation->set_userid_for_parent_checks($user->id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed.
|
||||
@@ -172,434 +128,6 @@ switch ($mode) {
|
||||
}
|
||||
break;
|
||||
|
||||
case "todaylogs" :
|
||||
echo '<div class="graph">';
|
||||
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)) {
|
||||
print_error('statsdisable', 'error');
|
||||
}
|
||||
|
||||
require_once($CFG->dirroot.'/lib/statslib.php');
|
||||
|
||||
$statsstatus = stats_check_uptodate($course->id);
|
||||
if ($statsstatus !== NULL) {
|
||||
echo $OUTPUT->notification($statsstatus);
|
||||
}
|
||||
|
||||
$earliestday = $DB->get_field_sql('SELECT timeend FROM {stats_user_daily} ORDER BY timeend');
|
||||
$earliestweek = $DB->get_field_sql('SELECT timeend FROM {stats_user_weekly} ORDER BY timeend');
|
||||
$earliestmonth = $DB->get_field_sql('SELECT timeend FROM {stats_user_monthly} ORDER BY timeend');
|
||||
|
||||
if (empty($earliestday)) $earliestday = time();
|
||||
if (empty($earliestweek)) $earliestweek = time();
|
||||
if (empty($earliestmonth)) $earliestmonth = time();
|
||||
|
||||
$now = stats_get_base_daily();
|
||||
$lastweekend = stats_get_base_weekly();
|
||||
$lastmonthend = stats_get_base_monthly();
|
||||
|
||||
$timeoptions = stats_get_time_options($now,$lastweekend,$lastmonthend,$earliestday,$earliestweek,$earliestmonth);
|
||||
|
||||
if (empty($timeoptions)) {
|
||||
print_error('nostatstodisplay', '', $CFG->wwwroot.'/course/user.php?id='.$course->id.'&user='.$user->id.'&mode=outline');
|
||||
}
|
||||
|
||||
// use the earliest.
|
||||
$time = array_pop(array_keys($timeoptions));
|
||||
|
||||
$param = stats_get_parameters($time,STATS_REPORT_USER_VIEW,$course->id,STATS_MODE_DETAILED);
|
||||
$params = $param->params;
|
||||
|
||||
$param->table = 'user_'.$param->table;
|
||||
|
||||
$sql = 'SELECT timeend,'.$param->fields.' FROM {stats_'.$param->table.'} WHERE '
|
||||
.(($course->id == SITEID) ? '' : ' courseid = '.$course->id.' AND ')
|
||||
.' userid = '.$user->id.' AND timeend >= '.$param->timeafter .$param->extras
|
||||
.' ORDER BY timeend DESC';
|
||||
$stats = $DB->get_records_sql($sql, $params); //TODO: improve these params!!
|
||||
|
||||
if (empty($stats)) {
|
||||
print_error('nostatstodisplay', '', $CFG->wwwroot.'/course/user.php?id='.$course->id.'&user='.$user->id.'&mode=outline');
|
||||
}
|
||||
|
||||
// MDL-10818, do not display broken graph when user has no permission to view graph
|
||||
if ($myreports or has_capability('coursereport/stats:view', $coursecontext)) {
|
||||
echo '<center><img src="'.$CFG->wwwroot.'/course/report/stats/graph.php?mode='.STATS_MODE_DETAILED.'&course='.$course->id.'&time='.$time.'&report='.STATS_REPORT_USER_VIEW.'&userid='.$user->id.'" alt="'.get_string('statisticsgraph').'" /></center>';
|
||||
}
|
||||
|
||||
// What the heck is this about? -- MD
|
||||
$stats = stats_fix_zeros($stats,$param->timeafter,$param->table,(!empty($param->line2)),(!empty($param->line3)));
|
||||
|
||||
$table = new html_table();
|
||||
$table->align = array('left','center','center','center');
|
||||
$param->table = str_replace('user_','',$param->table);
|
||||
switch ($param->table) {
|
||||
case 'daily' : $period = get_string('day'); break;
|
||||
case 'weekly' : $period = get_string('week'); break;
|
||||
case 'monthly': $period = get_string('month', 'form'); break;
|
||||
default : $period = '';
|
||||
}
|
||||
$table->head = array(get_string('periodending','moodle',$period),$param->line1,$param->line2,$param->line3);
|
||||
foreach ($stats as $stat) {
|
||||
if (!empty($stat->zerofixed)) { // Don't know why this is necessary, see stats_fix_zeros above - MD
|
||||
continue;
|
||||
}
|
||||
$a = array(userdate($stat->timeend,get_string('strftimedate'),$CFG->timezone),$stat->line1);
|
||||
$a[] = $stat->line2;
|
||||
$a[] = $stat->line3;
|
||||
$table->data[] = $a;
|
||||
}
|
||||
echo html_writer::table($table);
|
||||
break;
|
||||
|
||||
case "outline" :
|
||||
case "complete" :
|
||||
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
|
||||
$sections = get_all_sections($course->id);
|
||||
$itemsprinted = false;
|
||||
|
||||
for ($i=0; $i<=$course->numsections; $i++) {
|
||||
|
||||
if (isset($sections[$i])) { // should always be true
|
||||
|
||||
$section = $sections[$i];
|
||||
$showsection = (has_capability('moodle/course:viewhiddensections', $coursecontext) or $section->visible or !$course->hiddensections);
|
||||
|
||||
if ($showsection) { // prevent hidden sections in user activity. Thanks to Geoff Wilbert!
|
||||
// Check the section has a sequence. This is the sequence of modules/resources.
|
||||
// If there is no sequence there is nothing to display.
|
||||
if ($section->sequence) {
|
||||
$itemsprinted = true;
|
||||
echo '<div class="section">';
|
||||
echo '<h2>';
|
||||
echo get_section_name($course, $section);
|
||||
echo "</h2>";
|
||||
|
||||
echo '<div class="content">';
|
||||
|
||||
if ($mode == "outline") {
|
||||
echo "<table cellpadding=\"4\" cellspacing=\"0\">";
|
||||
}
|
||||
|
||||
$sectionmods = explode(",", $section->sequence);
|
||||
foreach ($sectionmods as $sectionmod) {
|
||||
if (empty($mods[$sectionmod])) {
|
||||
continue;
|
||||
}
|
||||
$mod = $mods[$sectionmod];
|
||||
|
||||
if (empty($mod->visible)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$instance = $DB->get_record("$mod->modname", array("id"=>$mod->instance));
|
||||
$libfile = "$CFG->dirroot/mod/$mod->modname/lib.php";
|
||||
|
||||
if (file_exists($libfile)) {
|
||||
require_once($libfile);
|
||||
|
||||
switch ($mode) {
|
||||
case "outline":
|
||||
$user_outline = $mod->modname."_user_outline";
|
||||
if (function_exists($user_outline)) {
|
||||
$output = $user_outline($course, $user, $mod, $instance);
|
||||
print_outline_row($mod, $instance, $output);
|
||||
}
|
||||
break;
|
||||
case "complete":
|
||||
$user_complete = $mod->modname."_user_complete";
|
||||
if (function_exists($user_complete)) {
|
||||
$image = $OUTPUT->pix_icon('icon', $mod->modfullname, 'mod_'.$mod->modname, array('class'=>'icon'));
|
||||
echo "<h4>$image $mod->modfullname: ".
|
||||
"<a href=\"$CFG->wwwroot/mod/$mod->modname/view.php?id=$mod->id\">".
|
||||
format_string($instance->name,true)."</a></h4>";
|
||||
|
||||
ob_start();
|
||||
|
||||
echo "<ul>";
|
||||
$user_complete($course, $user, $mod, $instance);
|
||||
echo "</ul>";
|
||||
|
||||
$output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
if (str_replace(' ', '', $output) != '<ul></ul>') {
|
||||
echo $output;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($mode == "outline") {
|
||||
echo "</table>";
|
||||
}
|
||||
echo '</div>'; // content
|
||||
echo '</div>'; // section
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$itemsprinted) {
|
||||
echo $OUTPUT->notification(get_string('nothingtodisplay'));
|
||||
}
|
||||
|
||||
break;
|
||||
case "coursecompletion":
|
||||
case "coursecompletions":
|
||||
|
||||
// Display course completion user report
|
||||
|
||||
// Grab all courses the user is enrolled in and their completion status
|
||||
$sql = "
|
||||
SELECT DISTINCT
|
||||
c.id AS id
|
||||
FROM
|
||||
{course} c
|
||||
INNER JOIN
|
||||
{context} con
|
||||
ON con.instanceid = c.id
|
||||
INNER JOIN
|
||||
{role_assignments} ra
|
||||
ON ra.contextid = con.id
|
||||
INNER JOIN
|
||||
{enrol} e
|
||||
ON c.id = e.courseid
|
||||
INNER JOIN
|
||||
{user_enrolments} ue
|
||||
ON e.id = ue.enrolid AND ra.userid = ue.userid
|
||||
AND ra.userid = {$user->id}
|
||||
";
|
||||
|
||||
// Get roles that are tracked by course completion
|
||||
if ($roles = $CFG->gradebookroles) {
|
||||
$sql .= '
|
||||
AND ra.roleid IN ('.$roles.')
|
||||
';
|
||||
}
|
||||
|
||||
$sql .= '
|
||||
WHERE
|
||||
con.contextlevel = '.CONTEXT_COURSE.'
|
||||
AND c.enablecompletion = 1
|
||||
';
|
||||
|
||||
|
||||
// If we are looking at a specific course
|
||||
if ($course->id != 1) {
|
||||
$sql .= '
|
||||
AND c.id = '.(int)$course->id.'
|
||||
';
|
||||
}
|
||||
|
||||
// Check if result is empty
|
||||
$rs = $DB->get_recordset_sql($sql);
|
||||
if (!$rs->valid()) {
|
||||
|
||||
if ($course->id != 1) {
|
||||
$error = get_string('nocompletions', 'coursereport_completion');
|
||||
} else {
|
||||
$error = get_string('nocompletioncoursesenroled', 'coursereport_completion');
|
||||
}
|
||||
|
||||
echo $OUTPUT->notification($error);
|
||||
$rs->close(); // not going to loop (but break), close rs
|
||||
break;
|
||||
}
|
||||
|
||||
// Categorize courses by their status
|
||||
$courses = array(
|
||||
'inprogress' => array(),
|
||||
'complete' => array(),
|
||||
'unstarted' => array()
|
||||
);
|
||||
|
||||
// Sort courses by the user's status in each
|
||||
foreach ($rs as $course_completion) {
|
||||
$c_info = new completion_info((object)$course_completion);
|
||||
|
||||
// Is course complete?
|
||||
$coursecomplete = $c_info->is_course_complete($user->id);
|
||||
|
||||
// Has this user completed any criteria?
|
||||
$criteriacomplete = $c_info->count_course_user_data($user->id);
|
||||
|
||||
if ($coursecomplete) {
|
||||
$courses['complete'][] = $c_info;
|
||||
} else if ($criteriacomplete) {
|
||||
$courses['inprogress'][] = $c_info;
|
||||
} else {
|
||||
$courses['unstarted'][] = $c_info;
|
||||
}
|
||||
}
|
||||
$rs->close(); // after loop, close rs
|
||||
|
||||
// Loop through course status groups
|
||||
foreach ($courses as $type => $infos) {
|
||||
|
||||
// If there are courses with this status
|
||||
if (!empty($infos)) {
|
||||
|
||||
echo '<h1 align="center">'.get_string($type, 'coursereport_completion').'</h1>';
|
||||
echo '<table class="generalbox boxaligncenter">';
|
||||
echo '<tr class="ccheader">';
|
||||
echo '<th class="c0 header" scope="col">'.get_string('course').'</th>';
|
||||
echo '<th class="c1 header" scope="col">'.get_string('requiredcriteria', 'completion').'</th>';
|
||||
echo '<th class="c2 header" scope="col">'.get_string('status').'</th>';
|
||||
echo '<th class="c3 header" scope="col" width="15%">'.get_string('info').'</th>';
|
||||
|
||||
if ($type === 'complete') {
|
||||
echo '<th class="c4 header" scope="col">'.get_string('completiondate', 'coursereport_completion').'</th>';
|
||||
}
|
||||
|
||||
echo '</tr>';
|
||||
|
||||
// For each course
|
||||
foreach ($infos as $c_info) {
|
||||
|
||||
// Get course info
|
||||
$c_course = $DB->get_record('course', array('id' => $c_info->course_id));
|
||||
$course_context = get_context_instance(CONTEXT_COURSE, $c_course->id, MUST_EXIST);
|
||||
$course_name = format_string($c_course->fullname, true, array('context' => $course_context));
|
||||
|
||||
// Get completions
|
||||
$completions = $c_info->get_completions($user->id);
|
||||
|
||||
// Save row data
|
||||
$rows = array();
|
||||
|
||||
// For aggregating activity completion
|
||||
$activities = array();
|
||||
$activities_complete = 0;
|
||||
|
||||
// For aggregating prerequisites
|
||||
$prerequisites = array();
|
||||
$prerequisites_complete = 0;
|
||||
|
||||
// Loop through course criteria
|
||||
foreach ($completions as $completion) {
|
||||
$criteria = $completion->get_criteria();
|
||||
$complete = $completion->is_complete();
|
||||
|
||||
// Activities are a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_ACTIVITY) {
|
||||
$activities[$criteria->moduleinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$activities_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Prerequisites are also a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_COURSE) {
|
||||
$prerequisites[$criteria->courseinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$prerequisites_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$row = array();
|
||||
$row['title'] = $criteria->get_title();
|
||||
$row['status'] = $completion->get_status();
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
// Aggregate activities
|
||||
if (!empty($activities)) {
|
||||
|
||||
$row = array();
|
||||
$row['title'] = get_string('activitiescomplete', 'coursereport_completion');
|
||||
$row['status'] = $activities_complete.' of '.count($activities);
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
// Aggregate prerequisites
|
||||
if (!empty($prerequisites)) {
|
||||
|
||||
$row = array();
|
||||
$row['title'] = get_string('prerequisitescompleted', 'completion');
|
||||
$row['status'] = $prerequisites_complete.' of '.count($prerequisites);
|
||||
array_splice($rows, 0, 0, array($row));
|
||||
}
|
||||
|
||||
$first_row = true;
|
||||
|
||||
// Print table
|
||||
foreach ($rows as $row) {
|
||||
|
||||
// Display course name on first row
|
||||
if ($first_row) {
|
||||
echo '<tr><td class="c0"><a href="'.$CFG->wwwroot.'/course/view.php?id='.$c_course->id.'">'.$course_name.'</a></td>';
|
||||
} else {
|
||||
echo '<tr><td class="c0"></td>';
|
||||
}
|
||||
|
||||
echo '<td class="c1">';
|
||||
echo $row['title'];
|
||||
echo '</td><td class="c2">';
|
||||
|
||||
switch ($row['status']) {
|
||||
case 'Yes':
|
||||
echo get_string('complete');
|
||||
break;
|
||||
|
||||
case 'No':
|
||||
echo get_string('incomplete', 'coursereport_completion');
|
||||
break;
|
||||
|
||||
default:
|
||||
echo $row['status'];
|
||||
}
|
||||
|
||||
// Display link on first row
|
||||
echo '</td><td class="c3">';
|
||||
if ($first_row) {
|
||||
echo '<a href="'.$CFG->wwwroot.'/blocks/completionstatus/details.php?course='.$c_course->id.'&user='.$user->id.'">'.get_string('detailedview', 'coursereport_completion').'</a>';
|
||||
}
|
||||
echo '</td>';
|
||||
|
||||
// Display completion date for completed courses on first row
|
||||
if ($type === 'complete' && $first_row) {
|
||||
$params = array(
|
||||
'userid' => $user->id,
|
||||
'course' => $c_course->id
|
||||
);
|
||||
|
||||
$ccompletion = new completion_completion($params);
|
||||
echo '<td class="c4">'.userdate($ccompletion->timecompleted, '%e %B %G').'</td>';
|
||||
}
|
||||
|
||||
$first_row = false;
|
||||
echo '</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '</table>';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
// can not be reached ;-)
|
||||
@@ -607,31 +135,3 @@ switch ($mode) {
|
||||
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
|
||||
function print_outline_row($mod, $instance, $result) {
|
||||
global $OUTPUT;
|
||||
|
||||
$image = "<img src=\"" . $OUTPUT->pix_url('icon', $mod->modname) . "\" class=\"icon\" alt=\"$mod->modfullname\" />";
|
||||
|
||||
echo "<tr>";
|
||||
echo "<td valign=\"top\">$image</td>";
|
||||
echo "<td valign=\"top\" style=\"width:300\">";
|
||||
echo " <a title=\"$mod->modfullname\"";
|
||||
echo " href=\"../mod/$mod->modname/view.php?id=$mod->id\">".format_string($instance->name,true)."</a></td>";
|
||||
echo "<td> </td>";
|
||||
echo "<td valign=\"top\">";
|
||||
if (isset($result->info)) {
|
||||
echo "$result->info";
|
||||
} else {
|
||||
echo "<p style=\"text-align:center\">-</p>";
|
||||
}
|
||||
echo "</td>";
|
||||
echo "<td> </td>";
|
||||
if (!empty($result->time)) {
|
||||
$timeago = format_time(time() - $result->time);
|
||||
echo "<td valign=\"top\" style=\"white-space: nowrap\">".userdate($result->time)." ($timeago)</td>";
|
||||
}
|
||||
echo "</tr>";
|
||||
}
|
||||
|
||||
|
||||
@@ -835,6 +835,8 @@ $string['registration'] = 'Registration';
|
||||
$string['releasenoteslink'] = 'For information about this version of Moodle, please see the online <a target="_blank" href="{$a}">Release Notes</a>';
|
||||
$string['rememberusername'] = 'Remember username';
|
||||
$string['rememberusername_desc'] = 'Enable if you want to store permanent cookies with usernames during user login. Permanent cookies may be considered a privacy issue if used without consent.';
|
||||
$string['reportsmanage'] = 'Manage reports';
|
||||
$string['reportsdeleteconfirm'] = 'You are about to completely delete the report \'{$a}\'. This will completely delete everything in the database associated with this plugin. Are you SURE you want to continue?';
|
||||
$string['requiredentrieschanged'] = '<strong>IMPORTANT - PLEASE READ<br/>(This warning message will only be displayed during this upgrade)</strong><br/>Due to a bug fix, the behaviour of database activities using the \'Required entries\' and \'Required entries before viewing settings\' settings will change. A more detailed explanation of the changes can be read on <a href="http://moodle.org/mod/forum/discuss.php?d=110928" target="_blank">the database module forum</a>. The expected behavior of these settings can also be read on <a href="http://docs.moodle.org/en/Adding/editing_a_database#Required_entries" target="_blank">Moodle Docs</a>.
|
||||
<br/><br/>This change affects the following databases in your system: (Please save this list now, and after the upgrade, check that these activities still work the way that the teacher intends.)<br/><strong>{$a->text}</strong><br/>';
|
||||
$string['requiremodintro'] = 'Require activity description';
|
||||
|
||||
+1
-2
@@ -902,7 +902,6 @@ $string['liketologin'] = 'Would you like to log in now with a full user account?
|
||||
$string['list'] = 'List';
|
||||
$string['listfiles'] = 'List of files in {$a}';
|
||||
$string['listofallpeople'] = 'List of all people';
|
||||
$string['livelogs'] = 'Live logs from the past hour';
|
||||
$string['local'] = 'Local';
|
||||
$string['localplugindeleteconfirm'] = 'You are about to completely delete the local plugin \'{$a}\'. This will completely delete everything in the database associated with this plugin. Are you SURE you want to continue?';
|
||||
$string['localplugins'] = 'Local plugins';
|
||||
@@ -1175,7 +1174,7 @@ $string['notice'] = 'Notice';
|
||||
$string['noticenewerbackup'] = 'This backup file has been created with Moodle {$a->backuprelease} ({$a->backupversion}) and it\'s newer than your currently installed Moodle {$a->serverrelease} ({$a->serverversion}). This could cause some inconsistencies because backwards compatibility of backup files cannot be guaranteed.';
|
||||
$string['notifications'] = 'Notifications';
|
||||
$string['notifyloginfailuresmessage'] = '{$a->time}, IP: {$a->ip}, User: {$a->info}';
|
||||
$string['notifyloginfailuresmessageend'] = 'You can view these logs at {$a}/course/report/log/index.php?id=1&chooselog=1&modid=site_errors.';
|
||||
$string['notifyloginfailuresmessageend'] = 'You can view these logs at {$a}/report/log/index.php?id=1&chooselog=1&modid=site_errors.';
|
||||
$string['notifyloginfailuresmessagestart'] = 'Here is a list of failed login attempts at {$a} since you were last notified';
|
||||
$string['notifyloginfailuressubject'] = '{$a} :: Failed logins notification';
|
||||
$string['notincluded'] = 'Not included';
|
||||
|
||||
@@ -31,6 +31,7 @@ $string['page-course-report-x'] = 'Any course report';
|
||||
$string['page-mod-x'] = 'Any activity module page';
|
||||
$string['page-mod-x-view'] = 'Any main activity module page';
|
||||
$string['page-my-index'] = 'My home page';
|
||||
$string['page-report-x'] = 'Any report page';
|
||||
$string['page-site-index'] = 'The front page only';
|
||||
$string['page-site-x'] = 'Any top-level site page';
|
||||
$string['page-user-view'] = 'Only user profile pages';
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ $string['type_qformat_plural'] = 'Question import/export formats';
|
||||
$string['type_qtype'] = 'Question type';
|
||||
$string['type_qtype_plural'] = 'Question types';
|
||||
$string['type_report'] = 'Site report';
|
||||
$string['type_report_plural'] = 'Site reports';
|
||||
$string['type_report_plural'] = 'Reports';
|
||||
$string['type_repository'] = 'Repository';
|
||||
$string['type_repository_plural'] = 'Repositories';
|
||||
$string['type_theme'] = 'Theme';
|
||||
|
||||
+1
-1
@@ -7348,7 +7348,7 @@ function get_plugin_types($fullpaths=true) {
|
||||
'editor' => 'lib/editor',
|
||||
'format' => 'course/format',
|
||||
'profilefield' => 'user/profile/field',
|
||||
'report' => $CFG->admin.'/report',
|
||||
'report' => 'report',
|
||||
'coursereport' => 'course/report', // must be after system reports
|
||||
'gradeexport' => 'grade/export',
|
||||
'gradeimport' => 'grade/import',
|
||||
|
||||
+38
-75
@@ -1831,11 +1831,12 @@ class global_navigation extends navigation_node {
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
* Loads user specific information into the navigation in the appopriate place.
|
||||
* Loads user specific information into the navigation in the appropriate place.
|
||||
*
|
||||
* If no user is provided the current user is assumed.
|
||||
*
|
||||
* @param stdClass $user
|
||||
* @param bool $forceforcontext probably force something to be loaded somewhere (ask SamH if not sure what this means)
|
||||
* @return bool
|
||||
*/
|
||||
protected function load_for_user($user=null, $forceforcontext=false) {
|
||||
@@ -1972,44 +1973,15 @@ class global_navigation extends navigation_node {
|
||||
$usernode->add(get_string('notes', 'notes'), $url);
|
||||
}
|
||||
|
||||
// Add a reports tab and then add reports the the user has permission to see.
|
||||
$anyreport = has_capability('moodle/user:viewuseractivitiesreport', $usercontext);
|
||||
|
||||
$outlinetreport = ($anyreport || has_capability('coursereport/outline:view', $coursecontext));
|
||||
$logtodayreport = ($anyreport || has_capability('coursereport/log:viewtoday', $coursecontext));
|
||||
$logreport = ($anyreport || has_capability('coursereport/log:view', $coursecontext));
|
||||
$statsreport = ($anyreport || has_capability('coursereport/stats:view', $coursecontext));
|
||||
|
||||
$somereport = $outlinetreport || $logtodayreport || $logreport || $statsreport;
|
||||
|
||||
$viewreports = ($anyreport || $somereport || ($course->showreports && $iscurrentuser && $forceforcontext));
|
||||
if ($viewreports) {
|
||||
$reporttab = $usernode->add(get_string('activityreports'));
|
||||
$reportargs = array('user'=>$user->id);
|
||||
if (!empty($course->id)) {
|
||||
$reportargs['id'] = $course->id;
|
||||
} else {
|
||||
$reportargs['id'] = SITEID;
|
||||
}
|
||||
if ($viewreports || $outlinetreport) {
|
||||
$reporttab->add(get_string('outlinereport'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'outline'))));
|
||||
$reporttab->add(get_string('completereport'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'complete'))));
|
||||
}
|
||||
|
||||
if ($viewreports || $logtodayreport) {
|
||||
$reporttab->add(get_string('todaylogs'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'todaylogs'))));
|
||||
}
|
||||
|
||||
if ($viewreports || $logreport ) {
|
||||
$reporttab->add(get_string('alllogs'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'alllogs'))));
|
||||
}
|
||||
|
||||
if (!empty($CFG->enablestats)) {
|
||||
if ($viewreports || $statsreport) {
|
||||
$reporttab->add(get_string('stats'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'stats'))));
|
||||
}
|
||||
}
|
||||
|
||||
// Add reports node
|
||||
$reporttab = $usernode->add(get_string('activityreports'));
|
||||
$reports = get_plugin_list_with_function('report', 'extend_navigation_user', 'lib.php');
|
||||
foreach ($reports as $reportfunction) {
|
||||
$reportfunction($reporttab, $user, $course);
|
||||
}
|
||||
$anyreport = has_capability('moodle/user:viewuseractivitiesreport', $usercontext);
|
||||
if ($anyreport || ($course->showreports && $iscurrentuser && $forceforcontext)) {
|
||||
// Add grade hardcoded grade report if necessary
|
||||
$gradeaccess = false;
|
||||
if (has_capability('moodle/grade:viewall', $coursecontext)) {
|
||||
//ok - can view all course grades
|
||||
@@ -2027,13 +1999,11 @@ class global_navigation extends navigation_node {
|
||||
}
|
||||
}
|
||||
if ($gradeaccess) {
|
||||
$reporttab->add(get_string('grade'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'grade'))));
|
||||
$reporttab->add(get_string('grade'), new moodle_url('/course/user.php', array('mode'=>'grade', 'id'=>$course->id)));
|
||||
}
|
||||
|
||||
// Check the number of nodes in the report node... if there are none remove
|
||||
// the node
|
||||
$reporttab->trim_if_empty();
|
||||
}
|
||||
// Check the number of nodes in the report node... if there are none remove the node
|
||||
$reporttab->trim_if_empty();
|
||||
|
||||
// If the user is the current user add the repositories for the current user
|
||||
$hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields));
|
||||
@@ -2090,30 +2060,14 @@ class global_navigation extends navigation_node {
|
||||
$usercoursenode->add(get_string('entercourse'), new moodle_url('/course/view.php', array('id'=>$usercourse->id)), self::TYPE_SETTING, null, null, new pix_icon('i/course', ''));
|
||||
}
|
||||
|
||||
$outlinetreport = ($anyreport || has_capability('coursereport/outline:view', $usercoursecontext));
|
||||
$logtodayreport = ($anyreport || has_capability('coursereport/log:viewtoday', $usercoursecontext));
|
||||
$logreport = ($anyreport || has_capability('coursereport/log:view', $usercoursecontext));
|
||||
$statsreport = ($anyreport || has_capability('coursereport/stats:view', $usercoursecontext));
|
||||
if ($outlinetreport || $logtodayreport || $logreport || $statsreport) {
|
||||
$reporttab = $usercoursenode->add(get_string('activityreports'));
|
||||
$reportargs = array('user'=>$user->id, 'id'=>$usercourse->id);
|
||||
if ($outlinetreport) {
|
||||
$reporttab->add(get_string('outlinereport'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'outline'))));
|
||||
$reporttab->add(get_string('completereport'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'complete'))));
|
||||
}
|
||||
$reporttab = $usercoursenode->add(get_string('activityreports'));
|
||||
|
||||
if ($logtodayreport) {
|
||||
$reporttab->add(get_string('todaylogs'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'todaylogs'))));
|
||||
}
|
||||
|
||||
if ($logreport) {
|
||||
$reporttab->add(get_string('alllogs'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'alllogs'))));
|
||||
}
|
||||
|
||||
if (!empty($CFG->enablestats) && $statsreport) {
|
||||
$reporttab->add(get_string('stats'), new moodle_url('/course/user.php', array_merge($reportargs, array('mode'=>'stats'))));
|
||||
}
|
||||
$reports = get_plugin_list_with_function('report', 'extend_navigation_user', 'lib.php');
|
||||
foreach ($reports as $reportfunction) {
|
||||
$reportfunction($reporttab, $user, $usercourse);
|
||||
}
|
||||
|
||||
$reporttab->trim_if_empty();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -2286,8 +2240,8 @@ class global_navigation extends navigation_node {
|
||||
|
||||
// View course reports
|
||||
if (has_capability('moodle/site:viewreports', $this->page->context)) { // basic capability for listing of reports
|
||||
$reportnav = $coursenode->add(get_string('reports'), new moodle_url('/course/report.php', array('id'=>$course->id)), self::TYPE_CONTAINER, null, null, new pix_icon('i/stats', ''));
|
||||
$coursereports = get_plugin_list('coursereport');
|
||||
$reportnav = $coursenode->add(get_string('reports'), null, self::TYPE_CONTAINER, null, null, new pix_icon('i/stats', ''));
|
||||
$coursereports = get_plugin_list('coursereport'); // deprecated
|
||||
foreach ($coursereports as $report=>$dir) {
|
||||
$libfile = $CFG->dirroot.'/course/report/'.$report.'/lib.php';
|
||||
if (file_exists($libfile)) {
|
||||
@@ -2298,6 +2252,11 @@ class global_navigation extends navigation_node {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$reports = get_plugin_list_with_function('report', 'extend_navigation_course', 'lib.php');
|
||||
foreach ($reports as $reportfunction) {
|
||||
$reportfunction($reportnav, $course, $this->page->context);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -2356,8 +2315,8 @@ class global_navigation extends navigation_node {
|
||||
|
||||
// View course reports
|
||||
if (has_capability('moodle/site:viewreports', $this->page->context)) { // basic capability for listing of reports
|
||||
$reportnav = $coursenode->add(get_string('reports'), new moodle_url('/course/report.php', array('id'=>$course->id)), self::TYPE_CONTAINER, null, null, new pix_icon('i/stats', ''));
|
||||
$coursereports = get_plugin_list('coursereport');
|
||||
$reportnav = $coursenode->add(get_string('reports'), null, self::TYPE_CONTAINER, null, null, new pix_icon('i/stats', ''));
|
||||
$coursereports = get_plugin_list('coursereport'); // deprecated
|
||||
foreach ($coursereports as $report=>$dir) {
|
||||
$libfile = $CFG->dirroot.'/course/report/'.$report.'/lib.php';
|
||||
if (file_exists($libfile)) {
|
||||
@@ -2368,6 +2327,11 @@ class global_navigation extends navigation_node {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$reports = get_plugin_list_with_function('report', 'extend_navigation_course', 'lib.php');
|
||||
foreach ($reports as $reportfunction) {
|
||||
$reportfunction($reportnav, $course, $this->page->context);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -3444,12 +3408,11 @@ class settings_navigation extends navigation_node {
|
||||
$url = new moodle_url('/filter/manage.php', array('contextid'=>$this->page->cm->context->id));
|
||||
$modulenode->add(get_string('filters', 'admin'), $url, self::TYPE_SETTING, null, 'filtermanage');
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/log:view', get_context_instance(CONTEXT_COURSE, $this->page->cm->course))) {
|
||||
$url = new moodle_url('/course/report/log/index.php', array('chooselog'=>'1','id'=>$this->page->cm->course,'modid'=>$this->page->cm->id));
|
||||
$modulenode->add(get_string('logs'), $url, self::TYPE_SETTING, null, 'logreport');
|
||||
// Add reports
|
||||
$reports = get_plugin_list_with_function('report', 'extend_navigation_module', 'lib.php');
|
||||
foreach ($reports as $reportfunction) {
|
||||
$reportfunction($modulenode, $this->page->cm);
|
||||
}
|
||||
|
||||
// Add a backup link
|
||||
$featuresfunc = $this->page->activityname.'_supports';
|
||||
if (function_exists($featuresfunc) && $featuresfunc(FEATURE_BACKUP_MOODLE2) && has_capability('moodle/backup:backupactivity', $this->page->cm->context)) {
|
||||
|
||||
@@ -507,8 +507,8 @@ class core_renderer extends renderer_base {
|
||||
} else {
|
||||
$loggedinas .= get_string('failedloginattemptsall', '', $count);
|
||||
}
|
||||
if (has_capability('coursereport/log:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
$loggedinas .= ' (<a href="'.$CFG->wwwroot.'/course/report/log/index.php'.
|
||||
if (file_exists("$CFG->dirroot/report/log/index.php") and has_capability('report/log:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
$loggedinas .= ' (<a href="'.$CFG->wwwroot.'/report/log/index.php'.
|
||||
'?chooselog=1&id=1&modid=site_errors">'.get_string('logs').'</a>)';
|
||||
}
|
||||
$loggedinas .= '</div>';
|
||||
|
||||
+13
-3
@@ -304,7 +304,7 @@ class plugin_manager {
|
||||
),
|
||||
|
||||
'coursereport' => array(
|
||||
'completion', 'log', 'outline', 'participation', 'progress', 'stats'
|
||||
//deprecated!
|
||||
),
|
||||
|
||||
'datafield' => array(
|
||||
@@ -406,8 +406,8 @@ class plugin_manager {
|
||||
),
|
||||
|
||||
'report' => array(
|
||||
'backups', 'configlog', 'courseoverview',
|
||||
'log', 'questioninstances', 'security', 'stats'
|
||||
'backups', 'completion', 'configlog', 'courseoverview',
|
||||
'log', 'loglive', 'outline', 'participation', 'progress', 'questioninstances', 'security', 'stats'
|
||||
),
|
||||
|
||||
'repository' => array(
|
||||
@@ -1654,3 +1654,13 @@ class plugintype_tool extends plugintype_base implements plugin_information {
|
||||
return new moodle_url('/admin/tools.php', array('delete' => $this->name, 'sesskey' => sesskey()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Class for admin tool plugins
|
||||
*/
|
||||
class plugintype_report extends plugintype_base implements plugin_information {
|
||||
|
||||
public function get_uninstall_url() {
|
||||
return new moodle_url('/admin/reports.php', array('delete' => $this->name, 'sesskey' => sesskey()));
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1350,13 +1350,13 @@ function stats_get_report_options($courseid,$mode) {
|
||||
case STATS_MODE_DETAILED:
|
||||
$reportoptions[STATS_REPORT_USER_ACTIVITY] = get_string('statsreport'.STATS_REPORT_USER_ACTIVITY);
|
||||
$reportoptions[STATS_REPORT_USER_ALLACTIVITY] = get_string('statsreport'.STATS_REPORT_USER_ALLACTIVITY);
|
||||
if (has_capability('coursereport/stats:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
if (has_capability('report/stats:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
$site = get_site();
|
||||
$reportoptions[STATS_REPORT_USER_LOGINS] = get_string('statsreport'.STATS_REPORT_USER_LOGINS);
|
||||
}
|
||||
break;
|
||||
case STATS_MODE_RANKED:
|
||||
if (has_capability('coursereport/stats:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
if (has_capability('report/stats:view', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
$reportoptions[STATS_REPORT_ACTIVE_COURSES] = get_string('statsreport'.STATS_REPORT_ACTIVE_COURSES);
|
||||
$reportoptions[STATS_REPORT_ACTIVE_COURSES_WEIGHTED] = get_string('statsreport'.STATS_REPORT_ACTIVE_COURSES_WEIGHTED);
|
||||
$reportoptions[STATS_REPORT_PARTICIPATORY_COURSES] = get_string('statsreport'.STATS_REPORT_PARTICIPATORY_COURSES);
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->dirroot.'/backup/lib.php');
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Strings for component 'report_backups'
|
||||
*
|
||||
* @package report
|
||||
* @subpackage backups
|
||||
* @copyright 2007 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['pluginname'] = 'Backups report';
|
||||
@@ -25,4 +25,7 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportbackups', get_string('backups', 'admin'), "$CFG->wwwroot/$CFG->admin/report/backups/index.php",'moodle/backup:backupcourse'));
|
||||
$ADMIN->add('reports', new admin_externalpage('reportbackups', get_string('backups', 'admin'), "$CFG->wwwroot/report/backups/index.php",'moodle/backup:backupcourse'));
|
||||
|
||||
// no report settings
|
||||
$settings = null;
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version details.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage backups
|
||||
* @copyright 2007 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$plugin->version = 2011110300; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->requires = 2011110200; // Requires this Moodle version
|
||||
$plugin->component = 'report_backups'; // Full name of the plugin (used for diagnostics)
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Capabilities
|
||||
*
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/completion:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'coursereport/completion:view',
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Post installation and migration code.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2011 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
function xmldb_report_completion_install() {
|
||||
global $DB;
|
||||
|
||||
// this is a hack which is needed for cleanup of original coursereport_completion stuff
|
||||
unset_all_config_for_plugin('coursereport_completion');
|
||||
capabilities_cleanup('coursereport_completion');
|
||||
|
||||
// update existing block page patterns
|
||||
$DB->set_field('block_instances', 'pagetypepattern', 'report-completion-index', array('pagetypepattern'=>'course-report-completion-index'));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -15,16 +14,17 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
/**
|
||||
* Course completion progress report
|
||||
*
|
||||
* @package moodlecore
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <aaronb@catalyst.net.nz>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <aaronb@catalyst.net.nz>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
require_once('../../../config.php');
|
||||
|
||||
require('../../config.php');
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
/**
|
||||
@@ -33,7 +33,7 @@ require_once($CFG->libdir.'/completionlib.php');
|
||||
define('COMPLETION_REPORT_PAGE', 25);
|
||||
define('COMPLETION_REPORT_COL_TITLES', true);
|
||||
|
||||
/**
|
||||
/*
|
||||
* Setup page, check permissions
|
||||
*/
|
||||
|
||||
@@ -46,7 +46,7 @@ $edituser = optional_param('edituser', 0, PARAM_INT);
|
||||
|
||||
$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
|
||||
|
||||
$url = new moodle_url('/course/report/completion/index.php', array('course'=>$course->id));
|
||||
$url = new moodle_url('/report/completion/index.php', array('course'=>$course->id));
|
||||
$PAGE->set_url($url);
|
||||
$PAGE->set_pagelayout('report');
|
||||
|
||||
@@ -65,8 +65,8 @@ $idnumbers = $CFG->grade_report_showuseridnumber;
|
||||
// Function for quoting csv cell values
|
||||
function csv_quote($value) {
|
||||
global $excel;
|
||||
if($excel) {
|
||||
$tl=textlib_get_instance();
|
||||
if ($excel) {
|
||||
$tl = textlib_get_instance();
|
||||
return $tl->convert('"'.str_replace('"',"'",$value).'"','UTF-8','UTF-16LE');
|
||||
} else {
|
||||
return '"'.str_replace('"',"'",$value).'"';
|
||||
@@ -78,11 +78,11 @@ function csv_quote($value) {
|
||||
require_login($course);
|
||||
|
||||
$context=get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
require_capability('coursereport/completion:view', $context);
|
||||
require_capability('report/completion:view', $context);
|
||||
|
||||
// Get group mode
|
||||
$group = groups_get_course_group($course, true); // Supposed to verify group
|
||||
if($group === 0 && $course->groupmode == SEPARATEGROUPS) {
|
||||
if ($group === 0 && $course->groupmode == SEPARATEGROUPS) {
|
||||
require_capability('moodle/site:accessallgroups',$context);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ if (!$csv) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
/*
|
||||
* Setup page header
|
||||
*/
|
||||
if ($csv) {
|
||||
@@ -148,7 +148,7 @@ if ($csv) {
|
||||
header('Content-Disposition: attachment; filename=progress.'.
|
||||
preg_replace('/[^a-z0-9-]/','_',$textlib->strtolower(strip_tags($shortname))).'.csv');
|
||||
// Unicode byte-order mark for Excel
|
||||
if($excel) {
|
||||
if ($excel) {
|
||||
header('Content-Type: text/csv; charset=UTF-16LE');
|
||||
print chr(0xFF).chr(0xFE);
|
||||
$sep="\t".chr(0);
|
||||
@@ -177,10 +177,10 @@ if ($csv) {
|
||||
)
|
||||
);
|
||||
|
||||
$PAGE->requires->js('/course/report/completion/textrotate.js');
|
||||
$PAGE->requires->js('/report/completion/textrotate.js');
|
||||
|
||||
// Handle groups (if enabled)
|
||||
groups_print_course_menu($course, $CFG->wwwroot.'/course/report/completion/?course='.$course->id);
|
||||
groups_print_course_menu($course, $CFG->wwwroot.'/report/completion/?course='.$course->id);
|
||||
}
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@ if ($total) {
|
||||
|
||||
|
||||
// Build link for paging
|
||||
$link = $CFG->wwwroot.'/course/report/completion/?course='.$course->id;
|
||||
$link = $CFG->wwwroot.'/report/completion/?course='.$course->id;
|
||||
if (strlen($sort)) {
|
||||
$link .= '&sort='.$sort;
|
||||
}
|
||||
@@ -267,7 +267,7 @@ foreach ($initials as $initial) {
|
||||
}
|
||||
|
||||
// Do we need a paging bar?
|
||||
if($total > COMPLETION_REPORT_PAGE) {
|
||||
if ($total > COMPLETION_REPORT_PAGE) {
|
||||
|
||||
// Paging bar
|
||||
$pagingbar .= '<div class="paging">';
|
||||
@@ -314,12 +314,12 @@ if($total > COMPLETION_REPORT_PAGE) {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
/*
|
||||
* Draw table header
|
||||
*/
|
||||
|
||||
// Start of table
|
||||
if(!$csv) {
|
||||
if (!$csv) {
|
||||
print '<br class="clearer"/>'; // ugh
|
||||
|
||||
$total_header = ($total == $grandtotal) ? $total : "{$total}/{$grandtotal}";
|
||||
@@ -456,7 +456,7 @@ if(!$csv) {
|
||||
|
||||
$sistring = "&silast={$silast}&sifirst={$sifirst}";
|
||||
|
||||
if($firstnamesort) {
|
||||
if ($firstnamesort) {
|
||||
print
|
||||
get_string('firstname')." / <a href=\"./?course={$course->id}{$sistring}\">".
|
||||
get_string('lastname').'</a>';
|
||||
@@ -469,7 +469,7 @@ if(!$csv) {
|
||||
|
||||
|
||||
// Print user id number column
|
||||
if($idnumbers) {
|
||||
if ($idnumbers) {
|
||||
print '<th>'.get_string('idnumber').'</th>';
|
||||
}
|
||||
|
||||
@@ -540,7 +540,7 @@ if(!$csv) {
|
||||
|
||||
} else {
|
||||
// TODO
|
||||
if($idnumbers) {
|
||||
if ($idnumbers) {
|
||||
print $sep;
|
||||
}
|
||||
}
|
||||
@@ -552,9 +552,9 @@ if(!$csv) {
|
||||
foreach ($progress as $user) {
|
||||
|
||||
// User name
|
||||
if($csv) {
|
||||
if ($csv) {
|
||||
print csv_quote(fullname($user));
|
||||
if($idnumbers) {
|
||||
if ($idnumbers) {
|
||||
print $sep.csv_quote($user->idnumber);
|
||||
}
|
||||
} else {
|
||||
@@ -562,7 +562,7 @@ foreach ($progress as $user) {
|
||||
|
||||
print '<th scope="row"><a href="'.$CFG->wwwroot.'/user/view.php?id='.
|
||||
$user->id.'&course='.$course->id.'">'.fullname($user).'</a></th>';
|
||||
if($idnumbers) {
|
||||
if ($idnumbers) {
|
||||
print '<td>'.htmlspecialchars($user->idnumber).'</td>';
|
||||
}
|
||||
}
|
||||
@@ -580,7 +580,7 @@ foreach ($progress as $user) {
|
||||
|
||||
|
||||
// Get progress information and state
|
||||
if(array_key_exists($activity->id,$user->progress)) {
|
||||
if (array_key_exists($activity->id,$user->progress)) {
|
||||
$thisprogress=$user->progress[$activity->id];
|
||||
$state=$thisprogress->completionstate;
|
||||
$date=userdate($thisprogress->timemodified);
|
||||
@@ -611,7 +611,7 @@ foreach ($progress as $user) {
|
||||
$a->activity=strip_tags($activity->name);
|
||||
$fulldescribe=get_string('progress-title','completion',$a);
|
||||
|
||||
if($csv) {
|
||||
if ($csv) {
|
||||
print $sep.csv_quote($describe).$sep.csv_quote($date);
|
||||
} else {
|
||||
print '<td class="completion-progresscell">';
|
||||
@@ -693,14 +693,14 @@ foreach ($progress as $user) {
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
if($csv) {
|
||||
if ($csv) {
|
||||
print $line;
|
||||
} else {
|
||||
print '</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
if($csv) {
|
||||
if ($csv) {
|
||||
exit;
|
||||
}
|
||||
print '</table>';
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Lang strings
|
||||
*
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['completion:view'] = 'View course completion report';
|
||||
$string['completiondate'] = 'Completion date';
|
||||
$string['page-report-completion-x'] = 'Any completion report';
|
||||
$string['page-report-completion-index'] = 'Course completion report';
|
||||
$string['page-report-completion-user'] = 'User course completion report';
|
||||
$string['pluginname'] = 'Course completion';
|
||||
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version details.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
/**
|
||||
* This function extends the navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $course The course to object for the report
|
||||
* @param stdClass $context The context of the course
|
||||
*/
|
||||
function report_completion_extend_navigation_course($navigation, $course, $context) {
|
||||
global $CFG;
|
||||
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
if (has_capability('report/completion:view', $context)) {
|
||||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled() && $completion->has_criteria()) {
|
||||
$url = new moodle_url('/report/completion/index.php', array('course'=>$course->id));
|
||||
$navigation->add(get_string('pluginname','report_completion'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', ''));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function extends the course navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $user
|
||||
* @param stdClass $course The course to object for the report
|
||||
*/
|
||||
function report_completion_extend_navigation_user($navigation, $user, $course) {
|
||||
|
||||
return; //TODO: this plugin was not linked from navigation in 2.0, let's keep it that way for now --skodak
|
||||
|
||||
if (report_completion_can_access_user_report($user, $course)) {
|
||||
$url = new moodle_url('/report/completion/user.php', array('id'=>$user->id, 'course'=>$course->id));
|
||||
$navigation->add(get_string('coursecompletion'), $url);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is current user allowed to access this report
|
||||
*
|
||||
* @private defined in lib.php for performance reasons
|
||||
*
|
||||
* @param stdClass $user
|
||||
* @param stdClass $course
|
||||
* @return bool
|
||||
*/
|
||||
function report_completion_can_access_user_report($user, $course) {
|
||||
global $USER, $CFG;
|
||||
|
||||
if (empty($CFG->enablecompletion)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($course->id != SITEID and !$course->enablecompletion) {
|
||||
return;
|
||||
}
|
||||
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
$personalcontext = context_user::instance($user->id);
|
||||
|
||||
if (has_capability('report/completion:view', $coursecontext)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)) {
|
||||
if ($course->showreports and (is_viewing($coursecontext, $user) or is_enrolled($coursecontext, $user))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
} else if ($user->id == $USER->id) {
|
||||
if ($course->showreports and (is_viewing($coursecontext, $USER) or is_enrolled($coursecontext, $USER))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of page types
|
||||
* @param string $pagetype current page type
|
||||
* @param stdClass $parentcontext Block's parent context
|
||||
* @param stdClass $currentcontext Current context of block
|
||||
* @return array
|
||||
*/
|
||||
function report_completion_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
$array = array(
|
||||
'*' => get_string('page-x', 'pagetype'),
|
||||
'report-*' => get_string('page-report-x', 'pagetype'),
|
||||
'report-completion-*' => get_string('page-report-completion-x', 'report_completion'),
|
||||
'report-completion-index' => get_string('page-report-completion-index', 'report_completion'),
|
||||
'report-completion-user' => get_string('page-report-completion-user', 'report_completion')
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Display user completion report
|
||||
*
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require('../../config.php');
|
||||
require_once($CFG->dirroot.'/report/completion/lib.php');
|
||||
require_once($CFG->libdir.'/completionlib.php');
|
||||
|
||||
$userid = required_param('id', PARAM_INT);
|
||||
$courseid = required_param('course', PARAM_INT);
|
||||
|
||||
$user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0), '*', MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
|
||||
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
$personalcontext = context_user::instance($user->id);
|
||||
|
||||
if ($USER->id != $user->id and has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)
|
||||
and !is_enrolled($coursecontext, $USER) and is_enrolled($coursecontext, $user)) {
|
||||
//TODO: do not require parents to be enrolled in courses - this is a hack!
|
||||
require_login();
|
||||
$PAGE->set_course($course);
|
||||
} else {
|
||||
require_login($course);
|
||||
}
|
||||
|
||||
if (!report_completion_can_access_user_report($user, $course, true)) {
|
||||
// this should never happen
|
||||
error('Can not access user completion report');
|
||||
}
|
||||
|
||||
add_to_log($course->id, 'course', 'report completion', "report/completion/user.php?id=$user->id&course=$course->id", $course->id);
|
||||
|
||||
$stractivityreport = get_string('activityreport');
|
||||
|
||||
$PAGE->set_pagelayout('admin');
|
||||
$PAGE->set_url('/report/completion/user.php', array('id'=>$user->id, 'course'=>$course->id));
|
||||
$PAGE->navigation->extend_for_user($user);
|
||||
$PAGE->navigation->set_userid_for_parent_checks($user->id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed.
|
||||
$PAGE->set_title("$course->shortname: $stractivityreport");
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
|
||||
|
||||
// Display course completion user report
|
||||
|
||||
// Grab all courses the user is enrolled in and their completion status
|
||||
$sql = "
|
||||
SELECT DISTINCT
|
||||
c.id AS id
|
||||
FROM
|
||||
{course} c
|
||||
INNER JOIN
|
||||
{context} con
|
||||
ON con.instanceid = c.id
|
||||
INNER JOIN
|
||||
{role_assignments} ra
|
||||
ON ra.contextid = con.id
|
||||
INNER JOIN
|
||||
{enrol} e
|
||||
ON c.id = e.courseid
|
||||
INNER JOIN
|
||||
{user_enrolments} ue
|
||||
ON e.id = ue.enrolid AND ra.userid = ue.userid
|
||||
AND ra.userid = {$user->id}
|
||||
";
|
||||
|
||||
// Get roles that are tracked by course completion
|
||||
if ($roles = $CFG->gradebookroles) {
|
||||
$sql .= '
|
||||
AND ra.roleid IN ('.$roles.')
|
||||
';
|
||||
}
|
||||
|
||||
$sql .= '
|
||||
WHERE
|
||||
con.contextlevel = '.CONTEXT_COURSE.'
|
||||
AND c.enablecompletion = 1
|
||||
';
|
||||
|
||||
|
||||
// If we are looking at a specific course
|
||||
if ($course->id != 1) {
|
||||
$sql .= '
|
||||
AND c.id = '.(int)$course->id.'
|
||||
';
|
||||
}
|
||||
|
||||
// Check if result is empty
|
||||
$rs = $DB->get_recordset_sql($sql);
|
||||
if (!$rs->valid()) {
|
||||
|
||||
if ($course->id != 1) {
|
||||
$error = get_string('nocompletions', 'report_completion'); // TODO: missing string
|
||||
} else {
|
||||
$error = get_string('nocompletioncoursesenroled', 'report_completion'); // TODO: missing string
|
||||
}
|
||||
|
||||
echo $OUTPUT->notification($error);
|
||||
$rs->close(); // not going to loop (but break), close rs
|
||||
echo $OUTPUT->footer();
|
||||
die();
|
||||
}
|
||||
|
||||
// Categorize courses by their status
|
||||
$courses = array(
|
||||
'inprogress' => array(),
|
||||
'complete' => array(),
|
||||
'unstarted' => array()
|
||||
);
|
||||
|
||||
// Sort courses by the user's status in each
|
||||
foreach ($rs as $course_completion) {
|
||||
$c_info = new completion_info((object)$course_completion);
|
||||
|
||||
// Is course complete?
|
||||
$coursecomplete = $c_info->is_course_complete($user->id);
|
||||
|
||||
// Has this user completed any criteria?
|
||||
$criteriacomplete = $c_info->count_course_user_data($user->id);
|
||||
|
||||
if ($coursecomplete) {
|
||||
$courses['complete'][] = $c_info;
|
||||
} else if ($criteriacomplete) {
|
||||
$courses['inprogress'][] = $c_info;
|
||||
} else {
|
||||
$courses['unstarted'][] = $c_info;
|
||||
}
|
||||
}
|
||||
$rs->close(); // after loop, close rs
|
||||
|
||||
// Loop through course status groups
|
||||
foreach ($courses as $type => $infos) {
|
||||
|
||||
// If there are courses with this status
|
||||
if (!empty($infos)) {
|
||||
|
||||
echo '<h1 align="center">'.get_string($type, 'report_completion').'</h1>';
|
||||
echo '<table class="generalbox boxaligncenter">';
|
||||
echo '<tr class="ccheader">';
|
||||
echo '<th class="c0 header" scope="col">'.get_string('course').'</th>';
|
||||
echo '<th class="c1 header" scope="col">'.get_string('requiredcriteria', 'completion').'</th>';
|
||||
echo '<th class="c2 header" scope="col">'.get_string('status').'</th>';
|
||||
echo '<th class="c3 header" scope="col" width="15%">'.get_string('info').'</th>';
|
||||
|
||||
if ($type === 'complete') {
|
||||
echo '<th class="c4 header" scope="col">'.get_string('completiondate', 'report_completion').'</th>';
|
||||
}
|
||||
|
||||
echo '</tr>';
|
||||
|
||||
// For each course
|
||||
foreach ($infos as $c_info) {
|
||||
|
||||
// Get course info
|
||||
$c_course = $DB->get_record('course', array('id' => $c_info->course_id));
|
||||
$course_context = get_context_instance(CONTEXT_COURSE, $c_course->id, MUST_EXIST);
|
||||
$course_name = format_string($c_course->fullname, true, array('context' => $course_context));
|
||||
|
||||
// Get completions
|
||||
$completions = $c_info->get_completions($user->id);
|
||||
|
||||
// Save row data
|
||||
$rows = array();
|
||||
|
||||
// For aggregating activity completion
|
||||
$activities = array();
|
||||
$activities_complete = 0;
|
||||
|
||||
// For aggregating prerequisites
|
||||
$prerequisites = array();
|
||||
$prerequisites_complete = 0;
|
||||
|
||||
// Loop through course criteria
|
||||
foreach ($completions as $completion) {
|
||||
$criteria = $completion->get_criteria();
|
||||
$complete = $completion->is_complete();
|
||||
|
||||
// Activities are a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_ACTIVITY) {
|
||||
$activities[$criteria->moduleinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$activities_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Prerequisites are also a special case, so cache them and leave them till last
|
||||
if ($criteria->criteriatype == COMPLETION_CRITERIA_TYPE_COURSE) {
|
||||
$prerequisites[$criteria->courseinstance] = $complete;
|
||||
|
||||
if ($complete) {
|
||||
$prerequisites_complete++;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$row = array();
|
||||
$row['title'] = $criteria->get_title();
|
||||
$row['status'] = $completion->get_status();
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
// Aggregate activities
|
||||
if (!empty($activities)) {
|
||||
|
||||
$row = array();
|
||||
$row['title'] = get_string('activitiescomplete', 'report_completion');
|
||||
$row['status'] = $activities_complete.' of '.count($activities);
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
// Aggregate prerequisites
|
||||
if (!empty($prerequisites)) {
|
||||
|
||||
$row = array();
|
||||
$row['title'] = get_string('prerequisitescompleted', 'completion');
|
||||
$row['status'] = $prerequisites_complete.' of '.count($prerequisites);
|
||||
array_splice($rows, 0, 0, array($row));
|
||||
}
|
||||
|
||||
$first_row = true;
|
||||
|
||||
// Print table
|
||||
foreach ($rows as $row) {
|
||||
|
||||
// Display course name on first row
|
||||
if ($first_row) {
|
||||
echo '<tr><td class="c0"><a href="'.$CFG->wwwroot.'/course/view.php?id='.$c_course->id.'">'.$course_name.'</a></td>';
|
||||
} else {
|
||||
echo '<tr><td class="c0"></td>';
|
||||
}
|
||||
|
||||
echo '<td class="c1">';
|
||||
echo $row['title'];
|
||||
echo '</td><td class="c2">';
|
||||
|
||||
switch ($row['status']) {
|
||||
case 'Yes':
|
||||
echo get_string('complete');
|
||||
break;
|
||||
|
||||
case 'No':
|
||||
echo get_string('incomplete', 'report_completion');
|
||||
break;
|
||||
|
||||
default:
|
||||
echo $row['status'];
|
||||
}
|
||||
|
||||
// Display link on first row
|
||||
echo '</td><td class="c3">';
|
||||
if ($first_row) {
|
||||
echo '<a href="'.$CFG->wwwroot.'/blocks/completionstatus/details.php?course='.$c_course->id.'&user='.$user->id.'">'.get_string('detailedview', 'report_completion').'</a>';
|
||||
}
|
||||
echo '</td>';
|
||||
|
||||
// Display completion date for completed courses on first row
|
||||
if ($type === 'complete' && $first_row) {
|
||||
$params = array(
|
||||
'userid' => $user->id,
|
||||
'course' => $c_course->id
|
||||
);
|
||||
|
||||
$ccompletion = new completion_completion($params);
|
||||
echo '<td class="c4">'.userdate($ccompletion->timecompleted, '%e %B %G').'</td>';
|
||||
}
|
||||
|
||||
$first_row = false;
|
||||
echo '</tr>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '</table>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version details
|
||||
*
|
||||
* @package report
|
||||
* @subpackage completion
|
||||
* @copyright 2009 Catalyst IT Ltd
|
||||
* @author Aaron Barnes <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$plugin->version = 2011110300; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->requires = 2011110200; // Requires this Moodle version
|
||||
$plugin->component = 'report_completion'; // Full name of the plugin (used for diagnostics)
|
||||
@@ -1,6 +1,29 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
require_once(dirname(__FILE__).'/../../../config.php');
|
||||
/**
|
||||
* Config changes report
|
||||
*
|
||||
* @package report
|
||||
* @subpackage configlog
|
||||
* @copyright 2009 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require(dirname(__FILE__).'/../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
// page parameters
|
||||
+4
-3
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -18,14 +17,16 @@
|
||||
/**
|
||||
* Strings for component 'report_configlog', language 'en', branch 'MOODLE_20_STABLE'
|
||||
*
|
||||
* @package report_configlog
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @package report
|
||||
* @subplugin configlog
|
||||
* @copyright 2009 petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['configlog'] = 'Config changes';
|
||||
$string['oldvalue'] = 'Original value';
|
||||
$string['plugin'] = 'Plugin';
|
||||
$string['pluginname'] = 'Config changes';
|
||||
$string['setting'] = 'Setting';
|
||||
$string['timemodified'] = 'Date';
|
||||
$string['value'] = 'New value';
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Report settings
|
||||
*
|
||||
* @package report
|
||||
* @subpackage configlog
|
||||
* @copyright 2009 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportconfiglog', get_string('configlog', 'report_configlog'), "$CFG->wwwroot/report/configlog/index.php"));
|
||||
|
||||
// no report settings
|
||||
$settings = null;
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version details.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage configlog
|
||||
* @copyright 2011 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$plugin->version = 2011110300; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->requires = 2011110200; // Requires this Moodle version
|
||||
$plugin->component = 'report_configlog'; // Full name of the plugin (used for diagnostics)
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Report capabilities
|
||||
*
|
||||
* @package report
|
||||
* @subpackage courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/courseoverview:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_SYSTEM,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'moodle/site:viewreports',
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Course overview report
|
||||
*
|
||||
* @package report
|
||||
* @subpackage courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once('../../config.php');
|
||||
require_once($CFG->dirroot.'/lib/statslib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$report = optional_param('report', STATS_REPORT_ACTIVE_COURSES, PARAM_INT);
|
||||
$time = optional_param('time', 0, PARAM_INT);
|
||||
$numcourses = optional_param('numcourses', 20, PARAM_INT);
|
||||
|
||||
if (empty($CFG->enablestats)) {
|
||||
if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) {
|
||||
redirect("$CFG->wwwroot/$CFG->admin/settings.php?section=stats", get_string('mustenablestats', 'admin'), 3);
|
||||
} else {
|
||||
print_error('statsdisable');
|
||||
}
|
||||
}
|
||||
|
||||
admin_externalpage_setup('reportcourseoverview');
|
||||
echo $OUTPUT->header();
|
||||
|
||||
$course = get_site();
|
||||
stats_check_uptodate($course->id);
|
||||
|
||||
$strreports = get_string('reports');
|
||||
$strcourseoverview = get_string('courseoverview');
|
||||
|
||||
$reportoptions = stats_get_report_options($course->id,STATS_MODE_RANKED);
|
||||
|
||||
$earliestday = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_daily}');
|
||||
$earliestweek = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_weekly}');
|
||||
$earliestmonth = $DB->get_field_sql('SELECT MIN(timeend) FROM {stats_monthly}');
|
||||
|
||||
if (empty($earliestday)) $earliestday = time();
|
||||
if (empty($earliestweek)) $earliestweek = time();
|
||||
if (empty($earliestmonth)) $earliestmonth = time();
|
||||
|
||||
$now = stats_get_base_daily();
|
||||
$lastweekend = stats_get_base_weekly();
|
||||
$lastmonthend = stats_get_base_monthly();
|
||||
|
||||
$timeoptions = stats_get_time_options($now,$lastweekend,$lastmonthend,$earliestday,$earliestweek,$earliestmonth);
|
||||
|
||||
if (empty($timeoptions)) {
|
||||
print_error('nostatstodisplay', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id);
|
||||
}
|
||||
|
||||
echo '<form action="index.php" method="post">'."\n";
|
||||
echo '<div>';
|
||||
|
||||
$table = new html_table();
|
||||
$table->width = '*';
|
||||
$table->align = array('left','left','left','left','left','left');
|
||||
|
||||
$reporttypemenu = html_writer::select($reportoptions,'report',$report, false);
|
||||
$timeoptionsmenu = html_writer::select($timeoptions,'time',$time, false);
|
||||
|
||||
$table->data[] = array(get_string('statsreporttype'),$reporttypemenu,
|
||||
get_string('statstimeperiod'),$timeoptionsmenu,
|
||||
'<input type="text" name="numcourses" size="3" maxlength="2" value="'.$numcourses.'" />',
|
||||
'<input type="submit" value="'.get_string('view').'" />') ;
|
||||
|
||||
echo html_writer::table($table);
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
|
||||
echo $OUTPUT->heading($reportoptions[$report]);
|
||||
|
||||
|
||||
if (!empty($report) && !empty($time)) {
|
||||
$param = stats_get_parameters($time,$report,SITEID,STATS_MODE_RANKED);
|
||||
if (!empty($param->sql)) {
|
||||
$sql = $param->sql;
|
||||
} else {
|
||||
$sql = "SELECT courseid,".$param->fields."
|
||||
FROM {".'stats_'.$param->table."}
|
||||
WHERE timeend >= $param->timeafter AND stattype = 'activity' AND roleid = 0
|
||||
GROUP BY courseid
|
||||
$param->extras
|
||||
ORDER BY $param->orderby";
|
||||
}
|
||||
|
||||
$courses = $DB->get_records_sql($sql, $param->params, 0, $numcourses);
|
||||
|
||||
if (empty($courses)) {
|
||||
echo $OUTPUT->notification(get_string('statsnodata'));
|
||||
echo '</td></tr></table>';
|
||||
|
||||
} else {
|
||||
if (empty($CFG->gdversion)) {
|
||||
echo '<div class="graph">(' . get_string("gdneed") .')</div>';
|
||||
} else {
|
||||
echo '<div class="graph"><img alt="'.get_string('courseoverviewgraph').'" src="'.$CFG->wwwroot.'/report/courseoverview/reportsgraph.php?time='.$time.'&report='.$report.'&numcourses='.$numcourses.'" /></div>';
|
||||
}
|
||||
|
||||
$table = new html_table();
|
||||
$table->align = array('left','center','center','center');
|
||||
$table->head = array(get_string('course'),$param->line1);
|
||||
if (!empty($param->line2)) {
|
||||
$table->head[] = $param->line2;
|
||||
}
|
||||
if (!empty($param->line3)) {
|
||||
$table->head[] = $param->line3;
|
||||
}
|
||||
|
||||
foreach ($courses as $c) {
|
||||
$a = array();
|
||||
$a[] = '<a href="'.$CFG->wwwroot.'/course/view.php?id='.$c->courseid.'">'.$DB->get_field('course', 'shortname', array('id'=>$c->courseid)).'</a>';
|
||||
|
||||
$a[] = $c->line1;
|
||||
if (isset($c->line2)) {
|
||||
$a[] = $c->line2;
|
||||
}
|
||||
if (isset($c->line3)) {
|
||||
$a[] = round($c->line3,2);
|
||||
}
|
||||
$table->data[] = $a;
|
||||
}
|
||||
echo html_writer::table($table);
|
||||
}
|
||||
}
|
||||
echo $OUTPUT->footer();
|
||||
+5
-5
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -16,11 +15,12 @@
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Strings for component 'report_courseoverview', language 'en', branch 'MOODLE_20_STABLE'
|
||||
* Strings for component 'report_courseoverview'.
|
||||
*
|
||||
* @package report_courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package report
|
||||
* @subpackage courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['courseoverview:view'] = 'View course overview report';
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Graph
|
||||
*
|
||||
* @package report
|
||||
* @subpackage courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
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 {".'stats_'.$param->table."}
|
||||
WHERE timeend >= $param->timeafter AND stattype = 'activity' AND roleid = 0
|
||||
GROUP BY courseid
|
||||
$param->extras
|
||||
ORDER BY $param->orderby";
|
||||
}
|
||||
|
||||
$courses = $DB->get_records_sql($sql, $param->params, 0, $numcourses);
|
||||
|
||||
if (empty($courses)) {
|
||||
$PAGE->set_url('/report/courseoverview/index.php');
|
||||
print_error('statsnodata', 'error', $PAGE->url->out());
|
||||
}
|
||||
|
||||
|
||||
$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) {
|
||||
$graph->parameter['y_decimal_left'] = 2;
|
||||
}
|
||||
|
||||
foreach ($courses as $c) {
|
||||
$graph->x_data[] = $DB->get_field('course', 'shortname', array('id'=>$c->courseid));
|
||||
$graph->y_data['bar1'][] = $c->{$param->graphline};
|
||||
}
|
||||
$graph->y_order = array('bar1');
|
||||
$graph->y_format['bar1'] = array('colour' => 'blue','bar' => 'fill','legend' => $param->{$param->graphline});
|
||||
|
||||
$graph->draw_stack();
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Report settings
|
||||
*
|
||||
* @package report
|
||||
* @subpackage courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$ADMIN->add('reports', new admin_externalpage('reportcourseoverview', get_string('pluginname', 'report_courseoverview'), "$CFG->wwwroot/report/courseoverview/index.php",'report/courseoverview:view'));
|
||||
|
||||
// no report settings
|
||||
$settings = null;
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version info
|
||||
*
|
||||
* @package report
|
||||
* @subpackage courseoverview
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$plugin->version = 2011110300; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->requires = 2011110200; // Requires this Moodle version
|
||||
$plugin->component = 'report_courseoverview'; // Full name of the plugin (used for diagnostics)
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Capabilities
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/log:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'coursereport/log:view',
|
||||
),
|
||||
|
||||
'report/log:viewtoday' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
|
||||
'clonepermissionsfrom' => 'coursereport/log:viewtoday',
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Post installation and migration code.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 2011 Petr Skoda {@link http://skodak.org}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
function xmldb_report_log_install() {
|
||||
global $DB;
|
||||
|
||||
// this is a hack which is needed for cleanup of original coursereport_log stuff
|
||||
unset_all_config_for_plugin('coursereport_log');
|
||||
capabilities_cleanup('coursereport_log');
|
||||
|
||||
// update existing block page patterns
|
||||
$DB->set_field('block_instances', 'pagetypepattern', 'report-log-index', array('pagetypepattern'=>'course-report-log-index'));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -16,54 +15,64 @@
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Produces a graph of log accesses
|
||||
* Produces a graph of log accesses for a user
|
||||
*
|
||||
* @copyright 1999 Martin Dougiamas http://dougiamas.com
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package course
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require_once("../../../config.php");
|
||||
require_once("../../lib.php");
|
||||
require("../../config.php");
|
||||
require_once("$CFG->libdir/graphlib.php");
|
||||
require_once($CFG->dirroot.'/report/log/locallib.php');
|
||||
|
||||
$id = required_param('id', PARAM_INT); // Course ID
|
||||
$type = required_param('type', PARAM_FILE); // Graph Type
|
||||
$user = optional_param('user', 0, PARAM_INT); // Student ID
|
||||
$id = required_param('id', PARAM_INT); // Course ID
|
||||
$type = required_param('type', PARAM_FILE); // Graph Type
|
||||
$user = required_param('user', PARAM_INT); // Student ID
|
||||
$date = optional_param('date', 0, PARAM_INT); // A time of a day (in GMT)
|
||||
|
||||
$url = new moodle_url('/course/report/log/graph.php', array('id'=>$id,'type'=>$type));
|
||||
if ($user !== 0) {
|
||||
$url->param('user', $user);
|
||||
}
|
||||
if ($date !== 0) {
|
||||
$url->param('date', $date);
|
||||
}
|
||||
$url = new moodle_url('/report/log/graph.php', array('id'=>$id,'type'=>$type,'user'=>$user,'date'=>$date));
|
||||
$PAGE->set_url($url);
|
||||
|
||||
if (! $course = $DB->get_record("course", array("id"=>$id))) {
|
||||
print_error('invalidcourseid');
|
||||
if ($type !== "usercourse.png" and $type !== "userday.png") {
|
||||
$type = 'userday.png';
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
$course = $DB->get_record("course", array("id"=>$id), '*', MUST_EXIST);
|
||||
$user = $DB->get_record("user", array("id"=>$user, 'deleted'=>0), '*', MUST_EXIST);
|
||||
|
||||
if (!$course->showreports or $USER->id != $user) {
|
||||
require_capability('coursereport/log:view', $context);
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
$personalcontext = context_user::instance($user->id);
|
||||
|
||||
if ($USER->id != $user->id and has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)
|
||||
and !is_enrolled($coursecontext, $USER) and is_enrolled($coursecontext, $user)) {
|
||||
//TODO: do not require parents to be enrolled in courses - this is a hack!
|
||||
require_login();
|
||||
$PAGE->set_course($course);
|
||||
} else {
|
||||
require_login($course);
|
||||
}
|
||||
|
||||
if ($user) {
|
||||
if (! $user = $DB->get_record("user", array("id"=>$user))) {
|
||||
print_error("nousers");
|
||||
list($all, $today) = report_log_can_access_user_report($user, $course);
|
||||
|
||||
if ($type === "userday.png") {
|
||||
if (!$today) {
|
||||
require_capability('report/log:viewtoday', $coursecontext);
|
||||
}
|
||||
} else {
|
||||
if (!$all) {
|
||||
require_capability('report/log:view', $coursecontext);
|
||||
}
|
||||
}
|
||||
|
||||
add_to_log($course->id, 'course', 'report log', "report/log/graph.php?user=$user->id&id=$course->id&type=$type&date=$date", $course->id);
|
||||
|
||||
$logs = array();
|
||||
|
||||
$timenow = time();
|
||||
|
||||
switch ($type) {
|
||||
case "usercourse.png":
|
||||
if ($type === "usercourse.png") {
|
||||
|
||||
$site = get_site();
|
||||
|
||||
@@ -73,7 +82,7 @@ switch ($type) {
|
||||
$courseselect = $course->id;
|
||||
}
|
||||
|
||||
$maxseconds = COURSE_MAX_LOG_DISPLAY * 3600 * 24; // seconds
|
||||
$maxseconds = REPORT_LOG_MAX_DISPLAY * 3600 * 24; // seconds
|
||||
//$maxseconds = 60 * 3600 * 24; // seconds
|
||||
if ($timenow - $course->startdate > $maxseconds) {
|
||||
$course->startdate = $timenow - $maxseconds;
|
||||
@@ -120,7 +129,7 @@ switch ($type) {
|
||||
|
||||
$graph = new graph(750, 400);
|
||||
|
||||
$a->coursename = format_string($course->shortname, true, array('context' => $context));
|
||||
$a->coursename = format_string($course->shortname, true, array('context' => $coursecontext));
|
||||
$a->username = fullname($user, true);
|
||||
$graph->parameter['title'] = get_string("hitsoncourse", "", $a);
|
||||
|
||||
@@ -149,9 +158,7 @@ switch ($type) {
|
||||
error_reporting(5); // ignore most warnings such as font problems etc
|
||||
$graph->draw_stack();
|
||||
|
||||
break;
|
||||
|
||||
case "userday.png":
|
||||
} else {
|
||||
|
||||
$site = get_site();
|
||||
|
||||
@@ -183,7 +190,7 @@ switch ($type) {
|
||||
|
||||
$graph = new graph(750, 400);
|
||||
|
||||
$a->coursename = format_string($course->shortname, true, array('context' => $context));
|
||||
$a->coursename = format_string($course->shortname, true, array('context' => $coursecontext));
|
||||
$a->username = fullname($user, true);
|
||||
$graph->parameter['title'] = get_string("hitsoncoursetoday", "", $a);
|
||||
|
||||
@@ -207,10 +214,5 @@ switch ($type) {
|
||||
|
||||
error_reporting(5); // ignore most warnings such as font problems etc
|
||||
$graph->draw_stack();
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Displays different views of the logs.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require('../../config.php');
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
require_once($CFG->dirroot.'/report/log/locallib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$id = optional_param('id', 0, PARAM_INT);// Course ID
|
||||
$host_course = optional_param('host_course', '', PARAM_PATH);// Course ID
|
||||
|
||||
if (empty($host_course)) {
|
||||
$hostid = $CFG->mnet_localhost_id;
|
||||
if (empty($id)) {
|
||||
$site = get_site();
|
||||
$id = $site->id;
|
||||
}
|
||||
} else {
|
||||
list($hostid, $id) = explode('/', $host_course);
|
||||
}
|
||||
|
||||
$group = optional_param('group', 0, PARAM_INT); // Group to display
|
||||
$user = optional_param('user', 0, PARAM_INT); // User to display
|
||||
$date = optional_param('date', 0, PARAM_FILE); // Date to display - number or some string
|
||||
$modname = optional_param('modname', '', PARAM_PLUGIN); // course_module->id
|
||||
$modid = optional_param('modid', 0, PARAM_FILE); // number or 'site_errors'
|
||||
$modaction = optional_param('modaction', '', PARAM_PATH); // an action as recorded in the logs
|
||||
$page = optional_param('page', '0', PARAM_INT); // which page to show
|
||||
$perpage = optional_param('perpage', '100', PARAM_INT); // how many per page
|
||||
$showcourses = optional_param('showcourses', 0, PARAM_INT); // whether to show courses if we're over our limit.
|
||||
$showusers = optional_param('showusers', 0, PARAM_INT); // whether to show users if we're over our limit.
|
||||
$chooselog = optional_param('chooselog', 0, PARAM_INT);
|
||||
$logformat = optional_param('logformat', 'showashtml', PARAM_ALPHA);
|
||||
|
||||
$params = array();
|
||||
if ($id !== 0) {
|
||||
$params['id'] = $id;
|
||||
}
|
||||
if ($host_course !== '') {
|
||||
$params['host_course'] = $host_course;
|
||||
}
|
||||
if ($group !== 0) {
|
||||
$params['group'] = $group;
|
||||
}
|
||||
if ($user !== 0) {
|
||||
$params['user'] = $user;
|
||||
}
|
||||
if ($date !== 0) {
|
||||
$params['date'] = $date;
|
||||
}
|
||||
if ($modname !== '') {
|
||||
$params['modname'] = $modname;
|
||||
}
|
||||
if ($modid !== 0) {
|
||||
$params['modid'] = $modid;
|
||||
}
|
||||
if ($modaction !== '') {
|
||||
$params['modaction'] = $modaction;
|
||||
}
|
||||
if ($page !== '0') {
|
||||
$params['page'] = $page;
|
||||
}
|
||||
if ($perpage !== '100') {
|
||||
$params['perpage'] = $perpage;
|
||||
}
|
||||
if ($showcourses !== 0) {
|
||||
$params['showcourses'] = $showcourses;
|
||||
}
|
||||
if ($showusers !== 0) {
|
||||
$params['showusers'] = $showusers;
|
||||
}
|
||||
if ($chooselog !== 0) {
|
||||
$params['chooselog'] = $chooselog;
|
||||
}
|
||||
if ($logformat !== 'showashtml') {
|
||||
$params['logformat'] = $logformat;
|
||||
}
|
||||
$PAGE->set_url('/report/log/index.php', $params);
|
||||
$PAGE->set_pagelayout('report');
|
||||
|
||||
if ($hostid == $CFG->mnet_localhost_id) {
|
||||
$course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
|
||||
|
||||
} else {
|
||||
$course_stub = $DB->get_record('mnet_log', array('hostid'=>$hostid, 'course'=>$id), '*', true);
|
||||
$course->id = $id;
|
||||
$course->shortname = $course_stub->coursename;
|
||||
$course->fullname = $course_stub->coursename;
|
||||
}
|
||||
|
||||
require_login($course);
|
||||
|
||||
$context = get_context_instance(CONTEXT_COURSE, $course->id);
|
||||
|
||||
require_capability('report/log:view', $context);
|
||||
|
||||
add_to_log($course->id, "course", "report log", "report/log/index.php?id=$course->id", $course->id);
|
||||
|
||||
$strlogs = get_string('logs');
|
||||
$stradministration = get_string('administration');
|
||||
$strreports = get_string('reports');
|
||||
|
||||
session_get_instance()->write_close();
|
||||
|
||||
if (!empty($chooselog)) {
|
||||
$userinfo = get_string('allparticipants');
|
||||
$dateinfo = get_string('alldays');
|
||||
|
||||
if ($user) {
|
||||
$u = $DB->get_record('user', array('id'=>$user, 'deleted'=>0), '*', MUST_EXIST);
|
||||
$userinfo = fullname($u, has_capability('moodle/site:viewfullnames', $context));
|
||||
}
|
||||
if ($date) {
|
||||
$dateinfo = userdate($date, get_string('strftimedaydate'));
|
||||
}
|
||||
|
||||
switch ($logformat) {
|
||||
case 'showashtml':
|
||||
if ($hostid != $CFG->mnet_localhost_id || $course->id == SITEID) {
|
||||
admin_externalpage_setup('reportlog');
|
||||
echo $OUTPUT->header();
|
||||
|
||||
} else {
|
||||
$PAGE->set_title($course->shortname .': '. $strlogs);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
$PAGE->navbar->add("$userinfo, $dateinfo");
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
echo $OUTPUT->heading(format_string($course->fullname) . ": $userinfo, $dateinfo (".usertimezone().")");
|
||||
report_log_print_mnet_selector_form($hostid, $course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers, $logformat);
|
||||
|
||||
if ($hostid == $CFG->mnet_localhost_id) {
|
||||
print_log($course, $user, $date, 'l.time DESC', $page, $perpage,
|
||||
"index.php?id=$course->id&chooselog=1&user=$user&date=$date&modid=$modid&modaction=$modaction&group=$group",
|
||||
$modname, $modid, $modaction, $group);
|
||||
} else {
|
||||
print_mnet_log($hostid, $id, $user, $date, 'l.time DESC', $page, $perpage, "", $modname, $modid, $modaction, $group);
|
||||
}
|
||||
break;
|
||||
case 'downloadascsv':
|
||||
if (!print_log_csv($course, $user, $date, 'l.time DESC', $modname,
|
||||
$modid, $modaction, $group)) {
|
||||
echo $OUTPUT->notification("No logs found!");
|
||||
echo $OUTPUT->footer();
|
||||
}
|
||||
exit;
|
||||
case 'downloadasods':
|
||||
if (!print_log_ods($course, $user, $date, 'l.time DESC', $modname,
|
||||
$modid, $modaction, $group)) {
|
||||
echo $OUTPUT->notification("No logs found!");
|
||||
echo $OUTPUT->footer();
|
||||
}
|
||||
exit;
|
||||
case 'downloadasexcel':
|
||||
if (!print_log_xls($course, $user, $date, 'l.time DESC', $modname,
|
||||
$modid, $modaction, $group)) {
|
||||
echo $OUTPUT->notification("No logs found!");
|
||||
echo $OUTPUT->footer();
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
if ($hostid != $CFG->mnet_localhost_id || $course->id == SITEID) {
|
||||
admin_externalpage_setup('reportlog');
|
||||
echo $OUTPUT->header();
|
||||
} else {
|
||||
$PAGE->set_title($course->shortname .': '. $strlogs);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
echo $OUTPUT->heading(get_string('chooselogs') .':');
|
||||
|
||||
report_log_print_selector_form($course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers, $logformat);
|
||||
}
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -16,16 +15,17 @@
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Strings for component 'coursereport_log', language 'en', branch 'MOODLE_20_STABLE'
|
||||
* Lang strings.
|
||||
*
|
||||
* @package coursereport_log
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['loglive'] = 'Live logs';
|
||||
$string['log:view'] = 'View course logs';
|
||||
$string['log:viewlive'] = 'View live logs';
|
||||
$string['log:viewtoday'] = 'View today\'s logs';
|
||||
$string['pluginpagetype'] = 'Logs course report';
|
||||
$string['page-report-log-x'] = 'Any log report';
|
||||
$string['page-report-log-index'] = 'Course log report';
|
||||
$string['page-report-log-user'] = 'User course log report';
|
||||
$string['pluginname'] = 'Logs';
|
||||
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Public API of the log report.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
/**
|
||||
* This function extends the navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $course The course to object for the report
|
||||
* @param stdClass $context The context of the course
|
||||
*/
|
||||
function report_log_extend_navigation_course($navigation, $course, $context) {
|
||||
if (has_capability('report/log:view', $context)) {
|
||||
$url = new moodle_url('/report/log/index.php', array('id'=>$course->id));
|
||||
$navigation->add(get_string('pluginname', 'report_log'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', ''));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function extends the course navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $user
|
||||
* @param stdClass $course The course to object for the report
|
||||
*/
|
||||
function report_log_extend_navigation_user($navigation, $user, $course) {
|
||||
list($all, $today) = report_log_can_access_user_report($user, $course);
|
||||
|
||||
if ($today) {
|
||||
$url = new moodle_url('/report/log/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>'today'));
|
||||
$navigation->add(get_string('todaylogs'), $url);
|
||||
}
|
||||
if ($all) {
|
||||
$url = new moodle_url('/report/log/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>'all'));
|
||||
$navigation->add(get_string('alllogs'), $url);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is current user allowed to access this report
|
||||
*
|
||||
* @private defined in lib.php for performance reasons
|
||||
*
|
||||
* @param stdClass $user
|
||||
* @param stdClass $course
|
||||
* @return array with two elements $all, $today
|
||||
*/
|
||||
function report_log_can_access_user_report($user, $course) {
|
||||
global $USER;
|
||||
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
$personalcontext = context_user::instance($user->id);
|
||||
|
||||
$today = false;
|
||||
$all = false;
|
||||
|
||||
if (has_capability('report/log:view', $coursecontext)) {
|
||||
$today = true;
|
||||
}
|
||||
if (has_capability('report/log:viewtoday', $coursecontext)) {
|
||||
$all = true;;
|
||||
}
|
||||
|
||||
if ($today and $all) {
|
||||
return array(true, true);
|
||||
}
|
||||
|
||||
if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)) {
|
||||
if ($course->showreports and (is_viewing($coursecontext, $user) or is_enrolled($coursecontext, $user))) {
|
||||
return array(true, true);
|
||||
}
|
||||
|
||||
} else if ($user->id == $USER->id) {
|
||||
if ($course->showreports and (is_viewing($coursecontext, $USER) or is_enrolled($coursecontext, $USER))) {
|
||||
return array(true, true);
|
||||
}
|
||||
}
|
||||
|
||||
return array($all, $today);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function extends the module navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $cm
|
||||
*/
|
||||
function report_log_extend_navigation_module($navigation, $cm) {
|
||||
if (has_capability('report/log:view', context_course::instance($cm->course))) {
|
||||
$url = new moodle_url('/report/log/index.php', array('chooselog'=>'1','id'=>$cm->course,'modid'=>$cm->id));
|
||||
$navigation->add(get_string('logs'), $url, navigation_node::TYPE_SETTING, null, 'logreport');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of page types
|
||||
* @param string $pagetype current page type
|
||||
* @param stdClass $parentcontext Block's parent context
|
||||
* @param stdClass $currentcontext Current context of block
|
||||
* @return array
|
||||
*/
|
||||
function report_log_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
$array = array(
|
||||
'*' => get_string('page-x', 'pagetype'),
|
||||
'report-*' => get_string('page-report-x', 'pagetype'),
|
||||
'report-log-*' => get_string('page-report-log-x', 'report_log'),
|
||||
'report-log-index' => get_string('page-report-log-index', 'report_log'),
|
||||
'report-log-user' => get_string('page-report-log-user', 'report_log')
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
@@ -18,12 +17,32 @@
|
||||
/**
|
||||
* This file contains functions used by the log reports
|
||||
*
|
||||
* @package course
|
||||
* @copyright 1999 onwards Martin Dougiamas http://moodle.com
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $selecteddate='today',
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
if (!defined('REPORT_LOG_MAX_DISPLAY')) {
|
||||
define('REPORT_LOG_MAX_DISPLAY', 150); // days
|
||||
}
|
||||
|
||||
require_once(dirname(__FILE__).'/lib.php');
|
||||
|
||||
function report_log_print_graph($course, $userid, $type, $date=0) {
|
||||
global $CFG;
|
||||
|
||||
if (empty($CFG->gdversion)) {
|
||||
echo "(".get_string("gdneed").")";
|
||||
} else {
|
||||
echo '<img src="'.$CFG->wwwroot.'/report/log/graph.php?id='.$course->id.
|
||||
'&user='.$userid.'&type='.$type.'&date='.$date.'" alt="" />';
|
||||
}
|
||||
}
|
||||
|
||||
function report_log_print_mnet_selector_form($hostid, $course, $selecteduser=0, $selecteddate='today',
|
||||
$modname="", $modid=0, $modaction='', $selectedgroup=-1, $showcourses=0, $showusers=0, $logformat='showashtml') {
|
||||
|
||||
global $USER, $CFG, $SITE, $DB, $OUTPUT, $SESSION;
|
||||
@@ -134,7 +153,7 @@ function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $select
|
||||
$courses = array();
|
||||
$sites = array();
|
||||
if ($CFG->mnet_localhost_id == $hostid) {
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && $showcourses) {
|
||||
if (has_capability('report/log:view', $sitecontext) && $showcourses) {
|
||||
if ($ccc = $DB->get_records("course", null, "fullname","id,fullname,category")) {
|
||||
foreach ($ccc as $cc) {
|
||||
if ($cc->id == SITEID) {
|
||||
@@ -146,7 +165,7 @@ function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $select
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && $showcourses) {
|
||||
if (has_capability('report/log:view', $sitecontext) && $showcourses) {
|
||||
$sql = "SELECT DISTINCT course, coursename FROM {mnet_log} where hostid = ?";
|
||||
if ($ccc = $DB->get_records_sql($sql, array($hostid))) {
|
||||
foreach ($ccc as $cc) {
|
||||
@@ -195,7 +214,7 @@ function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $select
|
||||
}
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && !$course->category) {
|
||||
if (has_capability('report/log:view', $sitecontext) && !$course->category) {
|
||||
$activities["site_errors"] = get_string("siteerrors");
|
||||
if ($modid === "site_errors") {
|
||||
$selectedactivity = "site_errors";
|
||||
@@ -244,21 +263,21 @@ function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $select
|
||||
$selecteddate = $today;
|
||||
}
|
||||
|
||||
echo "<form class=\"logselectform\" action=\"$CFG->wwwroot/course/report/log/index.php\" method=\"get\">\n";
|
||||
echo "<form class=\"logselectform\" action=\"$CFG->wwwroot/report/log/index.php\" method=\"get\">\n";
|
||||
echo "<div>\n";//invisible fieldset here breaks wrapping
|
||||
echo "<input type=\"hidden\" name=\"chooselog\" value=\"1\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"showusers\" value=\"$showusers\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"showcourses\" value=\"$showcourses\" />\n";
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && $showcourses) {
|
||||
if (has_capability('report/log:view', $sitecontext) && $showcourses) {
|
||||
$cid = empty($course->id)? '1' : $course->id;
|
||||
echo html_writer::select($dropdown, "host_course", $hostid.'/'.$cid);
|
||||
} else {
|
||||
$courses = array();
|
||||
$courses[$course->id] = $course->fullname . ((empty($course->category)) ? ' ('.get_string('site').') ' : '');
|
||||
echo html_writer::select($courses,"id",$course->id, false);
|
||||
if (has_capability('coursereport/log:view', $sitecontext)) {
|
||||
if (has_capability('report/log:view', $sitecontext)) {
|
||||
$a = new stdClass();
|
||||
$a->url = "$CFG->wwwroot/course/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
$a->url = "$CFG->wwwroot/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
."&id=$course->id&date=$selecteddate&modid=$selectedactivity&showcourses=1&showusers=$showusers";
|
||||
print_string('logtoomanycourses','moodle',$a);
|
||||
}
|
||||
@@ -289,7 +308,7 @@ function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $select
|
||||
$users[0] = get_string('allparticipants');
|
||||
}
|
||||
echo html_writer::select($users, "user", $selecteduser, false);
|
||||
$a->url = "$CFG->wwwroot/course/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
$a->url = "$CFG->wwwroot/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
."&id=$course->id&date=$selecteddate&modid=$selectedactivity&showusers=1&showcourses=$showcourses";
|
||||
print_string('logtoomanyusers','moodle',$a);
|
||||
}
|
||||
@@ -308,7 +327,7 @@ function print_mnet_log_selector_form($hostid, $course, $selecteduser=0, $select
|
||||
echo '</form>';
|
||||
}
|
||||
|
||||
function print_log_selector_form($course, $selecteduser=0, $selecteddate='today',
|
||||
function report_log_print_selector_form($course, $selecteduser=0, $selecteddate='today',
|
||||
$modname="", $modid=0, $modaction='', $selectedgroup=-1, $showcourses=0, $showusers=0, $logformat='showashtml') {
|
||||
|
||||
global $USER, $CFG, $DB, $OUTPUT, $SESSION;
|
||||
@@ -370,7 +389,7 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate='today'
|
||||
$users[$CFG->siteguest] = get_string('guestuser');
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && $showcourses) {
|
||||
if (has_capability('report/log:view', $sitecontext) && $showcourses) {
|
||||
if ($ccc = $DB->get_records("course", null, "fullname", "id,fullname,category")) {
|
||||
foreach ($ccc as $cc) {
|
||||
if ($cc->category) {
|
||||
@@ -413,7 +432,7 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate='today'
|
||||
}
|
||||
}
|
||||
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && ($course->id == SITEID)) {
|
||||
if (has_capability('report/log:view', $sitecontext) && ($course->id == SITEID)) {
|
||||
$activities["site_errors"] = get_string("siteerrors");
|
||||
if ($modid === "site_errors") {
|
||||
$selectedactivity = "site_errors";
|
||||
@@ -462,21 +481,21 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate='today'
|
||||
$selecteddate = $today;
|
||||
}
|
||||
|
||||
echo "<form class=\"logselectform\" action=\"$CFG->wwwroot/course/report/log/index.php\" method=\"get\">\n";
|
||||
echo "<form class=\"logselectform\" action=\"$CFG->wwwroot/report/log/index.php\" method=\"get\">\n";
|
||||
echo "<div>\n";
|
||||
echo "<input type=\"hidden\" name=\"chooselog\" value=\"1\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"showusers\" value=\"$showusers\" />\n";
|
||||
echo "<input type=\"hidden\" name=\"showcourses\" value=\"$showcourses\" />\n";
|
||||
if (has_capability('coursereport/log:view', $sitecontext) && $showcourses) {
|
||||
if (has_capability('report/log:view', $sitecontext) && $showcourses) {
|
||||
echo html_writer::select($courses, "id", $course->id, false);
|
||||
} else {
|
||||
// echo '<input type="hidden" name="id" value="'.$course->id.'" />';
|
||||
$courses = array();
|
||||
$courses[$course->id] = $course->fullname . (($course->id == SITEID) ? ' ('.get_string('site').') ' : '');
|
||||
echo html_writer::select($courses,"id",$course->id, false);
|
||||
if (has_capability('coursereport/log:view', $sitecontext)) {
|
||||
if (has_capability('report/log:view', $sitecontext)) {
|
||||
$a = new stdClass();
|
||||
$a->url = "$CFG->wwwroot/course/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
$a->url = "$CFG->wwwroot/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
."&id=$course->id&date=$selecteddate&modid=$selectedactivity&showcourses=1&showusers=$showusers";
|
||||
print_string('logtoomanycourses','moodle',$a);
|
||||
}
|
||||
@@ -508,7 +527,7 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate='today'
|
||||
}
|
||||
echo html_writer::select($users, "user", $selecteduser, false);
|
||||
$a = new stdClass();
|
||||
$a->url = "$CFG->wwwroot/course/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
$a->url = "$CFG->wwwroot/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
|
||||
."&id=$course->id&date=$selecteddate&modid=$selectedactivity&showusers=1&showcourses=$showcourses";
|
||||
print_string('logtoomanyusers','moodle',$a);
|
||||
}
|
||||
@@ -526,35 +545,4 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate='today'
|
||||
echo '<input type="submit" value="'.get_string('gettheselogs').'" />';
|
||||
echo '</div>';
|
||||
echo '</form>';
|
||||
}
|
||||
|
||||
/**
|
||||
* This function extends the navigation with the report items
|
||||
*
|
||||
* @param navigation_node $navigation The navigation node to extend
|
||||
* @param stdClass $course The course to object for the report
|
||||
* @param stdClass $context The context of the course
|
||||
*/
|
||||
function log_report_extend_navigation($navigation, $course, $context) {
|
||||
global $CFG, $OUTPUT;
|
||||
if (has_capability('coursereport/log:view', $context)) {
|
||||
$url = new moodle_url('/course/report/log/index.php', array('id'=>$course->id));
|
||||
$navigation->add(get_string('pluginname', 'coursereport_log'), $url, navigation_node::TYPE_SETTING, null, null, new pix_icon('i/report', ''));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of page types
|
||||
* @param string $pagetype current page type
|
||||
* @param stdClass $parentcontext Block's parent context
|
||||
* @param stdClass $currentcontext Current context of block
|
||||
*/
|
||||
function log_page_type_list($pagetype, $parentcontext, $currentcontext) {
|
||||
$array = array(
|
||||
'*' => get_string('page-x', 'pagetype'),
|
||||
'course-report-*' => get_string('page-course-report-x', 'pagetype'),
|
||||
'course-report-log-index' => get_string('pluginpagetype', 'coursereport_log')
|
||||
//course-report-log-live not included as theres no blocks on the live log page
|
||||
);
|
||||
return $array;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Links and settings
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
// just a link to course report
|
||||
$ADMIN->add('reports', new admin_externalpage('reportlog', get_string('log', 'admin'), "$CFG->wwwroot/report/log/index.php?id=".SITEID, 'report/log:view'));
|
||||
|
||||
// no report settings
|
||||
$settings = null;
|
||||
@@ -0,0 +1,5 @@
|
||||
#page-report-log-index .info {margin:10px;}
|
||||
#page-report-log-index .logselectform {margin:10px auto;}
|
||||
|
||||
#page-report-log-user .info {margin:10px; text-align:center;}
|
||||
#page-report-log-user .graph {text-align: center;}
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Display user activity reports for a course (totals)
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas http://dougiamas.com
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require('../../config.php');
|
||||
require_once($CFG->dirroot.'/report/log/locallib.php');
|
||||
|
||||
$userid = required_param('id', PARAM_INT);
|
||||
$courseid = required_param('course', PARAM_INT);
|
||||
$mode = optional_param('mode', 'today', PARAM_ALPHA);
|
||||
$page = optional_param('page', 0, PARAM_INT);
|
||||
$perpage = optional_param('perpage', 100, PARAM_INT);
|
||||
|
||||
if ($mode !== 'today' and $mode !== 'all') {
|
||||
$mode = 'today';
|
||||
}
|
||||
|
||||
$user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0), '*', MUST_EXIST);
|
||||
$course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
|
||||
|
||||
$coursecontext = context_course::instance($course->id);
|
||||
$personalcontext = context_user::instance($user->id);
|
||||
|
||||
if ($USER->id != $user->id and has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)
|
||||
and !is_enrolled($coursecontext, $USER) and is_enrolled($coursecontext, $user)) {
|
||||
//TODO: do not require parents to be enrolled in courses - this is a hack!
|
||||
require_login();
|
||||
$PAGE->set_course($course);
|
||||
} else {
|
||||
require_login($course);
|
||||
}
|
||||
|
||||
list($all, $today) = report_log_can_access_user_report($user, $course);
|
||||
|
||||
if ($mode === 'today') {
|
||||
if (!$today) {
|
||||
require_capability('report/log:viewtoday', $coursecontext);
|
||||
}
|
||||
} else {
|
||||
if (!$all) {
|
||||
require_capability('report/log:view', $coursecontext);
|
||||
}
|
||||
}
|
||||
|
||||
add_to_log($course->id, 'course', 'report log', "report/log/user.php?id=$user->id&course=$course->id&mode=$mode", $course->id);
|
||||
|
||||
$stractivityreport = get_string('activityreport');
|
||||
|
||||
$PAGE->set_pagelayout('admin');
|
||||
$PAGE->set_url('/report/log/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>$mode));
|
||||
$PAGE->navigation->extend_for_user($user);
|
||||
$PAGE->navigation->set_userid_for_parent_checks($user->id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed.
|
||||
$PAGE->set_title("$course->shortname: $stractivityreport");
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
|
||||
if ($mode === 'today') {
|
||||
echo '<div class="graph">';
|
||||
report_log_print_graph($course, $user->id, "userday.png");
|
||||
echo '</div>';
|
||||
print_log($course, $user->id, usergetmidnight(time()), "l.time DESC", $page, $perpage,
|
||||
"user.php?course=$course->id&id=$user->id&mode=$mode");
|
||||
} else {
|
||||
echo '<div class="graph">';
|
||||
report_log_print_graph($course, $user->id, "usercourse.png");
|
||||
echo '</div>';
|
||||
print_log($course, $user->id, 0, "l.time DESC", $page, $perpage,
|
||||
"user.php?course=$course->id&id=$user->id&mode=$mode");
|
||||
}
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Version info
|
||||
*
|
||||
* @package report
|
||||
* @subpackage log
|
||||
* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$plugin->version = 2011110300; // The current plugin version (Date: YYYYMMDDXX)
|
||||
$plugin->requires = 2011110200; // Requires this Moodle version
|
||||
$plugin->component = 'report_log'; // Full name of the plugin (used for diagnostics)
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Capabilities
|
||||
*
|
||||
* @package report
|
||||
* @subpackage loglive
|
||||
* @copyright 2011 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$capabilities = array(
|
||||
|
||||
'report/loglive:view' => array(
|
||||
'riskbitmask' => RISK_PERSONAL,
|
||||
'captype' => 'read',
|
||||
'contextlevel' => CONTEXT_COURSE,
|
||||
'archetypes' => array(
|
||||
'teacher' => CAP_ALLOW,
|
||||
'editingteacher' => CAP_ALLOW,
|
||||
'manager' => CAP_ALLOW
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Displays live view of recent logs
|
||||
*
|
||||
* @package report
|
||||
* @subpackage loglive
|
||||
* @copyright 2011 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
require('../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
|
||||
if (!defined('REPORT_LOGLIVE_REFRESH')) {
|
||||
define('REPORT_LOGLIVE_REFRESH', 60); // Seconds
|
||||
}
|
||||
|
||||
$id = optional_param('id', $SITE->id, PARAM_INT);
|
||||
$page = optional_param('page', 0, PARAM_INT);
|
||||
$inpopup = optional_param('inpopup', 0, PARAM_BOOL);
|
||||
|
||||
$course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
|
||||
|
||||
require_login($course);
|
||||
|
||||
$context = context_course::instance($course->id);
|
||||
require_capability('report/loglive:view', $context);
|
||||
|
||||
$strlivelogs = get_string('livelogs', 'report_loglive');
|
||||
|
||||
if ($inpopup) {
|
||||
session_get_instance()->write_close();
|
||||
|
||||
add_to_log($course->id, 'course', 'report live', "report/loglive/index.php?id=$course->id", $course->id);
|
||||
|
||||
$date = time() - 3600;
|
||||
|
||||
$url = new moodle_url('/report/loglive/index.php', array('id'=>$course->id, 'user'=>0, 'date'=>$date, 'inpopup'=>1));
|
||||
|
||||
$strupdatesevery = get_string('updatesevery', 'moodle', REPORT_LOGLIVE_REFRESH);
|
||||
|
||||
$coursename = format_string($course->fullname, true, array('context'=>$context));
|
||||
|
||||
$PAGE->set_url($url);
|
||||
$PAGE->set_pagelayout('popup');
|
||||
$PAGE->set_title("$coursename: $strlivelogs ($strupdatesevery)");
|
||||
$PAGE->set_periodic_refresh_delay(REPORT_LOGLIVE_REFRESH);
|
||||
$PAGE->set_heading($strlivelogs);
|
||||
echo $OUTPUT->header();
|
||||
|
||||
print_log($course, 0, $date, "l.time DESC", $page, 500, $url);
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
if ($course->id == SITEID) {
|
||||
admin_externalpage_setup('reportloglive');
|
||||
echo $OUTPUT->header();
|
||||
|
||||
} else {
|
||||
$PAGE->set_url('/report/log/live.php', array('id'=>$course->id));
|
||||
$PAGE->set_title($course->shortname .': '. $strlogs);
|
||||
$PAGE->set_heading($course->fullname);
|
||||
echo $OUTPUT->header();
|
||||
}
|
||||
|
||||
echo $OUTPUT->heading(get_string('pluginname', 'report_loglive'));
|
||||
|
||||
echo $OUTPUT->container_start('info');
|
||||
$link = new moodle_url('/report/loglive/index.php', array('id'=>$course->id, 'inpopup'=>1));
|
||||
echo $OUTPUT->action_link($link, $strlivelogs, new popup_action('click', $link, 'livelog', array('height' => 500, 'width' => 800)));
|
||||
echo $OUTPUT->container_end();
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* Lang strings.
|
||||
*
|
||||
* @package report
|
||||
* @subpackage loglive
|
||||
* @copyright 2011 Petr Skoda
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
$string['loglive:view'] = 'View live logs';
|
||||
$string['pluginname'] = 'Live logs';
|
||||
$string['livelogs'] = 'Live logs from the past hour';
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user