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
 * External grade report overview API
19
 *
20
 * @package    gradereport_overview
21
 * @copyright  2016 Juan Leyva <juan@moodle.com>
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
use core_external\external_api;
26
use core_external\external_function_parameters;
27
use core_external\external_multiple_structure;
28
use core_external\external_single_structure;
29
use core_external\external_value;
30
use core_external\external_warnings;
31
 
32
defined('MOODLE_INTERNAL') || die;
33
 
34
require_once($CFG->libdir . '/gradelib.php');
35
require_once($CFG->dirroot . '/grade/lib.php');
36
require_once($CFG->dirroot . '/grade/report/overview/lib.php');
37
 
38
/**
39
 * External grade overview report API implementation
40
 *
41
 * @package    gradereport_overview
42
 * @copyright  2016 Juan Leyva <juan@moodle.com>
43
 * @category   external
44
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
45
 */
46
class gradereport_overview_external extends external_api {
47
 
48
    /**
49
     * Describes the parameters for get_course_grades.
50
     *
51
     * @return external_function_parameters
52
     * @since Moodle 3.2
53
     */
54
    public static function get_course_grades_parameters() {
55
        return new external_function_parameters (
56
            array(
57
                'userid' => new external_value(PARAM_INT, 'Get grades for this user (optional, default current)', VALUE_DEFAULT, 0)
58
            )
59
        );
60
    }
61
 
62
    /**
63
     * Get the given user courses final grades
64
     *
65
     * @param int $userid get grades for this user (optional, default current)
66
     *
67
     * @return array the grades tables
68
     * @since Moodle 3.2
69
     */
70
    public static function get_course_grades($userid = 0) {
71
        global $USER;
72
 
73
        $warnings = array();
74
 
75
        // Validate the parameter.
76
        $params = self::validate_parameters(self::get_course_grades_parameters(),
77
            array(
78
                'userid' => $userid
79
            )
80
        );
81
 
82
        $userid = $params['userid'];
83
        if (empty($userid)) {
84
            $userid = $USER->id;
85
        }
86
 
87
        $systemcontext = context_system::instance();
88
        self::validate_context($systemcontext);
89
 
90
        if ($USER->id != $userid) {
91
            // We must check if the current user can view other users grades.
92
            $user = core_user::get_user($userid, '*', MUST_EXIST);
93
            core_user::require_active_user($user);
94
            require_capability('moodle/grade:viewall', $systemcontext);
95
        }
96
 
97
        // We need the site course, and course context.
98
        $course = get_course(SITEID);
99
        $context = context_course::instance($course->id);
100
 
101
        // Get the course final grades now.
102
        $gpr = new grade_plugin_return(array('type' => 'report', 'plugin' => 'overview', 'courseid' => $course->id,
103
                                        'userid' => $userid));
104
        $report = new grade_report_overview($userid, $gpr, $context);
105
        // Force a regrade if required. As this is the overview report, we need to do all courses
106
        // the user is enrolled in, not just $course.
107
        $report->regrade_all_courses_if_needed();
108
        $coursesgrades = $report->setup_courses_data(true);
109
 
110
        $grades = array();
111
        foreach ($coursesgrades as $coursegrade) {
112
            $gradeinfo = array(
113
                'courseid' => $coursegrade['course']->id,
114
                'grade' => grade_format_gradevalue($coursegrade['finalgrade'], $coursegrade['courseitem'], true),
115
                'rawgrade' => $coursegrade['finalgrade'],
116
            );
117
            if (isset($coursegrade['rank'])) {
118
                $gradeinfo['rank'] = $coursegrade['rank'];
119
            }
120
            $grades[] = $gradeinfo;
121
        }
122
 
123
        $result = array();
124
        $result['grades'] = $grades;
125
        $result['warnings'] = $warnings;
126
        return $result;
127
    }
128
 
129
    /**
130
     * Describes the get_course_grades return value.
131
     *
132
     * @return external_single_structure
133
     * @since Moodle 3.2
134
     */
135
    public static function get_course_grades_returns() {
136
        return new external_single_structure(
137
            array(
138
                'grades' => new external_multiple_structure(
139
                    new external_single_structure(
140
                        array(
141
                            'courseid' => new external_value(PARAM_INT, 'Course id'),
142
                            'grade' => new external_value(PARAM_RAW, 'Grade formatted'),
143
                            'rawgrade' => new external_value(PARAM_RAW, 'Raw grade, not formatted'),
144
                            'rank' => new external_value(PARAM_INT, 'Your rank in the course', VALUE_OPTIONAL),
145
                        )
146
                    )
147
                ),
148
                'warnings' => new external_warnings()
149
            )
150
        );
151
    }
152
 
153
    /**
154
     * Returns description of method parameters
155
     *
156
     * @return external_function_parameters
157
     * @since Moodle 3.2
158
     */
159
    public static function view_grade_report_parameters() {
160
        return new external_function_parameters(
161
            array(
162
                'courseid' => new external_value(PARAM_INT, 'id of the course'),
163
                'userid' => new external_value(PARAM_INT, 'id of the user, 0 means current user', VALUE_DEFAULT, 0)
164
            )
165
        );
166
    }
167
 
168
    /**
169
     * Trigger the user report events, do the same that the web interface view of the report
170
     *
171
     * @param int $courseid id of course
172
     * @param int $userid id of the user the report belongs to
173
     * @return array of warnings and status result
174
     * @since Moodle 3.2
175
     * @throws moodle_exception
176
     */
177
    public static function view_grade_report($courseid, $userid = 0) {
178
        global $USER;
179
 
180
        $params = self::validate_parameters(self::view_grade_report_parameters(),
181
            array(
182
                'courseid' => $courseid,
183
                'userid' => $userid
184
            )
185
        );
186
 
187
        $warnings = array();
188
        $course = get_course($params['courseid']);
189
 
190
        $context = context_course::instance($course->id);
191
        self::validate_context($context);
192
 
193
        $userid = $params['userid'];
194
        if (empty($userid)) {
195
            $userid = $USER->id;
196
        } else {
197
            $user = core_user::get_user($userid, '*', MUST_EXIST);
198
            core_user::require_active_user($user);
199
        }
200
        $systemcontext = context_system::instance();
201
        $personalcontext = context_user::instance($userid);
202
 
203
        $access = grade_report_overview::check_access($systemcontext, $context, $personalcontext, $course, $userid);
204
 
205
        if (!$access) {
206
            throw new moodle_exception('nopermissiontoviewgrades', 'error');
207
        }
208
 
209
        grade_report_overview::viewed($context, $course->id, $userid);
210
 
211
        $result = array();
212
        $result['status'] = true;
213
        $result['warnings'] = $warnings;
214
        return $result;
215
    }
216
 
217
    /**
218
     * Returns description of method result value
219
     *
220
     * @return \core_external\external_description
221
     * @since Moodle 3.2
222
     */
223
    public static function view_grade_report_returns() {
224
        return new external_single_structure(
225
            array(
226
                'status' => new external_value(PARAM_BOOL, 'status: true if success'),
227
                'warnings' => new external_warnings()
228
            )
229
        );
230
    }
231
}