/** * 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; } }
/** * 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; } }
/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }