From f471a7d23af368f50432fc2a391033e13326bc9a Mon Sep 17 00:00:00 2001 From: Sara Arjona Date: Mon, 16 Aug 2021 13:10:48 +0200 Subject: [PATCH] MDL-71473 message: Remove jabber output notification Jabber is not widely used these days so message_jabber has been removed from Moodle core. --- lib/classes/plugin_manager.php | 3 +- lib/db/upgrade.php | 43 +++++ .../jabber/classes/privacy/provider.php | 111 ----------- message/output/jabber/db/install.php | 37 ---- message/output/jabber/db/upgrade.php | 48 ----- .../output/jabber/lang/en/message_jabber.php | 42 ---- .../output/jabber/message_output_jabber.php | 180 ------------------ message/output/jabber/settings.php | 33 ---- message/output/jabber/tests/privacy_test.php | 60 ------ message/output/jabber/version.php | 29 --- ...ge_manage_notification_preferences.feature | 30 --- message/upgrade.txt | 2 + version.php | 2 +- 13 files changed, 48 insertions(+), 572 deletions(-) delete mode 100644 message/output/jabber/classes/privacy/provider.php delete mode 100644 message/output/jabber/db/install.php delete mode 100644 message/output/jabber/db/upgrade.php delete mode 100644 message/output/jabber/lang/en/message_jabber.php delete mode 100644 message/output/jabber/message_output_jabber.php delete mode 100644 message/output/jabber/settings.php delete mode 100644 message/output/jabber/tests/privacy_test.php delete mode 100644 message/output/jabber/version.php diff --git a/lib/classes/plugin_manager.php b/lib/classes/plugin_manager.php index 9cfb6629eab..be2741a4fef 100644 --- a/lib/classes/plugin_manager.php +++ b/lib/classes/plugin_manager.php @@ -1726,6 +1726,7 @@ class core_plugin_manager { 'cachestore' => array('memcache'), 'enrol' => array('authorize'), 'qformat' => array('webct'), + 'message' => array('jabber'), 'quizaccess' => array('safebrowser'), 'report' => array('search'), 'repository' => array('alfresco'), @@ -1911,7 +1912,7 @@ class core_plugin_manager { ), 'message' => array( - 'airnotifier', 'email', 'jabber', 'popup' + 'airnotifier', 'email', 'popup' ), 'mnetservice' => array( diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index 9a5cced14a6..10aa17f8779 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -2717,5 +2717,48 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2021090200.01); } + if ($oldversion < 2021091100.01) { + // If message_jabber is no longer present, remove it. + if (!file_exists($CFG->dirroot . '/message/output/jabber/message_output_jabber.php')) { + // Remove Jabber from the notification plugins list. + $DB->delete_records('message_processors', ['name' => 'jabber']); + + // Remove user preference settings. + $DB->delete_records('user_preferences', ['name' => 'message_processor_jabber_jabberid']); + $sql = 'SELECT * + FROM {user_preferences} up + WHERE ' . $DB->sql_like('up.name', ':name', false, false) . ' AND ' . + $DB->sql_like('up.value', ':value', false, false); + $params = [ + 'name' => 'message_provider_%', + 'value' => '%jabber%', + ]; + $jabbersettings = $DB->get_recordset_sql($sql, $params); + foreach ($jabbersettings as $jabbersetting) { + // Remove 'jabber' from the value. + $jabbersetting->value = implode(',', array_diff(explode(',', $jabbersetting->value), ['jabber'])); + $DB->update_record('user_preferences', $jabbersetting); + } + $jabbersettings->close(); + + // Clean config settings. + unset_config('jabberhost'); + unset_config('jabberserver'); + unset_config('jabberusername'); + unset_config('jabberpassword'); + unset_config('jabberport'); + + // Remove default notification preferences. + $like = $DB->sql_like('name', '?', true, true, false, '|'); + $params = [$DB->sql_like_escape('jabber_provider_', '|') . '%']; + $DB->delete_records_select('config_plugins', $like, $params); + + // Clean config config settings. + unset_all_config_for_plugin('message_jabber'); + } + + upgrade_main_savepoint(true, 2021091100.01); + } + return true; } diff --git a/message/output/jabber/classes/privacy/provider.php b/message/output/jabber/classes/privacy/provider.php deleted file mode 100644 index 7319d6de9be..00000000000 --- a/message/output/jabber/classes/privacy/provider.php +++ /dev/null @@ -1,111 +0,0 @@ -. -/** - * Privacy class for requesting user data. - * - * @package message_jabber - * @copyright 2018 Mihail Geshoski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -namespace message_jabber\privacy; - -defined('MOODLE_INTERNAL') || die(); - -use \core_privacy\local\metadata\collection; -use \core_privacy\local\request\contextlist; -use \core_privacy\local\request\approved_contextlist; -use core_privacy\local\request\userlist; -use \core_privacy\local\request\approved_userlist; - -/** - * Privacy class for requesting user data. - * - * @package message_jabber - * @copyright 2018 Mihail Geshoski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class provider implements - \core_privacy\local\metadata\provider, - \core_privacy\local\request\core_userlist_provider, - \core_privacy\local\request\plugin\provider { - - /** - * Returns meta data about this system. - * - * @param collection $collection The initialised collection to add items to. - * @return collection A listing of user data stored through this system. - */ - public static function get_metadata(collection $collection) : collection { - $collection->link_external_location('External Jabber server.', [ - 'userto' => 'privacy:metadata:userto', - 'userfrom' => 'privacy:metadata:userfrom', - 'smallmessage' => 'privacy:metadata:smallmessage', - 'contexturl' => 'privacy:metadata:contexturl', - ], 'privacy:metadata:externalpurpose'); - return $collection; - } - - /** - * Get the list of contexts that contain user information for the specified user. - * - * @param int $userid The user to search. - * @return contextlist The contextlist containing the list of contexts used in this plugin. - */ - public static function get_contexts_for_userid(int $userid) : contextlist { - return new contextlist(); - } - - /** - * Get the list of users who have data within a context. - * - * @param userlist $userlist The userlist containing the list of users who have data in this context/plugin combination. - */ - public static function get_users_in_context(userlist $userlist) { - } - - /** - * Export all user data for the specified user, in the specified contexts. - * - * @param approved_contextlist $contextlist The approved contexts to export information for. - */ - public static function export_user_data(approved_contextlist $contextlist) { - } - - /** - * Delete all use data which matches the specified deletion_criteria. - * - * @param context $context A user context. - */ - public static function delete_data_for_all_users_in_context(\context $context) { - } - - /** - * Delete multiple users within a single context. - * - * @param approved_userlist $userlist The approved context and user information to delete information for. - */ - public static function delete_data_for_users(approved_userlist $userlist) { - } - - /** - * Delete all user data for the specified user, in the specified contexts. - * - * @param approved_contextlist $contextlist The approved contexts and user information to delete information for. - */ - public static function delete_data_for_user(approved_contextlist $contextlist) { - } -} diff --git a/message/output/jabber/db/install.php b/message/output/jabber/db/install.php deleted file mode 100644 index 3ecd680885b..00000000000 --- a/message/output/jabber/db/install.php +++ /dev/null @@ -1,37 +0,0 @@ -. - -/** - * Jabber message processor installation code - * - * @package message_jabber - * @copyright 2009 Dongsheng Cai - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -/** - * Install the Jabber message processor - */ -function xmldb_message_jabber_install(){ - global $DB; - - $result = true; - - $provider = new stdClass(); - $provider->name = 'jabber'; - $DB->insert_record('message_processors', $provider); - return $result; -} diff --git a/message/output/jabber/db/upgrade.php b/message/output/jabber/db/upgrade.php deleted file mode 100644 index e829e13bab5..00000000000 --- a/message/output/jabber/db/upgrade.php +++ /dev/null @@ -1,48 +0,0 @@ -. - -/** - * Upgrade code for jabber message processor - * - * @package message_jabber - * @copyright 2008 Luis Rodrigues - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Upgrade code for the jabber message processor - * - * @param int $oldversion The version that we are upgrading from - */ -function xmldb_message_jabber_upgrade($oldversion) { - global $CFG; - - // Automatically generated Moodle v3.6.0 release upgrade line. - // Put any upgrade step following this. - - // Automatically generated Moodle v3.7.0 release upgrade line. - // Put any upgrade step following this. - - // Automatically generated Moodle v3.8.0 release upgrade line. - // Put any upgrade step following this. - - // Automatically generated Moodle v3.9.0 release upgrade line. - // Put any upgrade step following this. - - return true; -} diff --git a/message/output/jabber/lang/en/message_jabber.php b/message/output/jabber/lang/en/message_jabber.php deleted file mode 100644 index 9f8c18a8d94..00000000000 --- a/message/output/jabber/lang/en/message_jabber.php +++ /dev/null @@ -1,42 +0,0 @@ -. - -/** - * Strings for component 'message_jabber', language 'en' - * - * @package message_jabber - * @copyright 1999 onwards Martin Dougiamas {@link http://moodle.com} - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -$string['configjabberhost'] = 'The server to connect to to send jabber message notifications'; -$string['configjabberserver'] = 'XMPP host ID (can be left empty if the same as Jabber host)'; -$string['configjabberusername'] = 'The username to use when connecting to the Jabber server'; -$string['configjabberpassword'] = 'The password to use when connecting to the Jabber server'; -$string['configjabberport'] = 'The port to use when connecting to the Jabber server'; -$string['jabberhost'] = 'Jabber host'; -$string['jabberid'] = 'Jabber ID'; -$string['jabberserver'] = 'Jabber server'; -$string['jabberusername'] = 'Jabber username'; -$string['jabberpassword'] = 'Jabber password'; -$string['jabberport'] = 'Jabber port'; -$string['notconfigured'] = 'The Jabber server hasn\'t been configured so Jabber messages cannot be sent'; -$string['pluginname'] = 'Jabber'; -$string['privacy:metadata:contexturl'] = 'The URL to view the event.'; -$string['privacy:metadata:externalpurpose'] = 'This information is sent to an external Jabber server to be ultimately delivered as a notification message to the recipient.'; -$string['privacy:metadata:smallmessage'] = 'A section of the message.'; -$string['privacy:metadata:userfrom'] = 'The user sending the notification message.'; -$string['privacy:metadata:userto'] = 'The recipient of the notification message.'; diff --git a/message/output/jabber/message_output_jabber.php b/message/output/jabber/message_output_jabber.php deleted file mode 100644 index f2c2a6bab39..00000000000 --- a/message/output/jabber/message_output_jabber.php +++ /dev/null @@ -1,180 +0,0 @@ -. - -/** - * Jabber message processor to send messages by jabber - * - * @package message_jabber - * @copyright 2008 Luis Rodrigues - * @license http://www.gnu.org/copyleft/gpl.html GNU Public License - */ - -require_once($CFG->dirroot.'/message/output/lib.php'); -/** - * The jabber message processor - * - * @package message_jabber - * @copyright 2008 Luis Rodrigues - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class message_output_jabber extends message_output { - - /** - * Processes the message and sends a notification via jabber - * - * @param stdClass $eventdata the event data submitted by the message sender plus $eventdata->savedmessageid - * @return true if ok, false if error - */ - function send_message($eventdata){ - global $CFG; - - // Skip any messaging of suspended and deleted users. - if ($eventdata->userto->auth === 'nologin' or $eventdata->userto->suspended or $eventdata->userto->deleted) { - return true; - } - - if (!empty($CFG->noemailever)) { - // hidden setting for development sites, set in config.php if needed - debugging('$CFG->noemailever is active, no jabber message sent.', DEBUG_MINIMAL); - return true; - } - - if (PHPUNIT_TEST) { - // No connection to external servers allowed in phpunit tests. - return true; - } - - //hold onto jabber id preference because /admin/cron.php sends a lot of messages at once - static $jabberaddresses = array(); - - if (!array_key_exists($eventdata->userto->id, $jabberaddresses)) { - $jabberaddresses[$eventdata->userto->id] = get_user_preferences('message_processor_jabber_jabberid', null, $eventdata->userto->id); - } - $jabberaddress = $jabberaddresses[$eventdata->userto->id]; - - //calling s() on smallmessage causes Jabber to display things like < Jabber != a browser - $jabbermessage = fullname($eventdata->userfrom).': '.$eventdata->smallmessage; - - if (!empty($eventdata->contexturl)) { - $jabbermessage .= "\n".get_string('view').': '.$eventdata->contexturl; - } - - $jabbermessage .= "\n(".get_string('noreply','message').')'; - - $conn = new \BirknerAlex\XMPPHP\XMPP($CFG->jabberhost,$CFG->jabberport,$CFG->jabberusername,$CFG->jabberpassword,'moodle',$CFG->jabberserver); - - // No need to track the presence during the sending message process. - $conn->track_presence = false; - - try { - //$conn->useEncryption(false); - $conn->connect(); - $conn->processUntil('session_start'); - $conn->presence(); - $conn->message($jabberaddress, $jabbermessage); - $conn->disconnect(); - } catch(\BirknerAlex\XMPPHP\Exception $e) { - debugging($e->getMessage()); - return false; - } - return true; - } - - /** - * Creates necessary fields in the messaging config form. - * - * @param array $preferences An array of user preferences - */ - function config_form($preferences){ - global $CFG; - - if (!$this->is_system_configured()) { - return get_string('notconfigured','message_jabber'); - } else { - return get_string('jabberid', 'message_jabber').': '; - } - } - - /** - * Parses the submitted form data and saves it into preferences array. - * - * @param stdClass $form preferences form class - * @param array $preferences preferences array - */ - function process_form($form, &$preferences){ - if (isset($form->jabber_jabberid) && !empty($form->jabber_jabberid)) { - $preferences['message_processor_jabber_jabberid'] = $form->jabber_jabberid; - } - } - - /** - * Loads the config data from database to put on the form during initial form display - * - * @param array $preferences preferences array - * @param int $userid the user id - */ - function load_data(&$preferences, $userid){ - $preferences->jabber_jabberid = get_user_preferences( 'message_processor_jabber_jabberid', '', $userid); - } - - /** - * Tests whether the Jabber settings have been configured - * @return boolean true if Jabber is configured - */ - function is_system_configured() { - global $CFG; - return (!empty($CFG->jabberhost) && !empty($CFG->jabberport) && !empty($CFG->jabberusername) && !empty($CFG->jabberpassword)); - } - - /** - * Tests whether the Jabber settings have been configured on user level - * @param object $user the user object, defaults to $USER. - * @return bool has the user made all the necessary settings - * in their profile to allow this plugin to be used. - */ - function is_user_configured($user = null) { - global $USER; - - if (is_null($user)) { - $user = $USER; - } - return (bool)get_user_preferences('message_processor_jabber_jabberid', null, $user->id); - } -} - -/* - * - * $f = fopen('/tmp/event_jabberx', 'a+'); - fwrite($f, date('l dS \of F Y h:i:s A')."\n"); - fwrite($f, "from: $message->userfromid\n"); - fwrite($f, "userto: $message->usertoid\n"); - fwrite($f, "subject: $message->subject\n"); - fclose($f); - - -$savemessage = new stdClass(); - $savemessage->useridfrom = 3; - $savemessage->useridto = 2; - $savemessage->subject = 'IM'; - $savemessage->fullmessage = 'full'; - $savemessage->timecreated = time(); - - -$a = new message_output_jabber(); - -$a->send_message($savemessage); -* */ - diff --git a/message/output/jabber/settings.php b/message/output/jabber/settings.php deleted file mode 100644 index 85c833fea8d..00000000000 --- a/message/output/jabber/settings.php +++ /dev/null @@ -1,33 +0,0 @@ -. - -/** - * Jabber configuration page - * - * @package message_jabber - * @copyright 2011 Lancaster University Network Services Limited - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die; - -if ($ADMIN->fulltree) { - $settings->add(new admin_setting_configtext('jabberhost', get_string('jabberhost', 'message_jabber'), get_string('configjabberhost', 'message_jabber'), '', PARAM_RAW)); - $settings->add(new admin_setting_configtext('jabberserver', get_string('jabberserver', 'message_jabber'), get_string('configjabberserver', 'message_jabber'), '', PARAM_RAW)); - $settings->add(new admin_setting_configtext('jabberusername', get_string('jabberusername', 'message_jabber'), get_string('configjabberusername', 'message_jabber'), '', PARAM_RAW)); - $settings->add(new admin_setting_configpasswordunmask('jabberpassword', get_string('jabberpassword', 'message_jabber'), get_string('configjabberpassword', 'message_jabber'), '')); - $settings->add(new admin_setting_configtext('jabberport', get_string('jabberport', 'message_jabber'), get_string('configjabberport', 'message_jabber'), 5222, PARAM_INT)); -} diff --git a/message/output/jabber/tests/privacy_test.php b/message/output/jabber/tests/privacy_test.php deleted file mode 100644 index 1475b275a05..00000000000 --- a/message/output/jabber/tests/privacy_test.php +++ /dev/null @@ -1,60 +0,0 @@ -. -/** - * Base class for unit tests for message_jabber. - * - * @package message_jabber - * @copyright 2018 Mihail Geshoski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -use \core_privacy\tests\provider_testcase; - -/** - * Unit tests for message\output\jabber\classes\privacy\provider.php - * - * @copyright 2018 Mihail Geshoski - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class message_jabber_testcase extends provider_testcase { - - /** - * Basic setup for these tests. - */ - public function setUp(): void { - $this->resetAfterTest(true); - } - - /** - * Test returning metadata. - */ - public function test_get_metadata() { - $collection = new \core_privacy\local\metadata\collection('message_jabber'); - $collection = \message_jabber\privacy\provider::get_metadata($collection); - $this->assertNotEmpty($collection); - } - - /** - * Test getting the context for the user ID related to this plugin. - */ - public function test_get_contexts_for_userid() { - $user = $this->getDataGenerator()->create_user(); - $contextlist = \message_jabber\privacy\provider::get_contexts_for_userid($user->id); - $this->assertEmpty($contextlist); - } -} diff --git a/message/output/jabber/version.php b/message/output/jabber/version.php deleted file mode 100644 index 4241c1d8cdd..00000000000 --- a/message/output/jabber/version.php +++ /dev/null @@ -1,29 +0,0 @@ -. - -/** - * Jabber message processor version information - * - * @package message_jabber - * @copyright 2008 Luis Rodrigues - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -$plugin->version = 2021052500; // The current plugin version (Date: YYYYMMDDXX). -$plugin->requires = 2021052500; // Requires this Moodle version. -$plugin->component = 'message_jabber'; // Full name of the plugin (used for diagnostics) diff --git a/message/tests/behat/message_manage_notification_preferences.feature b/message/tests/behat/message_manage_notification_preferences.feature index 3e0bc775fae..f27e116acf1 100644 --- a/message/tests/behat/message_manage_notification_preferences.feature +++ b/message/tests/behat/message_manage_notification_preferences.feature @@ -61,33 +61,3 @@ Feature: Manage notification preferences - Email And I follow "Preferences" in the user menu And I click on "Message preferences" "link" And the field "Email" matches value "0" - - Scenario: Config jabber - Given the following config values are set as admin: - | jabberhost | jabber.org | - | jabberusername | moodlemessageservice | - | jabberpassword | password | - When I log in as "admin" - And I navigate to "Messaging > Notification settings" in site administration - And I set the field "jabber" to "1" - And I press "Save changes" - And I click on "Settings" "link" in the "Jabber" "table_row" - And I navigate to "Messaging > Notification settings" in site administration - And I press "Save changes" - And I log out - And I log in as "student1" - And I open messaging - And I open messaging settings preferences - Then I should not see "Notification preferences" - And I should not see "Jabber" - And I open the notification popover - And I follow "Notification preferences" - And I click on "Jabber" "link" - And I should see "Jabber ID" - And I set the field "jabber_jabberid" to "student1@jabber.org" - And I click on "Save changes" "button" in the ".modal-dialog" "css_element" - And I am on homepage - And I open messaging - And I open messaging settings preferences - And I should see "Notification preferences" - And I should see "Jabber" diff --git a/message/upgrade.txt b/message/upgrade.txt index 4c35810a664..5223c888963 100644 --- a/message/upgrade.txt +++ b/message/upgrade.txt @@ -6,6 +6,8 @@ information provided here is intended especially for developers. The following functions have been finally deprecated and can not be used anymore: * can_post_message() * get_individual_conversations_between_users() +* The message_jabber notification has been completely removed from core. It has been moved to the plugins database repository, so +it can still be installed as a third-party plugin. === 3.11.2 === diff --git a/version.php b/version.php index af26bdf6b63..28de62df36b 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2021091100.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2021091100.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '4.0dev (Build: 20210911)'; // Human-friendly version name