Пример #1
0
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;
Пример #2
0
 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;
     }
 }
Пример #3
0
$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++;
            }
        }
    }
Пример #4
0
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;
}
Пример #5
0
 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'));
 }
Пример #6
0
 /**
  * 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();
 }
Пример #7
0
/**
 * 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;
}