diff --git a/data/main/components.json b/data/main/components.json index 5506a6688..0d9917b7e 100644 --- a/data/main/components.json +++ b/data/main/components.json @@ -34,6 +34,7 @@ "qbank": "public/question/bank", "qbehaviour": "public/question/behaviour", "qformat": "public/question/format", + "quizaccess": "public/mod/quiz/access", "plagiarism": "public/plagiarism", "tool": "public/admin/tool", "cachestore": "public/cache/stores", diff --git a/docs/apis/plugintypes/quizaccess/_examples/override_rule.md b/docs/apis/plugintypes/quizaccess/_examples/override_rule.md new file mode 100644 index 000000000..d3db99224 --- /dev/null +++ b/docs/apis/plugintypes/quizaccess/_examples/override_rule.md @@ -0,0 +1,4 @@ + +Most quiz settings can be overridden on a per user and/or group level and you can extend this ability to your rule as well. To make your rule overridable, you must create the `override_rule` class extending `mod_quiz\local\access_override_rule_base`. + +Please refer to the inline phpdocs of the [mod_quiz::access_override_rule_base class](https://github.com/moodle/moodle/blob/main/mod/quiz/classes/local/access_override_rule_base.php) for detailed descriptions of the functions and meaning. diff --git a/docs/apis/plugintypes/quizaccess/_examples/override_rule.php b/docs/apis/plugintypes/quizaccess/_examples/override_rule.php new file mode 100644 index 000000000..6711fc91c --- /dev/null +++ b/docs/apis/plugintypes/quizaccess/_examples/override_rule.php @@ -0,0 +1,48 @@ +use mod_quiz\local\access_override_rule_base; +use MoodleQuickForm; +use context_module; +use context; + +class override_rule extends access_override_rule_base { + + /** + * All of the below access_override_rule_base functions to be implemented. + */ + + public static function add_form_fields(context_module $context, int $overrideid, object $quiz, MoodleQuickForm $mform): void { + // Do nothing. + } + + public static function validate_form_fields(array $errors, + array $data, array $files, context_module $context): array { + return []; + } + + public static function save_settings(array $override): void { + // Do nothing. + } + + public static function delete_settings(int $quizid, array $overrides): void { + // Do nothing. + } + + public static function get_settings(): array { + return []; + } + + public static function get_required_settings(): array { + return []; + } + + public static function get_settings_sql(string $overridetablename): array { + return []; + } + + public static function add_table_fields(object $override, array $fields, array $values, context $context): array { + return []; + } + + public static function clean_form_data(array $formdata): array { + return $formdata; + } +} diff --git a/docs/apis/plugintypes/quizaccess/_examples/rule.php b/docs/apis/plugintypes/quizaccess/_examples/rule.php index 3732aac8f..c4016b51a 100644 --- a/docs/apis/plugintypes/quizaccess/_examples/rule.php +++ b/docs/apis/plugintypes/quizaccess/_examples/rule.php @@ -1,4 +1,3 @@ -use mod_quiz\form\edit_override_form; use mod_quiz\form\preflight_check_form; use mod_quiz\quiz_settings; use mod_quiz\local\access_rule_base; diff --git a/docs/apis/plugintypes/quizaccess/_examples/rule_overridable.md b/docs/apis/plugintypes/quizaccess/_examples/rule_overridable.md deleted file mode 100644 index 51d8c2b7f..000000000 --- a/docs/apis/plugintypes/quizaccess/_examples/rule_overridable.md +++ /dev/null @@ -1,4 +0,0 @@ - -Most quiz settings can be overridden on a per user and/or group level and you can extend this ability to your rule as well. To make your rule overridable, you must implement the `rule_overridable` interface in your rule class definition. - -Please refer to the inline phpdocs of the [mod_quiz::rule_overridable interface](https://github.com/moodle/moodle/blob/main/mod/quiz/classes/local/rule_overridable.php) for detailed descriptions of the functions and meaning. diff --git a/docs/apis/plugintypes/quizaccess/_examples/rule_overridable.php b/docs/apis/plugintypes/quizaccess/_examples/rule_overridable.php deleted file mode 100644 index 58c57ed5d..000000000 --- a/docs/apis/plugintypes/quizaccess/_examples/rule_overridable.php +++ /dev/null @@ -1,100 +0,0 @@ -use mod_quiz\form\edit_override_form; -use mod_quiz\local\access_rule_base; -use mod_quiz\local\rule_overridable; -use MoodleQuickForm; - -class quizaccess_pluginname extends access_rule_base implements rule_overridable { - - /** - * All of the below rule_overridable interface functions will need to be implemented. - */ - - public static function add_override_form_fields(edit_override_form $quizform, MoodleQuickForm $mform): void { - // Use the $mform to add the rule override fields... - $mform->addElement( - 'select', - 'plgn_setting1', - get_string('plgn_setting1', 'quizaccess_pluginname'), - ['A', 'B', 'C'], - ); - - $mform->addElement( - 'select', - 'plgn_setting2', - get_string('plgn_setting2', 'quizaccess_pluginname'), - ['1', '2', '3'], - ); - } - - public static function get_override_form_section_header(): array { - // Return the label and content of the section header in an array. - return ['name' => 'pluginname', 'title' => get_string('pluginname', 'quizaccess_pluginname')]; - } - - public static function get_override_form_section_expand(edit_override_form $quizform): bool { - // Determine if rule section in override form should load expanded. - // Should typically return true if the quiz has existing rule settings. - global $DB; - return $DB->record_exists('quizaccess_pluginname', ['quiz' => $quizform->get_quiz()->id]); - } - - public static function validate_override_form_fields(array $errors, - array $data, array $files, edit_override_form $quizform): array { - // Check and push to $errors array... - return $errors; - } - - public static function save_override_settings(array $override): void { - // Save $override data to plugin settings table... - global $DB; - - $plgnoverride = (object)[ - 'overrideid' => $override['overrideid'], - 'setting1' => $override['plgnm_setting1'], - 'setting2' => $override['plgnm_setting2'], - ]; - - if ($plgnoverrideid = $DB->get_field('quizaccess_pluginname_overrides', 'id', ['overrideid' => $override['overrideid']])) { - $plgnoverride->id = $plgnoverrideid; - $DB->update_record('quizaccess_pluginname_overrides', $plgnoverride); - } else { - $DB->insert_record('quizaccess_pluginname_overrides', $plgnoverride); - } - } - - public static function delete_override_settings($quizid, $overrides): void { - // Remove $overrides from $quiz. - global $DB; - $ids = array_column($overrides, 'id'); - list($insql, $inparams) = $DB->get_in_or_equal($ids); - $DB->delete_records_select('quizaccess_pluginname_overrides', "id $insql", $inparams); - } - - public static function get_override_setting_keys(): array { - // Return string array of all override form setting keys. - return ['plgnm_setting1', 'plgnm_setting2']; - } - - public static function get_override_required_setting_keys(): array { - // Return string array of override form setting keys that are required. - return ['plgnm_setting1']; - } - - public static function get_override_settings_sql($overridetablename): array { - // Return an array of selects, joins and parameters to be used to query relevant rule overrides... - return [ - "plgnm.setting1 plgnm_setting1, plgnm.setting2 plgnm_setting2", - "LEFT JOIN {quizaccess_pluginname_overrides} plgnm ON plgnm.overrideid = {$overridetablename}.id", - [], - ]; - } - - public static function add_override_table_fields($override, $fields, $values, $context): array { - // Extend the override table view by adding fields and values that display the rule's overrides. - if (!empty($override->plgnm_setting1)) { - $fields[] = get_string('pluginname', 'quizaccess_pluginname'); - $values[] = "{$override->plgnm_setting1}, {$override->plgnm_setting2}"; - } - return [$fields, $values]; - } -} diff --git a/docs/apis/plugintypes/quizaccess/index.md b/docs/apis/plugintypes/quizaccess/index.md index 8c9b33f1b..74e5bd60b 100644 --- a/docs/apis/plugintypes/quizaccess/index.md +++ b/docs/apis/plugintypes/quizaccess/index.md @@ -1,5 +1,5 @@ --- -title: Quiz access rule sub-plugins +title: Quiz access rules tags: - Quiz - Access @@ -11,7 +11,7 @@ tags: import { ComponentFileSummary } from '../../../_utils'; -Quiz access rule sub-plugins extend the ability to add conditions a user must meet to attempt a given quiz. +Quiz access rules give the ability to add conditions a user must meet to attempt a given quiz. The following rules are readily available as part of Moodle core: @@ -67,20 +67,22 @@ import RuleDescription from './_examples/rule.md'; description={RuleDescription} /> -import RuleOverridableFile from '!!raw-loader!./_examples/rule_overridable.php'; -import RuleOverridableDescription from './_examples/rule_overridable.md'; +### classes/override_rule.php + +import OverrideRuleFile from '!!raw-loader!./_examples/override_rule.php'; +import OverrideRuleDescription from './_examples/override_rule.md'; :::info -Implementing `rule_overridable` is not required but can enhance the usability of the rule. +Implementing `override_rule` is not required but can enhance the usability of the access rule. ::: diff --git a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/override_rule.md b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/override_rule.md new file mode 100644 index 000000000..d3db99224 --- /dev/null +++ b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/override_rule.md @@ -0,0 +1,4 @@ + +Most quiz settings can be overridden on a per user and/or group level and you can extend this ability to your rule as well. To make your rule overridable, you must create the `override_rule` class extending `mod_quiz\local\access_override_rule_base`. + +Please refer to the inline phpdocs of the [mod_quiz::access_override_rule_base class](https://github.com/moodle/moodle/blob/main/mod/quiz/classes/local/access_override_rule_base.php) for detailed descriptions of the functions and meaning. diff --git a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/override_rule.php b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/override_rule.php new file mode 100644 index 000000000..cb8c5f716 --- /dev/null +++ b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/override_rule.php @@ -0,0 +1,49 @@ +use mod_quiz\form\edit_override_form; +use mod_quiz\local\access_override_rule_base; +use MoodleQuickForm; +use context_module; +use context; + +class override_rule extends access_override_rule_base { + + /** + * All of the below access_override_rule_base be implemented below. + */ + + public static function add_form_fields(context_module $context, int $overrideid, object $quiz, MoodleQuickForm $mform): void { + // Do nothing. + } + + public static function validate_form_fields(array $errors, + array $data, array $files, edit_override_form $quizform): array { + return []; + } + + public static function save_settings(array $override): void { + // Do nothing. + } + + public static function delete_settings(int $quizid, array $overrides): void { + // Do nothing. + } + + public static function get_settings(): array { + return []; + } + + public static function get_required_settings(): array { + return []; + } + + public static function get_settings_sql(string $overridetablename): array { + return []; + } + + public static function add_table_fields(object $override, array $fields, array $values, context $context): array { + return []; + } + + public static function clean_form_data(array $formdata): array { + return $formdata; + } +} diff --git a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule.php b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule.php index 3732aac8f..c4016b51a 100644 --- a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule.php +++ b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule.php @@ -1,4 +1,3 @@ -use mod_quiz\form\edit_override_form; use mod_quiz\form\preflight_check_form; use mod_quiz\quiz_settings; use mod_quiz\local\access_rule_base; diff --git a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule_overridable.md b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule_overridable.md deleted file mode 100644 index 51d8c2b7f..000000000 --- a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule_overridable.md +++ /dev/null @@ -1,4 +0,0 @@ - -Most quiz settings can be overridden on a per user and/or group level and you can extend this ability to your rule as well. To make your rule overridable, you must implement the `rule_overridable` interface in your rule class definition. - -Please refer to the inline phpdocs of the [mod_quiz::rule_overridable interface](https://github.com/moodle/moodle/blob/main/mod/quiz/classes/local/rule_overridable.php) for detailed descriptions of the functions and meaning. diff --git a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule_overridable.php b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule_overridable.php deleted file mode 100644 index 58c57ed5d..000000000 --- a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/_examples/rule_overridable.php +++ /dev/null @@ -1,100 +0,0 @@ -use mod_quiz\form\edit_override_form; -use mod_quiz\local\access_rule_base; -use mod_quiz\local\rule_overridable; -use MoodleQuickForm; - -class quizaccess_pluginname extends access_rule_base implements rule_overridable { - - /** - * All of the below rule_overridable interface functions will need to be implemented. - */ - - public static function add_override_form_fields(edit_override_form $quizform, MoodleQuickForm $mform): void { - // Use the $mform to add the rule override fields... - $mform->addElement( - 'select', - 'plgn_setting1', - get_string('plgn_setting1', 'quizaccess_pluginname'), - ['A', 'B', 'C'], - ); - - $mform->addElement( - 'select', - 'plgn_setting2', - get_string('plgn_setting2', 'quizaccess_pluginname'), - ['1', '2', '3'], - ); - } - - public static function get_override_form_section_header(): array { - // Return the label and content of the section header in an array. - return ['name' => 'pluginname', 'title' => get_string('pluginname', 'quizaccess_pluginname')]; - } - - public static function get_override_form_section_expand(edit_override_form $quizform): bool { - // Determine if rule section in override form should load expanded. - // Should typically return true if the quiz has existing rule settings. - global $DB; - return $DB->record_exists('quizaccess_pluginname', ['quiz' => $quizform->get_quiz()->id]); - } - - public static function validate_override_form_fields(array $errors, - array $data, array $files, edit_override_form $quizform): array { - // Check and push to $errors array... - return $errors; - } - - public static function save_override_settings(array $override): void { - // Save $override data to plugin settings table... - global $DB; - - $plgnoverride = (object)[ - 'overrideid' => $override['overrideid'], - 'setting1' => $override['plgnm_setting1'], - 'setting2' => $override['plgnm_setting2'], - ]; - - if ($plgnoverrideid = $DB->get_field('quizaccess_pluginname_overrides', 'id', ['overrideid' => $override['overrideid']])) { - $plgnoverride->id = $plgnoverrideid; - $DB->update_record('quizaccess_pluginname_overrides', $plgnoverride); - } else { - $DB->insert_record('quizaccess_pluginname_overrides', $plgnoverride); - } - } - - public static function delete_override_settings($quizid, $overrides): void { - // Remove $overrides from $quiz. - global $DB; - $ids = array_column($overrides, 'id'); - list($insql, $inparams) = $DB->get_in_or_equal($ids); - $DB->delete_records_select('quizaccess_pluginname_overrides', "id $insql", $inparams); - } - - public static function get_override_setting_keys(): array { - // Return string array of all override form setting keys. - return ['plgnm_setting1', 'plgnm_setting2']; - } - - public static function get_override_required_setting_keys(): array { - // Return string array of override form setting keys that are required. - return ['plgnm_setting1']; - } - - public static function get_override_settings_sql($overridetablename): array { - // Return an array of selects, joins and parameters to be used to query relevant rule overrides... - return [ - "plgnm.setting1 plgnm_setting1, plgnm.setting2 plgnm_setting2", - "LEFT JOIN {quizaccess_pluginname_overrides} plgnm ON plgnm.overrideid = {$overridetablename}.id", - [], - ]; - } - - public static function add_override_table_fields($override, $fields, $values, $context): array { - // Extend the override table view by adding fields and values that display the rule's overrides. - if (!empty($override->plgnm_setting1)) { - $fields[] = get_string('pluginname', 'quizaccess_pluginname'); - $values[] = "{$override->plgnm_setting1}, {$override->plgnm_setting2}"; - } - return [$fields, $values]; - } -} diff --git a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/index.md b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/index.md index 8c9b33f1b..74e5bd60b 100644 --- a/versioned_docs/version-5.0/apis/plugintypes/quizaccess/index.md +++ b/versioned_docs/version-5.0/apis/plugintypes/quizaccess/index.md @@ -1,5 +1,5 @@ --- -title: Quiz access rule sub-plugins +title: Quiz access rules tags: - Quiz - Access @@ -11,7 +11,7 @@ tags: import { ComponentFileSummary } from '../../../_utils'; -Quiz access rule sub-plugins extend the ability to add conditions a user must meet to attempt a given quiz. +Quiz access rules give the ability to add conditions a user must meet to attempt a given quiz. The following rules are readily available as part of Moodle core: @@ -67,20 +67,22 @@ import RuleDescription from './_examples/rule.md'; description={RuleDescription} /> -import RuleOverridableFile from '!!raw-loader!./_examples/rule_overridable.php'; -import RuleOverridableDescription from './_examples/rule_overridable.md'; +### classes/override_rule.php + +import OverrideRuleFile from '!!raw-loader!./_examples/override_rule.php'; +import OverrideRuleDescription from './_examples/override_rule.md'; :::info -Implementing `rule_overridable` is not required but can enhance the usability of the rule. +Implementing `override_rule` is not required but can enhance the usability of the access rule. :::