MDL-65219 message: add message/pendingcontactrequests.php page back
authorRyan Wyllie <ryan@moodle.com>
Thu, 11 Jul 2019 07:27:43 +0000 (15:27 +0800)
committerRyan Wyllie <ryan@moodle.com>
Tue, 23 Jul 2019 03:37:55 +0000 (11:37 +0800)
We previously had this page when contact requests were first introduced
and unfortunately we created a bunch of notifications that reference
this URL directly which now won't work because the page has been removed.

I've added it back but set it to redirect to the message/index.php page
and load the contact requests page there.

message/amd/build/message_drawer.min.js
message/amd/build/message_drawer_view_contacts.min.js
message/amd/src/message_drawer.js
message/amd/src/message_drawer_view_contacts.js
message/classes/helper.php
message/index.php
message/pendingcontactrequests.php [new file with mode: 0644]
message/templates/message_index.mustache

index 4c5809e..1049c16 100644 (file)
Binary files a/message/amd/build/message_drawer.min.js and b/message/amd/build/message_drawer.min.js differ
index 6d0d66e..904728d 100644 (file)
Binary files a/message/amd/build/message_drawer_view_contacts.min.js and b/message/amd/build/message_drawer_view_contacts.min.js differ
index d7a1bad..a40ae89 100644 (file)
@@ -270,22 +270,18 @@ function(
      * @param {int} sendToUser Should we message someone now?
      * @param {int} conversationId The value of the conversation id, null if none
      */
-    var init = function(root, uniqueId, alwaysVisible, sendToUser, conversationId) {
+    var init = function(root, uniqueId, alwaysVisible, route) {
         root = $(root);
         createRoutes(uniqueId, root);
         registerEventListeners(uniqueId, root, alwaysVisible);
+
         if (alwaysVisible) {
             show(uniqueId, root);
-            // Are we sending to a specific user?
-            if (sendToUser) {
-                // Check if a conversation already exists, if not, create one.
-                if (conversationId) {
-                    Router.go(uniqueId, Routes.VIEW_CONVERSATION, conversationId);
-                } else {
-                    Router.go(uniqueId, Routes.VIEW_CONVERSATION, null, 'create', sendToUser);
-                }
-            } else if (conversationId) { // We aren't sending to a specific user, but to a group conversation.
-                Router.go(uniqueId, Routes.VIEW_CONVERSATION, conversationId);
+
+            if (route) {
+                var routeParams = route.params || [];
+                routeParams = [uniqueId, route.path].concat(routeParams);
+                Router.go.apply(null, routeParams);
             }
         }
     };
index f64898a..ab255c7 100644 (file)
@@ -66,6 +66,26 @@ function(
         return body.find(SELECTORS.REQUESTS_SECTION_CONTAINER);
     };
 
+    /**
+     * Get the element that triggers showing the contacts section.
+     *
+     * @param {Object} body Contacts page body element.
+     * @return {Object}
+     */
+    var getShowContactsAction = function(body) {
+        return body.find(SELECTORS.ACTION_SHOW_CONTACTS_SECTION);
+    };
+
+    /**
+     * Get the element that triggers showing the requests section.
+     *
+     * @param {Object} body Contacts page body element.
+     * @return {Object}
+     */
+    var getShowRequestsAction = function(body) {
+        return body.find(SELECTORS.ACTION_SHOW_REQUESTS_SECTION);
+    };
+
     /**
      * Check if the given section is visible.
      *
@@ -105,8 +125,8 @@ function(
     var registerEventListeners = function(body) {
         var contactsSection = getContactsSectionContainer(body);
         var requestsSection = getRequestsSectionContainer(body);
-        var showContactsAction = body.find(SELECTORS.ACTION_SHOW_CONTACTS_SECTION);
-        var showRequestsAction = body.find(SELECTORS.ACTION_SHOW_REQUESTS_SECTION);
+        var showContactsAction = getShowContactsAction(body);
+        var showRequestsAction = getShowRequestsAction(body);
 
         showContactsAction.on('show.bs.tab', function() {
             ContactsSection.show(contactsSection);
@@ -126,9 +146,11 @@ function(
      * @param {string} namespace The route namespace.
      * @param {Object} header Contacts header container element.
      * @param {Object} body Contacts body container element.
+     * @param {Object} footer Contacts footer container element.
+     * @param {String|null} tab Tab to show, either 'requests' or 'contacts', if any.
      * @return {Object} jQuery promise
      */
-    var show = function(namespace, header, body) {
+    var show = function(namespace, header, body, footer, tab) {
         body = $(body);
 
         if (!body.attr('data-contacts-init')) {
@@ -139,6 +161,27 @@ function(
         var contactsSection = getContactsSectionContainer(body);
         var requestsSection = getRequestsSectionContainer(body);
 
+        if (tab) {
+            var showContactsAction = getShowContactsAction(body);
+            var showRequestsAction = getShowRequestsAction(body);
+
+            // Unfortunately we need to hardcode the class changes here rather than trigger
+            // the bootstrap tab functionality because the bootstrap JS doesn't appear to be
+            // loaded by this point which means the tab plugin isn't added and the event listeners
+            // haven't been set up so we can't just trigger a click either.
+            if (tab == 'requests') {
+                showContactsAction.removeClass('active');
+                contactsSection.removeClass('show active');
+                showRequestsAction.addClass('active');
+                requestsSection.addClass('show active');
+            } else {
+                showRequestsAction.removeClass('active');
+                requestsSection.removeClass('show active');
+                showContactsAction.addClass('active');
+                contactsSection.addClass('show active');
+            }
+        }
+
         if (isSectionVisible(contactsSection)) {
             ContactsSection.show(contactsSection);
         } else {
index 5136ce8..f2ad3c6 100644 (file)
@@ -687,9 +687,15 @@ class helper {
      * @param bool $isdrawer Are we are rendering the drawer or is this on a full page?
      * @param int|null $sendtouser The ID of the user we want to send a message to
      * @param int|null $conversationid The ID of the conversation we want to load
+     * @param string|null $view The first view to load in the message widget
      * @return string The HTML.
      */
-    public static function render_messaging_widget(bool $isdrawer, int $sendtouser = null, int $conversationid = null) {
+    public static function render_messaging_widget(
+        bool $isdrawer,
+        int $sendtouser = null,
+        int $conversationid = null,
+        string $view = null
+    ) {
         global $USER, $CFG, $PAGE;
 
         // Early bail out conditions.
@@ -765,18 +771,24 @@ class helper {
                 'messageurl' => $messageurl,
                 'notification' => $notification
             ],
-            'sendtouser' => false,
-            'conversationid' => false,
             'isdrawer' => $isdrawer
         ];
 
-        if ($sendtouser) {
-            $templatecontext['sendtouser'] = $sendtouser;
+        if ($sendtouser || $conversationid) {
+            $route = [
+                'path' => 'view-conversation',
+                'params' => $conversationid ? [$conversationid] : [null, 'create', $sendtouser]
+            ];
+        } else if ($view === 'contactrequests') {
+            $route = [
+                'path' => 'view-contacts',
+                'params' => ['requests']
+            ];
+        } else {
+            $route = null;
         }
 
-        if ($conversationid) {
-            $templatecontext['conversationid'] = $conversationid;
-        }
+        $templatecontext['route'] = json_encode($route);
 
         return $renderer->render_from_template($template, $templatecontext);
     }
index ebc1f27..1fcac5a 100644 (file)
@@ -36,6 +36,7 @@ if (empty($CFG->messaging)) {
 
 // The id of the user we want to view messages from.
 $id = optional_param('id', 0, PARAM_INT);
+$view = optional_param('view', null, PARAM_ALPHANUM);
 // It's possible a user may come from a link where these parameters are specified.
 // We no longer support viewing another user's messaging area (that can be achieved
 // via the 'Log-in as' feature). The 'user2' value takes preference over 'id'.
@@ -90,5 +91,5 @@ if (!get_user_preferences('core_message_migrate_data', false)) {
         \core\output\notification::NOTIFY_WARNING);
     echo $OUTPUT->render($notify);
 }
-echo \core_message\helper::render_messaging_widget(false, $userid, $conversationid);
+echo \core_message\helper::render_messaging_widget(false, $userid, $conversationid, $view);
 echo $OUTPUT->footer();
diff --git a/message/pendingcontactrequests.php b/message/pendingcontactrequests.php
new file mode 100644 (file)
index 0000000..df52d92
--- /dev/null
@@ -0,0 +1,33 @@
+<?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/>.
+
+/**
+ * This is a placeholder file for a legacy implementation.
+ *
+ * @package    core
+ * @copyright  2019 Ryan Wyllie <ryan@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+// Disable moodle specific debug messages since we're just redirecting.
+define('NO_DEBUG_DISPLAY', true);
+require('../config.php');
+
+require_login(null, false);
+
+// We have a bunch of old notifications (both internal and external, e.g. email) that
+// reference this URL which means we can't remove it so let's just redirect.
+redirect("{$CFG->wwwroot}/message/index.php?view=contactrequests");
index 52fc66c..65c44fc 100644 (file)
@@ -79,6 +79,6 @@
 {{#js}}
     require(['jquery', 'core_message/message_drawer'], function($, MessageDrawer) {
     var root = $('#message-index-{{uniqid}}');
-    MessageDrawer.init(root, '{{uniqid}}', true, {{sendtouser}}, {{conversationid}});
+    MessageDrawer.init(root, '{{uniqid}}', true, {{{route}}});
     });
 {{/js}}
\ No newline at end of file