diff -rupN ../moodle-2.3/moodle/mod/quiz/lang/en/quiz.php mod/quiz/lang/en/quiz.php --- ../moodle-2.3/moodle/mod/quiz/lang/en/quiz.php 2012-06-25 12:15:22.000000000 -0500 +++ mod/quiz/lang/en/quiz.php 2012-07-11 07:00:41.351907976 -0500 @@ -87,6 +87,7 @@ $string['attemptnumber'] = 'Attempt'; $string['attemptquiznow'] = 'Attempt quiz now'; $string['attempts'] = 'Attempts'; $string['attemptsallowed'] = 'Attempts allowed'; +$string['attemptsbyenrollment'] = 'Consider attempts for this enrollment only'; $string['attemptsdeleted'] = 'Quiz attempts deleted'; $string['attemptselection'] = 'Select which attempts to analyze per user:'; $string['attemptsexist'] = 'You can no longer add or remove questions.'; @@ -152,6 +152,7 @@ $string['comments'] = 'Comments'; $string['completedon'] = 'Completed on'; $string['configadaptive'] = 'If you choose Yes for this option then the student will be allowed multiple responses to a question even within the same attempt at the quiz.'; $string['configattemptsallowed'] = 'Restriction on the number of attempts students are allowed at the quiz.'; +$string['configattemptsbyenrollment'] = 'Grade, and limit by, attempts in this course enrollment only. (False = include all past enrollments courses with this quiz.)'; $string['configdecimaldigits'] = 'Number of digits that should be shown after the decimal point when displaying grades.'; $string['configdecimalplaces'] = 'Number of digits that should be shown after the decimal point when displaying grades for the quiz.'; $string['configdecimalplacesquestion'] = 'Number of digits that should be shown after the decimal point when displaying the grade for individual questions.'; diff -rupN ../moodle-2.3/moodle/mod/quiz/lib.php mod/quiz/lib.php --- ../moodle-2.3/moodle/mod/quiz/lib.php 2012-06-25 12:15:22.000000000 -0500 +++ mod/quiz/lib.php 2012-07-11 09:36:40.124882200 -0500 @@ -489,42 +486,32 @@ function quiz_cron() { * array if there are none. */ $previewclause = ''; if (!$includepreviews) { $previewclause = ' AND preview = 0'; } - $params['quizid'] = $quizid; - $params['userid'] = $userid; - return $DB->get_records_select('quiz_attempts', - 'quiz = :quizid AND userid = :userid' . $previewclause . $statuscondition, - $params, 'attempt ASC'); + if ($quiz->attemptsbyenrollment) { + $thisenroltime = '(SELECT MAX({user_enrolments}.timecreated) + FROM {user_enrolments}, {enrol} + WHERE {enrol}.id = {user_enrolments}.enrolid AND {user_enrolments}.userid = {quiz_attempts}.userid AND courseid = ? )'; + + $attempts = $DB->get_records_sql( + "SELECT * + FROM {quiz_attempts} + WHERE quiz=? AND userid=? $previewclause $status_condition[$status] AND timemodified > ($thisenroltime) + ORDER BY attempt ASC", array($quizid, $userid, $COURSE->id) ); + } else { + return $DB->get_records_select('quiz_attempts', + 'quiz = ? AND userid = ?' . $previewclause . $status_condition[$status], + array($quizid, $userid), 'attempt ASC'); + } } diff -rupN ../moodle-2.3/moodle/mod/quiz/mod_form.php mod/quiz/mod_form.php --- ../moodle-2.3/moodle/mod/quiz/mod_form.php 2012-06-25 12:15:22.000000000 -0500 +++ mod/quiz/mod_form.php 2012-07-11 09:38:17.852989197 -0500 @@ -135,7 +106,20 @@ class mod_quiz_mod_form extends moodlefo $mform->setDefault('grademethod', $quizconfig->grademethod); $mform->disabledIf('grademethod', 'attempts', 'eq', 1); - // ------------------------------------------------------------------------------- + // Grade / restrict access by attempts for this enrollment only, ignoring previous enrollments in courses with this quiz. + $mform->addElement('selectyesno', 'attemptsbyenrollment', get_string('attemptsbyenrollment', 'quiz')); + $mform->setAdvanced('attemptsbyenrollment', $quizconfig->attemptsbyenrollment_adv); + $mform->setDefault('attemptsbyenrollment', $quizconfig->attemptsbyenrollment); + $mform->addElement('header', 'layouthdr', get_string('layout', 'quiz')); // Shuffle questions. diff -rupN ../moodle-2.3/moodle/mod/quiz/settings.php mod/quiz/settings.php --- ../moodle-2.3/moodle/mod/quiz/settings.php 2012-06-25 12:15:22.000000000 -0500 +++ mod/quiz/settings.php 2012-07-11 06:47:13.255008667 -0500 @@ -84,16 +69,22 @@ $quizsettings->add(new mod_quiz_admin_se get_string('grademethod', 'quiz'), get_string('configgrademethod', 'quiz'), array('value' => QUIZ_GRADEHIGHEST, 'fix' => false), null)); +// Grade & limit by all attempts, or only this enrollment +$quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/attemptsbyenrollment', + get_string('attemptsbyenrollment', 'quiz'), + get_string('configattemptsbyenrollment', 'quiz'), + array('value' => 1, 'adv' => true))); + // Maximum grade $quizsettings->add(new admin_setting_configtext('quiz/maximumgrade', get_string('maximumgrade'), get_string('configmaximumgrade', 'quiz'), 10, PARAM_INT));