<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace mod_bigbluebuttonbn; use admin_category; use admin_setting; use admin_setting_configcheckbox; use admin_setting_configmultiselect; use admin_setting_configpasswordunmask; use admin_setting_configstoredfile; use admin_setting_configtext; use admin_setting_configtextarea; use admin_setting_heading; use admin_settingpage; use cache_helper; use lang_string; use mod_bigbluebuttonbn\local\config; use mod_bigbluebuttonbn\local\helpers\roles;> use mod_bigbluebuttonbn\local\proxy\bigbluebutton_proxy;/** * The mod_bigbluebuttonbn settings helper * * @package mod_bigbluebuttonbn * @copyright 2021 onwards, Blindside Networks Inc * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @author Laurent David (laurent [at] call-learning [dt] fr) */ class settings { /** @var admin_setting shared value */ private $admin; /** @var bool Module is enabled */ private $moduleenabled; /** @var string The name of the section */ private $section; /** @var string The parent name */ private $parent = "modbigbluebuttonbnfolder"; /** @var string The section name prefix */ private $sectionnameprefix = "mod_bigbluebuttonbn"; /** * Constructor for the bigbluebuttonbn settings. * * @param admin_category $admin * @param \core\plugininfo\mod $module * @param string $categoryname for the plugin setting (main setting page) */ public function __construct(admin_category $admin, \core\plugininfo\mod $module, string $categoryname) { $this->moduleenabled = $module->is_enabled() === true; $this->admin = $admin; $this->section = $categoryname; $modbigbluebuttobnfolder = new admin_category( $this->parent, new lang_string('pluginname', 'mod_bigbluebuttonbn'), $module->is_enabled() === false ); $admin->add('modsettings', $modbigbluebuttobnfolder); $mainsettings = $this->add_general_settings(); $admin->add($this->parent, $mainsettings); } /** * Add all settings. */ public function add_all_settings(): void { // Renders settings for welcome messages. $this->add_defaultmessages_settings(); // Evaluates if recordings are enabled for the Moodle site. // Renders settings for record feature. $this->add_record_settings(); // Renders settings for import recordings. $this->add_importrecordings_settings(); // Renders settings for showing recordings. $this->add_showrecordings_settings(); // Renders settings for meetings. $this->add_waitmoderator_settings(); $this->add_voicebridge_settings(); $this->add_preupload_settings(); $this->add_userlimit_settings(); $this->add_participants_settings(); $this->add_muteonstart_settings(); $this->add_lock_settings(); // Renders settings for extended capabilities. $this->add_extended_settings(); // Renders settings for experimental features. $this->add_experimental_settings(); } /** * Add the setting and lock it conditionally. * * @param string $name * @param admin_setting $item * @param admin_settingpage $settings */ protected function add_conditional_element(string $name, admin_setting $item, admin_settingpage $settings): void { global $CFG; if (isset($CFG->bigbluebuttonbn) && isset($CFG->bigbluebuttonbn[$name])) { if ($item->config_read($item->name)) { // A value has been set, we can safely omit the setting and it won't interfere with installation // process. // The idea behind it is to hide values from end-users in case we use multitenancy for example. return; } } $settings->add($item); } /** * Helper function renders general settings if the feature is enabled. * * @return admin_settingpage * @throws \coding_exception */ protected function add_general_settings(): admin_settingpage { global $CFG; $settingsgeneral = new admin_settingpage( $this->section, get_string('config_general', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_general_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { // Configuration for BigBlueButton. $item = new admin_setting_heading('bigbluebuttonbn_config_general', '', get_string('config_general_description', 'bigbluebuttonbn') ); if (empty($CFG->bigbluebuttonbn_default_dpa_accepted)) { $settingsgeneral->add(new admin_setting_configcheckbox( 'bigbluebuttonbn_default_dpa_accepted', get_string('acceptdpa', 'mod_bigbluebuttonbn'), get_string('enablingbigbluebuttondpainfo', 'mod_bigbluebuttonbn', config::DEFAULT_DPA_URL), 0 )); } $settingsgeneral->add($item); $item = new admin_setting_configtext( 'bigbluebuttonbn_server_url', get_string('config_server_url', 'bigbluebuttonbn'), get_string('config_server_url_description', 'bigbluebuttonbn'), config::DEFAULT_SERVER_URL, PARAM_RAW ); $item->set_updatedcallback( function() { $this->reset_cache(); $task = new \mod_bigbluebuttonbn\task\reset_recordings(); \core\task\manager::queue_adhoc_task($task); } ); $this->add_conditional_element( 'server_url', $item, $settingsgeneral ); $item = new admin_setting_configpasswordunmask( 'bigbluebuttonbn_shared_secret', get_string('config_shared_secret', 'bigbluebuttonbn'), get_string('config_shared_secret_description', 'bigbluebuttonbn'), config::DEFAULT_SHARED_SECRET ); $this->add_conditional_element( 'shared_secret', $item, $settingsgeneral ); $item = new \admin_setting_description( 'bigbluebuttonbn_dpa_info', '', get_string('config_dpa_note', 'bigbluebuttonbn', config::DEFAULT_DPA_URL), ); $this->add_conditional_element( 'dpa_info', $item, $settingsgeneral );> $item = new admin_setting_configtext( } > 'bigbluebuttonbn_poll_interval', return $settingsgeneral; > get_string('config_poll_interval', 'bigbluebuttonbn'), } > get_string('config_poll_interval_description', 'bigbluebuttonbn'), > bigbluebutton_proxy::DEFAULT_POLL_INTERVAL, /** > PARAM_INT * Helper function renders default messages settings if the feature is enabled. > ); */ > $this->add_conditional_element( protected function add_defaultmessages_settings(): void { > 'poll_interval', // Configuration for 'default messages' feature. > $item, $defaultmessagessetting = new admin_settingpage( > $settingsgeneral "{$this->sectionnameprefix}_default_messages", > );get_string('config_default_messages', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_default_messages_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_default_messages', '', get_string('config_default_messages_description', 'bigbluebuttonbn') ); $defaultmessagessetting->add($item); $item = new admin_setting_configtextarea( 'bigbluebuttonbn_welcome_default', get_string('config_welcome_default', 'bigbluebuttonbn'), get_string('config_welcome_default_description', 'bigbluebuttonbn'), '', PARAM_TEXT ); $this->add_conditional_element( 'welcome_default', $item, $defaultmessagessetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_welcome_editable', get_string('config_welcome_editable', 'bigbluebuttonbn'), get_string('config_welcome_editable_description', 'bigbluebuttonbn'), 1, ); $this->add_conditional_element( 'welcome_editable', $item, $defaultmessagessetting ); } $this->admin->add($this->parent, $defaultmessagessetting); } /** * Helper function renders record settings if the feature is enabled. */ protected function add_record_settings(): void { // Configuration for 'recording' feature. $recordingsetting = new admin_settingpage( "{$this->sectionnameprefix}_recording", get_string('config_recording', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_record_meeting_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_recording', '', get_string('config_recording_description', 'bigbluebuttonbn') ); $recordingsetting->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_default', get_string('config_recording_default', 'bigbluebuttonbn'), get_string('config_recording_default_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'recording_default', $item, $recordingsetting ); $item = new admin_setting_configtext( 'bigbluebuttonbn_recording_refresh_period', get_string('config_recording_refresh_period', 'bigbluebuttonbn'), get_string('config_recording_refresh_period_description', 'bigbluebuttonbn'), recording::RECORDING_REFRESH_DEFAULT_PERIOD, PARAM_INT ); $this->add_conditional_element( 'recording_refresh_period', $item, $recordingsetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_editable', get_string('config_recording_editable', 'bigbluebuttonbn'), get_string('config_recording_editable_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'recording_editable', $item, $recordingsetting ); // Add recording start to load and allow/hide stop/pause. $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_all_from_start_default', get_string('config_recording_all_from_start_default', 'bigbluebuttonbn'), get_string('config_recording_all_from_start_default_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recording_all_from_start_default', $item, $recordingsetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_all_from_start_editable', get_string('config_recording_all_from_start_editable', 'bigbluebuttonbn'), get_string('config_recording_all_from_start_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recording_all_from_start_editable', $item, $recordingsetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_hide_button_default', get_string('config_recording_hide_button_default', 'bigbluebuttonbn'), get_string('config_recording_hide_button_default_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recording_hide_button_default', $item, $recordingsetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_hide_button_editable', get_string('config_recording_hide_button_editable', 'bigbluebuttonbn'), get_string('config_recording_hide_button_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recording_hide_button_editable', $item, $recordingsetting ); } $this->admin->add($this->parent, $recordingsetting); } /** * Helper function renders import recording settings if the feature is enabled. */ protected function add_importrecordings_settings(): void { // Configuration for 'import recordings' feature. $importrecordingsettings = new admin_settingpage( "{$this->sectionnameprefix}_importrecording", get_string('config_importrecordings', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_import_recordings_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_importrecordings', '', get_string('config_importrecordings_description', 'bigbluebuttonbn') ); $importrecordingsettings->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_importrecordings_enabled', get_string('config_importrecordings_enabled', 'bigbluebuttonbn'), get_string('config_importrecordings_enabled_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'importrecordings_enabled', $item, $importrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_importrecordings_from_deleted_enabled', get_string('config_importrecordings_from_deleted_enabled', 'bigbluebuttonbn'), get_string('config_importrecordings_from_deleted_enabled_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'importrecordings_from_deleted_enabled', $item, $importrecordingsettings ); } $this->admin->add($this->parent, $importrecordingsettings); } /** * Helper function renders show recording settings if the feature is enabled. */ protected function add_showrecordings_settings(): void { // Configuration for 'show recordings' feature. $showrecordingsettings = new admin_settingpage( "{$this->sectionnameprefix}_showrecordings", get_string('config_recordings', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_show_recordings_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_recordings', '', get_string('config_recordings_description', 'bigbluebuttonbn') ); $showrecordingsettings->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_deleted_default', get_string('config_recordings_deleted_default', 'bigbluebuttonbn'), get_string('config_recordings_deleted_default_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'recordings_deleted_default', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_deleted_editable', get_string('config_recordings_deleted_editable', 'bigbluebuttonbn'), get_string('config_recordings_deleted_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recordings_deleted_editable', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_imported_default', get_string('config_recordings_imported_default', 'bigbluebuttonbn'), get_string('config_recordings_imported_default_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recordings_imported_default', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_imported_editable', get_string('config_recordings_imported_editable', 'bigbluebuttonbn'), get_string('config_recordings_imported_editable_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'recordings_imported_editable', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_preview_default', get_string('config_recordings_preview_default', 'bigbluebuttonbn'), get_string('config_recordings_preview_default_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'recordings_preview_default', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_preview_editable', get_string('config_recordings_preview_editable', 'bigbluebuttonbn'), get_string('config_recordings_preview_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recordings_preview_editable', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordings_asc_sort', get_string('config_recordings_asc_sort', 'bigbluebuttonbn'), get_string('config_recordings_asc_sort_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recordings_asc_sort', $item, $showrecordingsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recording_protect_editable', get_string('config_recording_protect_editable', 'bigbluebuttonbn'), get_string('config_recording_protect_editable_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'recording_protect_editable', $item, $showrecordingsettings ); } $this->admin->add($this->parent, $showrecordingsettings); } /** * Helper function renders wait for moderator settings if the feature is enabled. */ protected function add_waitmoderator_settings(): void { // Configuration for wait for moderator feature. $waitmoderatorsettings = new admin_settingpage( "{$this->sectionnameprefix}_waitformoderator", get_string('config_waitformoderator', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_wait_moderator_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_waitformoderator', '', get_string('config_waitformoderator_description', 'bigbluebuttonbn') ); $waitmoderatorsettings->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_waitformoderator_default', get_string('config_waitformoderator_default', 'bigbluebuttonbn'), get_string('config_waitformoderator_default_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'waitformoderator_default', $item, $waitmoderatorsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_waitformoderator_editable', get_string('config_waitformoderator_editable', 'bigbluebuttonbn'), get_string('config_waitformoderator_editable_description', 'bigbluebuttonbn'), 1 ); $this->add_conditional_element( 'waitformoderator_editable', $item, $waitmoderatorsettings ); $item = new admin_setting_configtext( 'bigbluebuttonbn_waitformoderator_ping_interval', get_string('config_waitformoderator_ping_interval', 'bigbluebuttonbn'), get_string('config_waitformoderator_ping_interval_description', 'bigbluebuttonbn'), 10, PARAM_INT ); $this->add_conditional_element( 'waitformoderator_ping_interval', $item, $waitmoderatorsettings ); $item = new admin_setting_configtext( 'bigbluebuttonbn_waitformoderator_cache_ttl', get_string('config_waitformoderator_cache_ttl', 'bigbluebuttonbn'), get_string('config_waitformoderator_cache_ttl_description', 'bigbluebuttonbn'), 60, PARAM_INT ); $this->add_conditional_element( 'waitformoderator_cache_ttl', $item, $waitmoderatorsettings ); } $this->admin->add($this->parent, $waitmoderatorsettings); } /** * Helper function renders static voice bridge settings if the feature is enabled. */ protected function add_voicebridge_settings(): void { // Configuration for "static voice bridge" feature. $voicebridgesettings = new admin_settingpage( "{$this->sectionnameprefix}_voicebridge", get_string('config_voicebridge', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_static_voice_bridge_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_voicebridge', '', get_string('config_voicebridge_description', 'bigbluebuttonbn') ); $voicebridgesettings->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_voicebridge_editable', get_string('config_voicebridge_editable', 'bigbluebuttonbn'), get_string('config_voicebridge_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'voicebridge_editable', $item, $voicebridgesettings ); } $this->admin->add($this->parent, $voicebridgesettings); } /** * Helper function renders preuploaded presentation settings if the feature is enabled. */ protected function add_preupload_settings(): void { // Configuration for "preupload presentation" feature. $preuploadsettings = new admin_settingpage( "{$this->sectionnameprefix}_preupload", get_string('config_preuploadpresentation', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_preupload_presentation_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { // This feature only works if curl is installed (but it is as now required by Moodle). The checks have been removed. $item = new admin_setting_heading( 'bigbluebuttonbn_config_preuploadpresentation', '', get_string('config_preuploadpresentation_description', 'bigbluebuttonbn') ); $preuploadsettings->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_preuploadpresentation_editable', get_string('config_preuploadpresentation_editable', 'bigbluebuttonbn'), get_string('config_preuploadpresentation_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'preuploadpresentation_editable', $item, $preuploadsettings ); // Note: checks on curl library have been removed as it is a requirement from Moodle. $filemanageroptions = []; $filemanageroptions['accepted_types'] = '*'; $filemanageroptions['maxbytes'] = 0; $filemanageroptions['subdirs'] = 0; $filemanageroptions['maxfiles'] = 1; $filemanageroptions['mainfile'] = true; $filemanager = new admin_setting_configstoredfile( 'mod_bigbluebuttonbn/presentationdefault', get_string('config_presentation_default', 'bigbluebuttonbn'), get_string('config_presentation_default_description', 'bigbluebuttonbn'), 'presentationdefault', 0, $filemanageroptions ); $preuploadsettings->add($filemanager); } $this->admin->add($this->parent, $preuploadsettings); } /** * Helper function renders userlimit settings if the feature is enabled. */ protected function add_userlimit_settings(): void { $userlimitsettings = new admin_settingpage( "{$this->sectionnameprefix}_userlimit", get_string('config_userlimit', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_user_limit_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { // Configuration for "user limit" feature. $item = new admin_setting_heading( 'bigbluebuttonbn_config_userlimit', '', get_string('config_userlimit_description', 'bigbluebuttonbn') ); $userlimitsettings->add($item); $item = new admin_setting_configtext( 'bigbluebuttonbn_userlimit_default', get_string('config_userlimit_default', 'bigbluebuttonbn'), get_string('config_userlimit_default_description', 'bigbluebuttonbn'), 0, PARAM_INT ); $this->add_conditional_element( 'userlimit_default', $item, $userlimitsettings ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_userlimit_editable', get_string('config_userlimit_editable', 'bigbluebuttonbn'), get_string('config_userlimit_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'userlimit_editable', $item, $userlimitsettings ); } $this->admin->add($this->parent, $userlimitsettings); } /** * Helper function renders participant settings if the feature is enabled. */ protected function add_participants_settings(): void { // Configuration for defining the default role/user that will be moderator on new activities. $participantsettings = new admin_settingpage( "{$this->sectionnameprefix}_participant", get_string('config_participant', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_moderator_default_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_participant', '', get_string('config_participant_description', 'bigbluebuttonbn') ); $participantsettings->add($item); // UI for 'participants' feature. $roles = roles::get_roles(null, false); $owner = [ '0' => get_string('mod_form_field_participant_list_type_owner', 'bigbluebuttonbn') ]; $item = new admin_setting_configmultiselect( 'bigbluebuttonbn_participant_moderator_default', get_string('config_participant_moderator_default', 'bigbluebuttonbn'), get_string('config_participant_moderator_default_description', 'bigbluebuttonbn'), array_keys($owner), $owner + $roles ); $this->add_conditional_element( 'participant_moderator_default', $item, $participantsettings ); } $this->admin->add($this->parent, $participantsettings); } /** * Helper function renders general settings if the feature is enabled. */ protected function add_muteonstart_settings(): void { // Configuration for BigBlueButton. $muteonstartsetting = new admin_settingpage( "{$this->sectionnameprefix}_muteonstart", get_string('config_muteonstart', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_muteonstart_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_muteonstart', '', get_string('config_muteonstart_description', 'bigbluebuttonbn') ); $muteonstartsetting->add($item); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_muteonstart_default', get_string('config_muteonstart_default', 'bigbluebuttonbn'), get_string('config_muteonstart_default_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'muteonstart_default', $item, $muteonstartsetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_muteonstart_editable', get_string('config_muteonstart_editable', 'bigbluebuttonbn'), get_string('config_muteonstart_editable_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'muteonstart_editable', $item, $muteonstartsetting ); } $this->admin->add($this->parent, $muteonstartsetting); } /** * Helper function to render lock settings. */ protected function add_lock_settings(): void { $lockingsetting = new admin_settingpage( "{$this->sectionnameprefix}_locksettings", get_string('config_locksettings', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_lock_shown()) && ($this->moduleenabled) ); // Configuration for various lock settings for meetings. if ($this->admin->fulltree) { $this->add_lock_setting_from_name('disablecam', $lockingsetting); $this->add_lock_setting_from_name('disablemic', $lockingsetting); $this->add_lock_setting_from_name('disableprivatechat', $lockingsetting); $this->add_lock_setting_from_name('disablepublicchat', $lockingsetting); $this->add_lock_setting_from_name('disablenote', $lockingsetting); $this->add_lock_setting_from_name('hideuserlist', $lockingsetting);< $this->add_lock_setting_from_name('lockonjoin', $lockingsetting);} $this->admin->add($this->parent, $lockingsetting); } /** * Helper function renders setting if the feature is enabled. * * @param string $settingname * @param admin_settingpage $lockingsetting The parent settingpage to add to */ protected function add_lock_setting_from_name(string $settingname, admin_settingpage $lockingsetting): void { $validatorname = "section_{$settingname}_shown"; if ((boolean) setting_validator::$validatorname()) { // Configuration for BigBlueButton. $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_' . $settingname . '_default', get_string('config_' . $settingname . '_default', 'bigbluebuttonbn'), get_string('config_' . $settingname . '_default_description', 'bigbluebuttonbn'), config::defaultvalue($settingname . '_default') ); $this->add_conditional_element( $settingname . '_default', $item, $lockingsetting ); $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_' . $settingname . '_editable', get_string('config_' . $settingname . '_editable', 'bigbluebuttonbn'), get_string('config_' . $settingname . '_editable_description', 'bigbluebuttonbn'), config::defaultvalue($settingname . '_editable') ); $this->add_conditional_element( $settingname . '_editable', $item, $lockingsetting ); } } /** * Helper function renders extended settings if any of the features there is enabled. */ protected function add_extended_settings(): void { // Configuration for extended capabilities. $extendedcapabilitiessetting = new admin_settingpage( "{$this->sectionnameprefix}_extendedcapabilities", get_string('config_extended_capabilities', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_settings_extended_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_extended_capabilities', '', get_string('config_extended_capabilities_description', 'bigbluebuttonbn') ); $extendedcapabilitiessetting->add($item); // UI for 'notify users when recording ready' feature. $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_recordingready_enabled', get_string('config_recordingready_enabled', 'bigbluebuttonbn'), get_string('config_recordingready_enabled_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'recordingready_enabled', $item, $extendedcapabilitiessetting ); } $this->admin->add($this->parent, $extendedcapabilitiessetting); // Configuration for extended BN capabilities should go here. } /** * Helper function renders experimental settings if any of the features there is enabled. */ protected function add_experimental_settings(): void { // Configuration for experimental features should go here. $experimentalfeaturessetting = new admin_settingpage( "{$this->sectionnameprefix}_experimentalfeatures", get_string('config_experimental_features', 'bigbluebuttonbn'), 'moodle/site:config', !((boolean) setting_validator::section_settings_extended_shown()) && ($this->moduleenabled) ); if ($this->admin->fulltree) { $item = new admin_setting_heading( 'bigbluebuttonbn_config_experimental_features', '', get_string('config_experimental_features_description', 'bigbluebuttonbn') ); $experimentalfeaturessetting->add($item); // UI for 'register meeting events' feature. $item = new admin_setting_configcheckbox( 'bigbluebuttonbn_meetingevents_enabled', get_string('config_meetingevents_enabled', 'bigbluebuttonbn'), get_string('config_meetingevents_enabled_description', 'bigbluebuttonbn'), 0 ); $this->add_conditional_element( 'meetingevents_enabled',> $item, $item, > $experimentalfeaturessetting $experimentalfeaturessetting > ); ); > // UI for 'register meeting events' feature. } > $item = new admin_setting_configcheckbox( $this->admin->add($this->parent, $experimentalfeaturessetting); > 'bigbluebuttonbn_guestaccess_enabled', } > get_string('config_guestaccess_enabled', 'bigbluebuttonbn'), > get_string('config_guestaccess_enabled_description', 'bigbluebuttonbn'), /** > 0 * Process reset cache. > ); */ > $this->add_conditional_element( protected function reset_cache() { > 'guestaccess_enabled',// Reset serverinfo cache. cache_helper::purge_by_event('mod_bigbluebuttonbn/serversettingschanged'); } }