From d823a63db089e6607c4b708b2b8ef278ab1e99d2 Mon Sep 17 00:00:00 2001
From: Tim Hunt <T.J.Hunt@open.ac.uk>
Date: Wed, 17 Apr 2013 14:24:38 +0100
Subject: [PATCH] MDL-39167 quiz access rules: need to validate their settings.

We were missing the hook in the form validation method. We had them
everywhere else they were needed.
---
 mod/quiz/accessmanager.php             | 18 ++++++++++++++++++
 mod/quiz/accessrule/accessrulebase.php | 14 ++++++++++++++
 mod/quiz/mod_form.php                  |  3 +++
 3 files changed, 35 insertions(+)

diff --git a/mod/quiz/accessmanager.php b/mod/quiz/accessmanager.php
index fe0f6ccde51..4d7ad31b6e1 100644
--- a/mod/quiz/accessmanager.php
+++ b/mod/quiz/accessmanager.php
@@ -123,6 +123,24 @@ class quiz_access_manager {
         return $options;
     }
 
+    /**
+     * Validate the data from any form fields added using {@link add_settings_form_fields()}.
+     * @param array $errors the errors found so far.
+     * @param array $data the submitted form data.
+     * @param array $files information about any uploaded files.
+     * @param mod_quiz_mod_form $quizform the quiz form object.
+     * @return array $errors the updated $errors array.
+     */
+    public static function validate_settings_form_fields(array $errors,
+            array $data, $files, mod_quiz_mod_form $this) {
+
+        foreach (self::get_rule_classes() as $rule) {
+            $errors = $rule::validate_settings_form_fields($errors, $data, $files, $this);
+        }
+
+        return $errors;
+    }
+
     /**
      * Save any submitted settings when the quiz settings form is submitted.
      *
diff --git a/mod/quiz/accessrule/accessrulebase.php b/mod/quiz/accessrule/accessrulebase.php
index 4b585cd8af6..362d7e3f175 100644
--- a/mod/quiz/accessrule/accessrulebase.php
+++ b/mod/quiz/accessrule/accessrulebase.php
@@ -256,6 +256,20 @@ abstract class quiz_access_rule_base {
         // By default do nothing.
     }
 
+    /**
+     * Validate the data from any form fields added using {@link add_settings_form_fields()}.
+     * @param array $errors the errors found so far.
+     * @param array $data the submitted form data.
+     * @param array $files information about any uploaded files.
+     * @param mod_quiz_mod_form $quizform the quiz form object.
+     * @return array $errors the updated $errors array.
+     */
+    public static function validate_settings_form_fields(array $errors,
+            array $data, $files, mod_quiz_mod_form $quizform) {
+
+        return $errors;
+    }
+
     /**
      * @return array key => lang string any choices to add to the quiz Browser
      *      security settings menu.
diff --git a/mod/quiz/mod_form.php b/mod/quiz/mod_form.php
index 90cdb1fa291..a7b98a1fd3c 100644
--- a/mod/quiz/mod_form.php
+++ b/mod/quiz/mod_form.php
@@ -575,6 +575,9 @@ class mod_quiz_mod_form extends moodleform_mod {
             }
         }
 
+        // Any other rule plugins.
+        $errors = quiz_access_manager::validate_settings_form_fields($errors, $data, $files, $this);
+
         return $errors;
     }
 }