3 ///////////////////////////////////////////////////////////////////////////
5 // NOTICE OF COPYRIGHT //
7 // Moodle - Modular Object-Oriented Dynamic Learning Environment //
8 // http://moodle.org //
10 // Copyright (C) 1999-2004 Martin Dougiamas http://dougiamas.com //
12 // This program is free software; you can redistribute it and/or modify //
13 // it under the terms of the GNU General Public License as published by //
14 // the Free Software Foundation; either version 2 of the License, or //
15 // (at your option) any later version. //
17 // This program is distributed in the hope that it will be useful, //
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
20 // GNU General Public License for more details: //
22 // http://www.gnu.org/copyleft/gpl.html //
24 ///////////////////////////////////////////////////////////////////////////
26 /// Editing interface to edit all the groups in a course
28 require_once('../config.php');
29 require_once('lib.php');
31 $courseid = required_param('id', PARAM_INT
); // Course id
32 $selectedgroup = optional_param('group', NULL, PARAM_INT
); // Current group id
34 if (! $course = get_record('course', 'id', $courseid) ) {
35 error("That's an invalid course id");
38 require_login($course->id
);
40 if (!isteacheredit($course->id
)) {
41 redirect("group.php?id=$course->id"); // Not allowed to see all groups
44 /// Get the current list of groups and check the selection is valid
46 $groups = get_groups($course->id
);
48 if ($selectedgroup and !isset($groups[$selectedgroup])) {
49 $selectedgroup = NULL;
53 /// Print the header of the page
55 $strgroup = get_string('group');
56 $strgroups = get_string('groups');
57 $streditgroupprofile = get_string('editgroupprofile');
58 $strgroupmembers = get_string('groupmembers');
59 $strgroupmemberssee = get_string('groupmemberssee');
60 $strparticipants = get_string('participants');
62 print_header("$course->shortname: $strgroups", "$course->fullname",
63 "<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a> ".
64 "-> <a href=\"$CFG->wwwroot/user/index.php?id=$course->id\">$strparticipants</a> ".
65 "-> $strgroups", "", "", true, '', user_login_string($course, $USER));
68 /// First, process any inputs there may be.
70 if ($data = data_submitted() and confirm_sesskey()) {
72 // Clean ALL incoming parameters which go in SQL queries here for good measure
73 $data->id
= required_param('id', PARAM_INT
);
74 $data->groups
= optional_param('groups', 0, PARAM_INT
);
75 $data->groupid
= optional_param('groupid', 0, PARAM_INT
);
76 $data->members
= optional_param('members', array(), PARAM_INT
);
78 if (!empty($data->nonmembersadd
)) { /// Add people to a group
79 if (!empty($data->nonmembers
) and !empty($data->groupid
)) {
80 $groupmodified = false;
81 foreach ($data->nonmembers
as $userid) {
82 //since we allow people to be in more than 1 group, this has to go.
83 if (!ismember($data->groupid
,$userid)) {// Just to make sure (another teacher could be editing)
84 $record->groupid
= $data->groupid
;
85 $record->userid
= $userid;
86 $record->timeadded
= time();
87 if (!insert_record('groups_members', $record)) {
88 notify("Error occurred while adding user $userid to group $data->groupid");
90 $groupmodified = true;
94 set_field('groups', 'timemodified', time(), 'id', $data->groupid
);
97 $selectedgroup = $data->groupid
;
100 } else if (!empty($data->nonmembersrandom
)) { /// Add all non members to groups
101 notify("Random adding of people into groups is not functional yet.");
103 } else if (!empty($data->nonmembersinfo
)) { /// Return info about the selected users
104 notify("You must turn Javascript on");
106 } else if (!empty($data->groupsremove
)) { /// Remove a group, all members become nonmembers
107 if (!empty($data->groups
)) {
108 if(!isset($groups[$data->groups
])) {
109 error("This is not a valid group to remove");
111 delete_records("groups", "id", $data->groups
);
112 delete_records("groups_members", "groupid", $data->groups
);
113 unset($groups[$data->groups
]);
117 } else if (!empty($data->groupsinfo
)) { /// Display full info for a group
118 notify("You must turn Javascript on");
120 } else if (!empty($data->groupsadd
)) { /// Create a new group
121 if (!empty($data->newgroupname
)) {
122 $newgroup->name
= $data->newgroupname
;
123 $newgroup->courseid
= $course->id
;
124 $newgroup->lang
= current_language();
125 $newgroup->timecreated
= time();
126 if (!insert_record("groups", $newgroup)) {
127 notify("Could not insert the new group '$newgroup->name'");
129 $groups = get_groups($course->id
);
132 } else if (!empty($data->membersremove
)) { /// Remove selected people from a particular group
134 if (!empty($data->members
) and !empty($data->groupid
)) {
135 foreach ($data->members
as $userid) {
136 delete_records('groups_members', 'userid', $userid, "groupid", $data->groupid
);
138 set_field('groups', 'timemodified', time(), 'id', $data->groupid
);
140 $selectedgroup = $data->groupid
;
142 } else if (!empty($data->membersinfo
)) { /// Return info about the selected users
143 notify("You must turn Javascript on");
149 /// Calculate data ready to create the editing interface
151 $strmemberincourse = get_string('memberincourse');
152 $strgroupnonmembers = get_string('groupnonmembers');
153 $strgroupmembersselected = get_string('groupmembersselected');
154 $strgroupremovemembers = get_string('groupremovemembers');
155 $strgroupinfomembers = get_string('groupinfomembers');
156 $strgroupadd = get_string('groupadd');
157 $strgroupremove = get_string('groupremove');
158 $strgroupinfo = get_string('groupinfo');
159 $strgroupinfoedit = get_string('groupinfoedit');
160 $strgroupinfopeople = get_string('groupinfopeople');
161 $strgrouprandomassign = get_string('grouprandomassign');
162 $strgroupaddusers = get_string('groupaddusers');
163 $courseid = $course->id
;
164 $listgroups = array();
165 $listmembers = array();
166 $nonmembers = array();
167 $groupcount = count($groups);
170 /// First, get everyone into the nonmembers array
172 if ($students = get_course_students($course->id
)) {
173 foreach ($students as $student) {
174 $nonmembers[$student->id
] = fullname($student, true);
179 if ($teachers = get_course_teachers($course->id
)) {
180 foreach ($teachers as $teacher) {
182 if (isteacheredit($course->id
, $teacher->id
)) {
185 $nonmembers[$teacher->id
] = $prefix.fullname($teacher, true);
190 /// Pull out all the members into little arrays
193 foreach ($groups as $group) {
195 $listmembers[$group->id
] = array();
196 if ($groupusers = get_group_users($group->id
)) {
197 foreach ($groupusers as $groupuser) {
198 $listmembers[$group->id
][$groupuser->id
] = $nonmembers[$groupuser->id
];
199 //we do not remove people from $nonmembers, everyone is displayed
200 //this is to enable people to be registered in multiple groups
201 //unset($nonmembers[$groupuser->id]);
204 natcasesort($listmembers[$group->id
]);
206 $listgroups[$group->id
] = $group->name
." ($countusers)";
208 natcasesort($listgroups);
211 natcasesort($nonmembers);
213 if (empty($selectedgroup)) { // Choose the first group by default
214 if ($selectedgroup = array_shift($temparr = array_keys($listgroups))) {
215 $members = $listmembers[$selectedgroup];
218 $members = $listmembers[$selectedgroup];
221 $sesskey = !empty($USER->id
) ?
$USER->sesskey
: '';
223 /// Print out the complete form
225 include('groups-edit.html');
227 print_footer($course);