Skip to content

Commit 5ad84d5

Browse files
committed
[docs] Add access_rule_override_base to quizaccess page
This new base class was added in MDL-80945.
1 parent f42eb08 commit 5ad84d5

File tree

3 files changed

+113
-0
lines changed

3 files changed

+113
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<!-- markdownlint-disable first-line-heading -->
2+
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 extend the `access_override_rule_base` class in your rule class definition.
3+
4+
Please refer to the inline phpdocs of the [mod_quiz::access_override_rule_base](https://github.com/moodle/moodle/blob/main/mod/quiz/classes/local/access_override_rule_base.php) class for detailed descriptions of the functions and meaning.
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
use mod_quiz\form\edit_override_form;
2+
use mod_quiz\local\access_override_rule_base;
3+
use MoodleQuickForm;
4+
5+
class quizaccess_pluginname extends access_override_rule_base {
6+
7+
public static function add_form_fields(edit_override_form $quizform, MoodleQuickForm $mform): void {
8+
// Use the $mform to add the rule override fields...
9+
$mform->addElement(
10+
'select',
11+
'plgn_setting1',
12+
get_string('plgn_setting1', 'quizaccess_pluginname'),
13+
['A', 'B', 'C'],
14+
);
15+
16+
$mform->addElement(
17+
'select',
18+
'plgn_setting2',
19+
get_string('plgn_setting2', 'quizaccess_pluginname'),
20+
['1', '2', '3'],
21+
);
22+
}
23+
24+
public static function validate_form_fields(array $errors,
25+
array $data, array $files, edit_override_form $quizform): array {
26+
// Check and push to $errors array...
27+
return $errors;
28+
}
29+
30+
public static function save_settings(array $override): void {
31+
// Save $override data to plugin settings table...
32+
global $DB;
33+
34+
$plgnoverride = (object)[
35+
'overrideid' => $override['overrideid'],
36+
'setting1' => $override['plgnm_setting1'],
37+
'setting2' => $override['plgnm_setting2'],
38+
];
39+
40+
if ($plgnoverrideid = $DB->get_field('quizaccess_pluginname_overrides', 'id', ['overrideid' => $override['overrideid']])) {
41+
$plgnoverride->id = $plgnoverrideid;
42+
$DB->update_record('quizaccess_pluginname_overrides', $plgnoverride);
43+
} else {
44+
$DB->insert_record('quizaccess_pluginname_overrides', $plgnoverride);
45+
}
46+
}
47+
48+
public static function delete_settings($quizid, $overrides): void {
49+
// Remove $overrides from $quiz.
50+
global $DB;
51+
$ids = array_column($overrides, 'id');
52+
list($insql, $inparams) = $DB->get_in_or_equal($ids);
53+
$DB->delete_records_select('quizaccess_pluginname_overrides', "id $insql", $inparams);
54+
}
55+
56+
public static function get_settings(): array {
57+
// Return string array of all override form setting keys.
58+
return ['plgnm_setting1', 'plgnm_setting2'];
59+
}
60+
61+
public static function get_required_settings(): array {
62+
// Return string array of override form setting keys that are required.
63+
return ['plgnm_setting1'];
64+
}
65+
66+
public static function get_settings_sql($overridetablename): array {
67+
// Return an array of selects, joins and parameters to be used to query relevant rule overrides...
68+
return [
69+
"plgnm.setting1 plgnm_setting1, plgnm.setting2 plgnm_setting2",
70+
"LEFT JOIN {quizaccess_pluginname_overrides} plgnm ON plgnm.overrideid = {$overridetablename}.id",
71+
[],
72+
];
73+
}
74+
75+
public static function add_table_fields($override, $fields, $values, $context): array {
76+
// Extend the override table view by adding fields and values that display the rule's overrides.
77+
if (!empty($override->plgnm_setting1)) {
78+
$fields[] = get_string('pluginname', 'quizaccess_pluginname');
79+
$values[] = "{$override->plgnm_setting1}, {$override->plgnm_setting2}";
80+
}
81+
return [$fields, $values];
82+
}
83+
84+
public static function clean_form_data(array $formdata): array {
85+
// Clean and normalise submitted values for the rule.
86+
if (isset($formdata['plugin_enabled']) && $formdata['plugin_enabled'] === '0') {
87+
$formdata['plugin_enabled'] = null;
88+
}
89+
return $formdata;
90+
}
91+
}

docs/apis/plugintypes/quizaccess/index.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,21 @@ import RuleDescription from './_examples/rule.md';
6666
example={RuleFile}
6767
description={RuleDescription}
6868
/>
69+
70+
import RuleOverridableFile from '!!raw-loader!./_examples/access_override_rule_base.php';
71+
import RuleOverridableDescription from './_examples/access_override_rule_base.md';
72+
73+
<ComponentFileSummary
74+
filepath="/rule.php"
75+
summary="Rule definition class with override"
76+
plugintype="quizaccessrule"
77+
pluginname="pluginname"
78+
example={RuleOverridableFile}
79+
description={RuleOverridableDescription}
80+
/>
81+
82+
:::info
83+
84+
Basing your rule on `access_override_rule_base` is not required but can enhance the usability of the rule.
85+
86+
:::

0 commit comments

Comments
 (0)