var $users_rs;
var $grades_rs;
var $gradestack;
+ var $sortfield1;
+ var $sortorder1;
+ var $sortfield2;
+ var $sortorder2;
/**
* Constructor
- * @param $coruse object
+ * @param $course object
* @param array grade_items array of grade items, if not specified only user info returned
* @param int $groupid iterate only group users if present
+ * @param string $sortfield1 The first field of the users table by which the array of users will be sorted
+ * @param string $sortorder1 The order in which the first sorting field will be sorted (ASC or DESC)
+ * @param string $sortfield2 The second field of the users table by which the array of users will be sorted
+ * @param string $sortorder2 The order in which the second sorting field will be sorted (ASC or DESC)
*/
- function graded_users_iterator($course, $grade_items=null, $groupid=0) {
+ function graded_users_iterator($course, $grade_items=null, $groupid=0, $sortfield1='lastname', $sortorder1='ASC', $sortfield2='firstname', $sortorder2='ASC') {
$this->course = $course;
$this->grade_items = $grade_items;
$this->groupid = $groupid;
+ $this->sortfield1 = $sortfield1;
+ $this->sortorder1 = $sortorder1;
+ $this->sortfield2 = $sortfield2;
+ $this->sortorder2 = $sortorder2;
$this->gradestack = array();
}
$groupsql
WHERE ra.roleid $gradebookroles
AND ra.contextid $relatedcontexts
- $groupwheresql
- ORDER BY u.id ASC";
+ $groupwheresql";
+
+ // If only sortfield2 is given, it will be ignored
+ if (!empty($this->sortfield1)) {
+ $users_sql .= "ORDER BY u.$this->sortfield1 $this->sortorder1";
+ if (!empty($this->sortfield2)) {
+ $users_sql .= ", $this->sortfield2 $this->sortorder2";
+ }
+ }
+
$this->users_rs = get_recordset_sql($users_sql);
if (!empty($this->grade_items)) {
ORDER BY g.userid ASC, g.itemid ASC";
$this->grades_rs = get_recordset_sql($grades_sql);
}
-
return true;
}
+ /**
+ * Returns the number of graded users in the course. Needs to be called after init(), otherwise returns null.
+ * @return int Number of users in course
+ */
+ function users_count() {
+ if (method_exists($this->users_rs, 'RecordCount')) {
+ return $this->users_rs->RecordCount();
+ } else {
+ return null;
+ }
+ }
+
/**
* Returns information about the next user
* @return mixed array of user info, all grades and feedback or null when no more users found
$grades = array();
$feedbacks = array();
+ if (!empty($this->grade_items)) {
foreach ($this->grade_items as $grade_item) {
if (array_key_exists($grade_item->id, $grade_records)) {
$feedbacks[$grade_item->id]->feedback = $grade_records[$grade_item->id]->feedback;
$grades[$grade_item->id] = new grade_grade(array('userid'=>$user->id, 'itemid'=>$grade_item->id), false);
}
}
+ }
$result = new object();
$result->user = $user;
}
}
+/**
+ * Print a selection popup form of the graded users in a course.
+ *
+ * @param int $courseid id of the course
+ * @param string $actionpage The page receiving the data from the popoup form
+ * @param int $userid id of the currently selected user (or 'all' if they are all selected)
+ * @param bool $return If true, will return the HTML, otherwise, will print directly
+ * @return null
+ */
+function print_graded_users_selector($course, $actionpage, $userid='all', $return=false) {
+ global $CFG;
+
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+
+ $menu = array(); // Will be a list of userid => user name
+
+ $gui = new graded_users_iterator($course);
+ $gui->init();
+
+ if ($userid != 'all') {
+ $menu['all'] = get_string('allusers', 'grades') . ' (' . $gui->users_count() . ')';
+ }
+
+ while ($userdata = $gui->next_user()) {
+ $user = $userdata->user;
+ $menu[$user->id] = fullname($user);
+ }
+
+ $gui->close();
+
+ return popup_form($CFG->wwwroot.'/grade/' . $actionpage . '&userid=', $menu, 'choosegradeduser', $userid, 'choose', '', '',
+ $return, 'self', get_string('selectalloroneuser', 'grades'));
+}
+
/**
* Print grading plugin selection popup form.
*
require_once $CFG->dirroot.'/grade/report/user/lib.php';
$courseid = required_param('id');
-$userid = optional_param('userid', $USER->id, PARAM_INT);
+$userid = optional_param('userid', $USER->id, PARAM_ALPHANUM);
/// basic access checks
if (!$course = get_record('course', 'id', $courseid)) {
}
require_login($course);
-if (!$user = get_complete_user_data('id', $userid)) {
+
+if ($userid != 'all' && !$user = get_complete_user_data('id', $userid)) {
error("Incorrect userid");
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
-$usercontext = get_context_instance(CONTEXT_USER, $user->id);
+$usercontext = get_context_instance(CONTEXT_USER, $userid);
require_capability('gradereport/user:view', $context);
$access = true;
if (has_capability('moodle/grade:viewall', $context)) {
//ok - can view all course grades
-} else if ($user->id == $USER->id and has_capability('moodle/grade:view', $context) and $course->showgrades) {
+} else if ($userid == $USER->id and has_capability('moodle/grade:view', $context) and $course->showgrades) {
//ok - can view own grades
} else if (has_capability('moodle/grade:viewall', $usercontext) and $course->showgrades) {
//first make sure we have proper final grades - this must be done before constructing of the grade tree
grade_regrade_final_grades($courseid);
+ if (has_capability('moodle/grade:viewall', $context)) { //Teachers will see all student reports
+ /// Print graded user selector at the top
+ echo '<div id="graded_users_selector">';
+ print_graded_users_selector($course, 'report/user/index.php?id=' . $course->id, $userid);
+ echo '</div>';
+
+ if ($userid == 'all') {
+ $gui = new graded_users_iterator($course);
+ $gui->init();
+ while ($userdata = $gui->next_user()) {
+ $user = $userdata->user;
+ $report = new grade_report_user($courseid, $gpr, $context, $user->id);
+ print_heading(get_string('modulename', 'gradereport_user'). ' - '.fullname($report->user));
+ if ($report->fill_table()) {
+ echo $report->print_table(true);
+ }
+ echo "<p style = 'page-break-after: always;'></p>";
+ }
+ $gui->close();
+ } elseif ($userid) { // Only show one user's report
+ $report = new grade_report_user($courseid, $gpr, $context, $userid);
+ print_heading(get_string('modulename', 'gradereport_user'). ' - '.fullname($report->user));
+ if ($report->fill_table()) {
+ echo $report->print_table(true);
+ }
+ }
+ } else { //Students will see just their own report
+
// Create a report instance
$report = new grade_report_user($courseid, $gpr, $context, $userid);
if ($report->fill_table()) {
echo $report->print_table(true);
+ }
}
} else {
$string['aggregationview'] = 'Aggregation view';
$string['allgrades'] = 'All grades by category';
$string['allstudents'] = 'All students';
+$string['allusers'] = 'All users';
$string['autosort'] = 'Auto-sort';
$string['availableidnumbers'] = 'Available id numbers';
$string['average'] = 'Average';
$string['scaleidhelp'] = 'The scale to which this $a is linked.';
$string['scalestandardhelp'] = 'A standard scale is one that is available site-wide, for all courses.';
$string['selectdestination'] = 'Select destination of $a';
+$string['selectalloroneuser'] = 'Select all or one user';
$string['septab'] = 'Tab';
$string['sepcomma'] = 'Comma';
$string['separator'] = 'Separator';