Merge branch 'MDL-73199' of git://github.com/jfederico/moodle

This commit is contained in:
Víctor Déniz 2021-12-16 16:57:40 +00:00
commit c8abe79865
7 changed files with 42 additions and 9 deletions

View File

@ -18,6 +18,7 @@ namespace mod_bigbluebuttonbn\local\bigbluebutton\recordings;
use mod_bigbluebuttonbn\instance; use mod_bigbluebuttonbn\instance;
use mod_bigbluebuttonbn\recording; use mod_bigbluebuttonbn\recording;
use mod_bigbluebuttonbn\local\config;
/** /**
* Collection of helper methods for handling recordings actions in Moodle. * Collection of helper methods for handling recordings actions in Moodle.
@ -70,10 +71,12 @@ class recording_action {
* @param recording $recording * @param recording $recording
*/ */
public static function unprotect(recording $recording) { public static function unprotect(recording $recording) {
if (!(boolean) config::get('recording_protect_editable')) {
// Recording protect action through UI is disabled, there is no need to do anything else.
throw new \moodle_exception('cannotperformaction', 'mod_bigblubuebuttobn', '', 'unprotect');
}
if ($recording->get('imported')) { if ($recording->get('imported')) {
/* Since the recording link is the one fetched from the BBB server, imported recordings can not be // Imported recordings can not be unprotected. There is no need to do anything else.
* unprotected. There is no need to do anything else.
*/
throw new \moodle_exception('cannotperformaction', 'mod_bigblubuebuttobn', '', 'unprotect'); throw new \moodle_exception('cannotperformaction', 'mod_bigblubuebuttobn', '', 'unprotect');
} }
$recording->set('protected', false); $recording->set('protected', false);
@ -86,10 +89,12 @@ class recording_action {
* @param recording $recording * @param recording $recording
*/ */
public static function protect(recording $recording) { public static function protect(recording $recording) {
if (!(boolean) config::get('recording_protect_editable')) {
// Recording protect action through UI is disabled, there is no need to do anything else.
throw new \moodle_exception('cannotperformaction', 'mod_bigblubuebuttobn', '', 'protect');
}
if ($recording->get('imported')) { if ($recording->get('imported')) {
/* Since the recording link is the one fetched from the BBB server, imported recordings can not be // Imported recordings can not be unprotected. There is no need to do anything else.
* protected. There is no need to do anything else.
*/
throw new \moodle_exception('cannotperformaction', 'mod_bigblubuebuttobn', '', 'protect'); throw new \moodle_exception('cannotperformaction', 'mod_bigblubuebuttobn', '', 'protect');
} }
$recording->set('protected', true); $recording->set('protected', true);

View File

@ -70,8 +70,12 @@ class recording_data {
// Build table content. // Build table content.
foreach ($recordings as $recording) { foreach ($recordings as $recording) {
// Protected recordings is not a standard feature, remove actions when protected flag is not present.
$rowtools = $tools; $rowtools = $tools;
// Protected recordings may be enabled or disabled from UI through configuration.
if (!(boolean) config::get('recording_protect_editable')) {
$rowtools = array_diff($rowtools, ['protect', 'unprotect']);
}
// Protected recordings is not a standard feature, remove actions when protected flag is not present.
if (in_array('protect', $rowtools) && $recording->get('protected') === null) { if (in_array('protect', $rowtools) && $recording->get('protected') === null) {
$rowtools = array_diff($rowtools, ['protect', 'unprotect']); $rowtools = array_diff($rowtools, ['protect', 'unprotect']);
} }

View File

@ -89,6 +89,7 @@ class config {
'recording_all_from_start_editable' => false, 'recording_all_from_start_editable' => false,
'recording_hide_button_default' => false, 'recording_hide_button_default' => false,
'recording_hide_button_editable' => false, 'recording_hide_button_editable' => false,
'recording_protect_editable' => true,
'general_warning_message' => '', 'general_warning_message' => '',
'general_warning_roles' => 'editingteacher,teacher', 'general_warning_roles' => 'editingteacher,teacher',
'general_warning_box_type' => 'info', 'general_warning_box_type' => 'info',
@ -204,6 +205,7 @@ class config {
'recording_all_from_start_editable' => self::get('recording_all_from_start_editable'), 'recording_all_from_start_editable' => self::get('recording_all_from_start_editable'),
'recording_hide_button_default' => self::get('recording_hide_button_default'), 'recording_hide_button_default' => self::get('recording_hide_button_default'),
'recording_hide_button_editable' => self::get('recording_hide_button_editable'), 'recording_hide_button_editable' => self::get('recording_hide_button_editable'),
'recording_protect_editable' => self::get('recording_protect_editable'),
'general_warning_message' => self::get('general_warning_message'), 'general_warning_message' => self::get('general_warning_message'),
'general_warning_box_type' => self::get('general_warning_box_type'), 'general_warning_box_type' => self::get('general_warning_box_type'),
'general_warning_button_text' => self::get('general_warning_button_text'), 'general_warning_button_text' => self::get('general_warning_button_text'),

View File

@ -87,6 +87,13 @@ class recording_proxy extends proxy_base {
* @return bool * @return bool
*/ */
public static function protect_recording(string $recordid, string $protected = 'true'): bool { public static function protect_recording(string $recordid, string $protected = 'true'): bool {
global $CFG;
// Ignore action if recording_protect_editable is set to false.
if (empty($CFG->bigbluebuttonbn_recording_protect_editable)) {
return false;
}
$result = self::fetch_endpoint_xml('updateRecordings', [ $result = self::fetch_endpoint_xml('updateRecordings', [
'recordID' => $recordid, 'recordID' => $recordid,
'protect' => $protected, 'protect' => $protected,

View File

@ -53,7 +53,8 @@ class setting_validator {
!isset($CFG->bigbluebuttonbn['recording_all_from_start_default']) || !isset($CFG->bigbluebuttonbn['recording_all_from_start_default']) ||
!isset($CFG->bigbluebuttonbn['recording_all_from_start_editable']) || !isset($CFG->bigbluebuttonbn['recording_all_from_start_editable']) ||
!isset($CFG->bigbluebuttonbn['recording_hide_button_default']) || !isset($CFG->bigbluebuttonbn['recording_hide_button_default']) ||
!isset($CFG->bigbluebuttonbn['recording_hide_button_editable']) ); !isset($CFG->bigbluebuttonbn['recording_hide_button_editable'])
);
} }
/** /**
@ -82,7 +83,8 @@ class setting_validator {
!isset($CFG->bigbluebuttonbn['recordings_imported_editable']) || !isset($CFG->bigbluebuttonbn['recordings_imported_editable']) ||
!isset($CFG->bigbluebuttonbn['recordings_preview_default']) || !isset($CFG->bigbluebuttonbn['recordings_preview_default']) ||
!isset($CFG->bigbluebuttonbn['recordings_preview_editable']) || !isset($CFG->bigbluebuttonbn['recordings_preview_editable']) ||
!isset($CFG->bigbluebuttonbn['recordings_validate_url']) !isset($CFG->bigbluebuttonbn['recordings_validate_url']) ||
!isset($CFG->bigbluebuttonbn['recording_protect_editable'])
); );
} }

View File

@ -486,6 +486,17 @@ class settings {
$item, $item,
$showrecordingsettings $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->section, $showrecordingsettings); $this->admin->add($this->section, $showrecordingsettings);
} }

View File

@ -137,6 +137,8 @@ $string['config_recording_default'] = 'Recording feature enabled by default';
$string['config_recording_default_description'] = 'If enabled the sessions created in BigBlueButton will have recording capabilities.'; $string['config_recording_default_description'] = 'If enabled the sessions created in BigBlueButton will have recording capabilities.';
$string['config_recording_editable'] = 'Recording feature can be edited'; $string['config_recording_editable'] = 'Recording feature can be edited';
$string['config_recording_editable_description'] = 'If checked the interface includes an option for enable and disable the recording feature.'; $string['config_recording_editable_description'] = 'If checked the interface includes an option for enable and disable the recording feature.';
$string['config_recording_protect_editable'] = 'Protected recordings state can be edited';
$string['config_recording_protect_editable_description'] = 'If checked the interface includes an option for protecting/unprotecting recordings.';
$string['config_recording_icons_enabled'] = 'Icons for recording management'; $string['config_recording_icons_enabled'] = 'Icons for recording management';
$string['config_recording_icons_enabled_description'] = 'When enabled, the recording management panel shows icons for the publish/unpublish and delete actions.'; $string['config_recording_icons_enabled_description'] = 'When enabled, the recording management panel shows icons for the publish/unpublish and delete actions.';
$string['config_recording_all_from_start_default'] = 'Record all from start'; $string['config_recording_all_from_start_default'] = 'Record all from start';