9792a4bbe2d01c340c639faa47f626f5a54b0cdd
[atutor.git] / docs / mods / _standard / gradebook / gradebook_add_tests.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 $page = 'gradebook';\r
16 \r
17 define('AT_INCLUDE_PATH', '../../../include/');\r
18 require_once(AT_INCLUDE_PATH.'vitals.inc.php');\r
19 authenticate(AT_PRIV_GRADEBOOK);\r
20 \r
21 require_once("lib/gradebook.inc.php");\r
22 \r
23 // Checks if the given test has students taken it more than once, if has, don't add\r
24 // print feedback, otherwise, add this test into gradebook.\r
25 function add_test($test_id, $title)\r
26 {\r
27         global $db, $msg;\r
28         \r
29         $no_error = true;\r
30         \r
31         $studs_take_num = get_studs_take_more_than_once($_SESSION["course_id"], $test_id);\r
32         \r
33         foreach ($studs_take_num as $member_id => $num)\r
34         {\r
35                 if ($no_error) $no_error = false;\r
36                 $error_msg .= get_display_name($member_id) . ": " . $num . " times<br>";\r
37         }\r
38         \r
39         if (!$no_error)\r
40         {\r
41                 $f = array('ADD_TEST_INTO_GRADEBOOK',\r
42                                                 $title, \r
43                                                 $error_msg);\r
44                 $msg->addFeedback($f);\r
45         }\r
46 \r
47         if ($no_error)  // add into gradebook\r
48         {\r
49             $_POST["selected_grade_scale_id"] = intval($_POST["selected_grade_scale_id"]);\r
50                 $sql_insert = "INSERT INTO ".TABLE_PREFIX."gradebook_tests (id, type, grade_scale_id)\r
51                                VALUES (". $test_id. ", 'ATutor Test', ".$_POST["selected_grade_scale_id"].")";\r
52                 $result_insert = mysql_query($sql_insert, $db) or die(mysql_error());\r
53         }\r
54 }\r
55 \r
56 function add_assignment($assignment_id)\r
57 {\r
58         global $db;\r
59         $_POST["selected_grade_scale_id"] = intval($_POST["selected_grade_scale_id"]);\r
60         \r
61         $sql_insert = "INSERT INTO ".TABLE_PREFIX."gradebook_tests (id, type, grade_scale_id)\r
62                        VALUES (". $assignment_id. ", 'ATutor Assignment', ".$_POST["selected_grade_scale_id"].")";\r
63         $result_insert = mysql_query($sql_insert, $db) or die(mysql_error());\r
64 }\r
65 \r
66 if (isset($_POST['cancel'])) \r
67 {\r
68         $msg->addFeedback('CANCELLED');\r
69         header('Location: gradebook_tests.php');\r
70         exit;\r
71\r
72 else if (isset($_POST['addATutorTest'])) \r
73 {\r
74         if (preg_match('/^at_(.*)$/', $_POST["id"], $matches) > 0) // add atutor test\r
75         {\r
76                 if ($matches[1] == 0) // add all applicable tests\r
77                 {\r
78                         $sql = "SELECT * FROM ".TABLE_PREFIX."tests t".\r
79                                                         " WHERE course_id=".$_SESSION["course_id"].\r
80                                                         " AND num_takes = 1".\r
81                                                         " AND NOT EXISTS (SELECT 1".\r
82                                                                                                                         " FROM ".TABLE_PREFIX."gradebook_tests g".\r
83                                                                                                                         " WHERE g.id = t.test_id".\r
84                                                                                                                         " AND g.type='ATutor Test')";\r
85                         $result = mysql_query($sql, $db) or die(mysql_error());\r
86                         \r
87                         while ($row = mysql_fetch_assoc($result))\r
88                         {\r
89                                 add_test($row["test_id"], $row["title"]);\r
90                         }\r
91                 }\r
92                 else // add one atutor test\r
93                 {\r
94                         $sql = "SELECT * FROM ".TABLE_PREFIX."tests t".\r
95                                                         " WHERE test_id=".$matches[1];\r
96                         $result = mysql_query($sql, $db) or die(mysql_error());\r
97                         $row = mysql_fetch_assoc($result);\r
98                         \r
99                         add_test($matches[1], $row["title"]);\r
100                 }\r
101         }\r
102         else if (preg_match('/^aa_(.*)$/', $_POST["id"], $matches) > 0) // add atutor test\r
103         {\r
104                 if ($matches[1] == 0) // add all applicable tests\r
105                 {\r
106                         $sql = "SELECT * FROM ".TABLE_PREFIX."assignments a".\r
107                                                         " WHERE course_id=".$_SESSION["course_id"].\r
108                                                         " AND NOT EXISTS (SELECT 1".\r
109                                                                                                                         " FROM ".TABLE_PREFIX."gradebook_tests g".\r
110                                                                                                                         " WHERE g.id = a.assignment_id".\r
111                                                                                                                         " AND g.type='ATutor Assignment')";\r
112                         $result = mysql_query($sql, $db) or die(mysql_error());\r
113                         \r
114                         while ($row = mysql_fetch_assoc($result))\r
115                         {\r
116                                 add_assignment($row["assignment_id"]);\r
117                         }\r
118                 }\r
119                 else // add one test_id\r
120                 {\r
121                         add_assignment($matches[1]);\r
122                 }\r
123         }\r
124 \r
125         $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');\r
126         header('Location: gradebook_tests.php');\r
127         exit;\r
128\r
129 else if (isset($_POST['addExternalTest'])) \r
130 {\r
131         $missing_fields = array();\r
132 \r
133         if ($_POST['title'] == '') {\r
134                 $missing_fields[] = _AT('title');\r
135         }\r
136 \r
137         if ($missing_fields) {\r
138                 $missing_fields = implode(', ', $missing_fields);\r
139                 $msg->addError(array('EMPTY_FIELDS', $missing_fields));\r
140         }\r
141 \r
142         if (!$msg->containsErrors()) \r
143         {\r
144             $_POST["year_due"] = intval($_POST["year_due"]);\r
145             $_POST["month_due"] = intval($_POST["month_due"]);\r
146             $_POST["day_due"] = intval($_POST["day_due"]);\r
147             $_POST["hour_due"] = intval($_POST["hour_due"]);\r
148             $_POST["min_due"] = intval($_POST["min_due"]);\r
149             $_POST["title"] = $addslashes($_POST["title"]);\r
150             $_POST["selected_grade_scale_id"] = intval($_POST["selected_grade_scale_id"]);\r
151             \r
152                 if ($_POST["has_due_date"] == 'true')\r
153                         $date_due = $_POST["year_due"]. '-' .str_pad ($_POST["month_due"], 2, "0", STR_PAD_LEFT). '-' .str_pad ($_POST["day_due"], 2, "0", STR_PAD_LEFT). ' '.str_pad ($_POST["hour_due"], 2, "0", STR_PAD_LEFT). ':' .str_pad ($_POST["min_due"], 2, "0", STR_PAD_LEFT) . ':00';\r
154 \r
155                 $sql_insert = "INSERT INTO ".TABLE_PREFIX."gradebook_tests (course_id, type, title, due_date, grade_scale_id)\r
156                                VALUES (".$_SESSION["course_id"].", 'External', '". $_POST["title"]. "', '".$date_due . "', ".$_POST["selected_grade_scale_id"].")";\r
157                 $result_insert = mysql_query($sql_insert, $db) or die(mysql_error());\r
158 \r
159                 $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY');\r
160                 header('Location: gradebook_tests.php');\r
161                 exit;\r
162         }\r
163 }\r
164 \r
165 $onload .= ' disable_dates (true, \'_due\');';\r
166 require(AT_INCLUDE_PATH.'header.inc.php');\r
167 \r
168 ?>\r
169 <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">\r
170 <div class="input-form">\r
171         <fieldset class="group_form"><legend class="group_form"><?php echo _AT('add_atutor_test'); ?></legend>\r
172 \r
173         <div class="row">\r
174                 <p><?php echo _AT('add_atutor_test_info'); ?></p>\r
175         </div>\r
176 \r
177 <?php\r
178 // list of atutor tests that can be added into gradebook. \r
179 // These tests can only be taken once and are not in gradebook yet\r
180 // note: surveys are excluded by checking if question weights are defined\r
181 $sql_at = "SELECT * FROM ".TABLE_PREFIX."tests t".\r
182                                 " WHERE course_id=".$_SESSION["course_id"].\r
183                                 " AND num_takes = 1".\r
184                                 " AND NOT EXISTS (SELECT 1".\r
185                                                                                                 " FROM ".TABLE_PREFIX."gradebook_tests g".\r
186                                                                                                 " WHERE g.id = t.test_id".\r
187                                                                                                 " AND g.type='ATutor Test')".\r
188                                 " AND test_id IN (SELECT test_id FROM ".TABLE_PREFIX."tests_questions_assoc ".\r
189                                                                 " GROUP BY test_id ".\r
190                                                                 " HAVING sum(weight) > 0) ".\r
191                                 " ORDER BY title";\r
192 $result_at = mysql_query($sql_at, $db) or die(mysql_error());\r
193 \r
194 $sql_aa = "SELECT * FROM ".TABLE_PREFIX."assignments a".\r
195                                 " WHERE course_id=".$_SESSION["course_id"].\r
196                                 " AND NOT EXISTS (SELECT 1".\r
197                                                                                                 " FROM ".TABLE_PREFIX."gradebook_tests g".\r
198                                                                                                 " WHERE g.id = a.assignment_id".\r
199                                                                                                 " AND g.type='ATutor Assignment')".\r
200                                 " ORDER BY title";\r
201 $result_aa = mysql_query($sql_aa, $db) or die(mysql_error());\r
202 \r
203 if (mysql_num_rows($result_at) == 0 && mysql_num_rows($result_aa) == 0)\r
204 {\r
205          echo _AT('none_found');\r
206 }\r
207 else\r
208 {\r
209         echo '  <div class="row">'."\n\r";\r
210         echo '          <label for="select_tid">'. _AT("title") .'</label><br />'."\n\r";\r
211         echo '          <select name="id" id="select_tid">'."\n\r";\r
212         \r
213         if (mysql_num_rows($result_aa) > 0)\r
214         {\r
215                 echo '                  <optgroup label="'. _AT('assignments') .'">'."\n\r";\r
216                 echo '                          <option value="aa_0">'._AT('all_atutor_assignments').'</option>'."\n\r";\r
217         \r
218                 while ($row_aa = mysql_fetch_assoc($result_aa))\r
219                 {\r
220                         echo '                  <option value="aa_'.$row_aa[assignement_id].'">'.$row_aa[title].'</option>'."\n\r";\r
221                 }\r
222                 echo '                  </optgroup>'."\n\r";\r
223         }\r
224 \r
225         if (mysql_num_rows($result_at) > 0)\r
226         {\r
227                 echo '                  <optgroup label="'. _AT('tests') .'">'."\n\r";\r
228                 echo '                          <option value="at_0">'._AT('all_atutor_tests').'</option>'."\n\r";\r
229         \r
230                 while ($row_at = mysql_fetch_assoc($result_at))\r
231                 {\r
232                         echo '                  <option value="at_'.$row_at[test_id].'">'.$row_at[title].'</option>'."\n\r";\r
233                 }\r
234                 echo '                  </optgroup>'."\n\r";\r
235         }\r
236 \r
237         echo '          </select>'."\n\r";\r
238         echo '  </div>'."\n\r";\r
239 \r
240 ?>\r
241         <div class="row">\r
242                 <label for="selected_grade_scale_id"><?php echo _AT('grade_scale'); ?></label><br />\r
243                 <?php print_grade_scale_selectbox($_POST["selected_grade_scale_id"]); ?>\r
244         </div>\r
245 \r
246         <div class="row buttons">\r
247                 <input type="submit" name="addATutorTest" value="<?php echo _AT('add'); ?>" />\r
248                 <input type="submit" name="cancel" value="<?php echo _AT('cancel'); ?>" />\r
249         </div>\r
250 <?php\r
251 }\r
252 ?>\r
253         </fieldset>\r
254 \r
255 </div>\r
256 </form>\r
257 \r
258 <form method="post" name="form" action="<?php echo $_SERVER['PHP_SELF']; ?>">\r
259 <div class="input-form">\r
260         <fieldset class="group_form"><legend class="group_form"><?php echo _AT('add_external_test'); ?></legend>\r
261 \r
262         <div class="row">\r
263                 <span class="required" title="<?php echo _AT('required_field'); ?>">*</span><label for="title"><?php echo _AT('title'); ?></label><br />\r
264                 <input type="text" name="title" id="title" size="30" value="<?php echo AT_print($_POST['title'], 'input.title'); ?>" />\r
265         </div>\r
266 \r
267         <div class="row">\r
268                 <label for="selected_grade_scale_id1"><?php echo _AT('grade_scale'); ?></label><br />\r
269                 <?php print_grade_scale_selectbox($_POST["selected_grade_scale_id"], "selected_grade_scale_id1"); ?>\r
270         </div>\r
271 \r
272         <div class="row">\r
273                 <?php  echo _AT('due_date'); ?><br />\r
274                 <input type="radio" name="has_due_date" value="false" id="noduedate" checked="checked"\r
275                 onfocus="disable_dates (true, '_due');" />\r
276                 <label for="noduedate" title="<?php echo _AT('due_date'). ': '. _AT('none');  ?>"><?php echo _AT('none'); ?></label><br />\r
277 \r
278                 <input type="radio" name="has_due_date" value="true" id="hasduedate" onfocus="disable_dates (false, '_due');" />\r
279                 <label for="hasduedate"  title="<?php echo _AT('due_date') ?>"><?php  echo _AT('date'); ?></label>\r
280 \r
281                 <?php\r
282                 $today = getdate();\r
283                 $today_day              = $today['mday'];\r
284                 $today_mon      = $today['mon'];\r
285                 $today_year     = $today['year'];\r
286                 $today_hour     = '12';\r
287                 $today_min      = '0';\r
288         \r
289                 $name = '_due';\r
290                 require(AT_INCLUDE_PATH.'html/release_date.inc.php');\r
291                 ?>\r
292         </div>\r
293 \r
294         <div class="row buttons">\r
295                 <input type="submit" name="addExternalTest" value="<?php echo _AT('add'); ?>" />\r
296                 <input type="submit" name="cancel" value="<?php echo _AT('cancel'); ?>" />\r
297         </div>\r
298 \r
299         </fieldset>\r
300 \r
301 </div>\r
302 </form>\r
303 \r
304 <script language="javascript" type="text/javascript">\r
305 function disable_dates (state, name) {\r
306         document.form['day' + name].disabled=state;\r
307         document.form['month' + name].disabled=state;\r
308         document.form['year' + name].disabled=state;\r
309         document.form['hour' + name].disabled=state;\r
310         document.form['min' + name].disabled=state;\r
311 }\r
312 </script>\r
313 \r
314 <?php require (AT_INCLUDE_PATH.'footer.inc.php');  ?>\r