Пример #1
0
/**
 * 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;
}
Пример #2
0
$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);