Skip to content

Commit 9a3f71d

Browse files
committed
Check for capabilities to include in the quiz settings form, resolves #1
1 parent 5363d80 commit 9a3f71d

File tree

1 file changed

+95
-94
lines changed

1 file changed

+95
-94
lines changed

rule.php

Lines changed: 95 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -107,77 +107,78 @@ private function get_quit_button(): string {
107107
*/
108108
public static function add_settings_form_fields(mod_quiz_mod_form $quizform, MoodleQuickForm $mform) {
109109
global $DB;
110-
$quizid = $ineditmode = $quizform->get_instance();
111-
$displaydwnloadbutton = [];
112-
if ($ineditmode) {
113-
$readonly = 'readonly ';
114-
// Check if quiz has Seb Server enabled for.
115-
$sebserver = $DB->get_record('quizaccess_sebserver', ['sebserverquizid' => $quizid]);
116-
if (!empty($sebserver) && $sebserver->sebserverenabled == 1) {
117-
$displaydwnloadbutton = ['style="pointer-events: none!important;background-color: #ededed;"'];
118-
if (!quiz_has_attempts($quizid)) {
119-
$mform->addElement('html',
120-
'<script>var sebsection = document.getElementById("fitem_id_seb_requiresafeexambrowser"); ' .
121-
'sebsection.insertAdjacentHTML( "beforebegin", "<div class=\"alert alert-warning alert-block fade in\">' .
122-
get_string('managedbysebserver', 'quizaccess_sebserver') . '</div>"); </script>');
110+
global $COURSE;
111+
$context = context_course::instance($COURSE->id);
112+
if (has_capability('quizaccess/sebserver:canusesebserver', $context)) {
113+
$quizid = $ineditmode = $quizform->get_instance();
114+
$displaydwnloadbutton = [];
115+
if ($ineditmode) {
116+
$readonly = 'readonly ';
117+
// Check if quiz has Seb Server enabled for.
118+
$sebserver = $DB->get_record('quizaccess_sebserver', ['sebserverquizid' => $quizid]);
119+
if (!empty($sebserver) && $sebserver->sebserverenabled == 1) {
120+
$displaydwnloadbutton = ['style="pointer-events: none!important;background-color: #ededed;"'];
121+
if (!quiz_has_attempts($quizid)) {
122+
$mform->addElement('html',
123+
'<script>var sebsection = document.getElementById("fitem_id_seb_requiresafeexambrowser"); ' .
124+
'sebsection.insertAdjacentHTML( "beforebegin", "<div class=\"alert alert-warning alert-block fade in\">' .
125+
get_string('managedbysebserver', 'quizaccess_sebserver') . '</div>"); </script>');
126+
}
123127
}
128+
} else {
129+
$readonly = '';
130+
$displaydwnloadbutton = [];
124131
}
125-
} else {
126-
$readonly = '';
127-
$displaydwnloadbutton = [];
128-
}
129-
$mform->addElement('header', 'sebserverheader', get_string('pluginname', 'quizaccess_sebserver'));
132+
$mform->addElement('header', 'sebserverheader', get_string('pluginname', 'quizaccess_sebserver'));
130133

131-
$enableselectchange = ['style="pointer-events: none!important;background-color: #ededed;"'];
134+
$enableselectchange = ['style="pointer-events: none!important;background-color: #ededed;"'];
132135

133-
$connection = self::sebserverconnectiondetails(1);
134-
$readonlymanageddevices = '';
135-
if (empty($connection)) {
136-
$mform->addElement('html',
136+
$connection = self::sebserverconnectiondetails(1);
137+
$readonlymanageddevices = '';
138+
if (empty($connection)) {
139+
$mform->addElement('html',
137140
'<div class="alert alert-warning alert-block fade in">' .
138141
get_string('connectionnotsetupyet', 'quizaccess_sebserver') . '</div>');
139-
} else {
140-
$templates = [-1 => get_string('selectemplate', 'quizaccess_sebserver')];
141-
// Sometimes Sebserver set quiz with no template.
142-
if ($ineditmode && $sebserver && $sebserver->sebservertemplateid == 0) {
143-
$templates += [0 => get_string('notemplate', 'quizaccess_sebserver')];
144-
}
145-
foreach ($connection[3] as $templatedetails) {
146-
$templates += [$templatedetails->{'template_id'} => $templatedetails->{'template_name'}];
147-
}
148-
// What if Template was imported direct via sebserver?.
149-
if ($ineditmode && $sebserver) {
150-
if (!array_key_exists($sebserver->sebservertemplateid, $templates)) {
151-
$templates += [$sebserver->sebservertemplateid =>
152-
get_string('manageddevicetemplate', 'quizaccess_sebserver') . ' ' . $sebserver->sebservertemplateid];
142+
} else {
143+
$templates = [-1 => get_string('selectemplate', 'quizaccess_sebserver')];
144+
// Sometimes Sebserver set quiz with no template.
145+
if ($ineditmode && $sebserver && $sebserver->sebservertemplateid == 0) {
146+
$templates += [0 => get_string('notemplate', 'quizaccess_sebserver')];
147+
}
148+
foreach ($connection[3] as $templatedetails) {
149+
$templates += [$templatedetails->{'template_id'} => $templatedetails->{'template_name'}];
150+
}
151+
// What if Template was imported direct via sebserver?.
152+
if ($ineditmode && $sebserver) {
153+
if (!array_key_exists($sebserver->sebservertemplateid, $templates)) {
154+
$templates += [$sebserver->sebservertemplateid =>
155+
get_string('manageddevicetemplate', 'quizaccess_sebserver') . ' ' . $sebserver->sebservertemplateid];
156+
$readonlymanageddevices =
157+
'sebserverenabled.setAttribute("style","pointer-events: none!important;background-color: #ededed;");';
158+
}
159+
}
160+
// Now prevent anyone from modifying if there are attempts.
161+
if ($ineditmode && quiz_has_attempts($quizid)) {
153162
$readonlymanageddevices =
154163
'sebserverenabled.setAttribute("style","pointer-events: none!important;background-color: #ededed;");';
155164
}
156165
}
157-
// Now prevent anyone from modifying if there are attempts.
158-
if ($ineditmode && quiz_has_attempts($quizid)) {
159-
$readonlymanageddevices =
160-
'sebserverenabled.setAttribute("style","pointer-events: none!important;background-color: #ededed;");';
161-
}
162-
}
163-
global $COURSE;
164-
$context = context_course::instance($COURSE->id);
165-
$canusesebserver = has_capability('quizaccess/sebserver:canusesebserver', $context);
166-
$candeletesebserver = has_capability('quizaccess/sebserver:candeletesebserver', $context);
166+
$canusesebserver = has_capability('quizaccess/sebserver:canusesebserver', $context);
167+
$candeletesebserver = has_capability('quizaccess/sebserver:candeletesebserver', $context);
167168

168-
if (!$ineditmode && $canusesebserver && $connection) { // Create Mode.
169-
$enableselectchange = [];
170-
}
171-
if ($ineditmode && $candeletesebserver && $connection) { // Edit Mode.
172-
$enableselectchange = [];
173-
}
169+
if (!$ineditmode && $canusesebserver && $connection) { // Create Mode.
170+
$enableselectchange = [];
171+
}
172+
if ($ineditmode && $candeletesebserver && $connection) { // Edit Mode.
173+
$enableselectchange = [];
174+
}
174175

175-
$sebserverformchange = $enableselectchange + ['onChange' => 'sebserevrselectionchange(this)'];
176-
$mform->addElement('selectyesno', 'sebserverenabled', get_string('enablesebserver', 'quizaccess_sebserver'),
177-
$sebserverformchange);
178-
$mform->setType('sebserverenabled', PARAM_INT);
176+
$sebserverformchange = $enableselectchange + ['onChange' => 'sebserevrselectionchange(this)'];
177+
$mform->addElement('selectyesno', 'sebserverenabled', get_string('enablesebserver', 'quizaccess_sebserver'),
178+
$sebserverformchange);
179+
$mform->setType('sebserverenabled', PARAM_INT);
179180

180-
$embedjsscript = '<script>
181+
$embedjsscript = '<script>
181182
182183
coresebplugin = document.querySelector("#id_seb_requiresafeexambrowser");
183184
initialselectedseboption = coresebplugin.value;
@@ -209,47 +210,47 @@ function sebserevrselectionchange(sel) {
209210
210211
}
211212
</script>';
212-
$mform->addElement('html', $embedjsscript);
213-
if (is_array($templates) && $connection) {
214-
if (!$ineditmode) {
215-
$allowtemplatechange = [];
216-
} else {
217-
$allowtemplatechange = ['style="pointer-events: none!important;background-color: #ededed;"'];
218-
}
219-
// Address previous quizes that were created before sebserver.
220-
if ($ineditmode && empty($enableselectchange) && (!$sebserver || $sebserver->sebserverenabled == 0) ) {
221-
$allowtemplatechange = [];
222-
$readonly = ''; // Quit secret needs to be enabled too.
213+
$mform->addElement('html', $embedjsscript);
214+
if (isset($templates) && is_array($templates) && $connection) {
215+
if (!$ineditmode) {
216+
$allowtemplatechange = [];
217+
} else {
218+
$allowtemplatechange = ['style="pointer-events: none!important;background-color: #ededed;"'];
219+
}
220+
// Address previous quizes that were created before sebserver.
221+
if ($ineditmode && empty($enableselectchange) && (!$sebserver || $sebserver->sebserverenabled == 0) ) {
222+
$allowtemplatechange = [];
223+
$readonly = ''; // Quit secret needs to be enabled too.
224+
}
225+
$mform->addElement('select', 'sebservertemplateid', get_string('sebserverexamtemplate', 'quizaccess_sebserver'),
226+
$templates, $allowtemplatechange);
227+
$mform->setType('sebservertemplateid', PARAM_INT);
228+
$mform->disabledif ('sebservertemplateid', 'sebserverenabled', 'neq', 1);
229+
$mform->addHelpButton('sebservertemplateid', 'sebservertemplateid', 'quizaccess_sebserver');
223230
}
224-
$mform->addElement('select', 'sebservertemplateid', get_string('sebserverexamtemplate', 'quizaccess_sebserver'),
225-
$templates, $allowtemplatechange);
226-
$mform->setType('sebservertemplateid', PARAM_INT);
227-
$mform->disabledif ('sebservertemplateid', 'sebserverenabled', 'neq', 1);
228-
$mform->addHelpButton('sebservertemplateid', 'sebservertemplateid', 'quizaccess_sebserver');
229-
}
230-
$mform->addElement('selectyesno', 'sebservershowquitbtn', get_string('showquitbtn', 'quizaccess_sebserver'),
231-
$displaydwnloadbutton);
232-
$mform->setType('sebservershowquitbtn', PARAM_INT);
233-
$mform->setDefault('sebservershowquitbtn', 1);
234-
$mform->disabledif ('sebservershowquitbtn', 'sebserverenabled', 'neq', 1);
235-
$mform->addElement('text', 'sebserverquitsecret',
236-
get_string('sebserverquitsecret', 'quizaccess_sebserver'), $readonly . ' size="70"');
237-
$mform->setType('sebserverquitsecret', PARAM_RAW);
238-
$mform->setDefault('sebserverquitsecret', '');
239-
$mform->disabledif ('sebserverquitsecret', 'sebserverenabled', 'neq', 1);
240-
$mform->addHelpButton('sebserverquitsecret', 'sebserverquitsecret', 'quizaccess_sebserver');
241-
242-
if ($ineditmode) {
243-
$mform->addElement('html',
231+
$mform->addElement('selectyesno', 'sebservershowquitbtn', get_string('showquitbtn', 'quizaccess_sebserver'),
232+
$displaydwnloadbutton);
233+
$mform->setType('sebservershowquitbtn', PARAM_INT);
234+
$mform->setDefault('sebservershowquitbtn', 1);
235+
$mform->disabledif ('sebservershowquitbtn', 'sebserverenabled', 'neq', 1);
236+
$mform->addElement('text', 'sebserverquitsecret',
237+
get_string('sebserverquitsecret', 'quizaccess_sebserver'), $readonly . ' size="70"');
238+
$mform->setType('sebserverquitsecret', PARAM_RAW);
239+
$mform->setDefault('sebserverquitsecret', '');
240+
$mform->disabledif ('sebserverquitsecret', 'sebserverenabled', 'neq', 1);
241+
$mform->addHelpButton('sebserverquitsecret', 'sebserverquitsecret', 'quizaccess_sebserver');
242+
243+
if ($ineditmode) {
244+
$mform->addElement('html',
244245
'<div class="alert alert-warning alert-block fade in">' .
245246
get_string('modificationinstruction', 'quizaccess_sebserver') . '</div>');
246-
if (is_siteadmin() && $sebserver) {
247-
$mform->addElement('checkbox', 'resetseb', get_string('adminsonly', 'quizaccess_sebserver'),
248-
get_string('resetseb', 'quizaccess_sebserver'));
249-
$mform->addHelpButton('resetseb', 'resetseb', 'quizaccess_sebserver');
247+
if (is_siteadmin() && $sebserver) {
248+
$mform->addElement('checkbox', 'resetseb', get_string('adminsonly', 'quizaccess_sebserver'),
249+
get_string('resetseb', 'quizaccess_sebserver'));
250+
$mform->addHelpButton('resetseb', 'resetseb', 'quizaccess_sebserver');
251+
}
250252
}
251253
}
252-
253254
}
254255

255256
/**

0 commit comments

Comments
 (0)