MDL-55472 assign: Show userlist on extension form error page
authorIlya Tregubov <ilya@catalyst-au.net>
Wed, 17 Aug 2016 05:40:19 +0000 (15:40 +1000)
committerIlya Tregubov <ilya@192-168-1-4.tpgi.com.au>
Sun, 25 Sep 2016 01:29:43 +0000 (11:29 +1000)
mod/assign/extensionform.php
mod/assign/locallib.php
mod/assign/tests/behat/grant_extension.feature

index 30d0376..ca8e196 100644 (file)
@@ -43,6 +43,8 @@ class mod_assign_extension_form extends moodleform {
      * Define the form - called by parent constructor
      */
     public function definition() {
+        global $DB;
+
         $mform = $this->_form;
         $params = $this->_customdata;
 
@@ -50,13 +52,37 @@ class mod_assign_extension_form extends moodleform {
         $instance = $params['instance'];
         $this->instance = $instance;
 
-        if (!empty($params['userscount'])) {
-            $listusersmessage = get_string('grantextensionforusers', 'assign', $params['userscount']);
-            $mform->addElement('header', 'general', $listusersmessage);
-            $mform->addElement('static', 'userslist', get_string('selectedusers', 'assign'), $params['usershtml']);
-        } else {
-            $mform->addElement('static', 'userslist', '', $params['usershtml']);
+        // Get the assignment class.
+        $assign = $params['assign'];
+        $userlist = $params['userlist'];
+        $usercount = 0;
+        $usershtml = '';
+
+        $extrauserfields = get_extra_user_fields($assign->get_context());
+        foreach ($userlist as $userid) {
+            if ($usercount >= 5) {
+                $usershtml .= get_string('moreusers', 'assign', count($userlist) - 5);
+                break;
+            }
+            $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
+
+            $usershtml .= $assign->get_renderer()->render(new assign_user_summary($user,
+                                                                    $assign->get_course()->id,
+                                                                    has_capability('moodle/site:viewfullnames',
+                                                                    $assign->get_course_context()),
+                                                                    $assign->is_blind_marking(),
+                                                                    $assign->get_uniqueid_for_user($user->id),
+                                                                    $extrauserfields,
+                                                                    !$assign->is_active_user($userid)));
+                $usercount += 1;
         }
+
+        $userscount = count($userlist);
+
+        $listusersmessage = get_string('grantextensionforusers', 'assign', $userscount);
+        $mform->addElement('header', 'general', $listusersmessage);
+        $mform->addElement('static', 'userslist', get_string('selectedusers', 'assign'), $usershtml);
+
         if ($instance->allowsubmissionsfromdate) {
             $mform->addElement('static', 'allowsubmissionsfromdate', get_string('allowsubmissionsfromdate', 'assign'),
                                userdate($instance->allowsubmissionsfromdate));
index e21a8b9..9d906a4 100644 (file)
@@ -2226,7 +2226,7 @@ class assign {
      * @return string
      */
     protected function view_grant_extension($mform) {
-        global $DB, $CFG;
+        global $CFG;
         require_once($CFG->dirroot . '/mod/assign/extensionform.php');
 
         $o = '';
@@ -2235,64 +2235,24 @@ class assign {
         $data->id = $this->get_course_module()->id;
 
         $formparams = array(
-            'instance' => $this->get_instance()
+            'instance' => $this->get_instance(),
+            'assign' => $this
         );
 
-        $extrauserfields = get_extra_user_fields($this->get_context());
-
-        if ($mform) {
-            $submitteddata = $mform->get_data();
-            $users = $submitteddata->selectedusers;
-            $userlist = explode(',', $users);
-
-            $data->selectedusers = $users;
-            $data->userid = 0;
-
-            $usershtml = '';
-            $usercount = 0;
-            foreach ($userlist as $userid) {
-                if ($usercount >= 5) {
-                    $usershtml .= get_string('moreusers', 'assign', count($userlist) - 5);
-                    break;
-                }
-                $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
+        $users = optional_param('userid', 0, PARAM_INT);
+        if (!$users) {
+            $users = required_param('selectedusers', PARAM_SEQUENCE);
+        }
+        $userlist = explode(',', $users);
 
-                $usershtml .= $this->get_renderer()->render(new assign_user_summary($user,
-                                                                    $this->get_course()->id,
-                                                                    has_capability('moodle/site:viewfullnames',
-                                                                    $this->get_course_context()),
-                                                                    $this->is_blind_marking(),
-                                                                    $this->get_uniqueid_for_user($user->id),
-                                                                    $extrauserfields,
-                                                                    !$this->is_active_user($userid)));
-                $usercount += 1;
-            }
+        $formparams['userlist'] = $userlist;
 
-            $formparams['userscount'] = count($userlist);
-            $formparams['usershtml'] = $usershtml;
+        $data->selectedusers = $users;
+        $data->userid = 0;
 
-        } else {
-            $userid = required_param('userid', PARAM_INT);
-            $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST);
-            $flags = $this->get_user_flags($userid, false);
-
-            $data->userid = $user->id;
-            if ($flags) {
-                $data->extensionduedate = $flags->extensionduedate;
-            }
-
-            $usershtml = $this->get_renderer()->render(new assign_user_summary($user,
-                                                                $this->get_course()->id,
-                                                                has_capability('moodle/site:viewfullnames',
-                                                                $this->get_course_context()),
-                                                                $this->is_blind_marking(),
-                                                                $this->get_uniqueid_for_user($user->id),
-                                                                $extrauserfields,
-                                                                !$this->is_active_user($userid)));
-            $formparams['usershtml'] = $usershtml;
+        if (empty($mform)) {
+            $mform = new mod_assign_extension_form(null, $formparams);
         }
-
-        $mform = new mod_assign_extension_form(null, $formparams);
         $mform->set_data($data);
         $header = new assign_header($this->get_instance(),
                                     $this->get_context(),
@@ -4176,6 +4136,7 @@ class assign {
 
             if ($data->operation == 'grantextension') {
                 // Reset the form so the grant extension page will create the extension form.
+                $mform = null;
                 return 'grantextension';
             } else if ($data->operation == 'setmarkingworkflowstate') {
                 return 'viewbatchsetmarkingworkflowstate';
@@ -5832,10 +5793,16 @@ class assign {
         require_once($CFG->dirroot . '/mod/assign/extensionform.php');
         require_sesskey();
 
+        $users = optional_param('userid', 0, PARAM_INT);
+        if (!$users) {
+            $users = required_param('selectedusers', PARAM_SEQUENCE);
+        }
+        $userlist = explode(',', $users);
+
         $formparams = array(
             'instance' => $this->get_instance(),
-            'userscount' => 0,
-            'usershtml' => '',
+            'assign' => $this,
+            'userlist' => $userlist
         );
 
         $mform = new mod_assign_extension_form(null, $formparams);
index b2a5436..4834536 100644 (file)
@@ -79,3 +79,53 @@ Feature: Grant an extension to an offline student
     And I follow "Course 1"
     And I follow "Test assignment name"
     And I should see "Extension due date"
+
+  @javascript
+  Scenario: Validating that extension date is after due date
+    Given the following "activities" exist:
+      | activity | course | idnumber | name                 | intro                       | assignsubmission_onlinetext_enabled | assignsubmission_file_enabled | allowsubmissionsfromdate    | duedate    |
+      | assign   | C1     | assign1  | Test assignment name | Test assignment description | 0                                   | 0                             | 1388534400                  | 1388620800 |
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I follow "Test assignment name"
+    When I follow "View all submissions"
+    And I click on "Edit" "link" in the "Student 1" "table_row"
+    And I follow "Grant extension"
+    And I should see "Student 1 (student1@example.com)"
+    And I set the field "Enable" to "1"
+    And I set the following fields to these values:
+      | extensionduedate[day] | 1 |
+    And I press "Save changes"
+    Then I should see "Extension date must be after the due date"
+    And I set the following fields to these values:
+      | extensionduedate[year] | 2013 |
+    And I press "Save changes"
+    Then I should see "Extension date must be after the allow submissions from date"
+
+  @javascript @_alert
+  Scenario: Granting extensions to an offline assignment (batch action)
+    Given the following "activities" exist:
+      | activity | course | idnumber | name                 | intro                       | assignsubmission_onlinetext_enabled | assignsubmission_file_enabled | allowsubmissionsfromdate    | duedate    |
+      | assign   | C1     | assign1  | Test assignment name | Test assignment description | 0                                   | 0                             | 1388534400                  | 1388620800 |
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I follow "Test assignment name"
+    When I follow "View all submissions"
+    And I set the field "selectall" to "1"
+    And I set the field "operation" to "Grant extension"
+    And I click on "Go" "button" confirming the dialogue
+    And I should see "Student 1 (student1@example.com)"
+    And I should see "Student 2 (student2@example.com)"
+    And I should see "Student 3 (student3@example.com)"
+    And I should see "Student 4 (student4@example.com)"
+    And I should see "Student 5 (student5@example.com)"
+    And I should see "1 more..."
+    And I set the field "Enable" to "1"
+    And I set the following fields to these values:
+      | extensionduedate[day] | 1 |
+    And I press "Save changes"
+    Then I should see "Extension date must be after the due date"
+    And I set the following fields to these values:
+      | extensionduedate[year] | 2013 |
+    And I press "Save changes"
+    Then I should see "Extension date must be after the allow submissions from date"
\ No newline at end of file