Commit | Line | Data |
---|---|---|
d9cb06dc | 1 | <?php |
d9cb06dc | 2 | // This file is part of Moodle - http://moodle.org/ |
3 | // | |
4 | // Moodle is free software: you can redistribute it and/or modify | |
5 | // it under the terms of the GNU General Public License as published by | |
6 | // the Free Software Foundation, either version 3 of the License, or | |
7 | // (at your option) any later version. | |
8 | // | |
9 | // Moodle is distributed in the hope that it will be useful, | |
10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | // GNU General Public License for more details. | |
13 | // | |
14 | // You should have received a copy of the GNU General Public License | |
15 | // along with Moodle. If not, see <http://www.gnu.org/licenses/>. | |
16 | ||
17 | /** | |
18 | * Display user activity reports for a course | |
19 | * | |
20 | * @copyright 1999 Martin Dougiamas http://dougiamas.com | |
21 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
22 | * @package course | |
23 | */ | |
24 | ||
25 | require_once("../config.php"); | |
26 | require_once("lib.php"); | |
27 | ||
28 | $id = required_param('id',PARAM_INT); // course id | |
29 | $user = required_param('user',PARAM_INT); // user id | |
30 | $mode = optional_param('mode', "todaylogs", PARAM_ALPHA); | |
d9cb06dc | 31 | |
a6855934 | 32 | $url = new moodle_url('/course/user.php', array('id'=>$id,'user'=>$user, 'mode'=>$mode)); |
f9903ed0 | 33 | |
74df2951 | 34 | $course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST); |
a260c847 | 35 | $user = $DB->get_record("user", array("id"=>$user, 'deleted'=>0), '*', MUST_EXIST); |
5bf04b36 | 36 | |
4d00fded PS |
37 | if ($mode === 'outline' or $mode === 'complete') { |
38 | $url = new moodle_url('/report/outline/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>$mode)); | |
39 | redirect($url); | |
a260c847 PS |
40 | } |
41 | if ($mode === 'todaylogs' or $mode === 'alllogs') { | |
fad8e024 PS |
42 | $logmode = ($mode === 'todaylogs') ? 'today' : 'all'; |
43 | $url = new moodle_url('/report/log/user.php', array('id'=>$user->id, 'course'=>$course->id, 'mode'=>$logmode)); | |
44 | redirect($url); | |
a260c847 PS |
45 | } |
46 | if ($mode === 'stats') { | |
beda8fa8 PS |
47 | $url = new moodle_url('/report/stats/user.php', array('id'=>$user->id, 'course'=>$course->id)); |
48 | redirect($url); | |
4d00fded | 49 | } |
a260c847 PS |
50 | if ($mode === 'coursecompletions' or $mode === 'coursecompletion') { |
51 | $url = new moodle_url('/report/completion/user.php', array('id'=>$user->id, 'course'=>$course->id)); | |
52 | redirect($url); | |
53 | } | |
4d00fded | 54 | |
9a5e297b AA |
55 | $coursecontext = context_course::instance($course->id); |
56 | $personalcontext = context_user::instance($user->id); | |
358e2a0b | 57 | |
a0b15989 PS |
58 | $PAGE->set_url('/course/user.php', array('id'=>$id, 'user'=>$user->id, 'mode'=>$mode)); |
59 | ||
df997f84 | 60 | require_login(); |
d5814f4e | 61 | $PAGE->set_pagelayout('report'); |
df997f84 | 62 | if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext) and !is_enrolled($coursecontext)) { |
d9cb06dc | 63 | // do not require parents to be enrolled in courses ;-) |
64 | $PAGE->set_course($course); | |
65 | } else { | |
66 | require_login($course); | |
67 | } | |
6bb91986 | 68 | |
d9cb06dc | 69 | if ($user->deleted) { |
70 | echo $OUTPUT->header(); | |
71 | echo $OUTPUT->heading(get_string('userdeleted')); | |
72 | echo $OUTPUT->footer(); | |
73 | die; | |
74 | } | |
f5fc83e8 | 75 | |
d9cb06dc | 76 | // prepare list of allowed modes |
77 | $myreports = ($course->showreports and $USER->id == $user->id); | |
78 | $anyreport = has_capability('moodle/user:viewuseractivitiesreport', $personalcontext); | |
358e2a0b | 79 | |
d9cb06dc | 80 | $modes = array(); |
358e2a0b | 81 | |
abbee05e FM |
82 | // Used for grade reports, it represents whether we should be viewing the report as ourselves, or as the targetted user. |
83 | $viewasuser = false; | |
84 | ||
d9cb06dc | 85 | if (has_capability('moodle/grade:viewall', $coursecontext)) { |
86 | //ok - can view all course grades | |
87 | $modes[] = 'grade'; | |
358e2a0b | 88 | |
d9cb06dc | 89 | } else if ($course->showgrades and $user->id == $USER->id and has_capability('moodle/grade:view', $coursecontext)) { |
90 | //ok - can view own grades | |
91 | $modes[] = 'grade'; | |
358e2a0b | 92 | |
d9cb06dc | 93 | } else if ($course->showgrades and has_capability('moodle/grade:viewall', $personalcontext)) { |
94 | // ok - can view grades of this user - parent most probably | |
95 | $modes[] = 'grade'; | |
abbee05e | 96 | $viewasuser = true; |
3c7da16d | 97 | |
d9cb06dc | 98 | } else if ($course->showgrades and $anyreport) { |
99 | // ok - can view grades of this user - parent most probably | |
100 | $modes[] = 'grade'; | |
abbee05e | 101 | $viewasuser = true; |
d9cb06dc | 102 | } |
358e2a0b | 103 | |
d9cb06dc | 104 | if (empty($modes)) { |
105 | require_capability('moodle/user:viewuseractivitiesreport', $personalcontext); | |
106 | } | |
358e2a0b | 107 | |
d9cb06dc | 108 | if (!in_array($mode, $modes)) { |
7e85563d | 109 | // forbidden or non-existent mode |
d9cb06dc | 110 | $mode = reset($modes); |
111 | } | |
85a6e76c | 112 | |
f49151c3 PS |
113 | $eventdata = array( |
114 | 'context' => $coursecontext, | |
115 | 'relateduserid' => $user->id, | |
116 | 'other' => array('mode' => $mode), | |
117 | ); | |
68a72358 AG |
118 | $event = \core\event\course_user_report_viewed::create($eventdata); |
119 | $event->trigger(); | |
f9903ed0 | 120 | |
d9cb06dc | 121 | $stractivityreport = get_string("activityreport"); |
7a7e209d SH |
122 | |
123 | $PAGE->navigation->extend_for_user($user); | |
870815fa | 124 | $PAGE->navigation->set_userid_for_parent_checks($user->id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed. |
d9cb06dc | 125 | $PAGE->set_title("$course->shortname: $stractivityreport ($mode)"); |
126 | $PAGE->set_heading($course->fullname); | |
f9a0ea69 | 127 | |
d9cb06dc | 128 | switch ($mode) { |
129 | case "grade": | |
c9451960 AG |
130 | // Change the navigation to point to the my grade node (If we are a student). |
131 | if ($USER->id == $user->id) { | |
132 | require_once($CFG->dirroot . '/user/lib.php'); | |
133 | // Get the correct 'My grades' url to point to. | |
134 | $activeurl = user_mygrades_url(); | |
135 | $PAGE->navigation->override_active_url($activeurl); | |
136 | $activenode = $PAGE->navbar->add($course->shortname); | |
137 | $activenode->make_active(); | |
138 | // Find the course node and collapse it. | |
139 | $coursenode = $PAGE->navigation->find($course->id, navigation_node::TYPE_COURSE); | |
140 | $coursenode->collapse = true; | |
141 | $coursenode->make_inactive(); | |
142 | } | |
143 | echo $OUTPUT->header(); | |
144 | ||
d9cb06dc | 145 | if (empty($CFG->grade_profilereport) or !file_exists($CFG->dirroot.'/grade/report/'.$CFG->grade_profilereport.'/lib.php')) { |
146 | $CFG->grade_profilereport = 'user'; | |
147 | } | |
148 | require_once $CFG->libdir.'/gradelib.php'; | |
149 | require_once $CFG->dirroot.'/grade/lib.php'; | |
150 | require_once $CFG->dirroot.'/grade/report/'.$CFG->grade_profilereport.'/lib.php'; | |
151 | ||
152 | $functionname = 'grade_report_'.$CFG->grade_profilereport.'_profilereport'; | |
153 | if (function_exists($functionname)) { | |
abbee05e | 154 | $functionname($course, $user, $viewasuser); |
d9cb06dc | 155 | } |
156 | break; | |
157 | ||
d9cb06dc | 158 | break; |
159 | default: | |
160 | // can not be reached ;-) | |
c9451960 AG |
161 | // But just incase let's not break the navigation. |
162 | echo $OUTPUT->header(); | |
d9cb06dc | 163 | } |
f9903ed0 | 164 | |
7468bf01 | 165 | |
d9cb06dc | 166 | echo $OUTPUT->footer(); |