diff --git a/mod/quiz/accessmanager.php b/mod/quiz/accessmanager.php index 2bd90e38e27..e45557d15f1 100644 --- a/mod/quiz/accessmanager.php +++ b/mod/quiz/accessmanager.php @@ -90,6 +90,31 @@ class quiz_access_manager { } } + /** + * Add any form fields that the access rules require to the settings form. + * @param mod_quiz_mod_form $quizform the quiz settings form that is being built. + * @param MoodleQuickForm $mform the wrapped MoodleQuickForm. + */ + public static function add_settings_form_fields( + mod_quiz_mod_form $quizform, MoodleQuickForm $mform) { + $rules = get_plugin_list_with_class('quizaccess', '', 'rule.php'); + foreach ($rules as $rule) { + $rule::add_settings_form_fields($quizform, $mform); + } + } + + /** + * Save any submitted settings when the quiz settings form is submitted. + * @param object $quiz the data from the quiz form, including $quiz->id + * which is the is of the quiz being saved. + */ + public static function save_settings($quiz) { + $rules = get_plugin_list_with_class('quizaccess', '', 'rule.php'); + foreach ($rules as $rule) { + $rule::save_settings($quiz); + } + } + protected function accumulate_messages(&$messages, $new) { if (is_array($new)) { $messages = array_merge($messages, $new); diff --git a/mod/quiz/accessrule/accessrulebase.php b/mod/quiz/accessrule/accessrulebase.php index bfe8e16d120..116bbd7fcdd 100644 --- a/mod/quiz/accessrule/accessrulebase.php +++ b/mod/quiz/accessrule/accessrulebase.php @@ -106,4 +106,26 @@ abstract class quiz_access_rule_base { public function time_left($attempt, $timenow) { return false; } + + /** + * Add any fields that this rule requires to the quiz settings form. This + * method is called from {@link mod_quiz_mod_form::definition()}, while the + * security seciton is being built. + * @param mod_quiz_mod_form $quizform the quiz settings form that is being built. + * @param MoodleQuickForm $mform the wrapped MoodleQuickForm. + */ + public static function add_settings_form_fields( + mod_quiz_mod_form $quizform, MoodleQuickForm $mform) { + // By default do nothing. + } + + /** + * Save any submitted settings when the quiz settings form is submitted. This + * is called from {@link quiz_after_add_or_update()} in lib.php. + * @param object $quiz the data from the quiz form, including $quiz->id + * which is the is of the quiz being saved. + */ + public static function save_settings($quiz) { + // By default do nothing. + } } diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 18f0bcd6efa..bbe3e38264f 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -1038,6 +1038,9 @@ function quiz_after_add_or_update($quiz) { array('id' => $feedback->id)); } + // Store any settings belonging to the access rules. + quiz_access_manager::save_settings($quiz); + // Update the events relating to this quiz. quiz_update_events($quiz); diff --git a/mod/quiz/mod_form.php b/mod/quiz/mod_form.php index ee27b1684d1..38875e7e1a4 100644 --- a/mod/quiz/mod_form.php +++ b/mod/quiz/mod_form.php @@ -293,6 +293,9 @@ class mod_quiz_mod_form extends moodleform_mod { $mform->setAdvanced('popup', $quizconfig->popup_adv); $mform->setDefault('popup', $quizconfig->popup); + // Any other rule plugins. + quiz_access_manager::add_settings_form_fields($this, $mform); + //------------------------------------------------------------------------------- $mform->addElement('header', 'overallfeedbackhdr', get_string('overallfeedback', 'quiz')); $mform->addHelpButton('overallfeedbackhdr', 'overallfeedback', 'quiz');