Merge branch 'MDL-64495-master' of https://github.com/aanabit/moodle

This commit is contained in:
Jake Dallimore 2019-03-13 16:36:04 +08:00
commit a3d85254f1
13 changed files with 233 additions and 112 deletions

View file

@ -25,47 +25,101 @@ require_once(__DIR__ . '/../config.php');
require_once($CFG->dirroot . '/message/lib.php');
require_once($CFG->libdir.'/adminlib.php');
// This is an admin page
// This is an admin page.
admin_externalpage_setup('managemessageoutputs');
// Get the submitted params
$disable = optional_param('disable', 0, PARAM_INT);
$enable = optional_param('enable', 0, PARAM_INT);
// Fetch processors.
$allprocessors = get_message_processors();
$processors = array_filter($allprocessors, function($processor) {
return $processor->enabled;
});
// Fetch message providers.
$providers = get_message_providers();
// Fetch the manage message outputs interface.
$preferences = get_message_output_default_preferences();
$headingtitle = get_string('managemessageoutputs', 'message');
if (($form = data_submitted()) && confirm_sesskey()) {
$preferences = array();
// Prepare default message outputs settings.
foreach ($providers as $provider) {
$componentproviderbase = $provider->component.'_'.$provider->name;
$disableprovidersetting = $componentproviderbase.'_disable';
$providerdisabled = false;
if (!isset($form->$disableprovidersetting)) {
$providerdisabled = true;
$preferences[$disableprovidersetting] = 1;
} else {
$preferences[$disableprovidersetting] = 0;
}
if (!empty($disable) && confirm_sesskey()) {
if (!$processor = $DB->get_record('message_processors', array('id'=>$disable))) {
print_error('outputdoesnotexist', 'message');
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting) {
$value = null;
$componentprovidersetting = $componentproviderbase.'_'.$setting;
if ($setting == 'permitted') {
// If we deal with permitted select element, we need to create individual
// setting for each possible processor. Note that this block will
// always be processed first after entring parental foreach iteration
// so we can change form values on this stage.
foreach ($allprocessors as $processor) {
$value = '';
if (isset($form->{$componentprovidersetting}[$processor->name])) {
$value = $form->{$componentprovidersetting}[$processor->name];
}
// Ensure that loggedin loggedoff options are set correctly for this permission.
if (($value == 'disallowed') || $providerdisabled) {
// It might be better to unset them, but I can't figure out why that cause error.
$form->{$componentproviderbase.'_loggedin'}[$processor->name] = 0;
$form->{$componentproviderbase.'_loggedoff'}[$processor->name] = 0;
} else if ($value == 'forced') {
$form->{$componentproviderbase.'_loggedin'}[$processor->name] = 1;
$form->{$componentproviderbase.'_loggedoff'}[$processor->name] = 1;
}
// Record the site preference.
$preferences[$processor->name.'_provider_'.$componentprovidersetting] = $value;
}
} else if (array_key_exists($componentprovidersetting, $form)) {
// We must be processing loggedin or loggedoff checkboxes. Store
// defained comma-separated processors as setting value.
// Using array_filter eliminates elements set to 0 above.
$value = join(',', array_keys(array_filter($form->{$componentprovidersetting})));
if (empty($value)) {
$value = null;
}
}
if ($setting != 'permitted') {
// We have already recoded site preferences for 'permitted' type.
$preferences['message_provider_'.$componentprovidersetting] = $value;
}
}
}
\core_message\api::update_processor_status($processor, 0); // Disable output.
core_plugin_manager::reset_caches();
}
if (!empty($enable) && confirm_sesskey()) {
if (!$processor = $DB->get_record('message_processors', array('id'=>$enable))) {
print_error('outputdoesnotexist', 'message');
// Update database.
$transaction = $DB->start_delegated_transaction();
// Save processors enabled/disabled status.
foreach ($allprocessors as $processor) {
$enabled = isset($form->{$processor->name});
\core_message\api::update_processor_status($processor, $enabled);
}
\core_message\api::update_processor_status($processor, 1); // Enable output.
core_plugin_manager::reset_caches();
}
if ($disable || $enable) {
foreach ($preferences as $name => $value) {
set_config($name, $value, 'message');
}
$transaction->allow_commit();
core_plugin_manager::reset_caches();
$url = new moodle_url('message.php');
redirect($url);
}
// Page settings
$PAGE->set_context(context_system::instance());
$PAGE->requires->js_init_call('M.core_message.init_defaultoutputs');
// Grab the renderer
$renderer = $PAGE->get_renderer('core', 'message');
// Display the manage message outputs interface
$processors = get_message_processors();
$messageoutputs = $renderer->manage_messageoutputs($processors);
// Display the page
// Display the page.
echo $OUTPUT->header();
echo $OUTPUT->heading($headingtitle);
echo $messageoutputs;
echo $renderer->manage_messageoutput_settings($allprocessors, $processors, $providers, $preferences);
echo $OUTPUT->footer();

View file

@ -0,0 +1,78 @@
<?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/>.
/**
* Adds messaging related settings links for Messaging category to admin tree.
*
* @copyright 2019 Amaia Anabitarte <amaia@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
if ($hassiteconfig) {
$temp = new admin_settingpage('messages', new lang_string('messagingssettings', 'admin'));
$temp->add(new admin_setting_configcheckbox('messaging',
new lang_string('messaging', 'admin'),
new lang_string('configmessaging', 'admin'),
1));
$temp->add(new admin_setting_configcheckbox('messagingallusers',
new lang_string('messagingallusers', 'admin'),
new lang_string('configmessagingallusers', 'admin'),
0)
);
$temp->add(new admin_setting_configcheckbox('messagingdefaultpressenter',
new lang_string('messagingdefaultpressenter', 'admin'),
new lang_string('configmessagingdefaultpressenter', 'admin'),
1)
);
$options = array(
DAYSECS => new lang_string('secondstotime86400'),
WEEKSECS => new lang_string('secondstotime604800'),
2620800 => new lang_string('nummonths', 'moodle', 1),
7862400 => new lang_string('nummonths', 'moodle', 3),
15724800 => new lang_string('nummonths', 'moodle', 6),
0 => new lang_string('never')
);
$temp->add(new admin_setting_configselect(
'messagingdeletereadnotificationsdelay',
new lang_string('messagingdeletereadnotificationsdelay', 'admin'),
new lang_string('configmessagingdeletereadnotificationsdelay', 'admin'),
604800,
$options)
);
$temp->add(new admin_setting_configselect(
'messagingdeleteallnotificationsdelay',
new lang_string('messagingdeleteallnotificationsdelay', 'admin'),
new lang_string('configmessagingdeleteallnotificationsdelay', 'admin'),
2620800,
$options)
);
$temp->add(new admin_setting_configcheckbox('messagingallowemailoverride',
new lang_string('messagingallowemailoverride', 'admin'),
new lang_string('configmessagingallowemailoverride', 'admin'),
0));
$ADMIN->add('messaging', $temp);
$ADMIN->add('messaging', new admin_page_managemessageoutputs());
// Notification outputs plugins.
$plugins = core_plugin_manager::instance()->get_plugins_of_type('message');
core_collator::asort_objects_by_property($plugins, 'displayname');
foreach ($plugins as $plugin) {
/** @var \core\plugininfo\message $plugin */
$plugin->load_settings($ADMIN, 'messaging', $hassiteconfig);
}
}

