Moodle APIs
3.8
Moodle 3.8.6 (Build: 20201109)
|
A base class that defines the interface for the various quiz access rules. More...
Public Member Functions | |
__construct ($quizobj, $timenow) | |
Create an instance of this rule for a particular quiz. More... | |
add_preflight_check_form_fields (mod_quiz_preflight_check_form $quizform, MoodleQuickForm $mform, $attemptid) | |
Add any field you want to pre-flight check form. More... | |
attempt_must_be_in_popup () | |
current_attempt_finished () | |
This is called when the current attempt at the quiz is finished. More... | |
description () | |
Information, such as might be shown on the quiz view page, relating to this restriction. More... | |
end_time ($attempt) | |
If, because of this rule, the user has to finish their attempt by a certain time, you should override this method to return the attempt end time. More... | |
get_popup_options () | |
get_superceded_rules () | |
It is possible for one rule to override other rules. More... | |
is_finished ($numprevattempts, $lastattempt) | |
If this rule can determine that this user will never be allowed another attempt at this quiz, then return true. More... | |
is_preflight_check_required ($attemptid) | |
notify_preflight_check_passed ($attemptid) | |
The pre-flight check has passed. More... | |
prevent_access () | |
Whether the user should be blocked from starting a new attempt or continuing an attempt now. More... | |
prevent_new_attempt ($numprevattempts, $lastattempt) | |
Whether or not a user should be allowed to start a new attempt at this quiz now. More... | |
setup_attempt_page ($page) | |
Sets up the attempt (review or summary) page with any special extra properties required by this rule. More... | |
time_left_display ($attempt, $timenow) | |
If the user should be shown a different amount of time than $timenow - $this->end_time(), then override this method. More... | |
validate_preflight_check ($data, $files, $errors, $attemptid) | |
Validate the pre-flight check form submission. More... | |
Static Public Member Functions | |
static | add_settings_form_fields (mod_quiz_mod_form $quizform, MoodleQuickForm $mform) |
Add any fields that this rule requires to the quiz settings form. More... | |
static | delete_settings ($quiz) |
Delete any rule-specific settings when the quiz is deleted. More... | |
static | get_browser_security_choices () |
static | get_extra_settings ($quizid) |
You can use this method to load any extra settings your plugin has that cannot be loaded efficiently with get_settings_sql(). More... | |
static | get_settings_sql ($quizid) |
Return the bits of SQL needed to load all the settings from all the access plugins in one DB query. More... | |
static | make (quiz $quizobj, $timenow, $canignoretimelimits) |
Return an appropriately configured instance of this rule, if it is applicable to the given quiz, otherwise return null. More... | |
static | save_settings ($quiz) |
Save any submitted settings when the quiz settings form is submitted. More... | |
static | validate_settings_form_fields (array $errors, array $data, $files, mod_quiz_mod_form $quizform) |
Validate the data from any form fields added using add_settings_form_fields(). More... | |
Protected Attributes | |
stdClass | $quiz |
the quiz settings. | |
quiz | $quizobj |
the quiz object. | |
int | $timenow |
the time to use as 'now'. | |
A base class that defines the interface for the various quiz access rules.
Most of the methods are defined in a slightly unnatural way because we either want to say that access is allowed, or explain the reason why it is block. Therefore instead of is_access_allowed(...) we have prevent_access(...) that return false if access is permitted, or a string explanation (which is treated as true) if access should be blocked. Slighly unnatural, but actually the easiest way to implement this.
quiz_access_rule_base::__construct | ( | $quizobj, | |
$timenow | |||
) |
Create an instance of this rule for a particular quiz.
quiz | $quizobj | information about the quiz in question. |
int | $timenow | the time that should be considered as 'now'. |
quiz_access_rule_base::add_preflight_check_form_fields | ( | mod_quiz_preflight_check_form | $quizform, |
MoodleQuickForm | $mform, | ||
$attemptid | |||
) |
Add any field you want to pre-flight check form.
You should only do something here if is_preflight_check_required() returned true.
mod_quiz_preflight_check_form | $quizform | the form being built. |
MoodleQuickForm | $mform | The wrapped MoodleQuickForm. |
int | null | $attemptid | the id of the current attempt, if there is one, otherwise null. |
Reimplemented in quizaccess_timelimit, quizaccess_password, and quizaccess_offlineattempts.
|
static |
Add any fields that this rule requires to the quiz settings form.
This method is called from mod_quiz_mod_form::definition(), while the security seciton is being built.
mod_quiz_mod_form | $quizform | the quiz settings form that is being built. |
MoodleQuickForm | $mform | the wrapped MoodleQuickForm. |
Reimplemented in quizaccess_offlineattempts.
quiz_access_rule_base::attempt_must_be_in_popup | ( | ) |
boolean | whether this rule requires that the attemp (and review) pages must be displayed in a pop-up window. |
Reimplemented in quizaccess_securewindow.
quiz_access_rule_base::current_attempt_finished | ( | ) |
This is called when the current attempt at the quiz is finished.
This is used, for example by the password rule, to clear the flag in the session.
Reimplemented in quizaccess_password, and quizaccess_offlineattempts.
|
static |
Delete any rule-specific settings when the quiz is deleted.
This is called from quiz_delete_instance() in lib.php.
object | $quiz | the data from the database, including $quiz->id which is the id of the quiz being deleted. |
quiz_access_rule_base::description | ( | ) |
Information, such as might be shown on the quiz view page, relating to this restriction.
There is no obligation to return anything. If it is not appropriate to tell students about this rule, then just return ''.
mixed | a message, or array of messages, explaining the restriction (may be '' if no message is appropriate). |
Reimplemented in quizaccess_timelimit, quizaccess_safebrowser, quizaccess_password, quizaccess_openclosedate, and quizaccess_numattempts.
quiz_access_rule_base::end_time | ( | $attempt | ) |
If, because of this rule, the user has to finish their attempt by a certain time, you should override this method to return the attempt end time.
object | $attempt | the current attempt |
mixed | the attempt close time, or false if there is no close time. |
Reimplemented in quizaccess_timelimit, and quizaccess_openclosedate.
|
static |
array | key => lang string any choices to add to the quiz Browser security settings menu. |
Reimplemented in quizaccess_securewindow, and quizaccess_safebrowser.
|
static |
You can use this method to load any extra settings your plugin has that cannot be loaded efficiently with get_settings_sql().
int | $quizid | the quiz id. |
array | setting value name => value. The value names should all start with the name of your plugin to avoid collisions. |
quiz_access_rule_base::get_popup_options | ( | ) |
array | any options that are required for showing the attempt page in a popup window. |
Reimplemented in quizaccess_securewindow.
|
static |
Return the bits of SQL needed to load all the settings from all the access plugins in one DB query.
The easiest way to understand what you need to do here is probalby to read the code of quiz_access_manager::load_settings().
If you have some settings that cannot be loaded in this way, then you can use the get_extra_settings() method instead, but that has performance implications.
int | $quizid | the id of the quiz we are loading settings for. This can also be accessed as quiz.id in the SQL. (quiz is a table alisas for {quiz}.) |
array | with three elements:
|
quiz_access_rule_base::get_superceded_rules | ( | ) |
It is possible for one rule to override other rules.
The aim is that third-party rules should be able to replace sandard rules if they want. See, for example MDL-13592.
array | plugin names of other rules that this one replaces. For example array('ipaddress', 'password'). |
quiz_access_rule_base::is_finished | ( | $numprevattempts, | |
$lastattempt | |||
) |
If this rule can determine that this user will never be allowed another attempt at this quiz, then return true.
This is used so we can know whether to display a final grade on the view page. This will only be called if there is not a currently active attempt for this user.
int | $numattempts | the number of previous attempts this user has made. |
object | $lastattempt | information about the user's last completed attempt. |
bool | true if this rule means that this user will never be allowed another attempt at this quiz. |
Reimplemented in quizaccess_openclosedate, quizaccess_numattempts, and quizaccess_delaybetweenattempts.
quiz_access_rule_base::is_preflight_check_required | ( | $attemptid | ) |
int | null | $attemptid | the id of the current attempt, if there is one, otherwise null. |
bool | whether a check is required before the user starts/continues their attempt. |
Reimplemented in quizaccess_timelimit, quizaccess_password, and quizaccess_offlineattempts.
|
static |
Return an appropriately configured instance of this rule, if it is applicable to the given quiz, otherwise return null.
quiz | $quizobj | information about the quiz in question. |
int | $timenow | the time that should be considered as 'now'. |
bool | $canignoretimelimits | whether the current user is exempt from time limits by the mod/quiz:ignoretimelimits capability. |
quiz_access_rule_base|null | the rule, if applicable, else null. |
Reimplemented in quizaccess_timelimit, quizaccess_securewindow, quizaccess_safebrowser, quizaccess_password, quizaccess_openclosedate, quizaccess_offlineattempts, quizaccess_numattempts, quizaccess_ipaddress, and quizaccess_delaybetweenattempts.
quiz_access_rule_base::notify_preflight_check_passed | ( | $attemptid | ) |
The pre-flight check has passed.
This is a chance to record that fact in some way.
int | null | $attemptid | the id of the current attempt, if there is one, otherwise null. |
Reimplemented in quizaccess_password, and quizaccess_offlineattempts.
quiz_access_rule_base::prevent_access | ( | ) |
Whether the user should be blocked from starting a new attempt or continuing an attempt now.
string | false if access should be allowed, a message explaining the reason if access should be prevented. |
Reimplemented in quizaccess_safebrowser, quizaccess_openclosedate, and quizaccess_ipaddress.
quiz_access_rule_base::prevent_new_attempt | ( | $numprevattempts, | |
$lastattempt | |||
) |
Whether or not a user should be allowed to start a new attempt at this quiz now.
int | $numattempts | the number of previous attempts this user has made. |
object | $lastattempt | information about the user's last completed attempt. |
string | false if access should be allowed, a message explaining the reason if access should be prevented. |
Reimplemented in quizaccess_numattempts, and quizaccess_delaybetweenattempts.
|
static |
Save any submitted settings when the quiz settings form is submitted.
This is called from quiz_after_add_or_update() in lib.php.
object | $quiz | the data from the quiz form, including $quiz->id which is the id of the quiz being saved. |
quiz_access_rule_base::setup_attempt_page | ( | $page | ) |
Sets up the attempt (review or summary) page with any special extra properties required by this rule.
securewindow rule is an example of where this is used.
moodle_page | $page | the page object to initialise. |
Reimplemented in quizaccess_securewindow, and quizaccess_safebrowser.
quiz_access_rule_base::time_left_display | ( | $attempt, | |
$timenow | |||
) |
If the user should be shown a different amount of time than $timenow - $this->end_time(), then override this method.
This is useful if the time remaining is large enough to be omitted.
object | $attempt | the current attempt |
int | $timenow | the time now. We don't use $this->timenow, so we can give the user a more accurate indication of how much time is left. |
mixed | the time left in seconds (can be negative) or false if there is no limit. |
Reimplemented in quizaccess_timelimit, and quizaccess_openclosedate.
quiz_access_rule_base::validate_preflight_check | ( | $data, | |
$files, | |||
$errors, | |||
$attemptid | |||
) |
Validate the pre-flight check form submission.
You should only do something here if is_preflight_check_required() returned true.
If the form validates, the user will be allowed to continue.
array | $data | the submitted form data. |
array | $files | any files in the submission. |
array | $errors | the list of validation errors that is being built up. |
int | null | $attemptid | the id of the current attempt, if there is one, otherwise null. |
array | the update $errors array; |
Reimplemented in quizaccess_password, and quizaccess_offlineattempts.
|
static |
Validate the data from any form fields added using add_settings_form_fields().
array | $errors | the errors found so far. |
array | $data | the submitted form data. |
array | $files | information about any uploaded files. |
mod_quiz_mod_form | $quizform | the quiz form object. |
array::$errors | the updated $errors array. |
Reimplemented in quizaccess_offlineattempts.