Ejemplo n.º 1
0
 /**
  * Save grade.
  *
  * @param  moodleform $mform
  * @return bool - was the grade saved
  */
 protected function process_save_grade(&$mform)
 {
     global $CFG;
     // Include grade form.
     require_once $CFG->dirroot . '/mod/assign/gradeform.php';
     require_sesskey();
     $instance = $this->get_instance();
     $rownum = required_param('rownum', PARAM_INT);
     $attemptnumber = optional_param('attemptnumber', -1, PARAM_INT);
     $useridlistid = optional_param('useridlistid', time(), PARAM_INT);
     $userid = optional_param('userid', 0, PARAM_INT);
     $cache = cache::make_from_params(cache_store::MODE_SESSION, 'mod_assign', 'useridlist');
     if (!$userid) {
         if (!($useridlist = $cache->get($this->get_course_module()->id . '_' . $useridlistid))) {
             $useridlist = $this->get_grading_userid_list();
             $cache->set($this->get_course_module()->id . '_' . $useridlistid, $useridlist);
         }
     } else {
         $useridlist = array($userid);
         $rownum = 0;
     }
     $last = false;
     $userid = $useridlist[$rownum];
     if ($rownum == count($useridlist) - 1) {
         $last = true;
     }
     $data = new stdClass();
     $gradeformparams = array('rownum' => $rownum, 'useridlistid' => $useridlistid, 'last' => false, 'attemptnumber' => $attemptnumber, 'userid' => optional_param('userid', 0, PARAM_INT));
     $mform = new mod_assign_grade_form(null, array($this, $data, $gradeformparams), 'post', '', array('class' => 'gradeform'));
     if ($formdata = $mform->get_data()) {
         return $this->save_grade($userid, $formdata);
     } else {
         return false;
     }
 }
Ejemplo n.º 2
0
 /**
  * Save grade.
  *
  * @param  moodleform $mform
  * @return bool - was the grade saved
  */
 protected function process_save_grade(&$mform)
 {
     global $CFG, $SESSION;
     // Include grade form.
     require_once $CFG->dirroot . '/mod/assign/gradeform.php';
     require_sesskey();
     $instance = $this->get_instance();
     $rownum = required_param('rownum', PARAM_INT);
     $attemptnumber = optional_param('attemptnumber', -1, PARAM_INT);
     $useridlistid = optional_param('useridlistid', $this->get_useridlist_key_id(), PARAM_ALPHANUM);
     $userid = optional_param('userid', 0, PARAM_INT);
     if (!$userid) {
         if (empty($SESSION->mod_assign_useridlist[$this->get_useridlist_key($useridlistid)])) {
             // If the userid list is not stored we must not save, as it is possible that the user in a
             // given row position may not be the same now as when the grading page was generated.
             $url = new moodle_url('/mod/assign/view.php', array('id' => $this->get_course_module()->id));
             throw new moodle_exception('useridlistnotcached', 'mod_assign', $url);
         }
         $useridlist = $SESSION->mod_assign_useridlist[$this->get_useridlist_key($useridlistid)];
     } else {
         $useridlist = array($userid);
         $rownum = 0;
     }
     $last = false;
     $userid = $useridlist[$rownum];
     if ($rownum == count($useridlist) - 1) {
         $last = true;
     }
     $data = new stdClass();
     $gradeformparams = array('rownum' => $rownum, 'useridlistid' => $useridlistid, 'last' => false, 'attemptnumber' => $attemptnumber, 'userid' => optional_param('userid', 0, PARAM_INT));
     $mform = new mod_assign_grade_form(null, array($this, $data, $gradeformparams), 'post', '', array('class' => 'gradeform'));
     if ($formdata = $mform->get_data()) {
         return $this->save_grade($userid, $formdata);
     } else {
         return false;
     }
 }
Ejemplo n.º 3
0
    /**
     * save grade
     *
     * @param  moodleform $mform
     * @return bool - was the grade saved
     */
    private function process_save_grade(&$mform) {
        global $CFG;
        // Include grade form
        require_once($CFG->dirroot . '/mod/assign/gradeform.php');

        // Need submit permission to submit an assignment
        require_capability('mod/assign:grade', $this->context);
        require_sesskey();

        $rownum = required_param('rownum', PARAM_INT);
        $useridlist = optional_param('useridlist', '', PARAM_TEXT);
        if ($useridlist) {
            $useridlist = explode(',', $useridlist);
        } else {
            $useridlist = $this->get_grading_userid_list();
        }
        $last = false;
        $userid = $useridlist[$rownum];
        if ($rownum == count($useridlist) - 1) {
            $last = true;
        }

        $data = new stdClass();
        $mform = new mod_assign_grade_form(null, array($this, $data, array('rownum'=>$rownum, 'useridlist'=>$useridlist, 'last'=>false)), 'post', '', array('class'=>'gradeform'));

        if ($formdata = $mform->get_data()) {
            if ($this->get_instance()->teamsubmission && $formdata->applytoall) {
                $groupid = 0;
                if ($this->get_submission_group($userid)) {
                    $group = $this->get_submission_group($userid);
                    if ($group) {
                        $groupid = $group->id;
                    }
                }
                $members = $this->get_submission_group_members($groupid, true);
                foreach ($members as $member) {
                    // User may exist in multple groups (which should put them in the default group).
                    $this->apply_grade_to_user($formdata, $member->id);
                }
            } else {
                $this->apply_grade_to_user($formdata, $userid);
            }
        } else {
            return false;
        }
        return true;
    }
