53b7b4ec377de11ffc841e91ed424c3dae1f9db9
[moodle.git] / group / overview.php
1 <?php // $Id$
2 /**
3  * Print an overview of groupings & group membership
4  *
5  * @author  Matt Clarkson mattc@catalyst.net.nz
6  * @version 0.0.1
7  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
8  * @package groups
9  */
11 require_once('../config.php');
13 $courseid   = required_param('id', PARAM_INT);
14 $groupid    = optional_param('group', 0, PARAM_INT);
15 $groupingid = optional_param('grouping', 0, PARAM_INT);
17 $returnurl = $CFG->wwwroot.'/group/index.php?id='.$courseid;
18 $rooturl   = $CFG->wwwroot.'/group/overview.php?id='.$courseid;
20 if (!$course = $DB->get_record('course', array('id'=>$courseid))) {
21     print_error('invalidcourse');
22 }
24 // Make sure that the user has permissions to manage groups.
25 require_login($course);
27 $context = get_context_instance(CONTEXT_COURSE, $courseid);
28 require_capability('moodle/course:managegroups', $context);
30 $strgroups           = get_string('groups');
31 $strparticipants     = get_string('participants');
32 $stroverview         = get_string('overview', 'group');
33 $strgrouping         = get_string('grouping', 'group');
34 $strgroup            = get_string('group', 'group');
35 $strnotingrouping    = get_string('notingrouping', 'group');
36 $strfiltergroups     = get_string('filtergroups', 'group');
37 $strnogroups         = get_string('nogroups', 'group');
38 $strdescription      = get_string('description');
40 // Get all groupings
41 if (empty($CFG->enablegroupings)) {
42     $groupings  = array();
43     $members    = array(-1 => array()); //groups not in a grouping
44     $groupingid = 0;
45 } else {
46     $groupings = $DB->get_records('groupings', array('courseid'=>$courseid), 'name');
47     $members = array();
48     foreach ($groupings as $grouping) {
49         $members[$grouping->id] = array();
50     }
51     $members[-1] = array(); //groups not in a grouping
52 }
54 // Get all groups
55 $groups = $DB->get_records('groups', array('courseid'=>$courseid), 'name');
57 $params = array('courseid'=>$courseid);
58 if ($groupid) {
59     $groupwhere = "AND g.id = :groupid";
60     $params['groupid']   = $groupid;
61 } else {
62     $groupwhere = "";
63 }
65 if (empty($CFG->enablegroupings)) {
66     $sql = "SELECT g.id AS groupid, NULL AS groupingid, u.id AS userid, u.firstname, u.lastname, u.idnumber, u.username
67               FROM {groups} g
68                    LEFT JOIN {groups_members} gm ON g.id = gm.groupid
69                    LEFT JOIN {user} u ON gm.userid = u.id
70              WHERE g.courseid = :courseid $groupwhere
71           ORDER BY g.name, u.lastname, u.firstname";
72 } else {
73     if ($groupingid) {
74         $groupingwhere = "AND gg.groupingid = :groupingid";
75         $params['groupingid'] = $groupingid;
76     } else {
77         $groupingwhere = "";
78     }
79     $sql = "SELECT g.id AS groupid, gg.groupingid, u.id AS userid, u.firstname, u.lastname, u.idnumber, u.username
80               FROM {groups} g
81                    LEFT JOIN {groupings_groups} gg ON g.id = gg.groupid
82                    LEFT JOIN {groups_members} gm ON g.id = gm.groupid
83                    LEFT JOIN {user} u ON gm.userid = u.id
84              WHERE g.courseid = :courseid $groupwhere $groupingwhere
85           ORDER BY g.name, u.lastname, u.firstname";
86 }
88 if ($rs = $DB->get_recordset_sql($sql, $params)) {
89     foreach ($rs as $row) {
90         $user = new object();
91         $user->id        = $row->userid;
92         $user->firstname = $row->firstname;
93         $user->lastname  = $row->lastname;
94         $user->username  = $row->username;
95         $user->idnumber  = $row->idnumber;
96         if (!$row->groupingid) {
97             $row->groupingid = -1;
98         }
99         if (!array_key_exists($row->groupid, $members[$row->groupingid])) {
100             $members[$row->groupingid][$row->groupid] = array();
101         }
102         if(isset($user->id)){
103            $members[$row->groupingid][$row->groupid][] = $user;
104         }
105     }
106     $rs->close();
110 // Print the page and form
111 $navlinks = array(array('name'=>$strparticipants, 'link'=>$CFG->wwwroot.'/user/index.php?id='.$courseid, 'type'=>'misc'),
112                   array('name'=>$strgroups, 'link'=>'', 'type'=>'misc'));
113 $navigation = build_navigation($navlinks);
115 /// Print header
116 print_header_simple($strgroups, ': '.$strgroups, $navigation, '', '', true, '', navmenu($course));
117 // Add tabs
118 $currenttab = 'overview';
119 require('tabs.php');
121 /// Print overview
122 echo $OUTPUT->heading(format_string($course->shortname) .' '.$stroverview, 3);
124 echo $strfiltergroups;
126 if (!empty($CFG->enablegroupings)) {
127     $options = array();
128     $options[0] = get_string('all');
129     foreach ($groupings as $grouping) {
130         $options[$grouping->id] = strip_tags(format_string($grouping->name));
131     }
132     $popupurl = $rooturl.'&group='.$groupid;
133     $select = html_select::make_popup_form($popupurl, 'grouping', $options, 'selectgrouping', $groupingid);
134     $select->set_label($strgrouping);
135     echo $OUTPUT->select($select);
138 $options = array();
139 $options[0] = get_string('all');
140 foreach ($groups as $group) {
141     $options[$group->id] = strip_tags(format_string($group->name));
143 $popupurl = $rooturl.'&grouping='.$groupingid;
144 $select = html_select::make_popup_form($popupurl, 'group', $options, 'selectgroup', $groupid);
145 $select->set_label($strgroup);
146 echo $OUTPUT->select($select);
148 /// Print table
149 $printed = false;
150 foreach ($members as $gpgid=>$groupdata) {
151     if ($groupingid and $groupingid != $gpgid) {
152         continue; // do not show
153     }
154     $table = new html_table();
155     $table->head  = array(get_string('groupscount', 'group', count($groupdata)), get_string('groupmembers', 'group'), get_string('usercount', 'group'));
156     $table->size  = array('20%', '70%', '10%');
157     $table->align = array('left', 'left', 'center');
158     $table->width = '90%';
159     $table->data  = array();
160     foreach ($groupdata as $gpid=>$users) {
161         if ($groupid and $groupid != $gpid) {
162             continue;
163         }
164         $line = array();
165         $name = format_string($groups[$gpid]->name);
166         $jsdescription = addslashes_js(trim(format_text($groups[$gpid]->description)));
167         if (empty($jsdescription)) {
168             $line[] = $name;
169         } else {
170             $jsstrdescription = addslashes_js($strdescription);
171             $overlib = "return overlib('$jsdescription', BORDER, 0, FGCLASS, 'description', "
172                       ."CAPTIONFONTCLASS, 'caption', CAPTION, '$jsstrdescription');";
173             $line[] = '<span onmouseover="'.s($overlib).'" onmouseout="return nd();">'.$name.'</span>';
174         }
175         $fullnames = array();
176         foreach ($users as $user) {
177             $fullnames[] = '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$user->id.'&amp;course='.$course->id.'">'.fullname($user, true).'</a>';
178         }
179         $line[] = implode(', ', $fullnames);
180         $line[] = count($users);
181         $table->data[] = $line;
182     }
183     if ($groupid and empty($table->data)) {
184         continue;
185     }
186     if (!empty($CFG->enablegroupings)) {
187         if ($gpgid < 0) {
188             echo $OUTPUT->heading($strnotingrouping, 3);
189         } else {
190             echo $OUTPUT->heading(format_string($groupings[$gpgid]->name), 3);
191             echo $OUTPUT->box(format_text($groupings[$gpgid]->description), 'generalbox boxwidthnarrow boxaligncenter');
192         }
193     }
194     echo $OUTPUT->table($table);
195     $printed = true;
198 echo $OUTPUT->footer();
199 ?>