Index: accessrules.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/quiz/accessrules.php,v retrieving revision 1.50 diff -u -r1.50 accessrules.php --- accessrules.php 18 Nov 2010 22:38:50 -0000 1.50 +++ accessrules.php 20 Apr 2011 07:02:57 -0000 @@ -9,6 +9,7 @@ private $_passwordrule = null; private $_securewindowrule = null; private $_safebrowserrule = null; + private $_superviserrule = null; private $_rules = array(); /** @@ -44,11 +45,23 @@ $this->_passwordrule = new password_access_rule($this->_quizobj, $this->_timenow); $this->_rules[] = $this->_passwordrule; } + if (!empty($quiz->popup)) { - if ($quiz->popup == 1) { + $id = $DB->get_record('block', array('name'=>'supervised'), 'id'); + if ($id != NULL) { + if ($quiz->popup - 128 >= 0) { + // if the quiz is carried out WITH supervisision + // setup rules for supervisir-quiz block + $this->_superviserrule = new superviser_access_rule($this->_quizobj, $this->_timenow); + $this->_rules[] = $this->_superviserrule; + } + } + + // setup rules for secure window + if ($quiz->popup & 0x2F == 1) { $this->_securewindowrule = new securewindow_access_rule($this->_quizobj, $this->_timenow); $this->_rules[] = $this->_securewindowrule; - } elseif ($quiz->popup == 2) { + } elseif ($quiz->popup & 0x2F == 2) { $this->_safebrowserrule = new safebrowser_access_rule($this->_quizobj, $this->_timenow); $this->_rules[] = $this->_safebrowserrule; } @@ -804,3 +817,41 @@ } } +/** + * A rule for passe quiz under the superviser + */ + class superviser_access_rule extends quiz_access_rule_base { + + public function prevent_access() { + global $CFG, $COURSE, $USER, $DB; + require_once($CFG->dirroot.'/blocks/supervised/lib.php'); + + $contextmodule = get_context_instance(CONTEXT_MODULE, $this->_quizobj->get_quizid()); + + if (has_capability('mod/quiz:preview', $contextmodule) || has_capability('mod/quiz:manageoverrides', $contextmodule)) { + return false; + } + + // if have lesson in current course + if (have_classperiod($COURSE->id)) { + $lesson = get_start_classperiod($COURSE->id); + if ($lesson->groupid == 0) { + return false; + } + + $cron = $DB->get_record('block', array('name'=>'supervised'), 'cron'); + if (get_time_end_classperiod($lesson) < $cron) { + return false; + } + + $groupiduser = $DB->get_record('groups_members', array('userid'=>$USER->id), 'groupid', MUST_EXIST); + if ($groupiduser->groupid == $lesson->groupid) { + return false; + } else { + return get_string('superviser_fail', 'block_supervised'); + } + } else { + return get_string('superviser_fail', 'block_supervised'); + } + } + } \ No newline at end of file Index: lib.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/quiz/lib.php,v retrieving revision 1.380 diff -u -r1.380 lib.php --- lib.php 2 Dec 2010 16:51:52 -0000 1.380 +++ lib.php 16 Jan 2011 15:44:37 -0000 @@ -978,6 +978,9 @@ // getting confused. $quiz->password = $quiz->quizpassword; unset($quiz->quizpassword); + + // pass under supervision. using field 'popup' (this is a temporary solution) + $quiz->popup = $quiz->popup + $quiz->passsupervisor * 128; // Quiz feedback if (isset($quiz->feedbacktext)) { Index: mod_form.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/quiz/mod_form.php,v retrieving revision 1.59 diff -u -r1.59 mod_form.php --- mod_form.php 2 Sep 2010 18:29:40 -0000 1.59 +++ mod_form.php 16 Apr 2011 16:11:34 -0000 @@ -275,7 +275,31 @@ $mform->addElement('select', 'popup', get_string('browsersecurity', 'quiz'), $options); $mform->addHelpButton('popup', 'browsersecurity', 'quiz'); $mform->setAdvanced('popup', $quizconfig->popup_adv); - $mform->setDefault('popup', $quizconfig->popup); + if ($quizconfig->popup - 128 < 0) { + $popupdefault = $quizconfig->popup; + } else { + $popupdefault = $quizconfig->popup - 128; + } + $mform->setDefault('popup', $popupdefault); + + /// Pass under the supervisor + $id = $DB->get_record('block', array('name'=>'supervised'), 'id'); + if ($id != null) { + $mform->addElement('selectyesno', 'passsupervisor', get_string('passundersuperviser', 'block_supervised')); + $mform->addHelpButton('passsupervisor', 'passundersuperviser', 'block_supervised'); + if ($quizconfig->popup - 128 < 0) { + $supervisiondefault = 0; + } else { + $supervisiondefault = 1; + } + $mform->setDefault('passsupervisor', $supervisiondefault); + } else { + if ($quizconfig->popup - 128 > 0) { + $mform->addElement('static', 'passsupervisor', get_string('passundersuperviser', 'block_supervised')); + $mform->addHelpButton('passsupervisor', 'passundersupervisererror', 'block_supervised'); + $mform->setDefault('passsupervisor', get_string('noblocksupervised', 'block_supervised')); + } + } //------------------------------------------------------------------------------- $mform->addElement('header', 'overallfeedbackhdr', get_string('overallfeedback', 'quiz')); @@ -403,6 +427,15 @@ $default_values['quizpassword'] = $default_values['password']; unset($default_values['password']); } + + // set field + if (isset($default_values['popup'])) { + if($default_values['popup'] - 128 >= 0) { + $default_values['popup'] = $default_values['popup'] - 128; + } else { + $default_values['popup'] = $default_values['popup']; + } + } } function validation($data, $files) {