From 1d3c72cafdfffbad5cb5e1ad7e94c9eb81143164 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Wed, 29 Jan 2014 12:01:53 +0000 Subject: [PATCH 1/4] MDL-43908 mod_assign: Defer notifications for unavailable assignments Signed-off-by: Tony Butler --- mod/assign/locallib.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index cae4144f5a2..f82f6dd5a71 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -1674,8 +1674,12 @@ class assign { // Context lookups are already cached. $contextmodule = context_module::instance($mod->id); - if (!$mod->visible) { - // Hold mail notification for hidden assignments until later. + // Get assignment visibility information for user. + $modinfo = get_fast_modinfo($course, $user->id); + $cm = $modinfo->get_cm($mod->id); + + if (!$cm->uservisible) { + // Hold mail notification for assignments the user cannot access until later. continue; } From d53cc3da71d9fcd5a98d6e5b172dd99da8f0ee53 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Fri, 13 Jun 2014 10:36:09 +0100 Subject: [PATCH 2/4] MDL-43908 mod_assign: Prevent notifications for unavailable assignments Signed-off-by: Tony Butler Conflicts: mod/assign/locallib.php --- mod/assign/locallib.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index f82f6dd5a71..2c804e200e3 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -5757,7 +5757,16 @@ class assign { } } $mform->addElement('selectyesno', 'sendstudentnotifications', get_string('sendstudentnotifications', 'assign')); - $mform->setDefault('sendstudentnotifications', 1); + // Get assignment visibility information for student. + $modinfo = get_fast_modinfo($settings->course, $userid); + $cm = $modinfo->get_cm($this->get_course_module()->id); + // Don't allow notification to be sent if student can't access assignment. + if (!$cm->uservisible) { + $mform->setDefault('sendstudentnotifications', 0); + $mform->freeze('sendstudentnotifications'); + } else { + $mform->setDefault('sendstudentnotifications', 1); + } $mform->addElement('hidden', 'action', 'submitgrade'); $mform->setType('action', PARAM_ALPHA); From f249f9f41af159550bc5db39bdcc45cbb8e19180 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Fri, 11 Jul 2014 12:10:50 +0100 Subject: [PATCH 3/4] MDL-43908 mod_assign: Remove redundant code and improve SQL query Signed-off-by: Tony Butler --- mod/assign/locallib.php | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 2c804e200e3..26c9f88444d 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -1574,17 +1574,17 @@ class assign { // Collect all submissions from the past 24 hours that require mailing. // Submissions are excluded if the assignment is hidden in the gradebook. - $sql = 'SELECT g.id as gradeid, a.course, a.name, a.blindmarking, a.revealidentities, - g.*, g.timemodified as lastmodified + $sql = "SELECT g.id as gradeid, a.course, a.name, a.blindmarking, a.revealidentities, + g.*, g.timemodified as lastmodified, cm.id as cmid 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 - JOIN {modules} md ON md.id = cm.module + 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 WHERE g.timemodified >= :yesterday AND g.timemodified <= :today AND - uf.mailed = 0 AND gri.hidden = 0'; + uf.mailed = 0 AND gri.hidden = 0"; $params = array('yesterday' => $yesterday, 'today' => $timenow); $submissions = $DB->get_records_sql($sql, $params); @@ -1617,9 +1617,6 @@ class assign { unset($courseidsql); unset($params); - // Simple array we'll use for caching modules. - $modcache = array(); - // Message students about new feedback. foreach ($submissions as $submission) { @@ -1661,22 +1658,10 @@ class assign { continue; } - if (!array_key_exists($submission->assignment, $modcache)) { - $mod = get_coursemodule_from_instance('assign', $submission->assignment, $course->id); - if (empty($mod)) { - mtrace('Could not find course module for assignment id ' . $submission->assignment); - continue; - } - $modcache[$submission->assignment] = $mod; - } else { - $mod = $modcache[$submission->assignment]; - } - // Context lookups are already cached. - $contextmodule = context_module::instance($mod->id); - - // Get assignment visibility information for user. $modinfo = get_fast_modinfo($course, $user->id); - $cm = $modinfo->get_cm($mod->id); + $cm = $modinfo->get_cm($submission->cmid); + // Context lookups are already cached. + $contextmodule = context_module::instance($cm->id); if (!$cm->uservisible) { // Hold mail notification for assignments the user cannot access until later. @@ -1699,7 +1684,7 @@ class assign { $messagetype, $eventtype, $updatetime, - $mod, + $cm, $contextmodule, $course, $modulename, @@ -1727,7 +1712,6 @@ class assign { // Free up memory just to be sure. unset($courses); - unset($modcache); } // Update calendar events to provide a description. From 072e93e26ef23088138abcfbee9acb07c3722ca8 Mon Sep 17 00:00:00 2001 From: Tony Butler Date: Fri, 11 Jul 2014 14:39:14 +0100 Subject: [PATCH 4/4] MDL-43908 mod_assign: Order submissions by course id then cm id Signed-off-by: Tony Butler --- mod/assign/locallib.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 26c9f88444d..d6312e654f1 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -1584,7 +1584,8 @@ class assign { JOIN {grade_items} gri ON gri.iteminstance = a.id AND gri.courseid = a.course AND gri.itemmodule = md.name WHERE g.timemodified >= :yesterday AND g.timemodified <= :today AND - uf.mailed = 0 AND gri.hidden = 0"; + uf.mailed = 0 AND gri.hidden = 0 + ORDER BY a.course, cm.id"; $params = array('yesterday' => $yesterday, 'today' => $timenow); $submissions = $DB->get_records_sql($sql, $params);