2 /************************************************************************/
\r
4 /************************************************************************/
\r
5 /* Copyright (c) 2002-2006 by Greg Gay, Joel Kronenberg, */
\r
6 /* Heidi Hazelton, and Jonathan Hung */
\r
7 /* Adaptive Technology Resource Centre / University of Toronto */
\r
8 /* http://atutor.ca */
\r
10 /* This program is free software. You can redistribute it and/or */
\r
11 /* modify it under the terms of the GNU General Public License */
\r
12 /* as published by the Free Software Foundation. */
\r
13 /************************************************************************/
\r
15 define('AT_INCLUDE_PATH', '../../include/');
\r
16 require(AT_INCLUDE_PATH.'vitals.inc.php');
\r
17 authenticate(AT_PRIV_GROUPS);
\r
20 $id = intval($_REQUEST['id']);
\r
22 $sql = "SELECT * FROM ".TABLE_PREFIX."groups_types WHERE type_id=$id AND course_id=$_SESSION[course_id]";
\r
23 $result = mysql_query($sql,$db);
\r
24 if (!($type_row = mysql_fetch_assoc($result))) {
\r
25 require (AT_INCLUDE_PATH.'header.inc.php');
\r
26 $msg->printErrors('GROUP_TYPE_NOT_FOUND');
\r
27 require (AT_INCLUDE_PATH.'footer.inc.php');
\r
31 $tmp_groups = array();
\r
32 $sql = "SELECT group_id, title FROM ".TABLE_PREFIX."groups WHERE type_id=$id ORDER BY title";
\r
33 $result = mysql_query($sql, $db);
\r
34 while ($row = mysql_fetch_assoc($result)) {
\r
35 $tmp_groups[$row['group_id']] = $row['title'];
\r
37 $groups_keys = array_keys($tmp_groups);
\r
38 $groups_keys = implode($groups_keys, ',');
\r
40 if (isset($_POST['cancel'])) {
\r
41 $msg->addFeedback('CANCELLED');
\r
42 header('Location: index.php');
\r
44 } else if (isset($_POST['submit'])) {
\r
45 $sql = "DELETE FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys)";
\r
46 mysql_query($sql, $db);
\r
49 foreach ($_POST['groups'] as $mid => $gid) {
\r
53 $sql .= "($gid, $mid),";
\r
57 $sql = substr($sql, 0, -1);
\r
58 $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES $sql";
\r
59 mysql_query($sql, $db);
\r
62 $msg->addFeedback('GROUP_MEMBERS_SAVED');
\r
64 header('Location: index.php');
\r
66 } else if (isset($_POST['assign'])) {
\r
68 $groups_counts = array();
\r
69 $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
70 $result = mysql_query($sql, $db);
\r
71 while ($row = mysql_fetch_assoc($result)) {
\r
72 $groups_counts[$row['group_id']] = $row['cnt'];
\r
74 $total_assigned = array_sum($groups_counts);
\r
76 if (is_array($_POST['groups'])) {
\r
77 foreach ($_POST['groups'] as $mid => $gid) {
\r
79 unset($_POST['groups'][$mid]);
\r
82 $students = array_keys($_POST['groups']);
\r
84 $total_unassigned = count($students);
\r
90 $total_students = $total_unassigned + $total_assigned;
\r
92 $num_groups = count($tmp_groups);
\r
94 if ($total_students > 0) {
\r
95 // to uniformly distribute all the groups we place the remaining students
\r
96 // into the first n groups, where n is the number of remaining students.
\r
97 $remainder = $total_students % $num_groups;
\r
99 $num_students_per_group = floor($total_students / $num_groups);
\r
101 $num_students_per_group = $total_students / $num_groups;
\r
105 foreach($tmp_groups as $group_id => $garbage) {
\r
107 if (!isset($groups_counts[$group_id])) {
\r
108 $groups_counts[$group_id] = 0;
\r
110 while (($groups_counts[$group_id] < $num_students_per_group) && ($mid = current($students))) {
\r
111 $sql .= "($group_id, $mid),";
\r
112 $groups_counts[$group_id]++;
\r
117 $mid = current($students);
\r
119 $sql .= "($group_id, $mid),";
\r
122 $groups_counts[$group_id]++;
\r
127 $sql = substr($sql, 0, -1);
\r
128 $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES " . $sql;
\r
129 mysql_query($sql, $db);
\r
133 $msg->addFeedback('GROUP_MEMBERS_SAVED');
\r
134 header('Location: index.php');
\r
138 require(AT_INCLUDE_PATH.'header.inc.php');
\r
141 echo '<h2>'.$type_row['title'].'</h2>';
\r
144 if (isset($_GET['gid'])) {
\r
145 $_GET['gid'] = abs($_GET['gid']);
\r
150 $groups_members = array();
\r
151 $sql = "SELECT member_id, group_id FROM ".TABLE_PREFIX."groups_members WHERE group_id IN ($groups_keys) ORDER BY member_id";
\r
152 $result = mysql_query($sql, $db);
\r
153 while ($row = mysql_fetch_assoc($result)) {
\r
154 $groups_members[$row['member_id']] = $row['group_id'];
\r
156 $groups_members_keys = array_keys($groups_members);
\r
157 $groups_members_keys = implode($groups_members_keys, ',');
\r
159 $owner = $system_courses[$_SESSION['course_id']]['member_id'];
\r
161 $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
162 $result = mysql_query($sql, $db);
\r
166 <form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
\r
167 <input type="hidden" name="id" value="<?php echo $id; ?>" />
\r
168 <table class="data static" style="width: 60%" rules="rows">
\r
171 <th><?php echo _AT('login'); ?></th>
\r
172 <th><?php echo _AT('first_name'); ?></th>
\r
173 <th><?php echo _AT('last_name'); ?></th>
\r
174 <th><?php echo _AT('groups'); ?></th>
\r
180 <input type="submit" name="submit" value="<?php echo _AT('save'); ?>" />
\r
181 <input type="submit" name="assign" value="<?php echo _AT('assign_unassigned'); ?>" />
\r
182 <input type="submit" name="cancel" value="<?php echo _AT('cancel'); ?>" />
\r
187 <?php while ($row = mysql_fetch_assoc($result)): ?>
\r
188 <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
189 <td><label for="m<?php echo $row['member_id']; ?>"><?php echo $row['login']; ?></label></td>
\r
190 <td><label for="m<?php echo $row['member_id']; ?>"><?php echo $row['first_name']; ?></label></td>
\r
191 <td><label for="m<?php echo $row['member_id']; ?>"><?php echo $row['last_name']; ?></label></td>
\r
193 <select name="groups[<?php echo $row['member_id']; ?>]" id="m<?php echo $row['member_id']; ?>" onchange="javascript:hirow(this, <?php echo $count; ?>);">
\r
194 <option value="0"></option>
\r
195 <?php foreach ($tmp_groups as $group => $title): ?>
\r
196 <option value="<?php echo $group; ?>" <?php if ($groups_members[$row['member_id']] == $group) { echo 'selected="selected"'; } ?>><?php echo htmlspecialchars($title); ?></option>
\r
197 <?php endforeach; ?>
\r
206 <script type="text/javascript" language="javascript">
\r
208 function hirow(obj, row) {
\r
209 if (obj.value && obj.value == <?php echo $_GET['gid']; ?>) {
\r
210 e = document.getElementById("r" + row);
\r
211 e.style.backgroundColor = "#dfd";
\r
212 e.style.fontWeight = "bold";
\r
214 e = document.getElementById("r" + row);
\r
215 e.style.backgroundColor = "";
\r
216 e.style.fontWeight = "";
\r
222 <?php require(AT_INCLUDE_PATH.'footer.inc.php'); ?>