/** * Check and submission * @param $userid * @param $data Object with submitted data * @param & $error string * @return false or submission id **/ function add_submission($userid, &$files, $comments, &$error) { global $USER, $DB; if (!$this->pass_submission_restriction($files, $error)) { return false; } if ($this->is_group_activity()) { $liderid = $this->get_group_leaderid($userid); if ($liderid == 0) { //No group or inconsistence if ($this->has_capability(VPL_MANAGE_CAPABILITY) || $this->has_capability(VPL_GRADE_CAPABILITY) && $userid == $USER->id) { //Is manager or grader own submission $liderid = $userid; } else { $error = get_string('notsaved', VPL) . "\n" . get_string('inconsistentgroup', VPL); return false; } } $userid = $liderid; } //Grader submmission or group activity if ($USER->id != $userid || $this->is_group_activity()) { $user = $DB->get_record('user', array('id' => $USER->id)); $submittedby = get_string('submittedby', VPL, fullname($user)) . "\n"; } else { $submittedby = ''; } if (($last_sub_ins = $this->last_user_submission($userid)) !== false) { $last_sub = new mod_vpl_submission($this, $last_sub_ins); if ($last_sub->is_equal_to($files, $submittedby . $comments)) { //TODO check for concistence: NOT SAVE but say nothing //$error=get_string('notsaved',VPL)."\n".get_string('fileNotChanged',VPL); return $last_sub_ins->id; } } ignore_user_abort(true); //Create submission record $submissiondata = new stdClass(); $submissiondata->vpl = $this->get_instance()->id; $submissiondata->userid = $userid; $submissiondata->datesubmitted = time(); $submissiondata->comments = $submittedby . $comments; $submissionid = $DB->insert_record('vpl_submissions', $submissiondata, TRUE); if (!$submissionid) { $error = get_string('notsaved', VPL) . "\ninserting vpl_submissions record"; return false; } //Save files $submission = new mod_vpl_submission($this, $submissionid); $submission->set_submitted_file($files); $submission->remove_grade(); //if no submitted by grader and not group activity //remove near submmissions if ($submittedby == '') { $this->delete_overflow_submissions($userid); } return $submissionid; }
$href = 'gradesubmission.php'; } $grade_form = new mod_vpl_grade_form($href, $vpl); if ($grade_form->is_cancelled()) { //Grading canceled vpl_inmediate_redirect($link); } else { if ($fromform = $grade_form->get_data()) { //Grade (new or update) if (isset($fromform->evaluate)) { $url = vpl_mod_href('forms/evaluation.php', 'id', $fromform->id, 'userid', $fromform->userid, 'grading', 1, 'inpopup', $inpopup); vpl_inmediate_redirect($url); } if (isset($fromform->removegrade)) { vpl_grade_header($vpl, $inpopup); if ($submission->remove_grade()) { \mod_vpl\event\submission_grade_deleted::log($submission); if ($inpopup) { //FIXME don't work //Change grade info at parent window $jscript .= 'VPL.updatesublist(' . $submission->get_instance()->id . ','; $jscript .= "' ',' ',' ');"; echo vpl_include_js($jscript); } vpl_redirect($link, get_string('graderemoved', VPL), 5); } else { vpl_redirect($link, get_string('gradenotremoved', VPL), 5); } die; } vpl_grade_header($vpl, $inpopup);