mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 17:06:53 +02:00
Merge branch 'wip-mdl-33618' of https://github.com/rajeshtaneja/moodle
This commit is contained in:
commit
06ef842707
6 changed files with 117 additions and 20 deletions
|
@ -51,6 +51,7 @@ $string['discussion'] = 'Discussion';
|
||||||
$string['emailmessages'] = 'Email messages when I am offline';
|
$string['emailmessages'] = 'Email messages when I am offline';
|
||||||
$string['emailtagline'] = 'This is a copy of a message sent to you at "{$a->sitename}". Go to {$a->url} to reply.';
|
$string['emailtagline'] = 'This is a copy of a message sent to you at "{$a->sitename}". Go to {$a->url} to reply.';
|
||||||
$string['emptysearchstring'] = 'You must search for something';
|
$string['emptysearchstring'] = 'You must search for something';
|
||||||
|
$string['enabled'] = 'Enabled';
|
||||||
$string['errorcallingprocessor'] = 'Error calling defined output';
|
$string['errorcallingprocessor'] = 'Error calling defined output';
|
||||||
$string['errortranslatingdefault'] = 'Error translating default setting provided by plugin, using system defaults instead.';
|
$string['errortranslatingdefault'] = 'Error translating default setting provided by plugin, using system defaults instead.';
|
||||||
$string['forced'] = 'Forced';
|
$string['forced'] = 'Forced';
|
||||||
|
|
|
@ -57,6 +57,14 @@ function message_send($eventdata) {
|
||||||
//new message ID to return
|
//new message ID to return
|
||||||
$messageid = false;
|
$messageid = false;
|
||||||
|
|
||||||
|
// Fetch default (site) preferences
|
||||||
|
$defaultpreferences = get_message_output_default_preferences();
|
||||||
|
$preferencebase = $eventdata->component.'_'.$eventdata->name;
|
||||||
|
// If message provider is disabled then don't do any processing.
|
||||||
|
if (!empty($defaultpreferences->{$preferencebase.'_disable'})) {
|
||||||
|
return $messageid;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: we need to solve problems with database transactions here somehow, for now we just prevent transactions - sorry
|
//TODO: we need to solve problems with database transactions here somehow, for now we just prevent transactions - sorry
|
||||||
$DB->transactions_forbidden();
|
$DB->transactions_forbidden();
|
||||||
|
|
||||||
|
@ -150,12 +158,9 @@ function message_send($eventdata) {
|
||||||
|
|
||||||
// Fetch enabled processors
|
// Fetch enabled processors
|
||||||
$processors = get_message_processors(true);
|
$processors = get_message_processors(true);
|
||||||
// Fetch default (site) preferences
|
|
||||||
$defaultpreferences = get_message_output_default_preferences();
|
|
||||||
|
|
||||||
// Preset variables
|
// Preset variables
|
||||||
$processorlist = array();
|
$processorlist = array();
|
||||||
$preferencebase = $eventdata->component.'_'.$eventdata->name;
|
|
||||||
// Fill in the array of processors to be used based on default and user preferences
|
// Fill in the array of processors to be used based on default and user preferences
|
||||||
foreach ($processors as $processor) {
|
foreach ($processors as $processor) {
|
||||||
// Skip adding processors for internal user, if processor doesn't support sending message to internal user.
|
// Skip adding processors for internal user, if processor doesn't support sending message to internal user.
|
||||||
|
|
|
@ -27,6 +27,47 @@ defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
class core_messagelib_testcase extends advanced_testcase {
|
class core_messagelib_testcase extends advanced_testcase {
|
||||||
|
|
||||||
|
public function test_message_provider_disabled() {
|
||||||
|
$this->resetAfterTest();
|
||||||
|
$this->preventResetByRollback();
|
||||||
|
unset_config('noemailever');
|
||||||
|
|
||||||
|
// Disable instantmessage provider.
|
||||||
|
$disableprovidersetting = 'moodle_instantmessage_disable';
|
||||||
|
set_config($disableprovidersetting, 1, 'message');
|
||||||
|
$preferences = get_message_output_default_preferences();
|
||||||
|
$this->assertTrue($preferences->$disableprovidersetting == 1);
|
||||||
|
|
||||||
|
$message = new stdClass();
|
||||||
|
$message->component = 'moodle';
|
||||||
|
$message->name = 'instantmessage';
|
||||||
|
$message->userfrom = get_admin();
|
||||||
|
$message->userto = $this->getDataGenerator()->create_user();;
|
||||||
|
$message->subject = 'message subject 1';
|
||||||
|
$message->fullmessage = 'message body';
|
||||||
|
$message->fullmessageformat = FORMAT_MARKDOWN;
|
||||||
|
$message->fullmessagehtml = '<p>message body</p>';
|
||||||
|
$message->smallmessage = 'small message';
|
||||||
|
|
||||||
|
// Check message is not sent.
|
||||||
|
$sink = $this->redirectEmails();
|
||||||
|
$this->assertTrue(phpunit_util::is_redirecting_phpmailer());
|
||||||
|
message_send($message);
|
||||||
|
$emails = $sink->get_messages();
|
||||||
|
$this->assertEmpty($emails);
|
||||||
|
|
||||||
|
// Check message is sent.
|
||||||
|
set_config($disableprovidersetting, 0, 'message');
|
||||||
|
$preferences = get_message_output_default_preferences();
|
||||||
|
$this->assertTrue($preferences->$disableprovidersetting == 0);
|
||||||
|
|
||||||
|
$sink = $this->redirectEmails();
|
||||||
|
$this->assertTrue(phpunit_util::is_redirecting_phpmailer());
|
||||||
|
message_send($message);
|
||||||
|
$emails = $sink->get_messages();
|
||||||
|
$email = reset($emails);
|
||||||
|
$this->assertEquals($email->subject, 'message subject 1');
|
||||||
|
}
|
||||||
public function test_message_get_providers_for_user() {
|
public function test_message_get_providers_for_user() {
|
||||||
global $CFG, $DB;
|
global $CFG, $DB;
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,15 @@ if (($form = data_submitted()) && confirm_sesskey()) {
|
||||||
// Prepare default message outputs settings
|
// Prepare default message outputs settings
|
||||||
foreach ( $providers as $provider) {
|
foreach ( $providers as $provider) {
|
||||||
$componentproviderbase = $provider->component.'_'.$provider->name;
|
$componentproviderbase = $provider->component.'_'.$provider->name;
|
||||||
|
$disableprovidersetting = $componentproviderbase.'_disable';
|
||||||
|
$providerdisabled = false;
|
||||||
|
if (!isset($form->$disableprovidersetting)) {
|
||||||
|
$providerdisabled = true;
|
||||||
|
$preferences[$disableprovidersetting] = 1;
|
||||||
|
} else {
|
||||||
|
$preferences[$disableprovidersetting] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting){
|
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting){
|
||||||
$value = null;
|
$value = null;
|
||||||
$componentprovidersetting = $componentproviderbase.'_'.$setting;
|
$componentprovidersetting = $componentproviderbase.'_'.$setting;
|
||||||
|
@ -56,13 +65,13 @@ if (($form = data_submitted()) && confirm_sesskey()) {
|
||||||
}
|
}
|
||||||
// Ensure that loggedin loggedoff options are set correctly
|
// Ensure that loggedin loggedoff options are set correctly
|
||||||
// for this permission
|
// for this permission
|
||||||
if ($value == 'forced') {
|
if (($value == 'disallowed') || $providerdisabled) {
|
||||||
$form->{$componentproviderbase.'_loggedin'}[$processor->name] = 1;
|
|
||||||
$form->{$componentproviderbase.'_loggedoff'}[$processor->name] = 1;
|
|
||||||
} else if ($value == 'disallowed') {
|
|
||||||
// It might be better to unset them, but I can't figure out why that cause error
|
// 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.'_loggedin'}[$processor->name] = 0;
|
||||||
$form->{$componentproviderbase.'_loggedoff'}[$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
|
// record the site preference
|
||||||
$preferences[$processor->name.'_provider_'.$componentprovidersetting] = $value;
|
$preferences[$processor->name.'_provider_'.$componentprovidersetting] = $value;
|
||||||
|
|
|
@ -54,6 +54,12 @@ M.core_message.init_defaultoutputs = function(Y) {
|
||||||
// set initial layout
|
// set initial layout
|
||||||
node.simulate("change");
|
node.simulate("change");
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
Y.all('#defaultmessageoutputs input.messagedisable').each(function(node) {
|
||||||
|
// Attach event listener
|
||||||
|
node.on('change', defaultoutputs.changeProviderState);
|
||||||
|
node.simulate("change");
|
||||||
|
}, this);
|
||||||
},
|
},
|
||||||
|
|
||||||
changeState : function(e) {
|
changeState : function(e) {
|
||||||
|
@ -83,6 +89,26 @@ M.core_message.init_defaultoutputs = function(Y) {
|
||||||
node.setAttribute('checked', 1)
|
node.setAttribute('checked', 1)
|
||||||
}
|
}
|
||||||
}, this);
|
}, this);
|
||||||
|
},
|
||||||
|
|
||||||
|
changeProviderState : function(e) {
|
||||||
|
var isenabled = e.target.get('checked') || undefined;
|
||||||
|
var parentnode = e.target.ancestor('tr');
|
||||||
|
if (!isenabled) {
|
||||||
|
parentnode.all('select').each(function(node) {
|
||||||
|
node.set('value', 'disallowed');
|
||||||
|
node.setAttribute('disabled', 1);
|
||||||
|
defaultoutputs.updateCheckboxes(node.ancestor('td'), 1, 0);
|
||||||
|
}, this);
|
||||||
|
parentnode.addClass('dimmed_text');
|
||||||
|
} else {
|
||||||
|
parentnode.all('select').each(function(node) {
|
||||||
|
node.removeAttribute('disabled');
|
||||||
|
node.set('value', 'permitted');
|
||||||
|
defaultoutputs.updateCheckboxes(node.ancestor('td'), 0, 0);
|
||||||
|
}, this);
|
||||||
|
parentnode.removeClass('dimmed_text');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,9 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
foreach ($processors as $processor) {
|
foreach ($processors as $processor) {
|
||||||
$table->head[] = get_string('pluginname', 'message_'.$processor->name);
|
$table->head[] = get_string('pluginname', 'message_'.$processor->name);
|
||||||
}
|
}
|
||||||
|
// Add enable/disable to head
|
||||||
|
$table->head[] = get_string('enabled', 'core_message');
|
||||||
|
|
||||||
// Generate the matrix of settings for each provider and processor
|
// Generate the matrix of settings for each provider and processor
|
||||||
foreach ($providers as $provider) {
|
foreach ($providers as $provider) {
|
||||||
$row = new html_table_row();
|
$row = new html_table_row();
|
||||||
|
@ -143,14 +146,16 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
// Provider Name
|
// Provider Name
|
||||||
$providername = get_string('messageprovider:'.$provider->name, $provider->component);
|
$providername = get_string('messageprovider:'.$provider->name, $provider->component);
|
||||||
$row->cells[] = new html_table_cell($providername);
|
$row->cells[] = new html_table_cell($providername);
|
||||||
|
$providersettingprefix = $provider->component.'_'.$provider->name.'_';
|
||||||
|
$disableprovidersetting = $providersettingprefix.'disable';
|
||||||
|
$providerdisabled = !empty($preferences->$disableprovidersetting);
|
||||||
// Settings for each processor
|
// Settings for each processor
|
||||||
foreach ($processors as $processor) {
|
foreach ($processors as $processor) {
|
||||||
$cellcontent = '';
|
$cellcontent = '';
|
||||||
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting) {
|
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting) {
|
||||||
// pepare element and preference names
|
// pepare element and preference names
|
||||||
$elementname = $provider->component.'_'.$provider->name.'_'.$setting.'['.$processor->name.']';
|
$elementname = $providersettingprefix.$setting.'['.$processor->name.']';
|
||||||
$preferencebase = $provider->component.'_'.$provider->name.'_'.$setting;
|
$preferencebase = $providersettingprefix.$setting;
|
||||||
// prepare language bits
|
// prepare language bits
|
||||||
$processorname = get_string('pluginname', 'message_'.$processor->name);
|
$processorname = get_string('pluginname', 'message_'.$processor->name);
|
||||||
$statename = get_string($setting, 'message');
|
$statename = get_string($setting, 'message');
|
||||||
|
@ -164,7 +169,9 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
// determine the current setting or use default
|
// determine the current setting or use default
|
||||||
$select = MESSAGE_DEFAULT_PERMITTED;
|
$select = MESSAGE_DEFAULT_PERMITTED;
|
||||||
$preference = $processor->name.'_provider_'.$preferencebase;
|
$preference = $processor->name.'_provider_'.$preferencebase;
|
||||||
if (array_key_exists($preference, $preferences)) {
|
if ($providerdisabled) {
|
||||||
|
$select = MESSAGE_DISALLOWED;
|
||||||
|
} else if (array_key_exists($preference, $preferences)) {
|
||||||
$select = $preferences->{$preference};
|
$select = $preferences->{$preference};
|
||||||
}
|
}
|
||||||
// dropdown menu
|
// dropdown menu
|
||||||
|
@ -193,6 +200,10 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
}
|
}
|
||||||
$row->cells[] = new html_table_cell($cellcontent);
|
$row->cells[] = new html_table_cell($cellcontent);
|
||||||
}
|
}
|
||||||
|
$disableprovider = html_writer::checkbox($disableprovidersetting, 1, !$providerdisabled, '',
|
||||||
|
array('id' => $disableprovidersetting, 'class' => 'messagedisable'));
|
||||||
|
$disableprovider = html_writer::tag('div', $disableprovider);
|
||||||
|
$row->cells[] = new html_table_cell($disableprovider);
|
||||||
$table->data[] = $row;
|
$table->data[] = $row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,6 +251,7 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
$numprocs = count($processors);
|
$numprocs = count($processors);
|
||||||
// Display the messaging options table(s)
|
// Display the messaging options table(s)
|
||||||
foreach ($components as $component) {
|
foreach ($components as $component) {
|
||||||
|
$provideradded = false;
|
||||||
$table = new html_table();
|
$table = new html_table();
|
||||||
$table->attributes['class'] = 'generaltable';
|
$table->attributes['class'] = 'generaltable';
|
||||||
$table->data = array();
|
$table->data = array();
|
||||||
|
@ -249,18 +261,18 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
$componentname = get_string('coresystem');
|
$componentname = get_string('coresystem');
|
||||||
}
|
}
|
||||||
$table->head = array($componentname);
|
$table->head = array($componentname);
|
||||||
|
|
||||||
foreach ($readyprocessors as $processor) {
|
foreach ($readyprocessors as $processor) {
|
||||||
$table->head[] = get_string('pluginname', 'message_'.$processor->name);
|
$table->head[] = get_string('pluginname', 'message_'.$processor->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate the table with rows
|
// Populate the table with rows
|
||||||
foreach ( $providers as $provider) {
|
foreach ($providers as $provider) {
|
||||||
if( $provider->component != $component) {
|
$preferencebase = $provider->component.'_'.$provider->name;
|
||||||
|
// If provider component is not same or provider disabled then don't show.
|
||||||
|
if (($provider->component != $component) ||
|
||||||
|
(!empty($defaultpreferences->{$preferencebase.'_disable'}))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$preferencebase = $provider->component.'_'.$provider->name;
|
$provideradded = true;
|
||||||
|
|
||||||
$headerrow = new html_table_row();
|
$headerrow = new html_table_row();
|
||||||
$providername = get_string('messageprovider:'.$provider->name, $provider->component);
|
$providername = get_string('messageprovider:'.$provider->name, $provider->component);
|
||||||
$providercell = new html_table_cell($providername);
|
$providercell = new html_table_cell($providername);
|
||||||
|
@ -331,9 +343,12 @@ class core_message_renderer extends plugin_renderer_base {
|
||||||
$table->data[] = $optionrow;
|
$table->data[] = $optionrow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$output .= html_writer::start_tag('div', array('class' => 'messagesettingcomponent'));
|
// Add settings only if provider added for component.
|
||||||
$output .= html_writer::table($table);
|
if ($provideradded) {
|
||||||
$output .= html_writer::end_tag('div');
|
$output .= html_writer::start_tag('div', array('class' => 'messagesettingcomponent'));
|
||||||
|
$output .= html_writer::table($table);
|
||||||
|
$output .= html_writer::end_tag('div');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$output .= html_writer::end_tag('fieldset');
|
$output .= html_writer::end_tag('fieldset');
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue