MDL-58278 mod_assign: Ignore send notify with mw
authorDamyon Wiese <damyon@moodle.com>
Thu, 16 Mar 2017 12:28:50 +0000 (20:28 +0800)
committerDamyon Wiese <damyon@moodle.com>
Thu, 20 Apr 2017 03:43:34 +0000 (11:43 +0800)
When marking workflow is on and the grade is not released we never send notifications anyway.
Instead of preventing the grading form from submitting (validation error) we silently ignore it.

mod/assign/gradeform.php
mod/assign/locallib.php
mod/assign/tests/locallib_test.php

index 36c2737..d298084 100644 (file)
@@ -78,11 +78,6 @@ class mod_assign_grade_form extends moodleform {
         $errors = parent::validation($data, $files);
         $instance = $this->assignment->get_instance();
 
-        if ($instance->markingworkflow && !empty($data['sendstudentnotifications']) &&
-                $data['workflowstate'] != ASSIGN_MARKING_WORKFLOW_STATE_RELEASED) {
-            $errors['workflowstate'] = get_string('studentnotificationworkflowstateerror', 'assign');
-        }
-
         // Advanced grading.
         if (!array_key_exists('grade', $data)) {
             return $errors;
index 8ad4244..bc34932 100644 (file)
@@ -7736,6 +7736,14 @@ class assign {
                 $feedbackmodified) {
             $this->update_grade($grade, !empty($formdata->addattempt));
         }
+
+        // We never send notifications if we have marking workflow and the grade is not released.
+        if ($this->get_instance()->markingworkflow &&
+                isset($formdata->workflowstate) &&
+                $formdata->workflowstate != ASSIGN_MARKING_WORKFLOW_STATE_RELEASED) {
+            $formdata->sendstudentnotifications = false;
+        }
+
         // Note the default if not provided for this option is true (e.g. webservices).
         // This is for backwards compatibility.
         if (!isset($formdata->sendstudentnotifications) || $formdata->sendstudentnotifications) {
index de14bfc..fac2273 100644 (file)
@@ -1244,10 +1244,12 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase {
         $data->grade = '50.0';
 
         // This student will not receive notification.
+        $data->sendstudentnotifications = 1;
         $data->workflowstate = ASSIGN_MARKING_WORKFLOW_STATE_READYFORRELEASE;
         $assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0);
 
         // This student will receive notification.
+        $data->sendstudentnotifications = 1;
         $data->workflowstate = ASSIGN_MARKING_WORKFLOW_STATE_RELEASED;
         $assign->testable_apply_grade_to_user($data, $this->students[1]->id, 0);