Index: lib.php =================================================================== --- lib.php (revision 170) +++ lib.php (revision 177) @@ -835,30 +835,60 @@ } // sorting functions for grades + function grade_sort_by_lastname($x,$y) { + return _grade_sort_by_names($x, $y, 'lastname asc, firstname asc'); +} + +function grade_sort_by_firstname($x,$y) +{ + + return _grade_sort_by_names($x, $y, 'firstname asc, lastname asc'); +} + +function _grade_sort_by_names($x, $y, $sort) +{ + global $CFG; //$grades_by_student["$student->userid"]['student_data']['firstname'] = $student->firstname; //$grades_by_student["$student->userid"]['student_data']['lastname'] = $student->lastname; + /* + rherbst - strnatcascmp does not work in the way as SQL "order by" works. So the output + is different from the Excel/ODS/Text-Export. if (strnatcasecmp($x['student_data']['lastname'],$y['student_data']['lastname']) == 0) { return strnatcasecmp($x['student_data']['firstname'],$y['student_data']['firstname']); } else { return strnatcasecmp($x['student_data']['lastname'],$y['student_data']['lastname']); } -} + */ + if ($x['student_data']['lastname'] == $y['student_data']['lastname'] + && $x['student_data']['firstname'] == $y['student_data']['firstname']) { + // no need to go to the database + return 0; + } -function grade_sort_by_firstname($x,$y) -{ - //$grades_by_student["$student->userid"]['student_data']['firstname'] = $student->firstname; - //$grades_by_student["$student->userid"]['student_data']['lastname'] = $student->lastname; - if (strnatcasecmp($x['student_data']['firstname'],$y['student_data']['firstname']) == 0) { - return strnatcasecmp($x['student_data']['lastname'],$y['student_data']['lastname']); + $sql = "SELECT distinct concat(u.firstname, ' ', u.lastname) as fullname, u.firstname, u.lastname FROM " . $CFG->prefix + . "user u WHERE " + . " (firstname = '" . $x['student_data']['firstname'] . "' AND lastname = '" . $x['student_data']['lastname'] ."')" + . " OR (firstname = '" . $y['student_data']['firstname'] . "' AND lastname = '" . $y['student_data']['lastname'] ."')" + . " ORDER BY $sort"; + $rows = get_records_sql($sql); + + if (count($rows) < 2) { + error(get_string("Not enough rows (" . count($rows) . ") records returned from db for sql: $sql;")); } + + $firstrow = array_shift($rows); + if ($firstrow->lastname == $x['student_data']['lastname'] && $firstrow->firstname == $x['student_data']['firstname']) { + return -1; + } else { - return strnatcasecmp($x['student_data']['firstname'],$y['student_data']['firstname']); + return 1; } }