Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
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);
31
 
32
$url = new moodle_url('/course/user.php', array('id'=>$id,'user'=>$user, 'mode'=>$mode));
33
 
34
$course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
35
$user = $DB->get_record("user", array("id"=>$user, 'deleted'=>0), '*', MUST_EXIST);
36
 
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);
40
}
41
if ($mode === 'todaylogs' or $mode === 'alllogs') {
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);
45
}
46
if ($mode === 'stats') {
47
    $url = new moodle_url('/report/stats/user.php', array('id'=>$user->id, 'course'=>$course->id));
48
    redirect($url);
49
}
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
}
54
 
55
$coursecontext   = context_course::instance($course->id);
56
$personalcontext = context_user::instance($user->id);
57
 
58
if ($id == SITEID) {
59
    $PAGE->set_context($personalcontext);
60
    $PAGE->set_heading(fullname($user));
61
} else {
62
    $PAGE->set_context($coursecontext);
63
    $PAGE->set_secondary_active_tab('participants');
64
    $PAGE->set_heading($course->fullname);
65
}
66
 
67
$PAGE->set_url('/course/user.php', array('id'=>$id, 'user'=>$user->id, 'mode'=>$mode));
68
 
69
require_login();
70
$PAGE->set_pagelayout('report');
71
if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext) and !is_enrolled($coursecontext)) {
72
    // do not require parents to be enrolled in courses ;-)
73
    $PAGE->set_course($course);
74
} else {
75
    require_login($course);
76
}
77
 
78
if ($user->deleted) {
79
    echo $OUTPUT->header();
80
    echo $OUTPUT->heading(get_string('userdeleted'));
81
    echo $OUTPUT->footer();
82
    die;
83
}
84
 
85
// prepare list of allowed modes
86
$myreports  = ($course->showreports and $USER->id == $user->id);
87
$anyreport  = has_capability('moodle/user:viewuseractivitiesreport', $personalcontext);
88
 
89
$modes = array();
90
 
91
// Used for grade reports, it represents whether we should be viewing the report as ourselves, or as the targetted user.
92
$viewasuser = false;
93
 
94
if (has_capability('moodle/grade:viewall', $coursecontext)) {
95
    //ok - can view all course grades
96
    $modes[] = 'grade';
97
 
98
} else if ($course->showgrades and $user->id == $USER->id and has_capability('moodle/grade:view', $coursecontext)) {
99
    //ok - can view own grades
100
    $modes[] = 'grade';
101
 
102
} else if ($course->showgrades and has_capability('moodle/grade:viewall', $personalcontext)) {
103
    // ok - can view grades of this user - parent most probably
104
    $modes[] = 'grade';
105
    $viewasuser = true;
106
 
107
} else if ($course->showgrades and $anyreport) {
108
    // ok - can view grades of this user - parent most probably
109
    $modes[] = 'grade';
110
    $viewasuser = true;
111
}
112
 
113
if (empty($modes)) {
114
    require_capability('moodle/user:viewuseractivitiesreport', $personalcontext);
115
}
116
 
117
if (!in_array($mode, $modes)) {
118
    // forbidden or non-existent mode
119
    $mode = reset($modes);
120
}
121
 
122
$eventdata = array(
123
    'context' => $coursecontext,
124
    'relateduserid' => $user->id,
125
    'other' => array('mode' => $mode),
126
);
127
$event = \core\event\course_user_report_viewed::create($eventdata);
128
$event->trigger();
129
 
130
$stractivityreport = get_string("activityreport");
131
 
132
$PAGE->navigation->extend_for_user($user);
133
$PAGE->navigation->set_userid_for_parent_checks($user->id); // see MDL-25805 for reasons and for full commit reference for reversal when fixed.
134
$PAGE->set_title("$course->shortname: $stractivityreport ($mode)");
135
 
