[Aimmath-commit] moodle/mod/math_assignment view.php,1.11,1.12
Brought to you by:
gustav_delius,
npstrick
From: <ma...@us...> - 2003-09-22 19:54:41
|
Update of /cvsroot/aimmath/moodle/mod/math_assignment In directory sc8-pr-cvs1:/tmp/cvs-serv12121/mod/math_assignment Modified Files: view.php Log Message: Removed paging, implemented a first attempt at the UI for sorting. SQL completely reworked to work faster and nicer. Index: view.php =================================================================== RCS file: /cvsroot/aimmath/moodle/mod/math_assignment/view.php,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** view.php 22 Sep 2003 01:13:01 -0000 1.11 --- view.php 22 Sep 2003 19:54:35 -0000 1.12 *************** *** 11,17 **** optional_variable($q); // assignment ID optional_variable($download, ""); // to download data ! optional_variable($sort, "lastname ASC"); // column and direction to sort ! optional_variable($page, 1); // page to display ! optional_variable($pagerows, 100); // number of students to display per page if (! $site = get_site()) { --- 11,16 ---- optional_variable($q); // assignment ID optional_variable($download, ""); // to download data ! optional_variable($sort, "lastname"); // column to sort ! optional_variable($sortdir, "asc"); // direction to sort if (! $site = get_site()) { *************** *** 72,119 **** // verify that the sort string is correct ! $sort = explode(" ", $sort); ! if (count($sort) != 2) { ! $sort[0] = "lastname"; // not valid so use default instead ! $sort[1] = "ASC"; ! } ! $sortgrade = 0; ! if (strcasecmp($sort[0], "lastname") != 0) { // check for field name in most likely used order ! if (strcasecmp($sort[0], "firstname") != 0) { // to improve speed ! if (strcasecmp($sort[0], "totalgrade") != 0) ! $sort[0] = "lastname"; // not valid so use default instead ! else if (strcasecmp($sort[1], "desc") == 0) ! $sortgrade = -1; ! else ! $sortgrade = 1; } } ! if (strcasecmp($sort[1], "asc") != 0 && strcasecmp($sort[1], "desc") != 0) ! $sort[1] = "ASC"; // not valid so use default instead ! $sort = implode(" ", $sort); ! // check page is valid ! if ($page <= 0) ! $page = 1; ! if ($pagerows < 10) { // refuse to show less than 10 rows per page ! if ($pagerows > 0) ! $page = (int) (($page - 1) * $pagerows) / 10 + 1; ! else ! $page = 1; ! $pagerows = 10; } ! ! // Count all students (NOTE : MySQL 4 only but nice and fast) ! $numstudents = $db->Execute("SELECT count(*) FROM {$CFG->prefix}user u LEFT JOIN {$CFG->prefix}user_students s ON s.userid = u.id WHERE s.course = '$course->id' AND u.deleted = '0'"); ! if ($numstudents) ! $numstudents = (int) $numstudents->fields[0]; ! else ! $numstudents = 0; ! ! if (($page - 1) * $pagerows > $numstudents) ! $page = (int) ($numstudents + $pagerows - 1) / $pagerows; ! ! // Get a list of students for this page ! $page = ($page - 1) * $pagerows; ! if (!$students = get_course_students($course->id, $sortgrade ? "''" : "u.$sort" . ($pagerows ? " LIMIT $page, $pagerows" : ""))) { print_header("$course->shortname: $math_assignment->name", "$course->fullname", "$navigation <a href=\"index.php?id=$course->id\">$strmath_assignments</a> -> $math_assignment->name", --- 71,132 ---- // verify that the sort string is correct ! if (strcasecmp($sort, "lastname") != 0) { // check for field name in most likely used order ! if (strcasecmp($sort, "firstname") != 0) { // to improve speed ! if (strcasecmp($sort, "totalgrade") != 0) ! $sort = "lastname"; // not valid so use default instead } } ! if (strcasecmp($sortdir, "asc") != 0 && strcasecmp($sortdir, "desc") != 0) ! $sortdir = "asc"; // not valid so use default instead ! // Get a list of students for this course including grades ! switch(strtolower($CFG->dbtype)) { ! case 'mysql': ! if (strcasecmp($sort, "totalgrade") == 0) ! $sortsql = "totalgrade $sortdir"; ! else ! $sortsql = "u.$sort $sortdir"; ! $students = get_records_sql("SELECT s.userid, u.firstname, u.lastname, u.picture, g.papergrade, g.aimgrade, g.aimoverride, g.aimcomment, least(greatest(g.papergrade,0), $math_assignment->papergrade)+least(greatest(g.aimgrade,0), $math_assignment->aimgrade) AS totalgrade FROM {$CFG->prefix}user_students s LEFT JOIN {$CFG->prefix}user u ON s.course = '$course->id' AND u.id = s.userid LEFT JOIN {$CFG->prefix}math_assignment_grades g ON g.assignment = '$math_assignment->id' AND g.userid = s.userid WHERE u.deleted = '0' ORDER BY $sortsql"); ! break; ! default: ! // emulate ! $students = get_records_sql("SELECT userid,userid FROM {$CFG->prefix}user_students WHERE course = '$course->id'"); ! if ($students) { ! foreach ($students as $key => $student) { ! if ($user = get_record_sql("SELECT firstname, lastname, picture FROM {$CFG->prefix}user WHERE id = '$key' AND deleted = '0'")) { ! $students[$key]->firstname = $user->firstname; ! $students[$key]->lastname = $user->lastname; ! $students[$key]->picture = $user->picture; ! $grade = get_record_sql("SELECT papergrade, aimgrade, aimoverride, aimcomment FROM {$CFG->prefix}math_assignment_grades WHERE assignment = '$math_assignment->id' and userid = '$key'"); ! if ($grade) { ! $students[$key]->papergrade = $grade->papergrade; ! $students[$key]->aimgrade = $grade->aimgrade; ! $students[$key]->aimoverride = $grade->aimoverride ; ! $students[$key]->aimcomment = $grade->aimcomment; ! $students[$key]->totalgrade = math_assignment_total_grade($math_assignment, $grade); ! } ! else { ! $students[$key]->papergrade = -1; ! $students[$key]->aimgrade = -1; ! $students[$key]->aimoverride = 0 ; ! $students[$key]->aimcomment = ""; ! $students[$key]->totalgrade = 0; ! } ! } ! else { ! // assume it failed because deleted was not zero ! unset($students[$key]); ! } ! } ! // sort ! if (strcasecmp($sortdir, "desc") == 0) ! $mult = -1; ! else ! $mult = 1; ! uasort($students, create_function('$a, $b', 'return (($a->' . $sort . ' > $b->' . $sort . ') ? 1 : -1) * ' . $mult . ';')); ! } ! break; } ! if (!$students) { print_header("$course->shortname: $math_assignment->name", "$course->fullname", "$navigation <a href=\"index.php?id=$course->id\">$strmath_assignments</a> -> $math_assignment->name", *************** *** 123,142 **** exit; } - - // Get grades - foreach ($students as $student) { - if (!$grades[$student->id] = get_record("math_assignment_grades", "assignment", $math_assignment->id, "userid", $student->id)) { - $grades[$student->id]->quiz = $math_assignment->id; - $grades[$student->id]->userid = $student->id; - $grades[$student->id]->papergrade = -1; - $grades[$student->id]->aimgrade = -1; - $grades[$student->id]->aimoverride = 0; - $grades[$student->id]->aimcomment = ""; - } - } - - if ($sortgrade) { // we need to do the sorting ourselves - usort($students, create_function('$a,$b','global $math_assignment, $grades; return ((math_assignment_total_grade($math_assignment, $grades[$a->id]) < math_assignment_total_grade($math_assignment, $grades[$b->id])) ? -1 : 1) * ' . $sortgrade . ';')); - } } else if (isstudent($course->id)) { --- 136,139 ---- *************** *** 181,187 **** $i = 0; ! foreach ($grades as $studentid => $studentgrade) { $i++; - $student = $students[$studentid]; $myxls->ChangePos($i,0); --- 178,183 ---- $i = 0; ! foreach ($students as $student) { $i++; $myxls->ChangePos($i,0); *************** *** 189,202 **** $myxls->InsertText($student->lastname); if ($hasboth) { ! if ($studentgrade->papergrade >= 0) ! $myxls->InsertNumber($studentgrade->papergrade); else $myxls->InsertText(""); ! if ($studentgrade->aimgrade >= 0) ! $myxls->InsertNumber($studentgrade->aimgrade); else $myxls->InsertText(""); } ! $myxls->InsertNumber(math_assignment_total_grade($math_assignment, $studentgrade)); } --- 185,198 ---- $myxls->InsertText($student->lastname); if ($hasboth) { ! if ($student->papergrade >= 0) ! $myxls->InsertNumber($student->papergrade); else $myxls->InsertText(""); ! if ($student->aimgrade >= 0) ! $myxls->InsertNumber($student->aimgrade); else $myxls->InsertText(""); } ! $myxls->InsertNumber($student->totalgrade); } *************** *** 222,237 **** /// Print all the lines of data. ! foreach ($grades as $studentid => $studentgrade) { ! $student = $students[$studentid]; echo "$student->firstname\t$student->lastname\t"; if ($hasboth) { ! if ($studentgrade->papergrade >= 0) ! echo "$studentgrade->papergrade"; echo "\t"; ! if ($studentgrade->aimgrade >= 0) ! echo "$studentgrade->aimgrade"; echo "\t"; } ! echo math_assignment_total_grade($math_assignment, $studentgrade); echo "\n"; } --- 218,232 ---- /// Print all the lines of data. ! foreach ($students as $student) { echo "$student->firstname\t$student->lastname\t"; if ($hasboth) { ! if ($student->papergrade >= 0) ! echo "$student->papergrade"; echo "\t"; ! if ($student->aimgrade >= 0) ! echo "$student->aimgrade"; echo "\t"; } ! echo $student->totalgrade; echo "\n"; } *************** *** 264,278 **** /// Print all the lines of data. ! foreach ($grades as $studentid => $studentgrade) { ! $student = $students[$studentid]; echo "<tr><td height=\"40\">$student->firstname</td><td>$student->lastname</td>"; if ($hasboth) { echo "<td>"; ! if ($studentgrade->aimgrade >= 0) ! echo $studentgrade->aimgrade; else echo " "; echo "</td><td>"; ! if ($studentgrade->papergrade >= 0) ! echo $studentgrade->papergrade; else echo " "; echo "</td>"; --- 259,272 ---- /// Print all the lines of data. ! foreach ($students as $student) { echo "<tr><td height=\"40\">$student->firstname</td><td>$student->lastname</td>"; if ($hasboth) { echo "<td>"; ! if ($student->aimgrade >= 0) ! echo $student->aimgrade; else echo " "; echo "</td><td>"; ! if ($student->papergrade >= 0) ! echo $student->papergrade; else echo " "; echo "</td>"; *************** *** 280,285 **** else { echo "<td>"; ! if (math_assignment_total_grade($math_assignment, $studentgrade) >= 0) ! echo math_assignment_total_grade($math_assignment, $studentgrade); else echo " "; echo "</td>"; --- 274,279 ---- else { echo "<td>"; ! if ($student->totalgrade > 0) ! echo $student->totalgrade; else echo " "; echo "</td>"; *************** *** 358,364 **** echo math_assignment_get_admin_links($cm, $math_assignment, "right"); print_heading($strgrades); if ($hasboth) { echo "<p align=\"center\"><b>" . get_string("maximumgrade") . "</b>: $math_assignment->papergrade ($strpaper) + $math_assignment->aimgrade ($strcomputer) = $totalmax</p>"; ! $table->head = array ("", get_string("firstname"), get_string("lastname"), "$strpaper $strgrade", "$strcomputer $strgrade", "$strtotal $strgrade"); $table->width = array(35, "", "", "", "", ""); $table->align = array("LEFT", "RIGHT", "LEFT", "CENTER", "CENTER", "CENTER"); --- 352,360 ---- echo math_assignment_get_admin_links($cm, $math_assignment, "right"); print_heading($strgrades); + + // get sort strings if ($hasboth) { echo "<p align=\"center\"><b>" . get_string("maximumgrade") . "</b>: $math_assignment->papergrade ($strpaper) + $math_assignment->aimgrade ($strcomputer) = $totalmax</p>"; ! $table->head = array ("", get_sortable_header($cm->id, "firstname", $sort, $sortdir), get_sortable_header($cm->id, "lastname", $sort, $sortdir), "$strpaper $strgrade", "$strcomputer $strgrade", get_sortable_header($cm->id, "totalgrade", $sort, $sortdir, "$strtotal $strgrade")); $table->width = array(35, "", "", "", "", ""); $table->align = array("LEFT", "RIGHT", "LEFT", "CENTER", "CENTER", "CENTER"); *************** *** 366,370 **** else { echo "<p align=\"center\"><b>" . get_string("maximumgrade") . "</b>: $totalmax</p>"; ! $table->head = array ("", get_string("firstname"), get_string("lastname"), "$strgrade"); $table->width = array(35, "", "", ""); $table->align = array("LEFT", "RIGHT", "LEFT", "CENTER"); --- 362,366 ---- else { echo "<p align=\"center\"><b>" . get_string("maximumgrade") . "</b>: $totalmax</p>"; ! $table->head = array ("", get_sortable_header($cm->id, "firstname", $sort, $sortdir), get_sortable_header($cm->id, "lastname", $sort, $sortdir), "$strgrade"); $table->width = array(35, "", "", ""); $table->align = array("LEFT", "RIGHT", "LEFT", "CENTER"); *************** *** 377,397 **** $i = 1; foreach ($students as $student) { ! $studentgrade = $grades[$student->id]; ! $picture = print_user_picture($student->id, $course->id, $student->picture, false, true); ! if ($studentgrade->papergrade >= 0) ! $papergrade = $studentgrade->papergrade; else $papergrade = ""; ! $papergrade = "<input type=\"text\" name=\"$student->id\" size=\"10\" maxlength=\"10\" value=\"$papergrade\" tabindex=\"$i\" />"; ! if ($studentgrade->aimgrade >= 0) ! $aimgrade = $studentgrade->aimgrade; else $aimgrade = ""; ! if ($studentgrade->aimoverride) { $edited = "$stredited ("; $editedclose = ")"; } ! else if ($studentgrade->aimcomment) { $edited = "$strcommented ("; $editedclose = ")"; --- 373,392 ---- $i = 1; foreach ($students as $student) { ! $picture = print_user_picture($student->userid, $course->id, $student->picture, false, true); ! if ($student->papergrade >= 0) ! $papergrade = $student->papergrade; else $papergrade = ""; ! $papergrade = "<input type=\"text\" name=\"$student->userid\" size=\"10\" maxlength=\"10\" value=\"$papergrade\" tabindex=\"$i\" />"; ! if ($student->aimgrade >= 0) ! $aimgrade = $student->aimgrade; else $aimgrade = ""; ! if ($student->aimoverride) { $edited = "$stredited ("; $editedclose = ")"; } ! else if ($student->aimcomment) { $edited = "$strcommented ("; $editedclose = ")"; *************** *** 404,430 **** if ($hasboth) $table->data[] = array($picture, $student->firstname, $student->lastname, $papergrade, ! "$aimgrade $edited<a href=\"editgrade.php?id=$math_assignment->id&userid=$student->id\">$stredit</a>$editedclose", math_assignment_total_grade($math_assignment, $studentgrade)); else if ($haspaper) $table->data[] = array($picture, $student->firstname, $student->lastname, $papergrade); else if ($hasaim) $table->data[] = array($picture, $student->firstname, $student->lastname, ! "$aimgrade $edited<a href=\"editgrade.php?id=$math_assignment->id&userid=$student->id\">$stredit</a>$editedclose"); $i++; } ! // print paging controls ! print_paging_form ("top", $cm->id, $sort, $numstudents, $page, $pagerows); ! ! echo "<form action=\"updatepapergrades.php?id=$math_assignment->id\" method=\"post\" name=\"papergradeform\">"; print_table($table); ! echo "<table border=\"0\" align=\"center\"><tr><td>"; ! echo "<input type=\"submit\" value=\"" . get_string("savechanges") . "\" />"; ! echo "</td><td>"; ! echo "<input type=\"reset\" value=\"" . get_string("reset", "math_assignment") . "\" />"; ! echo "</td><td>"; ! helpbutton ("editpapergrades", "$strpaper $strgrades", "math_assignment"); ! echo "</td></tr></table></form>"; echo "<table border=\"0\" align=\"center\"><tr><td>"; $options["q"] = $math_assignment->id; --- 399,425 ---- if ($hasboth) $table->data[] = array($picture, $student->firstname, $student->lastname, $papergrade, ! "$aimgrade $edited<a href=\"editgrade.php?id=$math_assignment->id&userid=$student->userid\">$stredit</a>$editedclose", $student->totalgrade); else if ($haspaper) $table->data[] = array($picture, $student->firstname, $student->lastname, $papergrade); else if ($hasaim) $table->data[] = array($picture, $student->firstname, $student->lastname, ! "$aimgrade $edited<a href=\"editgrade.php?id=$math_assignment->id&userid=$student->userid\">$stredit</a>$editedclose"); $i++; } ! if ($haspaper) ! echo "<form action=\"updatepapergrades.php?id=$math_assignment->id\" method=\"post\" name=\"papergradeform\">"; print_table($table); ! if ($haspaper) { ! echo "<table border=\"0\" align=\"center\"><tr><td>"; ! echo "<input type=\"submit\" value=\"" . get_string("savechanges") . "\" />"; ! echo "</td><td>"; ! echo "<input type=\"reset\" value=\"" . get_string("reset", "math_assignment") . "\" />"; ! echo "</td><td>"; ! helpbutton ("editpapergrades", "$strpaper $strgrades", "math_assignment"); ! echo "</td></tr></table></form>"; ! } echo "<table border=\"0\" align=\"center\"><tr><td>"; $options["q"] = $math_assignment->id; *************** *** 445,451 **** echo "</td></tr></table>"; - // print paging controls - print_paging_form ("bottom", $cm->id, $sort, $numstudents, $page, $pagerows); - if ($adminlinks = math_assignment_get_admin_links($cm, $math_assignment, "center")) { print_heading(get_string("administration")); --- 440,443 ---- *************** *** 468,492 **** } ! function print_paging_form($name, $id, $sort, $count, $page, $pagerows) { ! if ($count > $pagerows) { ! echo "<form action=\"view.php?id=$id\" method=\"post\" name=\"page$name\">\n"; ! echo "<input type=\"hidden\" name=\"sort\" value=\"$sort\" />\n"; ! $moreinfo->start = $page + 1; ! $moreinfo->end = min($page + $pagerows, $count); ! $moreinfo->total = $count; ! echo "<p align=\"center\">" . get_string("displayingrows", "math_assignment", $moreinfo) . "</p>\n"; ! echo "<p align=\"center\">" . get_string("page") . " :"; ! $pages = ($count + $pagerows - 1) / $pagerows; ! $page++; ! for ($i = 1; $i <= $pages; $i++) { ! if ($i == $page) ! echo " <b>$i</b>"; ! else ! echo " <input type=\"submit\" name=\"page\" value=\"$i\" />"; ! } ! echo "</p>\n"; ! echo "<input type=\"hidden\" name=\"pagerows\" value=\"$pagerows\" />\n"; ! echo "</form>\n"; } } ?> --- 460,476 ---- } ! function get_sortable_header($id, $field, $sort, $sortdir, $title="") { ! if (strcasecmp($sort, $field) == 0) { ! $dir = strcasecmp($sortdir, "desc") == 0 ? "asc" : "desc"; ! $img = ""; // ## need to generate image tag here ## } + else { + $dir = "asc"; + $img = ""; + } + if (!$title) + $title = get_string($field); + return "<a href=\"view.php?id=$id&sort=$field&sortdir=$dir\">$title</a>$img"; } + ?> |