diff --git a/admin/message.php b/admin/message.php index 8daf613defa..8e78fc30231 100644 --- a/admin/message.php +++ b/admin/message.php @@ -34,6 +34,10 @@ require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM)); // Get the submitted params $disable = optional_param('disable', 0, PARAM_INT); $enable = optional_param('enable', 0, PARAM_INT); +$uninstall = optional_param('uninstall', 0, PARAM_INT); +$confirm = optional_param('confirm', false, PARAM_BOOL); + +$headingtitle = get_string('managemessageoutputs', 'message'); if (!empty($disable) && confirm_sesskey()) { if (!$processor = $DB->get_record('message_processors', array('id'=>$disable))) { @@ -42,14 +46,37 @@ if (!empty($disable) && confirm_sesskey()) { $DB->set_field('message_processors', 'enabled', '0', array('id'=>$processor->id)); // Disable output } -if (!empty($enable) && confirm_sesskey() ) { +if (!empty($enable) && confirm_sesskey()) { if (!$processor = $DB->get_record('message_processors', array('id'=>$enable))) { print_error('outputdoesnotexist', 'message'); } $DB->set_field('message_processors', 'enabled', '1', array('id'=>$processor->id)); // Enable output } -if ($disable || $enable) { +if (!empty($uninstall) && confirm_sesskey()) { + echo $OUTPUT->header(); + echo $OUTPUT->heading($headingtitle); + + if (!$processor = $DB->get_record('message_processors', array('id'=>$uninstall))) { + print_error('outputdoesnotexist', 'message'); + } + + $processorname = get_string('pluginname', 'message_'.$processor->name); + + if (!$confirm) { + echo $OUTPUT->confirm(get_string('processordeleteconfirm', 'message', $processorname), 'message.php?uninstall='.$processor->id.'&confirm=1', 'message.php'); + echo $OUTPUT->footer(); + exit; + + } else { + message_processor_uninstall($processor->name); + $a->processor = $processorname; + $a->directory = $CFG->dirroot.'/message/output/'.$processor->name; + notice(get_string('processordeletefiles', 'message', $a), 'message.php'); + } +} + +if ($disable || $enable || $uninstall) { $url = new moodle_url('message.php'); redirect($url); } @@ -65,6 +92,6 @@ $messageoutputs = $renderer->manage_messageoutputs($processors); // Display the page echo $OUTPUT->header(); -echo $OUTPUT->heading(get_string('managemessageoutputs', 'message')); +echo $OUTPUT->heading($headingtitle); echo $messageoutputs; echo $OUTPUT->footer(); \ No newline at end of file diff --git a/lang/en/message.php b/lang/en/message.php index 0048a0070ff..fd25102a8f4 100644 --- a/lang/en/message.php +++ b/lang/en/message.php @@ -53,7 +53,7 @@ $string['editmymessage'] = 'Messaging'; $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['emptysearchstring'] = 'You must search for something'; -$string['errorcallingprocessor'] = 'Error calling defined processor'; +$string['errorcallingprocessor'] = 'Error calling defined output'; $string['errortranslatingdefault'] = 'Error translating default setting provided by plugin, using system defaults instead.'; $string['forced'] = 'Forced'; $string['formorethan'] = 'For more than'; @@ -108,6 +108,8 @@ $string['permitted'] = 'Permitted'; $string['page-message-x'] = 'Any message pages'; $string['private_config'] = 'Popup message window'; $string['processortag'] = 'Destination'; +$string['processordeleteconfirm'] = 'You are about to completely delete message output \'{$a}\'. This will completely delete everything in the database associated with this output. Are you SURE you want to continue?'; +$string['processordeletefiles'] = 'All data associated with the output \'{$a->processor}\' has been deleted from the database. To complete the deletion (and prevent the output re-installing itself), you should now delete this directory from your server: {$a->directory}'; $string['providers_config'] = 'Configure notification methods for incoming messages'; $string['providerstag'] = 'Source'; $string['recent'] = 'Recent'; diff --git a/lang/en/plugin.php b/lang/en/plugin.php index 1b6ae6cbd26..3bc89ef8d37 100644 --- a/lang/en/plugin.php +++ b/lang/en/plugin.php @@ -91,8 +91,8 @@ $string['type_gradingform'] = 'Advanced grading method'; $string['type_gradingform_plural'] = 'Advanced grading methods'; $string['type_local'] = 'Local plugin'; $string['type_local_plural'] = 'Local plugins'; -$string['type_message'] = 'Messaging processor'; -$string['type_message_plural'] = 'Messaging processors'; +$string['type_message'] = 'Messaging output'; +$string['type_message_plural'] = 'Messaging outputs'; $string['type_mnetservice'] = 'MNet service'; $string['type_mnetservice_plural'] = 'MNet services'; $string['type_mod'] = 'Activity module'; diff --git a/lib/messagelib.php b/lib/messagelib.php index 5dfb354e4dd..0dd6edf02c2 100644 --- a/lib/messagelib.php +++ b/lib/messagelib.php @@ -492,6 +492,7 @@ function message_processor_uninstall($name) { $transaction = $DB->start_delegated_transaction(); $DB->delete_records('message_processors', array('name' => $name)); + $DB->delete_records_select('config_plugins', "plugin = ?", array("message_{$name}")); // delete permission preferences only, we do not care about loggedin/loggedoff // defaults, they will be removed on the next attempt to update the preferences $DB->delete_records_select('config_plugins', "plugin = 'message' AND ".$DB->sql_like('name', '?', false), array("{$name}_provider_%")); diff --git a/lib/pluginlib.php b/lib/pluginlib.php index b34264b7118..c566cdbb3ef 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -2288,11 +2288,37 @@ class plugininfo_enrol extends plugininfo_base { class plugininfo_message extends plugininfo_base { public function get_settings_url() { + $processors = get_message_processors(); + if (isset($processors[$this->name])) { + $processor = $processors[$this->name]; + if ($processor->available && $processor->hassettings) { + return new moodle_url('settings.php', array('section' => 'messagesetting'.$processor->name)); + } + } + return parent::get_settings_url(); + } - if (file_exists($this->full_path('settings.php')) or file_exists($this->full_path('settingstree.php'))) { - return new moodle_url('/admin/settings.php', array('section' => 'messagesetting' . $this->name)); + /** + * @see plugintype_interface::is_enabled() + */ + public function is_enabled() { + $processors = get_message_processors(); + if (isset($processors[$this->name])) { + return $processors[$this->name]->configured && $processors[$this->name]->enabled; } else { - return parent::get_settings_url(); + return parent::is_enabled(); + } + } + + /** + * @see plugintype_interface::get_uninstall_url() + */ + public function get_uninstall_url() { + $processors = get_message_processors(); + if (isset($processors[$this->name])) { + return new moodle_url('message.php', array('uninstall' => $processors[$this->name]->id, 'sesskey' => sesskey())); + } else { + return parent::get_uninstall_url(); } } }