2 /************************************************************************/
\r
4 /************************************************************************/
\r
5 /* Copyright (c) 2002-2010 */
\r
6 /* Inclusive Design Institute */
\r
7 /* http://atutor.ca */
\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
14 define('AT_INCLUDE_PATH', '../../../include/');
\r
15 require(AT_INCLUDE_PATH.'vitals.inc.php');
\r
16 authenticate(AT_PRIV_GROUPS);
\r
19 $id = intval($_REQUEST['id']);
\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
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
36 $groups_keys = array_keys($tmp_groups);
\r
37 $groups_keys = implode($groups_keys, ',');
\r
39 if (isset($_POST['cancel'])) {
\r
40 $msg->addFeedback('CANCELLED');
\r
41 header('Location: index.php');
\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
48 foreach ($_POST['groups'] as $mid => $gid) {
\r
52 $sql .= "($gid, $mid),";
\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
61 $msg->addFeedback('GROUP_MEMBERS_SAVED');
\r
63 header('Location: index.php');
\r
65 } else if (isset($_POST['assign'])) {
\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
73 $total_assigned = array_sum($groups_counts);
\r
75 if (is_array($_POST['groups'])) {
\r
76 foreach ($_POST['groups'] as $mid => $gid) {
\r
78 unset($_POST['groups'][$mid]);
\r
81 $students = array_keys($_POST['groups']);
\r
83 $total_unassigned = count($students);
\r
89 $total_students = $total_unassigned + $total_assigned;
\r
91 $num_groups = count($tmp_groups);
\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
98 $num_students_per_group = floor($total_students / $num_groups);
\r
100 $num_students_per_group = $total_students / $num_groups;
\r
104 foreach($tmp_groups as $group_id => $garbage) {
\r
106 if (!isset($groups_counts[$group_id])) {
\r
107 $groups_counts[$group_id] = 0;
\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
116 $mid = current($students);
\r
118 $sql .= "($group_id, $mid),";
\r
121 $groups_counts[$group_id]++;
\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
132 $msg->addFeedback('GROUP_MEMBERS_SAVED');
\r
133 header('Location: index.php');
\r
137 require(AT_INCLUDE_PATH.'header.inc.php');
\r
140 echo '<h2>'.AT_print($type_row['title'], 'groups.title').'</h2>';
\r
143 if (isset($_GET['gid'])) {
\r
144 $_GET['gid'] = abs($_GET['gid']);
\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
155 $groups_members_keys = array_keys($groups_members);
\r
156 $groups_members_keys = implode($groups_members_keys, ',');
\r
158 $owner = $system_courses[$_SESSION['course_id']]['member_id'];
\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
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
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
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
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
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
205 <script type="text/javascript" language="javascript">
\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
213 e = document.getElementById("r" + row);
\r
214 e.style.backgroundColor = "";
\r
215 e.style.fontWeight = "";
\r
221 <?php require(AT_INCLUDE_PATH.'footer.inc.php'); ?>