This commit is contained in:
Sam Hemelryk 2013-12-02 10:35:46 +13:00
commit 06ef842707
6 changed files with 117 additions and 20 deletions

View file

@ -41,6 +41,15 @@ if (($form = data_submitted()) && confirm_sesskey()) {
// 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;
}
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting){
$value = null;
$componentprovidersetting = $componentproviderbase.'_'.$setting;
@ -56,13 +65,13 @@ if (($form = data_submitted()) && confirm_sesskey()) {
}
// Ensure that loggedin loggedoff options are set correctly
// for this permission
if ($value == 'forced') {
$form->{$componentproviderbase.'_loggedin'}[$processor->name] = 1;
$form->{$componentproviderbase.'_loggedoff'}[$processor->name] = 1;
} else if ($value == 'disallowed') {
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;

View file

@ -54,6 +54,12 @@ M.core_message.init_defaultoutputs = function(Y) {
// set initial layout
node.simulate("change");
}, this);
Y.all('#defaultmessageoutputs input.messagedisable').each(function(node) {
// Attach event listener
node.on('change', defaultoutputs.changeProviderState);
node.simulate("change");
}, this);
},
changeState : function(e) {
@ -83,6 +89,26 @@ M.core_message.init_defaultoutputs = function(Y) {
node.setAttribute('checked', 1)
}
}, 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');
}
}
}

View file

@ -134,6 +134,9 @@ class core_message_renderer extends plugin_renderer_base {
foreach ($processors as $processor) {
$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
foreach ($providers as $provider) {
$row = new html_table_row();
@ -143,14 +146,16 @@ class core_message_renderer extends plugin_renderer_base {
// Provider Name
$providername = get_string('messageprovider:'.$provider->name, $provider->component);
$row->cells[] = new html_table_cell($providername);
$providersettingprefix = $provider->component.'_'.$provider->name.'_';
$disableprovidersetting = $providersettingprefix.'disable';
$providerdisabled = !empty($preferences->$disableprovidersetting);
// Settings for each processor
foreach ($processors as $processor) {
$cellcontent = '';
foreach (array('permitted', 'loggedin', 'loggedoff') as $setting) {
// pepare element and preference names
$elementname = $provider->component.'_'.$provider->name.'_'.$setting.'['.$processor->name.']';
$preferencebase = $provider->component.'_'.$provider->name.'_'.$setting;
$elementname = $providersettingprefix.$setting.'['.$processor->name.']';
$preferencebase = $providersettingprefix.$setting;
// prepare language bits
$processorname = get_string('pluginname', 'message_'.$processor->name);
$statename = get_string($setting, 'message');
@ -164,7 +169,9 @@ class core_message_renderer extends plugin_renderer_base {
// determine the current setting or use default
$select = MESSAGE_DEFAULT_PERMITTED;
$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};
}
// dropdown menu
@ -193,6 +200,10 @@ class core_message_renderer extends plugin_renderer_base {
}
$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;
}
@ -240,6 +251,7 @@ class core_message_renderer extends plugin_renderer_base {
$numprocs = count($processors);
// Display the messaging options table(s)
foreach ($components as $component) {
$provideradded = false;
$table = new html_table();
$table->attributes['class'] = 'generaltable';
$table->data = array();
@ -249,18 +261,18 @@ class core_message_renderer extends plugin_renderer_base {
$componentname = get_string('coresystem');
}
$table->head = array($componentname);
foreach ($readyprocessors as $processor) {
$table->head[] = get_string('pluginname', 'message_'.$processor->name);
}
// Populate the table with rows
foreach ( $providers as $provider) {
if( $provider->component != $component) {
foreach ($providers as $provider) {
$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;
}
$preferencebase = $provider->component.'_'.$provider->name;
$provideradded = true;
$headerrow = new html_table_row();
$providername = get_string('messageprovider:'.$provider->name, $provider->component);
$providercell = new html_table_cell($providername);
@ -331,9 +343,12 @@ class core_message_renderer extends plugin_renderer_base {
$table->data[] = $optionrow;
}
}
$output .= html_writer::start_tag('div', array('class' => 'messagesettingcomponent'));
$output .= html_writer::table($table);
$output .= html_writer::end_tag('div');
// Add settings only if provider added for component.
if ($provideradded) {
$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');