From 4ed4be49884c47e83da6451505ea4531594d922e Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Thu, 9 Jun 2016 08:52:08 +0800 Subject: [PATCH 1/4] MDL-54873 assign: Fetch mapping id for blind marking grading This change modifies the grading table to pre-seed record ids where they already exist. Where they do not exist, they are still fetched. --- mod/assign/gradingtable.php | 26 +++++++++++++++++++++----- mod/assign/locallib.php | 6 +++++- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/mod/assign/gradingtable.php b/mod/assign/gradingtable.php index 8dfae963ca3..85b02d98f90 100644 --- a/mod/assign/gradingtable.php +++ b/mod/assign/gradingtable.php @@ -176,7 +176,15 @@ class assign_grading_table extends table_sql implements renderable { $from .= 'LEFT JOIN {assign_user_flags} uf ON u.id = uf.userid - AND uf.assignment = :assignmentid3'; + AND uf.assignment = :assignmentid3 '; + + if (!empty($this->assignment->get_instance()->blindmarking)) { + $from .= 'LEFT JOIN {assign_user_mapping} um + ON u.id = um.userid + AND um.assignment = :assignmentid4 '; + $params['assignmentid4'] = (int)$this->assignment->get_instance()->id; + $fields .= ', um.id as recordid '; + } $userparams = array(); $userindex = 0; @@ -463,8 +471,10 @@ class assign_grading_table extends table_sql implements renderable { * @return string */ public function col_recordid(stdClass $row) { - return get_string('hiddenuser', 'assign') . - $this->assignment->get_uniqueid_for_user($row->userid); + if (empty($row->recordid)) { + $row->recordid = $this->assignment->get_uniqueid_for_user($row->userid); + } + return get_string('hiddenuser', 'assign') . $row->recordid; } @@ -838,7 +848,10 @@ class assign_grading_table extends table_sql implements renderable { 'action' => 'grader'); if ($this->assignment->is_blind_marking()) { - $urlparams['blindid'] = $this->assignment->get_uniqueid_for_user($row->userid); + if (empty($row->recordid)) { + $row->recordid = $this->assignment->get_uniqueid_for_user($row->userid); + } + $urlparams['blindid'] = $row->recordid; } else { $urlparams['userid'] = $row->userid; } @@ -1015,7 +1028,10 @@ class assign_grading_table extends table_sql implements renderable { 'action' => 'grader'); if ($this->assignment->is_blind_marking()) { - $urlparams['blindid'] = $this->assignment->get_uniqueid_for_user($row->userid); + if (empty($row->recordid)) { + $row->recordid = $this->assignment->get_uniqueid_for_user($row->userid); + } + $urlparams['blindid'] = $row->recordid; } else { $urlparams['userid'] = $row->userid; } diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 4419562a82b..4775b171db6 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -3921,7 +3921,11 @@ class assign { public function fullname($user) { if ($this->is_blind_marking()) { $hasviewblind = has_capability('mod/assign:viewblinddetails', $this->get_context()); - $uniqueid = $this->get_uniqueid_for_user($user->id); + if (empty($user->recordid)) { + $uniqueid = $this->get_uniqueid_for_user($user->id); + } else { + $uniqueid = $user->recordid; + } if ($hasviewblind) { return get_string('participant', 'assign') . ' ' . $uniqueid . ' (' . fullname($user) . ')'; } else { From cf29b1e08d45d7172c54ba30d175d848f0aab457 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 30 Aug 2016 10:57:25 +0800 Subject: [PATCH 2/4] MDL-54873 assign: Fetch mapping id for blind marking in cron --- mod/assign/locallib.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 4775b171db6..e5a29d755ef 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -1899,13 +1899,14 @@ class assign { // - If marking workflow is not enabled, the grade was updated in the past 24 hours, or // if marking workflow is enabled, the workflow state is at 'released'. $sql = "SELECT g.id as gradeid, a.course, a.name, a.blindmarking, a.revealidentities, - g.*, g.timemodified as lastmodified, cm.id as cmid + g.*, g.timemodified as lastmodified, cm.id as cmid, um.id as recordid FROM {assign} a JOIN {assign_grades} g ON g.assignment = a.id LEFT JOIN {assign_user_flags} uf ON uf.assignment = a.id AND uf.userid = g.userid JOIN {course_modules} cm ON cm.course = a.course AND cm.instance = a.id JOIN {modules} md ON md.id = cm.module AND md.name = 'assign' JOIN {grade_items} gri ON gri.iteminstance = a.id AND gri.courseid = a.course AND gri.itemmodule = md.name + LEFT JOIN {assign_user_mapping} um ON g.id = um.userid AND um.assignment = a.id WHERE ((a.markingworkflow = 0 AND g.timemodified >= :yesterday AND g.timemodified <= :today) OR (a.markingworkflow = 1 AND uf.workflowstate = :wfreleased)) AND uf.mailed = 0 AND gri.hidden = 0 @@ -2005,7 +2006,11 @@ class assign { $uniqueid = 0; if ($submission->blindmarking && !$submission->revealidentities) { - $uniqueid = self::get_uniqueid_for_user_static($submission->assignment, $user->id); + if (empty($submission->recordid)) { + $uniqueid = self::get_uniqueid_for_user_static($submission->assignment, $user->id); + } else { + $uniqueid = $submission->recordid; + } } $showusers = $submission->blindmarking && !$submission->revealidentities; self::send_assignment_notification($grader, From c06ce32d854ad19af8799d8f74555d1082e2662e Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 30 Aug 2016 11:01:48 +0800 Subject: [PATCH 3/4] MDL-54873 assign: Add recordid fetching participants get_submission_info_for_participants is primarily used by externallib.php --- mod/assign/locallib.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index e5a29d755ef..02ce867c341 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -1470,7 +1470,8 @@ class assign { $params['assignmentid1'] = $assignid; $params['assignmentid2'] = $assignid; - $sql = 'SELECT u.id, s.status, s.timemodified AS stime, g.timemodified AS gtime, g.grade FROM {user} u + $fields = 'SELECT u.id, s.status, s.timemodified AS stime, g.timemodified AS gtime, g.grade'; + $from = ' FROM {user} u LEFT JOIN {assign_submission} s ON u.id = s.userid AND s.assignment = :assignmentid1 @@ -1479,7 +1480,18 @@ class assign { ON u.id = g.userid AND g.assignment = :assignmentid2 AND g.attemptnumber = s.attemptnumber - WHERE u.id ' . $insql; + '; + $where = ' WHERE u.id ' . $insql; + + if (!empty($this->get_instance()->blindmarking)) { + $from .= 'LEFT JOIN {assign_user_mapping} um + ON u.id = um.userid + AND um.assignment = :assignmentid3 '; + $params['assignmentid3'] = $assignid; + $fields .= ', um.id as recordid '; + } + + $sql = "$fields $from $where"; $records = $DB->get_records_sql($sql, $params); From 5e171c69860736e659d9d0e223b35e8abe257b75 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 30 Aug 2016 11:16:18 +0800 Subject: [PATCH 4/4] MDL-54873 assign: Seed recordid to print_recent_activity --- mod/assign/lib.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mod/assign/lib.php b/mod/assign/lib.php index cd23c8ec064..750404cd101 100644 --- a/mod/assign/lib.php +++ b/mod/assign/lib.php @@ -649,13 +649,14 @@ function assign_print_recent_activity($course, $viewfullnames, $timestart) { $dbparams = array($timestart, $course->id, 'assign', ASSIGN_SUBMISSION_STATUS_SUBMITTED); $namefields = user_picture::fields('u', null, 'userid'); - if (!$submissions = $DB->get_records_sql("SELECT asb.id, asb.timemodified, cm.id AS cmid, + if (!$submissions = $DB->get_records_sql("SELECT asb.id, asb.timemodified, cm.id AS cmid, um.id as recordid, $namefields FROM {assign_submission} asb JOIN {assign} a ON a.id = asb.assignment JOIN {course_modules} cm ON cm.instance = a.id JOIN {modules} md ON md.id = cm.module JOIN {user} u ON u.id = asb.userid + LEFT JOIN {assign_user_mapping} um ON um.userid = u.id AND um.assignment = a.id WHERE asb.timemodified > ? AND asb.latest = 1 AND a.course = ? AND @@ -735,7 +736,10 @@ function assign_print_recent_activity($course, $viewfullnames, $timestart) { // Obscure first and last name if blind marking enabled. if ($assign->is_blind_marking()) { $submission->firstname = get_string('participant', 'mod_assign'); - $submission->lastname = $assign->get_uniqueid_for_user($submission->userid); + if (empty($submission->recordid)) { + $submission->recordid = $assign->get_uniqueid_for_user($submission->userid); + } + $submission->lastname = $submission->recordid; } print_recent_activity_note($submission->timemodified, $submission,