/** * Saves a new instance of the emarking into the database * Given an object containing all the necessary data, * (defined by the form in mod_form.php) this function * will create a new instance and return the id number * of the new instance. * * @param object $emarking * An object from the form in mod_form.php * @param mod_emarking_mod_form $mform * @return int The id of the newly inserted emarking record */ function emarking_add_instance(stdClass $data, mod_emarking_mod_form $mform = null) { global $DB, $CFG, $COURSE, $USER; $data->timecreated = time(); $id = $DB->insert_record('emarking', $data); $data->id = $id; emarking_grade_item_update($data); if ($data->type == EMARKING_TYPE_MARKER_TRAINING || $data->type == EMARKING_TYPE_PEER_REVIEW || !$mform) { return $id; } foreach ($data as $k => $v) { $parts = explode('-', $k); if (count($parts) > 1 && $parts[0] === 'marker') { $markerid = intval($parts[1]); $marker = new stdClass(); $marker->emarking = $id; $marker->marker = $markerid; $marker->qualitycontrol = 1; $DB->insert_record('emarking_markers', $marker); } } $context = context_course::instance($COURSE->id); $examid = 0; // If there's no previous exam to associate, and we are creating a new // EMarking, we need the PDF file. if ($data->exam == 0) { $examfiles = emarking_validate_exam_files_from_draft(); if (count($examfiles) == 0) { throw new Exception('Invalid PDF exam files'); } $numpages = $examfiles[0]['numpages']; } else { $examid = $data->exam; } $studentsnumber = emarking_get_students_count_for_printing($COURSE->id); // A new exam object is created and its attributes filled from form data. if ($examid == 0) { $exam = new stdClass(); $exam->course = $COURSE->id; $exam->courseshortname = $COURSE->shortname; $exam->name = $mform->get_data()->name; $exam->examdate = $mform->get_data()->examdate; $exam->emarking = $id; $exam->headerqr = isset($mform->get_data()->headerqr) ? 1 : 0; $exam->printrandom = isset($mform->get_data()->printrandom) ? 1 : 0; $exam->printlist = isset($mform->get_data()->printlist) ? 1 : 0; $exam->extrasheets = $mform->get_data()->extrasheets; $exam->extraexams = $mform->get_data()->extraexams; $exam->usebackside = isset($mform->get_data()->printdoublesided) ? 1 : 0; if ($examid == 0) { $exam->timecreated = time(); } $exam->timemodified = time(); $exam->requestedby = $USER->id; $exam->totalstudents = $studentsnumber; $exam->comment = $mform->get_data()->comment; // Get the enrolments as a comma separated values. $enrollist = array(); if (!empty($mform->get_data()->enrolments)) { $enrolments = $mform->get_data()->enrolments; foreach ($enrolments as $key => $enrolment) { if (!empty($enrolment)) { $enrollist[] = $key; } } } $exam->enrolments = implode(",", $enrollist); $exam->printdate = 0; $exam->status = EMARKING_EXAM_UPLOADED; // Calculate total pages for exam. $exam->totalpages = $numpages; $exam->printingcost = emarking_get_category_cost($COURSE->id); $exam->id = $DB->insert_record('emarking_exams', $exam); $fs = get_file_storage(); foreach ($examfiles as $exampdf) { // Save the submitted file to check if it's a PDF. $filerecord = array('component' => 'mod_emarking', 'filearea' => 'exams', 'contextid' => $context->id, 'itemid' => $exam->id, 'filepath' => '/', 'filename' => $exampdf['filename']); $file = $fs->create_file_from_pathname($filerecord, $exampdf['pathname']); } // Update exam object to store the PDF's file id. $exam->file = $file->get_id(); if (!$DB->update_record('emarking_exams', $exam)) { $fs->delete_area_files($contextid, 'emarking', 'exams', $exam->id); print_error(get_string('errorsavingpdf', 'mod_emarking')); } // If it is a multi-course submission, insert several exams. if (!empty($mform->get_data()->multicourse)) { $multicourse = $mform->get_data()->multicourse; foreach ($multicourse as $key => $mcourse) { if (!empty($key)) { if ($thiscourse = $DB->get_record('course', array('shortname' => $key))) { $studentsnumber = emarking_get_students_count_for_printing($thiscourse->id); list($newemarkingid, $newcmid, $sectionid) = emarking_copy_to_cm($data, $thiscourse->id); $newexam = $exam; $newexam->id = null; $newexam->totalstudents = $studentsnumber; $newexam->course = $thiscourse->id; $newexam->courseshortname = $thiscourse->shortname; $newexam->emarking = $newemarkingid; $newexam->id = $DB->insert_record('emarking_exams', $newexam); $thiscontext = context_course::instance($thiscourse->id); // Create file records for all new exams. foreach ($examfiles as $exampdf) { // Save the submitted file to check if it's a PDF. $filerecord = array('component' => 'mod_emarking', 'filearea' => 'exams', 'contextid' => $thiscontext->id, 'itemid' => $newexam->id, 'filepath' => '/', 'filename' => $exampdf['filename']); $file = $fs->create_file_from_pathname($filerecord, $exampdf['pathname']); } } } } } } else { $exam = $DB->get_record("emarking_exams", array("id" => $examid)); $exam->emarking = $id; $exam->timemodified = time(); $DB->update_record('emarking_exams', $exam); } $headerqr = isset($mform->get_data()->headerqr) ? 1 : 0; setcookie("emarking_headerqr", $headerqr, time() + 3600 * 24 * 365 * 10, '/'); $defaultexam = new stdClass(); $defaultexam->headerqr = $exam->headerqr; $defaultexam->printrandom = $exam->printrandom; $defaultexam->printlist = $exam->printlist; $defaultexam->extrasheets = $exam->extrasheets; $defaultexam->extraexams = $exam->extraexams; $defaultexam->usebackside = $exam->usebackside; $defaultexam->enrolments = $exam->enrolments; setcookie("emarking_exam_defaults", json_encode($defaultexam), time() + 3600 * 24 * 365 * 10, '/'); return $id; }
$activity = $DB->get_record('emarking_activities', array('id' => $activityid)); //$action = required_param('action', PARAM_TEXT); $itemid = get_pdf_activity($activity); $emarking = new stdClass(); $emarking->course = $courseid; $emarking->name = $activity->title; $emarking->intro = ""; $emarking->custommarks = ""; $emarking->markingduedate = time(); $emarking->type = 1; $emarking->grade = 7.0; $emarking->grademin = 1.0; $emarking->keywords = "keyword1,keyword2,sentence1"; $emarking->exam = 0; //var_dump($activity); $data = emarking_copy_to_cm($emarking, $courseid, $itemid); //var_dump($data); $contextmodule = context_module::instance($data['cmid']); $gradingArea = new stdClass(); $gradingArea->contextid = $contextmodule->id; $gradingArea->component = 'mod_emarking'; $gradingArea->areaname = 'attempt'; $gradingArea->activemethod = 'rubric'; $insert = $DB->insert_record('grading_areas', $gradingArea); $rubric = $DB->get_record('grading_definitions', array('id' => $activity->rubricid)); $rubricdefinition = $rubric->id; $rubric->copiedfromid = $activity->rubricid; $rubric->timecopied = time(); $rubric->areaid = $insert; unset($rubric->id); $insertRubric = $DB->insert_record('grading_definitions', $rubric);