mirror of
https://github.com/moodle/moodle.git
synced 2025-04-13 12:32:08 +02:00
MDL-66035 message: Restore missing message preferences files
This commit is contained in:
parent
9df4a4de18
commit
d743aaf262
2
message/amd/build/message_preferences.min.js
vendored
Normal file
2
message/amd/build/message_preferences.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
define ("core_message/message_preferences",["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\"]",CONTACTABLE_PRIVACY_CONTAINER:"[data-region=\"privacy-setting-container\"]"},g=function(b){this.root=a(b);this.userId=this.root.find(f.PREFERENCES_CONTAINER).attr("data-user-id");this.registerEventListeners()};g.prototype.preferencesDisabled=function(){return this.root.find(f.PREFERENCES_CONTAINER).hasClass("disabled")};g.prototype.saveContactablePrivacySetting=function(){var d=this.root.find(f.CONTACTABLE_PRIVACY_CONTAINER),e=a("input[type='radio']:checked").val();if(d.hasClass("loading")){return a.Deferred().resolve()}d.addClass("loading");var g={methodname:"core_user_update_user_preferences",args:{userid:this.userId,preferences:[{type:d.attr("data-preference-key"),value:e}]}};return b.call([g])[0].fail(c.exception).always(function(){d.removeClass("loading")})};g.prototype.registerEventListeners=function(){e.define(this.root,[e.events.activate]);this.root.on("change",function(b){if("message_blocknoncontacts"==b.target.name){this.saveContactablePrivacySetting()}else{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))};return g});
|
||||
//# sourceMappingURL=message_preferences.min.js.map
|
1
message/amd/build/message_preferences.min.js.map
Normal file
1
message/amd/build/message_preferences.min.js.map
Normal file
File diff suppressed because one or more lines are too long
125
message/amd/src/message_preferences.js
Normal file
125
message/amd/src/message_preferences.js
Normal file
@ -0,0 +1,125 @@
|
||||
// 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 message preference page.
|
||||
*
|
||||
* @module core_message/message_preferences
|
||||
* @class message_preferences
|
||||
* @package message
|
||||
* @copyright 2016 Ryan Wyllie <ryan@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
define(['jquery', 'core/ajax', 'core/notification',
|
||||
'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"]',
|
||||
CONTACTABLE_PRIVACY_CONTAINER: '[data-region="privacy-setting-container"]',
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor for the MessagePreferences.
|
||||
*
|
||||
* @param {object} element The root element for the message preferences
|
||||
*/
|
||||
var MessagePreferences = function(element) {
|
||||
this.root = $(element);
|
||||
this.userId = this.root.find(SELECTORS.PREFERENCES_CONTAINER).attr('data-user-id');
|
||||
|
||||
this.registerEventListeners();
|
||||
};
|
||||
|
||||
/**
|
||||
* 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');
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the contactable privacy user preference in the DOM and
|
||||
* send a request to update on the server.
|
||||
*
|
||||
* @return {Promise}
|
||||
* @method saveContactablePrivacySetting
|
||||
*/
|
||||
MessagePreferences.prototype.saveContactablePrivacySetting = function() {
|
||||
var container = this.root.find(SELECTORS.CONTACTABLE_PRIVACY_CONTAINER);
|
||||
var value = $("input[type='radio']:checked").val();
|
||||
|
||||
if (container.hasClass('loading')) {
|
||||
return $.Deferred().resolve();
|
||||
}
|
||||
|
||||
container.addClass('loading');
|
||||
|
||||
var request = {
|
||||
methodname: 'core_user_update_user_preferences',
|
||||
args: {
|
||||
userid: this.userId,
|
||||
preferences: [
|
||||
{
|
||||
type: container.attr('data-preference-key'),
|
||||
value: value,
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
return Ajax.call([request])[0]
|
||||
.fail(Notification.exception)
|
||||
.always(function() {
|
||||
container.removeClass('loading');
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 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('change', function(e) {
|
||||
// Add listener for privacy setting radio buttons change.
|
||||
if (e.target.name == 'message_blocknoncontacts') {
|
||||
this.saveContactablePrivacySetting();
|
||||
} else {
|
||||
// Add listener for processor preferences.
|
||||
if (!this.preferencesDisabled()) {
|
||||
var preferencesContainer = $(e.target).closest(SELECTORS.PREFERENCES_CONTAINER);
|
||||
var preferenceElement = $(e.target).closest(SELECTORS.PREFERENCE);
|
||||
var messagePreference = new MessageNotificationPreference(preferencesContainer, this.userId);
|
||||
|
||||
preferenceElement.addClass('loading');
|
||||
messagePreference.save().always(function() {
|
||||
preferenceElement.removeClass('loading');
|
||||
});
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
};
|
||||
|
||||
return MessagePreferences;
|
||||
});
|
119
message/templates/message_preferences.mustache
Normal file
119
message/templates/message_preferences.mustache
Normal file
@ -0,0 +1,119 @@
|
||||
{{!
|
||||
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/>.
|
||||
}}
|
||||
{{!
|
||||
@template core_message/message_preferences
|
||||
|
||||
The message preferences page
|
||||
|
||||
Classes required for JS:
|
||||
* None
|
||||
|
||||
Data attibutes required for JS:
|
||||
* All data attributes are required
|
||||
|
||||
Context variables required for this template:
|
||||
* userid The logged in user id
|
||||
* disableall If the user has disabled notifications
|
||||
* components The list of notification components
|
||||
* privacychoices The choice options for the contactable privacy setting
|
||||
|
||||
Example context (json):
|
||||
{
|
||||
"userid": 1,
|
||||
"disableall": 0,
|
||||
"components": [
|
||||
{
|
||||
"notifications": [
|
||||
{
|
||||
"displayname": "Notices about minor problems",
|
||||
"preferencekey": "message_provider_moodle_notices",
|
||||
"onlinehelphtml": "<p>some help HTML</p>",
|
||||
"offlinehelphtml": "<p>some help HTML</p>",
|
||||
"processors": [
|
||||
{
|
||||
"displayname": "Popup notification",
|
||||
"name": "popup",
|
||||
"locked": 0,
|
||||
"userconfigured": 1,
|
||||
"loggedin": {
|
||||
"name": "loggedin",
|
||||
"displayname": "When I'm logged in",
|
||||
"checked": 0,
|
||||
"disableall": 0
|
||||
},
|
||||
"loggedoff": {
|
||||
"name": "loggedoff",
|
||||
"displayname": "When I'm offline",
|
||||
"checked": 0,
|
||||
"disableall": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"privacychoices": [
|
||||
{
|
||||
"value": 1,
|
||||
"text": "My contacts only",
|
||||
"checked": 0
|
||||
},
|
||||
{
|
||||
"value": 2,
|
||||
"text": "Anyone within courses I am a member of",
|
||||
"checked": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
}}
|
||||
<div class="preferences-page-container" data-region="preferences-page-container">
|
||||
<h2>{{#str}} messagepreferences, message {{/str}}</h2>
|
||||
<div class="privacy-setting-container"
|
||||
data-user-id="{{userid}}"
|
||||
data-region="privacy-setting-container"
|
||||
data-preference-key="message_blocknoncontacts">
|
||||
<p>{{#str}} contactableprivacy, message {{/str}}</p>
|
||||
{{#privacychoices}}
|
||||
<input id="action-selection-option-{{value}}"
|
||||
type="radio"
|
||||
name="message_blocknoncontacts"
|
||||
value="{{value}}"
|
||||
{{#checked}}checked="checked"{{/checked}}/>
|
||||
<label for="action-selection-option-{{value}}">{{text}}</label>
|
||||
<br>
|
||||
{{/privacychoices}}
|
||||
</div><br>
|
||||
<div class="preferences-container {{#disableall}}disabled{{/disableall}}"
|
||||
data-user-id="{{userid}}"
|
||||
data-region="preferences-container">
|
||||
<table class="table table-hover preference-table" data-region="preference-table">
|
||||
<tbody>
|
||||
{{#components}}
|
||||
{{> message/message_preferences_component }}
|
||||
{{/components}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{{#js}}
|
||||
require(['jquery', 'core_message/message_preferences'],
|
||||
function($, MessagePreferences) {
|
||||
|
||||
new MessagePreferences($('[data-region="preferences-page-container"]'));
|
||||
});
|
||||
{{/js}}
|
84
message/templates/message_preferences_component.mustache
Normal file
84
message/templates/message_preferences_component.mustache
Normal file
@ -0,0 +1,84 @@
|
||||
{{!
|
||||
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/>.
|
||||
}}
|
||||
{{!
|
||||
@template core_message/message_preferences_component
|
||||
|
||||
The message preferences page
|
||||
|
||||
Classes required for JS:
|
||||
* None
|
||||
|
||||
Data attibutes required for JS:
|
||||
* All data attributes are required
|
||||
|
||||
Context variables required for this template:
|
||||
* notifications The list of notifications
|
||||
|
||||
Example context (json):
|
||||
{
|
||||
"notifications": [
|
||||
{
|
||||
"displayname": "Notices about minor problems",
|
||||
"preferencekey": "message_provider_moodle_notices",
|
||||
"onlinehelphtml": "<p>some help HTML</p>",
|
||||
"offlinehelphtml": "<p>some help HTML</p>",
|
||||
"processors": [
|
||||
{
|
||||
"displayname": "Popup notification",
|
||||
"name": "popup",
|
||||
"locked": 0,
|
||||
"userconfigured": 1,
|
||||
"loggedin": {
|
||||
"name": "loggedin",
|
||||
"displayname": "When I'm logged in",
|
||||
"checked": 0,
|
||||
"disableall": 0
|
||||
},
|
||||
"loggedoff": {
|
||||
"name": "loggedoff",
|
||||
"displayname": "When I'm offline",
|
||||
"checked": 0,
|
||||
"disableall": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}}
|
||||
{{#notifications}}
|
||||
<tr data-preference-key="{{preferencekey}}">
|
||||
<th>{{displayname}}</th>
|
||||
<td class="align-bottom">
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
<div class="span6 col-6">
|
||||
{{#str}} loggedin, message {{/str}}
|
||||
{{#onlinehelphtml}}{{{.}}}{{/onlinehelphtml}}
|
||||
</div>
|
||||
<div class="span6 col-6">
|
||||
{{#str}} loggedoff, message {{/str}}
|
||||
{{#offlinehelphtml}}{{{.}}}{{/offlinehelphtml}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{#processors}}
|
||||
{{> message/message_preferences_notification_processor }}
|
||||
{{/processors}}
|
||||
{{/notifications}}
|
@ -0,0 +1,127 @@
|
||||
{{!
|
||||
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/>.
|
||||
}}
|
||||
{{!
|
||||
@template core_message/message_preferences_notification_processor
|
||||
|
||||
The message preferences page
|
||||
|
||||
Classes required for JS:
|
||||
* None
|
||||
|
||||
Data attibutes required for JS:
|
||||
* All data attributes are required
|
||||
|
||||
Context variables required for this template:
|
||||
* displayname The display name of the processor
|
||||
* name The name of the processor
|
||||
* locked Whether the processor is locked
|
||||
* loggedin The logged in settings
|
||||
* loggedoff The logged off settings
|
||||
|
||||
Example context (json):
|
||||
{
|
||||
"displayname": "Notices about minor problems",
|
||||
"preferencekey": "message_provider_moodle_notices",
|
||||
"processors": [
|
||||
{
|
||||
"displayname": "Popup notification",
|
||||
"name": "popup",
|
||||
"locked": 0,
|
||||
"userconfigured": 1,
|
||||
"loggedin": {
|
||||
"name": "loggedin",
|
||||
"displayname": "When I'm logged in",
|
||||
"checked": 0,
|
||||
"disableall": 0
|
||||
},
|
||||
"loggedoff": {
|
||||
"name": "loggedoff",
|
||||
"displayname": "When I'm offline",
|
||||
"checked": 0,
|
||||
"disableall": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}}
|
||||
<tr class="preference-row" data-region="preference-row" data-preference-key="{{preferencekey}}">
|
||||
<td class="preference-name">{{displayname}}</td>
|
||||
<td {{^userconfigured}}class="disabled"{{/userconfigured}} data-processor-name="{{name}}">
|
||||
{{#locked}}
|
||||
<div class="dimmed_text">{{lockedmessage}}</div>
|
||||
{{/locked}}
|
||||
{{^locked}}
|
||||
<div class="disabled-message">{{#str}} disabled, question {{/str}}</div>
|
||||
<form>
|
||||
<div class="container-fluid">
|
||||
<div class="row-fluid">
|
||||
<div class="span6 col-6">
|
||||
{{#loggedin}}
|
||||
{{< core/hover_tooltip }}
|
||||
{{$anchor}}
|
||||
<label class="preference-state"
|
||||
title="{{displayname}}"
|
||||
data-state="{{name}}">
|
||||
|
||||
<span class="accesshide">{{displayname}}</span>
|
||||
<input type="checkbox"
|
||||
tabindex="-1"
|
||||
class="accesshide"
|
||||
{{#checked}}checked{{/checked}}
|
||||
{{#disableall}}disabled{{/disableall}} />
|
||||
<div class="preference-state-status-container" tabindex="0">
|
||||
<span class="on-text">{{#str}} on, message {{/str}}</span>
|
||||
<span class="off-text">{{#str}} off, message {{/str}}</span>
|
||||
{{> core/loading }}
|
||||
</div>
|
||||
</label>
|
||||
{{/anchor}}
|
||||
{{$tooltip}}{{displayname}}{{/tooltip}}
|
||||
{{/ core/hover_tooltip }}
|
||||
{{/loggedin}}
|
||||
</div>
|
||||
<div class="span6 col-6">
|
||||
{{#loggedoff}}
|
||||
{{< core/hover_tooltip }}
|
||||
{{$anchor}}
|
||||
<label class="preference-state"
|
||||
title="{{displayname}}"
|
||||
data-state="{{name}}">
|
||||
|
||||
<span class="accesshide">{{displayname}}</span>
|
||||
<input type="checkbox"
|
||||
tabindex="-1"
|
||||
class="accesshide"
|
||||
{{#checked}}checked{{/checked}}
|
||||
{{#disableall}}disabled{{/disableall}} />
|
||||
<div class="preference-state-status-container" tabindex="0">
|
||||
<span class="on-text">{{#str}} on, message {{/str}}</span>
|
||||
<span class="off-text">{{#str}} off, message {{/str}}</span>
|
||||
{{> core/loading }}
|
||||
</div>
|
||||
</label>
|
||||
{{/anchor}}
|
||||
{{$tooltip}}{{displayname}}{{/tooltip}}
|
||||
{{/ core/hover_tooltip }}
|
||||
{{/loggedoff}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{/locked}}
|
||||
</td>
|
||||
</tr>
|
30
message/tests/behat/message_preferences.feature
Normal file
30
message/tests/behat/message_preferences.feature
Normal file
@ -0,0 +1,30 @@
|
||||
@core @core_message
|
||||
Feature: To be able to see and save user message preferences as admin
|
||||
As an admin
|
||||
I need to be able to view and edit message preferences for other users
|
||||
|
||||
Background:
|
||||
Given the following "users" exist:
|
||||
| username | firstname | lastname | email |
|
||||
| student1 | Student | 1 | student1@emample.com |
|
||||
And the following "user preferences" exist:
|
||||
| user | preference | value |
|
||||
| student1 | message_provider_moodle_instantmessage_loggedin | none |
|
||||
| student1 | message_provider_moodle_instantmessage_loggedoff | email |
|
||||
|
||||
@javascript
|
||||
Scenario: As an admin I can view and edit message preferences for a user
|
||||
Given I log in as "admin"
|
||||
And I navigate to "Messaging > Notification settings" in site administration
|
||||
And I set the field "email" to "1"
|
||||
And I press "Save changes"
|
||||
And I navigate to "Users > Accounts > Browse list of users" in site administration
|
||||
And I click on "Student 1" "link" in the "Student 1" "table_row"
|
||||
And I click on "Preferences" "link" in the "#region-main-box" "css_element"
|
||||
And I click on "Message preferences" "link" in the "#region-main-box" "css_element"
|
||||
And I click on "//label[@data-state='loggedoff']" "xpath_element"
|
||||
And I log out
|
||||
And I log in as "student1"
|
||||
And I follow "Preferences" in the user menu
|
||||
And I click on "Message preferences" "link"
|
||||
And the field "Email" matches value "0"
|
Loading…
x
Reference in New Issue
Block a user