mirror of
https://github.com/moodle/moodle.git
synced 2025-04-16 14:02:32 +02:00
MDL-63303 message: add enter to send user preference
This commit is contained in:
parent
f074d6f086
commit
8c8939c1ae
@ -233,6 +233,7 @@ $string['unknownuser'] = 'Unknown user';
|
||||
$string['unreadnotification'] = 'Unread notification: {$a}';
|
||||
$string['unreadnewgroupconversationmessage'] = 'New message from {$a->name} in {$a->conversationname}';
|
||||
$string['unreadnewmessage'] = 'New message from {$a}';
|
||||
$string['useentertosend'] = 'Use enter to send';
|
||||
$string['usercantbemessaged'] = 'You can\'t message {$a} due to their message preferences. Try adding them as a contact.';
|
||||
$string['userisblockingyou'] = 'This user has blocked you from sending messages to them';
|
||||
$string['userisblockingyounoncontact'] = '{$a} only accepts messages from their contacts.';
|
||||
|
@ -1 +1 @@
|
||||
define([],function(){return{CONTACT_BLOCKED:"message-drawer-contact-blocked",CONTACT_UNBLOCKED:"message-drawer-contact-unblocked",CONTACT_ADDED:"message-drawer-contact-added",CONTACT_REMOVED:"message-drawer-contact-removed",CONTACT_REQUEST_ACCEPTED:"message-drawer-contact-request-accepted",CONTACT_REQUEST_DECLINED:"message-drawer-contact-request-declined",CONVERSATION_CREATED:"message-drawer-conversation-created",CONVERSATION_NEW_LAST_MESSAGE:"message-drawer-conversation-new-last-message",CONVERSATION_DELETED:"message-drawer-conversation-deleted",CONVERSATION_READ:"message-drawer-conversation-read",CONVERSATION_SET_FAVOURITE:"message-drawer-conversation-set-favourite",CONVERSATION_UNSET_FAVOURITE:"message-drawer-conversation-unset-favourite",ROUTE_CHANGED:"message-drawer-route-change",SHOW:"message-drawer-show",HIDE:"message-drawer-hide",TOGGLE_VISIBILITY:"message-drawer-toggle",SHOW_CONVERSATION:"message-drawer-show-conversation",SHOW_SETTINGS:"message-drawer-show-settings"}});
|
||||
define([],function(){return{CONTACT_BLOCKED:"message-drawer-contact-blocked",CONTACT_UNBLOCKED:"message-drawer-contact-unblocked",CONTACT_ADDED:"message-drawer-contact-added",CONTACT_REMOVED:"message-drawer-contact-removed",CONTACT_REQUEST_ACCEPTED:"message-drawer-contact-request-accepted",CONTACT_REQUEST_DECLINED:"message-drawer-contact-request-declined",CONVERSATION_CREATED:"message-drawer-conversation-created",CONVERSATION_NEW_LAST_MESSAGE:"message-drawer-conversation-new-last-message",CONVERSATION_DELETED:"message-drawer-conversation-deleted",CONVERSATION_READ:"message-drawer-conversation-read",CONVERSATION_SET_FAVOURITE:"message-drawer-conversation-set-favourite",CONVERSATION_UNSET_FAVOURITE:"message-drawer-conversation-unset-favourite",PREFERENCES_UPDATED:"message-drawer-preferences-updated",ROUTE_CHANGED:"message-drawer-route-change",SHOW:"message-drawer-show",HIDE:"message-drawer-hide",TOGGLE_VISIBILITY:"message-drawer-toggle",SHOW_CONVERSATION:"message-drawer-show-conversation",SHOW_SETTINGS:"message-drawer-show-settings"}});
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
define(["jquery","core/notification","core/str","core_message/message_repository","core/custom_interaction_events"],function(a,b,c,d,e){var f={SETTINGS:'[data-region="settings"]',PREFERENCE_CONTROL:'[data-region="preference-control"]',PRIVACY_PREFERENCE:'[data-preference="blocknoncontacts"] input[type="radio"]',EMAIL_ENABLED_PREFERENCE:'[data-preference="emailnotifications"] input[type="checkbox"]'},g={message_provider_moodle_instantmessage_loggedoff:{type:"emailnotifications",enabled:"email",disabled:"none"},message_provider_moodle_instantmessage_loggedin:{type:"emailnotifications",enabled:"email",disabled:"none"}},h=function(c,h){var i=c.find(f.SETTINGS);e.define(i,[e.events.activate]),i.on(e.events.activate,f.EMAIL_ENABLED_PREFERENCE,function(c){var e=a(c.target),i=e.closest(f.PREFERENCE_CONTROL),j=i.attr("data-preference"),k=e.prop("checked"),l=Object.keys(g).reduce(function(a,b){var c=g[b];return c.type===j&&a.push({type:b,value:k?c.enabled:c.disabled}),a},[]);d.savePreferences(h,l)["catch"](b.exception)}),i.on(e.events.activate,f.PRIVACY_PREFERENCE,function(c){var e=a(c.target).val(),f=[{type:"message_blocknoncontacts",value:e}];d.savePreferences(h,f)["catch"](b.exception)})},i=function(b,c,d){return c.attr("data-init")||(h(c,d),c.attr("data-init",!0)),a.Deferred().resolve().promise()},j=function(){return c.get_string("messagedrawerviewsettings","core_message")};return{show:i,description:j}});
|
||||
define(["jquery","core/notification","core/str","core/pubsub","core_message/message_repository","core/custom_interaction_events","core_message/message_drawer_events"],function(a,b,c,d,e,f,g){var h={SETTINGS:'[data-region="settings"]',PREFERENCE_CONTROL:'[data-region="preference-control"]',PRIVACY_PREFERENCE:'[data-preference="blocknoncontacts"] input[type="radio"]',EMAIL_ENABLED_PREFERENCE:'[data-preference="emailnotifications"] input[type="checkbox"]',ENTER_TO_SEND_PREFERENCE:'[data-preference="entertosend"] input[type="checkbox"]'},i={message_provider_moodle_instantmessage_loggedoff:{type:"emailnotifications",enabled:"email",disabled:"none"},message_provider_moodle_instantmessage_loggedin:{type:"emailnotifications",enabled:"email",disabled:"none"}},j=function(c,j){var k=c.find(h.SETTINGS);f.define(k,[f.events.activate]),k.on(f.events.activate,h.EMAIL_ENABLED_PREFERENCE,function(c){var f=a(c.target),k=f.closest(h.PREFERENCE_CONTROL),l=k.attr("data-preference"),m=f.prop("checked"),n=Object.keys(i).reduce(function(a,b){var c=i[b];return c.type===l&&a.push({type:b,value:m?c.enabled:c.disabled}),a},[]);e.savePreferences(j,n).then(function(){d.publish(g.PREFERENCES_UPDATED,n)})["catch"](b.exception)}),k.on(f.events.activate,h.PRIVACY_PREFERENCE,function(c){var f=a(c.target).val(),h=[{type:"message_blocknoncontacts",value:f}];e.savePreferences(j,h).then(function(){d.publish(g.PREFERENCES_UPDATED,h)})["catch"](b.exception)}),k.on(f.events.activate,h.ENTER_TO_SEND_PREFERENCE,function(c){var f=a(c.target).prop("checked"),h=[{type:"message_entertosend",value:f}];e.savePreferences(j,h).then(function(){d.publish(g.PREFERENCES_UPDATED,h)})["catch"](b.exception)})},k=function(b,c,d){return c.attr("data-init")||(j(c,d),c.attr("data-init",!0)),a.Deferred().resolve().promise()},l=function(){return c.get_string("messagedrawerviewsettings","core_message")};return{show:k,description:l}});
|
@ -35,6 +35,7 @@ define([], function() {
|
||||
CONVERSATION_READ: 'message-drawer-conversation-read',
|
||||
CONVERSATION_SET_FAVOURITE: 'message-drawer-conversation-set-favourite',
|
||||
CONVERSATION_UNSET_FAVOURITE: 'message-drawer-conversation-unset-favourite',
|
||||
PREFERENCES_UPDATED: 'message-drawer-preferences-updated',
|
||||
ROUTE_CHANGED: 'message-drawer-route-change',
|
||||
SHOW: 'message-drawer-show',
|
||||
HIDE: 'message-drawer-hide',
|
||||
|
@ -1225,7 +1225,8 @@ function(
|
||||
CustomEvents.events.activate
|
||||
]);
|
||||
CustomEvents.define(footer, [
|
||||
CustomEvents.events.activate
|
||||
CustomEvents.events.activate,
|
||||
CustomEvents.events.enter
|
||||
]);
|
||||
CustomEvents.define(messagesContainer, [
|
||||
CustomEvents.events.scrollTop,
|
||||
@ -1273,6 +1274,13 @@ function(
|
||||
footer.on(CustomEvents.events.activate, selector, handlerFunction);
|
||||
});
|
||||
|
||||
footer.on(CustomEvents.events.enter, SELECTORS.MESSAGE_TEXT_AREA, function(e, data) {
|
||||
var enterToSend = footer.attr('data-enter-to-send');
|
||||
if (enterToSend == true) {
|
||||
handleSendMessage(e, data);
|
||||
}
|
||||
});
|
||||
|
||||
PubSub.subscribe(MessageDrawerEvents.ROUTE_CHANGED, function(newRouteData) {
|
||||
if (newMessagesPollTimer) {
|
||||
if (newRouteData.route == MessageDrawerRoutes.VIEW_CONVERSATION) {
|
||||
@ -1282,6 +1290,17 @@ function(
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
PubSub.subscribe(MessageDrawerEvents.PREFERENCES_UPDATED, function(preferences) {
|
||||
var filteredPreferences = preferences.filter(function(preference) {
|
||||
return preference.type == 'message_entertosend';
|
||||
});
|
||||
var enterToSendPreference = filteredPreferences.length ? filteredPreferences[0] : null;
|
||||
|
||||
if (enterToSendPreference) {
|
||||
footer.attr('data-enter-to-send', enterToSendPreference.value);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -25,22 +25,27 @@ define(
|
||||
'jquery',
|
||||
'core/notification',
|
||||
'core/str',
|
||||
'core/pubsub',
|
||||
'core_message/message_repository',
|
||||
'core/custom_interaction_events',
|
||||
'core_message/message_drawer_events'
|
||||
],
|
||||
function(
|
||||
$,
|
||||
Notification,
|
||||
Str,
|
||||
PubSub,
|
||||
Repository,
|
||||
CustomEvents
|
||||
CustomEvents,
|
||||
MessageDrawerEvents
|
||||
) {
|
||||
|
||||
var SELECTORS = {
|
||||
SETTINGS: '[data-region="settings"]',
|
||||
PREFERENCE_CONTROL: '[data-region="preference-control"]',
|
||||
PRIVACY_PREFERENCE: '[data-preference="blocknoncontacts"] input[type="radio"]',
|
||||
EMAIL_ENABLED_PREFERENCE: '[data-preference="emailnotifications"] input[type="checkbox"]'
|
||||
EMAIL_ENABLED_PREFERENCE: '[data-preference="emailnotifications"] input[type="checkbox"]',
|
||||
ENTER_TO_SEND_PREFERENCE: '[data-preference="entertosend"] input[type="checkbox"]',
|
||||
};
|
||||
|
||||
var PREFERENCES_EMAIL = {
|
||||
@ -89,6 +94,10 @@ function(
|
||||
}, []);
|
||||
|
||||
Repository.savePreferences(loggedInUserId, preferences)
|
||||
.then(function() {
|
||||
PubSub.publish(MessageDrawerEvents.PREFERENCES_UPDATED, preferences);
|
||||
return;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
}
|
||||
);
|
||||
@ -103,6 +112,28 @@ function(
|
||||
];
|
||||
|
||||
Repository.savePreferences(loggedInUserId, preferences)
|
||||
.then(function() {
|
||||
PubSub.publish(MessageDrawerEvents.PREFERENCES_UPDATED, preferences);
|
||||
return;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
}
|
||||
);
|
||||
|
||||
settingsContainer.on(CustomEvents.events.activate, SELECTORS.ENTER_TO_SEND_PREFERENCE, function(e) {
|
||||
var newValue = $(e.target).prop('checked');
|
||||
var preferences = [
|
||||
{
|
||||
type: 'message_entertosend',
|
||||
value: newValue
|
||||
}
|
||||
];
|
||||
|
||||
Repository.savePreferences(loggedInUserId, preferences)
|
||||
.then(function() {
|
||||
PubSub.publish(MessageDrawerEvents.PREFERENCES_UPDATED, preferences);
|
||||
return;
|
||||
})
|
||||
.catch(Notification.exception);
|
||||
}
|
||||
);
|
||||
|
@ -158,7 +158,11 @@ class provider implements
|
||||
public static function export_user_preferences(int $userid) {
|
||||
$preferences = get_user_preferences(null, null, $userid);
|
||||
foreach ($preferences as $name => $value) {
|
||||
if ((substr($name, 0, 16) == 'message_provider') || ($name == 'message_blocknoncontacts')) {
|
||||
if (
|
||||
(substr($name, 0, 16) == 'message_provider') ||
|
||||
($name == 'message_blocknoncontacts') ||
|
||||
($name == 'message_entertosend')
|
||||
) {
|
||||
writer::export_user_preference(
|
||||
'core_message',
|
||||
$name,
|
||||
|
@ -736,6 +736,11 @@ function core_message_user_preferences() {
|
||||
return $value;
|
||||
}
|
||||
);
|
||||
$preferences['message_entertosend'] = array(
|
||||
'type' => PARAM_BOOL,
|
||||
'null' => NULL_NOT_ALLOWED,
|
||||
'default' => false
|
||||
);
|
||||
$preferences['/^message_provider_([\w\d_]*)_logged(in|off)$/'] = array('isregex' => true, 'type' => PARAM_NOTAGS,
|
||||
'null' => NULL_NOT_ALLOWED, 'default' => 'none',
|
||||
'permissioncallback' => function ($user, $preferencename) {
|
||||
@ -859,6 +864,9 @@ function core_message_before_standard_top_of_body_html() {
|
||||
$emailloggedoff = get_user_preferences('message_provider_moodle_instantmessage_loggedoff', 'none', $USER->id);
|
||||
$emailenabled = $emailloggedin == 'email' && $emailloggedoff == 'email';
|
||||
|
||||
// Enter to send.
|
||||
$entertosend = get_user_preferences('message_entertosend', false, $USER->id);
|
||||
|
||||
return $renderer->render_from_template('core_message/message_drawer', [
|
||||
'contactrequestcount' => $requestcount,
|
||||
'loggedinuser' => [
|
||||
@ -898,7 +906,8 @@ function core_message_before_standard_top_of_body_html() {
|
||||
],
|
||||
'settings' => [
|
||||
'privacy' => $choices,
|
||||
'emailenabled' => $emailenabled
|
||||
'emailenabled' => $emailenabled,
|
||||
'entertosend' => $entertosend
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
@ -39,6 +39,7 @@
|
||||
class="hidden border-top bg-white position-relative"
|
||||
aria-hidden="true"
|
||||
data-region="view-conversation"
|
||||
data-enter-to-send="{{settings.entertosend}}"
|
||||
>
|
||||
<div class="hidden p-2" data-region="content-messages-footer-container">
|
||||
{{> core_message/message_drawer_view_conversation_footer_content }}
|
||||
|
@ -60,7 +60,7 @@
|
||||
</div>
|
||||
{{/privacy}}
|
||||
</div>
|
||||
<h3 class="mb-2 mt-5 h6 font-weight-bold">{{#str}}categoryemail, admin{{/str}}</h3>
|
||||
<h3 class="mb-2 mt-4 h6 font-weight-bold">{{#str}}categoryemail, admin{{/str}}</h3>
|
||||
<div
|
||||
data-region="preference-control"
|
||||
data-preference="emailnotifications"
|
||||
@ -75,6 +75,21 @@
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
<h3 class="mb-2 mt-4 h6 font-weight-bold">{{#str}} general, core {{/str}}</h3>
|
||||
<div
|
||||
data-region="preference-control"
|
||||
data-preference="entertosend"
|
||||
>
|
||||
<span class="switch">
|
||||
<input type="checkbox"
|
||||
id="enter-to-send-{{uniqid}}"
|
||||
{{#entertosend}}checked{{/entertosend}}
|
||||
>
|
||||
<label for="enter-to-send-{{uniqid}}">
|
||||
{{#str}} useentertosend, core_message {{/str}}
|
||||
</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/settings}}
|
||||
</div>
|
@ -161,6 +161,7 @@ class core_message_privacy_provider_testcase extends \core_privacy\tests\provide
|
||||
set_user_preference('message_provider_moodle_instantmessage_loggedin', 'airnotifier', $USER->id);
|
||||
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'popup', $USER->id);
|
||||
set_user_preference('message_blocknoncontacts', \core_message\api::MESSAGE_PRIVACY_ONLYCONTACTS, $USER->id);
|
||||
set_user_preference('message_entertosend', true, $USER->id);
|
||||
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'inbound', $user->id);
|
||||
|
||||
// Set an unrelated preference.
|
||||
@ -175,10 +176,11 @@ class core_message_privacy_provider_testcase extends \core_privacy\tests\provide
|
||||
$prefs = (array) $writer->get_user_preferences('core_message');
|
||||
|
||||
// Check only 3 preferences exist.
|
||||
$this->assertCount(3, $prefs);
|
||||
$this->assertCount(4, $prefs);
|
||||
$this->assertArrayHasKey('message_provider_moodle_instantmessage_loggedin', $prefs);
|
||||
$this->assertArrayHasKey('message_provider_moodle_instantmessage_loggedoff', $prefs);
|
||||
$this->assertArrayHasKey('message_blocknoncontacts', $prefs);
|
||||
$this->assertArrayHasKey('message_entertosend', $prefs);
|
||||
|
||||
foreach ($prefs as $key => $pref) {
|
||||
if ($key == 'message_provider_moodle_instantmessage_loggedin') {
|
||||
|
Loading…
x
Reference in New Issue
Block a user