-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathstudentlib.php
116 lines (100 loc) · 3.3 KB
/
studentlib.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?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/>.
/**
* Ranking block student lib
*
* @package block_ranking
* @copyright 2020 Willian Mano http://conecti.me
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace block_ranking;
/**
* Ranking block student lib class.
*
* @package block_ranking
* @copyright 2020 Willian Mano http://conecti.me
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class studentlib {
/**
* Returns the total user's points in a course
*
* @return mixed
*
* @throws \dml_exception
*/
public function get_total_course_points() {
global $DB, $COURSE, $USER;
$sql = "SELECT
sum(rl.points) as points
FROM
{user} u
INNER JOIN {ranking_points} r ON r.userid = u.id AND r.courseid = :courseid
INNER JOIN {ranking_logs} rl ON rl.rankingid = r.id
WHERE u.id = :userid
AND r.courseid = :crsid";
$params['userid'] = $USER->id;
$params['courseid'] = $COURSE->id;
$params['crsid'] = $COURSE->id;
$points = $DB->get_record_sql($sql, $params);
if ($points) {
return $points->points;
}
return 0;
}
/**
* Returns the total user's points in a course in a period
*
* @param int $datestart
* @param int $dateend
*
* @return mixed
*
* @throws \dml_exception
*/
public function get_student_points_by_date($datestart, $dateend) {
global $DB, $COURSE, $USER;
$sql = "SELECT
sum(rl.points) as points
FROM
{user} u
INNER JOIN {ranking_points} r ON r.userid = u.id AND r.courseid = :courseid
INNER JOIN {ranking_logs} rl ON rl.rankingid = r.id
WHERE u.id = :userid
AND r.courseid = :crsid
AND rl.timecreated BETWEEN :weekstart AND :weekend";
$params['userid'] = $USER->id;
$params['courseid'] = $COURSE->id;
$params['crsid'] = $COURSE->id;
$params['weekstart'] = $datestart;
$params['weekend'] = $dateend;
$points = $DB->get_record_sql($sql, $params);
if ($points) {
return $points->points;
}
return 0;
}
/**
* Checks if the user is enrolled as student in the course.
*
* @return bool
*/
public function is_student() {
global $COURSE, $USER;
$context = \context_course::instance($COURSE->id);
return user_has_role_assignment($USER->id, 5, $context->id);
}
}