Skip to content

Commit

Permalink
MDL-82659 quiz: Add new SEB capabilities.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Kotlyar committed Aug 2, 2024
1 parent 8a6e856 commit d42cea9
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 4 deletions.
23 changes: 22 additions & 1 deletion mod/quiz/accessrule/seb/classes/settings_provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,11 @@ public static function is_conflicting_permissions(\context $context) {
return true;
}

if (!self::can_use_seb_client_config($context) &&
$settings->get('requiresafeexambrowser') == self::USE_SEB_CLIENT_CONFIG) {
return true;
}

if (!self::can_upload_seb_file($context) &&
$settings->get('requiresafeexambrowser') == self::USE_SEB_UPLOAD_CONFIG) {
return true;
Expand Down Expand Up @@ -575,7 +580,9 @@ public static function get_requiresafeexambrowser_options(\context $context): ar
$options[self::USE_SEB_UPLOAD_CONFIG] = get_string('seb_use_upload', 'quizaccess_seb');
}

$options[self::USE_SEB_CLIENT_CONFIG] = get_string('seb_use_client', 'quizaccess_seb');
if (self::can_use_seb_client_config($context) || self::is_conflicting_permissions($context)) {
$options[self::USE_SEB_CLIENT_CONFIG] = get_string('seb_use_client', 'quizaccess_seb');
}

return $options;
}
Expand Down Expand Up @@ -745,6 +752,16 @@ public static function can_configure_seb(\context $context): bool {
return has_capability('quizaccess/seb:manage_seb_requiresafeexambrowser', $context);
}

/**
* Check if the current user can select to use the SEB client configuration.
*
* @param \context $context Context to check access in.
* @return bool
*/
public static function can_use_seb_client_config(\context $context): bool {
return has_capability('quizaccess/seb:manage_seb_usesebclientconfig', $context);
}

/**
* Check if the current user can use preconfigured templates.
*
Expand Down Expand Up @@ -792,6 +809,10 @@ public static function can_change_seb_allowedbrowserexamkeys(\context $context):
* @return bool
*/
public static function can_configure_manually(\context $context): bool {
if (!has_capability('quizaccess/seb:manage_seb_configuremanually', $context)) {
return false;
}

foreach (self::get_seb_config_elements() as $name => $type) {
if (self::can_manage_seb_config_setting($name, $context)) {
return true;
Expand Down
18 changes: 18 additions & 0 deletions mod/quiz/accessrule/seb/db/access.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,24 @@
'editingteacher' => CAP_ALLOW
]
],
'quizaccess/seb:manage_seb_configuremanually' => [
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'archetypes' => [
'manager' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
],
'clonepermissionsfrom' => 'quizaccess/seb:manage_seb_requiresafeexambrowser',
],
'quizaccess/seb:manage_seb_usesebclientconfig' => [
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'archetypes' => [
'manager' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
],
'clonepermissionsfrom' => 'quizaccess/seb:manage_seb_requiresafeexambrowser',
],
'quizaccess/seb:manage_seb_templateid' => [
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
Expand Down
2 changes: 2 additions & 0 deletions mod/quiz/accessrule/seb/lang/en/quizaccess_seb.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@
$string['seb:manage_seb_regexallowed'] = 'Change SEB quiz setting: Regex expressions allowed';
$string['seb:manage_seb_regexblocked'] = 'Change SEB quiz setting: Regex expressions blocked';
$string['seb:manage_seb_requiresafeexambrowser'] = 'Change SEB quiz setting: Require Safe Exam Browser';
$string['seb:manage_seb_configuremanually'] = 'Change SEB quiz setting: Select manual configuration';
$string['seb:manage_seb_showkeyboardlayout'] = 'Change SEB quiz setting: Show keyboard layout';
$string['seb:manage_seb_showreloadbutton'] = 'Change SEB quiz setting: Show reload button';
$string['seb:manage_seb_showsebtaskbar'] = 'Change SEB quiz setting: Show task bar';
Expand All @@ -114,6 +115,7 @@
$string['seb:manage_seb_showsebdownloadlink'] = 'Change SEB quiz setting: Show download link';
$string['seb:manage_seb_templateid'] = 'Change SEB quiz setting: Select SEB template';
$string['seb:manage_seb_userconfirmquit'] = 'Change SEB quiz setting: Confirm on quit';
$string['seb:manage_seb_usesebclientconfig'] = 'Change SEB quiz setting: Use SEB client configuration';
$string['seb:managetemplates'] = 'Manage SEB configuration templates';
$string['seb_activateurlfiltering'] = 'Enable URL filtering';
$string['seb_activateurlfiltering_help'] = 'If enabled, URLs will be filtered when loading web pages. The filter set has to be defined below.';
Expand Down
30 changes: 28 additions & 2 deletions mod/quiz/accessrule/seb/tests/settings_provider_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -656,15 +656,33 @@ public function test_get_requiresafeexambrowser_options($settingcapability): voi

$options = settings_provider::get_requiresafeexambrowser_options($this->context);

$this->assertCount(2, $options);
$this->assertCount(1, $options);
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_CONFIG_MANUALLY, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_TEMPLATE, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_UPLOAD_CONFIG, $options));
$this->assertTrue(array_key_exists(settings_provider::USE_SEB_CLIENT_CONFIG, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_CLIENT_CONFIG, $options));
$this->assertTrue(array_key_exists(settings_provider::USE_SEB_NO, $options));

