Skip to content
Permalink
Browse files

Merge branch 'MDL-31095_21' of git://github.com/timhunt/moodle into M…

…OODLE_21_STABLE
  • Loading branch information...
Sam Hemelryk
Sam Hemelryk committed Jan 16, 2012
2 parents 2d33f4e + 589f578 commit d471e3f59d0594a82cb9e66fe6d84ec64f1a1920
Showing with 36 additions and 12 deletions.
  1. +6 −1 mod/quiz/attemptlib.php
  2. +2 −4 mod/quiz/edit.php
  3. +1 −1 mod/quiz/editlib.php
  4. +2 −0 mod/quiz/lang/en/quiz.php
  5. +18 −3 mod/quiz/locallib.php
  6. +7 −3 mod/quiz/startattempt.php
@@ -90,7 +90,12 @@ public function __construct($quiz, $cm, $course, $getcontext = true) {
if ($getcontext && !empty($cm->id)) {
$this->context = get_context_instance(CONTEXT_MODULE, $cm->id);
}
$this->questionids = explode(',', quiz_questions_in_quiz($this->quiz->questions));
$questionids = quiz_questions_in_quiz($this->quiz->questions);
if ($questionids) {
$this->questionids = explode(',', quiz_questions_in_quiz($this->quiz->questions));
} else {
$this->questionids = array(); // Which idiot made explode(',', '') = array('')?
}
}
/**
@@ -275,8 +275,8 @@ function module_specific_controls($totalnumber, $recurse, $category, $cmid, $cmo
$remove = optional_param('remove', false, PARAM_INT);
if (($remove = optional_param('remove', false, PARAM_INT)) && confirm_sesskey()) {
quiz_remove_question($quiz, $remove);
quiz_update_sumgrades($quiz);
quiz_delete_previews($quiz);
quiz_update_sumgrades($quiz);
redirect($afteractionurl);
}
@@ -496,9 +496,7 @@ function module_specific_controls($totalnumber, $recurse, $category, $cmid, $cmo
quiz_print_status_bar($quiz);
$tabindex = 0;
if (!$quiz_reordertool) {
quiz_print_grading_form($quiz, $thispageurl, $tabindex);
}
quiz_print_grading_form($quiz, $thispageurl, $tabindex);
$notifystrings = array();
if ($quizhasattempts) {
@@ -248,8 +248,8 @@ function quiz_add_page_break_after($layout, $questionid) {
function quiz_save_new_layout($quiz) {
global $DB;
$DB->set_field('quiz', 'questions', $quiz->questions, array('id' => $quiz->id));
quiz_update_sumgrades($quiz);
quiz_delete_previews($quiz);
quiz_update_sumgrades($quiz);
}
/**
@@ -128,7 +128,9 @@
$string['cannotsavequestion'] = 'Cannot save question list';
$string['cannotsetgrade'] = 'Could not set a new maximum grade for the quiz';
$string['cannotsetsumgrades'] = 'Failed to set sumgrades';
$string['cannotstartgradesmismatch'] = 'Cannot start an attempt at this quiz. The quiz is supposed to be graded, but there are no questions in the quiz that are worth any marks.';
$string['cannotstartmissingquestion'] = 'Cannot start an attempt at this quiz. The quiz definition includes a question that does not exist.';
$string['cannotstartnoquestions'] = 'Cannot start an attempt at this quiz. The quiz has not been set up yet. No questions have been added.';
$string['cannotwrite'] = 'Cannot write to export file ({$a})';
$string['caseno'] = 'No, case is unimportant';
$string['casesensitive'] = 'Case sensitivity';
@@ -78,6 +78,11 @@
function quiz_create_attempt($quiz, $attemptnumber, $lastattempt, $timenow, $ispreview = false) {
global $USER;
if ($quiz->sumgrades < 0.000005 && $quiz->grade > 0.000005) {
throw new moodle_exception('cannotstartgradesmismatch', 'quiz',
new moodle_url('/mod/quiz/view.php', array('q' => $quiz->id)));
}
if ($attemptnumber == 1 || !$quiz->attemptonlast) {
// We are not building on last attempt so create a new attempt.
$attempt = new stdClass();
@@ -408,10 +413,13 @@ function quiz_no_questions_message($quiz, $cm, $context) {
* the grading structure of the quiz is changed. For example if a question is
* added or removed, or a question weight is changed.
*
* You should call {@link quiz_delete_previews()} before you call this function.
*
* @param object $quiz a quiz.
*/
function quiz_update_sumgrades($quiz) {
global $DB;
$sql = 'UPDATE {quiz}
SET sumgrades = COALESCE((
SELECT SUM(grade)
@@ -421,13 +429,20 @@ function quiz_update_sumgrades($quiz) {
WHERE id = ?';
$DB->execute($sql, array($quiz->id));
$quiz->sumgrades = $DB->get_field('quiz', 'sumgrades', array('id' => $quiz->id));
if ($quiz->sumgrades < 0.000005 && quiz_clean_layout($quiz->questions, true)) {
// If there is at least one question in the quiz, and the sumgrades has been
// set to 0, then also set the maximum possible grade to 0.
if ($quiz->sumgrades < 0.000005 && quiz_has_attempts($quiz->id)) {
// If the quiz has been attempted, and the sumgrades has been
// set to 0, then we must also set the maximum possible grade to 0, or
// we will get a divide by zero error.
quiz_set_grade(0, $quiz);
}
}
/**
* Update the sumgrades field of the attempts at a quiz.
*
* @param object $quiz a quiz.
*/
function quiz_update_all_attempt_sumgrades($quiz) {
global $DB;
$dm = new question_engine_data_mapper();
@@ -54,9 +54,13 @@
require_sesskey();
$PAGE->set_pagelayout('base');
// if no questions have been set up yet redirect to edit.php
if (!$quizobj->has_questions() && $quizobj->has_capability('mod/quiz:manage')) {
redirect($quizobj->edit_url());
// if no questions have been set up yet redirect to edit.php or display an error.
if (!$quizobj->has_questions()) {
if ($quizobj->has_capability('mod/quiz:manage')) {
redirect($quizobj->edit_url());
} else {
print_error('cannotstartnoquestions', 'quiz', $quizobj->view_url());
}
}
// Create an object to manage all the other (non-roles) access rules.

0 comments on commit d471e3f

Please sign in to comment.
You can’t perform that action at this time.