View file

@ -81,17 +81,6 @@ if ($hassiteconfig) {
$plugin->load_settings($ADMIN, 'blocksettings', $hassiteconfig);
}
// message outputs
$ADMIN->add('modules', new admin_category('messageoutputs', new lang_string('messageoutputs', 'message')));
$ADMIN->add('messageoutputs', new admin_page_managemessageoutputs());
$ADMIN->add('messageoutputs', new admin_page_defaultmessageoutputs());
$plugins = core_plugin_manager::instance()->get_plugins_of_type('message');
core_collator::asort_objects_by_property($plugins, 'displayname');
foreach ($plugins as $plugin) {
/** @var \core\plugininfo\message $plugin */
$plugin->load_settings($ADMIN, 'messageoutputs', $hassiteconfig);
}
// authentication plugins
$ADMIN->add('modules', new admin_category('authsettings', new lang_string('authentication', 'admin')));

View file

@ -13,45 +13,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page
$optionalsubsystems->add(new admin_setting_configcheckbox('enablewebservices', new lang_string('enablewebservices', 'admin'), new lang_string('configenablewebservices', 'admin'), 0));
$optionalsubsystems->add(new admin_setting_configcheckbox('messaging', new lang_string('messaging', 'admin'), new lang_string('configmessaging','admin'), 1));
$optionalsubsystems->add(new admin_setting_configcheckbox('messagingallusers',
new lang_string('messagingallusers', 'admin'),
new lang_string('configmessagingallusers', 'admin'),
0)
);
$optionalsubsystems->add(new admin_setting_configcheckbox('messagingdefaultpressenter',
new lang_string('messagingdefaultpressenter', 'admin'),
new lang_string('configmessagingdefaultpressenter', 'admin'),
1)
);
$options = array(
DAYSECS => new lang_string('secondstotime86400'),
WEEKSECS => new lang_string('secondstotime604800'),
2620800 => new lang_string('nummonths', 'moodle', 1),
7862400 => new lang_string('nummonths', 'moodle', 3),
15724800 => new lang_string('nummonths', 'moodle', 6),
0 => new lang_string('never')
);
$optionalsubsystems->add(new admin_setting_configselect(
'messagingdeletereadnotificationsdelay',
new lang_string('messagingdeletereadnotificationsdelay', 'admin'),
new lang_string('configmessagingdeletereadnotificationsdelay', 'admin'),
604800,
$options)
);
$optionalsubsystems->add(new admin_setting_configselect(
'messagingdeleteallnotificationsdelay',
new lang_string('messagingdeleteallnotificationsdelay', 'admin'),
new lang_string('configmessagingdeleteallnotificationsdelay', 'admin'),
2620800,
$options)
);
$optionalsubsystems->add(new admin_setting_configcheckbox('messagingallowemailoverride', new lang_string('messagingallowemailoverride', 'admin'), new lang_string('configmessagingallowemailoverride','admin'), 0));
$optionalsubsystems->add(new admin_setting_configcheckbox('enablestats', new lang_string('enablestats', 'admin'), new lang_string('configenablestats', 'admin'), 0));
$optionalsubsystems->add(new admin_setting_configcheckbox('enablerssfeeds', new lang_string('enablerssfeeds', 'admin'), new lang_string('configenablerssfeeds', 'admin'), 0));

