-
Notifications
You must be signed in to change notification settings - Fork 1
/
locallib.php
133 lines (116 loc) · 4.45 KB
/
locallib.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?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/>.
/**
* Library of functions and constants of Group selection module
*
* @package mod_groupselect
* @copyright 2018 HTW Chur Roger Barras
* @copyright 2008-2011 Petr Skoda (http://skodak.org)
* @copyright 2014 Tampere University of Technology, P. Pyykkönen (pirkka.pyykkonen ÄT tut.fi)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
// Event types.
define('GROUPSELECT_EVENT_TYPE_DUE', 'due');
require_once("$CFG->dirroot/group/lib.php");
require_once("$CFG->dirroot/mod/groupselect/lib.php");
/**
* Get the group description as text
*
* @param object $group groups record
* @return string group description as plain text
*/
function groupselect_get_group_info($group) {
$group = clone($group);
$context = context_course::instance($group->courseid);
$group->description = file_rewrite_pluginfile_urls($group->description, 'pluginfile.php', $context->id, 'group', 'description', $group->id);
if (!isset($group->descriptionformat)) {
$group->descriptionformat = FORMAT_MOODLE;
}
$options = new stdClass;
$options->overflowdiv = true;
return format_text($group->description, $group->descriptionformat, array('filter' => false, 'overflowdiv' => true, 'context' => $context));
}
/**
* Is the given group selection open for students to select their group at the moment?
*
* @param object $groupselect groupselect record
* @return bool True if the group selection is open right now, false otherwise
*/
function groupselect_is_open($groupselect) {
$now = time();
return ($groupselect->timeavailable < $now AND ($groupselect->timedue == 0 or $groupselect->timedue > $now));
}
/**
* Get the number of members in all groups the user can select from in this activity
*
* @param $cm Course module slot of the groupselect instance
* @param $targetgrouping The id of grouping the user can select a group from
* @return array of objects: [id] => object(->usercount ->id) where id is group id
*/
function groupselect_group_member_counts($cm, $targetgrouping=0) {
global $DB;
// TODO: join into enrolment table
if (empty($targetgrouping)) {
// all groups
$sql = "SELECT g.id, COUNT(gm.userid) AS usercount
FROM {groups_members} gm
JOIN {groups} g ON g.id = gm.groupid
WHERE g.courseid = :course
GROUP BY g.id";
$params = array('course' => $cm->course);
} else {
$sql = "SELECT g.id, COUNT(gm.userid) AS usercount
FROM {groups_members} gm
JOIN {groups} g ON g.id = gm.groupid
JOIN {groupings_groups} gg ON gg.groupid = g.id
WHERE g.courseid = :course
AND gg.groupingid = :grouping
GROUP BY g.id";
$params = array('course' => $cm->course, 'grouping' => $targetgrouping);
}
return $DB->get_records_sql($sql, $params);
}
/**
* Get password protected groups
*
* @return array of group ids
*/
function groupselect_get_password_protected_groups($groupselect) {
global $DB;
$sql = "SELECT groupid
FROM {groupselect_passwords} gp
WHERE gp.instance_id = ?";
$result = $DB->get_records_sql($sql, array($groupselect->id));
$ids = array();
foreach ($result as $r) {
array_push($ids, $r->groupid);
}
return $ids;
}
/**
* Get users with given role in given context
*
* @return array of user ids
*/
function groupselect_get_context_members_by_role($context, $roleid) {
global $DB;
$sql = "SELECT r.userid
FROM {role_assignments} r
WHERE r.contextid = ?
AND r.roleid = ?";
return $DB->get_records_sql($sql, array($context, $roleid));
}