mirror of
https://github.com/moodle/moodle.git
synced 2025-01-17 21:49:15 +01:00
MDL-20636 Fix lots of problems found by the new improved codechecker.
This commit is contained in:
parent
f45a12d28e
commit
55ca80edde
@ -92,7 +92,8 @@ if ($data = $mform->get_data()) {
|
||||
$returnurl->param('cat', $categoryid . ',' . $contextid);
|
||||
|
||||
} else {
|
||||
throw new coding_exception('It seems a form was submitted without any button being pressed???');
|
||||
throw new coding_exception(
|
||||
'It seems a form was submitted without any button being pressed???');
|
||||
}
|
||||
|
||||
quiz_add_random_questions($quiz, $addonpage, $categoryid, 1, $includesubcategories);
|
||||
|
@ -44,8 +44,9 @@ class quiz_add_random_form extends moodleform {
|
||||
|
||||
$contexts = $this->_customdata;
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
$mform->addElement('header', 'categoryheader', get_string('randomfromexistingcategory', 'quiz'));
|
||||
//--------------------------------------------------------------------------------
|
||||
$mform->addElement('header', 'categoryheader',
|
||||
get_string('randomfromexistingcategory', 'quiz'));
|
||||
|
||||
$mform->addElement('questioncategory', 'category', get_string('category'),
|
||||
array('contexts' => $contexts->all(), 'top' => false));
|
||||
@ -54,8 +55,9 @@ class quiz_add_random_form extends moodleform {
|
||||
|
||||
$mform->addElement('submit', 'existingcategory', get_string('addrandomquestion', 'quiz'));
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
$mform->addElement('header', 'categoryheader', get_string('randomquestionusinganewcategory', 'quiz'));
|
||||
//--------------------------------------------------------------------------------
|
||||
$mform->addElement('header', 'categoryheader',
|
||||
get_string('randomquestionusinganewcategory', 'quiz'));
|
||||
|
||||
$mform->addElement('text', 'name', get_string('name'), 'maxlength="254" size="50"');
|
||||
$mform->setType('name', PARAM_MULTILANG);
|
||||
@ -64,9 +66,10 @@ class quiz_add_random_form extends moodleform {
|
||||
array('contexts' => $contexts->all(), 'top' => true));
|
||||
$mform->addHelpButton('parent', 'parentcategory', 'question');
|
||||
|
||||
$mform->addElement('submit', 'newcategory', get_string('createcategoryandaddrandomquestion', 'quiz'));
|
||||
$mform->addElement('submit', 'newcategory',
|
||||
get_string('createcategoryandaddrandomquestion', 'quiz'));
|
||||
|
||||
//--------------------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------------------
|
||||
$mform->addElement('cancel');
|
||||
$mform->closeHeaderBefore('cancel');
|
||||
|
||||
|
@ -34,7 +34,8 @@ if ($id = optional_param('id', 0, PARAM_INTEGER)) {
|
||||
if (!$cm = get_coursemodule_from_instance('quiz', $qid)) {
|
||||
print_error('invalidquizid', 'quiz');
|
||||
}
|
||||
redirect($CFG->wwwroot . '/mod/quiz/startattempt.php?cmid=' . $cm->id . '&sesskey=' . sesskey());
|
||||
redirect(new moodle_url('/mod/quiz/startattempt.php',
|
||||
array('cmid' => $cm->id, 'sesskey' => sesskey())));
|
||||
}
|
||||
|
||||
// Get submitted parameters.
|
||||
@ -111,7 +112,8 @@ if ($accessmanager->securewindow_required($attemptobj->is_preview_user())) {
|
||||
format_string($attemptobj->get_quiz_name()));
|
||||
|
||||
} else if ($accessmanager->safebrowser_required($attemptobj->is_preview_user())) {
|
||||
$PAGE->set_title($attemptobj->get_course()->shortname . ': '.format_string($attemptobj->get_quiz_name()));
|
||||
$PAGE->set_title($attemptobj->get_course()->shortname . ': ' .
|
||||
format_string($attemptobj->get_quiz_name()));
|
||||
$PAGE->set_cacheable(false);
|
||||
echo $OUTPUT->header();
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
require_once($CFG->dirroot . '/mod/quiz/backup/moodle2/backup_quiz_stepslib.php'); // Because it exists (must)
|
||||
require_once($CFG->dirroot . '/mod/quiz/backup/moodle2/backup_quiz_stepslib.php');
|
||||
|
||||
|
||||
/**
|
||||
@ -74,7 +74,7 @@ class backup_quiz_activity_task extends backup_activity_task {
|
||||
public static function encode_content_links($content) {
|
||||
global $CFG;
|
||||
|
||||
$base = preg_quote($CFG->wwwroot,"/");
|
||||
$base = preg_quote($CFG->wwwroot, '/');
|
||||
|
||||
// Link to the list of quizzes
|
||||
$search="/(".$base."\/mod\/quiz\/index.php\?id\=)([0-9]+)/";
|
||||
|
@ -106,9 +106,11 @@ class backup_quiz_activity_structure_step extends backup_questions_activity_stru
|
||||
// Define sources
|
||||
$quiz->set_source_table('quiz', array('id' => backup::VAR_ACTIVITYID));
|
||||
|
||||
$qinstance->set_source_table('quiz_question_instances', array('quiz' => backup::VAR_PARENTID));
|
||||
$qinstance->set_source_table('quiz_question_instances',
|
||||
array('quiz' => backup::VAR_PARENTID));
|
||||
|
||||
$feedback->set_source_table('quiz_feedback', array('quizid' => backup::VAR_PARENTID));
|
||||
$feedback->set_source_table('quiz_feedback',
|
||||
array('quizid' => backup::VAR_PARENTID));
|
||||
|
||||
// Quiz overrides to backup are different depending of user info
|
||||
$overrideparams = array('quiz' => backup::VAR_PARENTID);
|
||||
|
@ -40,12 +40,14 @@ class restore_quiz_activity_structure_step extends restore_questions_activity_st
|
||||
$userinfo = $this->get_setting_value('userinfo');
|
||||
|
||||
$paths[] = new restore_path_element('quiz', '/activity/quiz');
|
||||
$paths[] = new restore_path_element('quiz_question_instance', '/activity/quiz/question_instances/question_instance');
|
||||
$paths[] = new restore_path_element('quiz_question_instance',
|
||||
'/activity/quiz/question_instances/question_instance');
|
||||
$paths[] = new restore_path_element('quiz_feedback', '/activity/quiz/feedbacks/feedback');
|
||||
$paths[] = new restore_path_element('quiz_override', '/activity/quiz/overrides/override');
|
||||
if ($userinfo) {
|
||||
$paths[] = new restore_path_element('quiz_grade', '/activity/quiz/grades/grade');
|
||||
$quizattempt = new restore_path_element('quiz_attempt', '/activity/quiz/attempts/attempt');
|
||||
$quizattempt = new restore_path_element('quiz_attempt',
|
||||
'/activity/quiz/attempts/attempt');
|
||||
$paths[] = $quizattempt;
|
||||
// Add states and sessions
|
||||
$this->add_question_attempts_states($quizattempt, $paths);
|
||||
@ -101,58 +103,82 @@ class restore_quiz_activity_structure_step extends restore_questions_activity_st
|
||||
define('QUIZ_OLD_OPEN', 0x3c00fc0);
|
||||
define('QUIZ_OLD_CLOSED', 0x3c03f000);
|
||||
|
||||
define('QUIZ_OLD_RESPONSES', 1*0x1041); // Show responses
|
||||
define('QUIZ_OLD_SCORES', 2*0x1041); // Show scores
|
||||
define('QUIZ_OLD_FEEDBACK', 4*0x1041); // Show question feedback
|
||||
define('QUIZ_OLD_ANSWERS', 8*0x1041); // Show correct answers
|
||||
define('QUIZ_OLD_SOLUTIONS', 16*0x1041); // Show solutions
|
||||
define('QUIZ_OLD_GENERALFEEDBACK',32*0x1041); // Show question general feedback
|
||||
define('QUIZ_OLD_OVERALLFEEDBACK', 1*0x4440000); // Show quiz overall feedback
|
||||
define('QUIZ_OLD_RESPONSES', 1*0x1041);
|
||||
define('QUIZ_OLD_SCORES', 2*0x1041);
|
||||
define('QUIZ_OLD_FEEDBACK', 4*0x1041);
|
||||
define('QUIZ_OLD_ANSWERS', 8*0x1041);
|
||||
define('QUIZ_OLD_SOLUTIONS', 16*0x1041);
|
||||
define('QUIZ_OLD_GENERALFEEDBACK', 32*0x1041);
|
||||
define('QUIZ_OLD_OVERALLFEEDBACK', 1*0x4440000);
|
||||
}
|
||||
|
||||
$oldreview = $data->review;
|
||||
|
||||
$data->reviewattempt =
|
||||
mod_quiz_display_options::DURING |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_RESPONSES ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_RESPONSES ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_RESPONSES ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_RESPONSES ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_RESPONSES ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_RESPONSES ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
|
||||
$data->reviewcorrectness =
|
||||
mod_quiz_display_options::DURING |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_SCORES ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_SCORES ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_SCORES ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_SCORES ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_SCORES ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_SCORES ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
|
||||
$data->reviewmarks =
|
||||
mod_quiz_display_options::DURING |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_SCORES ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_SCORES ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_SCORES ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_SCORES ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_SCORES ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_SCORES ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
|
||||
$data->reviewspecificfeedback =
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_FEEDBACK ? mod_quiz_display_options::DURING : 0) |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_FEEDBACK ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_FEEDBACK ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_FEEDBACK ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_FEEDBACK ?
|
||||
mod_quiz_display_options::DURING : 0) |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_FEEDBACK ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_FEEDBACK ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_FEEDBACK ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
|
||||
$data->reviewgeneralfeedback =
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_GENERALFEEDBACK ? mod_quiz_display_options::DURING : 0) |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_GENERALFEEDBACK ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_GENERALFEEDBACK ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_GENERALFEEDBACK ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_GENERALFEEDBACK ?
|
||||
mod_quiz_display_options::DURING : 0) |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_GENERALFEEDBACK ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_GENERALFEEDBACK ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_GENERALFEEDBACK ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
|
||||
$data->reviewrightanswer =
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_ANSWERS ? mod_quiz_display_options::DURING : 0) |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_ANSWERS ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_ANSWERS ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_ANSWERS ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_ANSWERS ?
|
||||
mod_quiz_display_options::DURING : 0) |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_ANSWERS ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_ANSWERS ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_ANSWERS ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
|
||||
$data->reviewoverallfeedback =
|
||||
0 |
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_OVERALLFEEDBACK ? mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_OVERALLFEEDBACK ? mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_OVERALLFEEDBACK ? mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
($oldreview & QUIZ_OLD_IMMEDIATELY & QUIZ_OLD_OVERALLFEEDBACK ?
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER : 0) |
|
||||
($oldreview & QUIZ_OLD_OPEN & QUIZ_OLD_OVERALLFEEDBACK ?
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN : 0) |
|
||||
($oldreview & QUIZ_OLD_CLOSED & QUIZ_OLD_OVERALLFEEDBACK ?
|
||||
mod_quiz_display_options::AFTER_CLOSE : 0);
|
||||
}
|
||||
|
||||
// insert the quiz record
|
||||
|
@ -67,7 +67,8 @@ if (data_submitted() && confirm_sesskey()) {
|
||||
}
|
||||
|
||||
// Print the comment form.
|
||||
echo '<form method="post" class="mform" id="manualgradingform" action="' . $CFG->wwwroot . '/mod/quiz/comment.php">';
|
||||
echo '<form method="post" class="mform" id="manualgradingform" action="' .
|
||||
$CFG->wwwroot . '/mod/quiz/comment.php">';
|
||||
echo $attemptobj->render_question_for_commenting($slot);
|
||||
?>
|
||||
<div>
|
||||
@ -83,8 +84,10 @@ echo $attemptobj->render_question_for_commenting($slot);
|
||||
<div class="fgrouplabel"><label> </label></div>
|
||||
</div>
|
||||
<fieldset class="felement fgroup">
|
||||
<input id="id_submitbutton" type="submit" name="submit" value="<?php print_string('save', 'quiz'); ?>"/>
|
||||
<input id="id_cancel" type="button" value="<?php print_string('cancel'); ?>" onclick="close_window()"/>
|
||||
<input id="id_submitbutton" type="submit" name="submit" value="<?php
|
||||
print_string('save', 'quiz'); ?>"/>
|
||||
<input id="id_cancel" type="button" value="<?php
|
||||
print_string('cancel'); ?>" onclick="close_window()"/>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -75,7 +75,7 @@ foreach ($quizzes as $quiz) {
|
||||
if (quiz_has_feedback($quiz)) {
|
||||
$showfeedback=true;
|
||||
}
|
||||
if($showclosingheader && $showfeedback) {
|
||||
if ($showclosingheader && $showfeedback) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -99,7 +99,8 @@ if (has_capability('mod/quiz:viewreports', $coursecontext)) {
|
||||
array_push($align, 'left');
|
||||
$showing = 'stats';
|
||||
|
||||
} else if (has_any_capability(array('mod/quiz:reviewmyattempts', 'mod/quiz:attempt'), $coursecontext)) {
|
||||
} else if (has_any_capability(array('mod/quiz:reviewmyattempts', 'mod/quiz:attempt'),
|
||||
$coursecontext)) {
|
||||
array_push($headings, get_string('grade', 'quiz'));
|
||||
array_push($align, 'left');
|
||||
if ($showfeedback) {
|
||||
@ -146,7 +147,8 @@ foreach ($quizzes as $quiz) {
|
||||
if (!$quiz->visible) {
|
||||
$class = ' class="dimmed"';
|
||||
}
|
||||
$data[] = "<a$class href=\"view.php?id=$quiz->coursemodule\">" . format_string($quiz->name, true) . '</a>';
|
||||
$data[] = "<a$class href=\"view.php?id=$quiz->coursemodule\">" .
|
||||
format_string($quiz->name, true) . '</a>';
|
||||
|
||||
// Close date.
|
||||
if ($quiz->timeclose) {
|
||||
@ -163,11 +165,12 @@ foreach ($quizzes as $quiz) {
|
||||
} else if ($showing == 'grades') {
|
||||
// Grade and feedback.
|
||||
$attempts = quiz_get_user_attempts($quiz->id, $USER->id, 'all');
|
||||
list($someoptions, $alloptions) = quiz_get_combined_reviewoptions($quiz, $attempts, $context);
|
||||
list($someoptions, $alloptions) = quiz_get_combined_reviewoptions(
|
||||
$quiz, $attempts, $context);
|
||||
|
||||
$grade = '';
|
||||
$feedback = '';
|
||||
if ($quiz->grade && array_key_exists($quiz->id, grades)) {
|
||||
if ($quiz->grade && array_key_exists($quiz->id, $grades)) {
|
||||
if ($alloptions->marks >= question_display_options::MARK_AND_MAX) {
|
||||
$a = new stdClass();
|
||||
$a->grade = quiz_format_grade($quiz, $grades[$quiz->id]);
|
||||
|
@ -88,8 +88,7 @@ echo $OUTPUT->header();
|
||||
if ($override->groupid) {
|
||||
$group = $DB->get_record('groups', array('id' => $override->groupid), 'id,name');
|
||||
$confirmstr = get_string("overridedeletegroupsure", "quiz", $group->name);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$user = $DB->get_record('user', array('id' => $override->userid), 'id,firstname,lastname');
|
||||
$confirmstr = get_string("overridedeleteusersure", "quiz", fullname($user));
|
||||
}
|
||||
|
@ -31,10 +31,10 @@ require_once($CFG->dirroot.'/mod/quiz/locallib.php');
|
||||
require_once($CFG->dirroot.'/mod/quiz/override_form.php');
|
||||
|
||||
|
||||
$cmid = optional_param('cmid', 0, PARAM_INT); // course module ID, if new override
|
||||
$overrideid = optional_param('id', 0, PARAM_INT); // override ID, if editing existing override
|
||||
$action = optional_param('action', null, PARAM_ALPHA); // if creating new override, one of 'adduser','addgroup', or 'duplicate'
|
||||
$reset = optional_param('reset', false, PARAM_BOOL); // reset form to defaults
|
||||
$cmid = optional_param('cmid', 0, PARAM_INT);
|
||||
$overrideid = optional_param('id', 0, PARAM_INT);
|
||||
$action = optional_param('action', null, PARAM_ALPHA);
|
||||
$reset = optional_param('reset', false, PARAM_BOOL);
|
||||
|
||||
$override = null;
|
||||
if ($overrideid) {
|
||||
@ -84,28 +84,29 @@ require_capability('mod/quiz:manageoverrides', $context);
|
||||
if ($overrideid) {
|
||||
// editing override
|
||||
$data = clone $override;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
// new override
|
||||
$data = new stdClass();
|
||||
}
|
||||
|
||||
// merge quiz defaults with data
|
||||
$keys = array('timeopen','timeclose', 'timelimit', 'attempts', 'password');
|
||||
$keys = array('timeopen', 'timeclose', 'timelimit', 'attempts', 'password');
|
||||
foreach ($keys as $key) {
|
||||
if (!isset($data->{$key}) || $reset) {
|
||||
$data->{$key} = $quiz->{$key};
|
||||
}
|
||||
}
|
||||
|
||||
// If we are duplicating an override, then clear the user/group and override id since they will change
|
||||
// If we are duplicating an override, then clear the user/group and override id
|
||||
// since they will change.
|
||||
if ($action === 'duplicate') {
|
||||
$override->id = null;
|
||||
$override->userid = null;
|
||||
$override->groupid = null;
|
||||
}
|
||||
|
||||
$groupmode = !empty($data->groupid) || ($action === 'addgroup' && empty($overrideid)); // true if group-based override
|
||||
// true if group-based override
|
||||
$groupmode = !empty($data->groupid) || ($action === 'addgroup' && empty($overrideid));
|
||||
|
||||
$overridelisturl = new moodle_url('/mod/quiz/overrides.php', array('cmid'=>$cm->id));
|
||||
if (!$groupmode) {
|
||||
@ -151,7 +152,7 @@ if ($mform->is_cancelled()) {
|
||||
if ($oldoverride = $DB->get_record('quiz_overrides', $conditions)) {
|
||||
// There is an old override, so we merge any new settings on top of
|
||||
// the older override
|
||||
foreach ($keys as $key) {
|
||||
foreach ($keys as $key) {
|
||||
if (is_null($fromform->{$key})) {
|
||||
$fromform->{$key} = $oldoverride->{$key};
|
||||
}
|
||||
@ -164,8 +165,7 @@ if ($mform->is_cancelled()) {
|
||||
if (!empty($override->id)) {
|
||||
$fromform->id = $override->id;
|
||||
$DB->update_record('quiz_overrides', $fromform);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
unset($fromform->id);
|
||||
$fromform->id = $DB->insert_record('quiz_overrides', $fromform);
|
||||
}
|
||||
|
@ -85,7 +85,8 @@ if (!$attemptobj->is_preview_user()) {
|
||||
|
||||
// If the attempt is already closed, send them to the review page.
|
||||
if ($attemptobj->is_finished()) {
|
||||
throw new moodle_quiz_exception($attemptobj->get_quizobj(), 'attemptalreadyclosed', null, $attemptobj->review_url());
|
||||
throw new moodle_quiz_exception($attemptobj->get_quizobj(),
|
||||
'attemptalreadyclosed', null, $attemptobj->review_url());
|
||||
}
|
||||
|
||||
// Don't log - we will end with a redirect to a page that is logged.
|
||||
@ -94,7 +95,7 @@ if (!$finishattempt) {
|
||||
// Just process the responses for this page and go to the next page.
|
||||
try {
|
||||
$attemptobj->process_all_actions($timenow);
|
||||
} catch (question_out_of_sequence_exception $e){
|
||||
} catch (question_out_of_sequence_exception $e) {
|
||||
print_error('submissionoutofsequencefriendlymessage', 'question',
|
||||
$attemptobj->attempt_url(0, $thispage));
|
||||
}
|
||||
|
@ -88,13 +88,17 @@ add_to_log($course->id, 'quiz', 'report', 'report.php?id=' . $cm->id . '&mode='
|
||||
$quiz->id, $cm->id);
|
||||
|
||||
// Open the selected quiz report and display it
|
||||
include("report/$mode/report.php");
|
||||
$file = $CFG->dirroot . '/mod/quiz/report/' . $mode . '/report.php';
|
||||
if (is_readable($file)) {
|
||||
include_once($file);
|
||||
}
|
||||
$reportclassname = 'quiz_' . $mode . '_report';
|
||||
$report = new $reportclassname();
|
||||
|
||||
if (!$report->display($quiz, $cm, $course)) {
|
||||
if (!class_exists($reportclassname)) {
|
||||
print_error('preprocesserror', 'quiz');
|
||||
}
|
||||
|
||||
$report = new $reportclassname();
|
||||
$report->display($quiz, $cm, $course);
|
||||
|
||||
// Print footer
|
||||
echo $OUTPUT->footer();
|
||||
|
@ -66,11 +66,14 @@ class quiz_grading_settings extends moodleform {
|
||||
if ($type == 'autograded' && !$this->includeauto) {
|
||||
continue;
|
||||
}
|
||||
$gradeoptions[$type] = get_string('gradeattempts' . $type, 'quiz_grading', $this->counts->$type);
|
||||
$gradeoptions[$type] = get_string('gradeattempts' . $type, 'quiz_grading',
|
||||
$this->counts->$type);
|
||||
}
|
||||
$mform->addElement('select', 'grade', get_string('attemptstograde', 'quiz_grading'), $gradeoptions);
|
||||
$mform->addElement('select', 'grade', get_string('attemptstograde', 'quiz_grading'),
|
||||
$gradeoptions);
|
||||
|
||||
$mform->addElement('text', 'pagesize', get_string('questionsperpage', 'quiz_grading'), array('size' => 3));
|
||||
$mform->addElement('text', 'pagesize', get_string('questionsperpage', 'quiz_grading'),
|
||||
array('size' => 3));
|
||||
$mform->setType('pagesize', PARAM_INT);
|
||||
|
||||
$orderoptions = array(
|
||||
@ -83,7 +86,8 @@ class quiz_grading_settings extends moodleform {
|
||||
if ($this->showidnumbers) {
|
||||
$orderoptions['idnumber'] = get_string('bystudentidnumber', 'quiz_grading');
|
||||
}
|
||||
$mform->addElement('select', 'order', get_string('orderattempts', 'quiz_grading'), $orderoptions);
|
||||
$mform->addElement('select', 'order', get_string('orderattempts', 'quiz_grading'),
|
||||
$orderoptions);
|
||||
|
||||
foreach ($this->hidden as $name => $value) {
|
||||
$mform->addElement('hidden', $name, $value);
|
||||
|
@ -534,7 +534,8 @@ class quiz_grading_report extends quiz_default_report {
|
||||
|
||||
$params = array();
|
||||
if ($orderby == 'date') {
|
||||
list($statetest, $params) = $dm->in_summary_state_test('manuallygraded', false, 'mangrstate');
|
||||
list($statetest, $params) = $dm->in_summary_state_test(
|
||||
'manuallygraded', false, 'mangrstate');
|
||||
$orderby = "(
|
||||
SELECT MAX(sortqas.timecreated)
|
||||
FROM {question_attempt_steps} sortqas
|
||||
|
@ -48,7 +48,9 @@ if ($groupid && $groupmode = groups_get_activity_groupmode($cm)) {
|
||||
print_error('errorinvalidgroup', 'group', null, $groupid);
|
||||
}
|
||||
$group = $groups[$groupid];
|
||||
$groupusers = get_users_by_capability($modcontext, array('mod/quiz:reviewmyattempts', 'mod/quiz:attempt'),'','','','',$group->id,'',false);
|
||||
$groupusers = get_users_by_capability($modcontext,
|
||||
array('mod/quiz:reviewmyattempts', 'mod/quiz:attempt'),
|
||||
'', '', '', '', $group->id, '', false);
|
||||
if (!$groupusers) {
|
||||
print_error('nostudentsingroup');
|
||||
}
|
||||
@ -57,7 +59,7 @@ if ($groupid && $groupmode = groups_get_activity_groupmode($cm)) {
|
||||
$groupusers = array();
|
||||
}
|
||||
|
||||
$line = new graph(800,600);
|
||||
$line = new graph(800, 600);
|
||||
$line->parameter['title'] = '';
|
||||
$line->parameter['y_label_left'] = get_string('participants');
|
||||
$line->parameter['x_label'] = get_string('grade');
|
||||
@ -69,8 +71,10 @@ $line->parameter['x_axis_angle'] = 60;
|
||||
$line->y_tick_labels = null;
|
||||
$line->offset_relation = null;
|
||||
|
||||
$line->parameter['bar_size'] = 1; // will make size > 1 to get overlap effect when showing groups
|
||||
$line->parameter['bar_spacing'] = 10; // don't forget to increase spacing so that graph doesn't become one big block of colour
|
||||
// will make size > 1 to get overlap effect when showing groups
|
||||
$line->parameter['bar_size'] = 1;
|
||||
// don't forget to increase spacing so that graph doesn't become one big block of colour
|
||||
$line->parameter['bar_spacing'] = 10;
|
||||
|
||||
//pick a sensible number of bands depending on quiz maximum grade.
|
||||
$bands = $quiz->grade;
|
||||
|
@ -180,7 +180,8 @@ class quiz_responses_report extends quiz_attempt_report {
|
||||
if ($hasquestions && ($hasstudents || $attemptsmode == QUIZ_REPORT_ATTEMPTS_ALL)) {
|
||||
// Print information on the grading method and whether we are displaying
|
||||
if (!$table->is_downloading()) { //do not print notices when downloading
|
||||
if ($strattempthighlight = quiz_report_highlighting_grading_method($quiz, $qmsubselect, $qmfilter)) {
|
||||
if ($strattempthighlight = quiz_report_highlighting_grading_method(
|
||||
$quiz, $qmsubselect, $qmfilter)) {
|
||||
echo '<div class="quizattemptcounts">' . $strattempthighlight . '</div>';
|
||||
}
|
||||
}
|
||||
@ -198,7 +199,7 @@ class quiz_responses_report extends quiz_attempt_report {
|
||||
|
||||
if (!$table->is_downloading() && $candelete) {
|
||||
$columns[] = 'checkbox';
|
||||
$headers[] = NULL;
|
||||
$headers[] = null;
|
||||
}
|
||||
|
||||
$this->add_user_columns($table, $columns, $headers);
|
||||
|
@ -65,7 +65,7 @@ class quiz_report_responses_table extends quiz_attempt_report_table {
|
||||
echo html_writer::input_hidden_params($url);
|
||||
echo '<div>';
|
||||
$PAGE->requires->event_handler('#attemptsform', 'submit', 'M.util.show_confirm_dialog',
|
||||
array('message' => get_string('deleteattemptcheck','quiz')));
|
||||
array('message' => get_string('deleteattemptcheck', 'quiz')));
|
||||
}
|
||||
|
||||
public function wrap_html_finish() {
|
||||
@ -97,7 +97,8 @@ class quiz_report_responses_table extends quiz_attempt_report_table {
|
||||
return $grade;
|
||||
}
|
||||
|
||||
$gradehtml = '<a href="review.php?q='.$this->quiz->id.'&attempt='.$attempt->attempt.'">'.$grade.'</a>';
|
||||
$gradehtml = '<a href="review.php?q=' . $this->quiz->id . '&attempt=' .
|
||||
$attempt->attempt . '">' . $grade . '</a>';
|
||||
return $gradehtml;
|
||||
}
|
||||
|
||||
@ -139,7 +140,7 @@ class quiz_report_responses_table extends quiz_attempt_report_table {
|
||||
return $this->data_col($matches[1], 'rightanswer', $attempt);
|
||||
|
||||
} else {
|
||||
return NULL;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,14 +52,14 @@ class question_reportlib_test extends UnitTestCase {
|
||||
$object->grade = 3;
|
||||
$datum[] = $object;
|
||||
|
||||
$indexed = quiz_report_index_by_keys($datum, array('aid','qid'));
|
||||
$indexed = quiz_report_index_by_keys($datum, array('aid', 'qid'));
|
||||
|
||||
$this->assertEqual($indexed[101][3]->qid, 3);
|
||||
$this->assertEqual($indexed[101][3]->aid, 101);
|
||||
$this->assertEqual($indexed[101][3]->response, '');
|
||||
$this->assertEqual($indexed[101][3]->grade, 3);
|
||||
|
||||
$indexed = quiz_report_index_by_keys($datum, array('aid','qid'), false);
|
||||
$indexed = quiz_report_index_by_keys($datum, array('aid', 'qid'), false);
|
||||
|
||||
$this->assertEqual($indexed[101][3][0]->qid, 3);
|
||||
$this->assertEqual($indexed[101][3][0]->aid, 101);
|
||||
|
@ -32,11 +32,12 @@ require_once($CFG->dirroot . '/question/engine/compatibility.php');
|
||||
/**
|
||||
* Quiz statistics report cron code. Deletes cached data more than a certain age.
|
||||
*/
|
||||
function quiz_report_statistics_cron() {
|
||||
function quiz_report_statistics_cron() {
|
||||
global $DB;
|
||||
|
||||
$expiretime = time() - 5*HOURSECS;
|
||||
$todelete = $DB->get_records_select_menu('quiz_statistics', 'timemodified < ?', array($expiretime), '', 'id,1');
|
||||
$todelete = $DB->get_records_select_menu('quiz_statistics', 'timemodified < ?',
|
||||
array($expiretime), '', 'id, 1');
|
||||
|
||||
if (!$todelete) {
|
||||
return true;
|
||||
@ -44,15 +45,18 @@ require_once($CFG->dirroot . '/question/engine/compatibility.php');
|
||||
|
||||
list($todeletesql, $todeleteparams) = $DB->get_in_or_equal(array_keys($todelete));
|
||||
|
||||
if (!$DB->delete_records_select('quiz_question_statistics', 'quizstatisticsid ' . $todeletesql, $todeleteparams)){
|
||||
if (!$DB->delete_records_select('quiz_question_statistics',
|
||||
'quizstatisticsid ' . $todeletesql, $todeleteparams)) {
|
||||
mtrace('Error deleting out of date quiz_question_statistics records.');
|
||||
}
|
||||
|
||||
if (!$DB->delete_records_select('quiz_question_response_stats', 'quizstatisticsid ' . $todeletesql, $todeleteparams)) {
|
||||
if (!$DB->delete_records_select('quiz_question_response_stats',
|
||||
'quizstatisticsid ' . $todeletesql, $todeleteparams)) {
|
||||
mtrace('Error deleting out of date quiz_question_response_stats records.');
|
||||
}
|
||||
|
||||
if (!$DB->delete_records_select('quiz_statistics', 'id ' . $todeletesql, $todeleteparams)){
|
||||
if (!$DB->delete_records_select('quiz_statistics',
|
||||
'id ' . $todeletesql, $todeleteparams)) {
|
||||
mtrace('Error deleting out of date quiz_statistics records.');
|
||||
}
|
||||
|
||||
|
@ -67,8 +67,9 @@ class quiz_statistics_response_analyser {
|
||||
public function __construct($questiondata) {
|
||||
$this->questiondata = $questiondata;
|
||||
|
||||
$this->responseclasses = question_bank::get_qtype($questiondata->qtype)->
|
||||
get_possible_responses($questiondata);
|
||||
$this->responseclasses =
|
||||
question_bank::get_qtype($questiondata->qtype)->get_possible_responses(
|
||||
$questiondata);
|
||||
foreach ($this->responseclasses as $subpartid => $responseclasses) {
|
||||
foreach ($responseclasses as $responseclassid => $notused) {
|
||||
$this->responses[$subpartid][$responseclassid] = array();
|
||||
@ -138,7 +139,8 @@ class quiz_statistics_response_analyser {
|
||||
|
||||
$partresponses = $qa->classify_response();
|
||||
foreach ($partresponses as $subpartid => $partresponse) {
|
||||
if (!isset($this->responses[$subpartid][$partresponse->responseclassid][$partresponse->response])) {
|
||||
if (!isset($this->responses[$subpartid][$partresponse->responseclassid]
|
||||
[$partresponse->response])) {
|
||||
$resp = new stdClass();
|
||||
$resp->count = 0;
|
||||
if (!is_null($partresponse->fraction)) {
|
||||
@ -169,7 +171,8 @@ class quiz_statistics_response_analyser {
|
||||
global $DB;
|
||||
|
||||
$rows = $DB->get_records('quiz_question_response_stats',
|
||||
array('quizstatisticsid' => $quizstatisticsid, 'questionid' => $this->questiondata->id));
|
||||
array('quizstatisticsid' => $quizstatisticsid,
|
||||
'questionid' => $this->questiondata->id));
|
||||
if (!$rows) {
|
||||
return false;
|
||||
}
|
||||
@ -191,7 +194,8 @@ class quiz_statistics_response_analyser {
|
||||
global $DB;
|
||||
|
||||
if (!$this->loaded) {
|
||||
throw new coding_exception('Question responses have not been analyised. Cannot store in the database.');
|
||||
throw new coding_exception(
|
||||
'Question responses have not been analyised. Cannot store in the database.');
|
||||
}
|
||||
|
||||
foreach ($this->responses as $subpartid => $partdata) {
|
||||
|
@ -40,14 +40,17 @@ class quiz_statistics_statistics_settings_form extends moodleform {
|
||||
protected function definition() {
|
||||
$mform = $this->_form;
|
||||
|
||||
$mform->addElement('header', 'preferencespage', get_string('preferencespage', 'quiz_overview'));
|
||||
$mform->addElement('header', 'preferencespage',
|
||||
get_string('preferencespage', 'quiz_overview'));
|
||||
|
||||
$options = array();
|
||||
$options[0] = get_string('attemptsfirst','quiz_statistics');
|
||||
$options[1] = get_string('attemptsall','quiz_statistics');
|
||||
$mform->addElement('select', 'useallattempts', get_string('calculatefrom', 'quiz_statistics'), $options);
|
||||
$options[0] = get_string('attemptsfirst', 'quiz_statistics');
|
||||
$options[1] = get_string('attemptsall', 'quiz_statistics');
|
||||
$mform->addElement('select', 'useallattempts',
|
||||
get_string('calculatefrom', 'quiz_statistics'), $options);
|
||||
$mform->setDefault('useallattempts', 0);
|
||||
|
||||
$mform->addElement('submit', 'submitbutton', get_string('preferencessave', 'quiz_overview'));
|
||||
$mform->addElement('submit', 'submitbutton',
|
||||
get_string('preferencessave', 'quiz_overview'));
|
||||
}
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ $questionstatistics = $DB->get_records_select('quiz_question_statistics',
|
||||
'quizstatisticsid = ? AND slot IS NOT NULL', array($quizstatistics->id));
|
||||
|
||||
// Create the graph, and set the basic options.
|
||||
$graph = new graph(800,600);
|
||||
$graph = new graph(800, 600);
|
||||
$graph->parameter['title'] = '';
|
||||
|
||||
$graph->parameter['y_label_left'] = '%';
|
||||
|
@ -62,7 +62,8 @@ class quiz_report_statistics_question_table extends flexible_table {
|
||||
* @param object $question a question with a _stats field
|
||||
* @param bool $hassubqs
|
||||
*/
|
||||
public function setup($reporturl, $questiondata, quiz_statistics_response_analyser $responesstats) {
|
||||
public function setup($reporturl, $questiondata,
|
||||
quiz_statistics_response_analyser $responesstats) {
|
||||
$this->questiondata = $questiondata;
|
||||
|
||||
$this->define_baseurl($reporturl->out());
|
||||
|
@ -284,7 +284,8 @@ class quiz_report_statistics_table extends flexible_table {
|
||||
$negcovar = get_string('negcovar', 'quiz_statistics');
|
||||
|
||||
if (!$this->is_downloading()) {
|
||||
$negcovar .= helpbutton('negcovar', $negcovar, 'quiz_statistics', true, false, '', true);
|
||||
$negcovar .= helpbutton('negcovar', $negcovar, 'quiz_statistics',
|
||||
true, false, '', true);
|
||||
$negcovar = '<div class="negcovar">' . $negcovar . '</div>';
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,8 @@ if ($attemptobj->is_own_attempt()) {
|
||||
die();
|
||||
} else if (!$options->responses) {
|
||||
$accessmanager = $attemptobj->get_access_manager(time());
|
||||
echo $OUTPUT->notification($accessmanager->cannot_review_message($attemptobj->get_review_options()));
|
||||
echo $OUTPUT->notification($accessmanager->cannot_review_message(
|
||||
$attemptobj->get_review_options()));
|
||||
echo $OUTPUT->close_window_button();
|
||||
echo $OUTPUT->footer();
|
||||
die();
|
||||
|
@ -116,11 +116,13 @@ $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/penaltys
|
||||
|
||||
// Each attempt builds on last.
|
||||
$quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/attemptonlast',
|
||||
get_string('eachattemptbuildsonthelast', 'quiz'), get_string('configeachattemptbuildsonthelast', 'quiz'),
|
||||
get_string('eachattemptbuildsonthelast', 'quiz'),
|
||||
get_string('configeachattemptbuildsonthelast', 'quiz'),
|
||||
array('value' => 0, 'adv' => true)));
|
||||
|
||||
// Review options.
|
||||
$quizsettings->add(new admin_setting_heading('reviewheading', get_string('reviewoptionsheading', 'quiz'), ''));
|
||||
$quizsettings->add(new admin_setting_heading('reviewheading',
|
||||
get_string('reviewoptionsheading', 'quiz'), ''));
|
||||
foreach (mod_quiz_admin_review_setting::fields() as $field => $name) {
|
||||
$default = mod_quiz_admin_review_setting::all_on();
|
||||
$forceduring = null;
|
||||
@ -154,7 +156,8 @@ for ($i = 0; $i <= QUIZ_MAX_Q_DECIMAL_OPTION; $i++) {
|
||||
$options[$i] = $i;
|
||||
}
|
||||
$quizsettings->add(new admin_setting_configselect_with_advanced('quiz/questiondecimalpoints',
|
||||
get_string('decimalplacesquestion', 'quiz'), get_string('configdecimalplacesquestion', 'quiz'),
|
||||
get_string('decimalplacesquestion', 'quiz'),
|
||||
get_string('configdecimalplacesquestion', 'quiz'),
|
||||
array('value' => -1, 'fix' => true), $options));
|
||||
|
||||
// Show blocks during quiz attempts
|
||||
@ -185,19 +188,21 @@ $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/popup',
|
||||
get_string('showinsecurepopup', 'quiz'), get_string('configpopup', 'quiz'),
|
||||
array('value' => 0, 'adv' => true)));
|
||||
|
||||
/// Now, depending on whether any reports have their own settings page, add
|
||||
/// the quiz setting page to the appropriate place in the tree.
|
||||
// Now, depending on whether any reports have their own settings page, add
|
||||
// the quiz setting page to the appropriate place in the tree.
|
||||
if (empty($reportsbyname)) {
|
||||
$ADMIN->add('modsettings', $quizsettings);
|
||||
} else {
|
||||
$ADMIN->add('modsettings', new admin_category('modsettingsquizcat', get_string('modulename', 'quiz'), !$module->visible));
|
||||
$ADMIN->add('modsettings', new admin_category('modsettingsquizcat',
|
||||
get_string('modulename', 'quiz'), !$module->visible));
|
||||
$ADMIN->add('modsettingsquizcat', $quizsettings);
|
||||
|
||||
/// Add the report pages for the settings.php files in sub directories of mod/quiz/report
|
||||
// Add the report pages for the settings.php files in sub directories of mod/quiz/report
|
||||
foreach ($reportsbyname as $strreportname => $report) {
|
||||
$reportname = $report;
|
||||
|
||||
$settings = new admin_settingpage('modsettingsquizcat'.$reportname, $strreportname, 'moodle/site:config', !$module->visible);
|
||||
$settings = new admin_settingpage('modsettingsquizcat'.$reportname,
|
||||
$strreportname, 'moodle/site:config', !$module->visible);
|
||||
if ($ADMIN->fulltree) {
|
||||
include($CFG->dirroot."/mod/quiz/report/$reportname/settings.php");
|
||||
}
|
||||
@ -205,4 +210,4 @@ if (empty($reportsbyname)) {
|
||||
}
|
||||
}
|
||||
|
||||
$settings = NULL; // we do not want standard settings link
|
||||
$settings = null; // we do not want standard settings link
|
||||
|
@ -68,7 +68,8 @@ class mod_quiz_admin_review_setting extends admin_setting {
|
||||
);
|
||||
}
|
||||
|
||||
public function __construct($name, $visiblename, $description, $defaultsetting, $duringstate = null) {
|
||||
public function __construct($name, $visiblename, $description,
|
||||
$defaultsetting, $duringstate = null) {
|
||||
$this->duringstate = $duringstate;
|
||||
parent::__construct($name, $visiblename, $description, $defaultsetting);
|
||||
}
|
||||
|
@ -105,11 +105,13 @@ class quiz_locallib_test extends UnitTestCase {
|
||||
$quiz->sumgrades = 10;
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, false), 0.12345678);
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, true), format_float(0.12, 2));
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, 'question'), format_float(0.123, 3));
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, 'question'),
|
||||
format_float(0.123, 3));
|
||||
$quiz->sumgrades = 5;
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, false), 0.24691356);
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, true), format_float(0.25, 2));
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, 'question'), format_float(0.247, 3));
|
||||
$this->assertEqual(quiz_rescale_grade(0.12345678, $quiz, 'question'),
|
||||
format_float(0.247, 3));
|
||||
}
|
||||
|
||||
public function test_quiz_get_slot_for_question() {
|
||||
|
@ -49,7 +49,8 @@ class mod_quiz_display_options_test extends UnitTestCase {
|
||||
$quiz->reviewrightanswer = 0x00100;
|
||||
$quiz->reviewoverallfeedback = 0x00010;
|
||||
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz, mod_quiz_display_options::DURING);
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz,
|
||||
mod_quiz_display_options::DURING);
|
||||
|
||||
$this->assertEqual(true, $options->attempt);
|
||||
$this->assertEqual(mod_quiz_display_options::VISIBLE, $options->correctness);
|
||||
@ -57,19 +58,22 @@ class mod_quiz_display_options_test extends UnitTestCase {
|
||||
$this->assertEqual(2, $options->markdp);
|
||||
|
||||
$quiz->questiondecimalpoints = 5;
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz, mod_quiz_display_options::IMMEDIATELY_AFTER);
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz,
|
||||
mod_quiz_display_options::IMMEDIATELY_AFTER);
|
||||
|
||||
$this->assertEqual(mod_quiz_display_options::MARK_AND_MAX, $options->marks);
|
||||
$this->assertEqual(mod_quiz_display_options::VISIBLE, $options->generalfeedback);
|
||||
$this->assertEqual(mod_quiz_display_options::HIDDEN, $options->feedback);
|
||||
$this->assertEqual(5, $options->markdp);
|
||||
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz, mod_quiz_display_options::LATER_WHILE_OPEN);
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz,
|
||||
mod_quiz_display_options::LATER_WHILE_OPEN);
|
||||
|
||||
$this->assertEqual(mod_quiz_display_options::VISIBLE, $options->rightanswer);
|
||||
$this->assertEqual(mod_quiz_display_options::HIDDEN, $options->generalfeedback);
|
||||
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz, mod_quiz_display_options::AFTER_CLOSE);
|
||||
$options = mod_quiz_display_options::make_from_quiz($quiz,
|
||||
mod_quiz_display_options::AFTER_CLOSE);
|
||||
|
||||
$this->assertEqual(mod_quiz_display_options::VISIBLE, $options->overallfeedback);
|
||||
$this->assertEqual(mod_quiz_display_options::HIDDEN, $options->rightanswer);
|
||||
|
@ -72,16 +72,17 @@ if (!$quizobj->is_preview_user()) {
|
||||
|
||||
// Check to see if a new preview was requested.
|
||||
if ($quizobj->is_preview_user() && $forcenew) {
|
||||
// To force the creation of a new preview, we set a finish time on the
|
||||
// current attempt (if any). It will then automatically be deleted below
|
||||
$DB->set_field('quiz_attempts', 'timefinish', time(), array('quiz' => $quiz->id, 'userid' => $USER->id));
|
||||
// To force the creation of a new preview, we set a finish time on the
|
||||
// current attempt (if any). It will then automatically be deleted below
|
||||
$DB->set_field('quiz_attempts', 'timefinish', time(),
|
||||
array('quiz' => $quiz->id, 'userid' => $USER->id));
|
||||
}
|
||||
|
||||
// Look for an existing attempt.
|
||||
$lastattempt = quiz_get_latest_attempt_by_user($quiz->id, $USER->id);
|
||||
|
||||
if ($lastattempt && !$lastattempt->timefinish) {
|
||||
// Continuation of an attempt - check password then redirect.
|
||||
// Continuation of an attempt - check password then redirect.
|
||||
$accessmanager->do_password_check($quizobj->is_preview_user());
|
||||
redirect($quizobj->attempt_url($lastattempt->id));
|
||||
}
|
||||
@ -110,7 +111,8 @@ $quba = question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->
|
||||
$quba->set_preferred_behaviour($quiz->preferredbehaviour);
|
||||
|
||||
// Create the new attempt and initialize the question sessions
|
||||
$attempt = quiz_create_attempt($quiz, $attemptnumber, $lastattempt, time(), $quizobj->is_preview_user());
|
||||
$attempt = quiz_create_attempt($quiz, $attemptnumber, $lastattempt, time(),
|
||||
$quizobj->is_preview_user());
|
||||
|
||||
if (!($quiz->attemptonlast && $lastattempt)) {
|
||||
// Starting a normal, new, quiz attempt.
|
||||
|
@ -68,7 +68,8 @@ $accessmanager->do_password_check($attemptobj->is_preview_user());
|
||||
$displayoptions = $attemptobj->get_display_options(false);
|
||||
|
||||
// Log this page view.
|
||||
add_to_log($attemptobj->get_courseid(), 'quiz', 'view summary', 'summary.php?attempt=' . $attemptobj->get_attemptid(),
|
||||
add_to_log($attemptobj->get_courseid(), 'quiz', 'view summary',
|
||||
'summary.php?attempt=' . $attemptobj->get_attemptid(),
|
||||
$attemptobj->get_quizid(), $attemptobj->get_cmid());
|
||||
|
||||
// Print the page header
|
||||
@ -80,8 +81,9 @@ $title = get_string('summaryofattempt', 'quiz');
|
||||
if ($accessmanager->securewindow_required($attemptobj->is_preview_user())) {
|
||||
$accessmanager->setup_secure_page($attemptobj->get_course()->shortname . ': ' .
|
||||
format_string($attemptobj->get_quiz_name()), '');
|
||||
} elseif ($accessmanager->safebrowser_required($attemptobj->is_preview_user())) {
|
||||
$PAGE->set_title($attemptobj->get_course()->shortname . ': '.format_string($attemptobj->get_quiz_name()));
|
||||
} else if ($accessmanager->safebrowser_required($attemptobj->is_preview_user())) {
|
||||
$PAGE->set_title($attemptobj->get_course()->shortname . ': ' .
|
||||
format_string($attemptobj->get_quiz_name()));
|
||||
$PAGE->set_heading($attemptobj->get_course()->fullname);
|
||||
$PAGE->set_cacheable(false);
|
||||
echo $OUTPUT->header();
|
||||
|
@ -69,7 +69,7 @@ $canpreview = has_capability('mod/quiz:preview', $context);
|
||||
// Create an object to manage all the other (non-roles) access rules.
|
||||
$timenow = time();
|
||||
$accessmanager = new quiz_access_manager(quiz::create($quiz->id, $USER->id), $timenow,
|
||||
has_capability('mod/quiz:ignoretimelimits', $context, NULL, false));
|
||||
has_capability('mod/quiz:ignoretimelimits', $context, null, false));
|
||||
|
||||
// Log this request.
|
||||
add_to_log($course->id, 'quiz', 'view', 'view.php?id=' . $cm->id, $quiz->id, $cm->id);
|
||||
@ -96,7 +96,8 @@ if (trim(strip_tags($quiz->intro))) {
|
||||
// Display information about this quiz.
|
||||
$messages = $accessmanager->describe_rules();
|
||||
if ($quiz->attempts != 1) {
|
||||
$messages[] = get_string('gradingmethod', 'quiz', quiz_get_grading_option_name($quiz->grademethod));
|
||||
$messages[] = get_string('gradingmethod', 'quiz',
|
||||
quiz_get_grading_option_name($quiz->grademethod));
|
||||
}
|
||||
echo $OUTPUT->box_start('quizinfo');
|
||||
$accessmanager->print_messages($messages);
|
||||
@ -170,7 +171,8 @@ if ($attempts) {
|
||||
|
||||
$attemptcolumn = $quiz->attempts != 1;
|
||||
|
||||
$gradecolumn = $someoptions->marks >= question_display_options::MARK_AND_MAX && quiz_has_grades($quiz);
|
||||
$gradecolumn = $someoptions->marks >= question_display_options::MARK_AND_MAX &&
|
||||
quiz_has_grades($quiz);
|
||||
$markcolumn = $gradecolumn && ($quiz->grade != $quiz->sumgrades);
|
||||
$overallstats = $alloptions->marks >= question_display_options::MARK_AND_MAX;
|
||||
|
||||
@ -191,12 +193,14 @@ if ($attempts) {
|
||||
$table->align[] = 'left';
|
||||
$table->size[] = '';
|
||||
if ($markcolumn) {
|
||||
$table->head[] = get_string('marks', 'quiz') . ' / ' . quiz_format_grade($quiz, $quiz->sumgrades);
|
||||
$table->head[] = get_string('marks', 'quiz') . ' / ' .
|
||||
quiz_format_grade($quiz, $quiz->sumgrades);
|
||||
$table->align[] = 'center';
|
||||
$table->size[] = '';
|
||||
}
|
||||
if ($gradecolumn) {
|
||||
$table->head[] = get_string('grade') . ' / ' . quiz_format_grade($quiz, $quiz->grade);
|
||||
$table->head[] = get_string('grade') . ' / ' .
|
||||
quiz_format_grade($quiz, $quiz->grade);
|
||||
$table->align[] = 'center';
|
||||
$table->size[] = '';
|
||||
}
|
||||
@ -259,7 +263,8 @@ if ($attempts) {
|
||||
$attemptgrade = quiz_rescale_grade($attempt->sumgrades, $quiz, false);
|
||||
|
||||
if ($gradecolumn) {
|
||||
if ($attemptoptions->marks >= question_display_options::MARK_AND_MAX && $attempt->timefinish > 0) {
|
||||
if ($attemptoptions->marks >= question_display_options::MARK_AND_MAX &&
|
||||
$attempt->timefinish > 0) {
|
||||
$formattedgrade = quiz_format_grade($quiz, $attemptgrade);
|
||||
// highlight the highest grade if appropriate
|
||||
if ($overallstats && !$attempt->preview && $numattempts > 1 && !is_null($mygrade) &&
|
||||
@ -324,7 +329,8 @@ if ($numattempts && $gradecolumn && !is_null($mygrade)) {
|
||||
}
|
||||
|
||||
if ($mygradeoverridden) {
|
||||
$resultinfo .= '<p class="overriddennotice">'.get_string('overriddennotice', 'grades')."</p>\n";
|
||||
$resultinfo .= '<p class="overriddennotice">' .
|
||||
get_string('overriddennotice', 'grades') . "</p>\n";
|
||||
}
|
||||
if ($gradebookfeedback) {
|
||||
$resultinfo .= $OUTPUT->heading(get_string('comment', 'quiz'), 3, 'main');
|
||||
@ -332,7 +338,8 @@ if ($numattempts && $gradecolumn && !is_null($mygrade)) {
|
||||
}
|
||||
if ($feedbackcolumn) {
|
||||
$resultinfo .= $OUTPUT->heading(get_string('overallfeedback', 'quiz'), 3, 'main');
|
||||
$resultinfo .= '<p class="quizgradefeedback">'.quiz_feedback_for_grade($mygrade, $quiz, $context, $cm)."</p>\n";
|
||||
$resultinfo .= '<p class="quizgradefeedback">' .
|
||||
quiz_feedback_for_grade($mygrade, $quiz, $context, $cm) . "</p>\n";
|
||||
}
|
||||
|
||||
if ($resultinfo) {
|
||||
@ -372,7 +379,8 @@ if (!quiz_clean_layout($quiz->questions, true)) {
|
||||
}
|
||||
}
|
||||
|
||||
// If, so far, we think a button should be printed, so check if they will be allowed to access it.
|
||||
// If, so far, we think a button should be printed, so check if they will be
|
||||
// allowed to access it.
|
||||
if ($buttontext) {
|
||||
if (!$moreattempts) {
|
||||
$buttontext = '';
|
||||
|
Loading…
x
Reference in New Issue
Block a user