assign_capability($settingcapability, CAP_ALLOW, $this->roleid, $this->context->id);
$options = settings_provider::get_requiresafeexambrowser_options($this->context);
$this->assertCount(1, $options);
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_CONFIG_MANUALLY, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_TEMPLATE, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_UPLOAD_CONFIG, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_CLIENT_CONFIG, $options));
$this->assertTrue(array_key_exists(settings_provider::USE_SEB_NO, $options));

assign_capability('quizaccess/seb:manage_seb_configuremanually', CAP_ALLOW, $this->roleid, $this->context->id);
$options = settings_provider::get_requiresafeexambrowser_options($this->context);
$this->assertCount(2, $options);
$this->assertTrue(array_key_exists(settings_provider::USE_SEB_CONFIG_MANUALLY, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_TEMPLATE, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_UPLOAD_CONFIG, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_CLIENT_CONFIG, $options));
$this->assertTrue(array_key_exists(settings_provider::USE_SEB_NO, $options));

assign_capability('quizaccess/seb:manage_seb_usesebclientconfig', CAP_ALLOW, $this->roleid, $this->context->id);
$options = settings_provider::get_requiresafeexambrowser_options($this->context);
$this->assertCount(3, $options);
$this->assertTrue(array_key_exists(settings_provider::USE_SEB_CONFIG_MANUALLY, $options));
$this->assertFalse(array_key_exists(settings_provider::USE_SEB_TEMPLATE, $options));
Expand Down Expand Up @@ -1134,6 +1152,9 @@ public function test_can_configure_manually($settingcapability): void {

$this->assertFalse(settings_provider::can_configure_manually($this->context));

assign_capability('quizaccess/seb:manage_seb_configuremanually', CAP_ALLOW, $this->roleid, $this->context->id);
$this->assertFalse(settings_provider::can_configure_manually($this->context));

assign_capability($settingcapability, CAP_ALLOW, $this->roleid, $this->context->id);
$this->assertTrue(settings_provider::can_configure_manually($this->context));
}
Expand Down Expand Up @@ -1228,6 +1249,11 @@ public function test_is_conflicting_permissions_for_configure_manually($settingc

$this->set_up_user_and_role();

$this->assertTrue(settings_provider::is_conflicting_permissions($this->context));

assign_capability('quizaccess/seb:manage_seb_configuremanually', CAP_ALLOW, $this->roleid, $this->context->id);
$this->assertTrue(settings_provider::is_conflicting_permissions($this->context));

assign_capability($settingcapability, CAP_ALLOW, $this->roleid, $this->context->id);
$this->assertFalse(settings_provider::is_conflicting_permissions($this->context));
}
Expand Down
2 changes: 1 addition & 1 deletion mod/quiz/accessrule/seb/version.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

defined('MOODLE_INTERNAL') || die();

$plugin->version = 2024042200;
$plugin->version = 2024062800;
$plugin->requires = 2024041600;
$plugin->component = 'quizaccess_seb';
$plugin->maturity = MATURITY_STABLE;

0 comments on commit d42cea9

Please sign in to comment.