move code up one directory
[atutor.git] / mods / _core / groups / create_automatic.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 \r
15 define('AT_INCLUDE_PATH', '../../../include/');\r
16 require(AT_INCLUDE_PATH.'vitals.inc.php');\r
17 authenticate(AT_PRIV_GROUPS);\r
18 \r
19 if (isset($_POST['cancel'])) {\r
20         $msg->addFeedback('CANCELLED');\r
21         header('Location: index.php');\r
22         exit;\r
23 } else if (isset($_POST['submit'])) {\r
24         $modules = '';\r
25         if (isset($_POST['modules'])) {\r
26                 $modules = implode('|', $_POST['modules']);\r
27         }\r
28 \r
29         $_POST['type_title']   = trim($_POST['type_title']);\r
30         $_POST['num_students'] = abs($_POST['num_students']);\r
31         $_POST['num_groups']   = abs($_POST['num_groups']);\r
32         $_POST['num_g']        = intval($_POST['num_g']);\r
33 \r
34         $missing_fields = array();\r
35 \r
36         if (!$_POST['type_title']) {\r
37                 $missing_fields[] = _AT('groups_type');\r
38         }\r
39 \r
40         if (!$_POST['prefix']) {\r
41                 $missing_fields[] = _AT('group_prefix');\r
42         }\r
43 \r
44         $course_owner = $system_courses[$_SESSION['course_id']]['member_id'];\r
45         if (isset($_POST['fill'])) {\r
46                 $sql = "SELECT member_id FROM ".TABLE_PREFIX."course_enrollment WHERE course_id=$_SESSION[course_id] AND approved='y' AND `privileges`&".AT_PRIV_GROUPS."=0 AND member_id<>$course_owner";\r
47                 $result = mysql_query($sql, $db);\r
48                 $total_students = mysql_num_rows($result);\r
49                 $students = array();\r
50                 while ($row = mysql_fetch_assoc($result)) {\r
51                         $students[] = $row['member_id'];\r
52                 }\r
53                 shuffle($students);\r
54         } else {\r
55                 $sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."course_enrollment WHERE course_id=$_SESSION[course_id] AND approved='y' AND `privileges`&".AT_PRIV_GROUPS."=0 AND member_id<>$course_owner";\r
56                 $result = mysql_query($sql, $db);\r
57                 $row = mysql_fetch_assoc($result);\r
58 \r
59                 $total_students = $row['cnt']; // 4 students in the course\r
60         }\r
61 \r
62         if ($_POST['num_g'] == 1) { // number of students per group\r
63                 $num_students_per_group = $_POST['num_students'];\r
64 \r
65                 if ($num_students_per_group == 0) {\r
66                         $missing_fields[] = _AT('number_of_students_per_group');\r
67                 } else {\r
68                         if ($total_students == 0) {\r
69                                 $msg->addError('GROUP_NO_STUDENTS');\r
70                         } else {\r
71                                 $num_groups = ceil($total_students / $num_students_per_group);\r
72                         }\r
73                 }\r
74         } else { // number of groups\r
75                 $num_groups = $_POST['num_groups'];\r
76 \r
77                 if ($num_groups == 0) {\r
78                         $missing_fields[] = _AT('number_of_groups');\r
79                 } else {\r
80                         if ($total_students > 0) {\r
81                                 // to uniformly distribute all the groups we place the remaining students\r
82                                 // into the first n groups, where n is the number of remaining students.\r
83                                 $remainder = $total_students % $num_groups;\r
84                                 if ($remainder) {\r
85                                         $num_students_per_group = floor($total_students / $num_groups);\r
86                                 } else {\r
87                                         $num_students_per_group = $total_students / $num_groups;\r
88                                 }\r
89                         } else {\r
90                                 $num_students_per_group = 0;\r
91                         }\r
92                 }\r
93         }\r
94 \r
95         if ($missing_fields) {\r
96                 $missing_fields = implode(', ', $missing_fields);\r
97                 $msg->addError(array('EMPTY_FIELDS', $missing_fields));\r
98         }\r
99 \r
100         if (!$msg->containsErrors()) {\r
101                 $_POST['type_title']  = $addslashes($_POST['type_title']);\r
102                 $_POST['prefix']      = $addslashes($_POST['prefix']);\r
103                 $_POST['description'] = $addslashes($_POST['description']);\r
104 \r
105                 $sql = "INSERT INTO ".TABLE_PREFIX."groups_types VALUES (NULL, $_SESSION[course_id], '$_POST[type_title]')";\r
106                 $result = mysql_query($sql, $db);\r
107                 $group_type_id = mysql_insert_id($db);\r
108 \r
109                 $start_index = 0;\r
110 \r
111                 for($i=0; $i<$num_groups; $i++) {\r
112                         $group_title = $_POST['prefix'] . ' ' . ($i + 1);\r
113                         $sql = "INSERT INTO ".TABLE_PREFIX."groups VALUES (NULL, $group_type_id, '$group_title', '$_POST[description]', '$modules')";\r
114                         $result = mysql_query($sql, $db);\r
115 \r
116                         $group_id = mysql_insert_id($db);\r
117                         $_SESSION['groups'][$group_id] = $group_id;\r
118 \r
119                         // call module init scripts:\r
120                         if (isset($_POST['modules'])) {\r
121                                 foreach ($_POST['modules'] as $mod) {\r
122                                         $module =& $moduleFactory->getModule($mod);\r
123                                         $module->createGroup($group_id);\r
124                                 }\r
125                         }\r
126 \r
127                         if (isset($_POST['fill'])) {\r
128                                 // put students in this group\r
129                                 for ($j = $start_index; $j < min(($start_index + $num_students_per_group), $total_students); $j++) {\r
130                                         $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES ($group_id, $students[$j])";\r
131                                         mysql_query($sql, $db);\r
132                                 }\r
133 \r
134                                 $start_index = $j;\r
135                                 if ($remainder) {\r
136                                         $sql = "INSERT INTO ".TABLE_PREFIX."groups_members VALUES ($group_id, $students[$start_index])";\r
137                                         mysql_query($sql, $db);\r
138                                         $start_index++;\r
139                                         $remainder--;\r
140                                 }\r
141                         }\r
142                 }\r
143 \r
144                 $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');\r
145 \r
146                 header('Location: index.php');\r
147                 exit;\r
148         } else {\r
149                 $_POST['type_title']  = $stripslashes($_POST['type_title']);\r
150                 $_POST['prefix']      = $stripslashes($_POST['prefix']);\r
151                 $_POST['description'] = $stripslashes($_POST['description']);\r
152         }\r
153 }\r
154 \r
155 require(AT_INCLUDE_PATH.'header.inc.php');\r
156 $sql = "SELECT COUNT(*) AS cnt FROM ".TABLE_PREFIX."course_enrollment WHERE course_id=$_SESSION[course_id] AND approved='y' AND `privileges`&".AT_PRIV_GROUPS."=0";\r
157 $result = mysql_query($sql, $db);\r
158 $row = mysql_fetch_assoc($result);\r
159 ?>\r
160 \r
161 \r
162 <script type="text/javascript">\r
163 // <!--\r
164 document.form.num_groups.disabled = true;\r
165 function changer(name1, name2) {\r
166         document.form[name1].value= '-';\r
167         document.form[name1].disabled = true;\r
168         document.form[name2].disabled = false;\r
169 \r
170         document.form[name2].value= '';\r
171         document.form[name2].focus();\r
172 }\r
173 // -->\r
174 </script>\r
175 <?php \r
176 $savant->assign('row', $row);\r
177 $savant->display('instructor/groups/create_automatic.tmpl.php');\r
178 require(AT_INCLUDE_PATH.'footer.inc.php'); ?>