Ejemplo n.º 4
0
 /**
  * Submit the logged in users assignment for grading.
  *
  * @param int $assignmentid The id of the assignment
  * @param int $userid The id of the user the submission belongs to.
  * @param string $jsonformdata The data from the form, encoded as a json array.
  * @return array of warnings to indicate any errors.
  * @since Moodle 2.6
  */
 public static function submit_grading_form($assignmentid, $userid, $jsonformdata)
 {
     global $CFG, $USER;
     require_once $CFG->dirroot . '/mod/assign/locallib.php';
     require_once $CFG->dirroot . '/mod/assign/gradeform.php';
     $params = self::validate_parameters(self::submit_grading_form_parameters(), array('assignmentid' => $assignmentid, 'userid' => $userid, 'jsonformdata' => $jsonformdata));
     list($assignment, $course, $cm, $context) = self::validate_assign($params['assignmentid']);
     $serialiseddata = json_decode($params['jsonformdata']);
     $data = array();
     parse_str($serialiseddata, $data);
     $warnings = array();
     $options = array('userid' => $params['userid'], 'attemptnumber' => $data['attemptnumber'], 'rownum' => 0, 'gradingpanel' => true);
     $customdata = (object) $data;
     $formparams = array($assignment, $customdata, $options);
     // Data is injected into the form by the last param for the constructor.
     $mform = new mod_assign_grade_form(null, $formparams, 'post', '', null, true, $data);
     $validateddata = $mform->get_data();
     if ($validateddata) {
         $assignment->save_grade($params['userid'], $validateddata);
     } else {
         $warnings[] = self::generate_warning($params['assignmentid'], 'couldnotsavegrade', 'Form validation failed.');
     }
     return $warnings;
 }
Ejemplo n.º 5
0
    /**
     * Save grade.
     *
     * @param  moodleform $mform
     * @return bool - was the grade saved
     */
    protected function process_save_grade(&$mform) {
        global $CFG;
        // Include grade form.
        require_once($CFG->dirroot . '/mod/assign/gradeform.php');

        // Need submit permission to submit an assignment.
        require_capability('mod/assign:grade', $this->context);
        require_sesskey();

        $instance = $this->get_instance();
        $rownum = required_param('rownum', PARAM_INT);
        $attemptnumber = optional_param('attemptnumber', -1, PARAM_INT);
        $useridlistid = optional_param('useridlistid', time(), PARAM_INT);
        $userid = optional_param('userid', 0, PARAM_INT);
        $cache = cache::make_from_params(cache_store::MODE_SESSION, 'mod_assign', 'useridlist');
        if (!$userid) {
            if (!$useridlist = $cache->get($this->get_course_module()->id . '_' . $useridlistid)) {
                $useridlist = $this->get_grading_userid_list();
                $cache->set($this->get_course_module()->id . '_' . $useridlistid, $useridlist);
            }
        } else {
            $useridlist = array($userid);
            $rownum = 0;
        }

        $last = false;
        $userid = $useridlist[$rownum];
        if ($rownum == count($useridlist) - 1) {
            $last = true;
        }

        $data = new stdClass();

        $gradeformparams = array('rownum'=>$rownum,
                                 'useridlistid'=>$useridlistid,
                                 'last'=>false,
                                 'attemptnumber'=>$attemptnumber,
                                 'userid'=>optional_param('userid', 0, PARAM_INT));
        $mform = new mod_assign_grade_form(null,
                                           array($this, $data, $gradeformparams),
                                           'post',
                                           '',
                                           array('class'=>'gradeform'));

        if ($formdata = $mform->get_data()) {
            $submission = null;
            if ($instance->teamsubmission) {
                $submission = $this->get_group_submission($userid, 0, false, $attemptnumber);
            } else {
                $submission = $this->get_user_submission($userid, false, $attemptnumber);
            }
            if ($instance->teamsubmission && $formdata->applytoall) {
                $groupid = 0;
                if ($this->get_submission_group($userid)) {
                    $group = $this->get_submission_group($userid);
                    if ($group) {
                        $groupid = $group->id;
                    }
                }
                $members = $this->get_submission_group_members($groupid, true);
                foreach ($members as $member) {
                    // User may exist in multple groups (which should put them in the default group).
                    $this->apply_grade_to_user($formdata, $member->id, $attemptnumber);
                    $this->process_outcomes($member->id, $formdata);
                }
            } else {
                $this->apply_grade_to_user($formdata, $userid, $attemptnumber);

                $this->process_outcomes($userid, $formdata);
            }
            $maxattemptsreached = !empty($submission) &&
                                  $submission->attemptnumber >= ($instance->maxattempts - 1) &&
                                  $instance->maxattempts != ASSIGN_UNLIMITED_ATTEMPTS;
            $shouldreopen = false;
            if ($instance->attemptreopenmethod == ASSIGN_ATTEMPT_REOPEN_METHOD_UNTILPASS) {
                // Check the gradetopass from the gradebook.
                $gradinginfo = grade_get_grades($this->get_course()->id,
                                                'mod',
                                                'assign',
                                                $instance->id,
                                                $userid);

                // What do we do if the grade has not been added to the gradebook (e.g. blind marking)?
                $gradingitem = null;
                $gradebookgrade = null;
                if (isset($gradinginfo->items[0])) {
                    $gradingitem = $gradinginfo->items[0];
                    $gradebookgrade = $gradingitem->grades[$userid];
                }

                if ($gradebookgrade) {
                    // TODO: This code should call grade_grade->is_passed().
                    $shouldreopen = true;
                    if (is_null($gradebookgrade->grade)) {
                        $shouldreopen = false;
                    }
                    if (empty($gradingitem->gradepass) || $gradingitem->gradepass == $gradingitem->grademin) {
                        $shouldreopen = false;
                    }
                    if ($gradebookgrade->grade >= $gradingitem->gradepass) {
                        $shouldreopen = false;
                    }
                }
            }
            if ($instance->attemptreopenmethod == ASSIGN_ATTEMPT_REOPEN_METHOD_MANUAL &&
                    !empty($formdata->addattempt)) {
                $shouldreopen = true;
            }
            // Never reopen if we are editing a previous attempt.
            if ($attemptnumber != -1) {
                $shouldreopen = false;
            }
            if ($shouldreopen && !$maxattemptsreached) {
                $this->process_add_attempt($userid);
            }
        } else {
            return false;
        }
        return true;
    }
