mirror of
https://github.com/moodle/moodle.git
synced 2025-03-24 17:40:26 +01:00
Merge branch 'MDL-77248-401' of https://github.com/andrewnicols/moodle into MOODLE_401_STABLE
This commit is contained in:
commit
21afd4548b
@ -31,29 +31,20 @@
|
||||
|
||||
if (!empty($hide) and confirm_sesskey()) {
|
||||
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
|
||||
$class::enable_plugin($hide, false);
|
||||
|
||||
admin_get_root(true, false); // settings not required - only pages
|
||||
if ($class::enable_plugin($hide, false)) {
|
||||
// Settings not required - only pages.
|
||||
admin_get_root(true, false);
|
||||
}
|
||||
redirect(new moodle_url('/admin/modules.php'));
|
||||
}
|
||||
|
||||
if (!empty($show) and confirm_sesskey()) {
|
||||
$canenablemodule = true;
|
||||
$modulename = $show;
|
||||
|
||||
// Invoking a callback function that enables plugins to force additional actions (e.g. displaying notifications,
|
||||
// modals, etc.) and also specify through its returned value (bool) whether the process of enabling the plugin
|
||||
// should continue after these actions or not.
|
||||
if (component_callback_exists("mod_{$modulename}", 'pre_enable_plugin_actions')) {
|
||||
$canenablemodule = component_callback("mod_{$modulename}", 'pre_enable_plugin_actions');
|
||||
}
|
||||
|
||||
if ($canenablemodule) {
|
||||
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
|
||||
$class::enable_plugin($show, true);
|
||||
admin_get_root(true, false); // Settings not required - only pages.
|
||||
redirect(new moodle_url('/admin/modules.php'));
|
||||
if (!empty($show) && confirm_sesskey()) {
|
||||
$class = \core_plugin_manager::resolve_plugininfo_class('mod');
|
||||
if ($class::enable_plugin($show, true)) {
|
||||
// Settings not required - only pages.
|
||||
admin_get_root(true, false);
|
||||
}
|
||||
redirect(new moodle_url('/admin/modules.php'));
|
||||
}
|
||||
|
||||
echo $OUTPUT->header();
|
||||
|
@ -51,6 +51,18 @@ class mod extends base {
|
||||
|
||||
// Only set visibility if it's different from the current value.
|
||||
if ($module->visible != $enabled) {
|
||||
if ($enabled && component_callback_exists("mod_{$pluginname}", 'pre_enable_plugin_actions')) {
|
||||
// This callback may be used to perform actions that must be completed prior to enabling a plugin.
|
||||
// Example of this may include:
|
||||
// - making a configuration change
|
||||
// - adding an alert
|
||||
// - checking a pre-requisite
|
||||
//
|
||||
// If the return value is falsy, then the change will be prevented.
|
||||
if (!component_callback("mod_{$pluginname}", 'pre_enable_plugin_actions')) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Set module visibility.
|
||||
$DB->set_field('modules', 'visible', $enabled, ['id' => $module->id]);
|
||||
$haschanged = true;
|
||||
|
11
mod/bigbluebuttonbn/amd/build/accept_dpa.min.js
vendored
11
mod/bigbluebuttonbn/amd/build/accept_dpa.min.js
vendored
@ -1,11 +0,0 @@
|
||||
define("mod_bigbluebuttonbn/accept_dpa",["exports","core_form/modalform","core/notification","core/str"],(function(_exports,_modalform,_notification,_str){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
|
||||
/**
|
||||
* Javascript module for confirming the acceptance of the current data processing agreement before enabling
|
||||
* the BigBlueButton activity module.
|
||||
*
|
||||
* @module mod_bigbluebuttonbn/accept_dpa
|
||||
* @copyright 2022 Mihail Geshoski <mihail@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_modalform=_interopRequireDefault(_modalform),_notification=_interopRequireDefault(_notification);_exports.init=()=>{const modalForm=new _modalform.default({modalConfig:{title:(0,_str.get_string)("enablingbigbluebutton","mod_bigbluebuttonbn"),large:!1},formClass:"mod_bigbluebuttonbn\\form\\accept_dpa",saveButtonText:(0,_str.get_string)("enable")});modalForm.addEventListener(modalForm.events.FORM_SUBMITTED,(event=>{event.detail.result?window.location.reload():_notification.default.addNotification({type:"error",message:event.detail.errors.join("<br>")})})),modalForm.show()}}));
|
||||
|
||||
//# sourceMappingURL=accept_dpa.min.js.map
|
@ -1 +0,0 @@
|
||||
{"version":3,"file":"accept_dpa.min.js","sources":["../src/accept_dpa.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Javascript module for confirming the acceptance of the current data processing agreement before enabling\n * the BigBlueButton activity module.\n *\n * @module mod_bigbluebuttonbn/accept_dpa\n * @copyright 2022 Mihail Geshoski <mihail@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport ModalForm from 'core_form/modalform';\nimport Notification from 'core/notification';\nimport {get_string as getString} from 'core/str';\n\n/**\n * Initialize module.\n */\nexport const init = () => {\n\n const modalForm = new ModalForm({\n modalConfig: {\n title: getString('enablingbigbluebutton', 'mod_bigbluebuttonbn'),\n large: false,\n },\n formClass: 'mod_bigbluebuttonbn\\\\form\\\\accept_dpa',\n saveButtonText: getString('enable'),\n });\n\n // Once the form has been submitted and successfully processed, reload the page to enable the activity module.\n modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, event => {\n if (event.detail.result) {\n window.location.reload();\n } else {\n Notification.addNotification({\n type: 'error',\n message: event.detail.errors.join('<br>')\n });\n }\n });\n\n modalForm.show();\n};\n"],"names":["modalForm","ModalForm","modalConfig","title","large","formClass","saveButtonText","addEventListener","events","FORM_SUBMITTED","event","detail","result","window","location","reload","addNotification","type","message","errors","join","show"],"mappings":";;;;;;;;kMA+BoB,WAEVA,UAAY,IAAIC,mBAAU,CAC5BC,YAAa,CACTC,OAAO,mBAAU,wBAAyB,uBAC1CC,OAAO,GAEXC,UAAW,wCACXC,gBAAgB,mBAAU,YAI9BN,UAAUO,iBAAiBP,UAAUQ,OAAOC,gBAAgBC,QACpDA,MAAMC,OAAOC,OACbC,OAAOC,SAASC,+BAEHC,gBAAgB,CACzBC,KAAM,QACNC,QAAUR,MAAMC,OAAOQ,OAAOC,KAAK,aAK/CpB,UAAUqB"}
|
@ -1,56 +0,0 @@
|
||||
// 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/>.
|
||||
|
||||
/**
|
||||
* Javascript module for confirming the acceptance of the current data processing agreement before enabling
|
||||
* the BigBlueButton activity module.
|
||||
*
|
||||
* @module mod_bigbluebuttonbn/accept_dpa
|
||||
* @copyright 2022 Mihail Geshoski <mihail@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
import ModalForm from 'core_form/modalform';
|
||||
import Notification from 'core/notification';
|
||||
import {get_string as getString} from 'core/str';
|
||||
|
||||
/**
|
||||
* Initialize module.
|
||||
*/
|
||||
export const init = () => {
|
||||
|
||||
const modalForm = new ModalForm({
|
||||
modalConfig: {
|
||||
title: getString('enablingbigbluebutton', 'mod_bigbluebuttonbn'),
|
||||
large: false,
|
||||
},
|
||||
formClass: 'mod_bigbluebuttonbn\\form\\accept_dpa',
|
||||
saveButtonText: getString('enable'),
|
||||
});
|
||||
|
||||
// Once the form has been submitted and successfully processed, reload the page to enable the activity module.
|
||||
modalForm.addEventListener(modalForm.events.FORM_SUBMITTED, event => {
|
||||
if (event.detail.result) {
|
||||
window.location.reload();
|
||||
} else {
|
||||
Notification.addNotification({
|
||||
type: 'error',
|
||||
message: event.detail.errors.join('<br>')
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
modalForm.show();
|
||||
};
|
@ -1,104 +0,0 @@
|
||||
<?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\form;
|
||||
|
||||
use context;
|
||||
use moodle_exception;
|
||||
use moodle_url;
|
||||
use core_form\dynamic_form;
|
||||
use mod_bigbluebuttonbn\local\config;
|
||||
|
||||
/**
|
||||
* Accept data processing agreement form presented before enabling the BigBlueButton activity module.
|
||||
*
|
||||
* @package mod_bigbluebuttonbn
|
||||
* @copyright 2022 Mihail Geshoski <mihail@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class accept_dpa extends dynamic_form {
|
||||
|
||||
/**
|
||||
* Form definition
|
||||
*/
|
||||
protected function definition() {
|
||||
$this->_form->addElement('html', \html_writer::tag('p',
|
||||
get_string('enablingbigbluebuttondpainfo', 'mod_bigbluebuttonbn', config::DEFAULT_DPA_URL)));
|
||||
$this->_form->addElement('checkbox', 'acceptdefaultdpa', false, get_string('acceptdpa', 'mod_bigbluebuttonbn'),
|
||||
['class' => 'bold']);
|
||||
$this->_form->addRule('acceptdefaultdpa', get_string('required'), 'required', null, 'client');
|
||||
}
|
||||
|
||||
/**
|
||||
* Return form context
|
||||
*
|
||||
* @return context
|
||||
*/
|
||||
protected function get_context_for_dynamic_submission(): context {
|
||||
return \context_system::instance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current user has access to this form, otherwise throw exception.
|
||||
*
|
||||
* @return void
|
||||
* @throws moodle_exception
|
||||
*/
|
||||
protected function check_access_for_dynamic_submission(): void {
|
||||
require_capability('moodle/site:config', $this->get_context_for_dynamic_submission());
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the form submission, used if form was submitted via AJAX.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function process_dynamic_submission(): array {
|
||||
$result = false;
|
||||
$errors = [];
|
||||
|
||||
if ($this->get_data()->acceptdefaultdpa) {
|
||||
try {
|
||||
set_config('bigbluebuttonbn_default_dpa_accepted', true);
|
||||
$result = true;
|
||||
} catch (\Exception $e) {
|
||||
$errors[] = $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'result' => $result,
|
||||
'errors' => $errors,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Load in existing data as form defaults (not applicable).
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function set_data_for_dynamic_submission(): void {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns url to set in $PAGE->set_url() when form is being rendered or submitted via AJAX.
|
||||
*
|
||||
* @return moodle_url
|
||||
*/
|
||||
protected function get_page_url_for_dynamic_submission(): moodle_url {
|
||||
return new moodle_url('/admin/modules.php', ['show' => 'bigbluebuttonbn', 'sesskey' => sesskey()]);
|
||||
}
|
||||
}
|
@ -136,6 +136,8 @@ class settings {
|
||||
* @throws \coding_exception
|
||||
*/
|
||||
protected function add_general_settings(): admin_settingpage {
|
||||
global $CFG;
|
||||
|
||||
$settingsgeneral = new admin_settingpage(
|
||||
$this->section,
|
||||
get_string('config_general', 'bigbluebuttonbn'),
|
||||
@ -146,7 +148,17 @@ class settings {
|
||||
// Configuration for BigBlueButton.
|
||||
$item = new admin_setting_heading('bigbluebuttonbn_config_general',
|
||||
'',
|
||||
get_string('config_general_description', 'bigbluebuttonbn'));
|
||||
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(
|
||||
|
@ -49,6 +49,7 @@ $string['bigbluebuttondisablednotification'] = 'The BigBlueButton activity modul
|
||||
$string['cannotperformaction'] = 'Cannot perform action {$a} on this recording';
|
||||
$string['enablingbigbluebutton'] = 'Enabling BigBlueButton activity';
|
||||
$string['enablingbigbluebuttondpainfo'] = 'In order to meet your data protection obligations, prior to enabling this plugin, you may need to ensure that you have read and accepted the <a href="{$a}" target="_blank">Blindside Networks data processing agreement</a>. Please consult with your own privacy professionals for advice.';
|
||||
$string['dpainfonotsigned'] = 'Before enabling this plugin, you must confirm that you have read and accepted the <a href="{$a}">Blindside Networks data processing agreement</a>.';
|
||||
$string['indicator:cognitivedepth'] = 'BigBlueButton cognitive';
|
||||
$string['indicator:cognitivedepth_help'] = 'This indicator is based on the cognitive depth reached by the student in a BigBlueButton activity.';
|
||||
$string['indicator:socialbreadth'] = 'BigBlueButton social';
|
||||
|
@ -730,7 +730,11 @@ function bigbluebuttonbn_pre_enable_plugin_actions(): bool {
|
||||
// agreement, do not enable the plugin. Instead, display a dynamic form where the administrator can confirm that he
|
||||
// accepts the DPA prior to enabling the plugin.
|
||||
if (config::get('server_url') === config::DEFAULT_SERVER_URL && !config::get('default_dpa_accepted')) {
|
||||
$PAGE->requires->js_call_amd('mod_bigbluebuttonbn/accept_dpa', 'init', []);
|
||||
$url = new moodle_url('/admin/category.php', ['category' => 'modbigbluebuttonbnfolder']);
|
||||
\core\notification::add(
|
||||
get_string('dpainfonotsigned', 'mod_bigbluebuttonbn', $url->out(false)),
|
||||
\core\notification::ERROR
|
||||
);
|
||||
return false;
|
||||
}
|
||||
// Otherwise, continue and enable the plugin.
|
||||
|
@ -50,6 +50,7 @@ class mod_bigbluebuttonbn_generator extends \testing_module_generator {
|
||||
*/
|
||||
public function create_instance($record = null, array $options = null) {
|
||||
// Prior to creating the instance, make sure that the BigBlueButton module is enabled.
|
||||
set_config('bigbluebuttonbn_default_dpa_accepted', true);
|
||||
$modules = \core_plugin_manager::instance()->get_plugins_of_type('mod');
|
||||
if (!$modules['bigbluebuttonbn']->is_enabled()) {
|
||||
mod::enable_plugin('bigbluebuttonbn', true);
|
||||
|
@ -698,4 +698,72 @@ class lib_test extends \advanced_testcase {
|
||||
$event->instance = 0;
|
||||
$this->assertFalse(mod_bigbluebuttonbn_core_calendar_is_event_visible($event));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the bigbluebuttonbn_pre_enable_plugin_actions function.
|
||||
*
|
||||
* @covers ::bigbluebuttonbn_pre_enable_plugin_actions
|
||||
* @dataProvider bigbluebuttonbn_pre_enable_plugin_actions_provider
|
||||
* @param bool $initialstate
|
||||
* @param bool $expected
|
||||
* @param int $notificationcount
|
||||
*/
|
||||
public function test_bigbluebuttonbn_pre_enable_plugin_actions(
|
||||
?bool $initialstate,
|
||||
bool $expected,
|
||||
int $notificationcount
|
||||
): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
set_config('bigbluebuttonbn_default_dpa_accepted', $initialstate);
|
||||
|
||||
$this->assertEquals($expected, bigbluebuttonbn_pre_enable_plugin_actions());
|
||||
$this->assertCount($notificationcount, \core\notification::fetch());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the bigbluebuttonbn_pre_enable_plugin_actions function.
|
||||
*
|
||||
* @covers ::bigbluebuttonbn_pre_enable_plugin_actions
|
||||
* @dataProvider bigbluebuttonbn_pre_enable_plugin_actions_provider
|
||||
* @param bool $initialstate
|
||||
* @param bool $expected
|
||||
* @param int $notificationcount
|
||||
*/
|
||||
public function test_enable_plugin(
|
||||
?bool $initialstate,
|
||||
bool $expected,
|
||||
int $notificationcount
|
||||
): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
set_config('bigbluebuttonbn_default_dpa_accepted', $initialstate);
|
||||
$this->assertEquals($expected, \core\plugininfo\mod::enable_plugin('bigbluebuttonbn', 1));
|
||||
$this->assertCount($notificationcount, \core\notification::fetch());
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for bigbluebuttonbn_pre_enable_plugin_actions tests.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function bigbluebuttonbn_pre_enable_plugin_actions_provider(): array {
|
||||
return [
|
||||
'Initially unset' => [
|
||||
null,
|
||||
false,
|
||||
1,
|
||||
],
|
||||
'Set to false' => [
|
||||
false,
|
||||
false,
|
||||
1,
|
||||
],
|
||||
'Initially set' => [
|
||||
true,
|
||||
true,
|
||||
0,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user