From 745783fa1305a9a7042cbf21445c03f624342c74 Mon Sep 17 00:00:00 2001 From: Ryan Wyllie Date: Tue, 16 Jan 2018 03:49:55 +0000 Subject: [PATCH 1/2] MDL-60918 message: use current user in message preference update --- message/amd/build/message_preferences.min.js | 2 +- message/amd/src/message_preferences.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/message/amd/build/message_preferences.min.js b/message/amd/build/message_preferences.min.js index cee25aa5c57..436b3bbb185 100644 --- a/message/amd/build/message_preferences.min.js +++ b/message/amd/build/message_preferences.min.js @@ -1 +1 @@ -define(["jquery","core/ajax","core/notification","core_message/message_notification_preference","core/custom_interaction_events"],function(a,b,c,d,e){var f={PREFERENCE:"[data-state]",PREFERENCES_CONTAINER:'[data-region="preferences-container"]',BLOCK_NON_CONTACTS:'[data-region="block-non-contacts-container"] [data-block-non-contacts]',BLOCK_NON_CONTACTS_CONTAINER:'[data-region="block-non-contacts-container"]'},g=function(b){this.root=a(b),this.registerEventListeners()};return g.prototype.preferencesDisabled=function(){return this.root.find(f.PREFERENCES_CONTAINER).hasClass("disabled")},g.prototype.saveBlockNonContactsStatus=function(){var d=this.root.find(f.BLOCK_NON_CONTACTS),e=this.root.find(f.BLOCK_NON_CONTACTS_CONTAINER),g=d.prop("checked");if(e.hasClass("loading"))return a.Deferred().resolve();e.addClass("loading");var h={methodname:"core_user_update_user_preferences",args:{preferences:[{type:d.attr("data-preference-key"),value:g?1:0}]}};return b.call([h])[0].fail(c.exception).always(function(){e.removeClass("loading")})},g.prototype.registerEventListeners=function(){e.define(this.root,[e.events.activate]),this.root.on(e.events.activate,f.BLOCK_NON_CONTACTS,function(){this.saveBlockNonContactsStatus()}.bind(this)),this.root.on("change",function(b){if(!this.preferencesDisabled()){var c=a(b.target).closest(f.PREFERENCES_CONTAINER),e=a(b.target).closest(f.PREFERENCE),g=new d(c);e.addClass("loading"),g.save().always(function(){e.removeClass("loading")})}}.bind(this))},g}); \ No newline at end of file +define(["jquery","core/ajax","core/notification","core_message/message_notification_preference","core/custom_interaction_events"],function(a,b,c,d,e){var f={PREFERENCE:"[data-state]",PREFERENCES_CONTAINER:'[data-region="preferences-container"]',BLOCK_NON_CONTACTS:'[data-region="block-non-contacts-container"] [data-block-non-contacts]',BLOCK_NON_CONTACTS_CONTAINER:'[data-region="block-non-contacts-container"]'},g=function(b){this.root=a(b),this.userId=this.root.find(f.PREFERENCES_CONTAINER).attr("data-user-id"),this.registerEventListeners()};return g.prototype.preferencesDisabled=function(){return this.root.find(f.PREFERENCES_CONTAINER).hasClass("disabled")},g.prototype.saveBlockNonContactsStatus=function(){var d=this.root.find(f.BLOCK_NON_CONTACTS),e=this.root.find(f.BLOCK_NON_CONTACTS_CONTAINER),g=d.prop("checked");if(e.hasClass("loading"))return a.Deferred().resolve();e.addClass("loading");var h={methodname:"core_user_update_user_preferences",args:{userid:this.userId,preferences:[{type:d.attr("data-preference-key"),value:g?1:0}]}};return b.call([h])[0].fail(c.exception).always(function(){e.removeClass("loading")})},g.prototype.registerEventListeners=function(){e.define(this.root,[e.events.activate]),this.root.on(e.events.activate,f.BLOCK_NON_CONTACTS,function(){this.saveBlockNonContactsStatus()}.bind(this)),this.root.on("change",function(b){if(!this.preferencesDisabled()){var c=a(b.target).closest(f.PREFERENCES_CONTAINER),e=a(b.target).closest(f.PREFERENCE),g=new d(c,this.userId);e.addClass("loading"),g.save().always(function(){e.removeClass("loading")})}}.bind(this))},g}); \ No newline at end of file diff --git a/message/amd/src/message_preferences.js b/message/amd/src/message_preferences.js index e1678905e8d..c8a43722d4e 100644 --- a/message/amd/src/message_preferences.js +++ b/message/amd/src/message_preferences.js @@ -40,6 +40,7 @@ define(['jquery', 'core/ajax', 'core/notification', */ var MessagePreferences = function(element) { this.root = $(element); + this.userId = this.root.find(SELECTORS.PREFERENCES_CONTAINER).attr('data-user-id'); this.registerEventListeners(); }; @@ -75,6 +76,7 @@ define(['jquery', 'core/ajax', 'core/notification', var request = { methodname: 'core_user_update_user_preferences', args: { + userid: this.userId, preferences: [ { type: checkbox.attr('data-preference-key'), @@ -109,7 +111,7 @@ define(['jquery', 'core/ajax', 'core/notification', if (!this.preferencesDisabled()) { var preferencesContainer = $(e.target).closest(SELECTORS.PREFERENCES_CONTAINER); var preferenceElement = $(e.target).closest(SELECTORS.PREFERENCE); - var messagePreference = new MessageNotificationPreference(preferencesContainer); + var messagePreference = new MessageNotificationPreference(preferencesContainer, this.userId); preferenceElement.addClass('loading'); messagePreference.save().always(function() { From e36a2f2aa7bc9f3f47daa45931493bedafdeebee Mon Sep 17 00:00:00 2001 From: Adam Olley Date: Tue, 28 Nov 2017 16:04:23 +1030 Subject: [PATCH 2/2] MDL-60918 core_message: update preferences of user behat test --- .../update_messaging_preferences.feature | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 message/tests/behat/update_messaging_preferences.feature diff --git a/message/tests/behat/update_messaging_preferences.feature b/message/tests/behat/update_messaging_preferences.feature new file mode 100644 index 00000000000..5a23c1e15b6 --- /dev/null +++ b/message/tests/behat/update_messaging_preferences.feature @@ -0,0 +1,33 @@ +@core @message @javascript +Feature: Messaging preferences + In order to be notified of messages + As a user + I need to be able to alter my message preferences + + Background: + Given I log in as "admin" + And I navigate to "Manage message outputs" node in "Site administration > Plugins > Message outputs" + And I click on "//table[contains(@class, 'admintable')]/tbody/tr/td[contains(text(), 'Email')]/following-sibling::td[1]/a" "xpath_element" + + Scenario: Alter my message preferences + Given I follow "Preferences" in the user menu + And I click on "Message preferences" "link" in the "region-main" "region" + And I should see "On" in the "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + And I should not see "Off" in the "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + And I click on "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + And I reload the page + Then I should see "Off" in the "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + + Scenario: Alter another users preferences + Given the following "users" exist: + | username | firstname | lastname | email | + | user1 | User | 1 | user1@example.com | + And I navigate to "Browse list of users" node in "Site administration > Users > Accounts" + And I click on "User 1" "link" + And I click on "Preferences" "link" in the ".profile_tree" "css_element" + And I click on "Message preferences" "link" in the "region-main" "region" + And I should see "On" in the "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + And I should not see "Off" in the "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + And I click on "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element" + And I reload the page + Then I should see "Off" in the "[data-preference-key=message_provider_moodle_instantmessage] [data-state=loggedoff] .preference-state-status-container" "css_element"