Merge branch 'MDL-36184-23' of git://github.com/damyon/moodle into MOODLE_23_STABLE
authorDan Poltawski <dan@moodle.com>
Tue, 27 Nov 2012 05:58:29 +0000 (13:58 +0800)
committerDan Poltawski <dan@moodle.com>
Tue, 27 Nov 2012 05:58:29 +0000 (13:58 +0800)
1  2 
mod/assign/locallib.php

diff --combined mod/assign/locallib.php
@@@ -296,12 -296,11 +296,12 @@@ class assign 
  
          $o = '';
          $mform = null;
 +        $notices = array();
  
 -        // handle form submissions first
 +        // Handle form submissions first.
          if ($action == 'savesubmission') {
              $action = 'editsubmission';
 -            if ($this->process_save_submission($mform)) {
 +            if ($this->process_save_submission($mform, $notices)) {
                  $action = 'view';
              }
           } else if ($action == 'lock') {
          $returnparams = array('rownum'=>optional_param('rownum', 0, PARAM_INT));
          $this->register_return_link($action, $returnparams);
  
 -        // now show the right view page
 +        // Now show the right view page.
          if ($action == 'previousgrade') {
              $mform = null;
              $o .= $this->view_single_grade_page($mform, -1);
          } else if ($action == 'viewpluginassignsubmission') {
              $o .= $this->view_plugin_content('assignsubmission');
          } else if ($action == 'editsubmission') {
 -            $o .= $this->view_edit_submission_page($mform);
 +            $o .= $this->view_edit_submission_page($mform, $notices);
          } else if ($action == 'grading') {
              $o .= $this->view_grading_page();
          } else if ($action == 'downloadall') {
       * @param mixed $grade stdClass|null
       * @param MoodleQuickForm $mform
       * @param stdClass $data
 +     * @param int $userid - The userid we are grading
       * @return void
       */
 -    private function add_plugin_grade_elements($grade, MoodleQuickForm $mform, stdClass $data) {
 +    private function add_plugin_grade_elements($grade, MoodleQuickForm $mform, stdClass $data, $userid) {
          foreach ($this->feedbackplugins as $plugin) {
              if ($plugin->is_enabled() && $plugin->is_visible()) {
                  $mform->addElement('header', 'header_' . $plugin->get_type(), $plugin->get_name());
 -                if (!$plugin->get_form_elements($grade, $mform, $data)) {
 +                if (!$plugin->get_form_elements_for_user($grade, $mform, $data, $userid)) {
                      $mform->removeElement('header_' . $plugin->get_type());
                  }
              }
       * View edit submissions page.
       *
       * @param moodleform $mform
 +     * @param array $notices A list of notices to display at the top of the edit submission form (e.g. from plugins).
       * @return void
       */
 -    private function view_edit_submission_page($mform) {
 +    private function view_edit_submission_page($mform, $notices) {
          global $CFG;
  
          $o = '';
              $mform = new mod_assign_submission_form(null, array($this, $data));
          }
  
 +        foreach ($notices as $notice) {
 +            $o .= $this->output->notification($notice);
 +        }
 +
          $o .= $this->output->render(new assign_form('editsubmissionform',$mform));
  
          $o .= $this->view_footer();
          $modifiedusers = array();
          foreach ($currentgrades as $current) {
              $modified = $users[(int)$current->userid];
-             $grade = $this->get_user_grade($userid, false);
+             $grade = $this->get_user_grade($modified->userid, false);
  
              // check to see if the outcomes were modified
              if ($CFG->enableoutcomes) {
       * save assignment submission
       *
       * @param  moodleform $mform
 +     * @param  array $notices Any error messages that should be shown to the user at the top of the edit submission form.
       * @return bool
       */
 -    private function process_save_submission(&$mform) {
 +    private function process_save_submission(&$mform, &$notices) {
          global $USER, $CFG;
  
 -        // Include submission form
 +        // Include submission form.
          require_once($CFG->dirroot . '/mod/assign/submission_form.php');
  
 -        // Need submit permission to submit an assignment
 +        // Need submit permission to submit an assignment.
          require_capability('mod/assign:submit', $this->context);
          require_sesskey();
  
              }
  
  
 +            $allempty = true;
 +            $pluginerror = false;
              foreach ($this->submissionplugins as $plugin) {
                  if ($plugin->is_enabled()) {
                      if (!$plugin->save($submission, $data)) {
 -                        print_error($plugin->get_error());
 +                        $notices[] = $plugin->get_error();
 +                        $pluginerror = true;
                      }
 +                    if (!$allempty || !$plugin->is_empty($submission)) {
 +                        $allempty = false;
 +                    }
 +                }
 +            }
 +            if ($pluginerror || $allempty) {
 +                if ($allempty) {
 +                    $notices[] = get_string('submissionempty', 'mod_assign');
                  }
 +                return false;
              }
  
              $this->update_submission($submission);
  
          $mform->addElement('static', 'progress', '', get_string('gradingstudentprogress', 'assign', array('index'=>$rownum+1, 'count'=>count($useridlist))));
  
 -        // plugins
 -        $this->add_plugin_grade_elements($grade, $mform, $data);
 +        // Let feedback plugins add elements to the grading form.
 +        $this->add_plugin_grade_elements($grade, $mform, $data, $userid);
  
          // hidden params
          $mform->addElement('hidden', 'id', $this->get_course_module()->id);
       * @param mixed $submission stdClass|null
       * @param MoodleQuickForm $mform
       * @param stdClass $data
 +     * @param int $userid The current userid (same as $USER->id)
       * @return void
       */
 -    private function add_plugin_submission_elements($submission, MoodleQuickForm $mform, stdClass $data) {
 +    private function add_plugin_submission_elements($submission, MoodleQuickForm $mform, stdClass $data, $userid) {
          foreach ($this->submissionplugins as $plugin) {
              if ($plugin->is_enabled() && $plugin->is_visible() && $plugin->allow_submissions()) {
                  $mform->addElement('header', 'header_' . $plugin->get_type(), $plugin->get_name());
 -                if (!$plugin->get_form_elements($submission, $mform, $data)) {
 +                if (!$plugin->get_form_elements_for_user($submission, $mform, $data, $userid)) {
                      $mform->removeElement('header_' . $plugin->get_type());
                  }
              }
  
          $submission = $this->get_user_submission($USER->id, false);
  
 -        $this->add_plugin_submission_elements($submission, $mform, $data);
 +        $this->add_plugin_submission_elements($submission, $mform, $data, $USER->id);
  
          // hidden params
          $mform->addElement('hidden', 'id', $this->get_course_module()->id);