remove old readme
[atutor.git] / mods / _core / groups / members.php
1 <?php\r
2 /************************************************************************/\r
3 /* ATutor                                                                                                                               */\r
4 /************************************************************************/\r
5 /* Copyright (c) 2002-2010                                              */\r
6 /* Inclusive Design Institute                                           */\r
7 /* http://atutor.ca                                                                                                             */\r
8 /*                                                                                                                                              */\r
9 /* This program is free software. You can redistribute it and/or        */\r
10 /* modify it under the terms of the GNU General Public License          */\r
11 /* as published by the Free Software Foundation.                        */\r
12 /************************************************************************/\r
13 // $Id$\r
14 define('AT_INCLUDE_PATH', '../../../include/');\r
15 require(AT_INCLUDE_PATH.'vitals.inc.php');\r
16 authenticate(AT_PRIV_GROUPS);\r
17 \r
18 /* Get type ID */\r
19 $id = intval($_REQUEST['id']);\r
20 \r
21 $sql = "SELECT * FROM ".TABLE_PREFIX."groups_types WHERE type_id=$id AND course_id=$_SESSION[course_id]";\r
22 $result = mysql_query($sql,$db);\r
23 if (!($type_row = mysql_fetch_assoc($result))) {\r
24         require (AT_INCLUDE_PATH.'header.inc.php');\r
25         $msg->printErrors('GROUP_TYPE_NOT_FOUND');\r
26         require (AT_INCLUDE_PATH.'footer.inc.php');\r
27         exit;\r
28 }\r
29 \r
30 $tmp_groups = array();\r
31 $sql = "SELECT group_id, title FROM ".TABLE_PREFIX."groups WHERE type_id=$id ORDER BY title";\r
32 $result = mysql_query($sql, $db);\r
33 while ($row = mysql_fetch_assoc($result)) {\r
34         $tmp_groups[$row['group_id']] = htmlentities_utf8($row['title']);\r
35 }\r
36 $groups_keys = array_keys($tmp_groups);\r
37 $groups_keys = implode($groups_keys, ',');\r
38 \r
39 if (isset($_POST['cancel'])) {\r
40         $msg->addFeedback('CANCELLED');\r
41         header('Location: index.php');\r
42         exit;\r
43 } else if (isset($_POST['submit'])) {\r
44         $sql = "DELETE FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys)";\r
45         mysql_query($sql, $db);\r
46 \r
47         $sql = '';\r
48         foreach ($_POST['groups'] as $mid => $gid) {\r
49                 $mid = abs($mid);\r
50                 $gid = abs($gid);\r
51                 if ($gid) {\r
52                         $sql .= "($gid, $mid),";\r
53                 }\r
54         }\r
55         if ($sql) {\r
56                 $sql = substr($sql, 0, -1);\r
57                 $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES $sql";\r
58                 mysql_query($sql, $db);\r
59         }\r
60 \r
61         $msg->addFeedback('GROUP_MEMBERS_SAVED');\r
62 \r
63         header('Location: index.php');\r
64         exit;\r
65 } else if (isset($_POST['assign'])) {\r
66 \r
67         $groups_counts = array();\r
68         $sql = "SELECT group_id, COUNT(*) AS cnt FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys) GROUP BY group_id ORDER BY cnt ASC";\r
69         $result = mysql_query($sql, $db);\r
70         while ($row = mysql_fetch_assoc($result)) {\r
71                 $groups_counts[$row['group_id']] = $row['cnt'];\r
72         }\r
73         $total_assigned = array_sum($groups_counts);\r
74 \r
75         if (is_array($_POST['groups'])) {\r
76                 foreach ($_POST['groups'] as $mid => $gid) {\r
77                         if ($gid) {\r
78                                 unset($_POST['groups'][$mid]);\r
79                         }\r
80                 }\r
81                 $students = array_keys($_POST['groups']);\r
82 \r
83                 $total_unassigned = count($students);\r
84 \r
85                 shuffle($students);\r
86                 reset($students);\r
87         }\r
88 \r
89         $total_students = $total_unassigned + $total_assigned;\r
90 \r
91         $num_groups = count($tmp_groups);\r
92 \r
93         if ($total_students > 0) {\r
94                 // to uniformly distribute all the groups we place the remaining students\r
95                 // into the first n groups, where n is the number of remaining students.\r
96                 $remainder = $total_students % $num_groups;\r
97                 if ($remainder) {\r
98                         $num_students_per_group = floor($total_students / $num_groups);\r
99                 } else {\r
100                         $num_students_per_group = $total_students / $num_groups;\r
101                 }\r
102 \r
103                 $sql = '';\r
104                 foreach($tmp_groups as $group_id => $garbage) {\r
105 \r
106                         if (!isset($groups_counts[$group_id])) {\r
107                                 $groups_counts[$group_id] = 0;\r
108                         }\r
109                         while (($groups_counts[$group_id] < $num_students_per_group) && ($mid = current($students))) {\r
110                                 $sql .= "($group_id, $mid),";\r
111                                 $groups_counts[$group_id]++;\r
112                                 next($students);\r
113                         }\r
114 \r
115                         if ($remainder) {\r
116                                 $mid = current($students);\r
117                                 if ($mid) {\r
118                                         $sql .= "($group_id, $mid),";\r
119                                         $remainder--;\r
120                                         next($students);\r
121                                         $groups_counts[$group_id]++;\r
122                                 }\r
123                         }\r
124                 }\r
125                 if ($sql) {\r
126                         $sql = substr($sql, 0, -1);\r
127                         $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES " . $sql;\r
128                         mysql_query($sql, $db);\r
129                 }\r
130         }\r
131 \r
132         $msg->addFeedback('GROUP_MEMBERS_SAVED');\r
133         header('Location: index.php');\r
134         exit;\r
135 }\r
136 \r
137 require(AT_INCLUDE_PATH.'header.inc.php');\r
138 \r
139 \r
140 echo '<h2>'.AT_print($type_row['title'], 'groups.title').'</h2>';\r
141 \r
142 \r
143 if (isset($_GET['gid'])) {\r
144         $_GET['gid'] = abs($_GET['gid']);\r
145 } else {\r
146         $_GET['gid'] = 0;\r
147 }\r
148 \r
149 $groups_members = array();\r
150 $sql = "SELECT member_id, group_id FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys) ORDER BY member_id";\r
151 $result = mysql_query($sql, $db);\r
152 while ($row = mysql_fetch_assoc($result)) {\r
153         $groups_members[$row['member_id']] = $row['group_id'];\r
154 }\r
155 $groups_members_keys = array_keys($groups_members);\r
156 $groups_members_keys = implode($groups_members_keys, ',');\r
157 \r
158 $owner = $system_courses[$_SESSION['course_id']]['member_id'];\r
159 \r
160 $sql = "SELECT M.member_id, M.login, M.first_name, M.last_name FROM ".TABLE_PREFIX."members M INNER JOIN ".TABLE_PREFIX."course_enrollment E USING (member_id) WHERE E.course_id=$_SESSION[course_id] AND E.privileges&".AT_PRIV_GROUPS."=0 AND E.approved='y' AND E.member_id<>$owner ORDER BY M.login";\r
161 $result = mysql_query($sql, $db);\r
162 \r
163 $count = 0;\r
164 ?>\r
165 <form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">\r
166 <input type="hidden" name="id" value="<?php echo $id; ?>" />\r
167 <table class="data static" style="width: 60%" rules="rows">\r
168 <thead>\r
169         <tr>\r
170                 <th><?php echo _AT('login');      ?></th>\r
171                 <th><?php echo _AT('first_name'); ?></th>\r
172                 <th><?php echo _AT('last_name');  ?></th>\r
173                 <th><?php echo _AT('groups');     ?></th>\r
174         </tr>\r
175 </thead>\r
176 <tfoot>\r
177         <tr>\r
178                 <td colspan="4">\r
179                         <input type="submit" name="submit" value="<?php echo _AT('save'); ?>" />\r
180                         <input type="submit" name="assign" value="<?php echo _AT('assign_unassigned'); ?>" />\r
181                         <input type="submit" name="cancel" value="<?php echo _AT('cancel'); ?>" />\r
182                 </td>\r
183         </tr>\r
184 </tfoot>\r
185 <tbody>\r
186         <?php while ($row = mysql_fetch_assoc($result)): ?>\r
187                 <tr <?php if ($_GET['gid'] && $_GET['gid'] == $groups_members[$row['member_id']]) { echo 'style="background-color: #dfd; font-weight: bold;"';} ?> id="r<?php echo ++$count; ?>">\r
188                         <td><label for="m<?php echo $row['member_id']; ?>"><?php echo $row['login']; ?></label></td>\r
189                         <td><label for="m<?php echo $row['member_id']; ?>"><?php echo $row['first_name']; ?></label></td>\r
190                         <td><label for="m<?php echo $row['member_id']; ?>"><?php echo $row['last_name']; ?></label></td>\r
191                         <td>\r
192                                 <select name="groups[<?php echo $row['member_id']; ?>]" id="m<?php echo $row['member_id']; ?>" onchange="javascript:hirow(this, <?php echo $count; ?>);">\r
193                                         <option value="0"></option>\r
194                                         <?php foreach ($tmp_groups as $group => $title): ?>\r
195                                                 <option value="<?php echo $group; ?>" <?php if ($groups_members[$row['member_id']] == $group) { echo 'selected="selected"'; } ?>><?php echo AT_print($title, 'groups.title'); ?></option>\r
196                                         <?php endforeach; ?>\r
197                                 </select>\r
198                         </td>\r
199                 </tr>\r
200         <?php endwhile; ?>\r
201 </tbody>\r
202 </table>\r
203 </form>\r
204 \r
205 <script type="text/javascript" language="javascript">\r
206 // <!--\r
207 function hirow(obj, row) {\r
208         if (obj.value && obj.value == <?php echo $_GET['gid']; ?>) {\r
209                 e = document.getElementById("r" + row);\r
210                 e.style.backgroundColor = "#dfd";\r
211                 e.style.fontWeight = "bold";\r
212         } else {\r
213                 e = document.getElementById("r" + row);\r
214                 e.style.backgroundColor = "";\r
215                 e.style.fontWeight = "";\r
216         }\r
217 }\r
218 // -->\r
219 </script>\r
220 \r
221 <?php require(AT_INCLUDE_PATH.'footer.inc.php'); ?>