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