Ejemplo n.º 6
0
 /**
  * save grade
  *
  * @param  moodleform $mform
  * @return bool - was the grade saved
  */
 private function process_save_grade(&$mform)
 {
     global $USER, $DB, $CFG;
     // Include grade form
     require_once $CFG->dirroot . '/mod/assign/gradeform.php';
     // Need submit permission to submit an assignment
     require_capability('mod/assign:grade', $this->context);
     require_sesskey();
     $rownum = required_param('rownum', PARAM_INT);
     $useridlist = optional_param('useridlist', '', PARAM_TEXT);
     if ($useridlist) {
         $useridlist = explode(',', $useridlist);
     } else {
         $useridlist = $this->get_grading_userid_list();
     }
     $last = false;
     $userid = $useridlist[$rownum];
     if ($rownum == count($useridlist) - 1) {
         $last = true;
     }
     $data = new stdClass();
     $mform = new mod_assign_grade_form(null, array($this, $data, array('rownum' => $rownum, 'useridlist' => $useridlist, 'last' => false)), 'post', '', array('class' => 'gradeform'));
     if ($formdata = $mform->get_data()) {
         $grade = $this->get_user_grade($userid, true);
         $gradingdisabled = $this->grading_disabled($userid);
         $gradinginstance = $this->get_grading_instance($userid, $gradingdisabled);
         if (!$gradingdisabled) {
             if ($gradinginstance) {
                 $grade->grade = $gradinginstance->submit_and_get_grade($formdata->advancedgrading, $grade->id);
             } else {
                 // handle the case when grade is set to No Grade
                 if (isset($formdata->grade)) {
                     $grade->grade = grade_floatval(unformat_float($formdata->grade));
                 }
             }
         }
         $grade->grader = $USER->id;
         $adminconfig = $this->get_admin_config();
         $gradebookplugin = $adminconfig->feedback_plugin_for_gradebook;
         // call save in plugins
         foreach ($this->feedbackplugins as $plugin) {
             if ($plugin->is_enabled() && $plugin->is_visible()) {
                 if (!$plugin->save($grade, $formdata)) {
                     $result = false;
                     print_error($plugin->get_error());
                 }
                 if ('assignfeedback_' . $plugin->get_type() == $gradebookplugin) {
                     // this is the feedback plugin chose to push comments to the gradebook
                     $grade->feedbacktext = $plugin->text_for_gradebook($grade);
                     $grade->feedbackformat = $plugin->format_for_gradebook($grade);
                 }
             }
         }
         $this->process_outcomes($userid, $formdata);
         $grade->mailed = 0;
         $this->update_grade($grade);
         $this->notify_grade_modified($grade);
         $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
         $this->add_to_log('grade submission', $this->format_grade_for_log($grade));
     } else {
         return false;
     }
     return true;
 }