Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
{"version":3,"file":"message_repository.min.js","sources":["../src/message_repository.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Retrieves messages from the server.\n *\n * @module     core_message/message_repository\n * @copyright  2016 Ryan Wyllie <ryan@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(\n[\n    'jquery',\n    'core/ajax',\n    'core/notification',\n    'core_message/message_drawer_view_conversation_constants'\n], function(\n    $,\n    Ajax,\n    Notification,\n    Constants) {\n\n    var CONVERSATION_TYPES = Constants.CONVERSATION_TYPES;\n\n    /**\n     * Count the number of unread conversations (one or more messages from a user)\n     * for a given user.\n     *\n     * @param {object} args The request arguments:\n     * @return {object} jQuery promise\n     */\n    var countUnreadConversations = function(args) {\n        var request = {\n            methodname: 'core_message_get_unread_conversations_count',\n            args: args\n        };\n\n        var promise = Ajax.call([request])[0];\n\n        promise.fail(Notification.exception);\n\n        return promise;\n    };\n\n    /**\n     * Get contacts for given user.\n     *\n     * @param {int} userId The user id\n     * @param {int} limit Limit for results\n     * @param {int} offset Offset for results\n     * @return {object} jQuery promise\n     */\n    var getContacts = function(userId, limit, offset) {\n        var args = {\n            userid: userId\n        };\n\n        if (typeof limit !== 'undefined') {\n            args.limitnum = limit;\n        }\n\n        if (typeof offset !== 'undefined') {\n            args.limitfrom = offset;\n        }\n\n        var request = {\n            methodname: 'core_message_get_user_contacts',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Block a user.\n     *\n     * @param {int} userId The requesting user\n     * @param {int} blockedUserId Id of user to block\n     * @return {object} jQuery promise\n     */\n    var blockUser = function(userId, blockedUserId) {\n        var requests = [\n            {\n                methodname: 'core_message_block_user',\n                args: {\n                    userid: userId,\n                    blockeduserid: blockedUserId\n                }\n            },\n            {\n                methodname: 'core_message_get_member_info',\n                args: {\n                    referenceuserid: userId,\n                    userids: [blockedUserId],\n                    includecontactrequests: true,\n                    includeprivacyinfo: true\n                }\n            }\n        ];\n\n        // Wrap both requests in a single promise so that we can catch an error\n        // from either request.\n        return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {\n            // Only return the profile.\n            return profiles.length ? profiles[0] : {};\n        });\n    };\n\n    /**\n     * Unblock a user.\n     *\n     * @param {int} userId The requesting user\n     * @param {int} unblockedUserId Id of user to unblock\n     * @return {object} jQuery promise\n     */\n    var unblockUser = function(userId, unblockedUserId) {\n        var requests = [\n            {\n                methodname: 'core_message_unblock_user',\n                args: {\n                    userid: userId,\n                    unblockeduserid: unblockedUserId\n                }\n            },\n            {\n                methodname: 'core_message_get_member_info',\n                args: {\n                    referenceuserid: userId,\n                    userids: [unblockedUserId],\n                    includecontactrequests: true,\n                    includeprivacyinfo: true\n                }\n            }\n        ];\n\n        // Wrap both requests in a single promise so that we can catch an error\n        // from either request.\n        return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {\n            // Only return the profile.\n            return profiles.length ? profiles[0] : {};\n        });\n    };\n\n    /**\n     * Create a request to add a user as a contact.\n     *\n     * @param {int} userId The requesting user\n     * @param {int[]} requestUserIds List of user ids to add\n     * @return {object} jQuery promise\n     */\n    var createContactRequest = function(userId, requestUserIds) {\n        var request = {\n            methodname: 'core_message_create_contact_request',\n            args: {\n                userid: userId,\n                requesteduserid: requestUserIds\n            }\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Remove a list of users as contacts.\n     *\n     * @param {int} userId The requesting user\n     * @param {int[]} contactUserIds List of user ids to add\n     * @return {object} jQuery promise\n     */\n    var deleteContacts = function(userId, contactUserIds) {\n        var requests = [\n            {\n                methodname: 'core_message_delete_contacts',\n                args: {\n                    userid: userId,\n                    userids: contactUserIds\n                }\n            },\n            {\n                methodname: 'core_message_get_member_info',\n                args: {\n                    referenceuserid: userId,\n                    userids: contactUserIds,\n                    includecontactrequests: true,\n                    includeprivacyinfo: true\n                }\n            }\n        ];\n\n        return $.when.apply(null, Ajax.call(requests)).then(function(response1, profiles) {\n            // Return all of the profiles as an array.\n            return profiles;\n        });\n    };\n\n    /**\n     * Get messages between two users.\n     *\n     * @param {int} currentUserId The requesting user\n     * @param {int} conversationId Other user in the conversation\n     * @param {int} limit Limit for results\n     * @param {int} offset Offset for results\n     * @param {bool} newestFirst Order results by newest first\n     * @param {int} timeFrom Only return messages after this timestamp\n     * @return {object} jQuery promise\n     */\n    var getMessages = function(currentUserId, conversationId, limit, offset, newestFirst, timeFrom) {\n        var args = {\n            currentuserid: currentUserId,\n            convid: conversationId,\n            newest: newestFirst ? true : false\n        };\n\n        if (typeof limit !== 'undefined') {\n            args.limitnum = limit;\n        }\n\n        if (typeof offset !== 'undefined') {\n            args.limitfrom = offset;\n        }\n\n        if (typeof timeFrom !== 'undefined') {\n            args.timefrom = timeFrom;\n        }\n\n        var request = {\n            methodname: 'core_message_get_conversation_messages',\n            args: args\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Search for users.\n     *\n     * @param {int} userId The requesting user\n     * @param {string} searchString Search string\n     * @param {int} limit Limit for results\n     * @param {int} offset Offset for results\n     * @return {object} jQuery promise\n     */\n    var searchUsers = function(userId, searchString, limit, offset) {\n        var args = {\n            userid: userId,\n            search: searchString\n        };\n\n        if (typeof limit !== 'undefined') {\n            args.limitnum = limit;\n        }\n\n        if (typeof offset !== 'undefined') {\n            args.limitfrom = offset;\n        }\n\n        var request = {\n            methodname: 'core_message_message_search_users',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Search for messages.\n     *\n     * @param {int} userId The requesting user\n     * @param {string} searchString Search string\n     * @param {int} limit Limit for results\n     * @param {int} offset Offset for results\n     * @return {object} jQuery promise\n     */\n    var searchMessages = function(userId, searchString, limit, offset) {\n        var args = {\n            userid: userId,\n            search: searchString\n        };\n\n        if (typeof limit !== 'undefined') {\n            args.limitnum = limit;\n        }\n\n        if (typeof offset !== 'undefined') {\n            args.limitfrom = offset;\n        }\n\n        var request = {\n            methodname: 'core_message_data_for_messagearea_search_messages',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Send a list of messages to a user.\n     *\n     * @param {int} toUserId The recipient user id\n     * @param {string[]} messages List of messages to send\n     * @return {object} jQuery promise\n     */\n    var sendMessagesToUser = function(toUserId, messages) {\n        var formattedMessages = messages.map(function(message) {\n            return {\n                touserid: toUserId,\n                text: message\n            };\n        });\n        var request = {\n            methodname: 'core_message_send_instant_messages',\n            args: {\n                messages: formattedMessages\n            }\n        };\n\n        return Ajax.call([request])[0]\n            .then(function(results) {\n                // Error handling for the weird way the old function works.\n                var errors = results.reduce(function(carry, result) {\n                    if (result.errormessage) {\n                        carry.push(result.errormessage);\n                    }\n\n                    return carry;\n                }, []);\n                if (errors.length) {\n                    throw new Error(errors.join(\"\\n\"));\n                }\n\n                return results;\n            })\n            .then(function(results) {\n                // Format the results to match the other send message function.\n                return results.map(function(result) {\n                    return {\n                        id: result.msgid,\n                        text: result.text,\n                        timecreated: result.timecreated,\n                        useridfrom: result.useridfrom,\n                        conversationid: result.conversationid,\n                        candeletemessagesforallusers: result.candeletemessagesforallusers\n                    };\n                });\n            });\n    };\n\n    /**\n     * Send a single message to a user.\n     *\n     * @param {int} toUserId The recipient user id\n     * @param {string} text The message text\n     * @return {object} jQuery promise\n     */\n    var sendMessageToUser = function(toUserId, text) {\n        return sendMessagesToUser(toUserId, [text])\n            .then(function(results) {\n                return results[0];\n            });\n    };\n\n    /**\n     * Send messages to a conversation.\n     *\n     * @param {int} conversationId The conversation id\n     * @param {string[]} messages List of messages to send\n     * @return {object} jQuery promise\n     */\n    var sendMessagesToConversation = function(conversationId, messages) {\n        var formattedMessages = messages.map(function(message) {\n            return {\n                text: message\n            };\n        });\n        var request = {\n            methodname: 'core_message_send_messages_to_conversation',\n            args: {\n                conversationid: conversationId,\n                messages: formattedMessages\n            }\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Send a message to a conversation.\n     *\n     * @param {int} conversationId The conversation id\n     * @param {string} text The message text\n     * @return {object} jQuery promise\n     */\n    var sendMessageToConversation = function(conversationId, text) {\n        return sendMessagesToConversation(conversationId, [text])\n            .then(function(result) {\n                return result[0];\n            });\n    };\n\n    /**\n     * Save message preferences.\n     *\n     * @param {int} userId The owner of the preferences\n     * @param {object[]} preferences New preferences values\n     * @return {object} jQuery promise\n     */\n    var savePreferences = function(userId, preferences) {\n        var request = {\n            methodname: 'core_user_update_user_preferences',\n            args: {\n                userid: userId,\n                preferences: preferences\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get the user's preferences.\n     *\n     * @param {int} userId The target user\n     * @return {object} jQuery promise\n     */\n    var getPreferences = function(userId) {\n        var request = {\n            methodname: 'core_user_get_user_preferences',\n            args: {\n                userid: userId\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Delete a list of messages.\n     *\n     * @param {int} userId The user to delete messages for\n     * @param {int[]} messageIds List of message ids to delete\n     * @return {object} jQuery promise\n     */\n    var deleteMessages = function(userId, messageIds) {\n        return $.when.apply(null, Ajax.call(messageIds.map(function(messageId) {\n            return {\n                methodname: 'core_message_delete_message',\n                args: {\n                    messageid: messageId,\n                    userid: userId\n                }\n            };\n        })));\n    };\n\n    /**\n     * Delete a list of messages for all users.\n     *\n     * @param {int} userId The user to delete messages for\n     * @param {int[]} messageIds List of message ids to delete\n     * @return {object} jQuery promise\n     */\n    var deleteMessagesForAllUsers = function(userId, messageIds) {\n        return $.when.apply(null, Ajax.call(messageIds.map(function(messageId) {\n            return {\n                methodname: 'core_message_delete_message_for_all_users',\n                args: {\n                    messageid: messageId,\n                    userid: userId\n                }\n            };\n        })));\n    };\n\n    /**\n     * Delete a conversation between two users.\n     *\n     * @param {int} userId The user to delete messages for\n     * @param {int} conversationId The id of the conversation\n     * @return {object} jQuery promise\n     */\n    var deleteConversation = function(userId, conversationId) {\n        var request = {\n            methodname: 'core_message_delete_conversations_by_id',\n            args: {\n                userid: userId,\n                conversationids: [conversationId]\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get the list of contact requests for a user.\n     *\n     * @param {int} userId The user id\n     * @return {object} jQuery promise\n     */\n    var getContactRequests = function(userId) {\n        var request = {\n            methodname: 'core_message_get_contact_requests',\n            args: {\n                userid: userId\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Accept a contact request.\n     *\n     * @param {int} sendingUserId The user that sent the request\n     * @param {int} recipientUserId The user that received the request\n     * @return {object} jQuery promise\n     */\n    var acceptContactRequest = function(sendingUserId, recipientUserId) {\n        var requests = [\n            {\n                methodname: 'core_message_confirm_contact_request',\n                args: {\n                    userid: sendingUserId,\n                    requesteduserid: recipientUserId\n                }\n            },\n            {\n                methodname: 'core_message_get_member_info',\n                args: {\n                    referenceuserid: recipientUserId,\n                    userids: [sendingUserId],\n                    includecontactrequests: true,\n                    includeprivacyinfo: true\n                }\n            }\n        ];\n\n        // Wrap both requests in a single promise so that we can catch an error\n        // from either request.\n        return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {\n            // Only return the profile.\n            return profiles.length ? profiles[0] : {};\n        });\n    };\n\n    /**\n     * Decline a contact request.\n     *\n     * @param {int} sendingUserId The user that sent the request\n     * @param {int} recipientUserId The user that received the request\n     * @return {object} jQuery promise\n     */\n    var declineContactRequest = function(sendingUserId, recipientUserId) {\n        var requests = [\n            {\n                methodname: 'core_message_decline_contact_request',\n                args: {\n                    userid: sendingUserId,\n                    requesteduserid: recipientUserId\n                }\n            },\n            {\n                methodname: 'core_message_get_member_info',\n                args: {\n                    referenceuserid: recipientUserId,\n                    userids: [sendingUserId],\n                    includecontactrequests: true,\n                    includeprivacyinfo: true\n                }\n            }\n        ];\n\n        // Wrap both requests in a single promise so that we can catch an error\n        // from either request.\n        return $.when.apply(null, Ajax.call(requests)).then(function(reponse1, profiles) {\n            // Only return the profile.\n            return profiles.length ? profiles[0] : {};\n        });\n    };\n\n    /**\n     * Get a conversation.\n     *\n     * @param {int} loggedInUserId The logged in user\n     * @param {int} conversationId The conversation id\n     * @param {bool} includeContactRequests Incldue contact requests between members\n     * @param {bool} includePrivacyInfo Include privacy info for members\n     * @param {int} memberLimit Limit for members\n     * @param {int} memberOffset Offset for members\n     * @param {int} messageLimit Limit for messages\n     * @param {int} messageOffset Offset for messages\n     * @param {bool} newestMessagesFirst Order the messages by newest first\n     * @return {object} jQuery promise\n     */\n    var getConversation = function(\n        loggedInUserId,\n        conversationId,\n        includeContactRequests,\n        includePrivacyInfo,\n        memberLimit,\n        memberOffset,\n        messageLimit,\n        messageOffset,\n        newestMessagesFirst\n    ) {\n        var args = {\n            userid: loggedInUserId,\n            conversationid: conversationId\n        };\n\n        if (typeof includeContactRequests != 'undefined' && includeContactRequests !== null) {\n            args.includecontactrequests = includeContactRequests;\n        }\n\n        if (typeof includePrivacyInfo != 'undefined' && includePrivacyInfo !== null) {\n            args.includeprivacyinfo = includePrivacyInfo;\n        }\n\n        if (typeof memberLimit != 'undefined' && memberLimit !== null) {\n            args.memberlimit = memberLimit;\n        }\n\n        if (typeof memberOffset != 'undefined' && memberOffset !== null) {\n            args.memberoffset = memberOffset;\n        }\n\n        if (typeof messageLimit != 'undefined' && messageLimit !== null) {\n            args.messagelimit = messageLimit;\n        }\n\n        if (typeof messageOffset != 'undefined' && messageOffset !== null) {\n            args.messageoffset = messageOffset;\n        }\n\n        if (typeof newestMessagesFirst != 'undefined' && newestMessagesFirst !== null) {\n            args.newestmessagesfirst = newestMessagesFirst;\n        }\n\n        var request = {\n            methodname: 'core_message_get_conversation',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get a conversation between users.\n     *\n     * @param {int} loggedInUserId The logged in user\n     * @param {int} otherUserId The other user id\n     * @param {bool} includeContactRequests Incldue contact requests between members\n     * @param {bool} includePrivacyInfo Include privacy info for members\n     * @param {int} memberLimit Limit for members\n     * @param {int} memberOffset Offset for members\n     * @param {int} messageLimit Limit for messages\n     * @param {int} messageOffset Offset for messages\n     * @param {bool} newestMessagesFirst Order the messages by newest first\n     * @return {object} jQuery promise\n     */\n    var getConversationBetweenUsers = function(\n        loggedInUserId,\n        otherUserId,\n        includeContactRequests,\n        includePrivacyInfo,\n        memberLimit,\n        memberOffset,\n        messageLimit,\n        messageOffset,\n        newestMessagesFirst\n    ) {\n        var args = {\n            userid: loggedInUserId,\n            otheruserid: otherUserId\n        };\n\n        if (typeof includeContactRequests != 'undefined' && includeContactRequests !== null) {\n            args.includecontactrequests = includeContactRequests;\n        }\n\n        if (typeof includePrivacyInfo != 'undefined' && includePrivacyInfo !== null) {\n            args.includeprivacyinfo = includePrivacyInfo;\n        }\n\n        if (typeof memberLimit != 'undefined' && memberLimit !== null) {\n            args.memberlimit = memberLimit;\n        }\n\n        if (typeof memberOffset != 'undefined' && memberOffset !== null) {\n            args.memberoffset = memberOffset;\n        }\n\n        if (typeof messageLimit != 'undefined' && messageLimit !== null) {\n            args.messagelimit = messageLimit;\n        }\n\n        if (typeof messageOffset != 'undefined' && messageOffset !== null) {\n            args.messageoffset = messageOffset;\n        }\n\n        if (typeof newestMessagesFirst != 'undefined' && newestMessagesFirst !== null) {\n            args.newestmessagesfirst = newestMessagesFirst;\n        }\n\n        var request = {\n            methodname: 'core_message_get_conversation_between_users',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get a self-conversation.\n     *\n     * @param {int} loggedInUserId The logged in user\n     * @param {int} messageLimit Limit for messages\n     * @param {int} messageOffset Offset for messages\n     * @param {bool} newestMessagesFirst Order the messages by newest first\n     * @return {object} jQuery promise\n     */\n    var getSelfConversation = function(\n        loggedInUserId,\n        messageLimit,\n        messageOffset,\n        newestMessagesFirst\n    ) {\n        var args = {\n            userid: loggedInUserId\n        };\n\n        if (typeof messageLimit != 'undefined' && messageLimit !== null) {\n            args.messagelimit = messageLimit;\n        }\n\n        if (typeof messageOffset != 'undefined' && messageOffset !== null) {\n            args.messageoffset = messageOffset;\n        }\n\n        if (typeof newestMessagesFirst != 'undefined' && newestMessagesFirst !== null) {\n            args.newestmessagesfirst = newestMessagesFirst;\n        }\n\n        var request = {\n            methodname: 'core_message_get_self_conversation',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get the conversations for a user.\n     *\n     * @param {int} userId The logged in user\n     * @param {int|null} type The type of conversation to get\n     * @param {int} limit Limit for results\n     * @param {int} offset Offset for results\n     * @param {bool|null} favourites If favourites should be included or not\n     * @param {bool} mergeself\n     * @return {object} jQuery promise\n     */\n    var getConversations = function(\n        userId,\n        type,\n        limit,\n        offset,\n        favourites,\n        mergeself\n    ) {\n        var args = {\n            userid: userId,\n            type: type\n        };\n\n        if (typeof limit != 'undefined' && limit !== null) {\n            args.limitnum = limit;\n        }\n\n        if (typeof offset != 'undefined' && offset !== null) {\n            args.limitfrom = offset;\n        }\n\n        if (typeof favourites != 'undefined' && favourites !== null) {\n            args.favourites = favourites;\n        }\n\n        if (typeof mergeself != 'undefined' && mergeself !== null) {\n            args.mergeself = mergeself;\n        }\n\n        var request = {\n            methodname: 'core_message_get_conversations',\n            args: args\n        };\n\n        return Ajax.call([request])[0]\n            .then(function(result) {\n                if (result.conversations.length) {\n                    result.conversations = result.conversations.map(function(conversation) {\n                        if (conversation.type == CONVERSATION_TYPES.PRIVATE || conversation.type == CONVERSATION_TYPES.SELF) {\n                            var otherUser = conversation.members.length ? conversation.members[0] : null;\n\n                            if (otherUser) {\n                                conversation.name = conversation.name ? conversation.name : otherUser.fullname;\n                                conversation.imageurl = conversation.imageurl ? conversation.imageurl : otherUser.profileimageurl;\n                            }\n                        }\n\n                        return conversation;\n                    });\n                }\n\n                return result;\n            });\n    };\n\n    /**\n     * Get the conversations for a user.\n     *\n     * @param {int} conversationId The conversation id\n     * @param {int} loggedInUserId The logged in user\n     * @param {int} limit Limit for results\n     * @param {int} offset Offset for results\n     * @param {bool} includeContactRequests If contact requests should be included in result\n     * @return {object} jQuery promise\n     */\n    var getConversationMembers = function(conversationId, loggedInUserId, limit, offset, includeContactRequests) {\n        var args = {\n            userid: loggedInUserId,\n            conversationid: conversationId\n        };\n\n        if (typeof limit != 'undefined' && limit !== null) {\n            args.limitnum = limit;\n        }\n\n        if (typeof offset != 'undefined' && offset !== null) {\n            args.limitfrom = offset;\n        }\n\n        if (typeof includeContactRequests != 'undefined' && includeContactRequests !== null) {\n            args.includecontactrequests = includeContactRequests;\n        }\n\n        var request = {\n            methodname: 'core_message_get_conversation_members',\n            args: args\n        };\n\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Set a list of conversations to set as favourites for the given user.\n     *\n     * @param {int} userId The user id\n     * @param {array} conversationIds List of conversation ids to set as favourite\n     * @return {object} jQuery promise\n     */\n    var setFavouriteConversations = function(userId, conversationIds) {\n\n        var request = {\n            methodname: 'core_message_set_favourite_conversations',\n            args: {\n                userid: userId,\n                conversations: conversationIds\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Set a list of conversations to unset as favourites for the given user.\n     *\n     * @param {int} userId The user id\n     * @param {array} conversationIds List of conversation ids to unset as favourite\n     * @return {object} jQuery promise\n     */\n    var unsetFavouriteConversations = function(userId, conversationIds) {\n\n        var request = {\n            methodname: 'core_message_unset_favourite_conversations',\n            args: {\n                userid: userId,\n                conversations: conversationIds\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Set a list of conversations to set as muted for the given user.\n     *\n     * @param {int} userId The user id\n     * @param {array} conversationIds List of conversation ids to set as favourite\n     * @return {object} jQuery promise\n     */\n    var setMutedConversations = function(userId, conversationIds) {\n        var request = {\n            methodname: 'core_message_mute_conversations',\n            args: {\n                userid: userId,\n                conversationids: conversationIds\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Set a list of conversations to unset as muted for the given user.\n     *\n     * @param {int} userId The user id\n     * @param {array} conversationIds List of conversation ids to unset as favourite\n     * @return {object} jQuery promise\n     */\n    var unsetMutedConversations = function(userId, conversationIds) {\n        var request = {\n            methodname: 'core_message_unmute_conversations',\n            args: {\n                userid: userId,\n                conversationids: conversationIds\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get a list of user's member info.\n     *\n     * @param {int} referenceUserId The user id\n     * @param {array} userIds List of user ids to get\n     * @param {bool} includeContactRequests Include contact requests between users in response\n     * @param {bool} includePrivacyInfo Include privacy info for reference user in response\n     * @return {object} jQuery promise\n     */\n    var getMemberInfo = function(referenceUserId, userIds, includeContactRequests, includePrivacyInfo) {\n        var args = {\n            referenceuserid: referenceUserId,\n            userids: userIds\n        };\n\n        if (typeof includeContactRequests != 'undefined') {\n            args.includecontactrequests = includeContactRequests;\n        }\n\n        if (typeof includePrivacyInfo != 'undefined') {\n            args.includeprivacyinfo = includePrivacyInfo;\n        }\n\n        var request = {\n            methodname: 'core_message_get_member_info',\n            args: args\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get a list of user's member info.\n     *\n     * @param {int} userId The user id to mark as read for\n     * @param {int} conversationId The conversation to mark as read\n     * @return {object} jQuery promise\n     */\n    var markAllConversationMessagesAsRead = function(userId, conversationId) {\n\n        var request = {\n            methodname: 'core_message_mark_all_conversation_messages_as_read',\n            args: {\n                userid: userId,\n                conversationid: conversationId\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get the user's message preferences.\n     *\n     * @param {int} userId The user id to load preferences for\n     * @return {object} jQuery promise\n     */\n    var getUserMessagePreferences = function(userId) {\n        var request = {\n            methodname: 'core_message_get_user_message_preferences',\n            args: {\n                userid: userId\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * The the count of the user's conversations grouped by type.\n     *\n     * @param {Number} userId The user's id.\n     * @return {Object} jQuery promise.\n     */\n    var getTotalConversationCounts = function(userId) {\n        var request = {\n            methodname: 'core_message_get_conversation_counts',\n            args: {\n                userid: userId\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * The the count of the user's unread conversations grouped by type.\n     *\n     * @param {Number} userId The user's id.\n     * @return {Object} jQuery promise.\n     */\n    var getUnreadConversationCounts = function(userId) {\n        var request = {\n            methodname: 'core_message_get_unread_conversation_counts',\n            args: {\n                userid: userId\n            }\n        };\n        return Ajax.call([request])[0];\n    };\n\n    /**\n     * Get both the unread and total conversation counts in a single request.\n     *\n     * @param {Number} userId The user's id.\n     * @return {Object} jQuery promise.\n     */\n    var getAllConversationCounts = function(userId) {\n        var requests = [\n            {\n                methodname: 'core_message_get_conversation_counts',\n                args: {\n                    userid: userId\n                }\n            },\n            {\n                methodname: 'core_message_get_unread_conversation_counts',\n                args: {\n                    userid: userId\n                }\n            },\n        ];\n        return $.when.apply(null, Ajax.call(requests)).then(function(total, unread) {\n            return {\n                total: total,\n                unread: unread\n            };\n        });\n    };\n\n    return {\n        countUnreadConversations: countUnreadConversations,\n        getContacts: getContacts,\n        blockUser: blockUser,\n        unblockUser: unblockUser,\n        createContactRequest: createContactRequest,\n        deleteContacts: deleteContacts,\n        getMessages: getMessages,\n        searchUsers: searchUsers,\n        searchMessages: searchMessages,\n        sendMessagesToUser: sendMessagesToUser,\n        sendMessageToUser: sendMessageToUser,\n        sendMessagesToConversation: sendMessagesToConversation,\n        sendMessageToConversation: sendMessageToConversation,\n        savePreferences: savePreferences,\n        getPreferences: getPreferences,\n        deleteMessages: deleteMessages,\n        deleteMessagesForAllUsers: deleteMessagesForAllUsers,\n        deleteConversation: deleteConversation,\n        getContactRequests: getContactRequests,\n        acceptContactRequest: acceptContactRequest,\n        declineContactRequest: declineContactRequest,\n        getConversation: getConversation,\n        getConversationBetweenUsers: getConversationBetweenUsers,\n        getSelfConversation: getSelfConversation,\n        getConversations: getConversations,\n        getConversationMembers: getConversationMembers,\n        setFavouriteConversations: setFavouriteConversations,\n        setMutedConversations: setMutedConversations,\n        unsetFavouriteConversations: unsetFavouriteConversations,\n        unsetMutedConversations: unsetMutedConversations,\n        getMemberInfo: getMemberInfo,\n        markAllConversationMessagesAsRead: markAllConversationMessagesAsRead,\n        getUserMessagePreferences: getUserMessagePreferences,\n        getTotalConversationCounts: getTotalConversationCounts,\n        getUnreadConversationCounts: getUnreadConversationCounts,\n        getAllConversationCounts: getAllConversationCounts\n    };\n});\n"],"names":["define","$","Ajax","Notification","Constants","CONVERSATION_TYPES","sendMessagesToUser","toUserId","messages","request","methodname","args","map","message","touserid","text","call","then","results","errors","reduce","carry","result","errormessage","push","length","Error","join","id","msgid","timecreated","useridfrom","conversationid","candeletemessagesforallusers","sendMessagesToConversation","conversationId","countUnreadConversations","promise","fail","exception","getContacts","userId","limit","offset","userid","limitnum","limitfrom","blockUser","blockedUserId","requests","blockeduserid","referenceuserid","userids","includecontactrequests","includeprivacyinfo","when","apply","reponse1","profiles","unblockUser","unblockedUserId","unblockeduserid","createContactRequest","requestUserIds","requesteduserid","deleteContacts","contactUserIds","response1","getMessages","currentUserId","newestFirst","timeFrom","currentuserid","convid","newest","timefrom","searchUsers","searchString","search","searchMessages","sendMessageToUser","sendMessageToConversation","savePreferences","preferences","getPreferences","deleteMessages","messageIds","messageId","messageid","deleteMessagesForAllUsers","deleteConversation","conversationids","getContactRequests","acceptContactRequest","sendingUserId","recipientUserId","declineContactRequest","getConversation","loggedInUserId","includeContactRequests","includePrivacyInfo","memberLimit","memberOffset","messageLimit","messageOffset","newestMessagesFirst","memberlimit","memberoffset","messagelimit","messageoffset","newestmessagesfirst","getConversationBetweenUsers","otherUserId","otheruserid","getSelfConversation","getConversations","type","favourites","mergeself","conversations","conversation","PRIVATE","SELF","otherUser","members","name","fullname","imageurl","profileimageurl","getConversationMembers","setFavouriteConversations","conversationIds","setMutedConversations","unsetFavouriteConversations","unsetMutedConversations","getMemberInfo","referenceUserId","userIds","markAllConversationMessagesAsRead","getUserMessagePreferences","getTotalConversationCounts","getUnreadConversationCounts","getAllConversationCounts","total","unread"],"mappings":"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"}