forked from skodak/moodle-mod_groupselect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
locallib.php
90 lines (77 loc) · 3.29 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
<?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
* @subpackage groupselect
* @copyright 2008-2011 Petr Skoda (http://skodak.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die;
require_once("$CFG->dirroot/group/lib.php");
require_once("$CFG->dirroot/mod/groupselect/lib.php");
function groupselect_get_group_info($group) {
$group = clone($group);
$context = get_context_instance(CONTEXT_COURSE, $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('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);
}