MDL-63303 message: add functions to message_repository.js

This commit is contained in:
Ryan Wyllie 2018-10-16 11:45:59 +08:00
parent 0802c38a2f
commit 3ea46c8e31
2 changed files with 879 additions and 1 deletions

File diff suppressed because one or more lines are too long

View File

@ -23,6 +23,12 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notification) {
var CONVERSATION_TYPES = {
PRIVATE: 1,
PUBLIC: 2
};
/**
* Retrieve a list of messages from the server.
*
@ -39,6 +45,14 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat
args.offset = 0;
}
if (typeof args.type === 'undefined') {
args.type = null;
}
if (typeof args.favouritesonly === 'undefined') {
args.favouritesonly = false;
}
args.limitfrom = args.offset;
args.limitnum = args.limit;
@ -96,9 +110,873 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat
return promise;
};
/**
* Get contacts for given user.
*
* @param {int} userId The user id
* @param {int} limit Limit for results
* @param {int} offset Offset for results
* @return {object} jQuery promise
*/
var getContacts = function(userId, limit, offset) {
var args = {
userid: userId
};
if (typeof limit !== 'undefined') {
args.limitnum = limit;
}
if (typeof offset !== 'undefined') {
args.limitfrom = offset;
}
var request = {
methodname: 'core_message_data_for_messagearea_contacts',
args: args
};
return Ajax.call([request])[0];
};
/**
* Request profile information as a user for a given user.
*
* @param {int} userId The requesting user
* @param {int} profileUserId The id of the user who's profile is being requested
* @return {object} jQuery promise
*/
var getProfile = function(userId, profileUserId) {
var request = {
methodname: 'core_message_data_for_messagearea_get_profile',
args: {
currentuserid: userId,
otheruserid: profileUserId
}
};
return Ajax.call([request])[0];
};
/**
* Block a user.
*
* @param {int} userId The requesting user
* @param {int} blockedUserId Id of user to block
* @return {object} jQuery promise
*/
var blockUser = function(userId, blockedUserId) {
var requests = [
{
methodname: 'core_message_block_user',
args: {
userid: userId,
blockeduserid: blockedUserId
}
},
{
methodname: 'core_message_get_member_info',
args: {
referenceuserid: userId,
userids: [blockedUserId],
includecontactrequests: true,
includeprivacyinfo: true
}
}
];
// Wrap both requests in a single promise so that we can catch an error
// from either request.
return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {
// Only return the profile.
return profiles.length ? profiles[0] : {};
});
};
/**
* Unblock a user.
*
* @param {int} userId The requesting user
* @param {int} unblockedUserId Id of user to unblock
* @return {object} jQuery promise
*/
var unblockUser = function(userId, unblockedUserId) {
var requests = [
{
methodname: 'core_message_unblock_user',
args: {
userid: userId,
unblockeduserid: unblockedUserId
}
},
{
methodname: 'core_message_get_member_info',
args: {
referenceuserid: userId,
userids: [unblockedUserId],
includecontactrequests: true,
includeprivacyinfo: true
}
}
];
// Wrap both requests in a single promise so that we can catch an error
// from either request.
return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {
// Only return the profile.
return profiles.length ? profiles[0] : {};
});
};
/**
* Create a request to add a user as a contact.
*
* @param {int} userId The requesting user
* @param {int[]} requestUserIds List of user ids to add
* @return {object} jQuery promise
*/
var createContactRequest = function(userId, requestUserIds) {
var request = {
methodname: 'core_message_create_contact_request',
args: {
userid: userId,
requesteduserid: requestUserIds
}
};
return Ajax.call([request])[0];
};
/**
* Remove a list of users as contacts.
*
* @param {int} userId The requesting user
* @param {int[]} contactUserIds List of user ids to add
* @return {object} jQuery promise
*/
var deleteContacts = function(userId, contactUserIds) {
var requests = [
{
methodname: 'core_message_delete_contacts',
args: {
userid: userId,
userids: contactUserIds
}
},
{
methodname: 'core_message_get_member_info',
args: {
referenceuserid: userId,
userids: contactUserIds,
includecontactrequests: true,
includeprivacyinfo: true
}
}
];
return $.when.apply(null, Ajax.call(requests)).then(function(response1, profiles) {
// Return all of the profiles as an array.
return profiles;
});
};
/**
* Get messages between two users.
*
* @param {int} currentUserId The requesting user
* @param {int} conversationId Other user in the conversation
* @param {int} limit Limit for results
* @param {int} offset Offset for results
* @param {bool} newestFirst Order results by newest first
* @param {int} timeFrom Only return messages after this timestamp
* @return {object} jQuery promise
*/
var getMessages = function(currentUserId, conversationId, limit, offset, newestFirst, timeFrom) {
var args = {
currentuserid: currentUserId,
convid: conversationId,
newest: newestFirst ? true : false
};
if (typeof limit !== 'undefined') {
args.limitnum = limit;
}
if (typeof offset !== 'undefined') {
args.limitfrom = offset;
}
if (typeof timeFrom !== 'undefined') {
args.timefrom = timeFrom;
}
var request = {
methodname: 'core_message_get_conversation_messages',
args: args
};
return Ajax.call([request])[0];
};
/**
* Search for users.
*
* @param {int} userId The requesting user
* @param {string} searchString Search string
* @param {int} limit Limit for results
* @param {int} offset Offset for results
* @return {object} jQuery promise
*/
var searchUsers = function(userId, searchString, limit, offset) {
var args = {
userid: userId,
search: searchString
};
if (typeof limit !== 'undefined') {
args.limitnum = limit;
}
if (typeof offset !== 'undefined') {
args.limitfrom = offset;
}
var request = {
methodname: 'core_message_message_search_users',
args: args
};
return Ajax.call([request])[0];
};
/**
* Search for messages.
*
* @param {int} userId The requesting user
* @param {string} searchString Search string
* @param {int} limit Limit for results
* @param {int} offset Offset for results
* @return {object} jQuery promise
*/
var searchMessages = function(userId, searchString, limit, offset) {
var args = {
userid: userId,
search: searchString
};
if (typeof limit !== 'undefined') {
args.limitnum = limit;
}
if (typeof offset !== 'undefined') {
args.limitfrom = offset;
}
var request = {
methodname: 'core_message_data_for_messagearea_search_messages',
args: args
};
return Ajax.call([request])[0];
};
/**
* Send a list of messages to a user.
*
* @param {int} toUserId The recipient user id
* @param {string[]} messages List of messages to send
* @return {object} jQuery promise
*/
var sendMessagesToUser = function(toUserId, messages) {
var formattedMessages = messages.map(function(message) {
return {
touserid: toUserId,
text: message
};
});
var request = {
methodname: 'core_message_send_instant_messages',
args: {
messages: formattedMessages
}
};
return Ajax.call([request])[0]
.then(function(results) {
// Error handling for the weird way the old function works.
var errors = results.reduce(function(carry, result) {
if (result.errormessage) {
carry.push(result.errormessage);
}
return carry;
}, []);
if (errors.length) {
throw new Error(errors.join("\n"));
}
return results;
})
.then(function(results) {
// Format the results to match the other send message function.
return results.map(function(result) {
return {
id: result.msgid,
text: result.text,
timecreated: result.timecreated,
useridfrom: result.useridfrom,
conversationid: result.conversationid
};
});
});
};
/**
* Send a single message to a user.
*
* @param {int} toUserId The recipient user id
* @param {string} text The message text
* @return {object} jQuery promise
*/
var sendMessageToUser = function(toUserId, text) {
return sendMessagesToUser(toUserId, [text])
.then(function(results) {
return results[0];
});
};
/**
* Send messages to a conversation.
*/
var sendMessagesToConversation = function(conversationId, messages) {
var formattedMessages = messages.map(function(message) {
return {
text: message
};
});
var request = {
methodname: 'core_message_send_messages_to_conversation',
args: {
conversationid: conversationId,
messages: formattedMessages
}
};
return Ajax.call([request])[0];
};
/**
* Send a message to a conversation.
*/
var sendMessageToConversation = function(conversationId, text) {
return sendMessagesToConversation(conversationId, [text])
.then(function(result) {
return result[0];
});
};
/**
* Save message preferences.
*
* @param {int} userId The owner of the preferences
* @param {object[]} preferences New preferences values
* @return {object} jQuery promise
*/
var savePreferences = function(userId, preferences) {
var request = {
methodname: 'core_user_update_user_preferences',
args: {
userid: userId,
preferences: preferences
}
};
return Ajax.call([request])[0];
};
/**
* Get the user's preferences.
*
* @param {int} userId The target user
* @return {object} jQuery promise
*/
var getPreferences = function(userId) {
var request = {
methodname: 'core_user_get_user_preferences',
args: {
userid: userId
}
};
return Ajax.call([request])[0];
};
/**
* Delete a list of messages.
*
* @param {int} userId The user to delete messages for
* @param {int[]} messageIds List of message ids to delete
* @return {object} jQuery promise
*/
var deleteMessages = function(userId, messageIds) {
return Ajax.call(messageIds.map(function(messageId) {
return {
methodname: 'core_message_delete_message',
args: {
messageid: messageId,
userid: userId
}
};
}));
};
/**
* Delete a conversation between two users.
*
* @param {int} userId The user to delete messages for
* @param {int} otherUserId The other member of the conversation
* @return {object} jQuery promise
*/
var deleteCoversation = function(userId, otherUserId) {
var request = {
methodname: 'core_message_delete_conversation',
args: {
userid: userId,
otheruserid: otherUserId
}
};
return Ajax.call([request])[0];
};
/**
* Get the list of contact requests for a user.
*
* @param {int} userId The user id
* @return {object} jQuery promise
*/
var getContactRequests = function(userId) {
var request = {
methodname: 'core_message_get_contact_requests',
args: {
userid: userId
}
};
return Ajax.call([request])[0];
};
/**
* Accept a contact request.
*
* @param {int} sendingUserId The user that sent the request
* @param {int} recipientUserId The user that received the request
* @return {object} jQuery promise
*/
var acceptContactRequest = function(sendingUserId, recipientUserId) {
var requests = [
{
methodname: 'core_message_confirm_contact_request',
args: {
userid: sendingUserId,
requesteduserid: recipientUserId
}
},
{
methodname: 'core_message_get_member_info',
args: {
referenceuserid: recipientUserId,
userids: [sendingUserId],
includecontactrequests: true,
includeprivacyinfo: true
}
}
];
// Wrap both requests in a single promise so that we can catch an error
// from either request.
return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {
// Only return the profile.
return profiles.length ? profiles[0] : {};
});
};
/**
* Decline a contact request.
*
* @param {int} sendingUserId The user that sent the request
* @param {int} recipientUserId The user that received the request
* @return {object} jQuery promise
*/
var declineContactRequest = function(sendingUserId, recipientUserId) {
var requests = [
{
methodname: 'core_message_decline_contact_request',
args: {
userid: sendingUserId,
requesteduserid: recipientUserId
}
},
{
methodname: 'core_message_get_member_info',
args: {
referenceuserid: recipientUserId,
userids: [sendingUserId],
includecontactrequests: true,
includeprivacyinfo: true
}
}
];
// Wrap both requests in a single promise so that we can catch an error
// from either request.
return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {
// Only return the profile.
return profiles.length ? profiles[0] : {};
});
};
/**
* Get a conversation.
*
* @param {int} loggedInUserId The logged in user
* @param {int} conversationId The conversation id
* @param {bool} includeContactRequests Incldue contact requests between members
* @param {bool} includePrivacyInfo Include privacy info for members
* @param {int} memberLimit Limit for members
* @param {int} memberOffset Offset for members
* @param {int} messageLimit Limit for messages
* @param {int} messageOffset Offset for messages
* @param {bool} newestMessagesFirst Order the messages by newest first
* @return {object} jQuery promise
*/
var getConversation = function(
loggedInUserId,
conversationId,
includeContactRequests,
includePrivacyInfo,
memberLimit,
memberOffset,
messageLimit,
messageOffset,
newestMessagesFirst
) {
var args = {
userid: loggedInUserId,
conversationid: conversationId
};
if (typeof includeContactRequests != 'undefined' && includeContactRequests !== null) {
args.includecontactrequests = includeContactRequests;
}
if (typeof includePrivacyInfo != 'undefined' && includePrivacyInfo !== null) {
args.includeprivacyinfo = includePrivacyInfo;
}
if (typeof memberLimit != 'undefined' && memberLimit !== null) {
args.memberlimit = memberLimit;
}
if (typeof memberOffset != 'undefined' && memberOffset !== null) {
args.memberoffset = memberOffset;
}
if (typeof messageLimit != 'undefined' && messageLimit !== null) {
args.messagelimit = messageLimit;
}
if (typeof messageOffset != 'undefined' && messageOffset !== null) {
args.messageoffset = messageOffset;
}
if (typeof newestMessagesFirst != 'undefined' && newestMessagesFirst !== null) {
args.newestmessagesfirst = newestMessagesFirst;
}
var request = {
methodname: 'core_message_get_conversation',
args: args
};
return Ajax.call([request])[0];
};
/**
* Get a conversation between users.
*
* @param {int} loggedInUserId The logged in user
* @param {int} otherUserId The other user id
* @param {bool} includeContactRequests Incldue contact requests between members
* @param {bool} includePrivacyInfo Include privacy info for members
* @param {int} memberLimit Limit for members
* @param {int} memberOffset Offset for members
* @param {int} messageLimit Limit for messages
* @param {int} messageOffset Offset for messages
* @param {bool} newestMessagesFirst Order the messages by newest first
* @return {object} jQuery promise
*/
var getConversationBetweenUsers = function(
loggedInUserId,
otherUserId,
includeContactRequests,
includePrivacyInfo,
memberLimit,
memberOffset,
messageLimit,
messageOffset,
newestMessagesFirst
) {
var args = {
userid: loggedInUserId,
otheruserid: otherUserId
};
if (typeof includeContactRequests != 'undefined' && includeContactRequests !== null) {
args.includecontactrequests = includeContactRequests;
}
if (typeof includePrivacyInfo != 'undefined' && includePrivacyInfo !== null) {
args.includeprivacyinfo = includePrivacyInfo;
}
if (typeof memberLimit != 'undefined' && memberLimit !== null) {
args.memberlimit = memberLimit;
}
if (typeof memberOffset != 'undefined' && memberOffset !== null) {
args.memberoffset = memberOffset;
}
if (typeof messageLimit != 'undefined' && messageLimit !== null) {
args.messagelimit = messageLimit;
}
if (typeof messageOffset != 'undefined' && messageOffset !== null) {
args.messageoffset = messageOffset;
}
if (typeof newestMessagesFirst != 'undefined' && newestMessagesFirst !== null) {
args.newestmessagesfirst = newestMessagesFirst;
}
var request = {
methodname: 'core_message_get_conversation_between_users',
args: args
};
return Ajax.call([request])[0];
};
/**
* Get the conversations for a user.
*
* @param {int} userId The logged in user
* @param {int|null} type The type of conversation to get
* @param {int} limit Limit for results
* @param {int} offset Offset for results
* @param {bool|null} favourites If favourites should be included or not
* @return {object} jQuery promise
*/
var getConversations = function(
userId,
type,
limit,
offset,
favourites
) {
var args = {
userid: userId,
type: type
};
if (typeof limit != 'undefined' && limit !== null) {
args.limitnum = limit;
}
if (typeof offset != 'undefined' && offset !== null) {
args.limitfrom = offset;
}
if (typeof favourites != 'undefined' && favourites !== null) {
args.favourites = favourites;
}
var request = {
methodname: 'core_message_get_conversations',
args: args
};
return Ajax.call([request])[0]
.then(function(result) {
if (result.conversations.length) {
result.conversations = result.conversations.map(function(conversation) {
if (conversation.type == CONVERSATION_TYPES.PRIVATE) {
var otherUser = conversation.members.length ? conversation.members[0] : null;
if (otherUser) {
conversation.name = conversation.name ? conversation.name : otherUser.fullname;
conversation.imageurl = conversation.imageurl ? conversation.imageurl : otherUser.profileimageurl;
}
}
return conversation;
});
}
return result;
});
};
/**
* Get the conversations for a user.
*
* @param {int} conversationId The conversation id
* @param {int} loggedInUserId The logged in user
* @param {int} limit Limit for results
* @param {int} offset Offset for results
* @param {bool} includeContactRequests If contact requests should be included in result
* @return {object} jQuery promise
*/
var getConversationMembers = function(conversationId, loggedInUserId, limit, offset, includeContactRequests) {
var args = {
userid: loggedInUserId,
conversationid: conversationId
};
if (typeof limit != 'undefined' && limit !== null) {
args.limitnum = limit;
}
if (typeof offset != 'undefined' && offset !== null) {
args.limitfrom = offset;
}
if (typeof includeContactRequests != 'undefined' && includeContactRequests !== null) {
args.includecontactrequests = includeContactRequests;
}
var request = {
methodname: 'core_message_get_conversation_members',
args: args
};
return Ajax.call([request])[0];
};
/**
* Set a list of conversations to set as favourites for the given user.
*
* @param {int} userId The user id
* @param {array} conversationIds List of conversation ids to set as favourite
* @return {object} jQuery promise
*/
var setFavouriteConversations = function(userId, conversationIds) {
var request = {
methodname: 'core_message_set_favourite_conversations',
args: {
userid: userId,
conversations: conversationIds
}
};
return Ajax.call([request])[0];
};
/**
* Set a list of conversations to unset as favourites for the given user.
*
* @param {int} userId The user id
* @param {array} conversationIds List of conversation ids to unset as favourite
* @return {object} jQuery promise
*/
var unsetFavouriteConversations = function(userId, conversationIds) {
var request = {
methodname: 'core_message_unset_favourite_conversations',
args: {
userid: userId,
conversations: conversationIds
}
};
return Ajax.call([request])[0];
};
/**
* Get a list of user's member info.
*
* @param {int} referenceUserId The user id
* @param {array} userIds List of user ids to get
* @param {bool} includeContactRequests Include contact requests between users in response
* @param {bool} includePrivacyInfo Include privacy info for reference user in response
* @return {object} jQuery promise
*/
var getMemberInfo = function(referenceUserId, userIds, includeContactRequests, includePrivacyInfo) {
var args = {
referenceuserid: referenceUserId,
userids: userIds
};
if (typeof includeContactRequests != 'undefined') {
args.includecontactrequests = includeContactRequests;
}
if (typeof includePrivacyInfo != 'undefined') {
args.includeprivacyinfo = includePrivacyInfo;
}
var request = {
methodname: 'core_message_get_member_info',
args: args
};
return Ajax.call([request])[0];
};
/**
* Get a list of user's member info.
*
* @param {int} userId The user id to mark as read for
* @param {int} conversationId The conversation to mark as read
* @return {object} jQuery promise
*/
var markAllConversationMessagesAsRead = function(userId, conversationId) {
var request = {
methodname: 'core_message_mark_all_conversation_messages_as_read',
args: {
userid: userId,
conversationid: conversationId
}
};
return Ajax.call([request])[0];
};
return {
query: query,
countUnreadConversations: countUnreadConversations,
markAllAsRead: markAllAsRead,
getContacts: getContacts,
getProfile: getProfile,
blockUser: blockUser,
unblockUser: unblockUser,
createContactRequest: createContactRequest,
deleteContacts: deleteContacts,
getMessages: getMessages,
searchUsers: searchUsers,
searchMessages: searchMessages,
sendMessagesToUser: sendMessagesToUser,
sendMessageToUser: sendMessageToUser,
sendMessagesToConversation: sendMessagesToConversation,
sendMessageToConversation: sendMessageToConversation,
savePreferences: savePreferences,
getPreferences: getPreferences,
deleteMessages: deleteMessages,
deleteCoversation: deleteCoversation,
getContactRequests: getContactRequests,
acceptContactRequest: acceptContactRequest,
declineContactRequest: declineContactRequest,
getConversation: getConversation,
getConversationBetweenUsers: getConversationBetweenUsers,
getConversations: getConversations,
getConversationMembers: getConversationMembers,
setFavouriteConversations: setFavouriteConversations,
unsetFavouriteConversations: unsetFavouriteConversations,
getMemberInfo: getMemberInfo,
markAllConversationMessagesAsRead: markAllConversationMessagesAsRead
};
});