136
switch ($mode) {
137
    case "grade":
138
        // Change the navigation to point to the my grade node (If we are a student).
139
        if ($USER->id == $user->id) {
140
            require_once($CFG->dirroot . '/user/lib.php');
141
            // Get the correct 'Grades' url to point to.
142
            $activeurl = user_mygrades_url();
143
            $navbar = $PAGE->navbar->add(get_string('grades', 'grades'), $activeurl, navigation_node::TYPE_SETTING, null, 'grades');
144
            $activenode = $navbar->add($course->shortname);
145
            $activenode->make_active();
146
            // Find the course node and collapse it.
147
            $coursenode = $PAGE->navigation->find($course->id, navigation_node::TYPE_COURSE);
148
            $coursenode->collapse = true;
149
            $coursenode->make_inactive();
150
 
151
            if (!preg_match('/^user\d{0,}$/', $activenode->key ?? '')) { // No user name found.
152
                $userurl = new moodle_url('/user/view.php', array('id' => $user->id, 'course' => $course->id));
153
                // Add the user name.
154
                $usernode = $activenode->add(fullname($user), $userurl, navigation_node::TYPE_SETTING);
155
                $usernode->add(get_string('grades'));
156
            } else {
157
                $url = new moodle_url('/course/user.php', array('id' => $id, 'user' => $user->id, 'mode' => $mode));
158
                $reportnode = $activenode->add(get_string('pluginname', 'gradereport_user'), $url);
159
            }
160
        } else {
161
            if ($course->id == SITEID) {
162
                $activenode = $PAGE->navigation->find('user' . $user->id, null);
163
            } else {
164
                $currentcoursenode = $PAGE->navigation->find($course->id, navigation_node::TYPE_COURSE);
165
                $activenode = $currentcoursenode->find_active_node();
166
            }
167
 
168
            // Check to see if the active node is a user name.
169
            if (!preg_match('/^user\d{0,}$/', $activenode->key)) { // No user name found.
170
                $userurl = new moodle_url('/user/view.php', array('id' => $user->id, 'course' => $course->id));
171
                // Add the user name.
172
                $PAGE->navbar->add(fullname($user), $userurl, navigation_node::TYPE_SETTING);
173
            }
174
            $PAGE->navbar->add(get_string('report'));
175
            $gradeurl = new moodle_url('/course/user.php', array('id' => $id, 'user' => $user->id, 'mode' => $mode));
176
            // Add the 'grades' node to the navbar.
177
            $navbar = $PAGE->navbar->add(get_string('grades', 'grades'), $gradeurl, navigation_node::TYPE_SETTING);
178
        }
179
 
180
        echo $OUTPUT->header();
181
 
182
        if ($course->id !== SITEID) {
183
            $userheading = array(
184
                'heading' => fullname($user, has_capability('moodle/site:viewfullnames', $PAGE->context)),
185
                'user' => $user,
186
                'usercontext' => $personalcontext,
187
            );
188
            echo $OUTPUT->context_header($userheading, 2);
189
 
190
            echo $OUTPUT->heading(get_string('grades', 'moodle'), 2, 'main mt-4 mb-4');
191
        }
192
 
193
        if (empty($CFG->grade_profilereport) or !file_exists($CFG->dirroot.'/grade/report/'.$CFG->grade_profilereport.'/lib.php')) {
194
            $CFG->grade_profilereport = 'user';
195
        }
196
        require_once $CFG->libdir.'/gradelib.php';
197
        require_once $CFG->dirroot.'/grade/lib.php';
198
        require_once $CFG->dirroot.'/grade/report/'.$CFG->grade_profilereport.'/lib.php';
199
 
200
        // User must be able to view this grade report.
201
        if (!$viewasuser) {
202
            require_capability('gradereport/' . $CFG->grade_profilereport . ':view', $coursecontext);
203
        }
204
 
205
        $functionname = 'grade_report_'.$CFG->grade_profilereport.'_profilereport';
206
        if (function_exists($functionname)) {
207
            $functionname($course, $user, $viewasuser);
208
        }
209
        break;
210
 
211
    default:
212
        // It's unlikely to reach this piece of code, as the mode is never empty and it sets mode as grade in most of the cases.
213
        // Display the page header to avoid breaking the navigation. A course/user.php review will be done in MDL-49939.
214
        echo $OUTPUT->header();
215
}
216
 
217
echo $OUTPUT->footer();