View file

@ -33,6 +33,7 @@ $ADMIN->add('root', new admin_category('competencies', new lang_string('competen
$ADMIN->add('root', new admin_category('badges', new lang_string('badges'), empty($CFG->enablebadges)));
$ADMIN->add('root', new admin_category('location', new lang_string('location','admin')));
$ADMIN->add('root', new admin_category('language', new lang_string('language')));
$ADMIN->add('root', new admin_category('messaging', new lang_string('messagingcategory', 'admin')));
$ADMIN->add('root', new admin_category('modules', new lang_string('plugins', 'admin')));
$ADMIN->add('root', new admin_category('security', new lang_string('security','admin')));
$ADMIN->add('root', new admin_category('appearance', new lang_string('appearance','admin')));

View file

@ -773,9 +773,11 @@ $string['mediapluginyoutube'] = 'Enable YouTube links filter';
$string['messaging'] = 'Enable messaging system';
$string['messagingallowemailoverride'] = 'Notification email override';
$string['messagingallusers'] = 'Allow site-wide messaging';
$string['messagingcategory'] = 'Messaging';
$string['messagingdefaultpressenter'] = 'Use enter to send enabled by default';
$string['messagingdeletereadnotificationsdelay'] = 'Delete read notifications';
$string['messagingdeleteallnotificationsdelay'] = 'Delete all notifications';
$string['messagingssettings'] = 'Messaging settings';
$string['minpassworddigits'] = 'Digits';
$string['minpasswordlength'] = 'Password length';
$string['minpasswordlower'] = 'Lowercase letters';

View file

@ -143,3 +143,7 @@ error:invalidbadgeurl,core_badges
nomessages,core_message
searchallavailablecourses_desc,core_admin
search:mycourse,core_search
outputdisabled,core_message
outputdoesnotexist,core_message
outputenabled,core_message
outputnotconfigured,core_message

View file

@ -47,7 +47,7 @@ $string['contactrequests'] = 'Contact requests';
$string['contactrequestsent'] = 'Contact request sent';
$string['contacts'] = 'Contacts';
$string['decline'] = 'Decline';
$string['defaultmessageoutputs'] = 'Default message outputs';
$string['defaultmessageoutputs'] = 'Notification settings';
$string['defaults'] = 'Defaults';
$string['deleteallconfirm'] = "Are you sure you would like to delete this entire conversation? This will not delete it for other conversation participants.";
$string['deleteallmessages'] = "Delete all messages";
@ -90,8 +90,8 @@ $string['loggedindescription'] = 'When you are logged into Moodle';
$string['loggedoff'] = 'Offline';
$string['loggedoff_help'] = 'Configure how you would like to receive notifications when you are not logged into Moodle';
$string['loggedoffdescription'] = 'When you are not logged into Moodle';
$string['managemessageoutputs'] = 'Manage message outputs';
$string['messageoutputs'] = 'Message outputs';
$string['managemessageoutputs'] = 'Default notification preferences';
$string['messageoutputs'] = 'Notification plugins';
$string['messagepreferences'] = 'Message preferences';
$string['message'] = 'Message';
$string['messagecontactrequestsnotification'] = '{$a} wants to be added as a contact';
@ -136,11 +136,7 @@ $string['offline'] = 'Offline';
$string['on'] = 'On';
$string['online'] = 'Online';
$string['otherparticipants'] = 'Other participants';
$string['outputdisabled'] = 'Output disabled';
$string['outputdoesnotexist'] = 'Message output does not exist';
$string['outputenabled'] = 'Output enabled';
$string['outputnotavailable'] = 'Not available';
$string['outputnotconfigured'] = 'Not configured';
$string['participants'] = 'Participants';
$string['permitted'] = 'Permitted';
$string['privacy'] = 'Privacy';
@ -267,3 +263,7 @@ $string['userisblockingyounoncontact'] = '{$a} only accepts messages from their
// Deprecated since Moodle 3.7.
$string['nomessages'] = 'No messages';
$string['outputdisabled'] = 'Output disabled';
$string['outputdoesnotexist'] = 'Message output does not exist';
$string['outputenabled'] = 'Output enabled';
$string['outputnotconfigured'] = 'Not configured';

View file

@ -152,8 +152,8 @@ $string['type_local'] = 'Local plugin';
$string['type_local_plural'] = 'Local plugins';
$string['type_media'] = 'Media player';
$string['type_media_plural'] = 'Media players';
$string['type_message'] = 'Messaging output';
$string['type_message_plural'] = 'Messaging outputs';
$string['type_message'] = 'Notification plugin';
$string['type_message_plural'] = 'Notification plugins';
$string['type_mnetservice'] = 'MNet service';
$string['type_mnetservice_plural'] = 'MNet services';
$string['type_mod'] = 'Activity module';

View file

@ -6339,7 +6339,10 @@ class admin_page_managemessageoutputs extends admin_externalpage {
*/
public function __construct() {
global $CFG;
parent::__construct('managemessageoutputs', get_string('managemessageoutputs', 'message'), new moodle_url('/admin/message.php'));
parent::__construct('managemessageoutputs',
get_string('defaultmessageoutputs', 'message'),
new moodle_url('/admin/message.php')
);
}
/**
@ -6385,14 +6388,24 @@ class admin_page_managemessageoutputs extends admin_externalpage {
/**
* Default message outputs configuration
*
* @deprecated since Moodle 3.7 MDL-64495. Please use admin_page_managemessageoutputs instead.
* @todo MDL-64866 This will be deleted in Moodle 4.1.
*
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class admin_page_defaultmessageoutputs extends admin_page_managemessageoutputs {
/**
* Calls parent::__construct with specific arguments
*
* @deprecated since Moodle 3.7 MDL-64495. Please use admin_page_managemessageoutputs instead.
* @todo MDL-64866 This will be deleted in Moodle 4.1.
*/
public function __construct() {
global $CFG;
debugging('admin_page_defaultmessageoutputs class is deprecated. Please use admin_page_managemessageoutputs instead.',
DEBUG_DEVELOPER);
admin_externalpage::__construct('defaultmessageoutputs', get_string('defaultmessageoutputs', 'message'), new moodle_url('/message/defaultoutputs.php'));
}
}

View file

@ -15,6 +15,8 @@ attribute on forms to avoid collisions in forms loaded in AJAX requests.
It is recommended that privacy providers using this function call rewrite any long query into a number of separate
calls to add_from_sql for improved performance, and that the new argument is used.
This will allow queries to remain backwards-compatible with older versions of Moodle but will have significantly better performance in version supporting the innerjoin parameter.
* /message/defaultoutputs.php file and admin_page_defaultmessageoutputs class have been deprecated
and all their settings moved to admin/message.php (see MDL-64495). Please use admin_page_managemessageoutputs class instead.
=== 3.6 ===

View file

@ -20,6 +20,9 @@
* @package core_message
* @copyright 2011 Lancaster University Network Services Limited
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @deprecated since Moodle 3.7 MDL-64495. Please use /admin/message.php instead.
* @todo MDL-64866 This will be deleted in Moodle 4.1.
*/
require_once(__DIR__ . '/../config.php');
require_once($CFG->dirroot . '/message/lib.php');

View file

@ -36,6 +36,37 @@ defined('MOODLE_INTERNAL') || die();
*/
class core_message_renderer extends plugin_renderer_base {
/**
* Display the interface to manage both message outputs and default message outputs
*
* @param array $allprocessors array of objects containing all message processors
* @param array $processors array of objects containing active message processors
* @param array $providers array of objects containing message providers
* @param array $preferences array of objects containing current preferences
* @return string The text to render
*/
public function manage_messageoutput_settings($allprocessors, $processors, $providers, $preferences) {
$output = html_writer::start_tag('form', array('id' => 'defaultmessageoutputs', 'method' => 'post'));
$output .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'sesskey', 'value' => sesskey()));
// Add message output processors enabled/disabled and settings.
$output .= $this->heading(get_string('messageoutputs', 'message'));
$output .= $this->manage_messageoutputs($allprocessors);
// Add active message output processors settings.
$output .= $this->heading(get_string('managemessageoutputs', 'message'));
$output .= $this->manage_defaultmessageoutputs($processors, $providers, $preferences);
$output .= html_writer::start_tag('div', array('class' => 'form-buttons'));
$output .= html_writer::empty_tag('input',
array('type' => 'submit', 'value' => get_string('savechanges', 'admin'), 'class' => 'form-submit btn btn-primary')
);
$output .= html_writer::end_tag('div');
$output .= html_writer::end_tag('form');
return $output;
}
/**
* Display the interface to manage message outputs
*
@ -43,7 +74,6 @@ class core_message_renderer extends plugin_renderer_base {
* @return string The text to render
*/
public function manage_messageoutputs($processors) {
global $CFG;
// Display the current workflows
$table = new html_table();
$table->attributes['class'] = 'admintable generaltable';
@ -61,28 +91,21 @@ class core_message_renderer extends plugin_renderer_base {
$row = new html_table_row();
$row->attributes['class'] = 'messageoutputs';
// Name
$name = new html_table_cell(get_string('pluginname', 'message_'.$processor->name));
// Enable
$enable = new html_table_cell();
$enable->attributes['class'] = 'mdl-align';
if (!$processor->available) {
$enable->text = html_writer::nonempty_tag('span', get_string('outputnotavailable', 'message'), array('class' => 'error'));
} else if (!$processor->configured) {
$enable->text = html_writer::nonempty_tag('span', get_string('outputnotconfigured', 'message'), array('class' => 'error'));
} else if ($processor->enabled) {
$url = new moodle_url('/admin/message.php', array('disable' => $processor->id, 'sesskey' => sesskey()));
$enable->text = html_writer::link($url, $this->output->pix_icon('t/hide', get_string('outputenabled', 'message')));
$enable->text = html_writer::nonempty_tag('span', get_string('outputnotavailable', 'message'),
array('class' => 'error')
);
} else {
$row->attributes['class'] = 'dimmed_text';
$url = new moodle_url('/admin/message.php', array('enable' => $processor->id, 'sesskey' => sesskey()));
$enable->text = html_writer::link($url, $this->output->pix_icon('t/show', get_string('outputdisabled', 'message')));
$enable->text = html_writer::checkbox($processor->name, $processor->id, $processor->enabled, '',
array('id' => $processor->name)
);
}
// Settings
$settings = new html_table_cell();
if ($processor->available && $processor->hassettings) {
$settingsurl = new moodle_url('settings.php', array('section' => 'messagesetting'.$processor->name));
$settingsurl = new moodle_url('/admin/settings.php', array('section' => 'messagesetting'.$processor->name));
$settings->text = html_writer::link($settingsurl, get_string('settings', 'message'));
}
@ -101,17 +124,12 @@ class core_message_renderer extends plugin_renderer_base {
* @return string The text to render
*/
public function manage_defaultmessageoutputs($processors, $providers, $preferences) {
global $CFG;
// Prepare list of options for dropdown menu
$options = array();
foreach (array('disallowed', 'permitted', 'forced') as $setting) {
$options[$setting] = get_string($setting, 'message');
}
$output = html_writer::start_tag('form', array('id'=>'defaultmessageoutputs', 'method'=>'post'));
$output .= html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
// Display users outputs table
$table = new html_table();
$table->attributes['class'] = 'generaltable';
@ -195,11 +213,7 @@ class core_message_renderer extends plugin_renderer_base {
$table->data[] = $row;
}
$output .= html_writer::table($table);
$output .= html_writer::start_tag('div', array('class' => 'form-buttons'));
$output .= html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('savechanges','admin'), 'class' => 'form-submit'));
$output .= html_writer::end_tag('div');
$output .= html_writer::end_tag('form');
$output = html_writer::table($table);
return $output;
}