Merge branch 'MDL-66415-501' of https://github.com/raortegar/moodle into MOODLE_501_STABLE
This commit is contained in:
@@ -242,6 +242,7 @@ $string['sendingviaenabled'] = 'Sending "{$a->provider}" via "{$a->processor}" e
|
||||
$string['sendingvialocked'] = 'Sending "{$a->provider}" via "{$a->processor}" locked status';
|
||||
$string['sendmessage'] = 'Send message';
|
||||
$string['sendbulkmessage'] = 'Send message to {$a} people';
|
||||
$string['sendbulkmessagesentwitherrors'] = 'Message sent to {$a->sent} of {$a->total} people';
|
||||
$string['sendbulkmessagesingle'] = 'Send message to 1 person';
|
||||
$string['sendbulkmessagesent'] = 'Message sent to {$a} people';
|
||||
$string['sendbulkmessagesentsingle'] = 'Message sent to 1 person';
|
||||
@@ -273,7 +274,8 @@ $string['unreadnewgroupconversationmessage'] = 'New message from {$a->name} in {
|
||||
$string['unreadnewmessage'] = 'New message from {$a}';
|
||||
$string['unsentmessagenotification'] = 'You have an unsent message. It will be lost if you leave this page.';
|
||||
$string['useentertosend'] = 'Use enter to send';
|
||||
$string['usercantbemessaged'] = 'You can\'t message this user due to their message preferences. Try adding them as a contact.';
|
||||
$string['usercantbemessaged'] = 'You can\'t message {$a} due to their message preferences. Try adding them as a contact.';
|
||||
$string['usercantbemessagedbulk'] = 'You can\'t message the following users due to their message preferences. Try adding them as a contact.<br>{$a}';
|
||||
$string['userwouldliketocontactyou'] = '{$a} would like to contact you';
|
||||
$string['viewfullnotification'] = 'View full notification';
|
||||
$string['viewmessageswith'] = 'View messages with {$a}';
|
||||
|
||||
@@ -195,7 +195,7 @@ class core_message_external extends external_api {
|
||||
// We are going to do some checking.
|
||||
// Code should match /messages/index.php checks.
|
||||
$success = true;
|
||||
|
||||
$cantsendtouser = '';
|
||||
// Check the user exists.
|
||||
if (empty($tousers[$message['touserid']])) {
|
||||
$success = false;
|
||||
@@ -212,7 +212,14 @@ class core_message_external extends external_api {
|
||||
// Check if the recipient can be messaged by the sender.
|
||||
if ($success && !\core_message\api::can_send_message($tousers[$message['touserid']]->id, $USER->id)) {
|
||||
$success = false;
|
||||
$errormessage = get_string('usercantbemessaged', 'message');
|
||||
$fullname = fullname(\core_user::get_user($message['touserid']));
|
||||
$errormessage = get_string(
|
||||
'usercantbemessaged',
|
||||
'message',
|
||||
$fullname
|
||||
);
|
||||
// Keep track of the user the message could not be sent to.
|
||||
$cantsendtouser = $fullname;
|
||||
}
|
||||
|
||||
// Now we can send the message (at least try).
|
||||
@@ -239,6 +246,7 @@ class core_message_external extends external_api {
|
||||
$errormessage = get_string('messageundeliveredbynotificationsettings', 'error');
|
||||
}
|
||||
$resultmsg['errormessage'] = $errormessage;
|
||||
$resultmsg['cantsendtouser'] = $cantsendtouser;
|
||||
}
|
||||
|
||||
$resultmessages[] = $resultmsg;
|
||||
@@ -252,6 +260,9 @@ class core_message_external extends external_api {
|
||||
'',
|
||||
'id, conversationid, smallmessage, fullmessageformat, fullmessagetrust');
|
||||
$resultmessages = array_map(function($resultmessage) use ($messagerecords, $USER) {
|
||||
if (!empty($resultmessage['errormessage'])) {
|
||||
return $resultmessage;
|
||||
}
|
||||
$id = $resultmessage['msgid'];
|
||||
$resultmessage['conversationid'] = isset($messagerecords[$id]) ? $messagerecords[$id]->conversationid : null;
|
||||
$resultmessage['useridfrom'] = $USER->id;
|
||||
@@ -284,6 +295,7 @@ class core_message_external extends external_api {
|
||||
'timecreated' => new external_value(PARAM_INT, 'The timecreated timestamp for the message', VALUE_OPTIONAL),
|
||||
'conversationid' => new external_value(PARAM_INT, 'The conversation id for this message', VALUE_OPTIONAL),
|
||||
'useridfrom' => new external_value(PARAM_INT, 'The user id who sent the message', VALUE_OPTIONAL),
|
||||
'cantsendtouser' => new external_value(PARAM_TEXT, 'The user that could not be sent to', VALUE_OPTIONAL),
|
||||
'candeletemessagesforallusers' => new external_value(PARAM_BOOL,
|
||||
'If the user can delete messages in the conversation for all users', VALUE_DEFAULT, false),
|
||||
)
|
||||
|
||||
@@ -126,7 +126,7 @@ final class externallib_test extends \core_external\tests\externallib_testcase {
|
||||
$sentmessages = core_message_external::send_instant_messages($messages);
|
||||
$sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
|
||||
$this->assertEquals(
|
||||
get_string('usercantbemessaged', 'message'),
|
||||
get_string('usercantbemessaged', 'message', fullname($user2)),
|
||||
array_pop($sentmessages)['errormessage']
|
||||
);
|
||||
|
||||
@@ -222,8 +222,10 @@ final class externallib_test extends \core_external\tests\externallib_testcase {
|
||||
|
||||
$sentmessage = reset($sentmessages);
|
||||
|
||||
$this->assertEquals(get_string('usercantbemessaged', 'message'), $sentmessage['errormessage']);
|
||||
|
||||
$this->assertEquals(
|
||||
get_string('usercantbemessaged', 'message', fullname($user2)),
|
||||
$sentmessage['errormessage']
|
||||
);
|
||||
$this->assertEquals(0, $DB->count_records('messages'));
|
||||
}
|
||||
|
||||
@@ -258,8 +260,10 @@ final class externallib_test extends \core_external\tests\externallib_testcase {
|
||||
|
||||
$sentmessage = reset($sentmessages);
|
||||
|
||||
$this->assertEquals(get_string('usercantbemessaged', 'message'), $sentmessage['errormessage']);
|
||||
|
||||
$this->assertEquals(
|
||||
get_string('usercantbemessaged', 'message', fullname($user2)),
|
||||
$sentmessage['errormessage']
|
||||
);
|
||||
$this->assertEquals(0, $DB->count_records('messages'));
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@ define("core_user/local/participants/bulkactions",["exports","core_user/reposito
|
||||
* @module core_user/local/participants/bulkactions
|
||||
* @copyright 2020 Andrew Nicols <andrew@nicols.co.uk>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showSendMessage=_exports.showAddNote=void 0,Repository=_interopRequireWildcard(Repository),Str=_interopRequireWildcard(Str),_modal_events=_interopRequireDefault(_modal_events),_modal_save_cancel=_interopRequireDefault(_modal_save_cancel),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);_exports.showAddNote=(courseid,users,noteStateNames,stateHelpIcon)=>{if(!users.length)return Promise.resolve();const states=[];for(let key in noteStateNames)switch(key){case"draft":states.push({value:"personal",label:noteStateNames[key]});break;case"public":states.push({value:"course",label:noteStateNames[key],selected:1});break;case"site":states.push({value:key,label:noteStateNames[key]})}const context={stateNames:states,stateHelpIcon:stateHelpIcon.innerHTML};let titlePromise=null;return titlePromise=1===users.length?Str.get_string("addbulknotesingle","core_notes"):Str.get_string("addbulknote","core_notes",users.length),_modal_save_cancel.default.create({body:_templates.default.render("core_user/add_bulk_note",context),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0,show:!0}).then((modal=>(modal.getRoot().on(_modal_events.default.save,(()=>submitAddNote(courseid,users,modal))),modal)))};const submitAddNote=(courseid,users,modal)=>{const text=modal.getRoot().find("form textarea").val(),publishstate=modal.getRoot().find("form select").val(),notes=users.map((userid=>({userid:userid,text:text,courseid:courseid,publishstate:publishstate})));return Repository.createNotesForUsers(notes).then((noteIds=>1===noteIds.length?Str.get_string("addbulknotedonesingle","core_notes"):Str.get_string("addbulknotedone","core_notes",noteIds.length))).then((msg=>(0,_toast.add)(msg))).catch(_notification.default.exception)};_exports.showSendMessage=users=>{if(!users.length)return Promise.resolve();let titlePromise;return titlePromise=1===users.length?Str.get_string("sendbulkmessagesingle","core_message"):Str.get_string("sendbulkmessage","core_message",users.length),_modal_save_cancel.default.create({body:_templates.default.render("core_user/send_bulk_message",{}),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0,show:!0}).then((modal=>(modal.getRoot().on(_modal_events.default.save,(e=>{const text=modal.getRoot().find("form textarea").val();if(""===text.trim())return modal.getRoot().find('[data-role="messagetextrequired"]').removeAttr("hidden"),void e.preventDefault();submitSendMessage(modal,users,text)})),modal)))};const submitSendMessage=(modal,users,text)=>{const messages=users.map((touserid=>({touserid:touserid,text:text})));return Repository.sendMessagesToUsers(messages).then((messageIds=>1==messageIds.length?Str.get_string("sendbulkmessagesentsingle","core_message"):Str.get_string("sendbulkmessagesent","core_message",messageIds.length))).then((msg=>(0,_toast.add)(msg))).catch(_notification.default.exception)}}));
|
||||
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.showSendMessage=_exports.showAddNote=void 0,Repository=_interopRequireWildcard(Repository),Str=_interopRequireWildcard(Str),_modal_events=_interopRequireDefault(_modal_events),_modal_save_cancel=_interopRequireDefault(_modal_save_cancel),_notification=_interopRequireDefault(_notification),_templates=_interopRequireDefault(_templates);_exports.showAddNote=(courseid,users,noteStateNames,stateHelpIcon)=>{if(!users.length)return Promise.resolve();const states=[];for(let key in noteStateNames)switch(key){case"draft":states.push({value:"personal",label:noteStateNames[key]});break;case"public":states.push({value:"course",label:noteStateNames[key],selected:1});break;case"site":states.push({value:key,label:noteStateNames[key]})}const context={stateNames:states,stateHelpIcon:stateHelpIcon.innerHTML};let titlePromise=null;return titlePromise=1===users.length?Str.get_string("addbulknotesingle","core_notes"):Str.get_string("addbulknote","core_notes",users.length),_modal_save_cancel.default.create({body:_templates.default.render("core_user/add_bulk_note",context),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0,show:!0}).then((modal=>(modal.getRoot().on(_modal_events.default.save,(()=>submitAddNote(courseid,users,modal))),modal)))};const submitAddNote=(courseid,users,modal)=>{const text=modal.getRoot().find("form textarea").val(),publishstate=modal.getRoot().find("form select").val(),notes=users.map((userid=>({userid:userid,text:text,courseid:courseid,publishstate:publishstate})));return Repository.createNotesForUsers(notes).then((noteIds=>1===noteIds.length?Str.get_string("addbulknotedonesingle","core_notes"):Str.get_string("addbulknotedone","core_notes",noteIds.length))).then((msg=>(0,_toast.add)(msg))).catch(_notification.default.exception)};_exports.showSendMessage=users=>{if(!users.length)return Promise.resolve();let titlePromise;return titlePromise=1===users.length?Str.get_string("sendbulkmessagesingle","core_message"):Str.get_string("sendbulkmessage","core_message",users.length),_modal_save_cancel.default.create({body:_templates.default.render("core_user/send_bulk_message",{}),title:titlePromise,buttons:{save:titlePromise},removeOnClose:!0,show:!0}).then((modal=>(modal.getRoot().on(_modal_events.default.save,(e=>{const text=modal.getRoot().find("form textarea").val();if(""===text.trim())return modal.getRoot().find('[data-role="messagetextrequired"]').removeAttr("hidden"),void e.preventDefault();submitSendMessage(modal,users,text)})),modal)))};const submitSendMessage=(modal,users,text)=>{const messages=users.map((touserid=>({touserid:touserid,text:text})));return Repository.sendMessagesToUsers(messages).then((messageIds=>{const cantSendToUsers=messageIds.filter((msg=>msg.cantsendtouser&&""!==msg.cantsendtouser));if(cantSendToUsers.length>1){const users=cantSendToUsers.map((user=>user.cantsendtouser)).join(", ");Str.get_string("usercantbemessagedbulk","core_message",users).done((msg=>{_notification.default.addNotification({message:msg,type:"error"})}))}else 1===cantSendToUsers.length&&_notification.default.addNotification({message:cantSendToUsers[0].errormessage,type:"error"});messageIds.filter((msg=>msg.errormessage&&(!msg.cantsendtouser||""===msg.cantsendtouser))).forEach((error=>{_notification.default.addNotification({message:error.errormessage,type:"error"})}));let toastMessage="";const errorMessages=messageIds.filter((msg=>msg.errormessage)),successCount=messageIds.length-errorMessages.length;return toastMessage=1==successCount&&0==errorMessages.length?Str.get_string("sendbulkmessagesentsingle","core_message"):successCount>1&&0==errorMessages.length?Str.get_string("sendbulkmessagesent","core_message",messageIds.length):Str.get_string("sendbulkmessagesentwitherrors","core_message",{sent:successCount,total:messageIds.length}),{message:toastMessage,errors:errorMessages.length}})).then((_ref=>{let{message:message,errors:errors}=_ref;if(errors>0){const config={type:"warning",closeButton:!0,autohide:!1};(0,_toast.add)(message,config)}else(0,_toast.add)(message)})).catch(_notification.default.exception)}}));
|
||||
|
||||
//# sourceMappingURL=bulkactions.min.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -178,15 +178,72 @@ const submitSendMessage = (modal, users, text) => {
|
||||
text,
|
||||
};
|
||||
});
|
||||
|
||||
return Repository.sendMessagesToUsers(messages)
|
||||
.then(messageIds => {
|
||||
if (messageIds.length == 1) {
|
||||
return Str.get_string('sendbulkmessagesentsingle', 'core_message');
|
||||
} else {
|
||||
return Str.get_string('sendbulkmessagesent', 'core_message', messageIds.length);
|
||||
// To help teachers know which users could not be sent to, let's build a notification.
|
||||
const cantSendToUsers = messageIds.filter(msg => msg.cantsendtouser && msg.cantsendtouser !== '');
|
||||
if (cantSendToUsers.length > 1) {
|
||||
// If there are multiple users who can't be sent to, extract their names and build an error message.
|
||||
const users = cantSendToUsers.map(user => user.cantsendtouser).join(', ');
|
||||
const stringPromise = Str.get_string('usercantbemessagedbulk', 'core_message', users);
|
||||
stringPromise.done(msg => {
|
||||
Notification.addNotification({
|
||||
message: msg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
} else if (cantSendToUsers.length === 1) {
|
||||
// If there was only one error, just notify with the singular 'usercantbemessaged' string (already built in PHP).
|
||||
Notification.addNotification({
|
||||
message: cantSendToUsers[0].errormessage,
|
||||
type: 'error',
|
||||
});
|
||||
}
|
||||
// Always handle other errors independently.
|
||||
const otherErrors = messageIds.filter(msg => msg.errormessage && (!msg.cantsendtouser || msg.cantsendtouser === ''));
|
||||
otherErrors.forEach(error => {
|
||||
Notification.addNotification({
|
||||
message: error.errormessage,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
||||
// Determine appropriate success/error toast message based on send results.
|
||||
let toastMessage = '';
|
||||
const errorMessages = messageIds.filter(msg => msg.errormessage);
|
||||
const successCount = messageIds.length - errorMessages.length;
|
||||
if (successCount == 1 && errorMessages.length == 0) {
|
||||
toastMessage = Str.get_string('sendbulkmessagesentsingle', 'core_message');
|
||||
} else if (successCount > 1 && errorMessages.length == 0) {
|
||||
toastMessage = Str.get_string('sendbulkmessagesent', 'core_message', messageIds.length);
|
||||
} else {
|
||||
toastMessage = Str.get_string(
|
||||
'sendbulkmessagesentwitherrors',
|
||||
'core_message',
|
||||
{
|
||||
sent: successCount,
|
||||
total: messageIds.length
|
||||
}
|
||||
);
|
||||
}
|
||||
return {
|
||||
message: toastMessage,
|
||||
errors: errorMessages.length,
|
||||
};
|
||||
})
|
||||
.then(({message, errors}) => {
|
||||
if (errors > 0) {
|
||||
// Customise the toast message to indicate there was an issue with sending.
|
||||
const config = {
|
||||
type: 'warning',
|
||||
closeButton: true,
|
||||
autohide: false,
|
||||
};
|
||||
notifyUser(message, config);
|
||||
} else {
|
||||
notifyUser(message);
|
||||
}
|
||||
return;
|
||||
})
|
||||
.then(msg => notifyUser(msg))
|
||||
.catch(Notification.exception);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user