2 /****************************************************************/
4 /****************************************************************/
5 /* Copyright (c) 2002-2010 */
6 /* Inclusive Design Institute */
9 /* This program is free software. You can redistribute it and/or*/
10 /* modify it under the terms of the GNU General Public License */
11 /* as published by the Free Software Foundation. */
12 /****************************************************************/
16 define('AT_INCLUDE_PATH', '../../../include/');
17 require(AT_INCLUDE_PATH.'vitals.inc.php');
18 authenticate(AT_PRIV_GRADEBOOK);
20 require_once("lib/gradebook.inc.php");
22 if (isset($_GET['cancel']))
24 $msg->addFeedback('CANCELLED');
25 header('Location: gradebook_tests.php');
28 else if (isset($_GET['save']))
30 foreach($_GET as $key => $value)
32 $value = $addslashes($value);
33 if (preg_match('/^grade_(.*)_(.*)$/', $key, $matches) > 0)
35 $matches[1] = intval($matches[1]);
36 $matches[2] = intval($matches[2]);
38 $sql = "SELECT grade_scale_id FROM ".TABLE_PREFIX."gradebook_tests WHERE gradebook_test_id = ". $matches[1];
39 $result = mysql_query($sql, $db) or die(mysql_error());
40 $row = mysql_fetch_assoc($result);
42 $sql = "REPLACE ".TABLE_PREFIX."gradebook_detail SET gradebook_test_id = ". $matches[1].", member_id=". $matches[2].", grade='".get_mark_by_grade($row["grade_scale_id"], $value)."'";
43 $result = mysql_query($sql, $db) or die(mysql_error());
48 $orders = array('asc' => 'desc', 'desc' => 'asc');
50 if (isset($_GET['asc']))
53 $order_col = $addslashes($_GET['asc']);
55 else if (isset($_GET['desc'])) {
57 $order_col = $addslashes($_GET['desc']);
64 if ($_GET['reset_filter']) {
68 // Initialize all applicable tests array and all enrolled students array
70 $all_students = array();
72 // generate test array
73 $sql = "(SELECT g.gradebook_test_id, g.id, g.type, t.title".
74 " FROM ".TABLE_PREFIX."gradebook_tests g, ".TABLE_PREFIX."tests t".
75 " WHERE g.type='ATutor Test'".
76 " AND g.id = t.test_id".
77 " AND t.course_id=".$_SESSION["course_id"]." ORDER BY title)".
78 " UNION (SELECT g.gradebook_test_id, g.id, g.type, a.title".
79 " FROM ".TABLE_PREFIX."gradebook_tests g, ".TABLE_PREFIX."assignments a".
80 " WHERE g.type='ATutor Assignment'".
81 " AND g.id = a.assignment_id".
82 " AND a.course_id=".$_SESSION["course_id"]." ORDER BY title)".
83 " UNION (SELECT gradebook_test_id, id, type, title".
84 " FROM ".TABLE_PREFIX."gradebook_tests".
85 " WHERE course_id=".$_SESSION["course_id"]." ORDER BY title)";
86 $result = mysql_query($sql, $db) or die(mysql_error());
88 while ($row = mysql_fetch_assoc($result))
92 if($row["type"]=="ATutor Test")
94 $studs_take_num = get_studs_take_more_than_once($_SESSION["course_id"], $row["id"]);
96 foreach ($studs_take_num as $member_id => $num)
98 if ($no_error) $no_error = false;
99 $error_msg .= get_display_name($member_id) . ": " . $num . " times<br>";
104 $f = array('ADD_TEST_INTO_GRADEBOOK',
107 $msg->addFeedback($f);
111 if ($no_error) array_push($all_tests, $row);
114 // generate students array
115 $sql_students = "SELECT m.first_name, m.last_name, e.member_id FROM ".TABLE_PREFIX."members m, ".TABLE_PREFIX."course_enrollment e WHERE m.member_id = e.member_id AND e.course_id=".$_SESSION["course_id"]." AND e.approved='y' AND e.role!='Instructor'";
116 if ($order_col == "name")
118 $sql_students .= " ORDER BY m.first_name ".$order.",m.last_name ".$order;
120 $result = mysql_query($sql_students, $db) or die(mysql_error());
122 while ($row = mysql_fetch_assoc($result))
123 array_push($all_students, $row);
124 // end of initialization
126 // Creates arrays for filtered test/student
127 $selected_tests = array();
128 //$csv_content .= $selected_students[$i]["first_name"]." " . $selected_students[$i]["last_name"];
130 $selected_students = array();
133 // generate test array
134 if (($_GET["filter"] || $_GET["download"]) && $_GET["gradebook_test_id"]<>0)
136 foreach ($all_tests as $test)
138 if ($test["gradebook_test_id"] == $_GET["gradebook_test_id"])
140 $selected_tests[0]["gradebook_test_id"] = $test["gradebook_test_id"];
141 $selected_tests[0]["title"] = $test["title"];
142 $selected_tests[0]["type"] = $test["type"];
147 $selected_tests = $all_tests;
149 // generate students array
150 if (($_GET["filter"] || $_GET["download"]) && $_GET["member_id"]<>0)
152 foreach ($all_students as $student)
154 if ($student["member_id"] == $_GET["member_id"])
156 $selected_students[0]["member_id"] = $student["member_id"];
157 $selected_students[0]["first_name"] = $student["first_name"];
158 $selected_students[0]["last_name"] = $student["last_name"];
161 $_GET["member_id"] = intval($_GET["member_id"]);
162 $sql_students = "SELECT first_name, last_name, member_id FROM ".TABLE_PREFIX."members WHERE member_id=" . $_GET["member_id"];
165 $selected_students = $all_students;
167 // generate grade 2-dimentional array
168 foreach ($selected_tests as $selected_test)
169 foreach($selected_students as $selected_student)
171 $sql = "SELECT grade FROM ".TABLE_PREFIX."gradebook_detail WHERE gradebook_test_id=".$selected_test["gradebook_test_id"]." AND member_id=".$selected_student["member_id"];
172 $result = mysql_query($sql, $db) or die(mysql_error());
173 $row = mysql_fetch_assoc($result);
175 $grades[$selected_test["gradebook_test_id"]][$selected_student["member_id"]] = $row["grade"];
179 if ((isset($_GET["asc"]) || isset($_GET["desc"])) && $order_col <> "name")
181 $sort = '$grades['.$order_col.'], SORT_'.strtoupper($order).', $selected_students, SORT_'.strtoupper($order);
183 foreach($selected_tests as $test)
185 if ($test["gradebook_test_id"] <> $order_col)
186 $sort .= ', $grades['.$test["gradebook_test_id"].'], SORT_'.strtoupper($order);
188 $sort='array_multisort('.$sort.');';
191 // end of initialization
193 $num_students = count($selected_students);
194 $results_per_page = 50;
195 $num_pages = max(ceil($num_students / $results_per_page), 1);
197 $page = intval($_GET['p']);
201 $count = (($page-1) * $results_per_page) + 1;
202 $offset = ($page-1)*$results_per_page;
204 // generate table & csv head
205 $table_head = "<thead>\n\r";
206 $table_head .= "<tr>\n\r";
208 if ($_GET[filter] <> "")
209 $query_str = '&filter='.$_GET[filter];
211 if ($_GET[member_id] <> "")
212 $query_str .= '&member_id='.$_GET[member_id];
214 if ($_GET[gradebook_test_id] <> "")
215 $query_str .= '&gradebook_test_id='.$_GET[gradebook_test_id];
217 $table_head .= " <th scope='col'><a href='". $_SERVER['PHP_SELF'] .'?'.$orders[$order].'=name'.$query_str."'>". _AT('name')."</a></th>\n\r";
219 $csv_content = _AT('name');
221 foreach ($selected_tests as $selected_test)
223 $table_head .= " <th scope='col'><a href='". $_SERVER['PHP_SELF'] ."?".$orders[$order]."=".$selected_test[gradebook_test_id].$query_str."'>". $selected_test[title]."</a></th>\n\r";
224 $csv_content .= ",".$selected_test[title];
226 $table_head .= " <th scope='col'></th>\n\r";
227 $table_head .= "</tr>\n\r";
229 $csv_content .= "\n";
231 $table_head .= "<tr>\n\r";
232 $table_head .= " <td></td>\n\r";
234 $has_edit_button = false;
235 foreach ($selected_tests as $selected_test)
237 if ($selected_test["type"] == "External" || $selected_test["type"] == "ATutor Assignment")
239 $has_edit_button = true;
240 $table_head .= " <td style='text-align:center'><a href='". $_SERVER['PHP_SELF']. '?edit=c_'.$selected_test['gradebook_test_id'].$query_str."'>". _AT("edit")."</a></td>\n\r";
244 $table_head .= " <td></td>\n\r";
247 if ($has_edit_button) $table_head .= " <td></td>";
248 $table_head .= "</tr>\n\r";
249 $table_head .= "</thead>\n\r";
251 // generate table & csv content
252 if ($num_students > 0)
254 $table_content = " <tbody>\n\r";
255 if ($offset + $results_per_page > $num_students) $end_pos = $num_students;
256 else $end_pos = $offset + $results_per_page;
261 for ($i=$offset; $i < $end_pos; $i++)
263 $table_content .= " <tr>\n\r";
264 $table_content .= " <td>".$selected_students[$i]["first_name"]." " . $selected_students[$i]["last_name"]."</td>\n\r";
266 $csv_content .= $selected_students[$i]["first_name"]." " . $selected_students[$i]["last_name"];
268 foreach ($selected_tests as $selected_test)
270 $sql = "SELECT grade FROM ".TABLE_PREFIX."gradebook_detail WHERE gradebook_test_id=".$selected_test["gradebook_test_id"]." AND member_id=".$selected_students[$i]["member_id"];
271 $result = mysql_query($sql, $db) or die(mysql_error());
272 $row = mysql_fetch_assoc($result);
274 $row["grade"] = htmlspecialchars($row["grade"]); // handle html special chars
276 if ($_GET["edit"]=="c_".$selected_test["gradebook_test_id"] || $_GET["edit"]=="r_".$selected_students[$i]["member_id"] && ($selected_test["type"]=="External" || $selected_test["type"]=="ATutor Assignment"))
278 $table_content .= " <td><input type='text' name='grade_".$selected_test["gradebook_test_id"]."_".$selected_students[$i]["member_id"]."' value=\"".$row["grade"]."\" tabindex='".$tabindex_input."' /></td>\n\r";
279 $csv_content .= ",".$row["grade"];
283 if ($row["grade"]=="")
285 $table_content .= " <td style='text-align:center'>"._AT("na")."</td>\n\r";
286 $csv_content .= ",". _AT("na");
290 $table_content .= " <td style='text-align:center'>".$row["grade"]."</td>\n\r";
291 $csv_content .= ",".$row["grade"];
296 if ($has_edit_button)
297 $table_content .= " <td style='text-align:center'><a href=\"". $_SERVER['PHP_SELF']. "?edit=r_".$selected_students[$i]['member_id'].$query_str."\" tabindex='".$tabindex_edit."'>". _AT("edit") ."</a></td>\n\r";
299 $table_content .= " </tr>\n\r";
300 $csv_content .= "\n";
303 $table_content .= " </tbody>\n\r";
307 if ($_GET['download'])
309 if ($num_students == 0)
311 require (AT_INCLUDE_PATH.'header.inc.php');
312 $msg->printErrors('ITEM_NOT_FOUND');
313 require (AT_INCLUDE_PATH.'footer.inc.php');
317 header('Content-Type: application/x-excel');
318 header('Content-Disposition: inline; filename="grades.csv"');
319 header('Expires: 0');
320 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
321 header('Pragma: public');
327 require(AT_INCLUDE_PATH.'header.inc.php');
329 $msg->printFeedbacks();
331 if (count($selected_tests)==0)
333 echo '<div class="toolcontainer">'._AT('empty_gradebook').'</div>';
334 require(AT_INCLUDE_PATH.'footer.inc.php');
338 <form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
339 <div class="input-form" id="jump-area">
341 <fieldset class="group_form"><legend class="group_form"><?php echo _AT('search'); ?></legend>
343 <label for="select_gid"><?php echo _AT("name") ?></label><br />
344 <select name="gradebook_test_id" id="select_gid">
345 <option value="0"><?php echo _AT('all') ?></option>
347 foreach($all_tests as $test)
349 echo ' <option value="'.$test[gradebook_test_id]. '"';
351 if ($test[gradebook_test_id]==$_GET["gradebook_test_id"])
353 echo '>'.$test["title"].'</option>'."\n\r";
360 <label for="select_mid"><?php echo _AT("students") ?></label><br />
361 <select name="member_id" id="select_mid">
362 <option value="0"><?php echo _AT('all') ?></option>
364 foreach($all_students as $student)
366 echo ' <option value="'.$student[member_id].'"';
367 if ($student[member_id]==$_GET["member_id"])
369 echo '>'.$student[first_name].' '.$student[last_name].'</option>'."\n\r";
375 <div class="row buttons">
376 <input type="submit" name="filter" value="<?php echo _AT('filter'); ?>" />
377 <input type="submit" name="reset_filter" value="<?php echo _AT('reset_filter'); ?>" />
378 <input type="submit" name="download" value="<?php echo _AT('download_test_csv'); ?>" />
385 <form name="form" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
386 <input type="hidden" name="filter" value="<?php echo AT_print($_GET[filter], 'input.hidden');?>" />
387 <input type="hidden" name="gradebook_test_id" value="<?php echo AT_print($_GET[gradebook_test_id], 'input.hidden'); ?>" />
388 <input type="hidden" name="member_id" value="<?php echo AT_print($_GET[member_id], 'input.hidden'); ?>" />
389 <input type="hidden" name="p" value="<?php echo $page; ?>" />
391 <?php print_paginator($page, $num_students, $sql_students, $results_per_page); ?>
393 <table summary="" class="data" rules="all">
400 <td colspan="<?php echo count($selected_tests)+2; ?>">
401 <div class="row buttons">
402 <input type="submit" name="save" value="<?php echo _AT('save'); ?>" />
409 if ($num_students == 0)
413 <td colspan="<?php echo count($selected_tests)+1; ?>"><?php echo _AT('none_found'); ?></td>
426 <?php require(AT_INCLUDE_PATH.'footer.inc.php'); ?>