forked from moodle/moodle
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-55595 message: fix message preferences for multiple processors
- Loading branch information
1 parent
d7d7ca2
commit b6723f5
Showing
4 changed files
with
130 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// 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/>. | ||
|
||
/** | ||
* Controls the preference for an individual notification type on the | ||
* message preference page. | ||
* | ||
* @module core_message/message_notification_preference | ||
* @class message_notification_preference | ||
* @package message | ||
* @copyright 2016 Ryan Wyllie <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
* @since 3.2 | ||
*/ | ||
define(['jquery', 'core/ajax', 'core/notification', 'core_message/notification_preference'], | ||
function($, ajax, notification, NotificationPreference) { | ||
|
||
var SELECTORS = { | ||
PREFERENCE_KEY: '[data-preference-key]', | ||
}; | ||
|
||
/** | ||
* Constructor for the Preference. | ||
* | ||
* @param element jQuery object root element of the preference | ||
* @param int the current user id | ||
* @return object Preference | ||
*/ | ||
var MessageNotificationPreference = function(element, userId) { | ||
NotificationPreference.call(this, element, userId); | ||
}; | ||
|
||
/** | ||
* Clone the parent prototype. | ||
*/ | ||
MessageNotificationPreference.prototype = Object.create(NotificationPreference.prototype); | ||
|
||
/** | ||
* Set constructor. | ||
*/ | ||
MessageNotificationPreference.prototype.constructor = NotificationPreference; | ||
|
||
/** | ||
* Get the unique prefix key that identifies this user preference. | ||
* | ||
* @method getPreferenceKey | ||
* @return string | ||
*/ | ||
MessageNotificationPreference.prototype.getPreferenceKey = function() { | ||
return this.root.find(SELECTORS.PREFERENCE_KEY).attr('data-preference-key'); | ||
}; | ||
|
||
return MessageNotificationPreference; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,18 +16,19 @@ | |
/** | ||
* Controls the message preference page. | ||
* | ||
* @module core_message/notification_preference | ||
* @class notification_preference | ||
* @module core_message/message_preferences | ||
* @class message_preferences | ||
* @package message | ||
* @copyright 2016 Ryan Wyllie <[email protected]> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
* @since 3.2 | ||
*/ | ||
define(['jquery', 'core/ajax', 'core/notification', | ||
'core_message/preferences_notifications_list_controller', 'core/custom_interaction_events'], | ||
function($, Ajax, Notification, ListController, CustomEvents) { | ||
'core_message/message_notification_preference', 'core/custom_interaction_events'], | ||
function($, Ajax, Notification, MessageNotificationPreference, CustomEvents) { | ||
|
||
var SELECTORS = { | ||
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"]', | ||
|
@@ -36,19 +37,23 @@ define(['jquery', 'core/ajax', 'core/notification', | |
/** | ||
* Constructor for the MessagePreferences. | ||
* | ||
* @param {jQuery object} element The root element for the message preferences | ||
* @return object MessagePreferences | ||
*/ | ||
var MessagePreferences = function() { | ||
new ListController($(SELECTORS.PREFERENCES_CONTAINER)); | ||
var blockContactsElement = $(SELECTORS.BLOCK_NON_CONTACTS); | ||
var MessagePreferences = function(element) { | ||
this.root = $(element); | ||
|
||
CustomEvents.define(blockContactsElement, [ | ||
CustomEvents.events.activate | ||
]); | ||
this.registerEventListeners(); | ||
}; | ||
|
||
blockContactsElement.on(CustomEvents.events.activate, function(e) { | ||
this.saveBlockNonContactsStatus(); | ||
}.bind(this)); | ||
/** | ||
* Check if the preferences have been disabled on this page. | ||
* | ||
* @method preferencesDisabled | ||
* @return bool | ||
*/ | ||
MessagePreferences.prototype.preferencesDisabled = function() { | ||
return this.root.find(SELECTORS.PREFERENCES_CONTAINER).hasClass('disabled'); | ||
}; | ||
|
||
/** | ||
|
@@ -58,8 +63,8 @@ define(['jquery', 'core/ajax', 'core/notification', | |
* @method saveBlockNonContactsStatus | ||
*/ | ||
MessagePreferences.prototype.saveBlockNonContactsStatus = function() { | ||
var checkbox = $(SELECTORS.BLOCK_NON_CONTACTS); | ||
var container = $(SELECTORS.BLOCK_NON_CONTACTS_CONTAINER); | ||
var checkbox = this.root.find(SELECTORS.BLOCK_NON_CONTACTS); | ||
var container = this.root.find(SELECTORS.BLOCK_NON_CONTACTS_CONTAINER); | ||
var ischecked = checkbox.prop('checked'); | ||
|
||
if (container.hasClass('loading')) { | ||
|
@@ -89,5 +94,33 @@ define(['jquery', 'core/ajax', 'core/notification', | |
}); | ||
}; | ||
|
||
/** | ||
* Create all of the event listeners for the message preferences page. | ||
* | ||
* @method registerEventListeners | ||
*/ | ||
MessagePreferences.prototype.registerEventListeners = function() { | ||
CustomEvents.define(this.root, [ | ||
CustomEvents.events.activate | ||
]); | ||
|
||
this.root.on(CustomEvents.events.activate, SELECTORS.BLOCK_NON_CONTACTS, function(e) { | ||
this.saveBlockNonContactsStatus(); | ||
}.bind(this)); | ||
|
||
this.root.on('change', function(e) { | ||
if (!this.preferencesDisabled()) { | ||
var preferencesContainer = $(e.target).closest(SELECTORS.PREFERENCES_CONTAINER); | ||
var preferenceElement = $(e.target).closest(SELECTORS.PREFERENCE); | ||
var messagePreference = new MessageNotificationPreference(preferencesContainer); | ||
|
||
preferenceElement.addClass('loading'); | ||
messagePreference.save().always(function() { | ||
preferenceElement.removeClass('loading'); | ||
}); | ||
} | ||
}.bind(this)); | ||
}; | ||
|
||
return MessagePreferences; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters