echo $OUTPUT->header(); echo $OUTPUT->heading_with_help(get_string('gradereport', 'mod_emarking'), 'gradereport', 'mod_emarking'); // Print eMarking tabs echo $OUTPUT->tabtree(emarking_tabs($context, $cm, $emarking), "report"); // Counts the total of exams $totalsubmissions = $DB->count_records_sql("\n\t\tSELECT COUNT(e.id) AS total \n\t\tFROM {grade_items} AS gi\n\t\tINNER JOIN {emarking_submission} AS e ON (gi.iteminstance = ? and gi.itemtype = 'mod' and gi.itemmodule = 'emarking' AND gi.iteminstance = e.emarking)\n\t\tWHERE e.grade >= 0 AND e.status >= " . EMARKING_STATUS_RESPONDED, array($emarking->id)); if (!$totalsubmissions || $totalsubmissions == 0) { echo $OUTPUT->notification(get_string('nosubmissionsgraded', 'mod_emarking'), 'notifyproblem'); echo $OUTPUT->footer(); die; } $emarkingids = '' . $emarking->id; $extracategory = optional_param('categories', 0, PARAM_INT); // check for parallel courses if ($CFG->emarking_parallelregex) { $parallels = emarking_get_parallel_courses($course, $extracategory, $CFG->emarking_parallelregex); } else { $parallels = false; } // Form that lets you choose if you want to add to the report the other courses $emarkingsform = new emarking_gradereport_form(null, array('course' => $course, 'cm' => $cm, 'parallels' => $parallels, 'id' => $emarkingids)); $emarkingsform->display(); // Get the IDs from the parallel courses $totalemarkings = 1; if ($parallels && count($parallels) > 0) { foreach ($parallels as $pcourse) { $assid = ''; if ($emarkingsform->get_data() && property_exists($emarkingsform->get_data(), "emarkingid_{$pcourse->id}")) { eval("\$assid = \$emarkingsform->get_data()->emarkingid_{$pcourse->id};"); if ($assid > 0) { $emarkingids .= ',' . $assid;
private function get_parallel_courses_checkboxes($mform) { global $COURSE; if ($parallelcourses = emarking_get_parallel_courses($COURSE)) { // Add a checkbox for each parallel course. $checkboxes = array(); foreach ($parallelcourses as $course) { $checkbox = $mform->createElement('checkbox', $course->shortname, null, $course->fullname, 'checked'); $checkboxes[] = $checkbox; } return $checkboxes; } else { return false; } }
$PAGE->set_pagelayout('incourse'); $PAGE->navbar->add(get_string('gradereport', 'grades')); echo $OUTPUT->header(); echo $OUTPUT->heading($emarking->name); // Print eMarking tabs. echo $OUTPUT->tabtree(emarking_tabs($context, $cm, $emarking), "outcomesreport"); list($gradingmanager, $gradingmethod, $definition, $rubriccontroller) = emarking_validate_rubric($context, false, false); $totalsubmissions = $DB->count_records_sql("\n SELECT COUNT(DISTINCT s.id) AS total\n FROM {emarking_submission} s\n INNER JOIN {emarking_draft} d\n ON (s.emarking = :emarking AND d.status >= " . EMARKING_STATUS_PUBLISHED . " AND d.submissionid = s.id AND d.grade > 0 AND d.qualitycontrol=0)\n ", array('emarking' => $emarking->id)); if (!$totalsubmissions || $totalsubmissions == 0) { echo $OUTPUT->notification(get_string('nosubmissionspublished', 'mod_emarking'), 'notifyproblem'); echo $OUTPUT->footer(); die; } $emarkingids = '' . $emarking->id; $extracategory = optional_param('categories', 0, PARAM_INT); $parallels = emarking_get_parallel_courses($course); $emarkingsform = new emarking_gradereport_form(null, array('course' => $course, 'cm' => $cm, 'parallels' => $parallels, 'id' => $emarkingids)); $emarkingsform->display(); $totalemarkings = 1; if ($parallels && count($parallels) > 0) { foreach ($parallels as $pcourse) { $assid = ''; if ($emarkingsform->get_data() && property_exists($emarkingsform->get_data(), "emarkingid_{$pcourse->id}")) { $varname = 'emarkingid_' . $pcourse . '->id'; $assid = $emarkingsform->get_data()->{$varname}; if ($assid > 0) { $emarkingids .= ',' . $assid; $totalemarkings++; } } }
function get_efficiency($cmid, $emarkingid, $extracategory, $ids) { global $DB, $CFG; if (!($emarking = $DB->get_record('emarking', array('id' => $emarkingid)))) { print_error('Prueba inválida'); } if (!($cm = get_coursemodule_from_id('emarking', $cmid))) { print_error('Módulo inválido'); } // Validate course if (!($course = $DB->get_record('course', array('id' => $emarking->course)))) { print_error('Curso inválido'); } // Getting context $context = context_module::instance($cmid); $emarkingids = '' . $emarking->id; $extracategory = optional_param('categories', 0, PARAM_INT); // check for parallel courses if ($CFG->emarking_parallelregex) { $parallels = emarking_get_parallel_courses($course, $extracategory, $CFG->emarking_parallelregex); } else { $parallels = false; } // Form that lets you choose if you want to add to the report the other courses $emarkingsform = new emarking_gradereport_form(null, array('course' => $course, 'cm' => $cm, 'parallels' => $parallels, 'id' => $emarkingids)); // Get the IDs from the parallel courses $totalemarkings = 1; if ($parallels && count($parallels) > 0) { foreach ($parallels as $pcourse) { $assid = ''; if ($emarkingsform->get_data() && property_exists($emarkingsform->get_data(), "emarkingid_{$pcourse->id}")) { eval("\$assid = \$emarkingsform->get_data()->emarkingid_{$pcourse->id};"); if ($assid > 0) { $emarkingids .= ',' . $assid; $totalemarkings++; } } } } // Gets the stats by criteria $sqlcriteria = ' SELECT co.fullname, co.id AS courseid, s.emarking AS emarkingid, a.id AS criterionid, a.description, round(avg(b.score),1) AS avgscore, round(stddev(b.score),1) AS stdevscore, round(min(b.score),1) AS minscore, round(max(b.score),1) AS maxscore, round(avg(b.score)/t.maxscore,1) AS effectiveness, t.maxscore AS maxcriterionscore FROM {emarking_submission} AS s INNER JOIN {emarking} AS e ON s.emarking=e.id INNER JOIN {course_modules} AS cm ON e.id=cm.instance INNER JOIN {context} AS c ON cm.id=c.instanceid INNER JOIN {grading_areas} AS ga ON c.id=ga.contextid INNER JOIN {grading_definitions} AS gd ON ga.id=gd.areaid INNER JOIN {grading_instances} AS i ON (gd.id=i.definitionid AND s.emarking in ( ' . $ids . ' ) AND s.status >= 20) INNER JOIN {gradingform_rubric_fillings} AS f ON i.id=f.instanceid INNER JOIN {gradingform_rubric_criteria} AS a ON f.criterionid=a.id INNER JOIN {gradingform_rubric_levels} AS b ON f.levelid=b.id INNER JOIN (SELECT s.id AS emarkingid, a.id AS criterionid, max(l.score) AS maxscore FROM {emarking} AS s INNER JOIN {course_modules} AS cm ON (s.id = cm.instance) INNER JOIN {context} AS c ON (c.instanceid = cm.id) INNER JOIN {grading_areas} AS ar ON (ar.contextid = c.id) INNER JOIN {grading_definitions} AS d ON (ar.id = d.areaid) INNER JOIN {gradingform_rubric_criteria} AS a ON (d.id = a.definitionid) INNER JOIN {gradingform_rubric_levels} AS l ON (a.id = l.criterionid) GROUP BY s.id, criterionid) AS t ON (s.emarking=t.emarkingid AND a.id = t.criterionid) INNER JOIN {course} AS co ON e.course=co.id GROUP BY s.emarking,a.id ORDER BY a.description,emarkingid'; $criteriastats = $DB->get_recordset_sql($sqlcriteria); $forcount = $DB->get_recordset_sql($sqlcriteria); // run the sql again to get the count $count = iterator_count($forcount); $parallels_names_criteria = ''; $effectivenessnum = 0; $effectivenesscriteria = array(); $effectivenesseffectiveness = array(); $lastdescription = random_string(); $lastcriteria = ''; $parallels_ids = array(); foreach ($criteriastats as $stats) { if (!isset($parallels_ids[$stats->courseid])) { $parallels_names_criteria .= "'{$stats->fullname} (N={$count})',"; $parallels_ids[$stats->courseid] = $stats->fullname; } $description = trim(preg_replace('/\\s\\s+/', ' ', $stats->description)); $criteriaid = $stats->criterionid; // FIXME arreglar cuando el nombre de 2 descripciones es la misma if ($lastdescription !== $description) { $effectivenesscriteria[$effectivenessnum] = $description; $lastdescription = $description; } $effectivenesseffectiveness[$effectivenessnum] = $stats->effectiveness; $effectivenessnum++; } $effectiveness[0] = $effectivenesscriteria; $effectiveness[1] = $effectivenesseffectiveness; return $effectiveness; }
function definition() { global $DB, $CFG; // Verifies that the global configurated logo exists, and if it's new it copies it // to a normal space within Moodle's filesystem emarking_verify_logo(); $mform = $this->_form; $instance = $this->_customdata; $cmid = $instance['cmid']; $courseid = $instance['courseid']; $examid = $instance['examid']; // Multicourse // Get the course record to get the shortname $course = $DB->get_record('course', array('id' => $courseid)); $exam = $DB->get_record('emarking_exams', array('id' => $examid)); // Exam id goes hidden $mform->addElement('hidden', 'id', $examid); $mform->setType('id', PARAM_INT); // Course module id goes hidden as well $mform->addElement('hidden', 'cm', $cmid); $mform->setType('cm', PARAM_INT); // Course id goes hidden as well $mform->addElement('hidden', 'course', $courseid); $mform->setType('course', PARAM_INT); // Exam totalpages goes hidden as well $mform->addElement('hidden', 'totalpages'); $mform->setType('totalpages', PARAM_INT); $mform->addElement('header', 'exam_title', get_string('examinfo', 'mod_emarking')); $mform->addElement('static', 'coursename', get_string('course'), $course->fullname); // Exam name $mform->addElement('text', 'name', get_string('examname', 'mod_emarking')); $mform->addRule('name', get_string('required'), 'required', null, 'client'); $mform->addRule('name', get_string('maximumchars', '', 50), 'maxlength', 50, 'client'); $mform->setType('name', PARAM_TEXT); $mform->addHelpButton('name', 'examname', 'mod_emarking'); $date = new DateTime(); $date->setTimestamp(usertime(time())); $date->modify('+2 days'); $date->modify('+10 minutes'); // Exam date $mform->addElement('date_time_selector', 'examdate', get_string('examdate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $date->getTimestamp(), 'optional' => false), $instance['options']); $mform->addRule('examdate', get_string('filerequiredpdf', 'mod_emarking'), 'required', null, 'client'); $mform->addHelpButton('examdate', 'examdate', 'mod_emarking'); // Exam PDF file $mform->addElement('filemanager', 'exam_files', get_string('pdffile', 'mod_emarking'), null, array('subdirs' => 0, 'maxbytes' => 0, 'maxfiles' => 10, 'accepted_types' => array('.pdf'), 'return_types' => FILE_INTERNAL)); //if ($examid == 0) //se omite el if, ya que al editar el examen emite error $mform->addRule('exam_files', get_string('filerequiredtosendnewprintorder', 'mod_emarking'), 'required', null, 'client'); $mform->setType('exam_files', PARAM_FILE); $mform->addHelpButton('exam_files', 'pdffile', 'mod_emarking'); // eMarking configuration $mform->addElement('header', 'emarking_title', get_string('emarking', 'mod_emarking')); // Personalized header (using QR) $mform->addElement('checkbox', 'headerqr', get_string('headerqr', 'mod_emarking')); // $mform->addElement('hidden','headerqr'); $mform->setType('headerqr', PARAM_BOOL); $mform->addHelpButton('headerqr', 'headerqr', 'mod_emarking'); $mform->setDefault('headerqr', true); // Enrolment methods to include in printing $enrolcheckboxes = array(); $enrolavailables = array(); $enrolments = enrol_get_instances($courseid, true); $flag = 0; foreach ($enrolments as $enrolment) { if ($enrolment->enrol == "meta") { if ($flag == 0) { $flag = 1; $enrolavailables[] = $enrolment->enrol; $enrolcheckboxes[] = $mform->createElement('checkbox', $enrolment->enrol, null, get_string('enrol' . $enrolment->enrol, 'mod_emarking'), 'checked'); } } else { $enrolavailables[] = $enrolment->enrol; $enrolcheckboxes[] = $mform->createElement('checkbox', $enrolment->enrol, null, get_string('enrol' . $enrolment->enrol, 'mod_emarking'), 'checked'); } } $mform->addGroup($enrolcheckboxes, 'enrolments', get_string('includestudentsinexam', 'mod_emarking'), array('<br/>'), true); if ($CFG->emarking_enrolincludes && strlen($CFG->emarking_enrolincludes) > 1) { $enrolincludes = explode(",", $CFG->emarking_enrolincludes); foreach ($enrolincludes as $enroldefault) { if (in_array($enroldefault, $enrolavailables)) { $mform->setDefault("enrolments[{$enroldefault}]", true); } } } if ($CFG->emarking_enableprintingrandom) { // Print Random $mform->addElement('checkbox', 'printrandom', get_string('printrandom', 'mod_emarking')); $mform->setType('printrandom', PARAM_BOOL); $mform->addHelpButton('printrandom', 'printrandom', 'mod_emarking'); $mform->setDefault('printrandom', false); } if ($CFG->emarking_enableprintinglist) { // Print Random $mform->addElement('checkbox', 'printlist', get_string('printlist', 'mod_emarking')); $mform->setType('printlist', PARAM_BOOL); $mform->addHelpButton('printlist', 'printlist', 'mod_emarking'); $mform->setDefault('printlist', false); } // Copy center instructions $mform->addElement('header', 'exam_title', get_string('copycenterinstructions', 'mod_emarking')); // Numbers from 0 to 14 for extra exams and sheets $numberarray = array(); for ($j = 0; $j < 3; $j++) { $numberarray[$j] = $j; } // Extra sheets per student $mform->addElement('select', 'extrasheets', get_string('extrasheets', 'mod_emarking'), $numberarray, null); $mform->addHelpButton('extrasheets', 'extrasheets', 'mod_emarking'); // Extra students $mform->addElement('select', 'extraexams', get_string('extraexams', 'mod_emarking'), $numberarray, null); $mform->addHelpButton('extraexams', 'extraexams', 'mod_emarking'); // print double sided // $mform->addElement('checkbox','printdoublesided',get_string('printdoublesided', 'mod_emarking'))); $mform->addElement('hidden', 'printdoublesided'); $mform->setType('printdoublesided', PARAM_BOOL); // $mform->addHelpButton('printdoublesided', 'printdoublesided', 'mod_emarking'); $mform->setDefault('printdoublesided', false); // Obtain parallel courses if ($seccionesparalelas = emarking_get_parallel_courses($course, null, $CFG->emarking_parallelregex)) { // Add a checkbox for each parallel course $checkboxes = array(); foreach ($seccionesparalelas as $cid => $course) { $checkboxes[] = $mform->createElement('checkbox', $course->shortname, null, $course->fullname, 'checked'); } // If there's any parallel course we add the multicourse option if (count($checkboxes) > 0) { $mform->addGroup($checkboxes, 'multisecciones', get_string('multicourse', 'mod_emarking'), array('<br/>'), true); $mform->addHelpButton('multisecciones', 'multicourse', 'mod_emarking'); if ($examid == 0) { $mform->addElement('button', 'selectall', get_string('selectall', 'mod_emarking'), array('onClick' => 'selectAllCheckboxes(this.form,true);')); $mform->addElement('button', 'deselectall', get_string('selectnone', 'mod_emarking'), array('onClick' => 'selectAllCheckboxes(this.form,false);')); } else { foreach ($seccionesparalelas as $cid => $course) { $selected = false; if ($examid > 0 && ($parallel = $DB->get_record('emarking_exams', array('file' => $exam->file, 'course' => $cid)))) { $selected = true; } $mform->setType("multisecciones[{$course->shortname}]", PARAM_BOOL); if ($selected) { $mform->setDefault("multisecciones[{$course->shortname}]", true); } } } } $this->extraScript .= "<script>function selectAllCheckboxes(form,checked) { " . "for (var i = 0; i < form.elements.length; i++ ) { " . " if (form.elements[i].type == 'checkbox' && form.elements[i].id.indexOf('multiseccion') > 0) { " . " form.elements[i].checked = checked; " . " } " . "} " . "}</script>"; } $mform->addElement('hidden', 'action', 'uploadfile'); $mform->setType('action', PARAM_ALPHA); // buttons $this->add_action_buttons(true, get_string('submit')); }
/** * Defines forms elements */ public function definition() { global $COURSE, $DB, $CFG, $USER; $mform = $this->_form; $instance = $this->_customdata; // Exam id, in case we are in editing mode $examid = 0; $exam = null; $emarking = null; if ($this->_instance) { $emarking = $DB->get_record('emarking', array('id' => $this->_instance)); $exam = $DB->get_record("emarking_exams", array("emarking" => $emarking->id)); if ($exam) { $examid = $exam->id; } } // Verifies that the logo image set in settings is copied to regular filearea emarking_verify_logo(); // Calculates context for validating permissions // If we have the module available, we use it, otherwise we fallback to course $ctx = context_course::instance($COURSE->id); if ($this->current && $this->current->coursemodule) { $cm = get_coursemodule_from_id('emarking', $this->current->module, $COURSE->id); if ($cm) { $ctx = context_module::instance($cm->id); } } // Numbers 1 to 100. Used in pages and min and max grades $numbers1to100 = array(); for ($i = 0; $i <= 100; $i++) { $numbers1to100[] = $i; } // Numbers from 0 to 2 for extra exams and sheets $numberarray = array(); for ($j = 0; $j < 3; $j++) { $numberarray[$j] = $j; } // Today $date = new DateTime(); $date->setTimestamp(usertime(time())); // Expected pages for submissions $types = array(); if (!$this->_instance || $emarking && $emarking->type != EMARKING_TYPE_MARKER_TRAINING) { $types[EMARKING_TYPE_PRINT_ONLY] = get_string('type_print_only', 'mod_emarking'); $types[EMARKING_TYPE_PRINT_SCAN] = get_string('type_print_scan', 'mod_emarking'); $types[EMARKING_TYPE_NORMAL] = get_string('type_normal', 'mod_emarking'); } if (!$this->_instance || $emarking && $emarking->type == EMARKING_TYPE_MARKER_TRAINING) { $types[EMARKING_TYPE_MARKER_TRAINING] = get_string('type_markers_training', 'mod_emarking'); } // 3 => get_string('type_student_training', 'mod_emarking'), // 4 => get_string('type_peer_review', 'mod_emarking') // MARKING TYPE $mform->addElement('select', 'type', get_string('markingtype', 'mod_emarking'), $types, array("onchange" => "showFullForm()")); $mform->addHelpButton('type', 'markingtype', 'mod_emarking'); $mform->setType('type', PARAM_INT); // EXAM NAME $mform->addElement('text', 'name', get_string("examname", "mod_emarking"), array('size' => '64')); if (!empty($CFG->formatstringstriptags)) { $mform->setType('name', PARAM_TEXT); } else { $mform->setType('name', PARAM_CLEAN); } $mform->addRule('name', null, 'required', null, 'client'); $mform->addRule('name', get_string('maximumchars', '', 255), 'maxlength', 255, 'client'); $mform->addHelpButton('name', 'examname', 'mod_emarking'); if ($exam && $exam->status >= EMARKING_EXAM_SENT_TO_PRINT) { $mform->freeze('name'); } // PRINT CONFIGURATION $mform->addElement('header', 'print', get_string("print", "mod_emarking")); // EXAM PDF FILE(S) OR PREVIOUSLY SENT EXAM // Check if there are any exams with no emarking activity associated $availableexams = $DB->get_records("emarking_exams", array("course" => $COURSE->id, "emarking" => 0)); if ($CFG->version > 2014111008) { $this->standard_intro_elements(get_string('examinfo', 'mod_emarking')); } else { $this->add_intro_editor(); } $examsarray = array(); if ($availableexams && !$exam) { $examsarray[0] = get_string("no"); foreach ($availableexams as $avexam) { $examsarray[$avexam->id] = $avexam->name; } // Expected pages for submissions $mform->addElement('select', 'exam', get_string('orsentexam', 'mod_emarking'), $examsarray, array("onchange" => "previousExamUpdate();")); $mform->addHelpButton('exam', 'orsentexam', 'mod_emarking'); $mform->setDefault('exam', 0); $mform->setType('exam', PARAM_INT); $mform->disabledIf('exam', 'type', 'eq', '2'); } else { if ($exam) { $mform->addElement('hidden', 'exam', $exam->id); $mform->setType('exam', PARAM_INT); } else { $mform->addElement('hidden', 'exam', 0); $mform->setType('exam', PARAM_INT); } } $examfilename = get_string('pdffile', 'mod_emarking'); // If we are editing, we if ($exam && $exam->status < EMARKING_EXAM_SENT_TO_PRINT || !$this->_instance) { if ($this->_instance) { $examfilename = get_string('pdffileupdate', 'mod_emarking'); } else { $examfilename = get_string('pdffile', 'mod_emarking'); } $mform->addElement('filemanager', 'exam_files', $examfilename, null, array('subdirs' => 0, 'maxbytes' => 0, 'maxfiles' => 10, 'accepted_types' => array('.pdf'), 'return_types' => FILE_INTERNAL)); $mform->setType('exam_files', PARAM_FILE); $mform->addHelpButton('exam_files', 'pdffile', 'mod_emarking'); $examdate = new DateTime(); $examdate->setTimestamp(usertime(time())); $examdate->modify('+2 days'); $examdate->modify('+10 minutes'); $examw = date("w", $date->getTimestamp()); // Sundays and saturdays shouldn't be selected by default if ($examw == 0) { $examdate->modify('+1 days'); } if ($examw == 6) { $examdate->modify('+2 days'); } // Exam date $mform->addElement('date_time_selector', 'examdate', get_string('examdate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $examdate->getTimestamp(), 'optional' => false), $instance['options']); $mform->addHelpButton('examdate', 'examdate', 'mod_emarking'); if ($exam && $exam->status >= EMARKING_EXAM_SENT_TO_PRINT) { $mform->freeze('examdate'); $mform->freeze('exam_files'); } } else { // Add message explaining why they can't change files or dates anymore $mform->addElement('static', 'examdownloaded', get_string("pdffile", "mod_emarking"), get_string("examalreadysent", "mod_emarking")); } // Print students list $mform->addElement('checkbox', 'printlist', get_string('printlist', 'mod_emarking')); $mform->setType('printlist', PARAM_BOOL); $mform->addHelpButton('printlist', 'printlist', 'mod_emarking'); $mform->setAdvanced('printlist'); $mform->setDefault('printlist', false); // print double sided $mform->addElement('checkbox', 'printdoublesided', get_string('printdoublesided', 'mod_emarking')); $mform->setType('printdoublesided', PARAM_BOOL); $mform->addHelpButton('printdoublesided', 'printdoublesided', 'mod_emarking'); $mform->setDefault('printdoublesided', false); $mform->setAdvanced('printdoublesided'); // Personalized header (using QR) $mform->addElement('checkbox', 'headerqr', get_string('headerqr', 'mod_emarking')); $mform->setType('headerqr', PARAM_BOOL); $mform->addHelpButton('headerqr', 'headerqr', 'mod_emarking'); $mform->setDefault('headerqr', true); $mform->disabledIf('headerqr', 'printdoublesided', 'checked'); $mform->setAdvanced('headerqr'); // Extra sheets per student $mform->addElement('select', 'extrasheets', get_string('extrasheets', 'mod_emarking'), $numberarray, null); $mform->addHelpButton('extrasheets', 'extrasheets', 'mod_emarking'); $mform->setAdvanced('extrasheets'); // Extra students $mform->addElement('select', 'extraexams', get_string('extraexams', 'mod_emarking'), $numberarray, null); $mform->addHelpButton('extraexams', 'extraexams', 'mod_emarking'); $mform->setAdvanced('extraexams'); // Obtain parallel courses if ($parallelcourses = emarking_get_parallel_courses($COURSE)) { // Add a checkbox for each parallel course $checkboxes = array(); foreach ($parallelcourses as $course) { $checkboxes[] = $mform->createElement('checkbox', $course->shortname, null, $course->fullname, 'checked'); } // If there's any parallel course we add the multicourse option if (count($checkboxes) > 0) { $mform->addGroup($checkboxes, 'multicourse', get_string('multicourse', 'mod_emarking'), array('<br/>'), true); $mform->addHelpButton('multicourse', 'multicourse', 'mod_emarking'); $mform->setAdvanced('multicourse'); if ($examid == 0) { $mform->addElement('button', 'selectall', get_string('selectall', 'mod_emarking'), array('onClick' => 'selectAllCheckboxes(this.form,true);')); $mform->setAdvanced('selectall'); $mform->addElement('button', 'deselectall', get_string('selectnone', 'mod_emarking'), array('onClick' => 'selectAllCheckboxes(this.form,false);')); $mform->setAdvanced('deselectall'); } else { foreach ($parallelcourses as $cid => $course) { $selected = false; if ($examid > 0 && ($parallel = $DB->get_record('emarking_exams', array('file' => $exam->file, 'course' => $cid)))) { $selected = true; } $mform->setType("multicourse[{$course->shortname}]", PARAM_BOOL); if ($selected) { $mform->setDefault("multicourse[{$course->shortname}]", true); } } } } $this->extraScript .= "<script>function selectAllCheckboxes(form,checked) { " . "for (var i = 0; i < form.elements.length; i++ ) { " . " if (form.elements[i].type == 'checkbox' && form.elements[i].id.indexOf('multiseccion') > 0) { " . " form.elements[i].checked = checked; " . " } " . "} " . "}</script>"; } $mform->addElement('hidden', 'action', 'uploadfile'); $mform->setType('action', PARAM_ALPHA); // Enrolment methods to include in printing $enrolcheckboxes = array(); $enrolavailables = $this->getAvailableEnrolments(); foreach ($enrolavailables as $enrolment) { $enrolcheckboxes[] = $mform->createElement('checkbox', $enrolment, null, get_string('enrol' . $enrolment, 'mod_emarking'), 'checked'); } $mform->addGroup($enrolcheckboxes, 'enrolments', get_string('enrolments', 'mod_emarking'), array('<br/>'), true); $mform->addHelpButton('enrolments', 'enrolments', 'mod_emarking'); $mform->setAdvanced("enrolments"); // If we are editing, we use the previous enrolments if ($examid > 0 && isset($exam->enrolments)) { $enrolincludes = explode(",", $exam->enrolments); foreach ($enrolincludes as $enroldefault) { if (in_array($enroldefault, $enrolavailables)) { $mform->setDefault("enrolments[{$enroldefault}]", true); } } // If we are creating a new one, the default comes from the plugin settings } else { if ($CFG->emarking_enrolincludes && strlen($CFG->emarking_enrolincludes) > 1) { $enrolincludes = explode(",", $CFG->emarking_enrolincludes); foreach ($enrolincludes as $enroldefault) { if (in_array($enroldefault, $enrolavailables)) { $mform->setDefault("enrolments[{$enroldefault}]", true); } } } } $mform->addElement('header', 'scan', get_string('scan', "mod_emarking")); // Due date settings $mform->addElement('html', '<div id="scanisenabled">' . get_string('scanisenabled', 'mod_emarking') . '</div>'); $mform->addElement('html', '<div id="osmisenabled">' . get_string('osmisenabled', 'mod_emarking') . '</div>'); // MARKERS TRAINING $mform->addElement('header', 'markerstraining', get_string('type_markers_training', 'mod_emarking')); $mform->setExpanded('markerstraining'); $delphidate = new DateTime(); $delphidate->setTimestamp(usertime(time())); $delphidate->modify("+1 week"); // Delphi agreement date settings $mform->addElement('date_time_selector', 'firststagedate', get_string('firststagedate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $delphidate->getTimestamp(), 'optional' => false), null); $mform->addHelpButton('firststagedate', 'firststagedate', 'mod_emarking'); $mform->disabledIf('firststagedate', 'type', 'neq', '2'); $delphidate->modify("+1 week"); // Delphi agreement date settings $mform->addElement('date_time_selector', 'secondstagedate', get_string('secondstagedate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $delphidate->getTimestamp(), 'optional' => false), null); $mform->addHelpButton('secondstagedate', 'secondstagedate', 'mod_emarking'); $mform->disabledIf('secondstagedate', 'type', 'neq', '2'); // Expected pages for submissions $agreements = array("0" => get_string('agreementflexibility00', 'mod_emarking'), "0.2" => get_string('agreementflexibility20', 'mod_emarking'), "0.4" => get_string('agreementflexibility40', 'mod_emarking')); // 3 => get_string('type_student_training', 'mod_emarking'), // 4 => get_string('type_peer_review', 'mod_emarking') // MARKING TYPE $mform->addElement('select', 'agreementflexibility', get_string('agreementflexibility', 'mod_emarking'), $agreements); $mform->addHelpButton('agreementflexibility', 'agreementflexibility', 'mod_emarking'); $mform->setType('agreementflexibility', PARAM_INT); $mform->addElement('header', 'osm', get_string('onscreenmarking', "mod_emarking")); // Students can see peers answers $ynoptions = array(0 => get_string('no'), 1 => get_string('yespeerisanonymous', 'mod_emarking')); $mform->addElement('select', 'peervisibility', get_string('viewpeers', 'mod_emarking'), $ynoptions); $mform->addHelpButton('peervisibility', 'viewpeers', 'mod_emarking'); $mform->setDefault('peervisibility', 0); $mform->setType('peervisibility', PARAM_INT); $mform->disabledIf('peervisibility', 'type', 'eq', '2'); // Expected pages for submissions $mform->addElement('hidden', 'totalpages', 0); $mform->setType('totalpages', PARAM_INT); // Anonymous eMarking setting $anonymousoptions = array(EMARKING_ANON_STUDENT => get_string('studentanonymous_markervisible', 'mod_emarking'), EMARKING_ANON_BOTH => get_string('studentanonymous_markeranonymous', 'mod_emarking'), EMARKING_ANON_NONE => get_string('studentvisible_markervisible', 'mod_emarking'), EMARKING_ANON_MARKER => get_string('studentvisible_markeranonymous', 'mod_emarking')); if (has_capability('mod/emarking:manageanonymousmarking', $ctx)) { $mform->addElement('select', 'anonymous', get_string('anonymous', 'mod_emarking'), $anonymousoptions); $mform->addHelpButton('anonymous', 'anonymous', 'mod_emarking'); } else { $mform->addElement('hidden', 'anonymous'); } $mform->setDefault('anonymous', 0); $mform->setType('anonymous', PARAM_INT); // Justice perception eMarking setting $justiceoptions = array(EMARKING_JUSTICE_DISABLED => get_string('justicedisabled', 'mod_emarking'), EMARKING_JUSTICE_PER_SUBMISSION => get_string('justicepersubmission', 'mod_emarking'), EMARKING_JUSTICE_PER_CRITERION => get_string('justicepercriterion', 'mod_emarking')); $mform->addElement('select', 'justiceperception', get_string('justiceperception', 'mod_emarking'), $justiceoptions); $mform->addHelpButton('justiceperception', 'justiceperception', 'mod_emarking'); $mform->setDefault('justiceperception', 0); $mform->setType('justiceperception', PARAM_INT); $mform->disabledIf('justiceperception', 'type', 'eq', '2'); $mform->addElement('checkbox', 'linkrubric', get_string('linkrubric', 'mod_emarking')); $mform->addHelpButton('linkrubric', 'linkrubric', 'mod_emarking'); $mform->addElement('checkbox', 'collaborativefeatures', get_string('collaborativefeatures', 'mod_emarking')); $mform->addHelpButton('collaborativefeatures', 'collaborativefeatures', 'mod_emarking'); // Custom marks if (has_capability('mod/emarking:managespecificmarks', $ctx)) { $mform->addElement('textarea', 'custommarks', get_string('specificmarks', 'mod_emarking'), array('rows' => 5, 'cols' => 100, 'class' => 'smalltext')); $mform->addHelpButton('custommarks', 'specificmarks', 'mod_emarking'); } else { $mform->addElement('hidden', 'custommarks'); } $mform->setDefault('custommarks', ''); $mform->setType('custommarks', PARAM_TEXT); $mform->setAdvanced('custommarks'); // Due date settings $mform->addElement('checkbox', 'enableduedate', get_string('enableduedate', 'mod_emarking')); $mform->setAdvanced('enableduedate'); $mform->addElement('date_time_selector', 'markingduedate', get_string('markingduedate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $date->getTimestamp(), 'optional' => false), null); $mform->addHelpButton('markingduedate', 'markingduedate', 'mod_emarking'); $mform->setAdvanced('markingduedate'); $mform->disabledIf('markingduedate', 'enableduedate'); // Regrade settings, dates and enabling $mform->addElement('checkbox', 'regraderestrictdates', get_string('regraderestrictdates', 'mod_emarking')); $mform->addHelpButton('regraderestrictdates', 'regraderestrictdates', 'mod_emarking'); $mform->setAdvanced('regraderestrictdates'); $mform->addElement('date_time_selector', 'regradesopendate', get_string('regradesopendate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $date->getTimestamp(), 'optional' => false), null); $mform->addHelpButton('regradesopendate', 'regradesopendate', 'mod_emarking'); $mform->setAdvanced('regradesopendate'); $mform->disabledIf('regradesopendate', 'regraderestrictdates'); $date->modify('+2 months'); $mform->addElement('date_time_selector', 'regradesclosedate', get_string('regradesclosedate', 'mod_emarking'), array('startyear' => date('Y'), 'stopyear' => date('Y') + 1, 'step' => 5, 'defaulttime' => $date->getTimestamp(), 'optional' => false), null); $mform->addHelpButton('regradesclosedate', 'regradesclosedate', 'mod_emarking'); $mform->setAdvanced('regradesclosedate'); $mform->disabledIf('regradesclosedate', 'regraderestrictdates'); // Due date settings $mform->addElement("static", "qualitycontroldescription", get_string("qualitycontrol", "mod_emarking"), get_string("qualitycontroldescription", "mod_emarking")); $mform->addElement('checkbox', 'qualitycontrol', get_string('enablequalitycontrol', 'mod_emarking')); $mform->addHelpButton('qualitycontrol', 'enablequalitycontrol', 'mod_emarking'); $mform->setAdvanced('qualitycontrol'); $mform->disabledIf('qualitycontrol', 'type', 'eq', '2'); // Get all users with permission to grade in emarking $markers = get_enrolled_users($ctx, 'mod/emarking:grade'); $chkmarkers = array(); foreach ($markers as $marker) { $chkmarkers[] = $mform->createElement('checkbox', 'marker-' . $marker->id, null, $marker->firstname . " " . $marker->lastname); } // Add markers group as checkboxes $mform->addGroup($chkmarkers, 'markers', get_string('markersqualitycontrol', 'mod_emarking'), array('<br />'), false); $mform->addHelpButton('markers', 'markersqualitycontrol', 'mod_emarking'); $mform->setType('markers', PARAM_INT); $mform->disabledIf('markers', 'qualitycontrol'); $mform->setAdvanced('markers'); $mform->disabledIf('markers', 'type', 'eq', '2'); // ------------------------------------------------------------------------------- // add standard grading elements... if (!$this->_features->rating || $this->_features->gradecat) { $mform->addElement('header', 'modstandardgrade', get_string('grade')); } // if supports grades and grades arent being handled via ratings if (!$this->_features->rating) { $mform->addElement('select', 'grademin', get_string('grademin', 'grades'), $numbers1to100); $mform->setDefault('grademin', 1); $mform->addElement('select', 'grade', get_string('grademax', 'grades'), $numbers1to100); $mform->setDefault('grade', 7); } if ($this->_features->advancedgrading and !empty($this->current->_advancedgradingdata['methods']) and !empty($this->current->_advancedgradingdata['areas'])) { if (count($this->current->_advancedgradingdata['areas']) == 1) { // if there is just one gradable area (most cases), display just the selector // without its name to make UI simplier $areadata = reset($this->current->_advancedgradingdata['areas']); $areaname = key($this->current->_advancedgradingdata['areas']); // Regrade settings, dates and enabling $mform->addElement('hidden', 'advancedgradingmethod_' . $areaname, 'rubric'); $mform->setType('advancedgradingmethod_' . $areaname, PARAM_ALPHA); /* * $mform->addElement('select', 'advancedgradingmethod_' . $areaname, get_string('gradingmethod', 'core_grading'), array( * null => "sIMPLE GRADING", * 'rubric' => "Rubrica" * )); * $mform->addHelpButton('advancedgradingmethod_' . $areaname, 'gradingmethod', 'core_grading'); * $mform->setAdvanced('advancedgradingmethod_' . $areaname); * $mform->disabledIf('advancedgradingmethod_' . $areaname, 'type', 'eq', '2'); */ } else { throw new Exception("The emarking module should not define more than one grading area"); } } if ($this->_features->gradecat) { $mform->addElement('select', 'gradecat', get_string('gradecategoryonmodform', 'grades'), grade_get_categories_menu($COURSE->id, $this->_outcomesused)); $mform->addHelpButton('gradecat', 'gradecategoryonmodform', 'grades'); $mform->setAdvanced('gradecat'); $mform->disabledIf('gradecat', 'type', 'eq', '2'); } // Regrade settings, dates and enabling $mform->addElement('checkbox', 'adjustslope', get_string('adjustslope', 'mod_emarking')); $mform->addHelpButton('adjustslope', 'adjustslope', 'mod_emarking'); $mform->setAdvanced('adjustslope'); $mform->disabledIf('adjustslope', 'type', 'eq', '2'); $mform->addElement('text', 'adjustslopegrade', get_string('adjustslopegrade', 'mod_emarking'), array('size' => '5')); $mform->setType('adjustslopegrade', PARAM_FLOAT); $mform->setDefault('adjustslopegrade', 0); $mform->addHelpButton('adjustslopegrade', 'adjustslopegrade', 'mod_emarking'); $mform->disabledIf('adjustslopegrade', 'adjustslope'); $mform->setAdvanced('adjustslopegrade'); $mform->disabledIf('adjustslopegrade', 'type', 'eq', '2'); $mform->addElement('text', 'adjustslopescore', get_string('adjustslopescore', 'mod_emarking'), array('size' => '5')); $mform->setType('adjustslopescore', PARAM_FLOAT); $mform->setDefault('adjustslopescore', 0); $mform->addHelpButton('adjustslopescore', 'adjustslopescore', 'mod_emarking'); $mform->disabledIf('adjustslopescore', 'adjustslope'); $mform->setAdvanced('adjustslopescore'); $mform->disabledIf('adjustslopescore', 'type', 'eq', '2'); // ------------------------------------------------------------------------------- // add standard elements, common to all modules $this->standard_coursemodule_elements(); // Regrade settings, dates and enabling $mform->addElement('hidden', 'heartbeatenabled', true); $mform->setType('heartbeatenabled', PARAM_BOOL); $mform->addElement('hidden', 'downloadrubricpdf', true); $mform->setType('downloadrubricpdf', PARAM_BOOL); // If we are in editing mode we can not change the type anymore if ($this->_instance) { $freeze = array(); if ($emarking->type == EMARKING_TYPE_NORMAL) { $freeze[] = 'qualitycontrol'; } if ($exam && $exam->status >= EMARKING_EXAM_SENT_TO_PRINT) { $freeze[] = 'printlist'; $freeze[] = 'printdoublesided'; $freeze[] = 'headerqr'; $freeze[] = 'extrasheets'; $freeze[] = 'extraexams'; $freeze[] = 'enrolments'; if ($mform->elementExists('multicourse')) { $freeze[] = 'multicourse'; } } $mform->freeze($freeze); } // ------------------------------------------------------------------------------- // add standard buttons, common to all modules $this->add_action_buttons(); }
/** * Returns a recordset of emarking objects which are in courses parallel * to a course parameter * * @param unknown $course * @param unknown $includeown * @return multitype: */ function emarking_get_parallel_emarkings($course, $includeown) { global $DB; $parallelcourses = emarking_get_parallel_courses($course, $includeown); if (!$parallelcourses) { return false; } $parallelsids = array(); foreach ($parallelcourses as $parallelcourse) { if ($parallelcourse->id == $course->id) { continue; } foreach (get_coursemodules_in_course('emarking', $parallelcourse->id) as $cmdst) { $parallelsids[] = $cmdst->instance; } } $parallelsids = implode(",", $parallelsids); $parallelemarkings = $DB->get_records_sql("\n SELECT e.*, c.id as courseid, c.shortname, c.fullname\n FROM {emarking} AS e\n INNER JOIN {course} AS c ON (e.course = c.id AND c.id <> ?)\n WHERE e.id IN ({$parallelsids})\n ORDER BY c.fullname, e.name", array($course->id)); return $parallelemarkings; }