<?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_configselect;
use admin_setting_configstoredfile;
use admin_setting_configtext;
use admin_setting_configtextarea;
use admin_setting_heading;
use admin_settingpage;
use cache_helper;
> use core_plugin_manager;
use lang_string;
use mod_bigbluebuttonbn\local\config;
use mod_bigbluebuttonbn\local\helpers\roles;
> use mod_bigbluebuttonbn\local\plugins\admin_page_manage_extensions;
> 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 */
> /** @var admin_category shared value */
private $admin;
> /** @var bool whether the current user has moodle/site:config capability */
/** @var bool Module is enabled */
> private $hassiteconfig;
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)
> * @param bool $hassiteconfig whether the current user has moodle/site:config capability
*/
< public function __construct(admin_category $admin, \core\plugininfo\mod $module, string $categoryname) {
> public function __construct(admin_category $admin, \core\plugininfo\mod $module, string $categoryname, bool $hassiteconfig) {
$this->moduleenabled = $module->is_enabled() === true;
$this->admin = $admin;
$this->section = $categoryname;
> $this->hassiteconfig = $hassiteconfig;
$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 all subplugin settings if any.
> $this->admin->add($this->parent, new admin_category('bbbextplugins',
/**
> new lang_string('subplugintype_bbbext', 'mod_bigbluebuttonbn'), !$this->moduleenabled));
* Add the setting and lock it conditionally.
> $this->admin->add($this->parent, new admin_page_manage_extensions());
*
> foreach (core_plugin_manager::instance()->get_plugins_of_type(extension::BBB_EXTENSION_PLUGIN_NAME) as $plugin) {
* @param string $name
> $plugin->load_settings($this->admin, extension::BBB_EXTENSION_PLUGIN_NAME, $this->hassiteconfig);
* @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')
);
> $settingsgeneral->add($item);
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(
> $item = new admin_setting_configselect(
'bigbluebuttonbn_dpa_info',
> 'bigbluebuttonbn_checksum_algorithm',
'',
> get_string('config_checksum_algorithm', 'bigbluebuttonbn'),
get_string('config_dpa_note', 'bigbluebuttonbn', config::DEFAULT_DPA_URL),
> get_string('config_checksum_algorithm_description', 'bigbluebuttonbn'),
);
> config::DEFAULT_CHECKSUM_ALGORITHM,
$this->add_conditional_element(
> array_combine(config::CHECKSUM_ALGORITHMS, config::CHECKSUM_ALGORITHMS)
'dpa_info',
> );
$item,
> $this->add_conditional_element(
$settingsgeneral
> 'checksum_algorithm',
);
> $item,
}
> $settingsgeneral
return $settingsgeneral;
> );
}
>
> $item = new admin_setting_configtext(
/**
> 'bigbluebuttonbn_poll_interval',
* Helper function renders default messages settings if the feature is enabled.
> get_string('config_poll_interval', 'bigbluebuttonbn'),
*/
> get_string('config_poll_interval_description', 'bigbluebuttonbn'),
protected function add_defaultmessages_settings(): void {
> bigbluebutton_proxy::DEFAULT_POLL_INTERVAL,
// Configuration for 'default messages' feature.
> PARAM_INT
$defaultmessagessetting = new admin_settingpage(
> );
"{$this->sectionnameprefix}_default_messages",
> $this->add_conditional_element(
get_string('config_default_messages', 'bigbluebuttonbn'),
> 'poll_interval',
'moodle/site:config',
> $item,
!((boolean) setting_validator::section_default_messages_shown()) && ($this->moduleenabled)
> $settingsgeneral
);
> );
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
);
> $recordingsafeformat = [
}
> 'notes' => get_string('view_recording_format_notes', 'mod_bigbluebuttonbn'),
$this->admin->add($this->parent, $recordingsetting);
> 'podcast' => get_string('view_recording_format_podcast', 'mod_bigbluebuttonbn'),
}
> 'presentation' => get_string('view_recording_format_presentation', 'mod_bigbluebuttonbn'),
> 'screenshare' => get_string('view_recording_format_screenshare', 'mod_bigbluebuttonbn'),
/**
> 'statistics' => get_string('view_recording_format_statistics', 'mod_bigbluebuttonbn'),
* Helper function renders import recording settings if the feature is enabled.
> 'video' => get_string('view_recording_format_video', 'mod_bigbluebuttonbn'),
*/
> ];
protected function add_importrecordings_settings(): void {
> $item = new admin_setting_configmultiselect(
// Configuration for 'import recordings' feature.
> 'bigbluebuttonbn_recording_safe_formats',
$importrecordingsettings = new admin_settingpage(
> get_string('config_recording_safe_formats', 'mod_bigbluebuttonbn'),
"{$this->sectionnameprefix}_importrecording",
> get_string('config_recording_safe_formats_description', 'mod_bigbluebuttonbn'),
get_string('config_importrecordings', 'bigbluebuttonbn'),
> ['video', 'presentation'],
'moodle/site:config',
> $recordingsafeformat
!((boolean) setting_validator::section_import_recordings_shown()) && ($this->moduleenabled)
> );
);
> $this->add_conditional_element(
> 'recording_hide_button_editable',
if ($this->admin->fulltree) {
> $item,
$item = new admin_setting_heading(
> $recordingsetting
'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
);
> $item = new admin_setting_configcheckbox(
}
> 'bigbluebuttonbn_profile_picture_enabled',
$this->admin->add($this->parent, $extendedcapabilitiessetting);
> get_string('config_profile_picture_enabled', 'bigbluebuttonbn'),
// Configuration for extended BN capabilities should go here.
> get_string('config_profile_picture_enabled_description', 'bigbluebuttonbn'),
}
> false
> );
/**
> $this->add_conditional_element(
* Helper function renders experimental settings if any of the features there is enabled.
> 'profile_picture_enabled',
*/
> $item,
protected function add_experimental_settings(): void {
> $extendedcapabilitiessetting
// 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');
}
}