From 51a931ee0f3d531c32a8682e0f13f6218c83816a Mon Sep 17 00:00:00 2001 From: SHEREEF PT Date: Thu, 13 Apr 2017 16:04:42 +0530 Subject: [PATCH] Initial Commit --- sent_mails/__init__.py | 22 + sent_mails/__openerp__.py | 41 + sent_mails/static/description/cybro_logo.png | Bin 0 -> 50824 bytes sent_mails/static/description/icon.png | Bin 0 -> 55444 bytes sent_mails/static/description/index.html | 44 + .../static/description/sent_mails_demo.png | Bin 0 -> 53357 bytes sent_mails/static/scripts/openerp_mailgate.py | 180 +++ .../static/src/js/chat_manager_sent_mail.js | 1100 +++++++++++++++++ .../static/src/js/client_action_sent_mail.js | 666 ++++++++++ .../src/xml/client_action_sent_mails.xml | 19 + sent_mails/views/get_sent_mails.xml | 27 + 11 files changed, 2099 insertions(+) create mode 100644 sent_mails/__init__.py create mode 100644 sent_mails/__openerp__.py create mode 100644 sent_mails/static/description/cybro_logo.png create mode 100644 sent_mails/static/description/icon.png create mode 100644 sent_mails/static/description/index.html create mode 100644 sent_mails/static/description/sent_mails_demo.png create mode 100755 sent_mails/static/scripts/openerp_mailgate.py create mode 100644 sent_mails/static/src/js/chat_manager_sent_mail.js create mode 100644 sent_mails/static/src/js/client_action_sent_mail.js create mode 100644 sent_mails/static/src/xml/client_action_sent_mails.xml create mode 100644 sent_mails/views/get_sent_mails.xml diff --git a/sent_mails/__init__.py b/sent_mails/__init__.py new file mode 100644 index 000000000..b8b509efd --- /dev/null +++ b/sent_mails/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2009-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# This program 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## diff --git a/sent_mails/__openerp__.py b/sent_mails/__openerp__.py new file mode 100644 index 000000000..3313a0633 --- /dev/null +++ b/sent_mails/__openerp__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Cybrosys Technologies Pvt. Ltd. +# Copyright (C) 2009-TODAY Cybrosys Technologies(). +# Author: Nilmar Shereef() +# you can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# It is forbidden to publish, distribute, sublicense, or sell copies +# of the Software or modified copies of the Software. +# +# This program 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. +# If not, see . +# +############################################################################## +{ + 'name': 'Sent Mails', + 'version': '1.0', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'website': 'http://www.cybrosys.com', + "category": "Discuss", + 'depends': ['base', 'mail'], + 'license': 'AGPL-3', + 'data': [ + 'views/get_sent_mails.xml', + ], + 'qweb': [ + 'static/src/xml/client_action_sent_mails.xml', + + ], + 'installable': True, + 'auto_install': False +} diff --git a/sent_mails/static/description/cybro_logo.png b/sent_mails/static/description/cybro_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb309114c865e3b356880cb5f4029c7cfe1394da GIT binary patch literal 50824 zcmZ5{WmKEZ)^>0xT4-@AS_;M8U5Z1CYw_Z)L0h0maQC9c-67BxcMT3L9wbnl5cu*u z?~il7bF)}vC1GaI>}y}MZN6%0DB(Y&dqeP7A;)8Tp68 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 literal 0 HcmV?d00001 diff --git a/sent_mails/static/description/icon.png b/sent_mails/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b34677ee0b68d8c0c5f9d54b7c72866fb2da5771 GIT binary patch literal 55444 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%0DOF7Zfp5!$~ip!%PTe=*0kr!02 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 SUf^~E=*7gq0#~b#kNJO@k%k2T literal 0 HcmV?d00001 diff --git a/sent_mails/static/description/index.html b/sent_mails/static/description/index.html new file mode 100644 index 000000000..01f9793be --- /dev/null +++ b/sent_mails/static/description/index.html @@ -0,0 +1,44 @@ +
+
+

Show sent mails

+

Shows the mails or discussions sent by current user

+

Author : Cybrosys Techno Solutions, www.cybrosys.com

+
+ +
+
+

+ ☛This module enables the feature to display the mails and discussions done by current user +

+
+
+
+
+
+ +
+
+

Sent Mail Menu Under Discuss

+
+
+ +
+
+
+
+ +
+

Need Any Help?

+ + +
diff --git a/sent_mails/static/description/sent_mails_demo.png b/sent_mails/static/description/sent_mails_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..2a534f872e252423e237d5a92292a4d2738ca1a4 GIT binary patch literal 53357 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 w!M9NGo0$c=1&K;PH&4nB1ol5q;nP0~F3GQUCw| literal 0 HcmV?d00001 diff --git a/sent_mails/static/scripts/openerp_mailgate.py b/sent_mails/static/scripts/openerp_mailgate.py new file mode 100755 index 000000000..dc570a7be --- /dev/null +++ b/sent_mails/static/scripts/openerp_mailgate.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +""" + openerp_mailgate.py +""" + +import cgitb +import time +import optparse +import sys +import xmlrpclib +import smtplib +from email.mime.multipart import MIMEMultipart +from email.mime.base import MIMEBase +from email.mime.text import MIMEText +from email.utils import COMMASPACE, formatdate +from email import Encoders + +class DefaultConfig(object): + """ + Default configuration + """ + OPENERP_DEFAULT_USER_ID = 1 + OPENERP_DEFAULT_PASSWORD = 'admin' + OPENERP_HOSTNAME = 'localhost' + OPENERP_PORT = 8069 + OPENERP_DEFAULT_DATABASE = 'openerp' + MAIL_ERROR = 'error@example.com' + MAIL_SERVER = 'smtp.example.com' + MAIL_SERVER_PORT = 25 + MAIL_ADMINS = ('info@example.com',) + +config = DefaultConfig() + + +def send_mail(_from_, to_, subject, text, files=None, server=config.MAIL_SERVER, port=config.MAIL_SERVER_PORT): + assert isinstance(to_, (list, tuple)) + + if files is None: + files = [] + + msg = MIMEMultipart() + msg['From'] = _from_ + msg['To'] = COMMASPACE.join(to_) + msg['Date'] = formatdate(localtime=True) + msg['Subject'] = subject + + msg.attach( MIMEText(text) ) + + for file_name, file_content in files: + part = MIMEBase('application', "octet-stream") + part.set_payload( file_content ) + Encoders.encode_base64(part) + part.add_header('Content-Disposition', 'attachment; filename="%s"' + % file_name) + msg.attach(part) + + smtp = smtplib.SMTP(server, port=port) + smtp.sendmail(_from_, to_, msg.as_string() ) + smtp.close() + +class RPCProxy(object): + def __init__(self, uid, passwd, + host=config.OPENERP_HOSTNAME, + port=config.OPENERP_PORT, + path='object', + dbname=config.OPENERP_DEFAULT_DATABASE): + self.rpc = xmlrpclib.ServerProxy('http://%s:%s/xmlrpc/%s' % (host, port, path), allow_none=True) + self.user_id = uid + self.passwd = passwd + self.dbname = dbname + + def __call__(self, *request, **kwargs): + return self.rpc.execute(self.dbname, self.user_id, self.passwd, *request, **kwargs) + +class EmailParser(object): + def __init__(self, uid, password, dbname, host, port, model=False, email_default=False): + self.rpc = RPCProxy(uid, password, host=host, port=port, dbname=dbname) + if model: + try: + self.model_id = int(model) + self.model = str(model) + except: + self.model_id = self.rpc('ir.model', 'search', [('model', '=', model)])[0] + self.model = str(model) + self.email_default = email_default + + + def parse(self, message, custom_values=None, save_original=None): + # pass message as bytes because we don't know its encoding until we parse its headers + # and hence can't convert it to utf-8 for transport + return self.rpc('mail.thread', + 'message_process', + self.model, + xmlrpclib.Binary(message), + custom_values or {}, + save_original or False) + +def configure_parser(): + parser = optparse.OptionParser(usage='usage: %prog [options]', version='%prog v1.1') + group = optparse.OptionGroup(parser, "Note", + "This program parse a mail from standard input and communicate " + "with the Odoo server for case management in the CRM module.") + parser.add_option_group(group) + parser.add_option("-u", "--user", dest="userid", + help="Odoo user id to connect with", + default=config.OPENERP_DEFAULT_USER_ID, type='int') + parser.add_option("-p", "--password", dest="password", + help="Odoo user password", + default=config.OPENERP_DEFAULT_PASSWORD) + parser.add_option("-o", "--model", dest="model", + help="Name or ID of destination model", + default="crm.lead") + parser.add_option("-m", "--default", dest="default", + help="Admin email for error notifications.", + default=None) + parser.add_option("-d", "--dbname", dest="dbname", + help="Odoo database name (default: %default)", + default=config.OPENERP_DEFAULT_DATABASE) + parser.add_option("--host", dest="host", + help="Odoo Server hostname", + default=config.OPENERP_HOSTNAME) + parser.add_option("--port", dest="port", + help="Odoo Server XML-RPC port number", + default=config.OPENERP_PORT) + parser.add_option("--custom-values", dest="custom_values", + help="Dictionary of extra values to pass when creating records", + default=None) + parser.add_option("-s", dest="save_original", + action="store_true", + help="Keep a full copy of the email source attached to each message", + default=False) + + return parser + +def main(): + """ + Receive the email via the stdin and send it to the OpenERP Server + """ + + parser = configure_parser() + (options, args) = parser.parse_args() + email_parser = EmailParser(options.userid, + options.password, + options.dbname, + options.host, + options.port, + model=options.model, + email_default= options.default) + msg_txt = sys.stdin.read() + custom_values = {} + try: + custom_values = dict(eval(options.custom_values or "{}" )) + except: + import traceback + traceback.print_exc() + + try: + email_parser.parse(msg_txt, custom_values, options.save_original or False) + except Exception: + msg = '\n'.join([ + 'parameters', + '==========', + '%r' % (options,), + 'traceback', + '=========', + '%s' % (cgitb.text(sys.exc_info())), + ]) + + subject = '[Odoo]:ERROR: Mailgateway - %s' % time.strftime('%Y-%m-%d %H:%M:%S') + send_mail( + config.MAIL_ERROR, + config.MAIL_ADMINS, + subject, msg, files=[('message.txt', msg_txt)] + ) + sys.stderr.write("Failed to deliver email to Odoo Server, sending error notification to %s\n" % config.MAIL_ADMINS) + +if __name__ == '__main__': + main() diff --git a/sent_mails/static/src/js/chat_manager_sent_mail.js b/sent_mails/static/src/js/chat_manager_sent_mail.js new file mode 100644 index 000000000..6c2cb8875 --- /dev/null +++ b/sent_mails/static/src/js/chat_manager_sent_mail.js @@ -0,0 +1,1100 @@ +odoo.define('mail.chat_manager', function (require) { +"use strict"; + +var bus = require('bus.bus').bus; +var config = require('web.config'); +var core = require('web.core'); +var data = require('web.data'); +var Model = require('web.Model'); +var session = require('web.session'); +var time = require('web.time'); +var web_client = require('web.web_client'); + +var _t = core._t; +var _lt = core._lt; +var LIMIT = 25; +var preview_msg_max_size = 350; // optimal for native english speakers + +var MessageModel = new Model('mail.message', session.user_context); +var ChannelModel = new Model('mail.channel', session.user_context); +var UserModel = new Model('res.users', session.user_context); +var PartnerModel = new Model('res.partner', session.user_context); + +// Private model +//---------------------------------------------------------------------------------- +var messages = []; +var channels = []; +var channels_preview_def; +var channel_defs = {}; +var chat_unread_counter = 0; +var unread_conversation_counter = 0; +var emojis = []; +var emoji_substitutions = {}; +var needaction_counter = 0; +var mention_partner_suggestions = []; +var discuss_ids = {}; +var global_unread_counter = 0; +var pinned_dm_partners = []; // partner_ids we have a pinned DM with +var client_action_open = false; + +// Utils: Window focus/unfocus, beep, tab title, parsing html strings +//---------------------------------------------------------------------------------- +var beep = (function () { + if (typeof(Audio) === "undefined") { + return function () {}; + } + var audio = new Audio(); + var ext = audio.canPlayType("audio/ogg; codecs=vorbis") ? ".ogg" : ".mp3"; + audio.src = session.url("/mail/static/src/audio/ting" + ext); + return function () { audio.play(); }; +})(); + +bus.on("window_focus", null, function() { + global_unread_counter = 0; + web_client.set_title_part("_chat"); +}); + +// to do: move this to mail.utils +function send_native_notification(title, content) { + var notification = new Notification(title, {body: content, icon: "/mail/static/src/img/odoo_o.png"}); + notification.onclick = function (e) { + window.focus(); + if (this.cancel) { + this.cancel(); + } else if (this.close) { + this.close(); + } + }; +} + +function notify_incoming_message (msg, options) { + if (bus.is_odoo_focused() && options.is_displayed) { + // no need to notify + return; + } + var title = _t('New message'); + if (msg.author_id[1]) { + title = _.escape(msg.author_id[1]); + } + var content = parse_and_transform(msg.body, strip_html).substr(0, preview_msg_max_size); + + if (!bus.is_odoo_focused()) { + global_unread_counter++; + var tab_title = _.str.sprintf(_t("%d Messages"), global_unread_counter); + web_client.set_title_part("_chat", tab_title); + } + + if (window.Notification && Notification.permission === "granted") { + if (bus.is_master) { + send_native_notification(title, content); + } + } else { + web_client.do_notify(title, content); + if (bus.is_master) { + beep(); + } + } +} + +function parse_and_transform(html_string, transform_function) { + var open_token = "OPEN" + Date.now(); + var string = html_string.replace(/</g, open_token); + var children = $('
').html(string).contents(); + return _parse_and_transform(children, transform_function) + .replace(new RegExp(open_token, "g"), "<"); +} + +function _parse_and_transform(nodes, transform_function) { + return _.map(nodes, function (node) { + return transform_function(node, function () { + return _parse_and_transform(node.childNodes, transform_function); + }); + }).join(""); +} + +// suggested regexp (gruber url matching regexp, adapted to js, see https://gist.github.com/gruber/8891611) +var url_regexp = /\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi; +function add_link (node, transform_children) { + if (node.nodeType === 3) { // text node + return node.data.replace(url_regexp, function (url) { + var href = (!/^(f|ht)tps?:\/\//i.test(url)) ? "http://" + url : url; + return '' + url + ''; + }); + } + if (node.tagName === "A") return node.outerHTML; + node.innerHTML = transform_children(); + return node.outerHTML; +} + +function strip_html (node, transform_children) { + if (node.nodeType === 3) return node.data; // text node + if (node.tagName === "BR") return "\n"; + return transform_children(); +} + +function inline (node, transform_children) { + if (node.nodeType === 3) return node.data; + if (node.tagName === "BR") return " "; + if (node.tagName.match(/^(A|P|DIV|PRE|BLOCKQUOTE)$/)) return transform_children(); + node.innerHTML = transform_children(); + return node.outerHTML; +} + +// Message and channel manipulation helpers +//---------------------------------------------------------------------------------- + +// options: channel_id, silent +function add_message (data, options) { + options = options || {}; + var msg = _.findWhere(messages, { id: data.id }); + if (!msg) { + msg = chat_manager.make_message(data); + // Keep the array ordered by id when inserting the new message + messages.splice(_.sortedIndex(messages, msg, 'id'), 0, msg); + _.each(msg.channel_ids, function (channel_id) { + var channel = chat_manager.get_channel(channel_id); + if (channel) { + add_to_cache(msg, []); + if (options.domain && options.domain !== []) { + add_to_cache(msg, options.domain); + } + if (channel.hidden) { + channel.hidden = false; + chat_manager.bus.trigger('new_channel', channel); + } + if (channel.type !== 'static' && !msg.is_author && !msg.is_system_notification) { + if (options.increment_unread) { + update_channel_unread_counter(channel, channel.unread_counter+1); + } + if (channel.is_chat && options.show_notification) { + if (!client_action_open && config.device.size_class !== config.device.SIZES.XS) { + // automatically open chat window + chat_manager.bus.trigger('open_chat', channel, { passively: true }); + } + var query = {is_displayed: false}; + chat_manager.bus.trigger('anyone_listening', channel, query); + notify_incoming_message(msg, query); + } + } + } + }); + if (!options.silent) { + chat_manager.bus.trigger('new_message', msg); + } + } else if (options.domain && options.domain !== []) { + add_to_cache(msg, options.domain); + } + return msg; +} + +function make_message (data) { + var msg = { + id: data.id, + author_id: data.author_id, + body_short: data.body_short || "", + body: data.body || "", + date: moment(time.str_to_datetime(data.date)), + message_type: data.message_type, + subtype_description: data.subtype_description, + is_author: data.author_id && data.author_id[0] === session.partner_id, + is_note: data.is_note, + is_system_notification: data.message_type === 'notification' && data.model === 'mail.channel', + attachment_ids: data.attachment_ids, + subject: data.subject, + email_from: data.email_from, + record_name: data.record_name, + tracking_value_ids: data.tracking_value_ids, + channel_ids: data.channel_ids, + model: data.model, + res_id: data.res_id, + url: session.url("/mail/view?message_id=" + data.id), + }; + + _.each(_.keys(emoji_substitutions), function (key) { + var escaped_key = String(key).replace(/([.*+?=^!:${}()|[\]\/\\])/g, '\\$1'); + var regexp = new RegExp("(?:^|\\s|<[a-z]*>)(" + escaped_key + ")(?=\\s|$|)", "g"); + msg.body = msg.body.replace(regexp, ' '+emoji_substitutions[key]+' '); + }); + + function property_descr(channel) { + return { + enumerable: true, + get: function () { + return _.contains(msg.channel_ids, channel); + }, + set: function (bool) { + if (bool) { + add_channel_to_message(msg, channel); + } else { + msg.channel_ids = _.without(msg.channel_ids, channel); + } + } + }; + } + Object.defineProperties(msg, { + is_sent: property_descr("channel_sent"), + is_starred: property_descr("channel_starred"), + is_needaction: property_descr("channel_inbox"), + }); + + if (_.contains(data.needaction_partner_ids, session.partner_id)) { + msg.is_needaction = true; + } + if (_.contains(data.starred_partner_ids, session.partner_id)) { + msg.is_starred = true; + } + if (_.contains(data.author_id, session.partner_id)) { + msg.is_sent = true; + } + if (msg.model === 'mail.channel') { + var real_channels = _.without(msg.channel_ids, 'channel_inbox', 'channel_starred', 'channel_sent'); + var origin = real_channels.length === 1 ? real_channels[0] : undefined; + var channel = origin && chat_manager.get_channel(origin); + if (channel) { + msg.origin_id = origin; + msg.origin_name = channel.name; + } + } + + // Compute displayed author name or email + if ((!msg.author_id || !msg.author_id[0]) && msg.email_from) { + msg.mailto = msg.email_from; + } else { + msg.displayed_author = msg.author_id && msg.author_id[1] || + msg.email_from || _t('Anonymous'); + } + + // Don't redirect on author clicked of self-posted messages + msg.author_redirect = !msg.is_author; + + // Compute the avatar_url + if (msg.author_id && msg.author_id[0]) { + msg.avatar_src = "/web/image/res.partner/" + msg.author_id[0] + "/image_small"; + } else if (msg.message_type === 'email') { + msg.avatar_src = "/mail/static/src/img/email_icon.png"; + } else { + msg.avatar_src = "/mail/static/src/img/smiley/avatar.jpg"; + } + + // add anchor tags to urls + msg.body = parse_and_transform(msg.body, add_link); + + // Compute url of attachments + _.each(msg.attachment_ids, function(a) { + a.url = '/web/content/' + a.id + '?download=true'; + }); + + // format date to the local only once by message + // can not be done in preprocess, since it alter the original value + if (msg.tracking_value_ids && msg.tracking_value_ids.length) { + _.each(msg.tracking_value_ids, function(f) { + if (_.contains(['date', 'datetime'], f.field_type)) { + var format = (f.field_type === 'date') ? 'LL' : 'LLL'; + if (f.old_value) { + f.old_value = moment.utc(f.old_value).local().format(format); + } + if (f.new_value) { + f.new_value = moment.utc(f.new_value).local().format(format); + } + } + }); + } + + return msg; +} + +function add_channel_to_message (message, channel_id) { + message.channel_ids.push(channel_id); + message.channel_ids = _.uniq(message.channel_ids); +} + +function add_channel (data, options) { + options = typeof options === "object" ? options : {}; + var channel = chat_manager.get_channel(data.id); + if (channel) { + if (channel.is_folded !== (data.state === "folded")) { + channel.is_folded = (data.state === "folded"); + chat_manager.bus.trigger("channel_toggle_fold", channel); + } + } else { + channel = chat_manager.make_channel(data, options); + channels.push(channel); + // In case of a static channel (Inbox, Starred), the name is translated thanks to _lt + // (lazy translate). In this case, channel.name is an object, not a string. + channels = _.sortBy(channels, function (channel) { return _.isString(channel.name) ? channel.name.toLowerCase() : '' }); + if (!options.silent) { + chat_manager.bus.trigger("new_channel", channel); + } + if (channel.is_detached) { + chat_manager.bus.trigger("open_chat", channel); + } + } + return channel; +} + +function make_channel (data, options) { + var channel = { + id: data.id, + name: data.name, + type: data.type || data.channel_type, + all_history_loaded: false, + uuid: data.uuid, + is_detached: data.is_minimized, + is_folded: data.state === "folded", + autoswitch: 'autoswitch' in options ? options.autoswitch : true, + hidden: options.hidden, + display_needactions: options.display_needactions, + mass_mailing: data.mass_mailing, + needaction_counter: data.message_needaction_counter || 0, + unread_counter: 0, + last_seen_message_id: data.seen_message_id, + cache: {'[]': { + all_history_loaded: false, + loaded: false, + messages: [], + }}, + }; + if (channel.type === "channel") { + channel.type = data.public !== "private" ? "public" : "private"; + } + if (_.size(data.direct_partner) > 0) { + channel.type = "dm"; + channel.name = data.direct_partner[0].name; + channel.direct_partner_id = data.direct_partner[0].id; + channel.status = data.direct_partner[0].im_status; + pinned_dm_partners.push(channel.direct_partner_id); + bus.update_option('bus_presence_partner_ids', pinned_dm_partners); + } else if ('anonymous_name' in data) { + channel.name = data.anonymous_name; + } + channel.is_chat = !channel.type.match(/^(public|private|static)$/); + if (data.message_unread_counter) { + update_channel_unread_counter(channel, data.message_unread_counter); + } + return channel; +} + +function remove_channel (channel) { + if (!channel) { return; } + if (channel.type === 'dm') { + var index = pinned_dm_partners.indexOf(channel.direct_partner_id); + if (index > -1) { + pinned_dm_partners.splice(index, 1); + bus.update_option('bus_presence_partner_ids', pinned_dm_partners); + } + } + channels = _.without(channels, channel); + delete channel_defs[channel.id]; +} + +function get_channel_cache (channel, domain) { + var stringified_domain = JSON.stringify(domain || []); + if (!channel.cache[stringified_domain]) { + channel.cache[stringified_domain] = { + all_history_loaded: false, + loaded: false, + messages: [], + }; + } + return channel.cache[stringified_domain]; +} + +function invalidate_caches(channel_ids) { + _.each(channel_ids, function (channel_id) { + var channel = chat_manager.get_channel(channel_id); + if (channel) { + channel.cache = { '[]': channel.cache['[]']}; + } + }); +} + +function add_to_cache(message, domain) { + _.each(message.channel_ids, function (channel_id) { + var channel = chat_manager.get_channel(channel_id); + if (channel) { + var channel_cache = get_channel_cache(channel, domain); + var index = _.sortedIndex(channel_cache.messages, message, 'id'); + if (channel_cache.messages[index] !== message) { + channel_cache.messages.splice(index, 0, message); + } + } + }); +} + +function remove_message_from_channel (channel_id, message) { + message.channel_ids = _.without(message.channel_ids, channel_id); + var channel = _.findWhere(channels, { id: channel_id }); + _.each(channel.cache, function (cache) { + cache.messages = _.without(cache.messages, message); + }); +} +// options: domain, load_more +function fetch_from_channel (channel, options) { + options = options || {}; + var domain = + (channel.id === "channel_inbox") ? [['needaction', '=', true]] : + (channel.id === "channel_sent") ? [['subtype_id', '=', 'Discussions']] : + (channel.id === "channel_starred") ? [['starred', '=', true]] : + [['channel_ids', 'in', channel.id]]; + var cache = get_channel_cache(channel, options.domain); + + if (options.domain) { + domain = new data.CompoundDomain(domain, options.domain || []); + } + if (options.load_more) { + var min_message_id = cache.messages[0].id; + domain = new data.CompoundDomain([['id', '<', min_message_id]], domain); + } + + return MessageModel.call('message_fetch', [domain], {limit: LIMIT, context: session.user_context}).then(function (msgs) { + if (!cache.all_history_loaded) { + cache.all_history_loaded = msgs.length < LIMIT; + } + cache.loaded = true; + + _.each(msgs, function (msg) { + add_message(msg, {channel_id: channel.id, silent: true, domain: options.domain}); + }); + var channel_cache = get_channel_cache(channel, options.domain || []); + return channel_cache.messages; + }); +} + +// options: force_fetch +function fetch_document_messages (ids, options) { + var loaded_msgs = _.filter(messages, function (message) { + return _.contains(ids, message.id); + }); + var loaded_msg_ids = _.pluck(loaded_msgs, 'id'); + + options = options || {}; + if (options.force_fetch || _.difference(ids.slice(0, LIMIT), loaded_msg_ids).length) { + var ids_to_load = _.difference(ids, loaded_msg_ids).slice(0, LIMIT); + + return MessageModel.call('message_format', [ids_to_load], {context: session.user_context}).then(function (msgs) { + var processed_msgs = []; + _.each(msgs, function (msg) { + processed_msgs.push(add_message(msg, {silent: true})); + }); + return _.sortBy(loaded_msgs.concat(processed_msgs), function (msg) { + return msg.id; + }); + }); + } else { + return $.when(loaded_msgs); + } +} + +function update_channel_unread_counter (channel, counter) { + if (channel.unread_counter > 0 && counter === 0) { + unread_conversation_counter = Math.max(0, unread_conversation_counter-1); + } else if (channel.unread_counter === 0 && counter > 0) { + unread_conversation_counter++; + } + if (channel.is_chat) { + chat_unread_counter = Math.max(0, chat_unread_counter - channel.unread_counter + counter); + } + channel.unread_counter = counter; + chat_manager.bus.trigger("update_channel_unread_counter", channel); +} + +var channel_seen = _.throttle(function (channel) { + return ChannelModel.call('channel_seen', [[channel.id]], {}, {shadow: true}); +}, 3000); + +// Notification handlers +// --------------------------------------------------------------------------------- +function on_notification (notifications) { + // sometimes, the web client receives unsubscribe notification and an extra + // notification on that channel. This is then followed by an attempt to + // rejoin the channel that we just left. The next few lines remove the + // extra notification to prevent that situation to occur. + var unsubscribed_notif = _.find(notifications, function (notif) { + return notif[1].info === "unsubscribe"; + }); + if (unsubscribed_notif) { + notifications = _.reject(notifications, function (notif) { + return notif[0][1] === "mail.channel" && notif[0][2] === unsubscribed_notif[1].id; + }); + } + _.each(notifications, function (notification) { + var model = notification[0][1]; + if (model === 'ir.needaction') { + // new message in the inbox + on_needaction_notification(notification[1]); + } else if (model === 'mail.channel') { + // new message in a channel + on_channel_notification(notification[1]); + } else if (model === 'res.partner') { + // channel joined/left, message marked as read/(un)starred, chat open/closed + on_partner_notification(notification[1]); + } else if (model === 'bus.presence') { + // update presence of users + on_presence_notification(notification[1]); + } + }); +} + +function on_needaction_notification (message) { + message = add_message(message, { + channel_id: 'channel_inbox', + show_notification: true, + increment_unread: true, + }); + invalidate_caches(message.channel_ids); + needaction_counter++; + _.each(message.channel_ids, function (channel_id) { + var channel = chat_manager.get_channel(channel_id); + if (channel) { + channel.needaction_counter++; + } + }); + chat_manager.bus.trigger('update_needaction', needaction_counter); +} + +function on_channel_notification (message) { + var def; + var channel_already_in_cache = true; + if (message.channel_ids.length === 1) { + channel_already_in_cache = !!chat_manager.get_channel(message.channel_ids[0]); + def = chat_manager.join_channel(message.channel_ids[0], {autoswitch: false}); + } else { + def = $.when(); + } + def.then(function () { + // don't increment unread if channel wasn't in cache yet as its unread counter has just been fetched + add_message(message, { show_notification: true, increment_unread: channel_already_in_cache }); + invalidate_caches(message.channel_ids); + }); +} + +function on_partner_notification (data) { + if (data.info === "unsubscribe") { + remove_channel(chat_manager.get_channel(data.id)); + chat_manager.bus.trigger("unsubscribe_from_channel", data.id); + } else if (data.type === 'toggle_star') { + on_toggle_star_notification(data); + } else if (data.type === 'mark_as_read') { + on_mark_as_read_notification(data); + } else if (data.type === 'mark_as_unread') { + on_mark_as_unread_notification(data); + } else if (data.info === 'channel_seen') { + on_channel_seen_notification(data); + } else { + on_chat_session_notification(data); + } +} + +function on_toggle_star_notification (data) { + _.each(data.message_ids, function (msg_id) { + var message = _.findWhere(messages, { id: msg_id }); + if (message) { + invalidate_caches(message.channel_ids); + message.is_starred = data.starred; + if (!message.is_starred) { + remove_message_from_channel("channel_starred", message); + } else { + add_to_cache(message, []); + var channel_starred = chat_manager.get_channel('channel_starred'); + channel_starred.cache = _.pick(channel_starred.cache, "[]"); + } + chat_manager.bus.trigger('update_message', message); + } + }); +} + +function on_mark_as_read_notification (data) { + _.each(data.message_ids, function (msg_id) { + var message = _.findWhere(messages, { id: msg_id }); + if (message) { + invalidate_caches(message.channel_ids); + remove_message_from_channel("channel_inbox", message); + chat_manager.bus.trigger('update_message', message); + } + }); + if (data.channel_ids) { + _.each(data.channel_ids, function (channel_id) { + var channel = chat_manager.get_channel(channel_id); + if (channel) { + channel.needaction_counter = Math.max(channel.needaction_counter - data.message_ids.length, 0); + } + }); + } else { // if no channel_ids specified, this is a 'mark all read' in the inbox + _.each(channels, function (channel) { + channel.needaction_counter = 0; + }); + } + needaction_counter = Math.max(needaction_counter - data.message_ids.length, 0); + chat_manager.bus.trigger('update_needaction', needaction_counter); +} + +function on_mark_as_unread_notification (data) { + _.each(data.message_ids, function (message_id) { + var message = _.findWhere(messages, { id: message_id }); + if (message) { + invalidate_caches(message.channel_ids); + add_channel_to_message(message, 'channel_inbox'); + add_to_cache(message, []); + } + }); + var channel_inbox = chat_manager.get_channel('channel_inbox'); + channel_inbox.cache = _.pick(channel_inbox.cache, "[]"); + + _.each(data.channel_ids, function (channel_id) { + var channel = chat_manager.get_channel(channel_id); + if (channel) { + channel.needaction_counter += data.message_ids.length; + } + }); + needaction_counter += data.message_ids.length; + chat_manager.bus.trigger('update_needaction', needaction_counter); +} + +function on_channel_seen_notification (data) { + var channel = chat_manager.get_channel(data.id); + if (channel) { + channel.last_seen_message_id = data.last_message_id; + if (channel.unread_counter) { + update_channel_unread_counter(channel, 0); + } + } +} + +function on_chat_session_notification (chat_session) { + var channel; + if ((chat_session.channel_type === "channel") && (chat_session.state === "open")) { + add_channel(chat_session, {autoswitch: false}); + if (!chat_session.is_minimized && chat_session.info !== 'creation') { + web_client.do_notify(_t("Invitation"), _t("You have been invited to: ") + chat_session.name); + } + } + // partner specific change (open a detached window for example) + if ((chat_session.state === "open") || (chat_session.state === "folded")) { + channel = chat_session.is_minimized && chat_manager.get_channel(chat_session.id); + if (channel) { + channel.is_detached = true; + channel.is_folded = (chat_session.state === "folded"); + chat_manager.bus.trigger("open_chat", channel); + } + } else if (chat_session.state === "closed") { + channel = chat_manager.get_channel(chat_session.id); + if (channel) { + channel.is_detached = false; + chat_manager.bus.trigger("close_chat", channel, {keep_open_if_unread: true}); + } + } +} + +function on_presence_notification (data) { + var dm = chat_manager.get_dm_from_partner_id(data.id); + if (dm) { + dm.status = data.im_status; + chat_manager.bus.trigger('update_dm_presence', dm); + } +} + +// Public interface +//---------------------------------------------------------------------------------- +var chat_manager = { + // these two functions are exposed for extensibility purposes and shouldn't be called by other modules + make_message: make_message, + make_channel: make_channel, + + post_message: function (data, options) { + options = options || {}; + var msg = { + partner_ids: data.partner_ids, + body: _.str.trim(data.content), + attachment_ids: data.attachment_ids, + }; + if ('subject' in data) { + msg.subject = data.subject; + } + if ('channel_id' in options) { + // post a message in a channel + return ChannelModel.call('message_post', [options.channel_id], _.extend(msg, { + message_type: 'comment', + content_subtype: 'html', + subtype: 'mail.mt_comment', + })); + } + if ('model' in options && 'res_id' in options) { + // post a message in a chatter + _.extend(msg, { + content_subtype: data.content_subtype, + context: data.context, + message_type: data.message_type, + subtype: data.subtype, + subtype_id: data.subtype_id, + }); + + var model = new Model(options.model); + return model.call('message_post', [options.res_id], msg).then(function (msg_id) { + return MessageModel.call('message_format', [msg_id]).then(function (msgs) { + msgs[0].model = options.model; + msgs[0].res_id = options.res_id; + add_message(msgs[0]); + }); + }); + } + }, + + get_message: function (id) { + return _.findWhere(messages, {id: id}); + }, + get_messages: function (options) { + var channel; + + if ('channel_id' in options && options.load_more) { + // get channel messages, force load_more + channel = this.get_channel(options.channel_id); + return fetch_from_channel(channel, {domain: options.domain || {}, load_more: true}); + } + if ('channel_id' in options) { + // channel message, check in cache first + channel = this.get_channel(options.channel_id); + var channel_cache = get_channel_cache(channel, options.domain); + if (channel_cache.loaded) { + return $.when(channel_cache.messages); + } else { + return fetch_from_channel(channel, {domain: options.domain}); + } + } + if ('ids' in options) { + // get messages from their ids (chatter is the main use case) + return fetch_document_messages(options.ids, options).then(function(result) { + chat_manager.mark_as_read(options.ids); + return result; + }); + } + if ('model' in options && 'res_id' in options) { + // get messages for a chatter, when it doesn't know the ids (use + // case is when using the full composer) + var domain = [['model', '=', options.model], ['res_id', '=', options.res_id]]; + MessageModel.call('message_fetch', [domain], {limit: 30}).then(function (msgs) { + return _.map(msgs, add_message); + }); + } + }, + toggle_star_status: function (message_id) { + var msg = _.findWhere(messages, { id: message_id }); + + return MessageModel.call('set_message_starred', [[message_id], !msg.is_starred]); + }, + unstar_all: function () { + return MessageModel.call('unstar_all', [[]], {}); + }, + mark_as_read: function (message_ids) { + var ids = _.filter(message_ids, function (id) { + var message = _.findWhere(messages, {id: id}); + // If too many messages, not all are fetched, and some might not be found + return !message || message.is_needaction; + }); + if (ids.length) { + return MessageModel.call('set_message_done', [ids]); + } else { + return $.when(); + } + }, + mark_all_as_read: function (channel, domain) { + if ((channel.id === "channel_inbox" && needaction_counter) || (channel && channel.needaction_counter)) { + return MessageModel.call('mark_all_as_read', [], {channel_ids: channel.id !== "channel_inbox" ? [channel.id] : [], domain: domain}); + } + return $.when(); + }, + undo_mark_as_read: function (message_ids, channel) { + return MessageModel.call('mark_as_unread', [message_ids, [channel.id]]); + }, + mark_channel_as_seen: function (channel) { + if (channel.unread_counter > 0 && channel.type !== 'static') { + update_channel_unread_counter(channel, 0); + channel_seen(channel); + } + }, + + get_channels: function () { + return _.clone(channels); + }, + + get_channel: function (id) { + return _.findWhere(channels, {id: id}); + }, + + get_dm_from_partner_id: function (partner_id) { + return _.findWhere(channels, {direct_partner_id: partner_id}); + }, + + all_history_loaded: function (channel, domain) { + return get_channel_cache(channel, domain).all_history_loaded; + }, + + get_mention_partner_suggestions: function (channel) { + if (!channel) { + return mention_partner_suggestions; + } + if (!channel.members_deferred) { + channel.members_deferred = ChannelModel + .call("channel_fetch_listeners", [channel.uuid], {}, {shadow: true}) + .then(function (members) { + var suggestions = []; + _.each(mention_partner_suggestions, function (partners) { + suggestions.push(_.filter(partners, function (partner) { + return !_.findWhere(members, { id: partner.id }); + })); + }); + + return [members]; + }); + } + return channel.members_deferred; + }, + + get_emojis: function() { + return emojis; + }, + + get_needaction_counter: function () { + return needaction_counter; + }, + get_chat_unread_counter: function () { + return chat_unread_counter; + }, + get_unread_conversation_counter: function () { + return unread_conversation_counter; + }, + + get_last_seen_message: function (channel) { + if (channel.last_seen_message_id) { + var messages = channel.cache['[]'].messages; + var msg = _.findWhere(messages, {id: channel.last_seen_message_id}); + if (msg) { + var i = _.sortedIndex(messages, msg, 'id') + 1; + while (i < messages.length && (messages[i].is_author || messages[i].is_system_notification)) { + msg = messages[i]; + i++; + } + return msg; + } + } + }, + + get_discuss_ids: function () { + return discuss_ids; + }, + + detach_channel: function (channel) { + return ChannelModel.call("channel_minimize", [channel.uuid, true], {}, {shadow: true}); + }, + remove_chatter_messages: function (model) { + messages = _.reject(messages, function (message) { + return message.channel_ids.length === 0 && message.model === model; + }); + }, + bus: new core.Bus(), + + create_channel: function (name, type) { + var method = type === "dm" ? "channel_get" : "channel_create"; + var args = type === "dm" ? [[name]] : [name, type]; + + return ChannelModel + .call(method, args) + .then(add_channel); + }, + join_channel: function (channel_id, options) { + if (channel_id in channel_defs) { + // prevents concurrent calls to channel_join_and_get_info + return channel_defs[channel_id]; + } + var channel = this.get_channel(channel_id); + if (channel) { + // channel already joined + channel_defs[channel_id] = $.when(channel); + } else { + channel_defs[channel_id] = ChannelModel + .call('channel_join_and_get_info', [[channel_id]]) + .then(function (result) { + return add_channel(result, options); + }); + } + return channel_defs[channel_id]; + }, + open_and_detach_dm: function (partner_id) { + return ChannelModel.call('channel_get_and_minimize', [[partner_id]]).then(add_channel); + }, + open_channel: function (channel) { + chat_manager.bus.trigger(client_action_open ? 'open_channel' : 'detach_channel', channel); + }, + + unsubscribe: function (channel) { + var def; + if (_.contains(['public', 'private'], channel.type)) { + def = ChannelModel.call('action_unfollow', [[channel.id]]); + } else { + def = ChannelModel.call('channel_pin', [channel.uuid, false]); + } + return def.then(function () { + remove_channel(channel); + }); + }, + close_chat_session: function (channel_id) { + var channel = this.get_channel(channel_id); + ChannelModel.call("channel_fold", [], {uuid : channel.uuid, state : "closed"}, {shadow: true}); + }, + fold_channel: function (channel_id, folded) { + var args = { + uuid: this.get_channel(channel_id).uuid, + }; + if (_.isBoolean(folded)) { + args.state = folded ? 'folded' : 'open'; + } + return ChannelModel.call("channel_fold", [], args, {shadow: true}); + }, + /** + * Special redirection handling for given model and id + * + * If the model is res.partner, and there is a user associated with this + * partner which isn't the current user, open the DM with this user. + * Otherwhise, open the record's form view, if this is not the current user's. + */ + redirect: function (res_model, res_id, dm_redirection_callback) { + var self = this; + var redirect_to_document = function (res_model, res_id, view_id) { + web_client.do_action({ + type:'ir.actions.act_window', + view_type: 'form', + view_mode: 'form', + res_model: res_model, + views: [[view_id || false, 'form']], + res_id: res_id, + }); + }; + if (res_model === "res.partner") { + var domain = [["partner_id", "=", res_id]]; + UserModel.call("search", [domain]).then(function (user_ids) { + if (user_ids.length && user_ids[0] !== session.uid) { + self.create_channel(res_id, 'dm').then(dm_redirection_callback || function () {}); + } else if (!user_ids.length) { + redirect_to_document(res_model, res_id); + } + }); + } else { + new Model(res_model).call('get_formview_id', [res_id, session.user_context]).then(function (view_id) { + redirect_to_document(res_model, res_id, view_id); + }); + } + }, + + get_channels_preview: function (channels) { + var channels_preview = _.map(channels, function (channel) { + var info = _.pick(channel, 'id', 'is_chat', 'name', 'status', 'unread_counter'); + info.last_message = _.last(channel.cache['[]'].messages); + if (!info.is_chat) { + info.image_src = '/web/image/mail.channel/'+channel.id+'/image_small'; + } else if (channel.direct_partner_id) { + info.image_src = '/web/image/res.partner/'+channel.direct_partner_id+'/image_small'; + } else { + info.image_src = '/mail/static/src/img/smiley/avatar.jpg'; + } + return info; + }); + var missing_channels = _.where(channels_preview, {last_message: undefined}); + if (!channels_preview_def) { + if (missing_channels.length) { + var missing_channel_ids = _.pluck(missing_channels, 'id'); + channels_preview_def = ChannelModel.call('channel_fetch_preview', [missing_channel_ids], {}, {shadow: true}); + } else { + channels_preview_def = $.when(); + } + } + return channels_preview_def.then(function (channels) { + _.each(missing_channels, function (channel_preview) { + var channel = _.findWhere(channels, {id: channel_preview.id}); + if (channel) { + channel_preview.last_message = add_message(channel.last_message); + } + }); + return _.filter(channels_preview, function (channel) { + return channel.last_message; // remove empty channels + }); + }); + }, + get_message_body_preview: function (message_body) { + return parse_and_transform(message_body, inline); + }, + + search_partner: function (search_val, limit) { + return PartnerModel.call('im_search', [search_val, limit || 20], {}, {shadow: true}).then(function(result) { + var values = []; + _.each(result, function(user) { + var escaped_name = _.escape(user.name); + values.push(_.extend(user, { + 'value': escaped_name, + 'label': escaped_name, + })); + }); + return values; + }); + }, + + send_native_notification: send_native_notification, +}; + +chat_manager.bus.on('client_action_open', null, function (open) { + client_action_open = open; +}); + +// Initialization +// --------------------------------------------------------------------------------- +function init () { + add_channel({ + id: "channel_inbox", + name: _lt("Inbox"), + type: "static", + }, { display_needactions: true }); + + add_channel({ + id: "channel_starred", + name: _lt("Starred"), + type: "static" + }); + add_channel({ + id: "channel_sent", + name: _lt("Sent"), + type: "static" + }); //*** + + var load_channels = session.rpc('/mail/client_action').then(function (result) { + _.each(result.channel_slots, function (channels) { + _.each(channels, add_channel); + }); + needaction_counter = result.needaction_inbox_counter; + mention_partner_suggestions = result.mention_partner_suggestions; + }); + + var load_emojis = session.rpc("/mail/chat_init").then(function (result) { + emojis = result.emoji; + _.each(emojis, function(emoji) { + emoji_substitutions[_.escape(emoji.source)] = emoji.substitution; + }); + }); + + var ir_model = new Model("ir.model.data"); + var load_menu_id = ir_model.call("xmlid_to_res_id", ["mail.mail_channel_menu_root_chat"], {}, {shadow: true}); + var load_action_id = ir_model.call("xmlid_to_res_id", ["mail.mail_channel_action_client_chat"], {}, {shadow: true}); + + bus.on('notification', null, on_notification); + + return $.when(load_menu_id, load_action_id, load_channels, load_emojis).then(function (menu_id, action_id) { + discuss_ids = { + menu_id: menu_id, + action_id: action_id, + }; + bus.start_polling(); + }); +} + +chat_manager.is_ready = init(); + +return chat_manager; + +}); diff --git a/sent_mails/static/src/js/client_action_sent_mail.js b/sent_mails/static/src/js/client_action_sent_mail.js new file mode 100644 index 000000000..5b00646ed --- /dev/null +++ b/sent_mails/static/src/js/client_action_sent_mail.js @@ -0,0 +1,666 @@ +odoo.define('mail.chat_client_action', function (require) { +"use strict"; + +var chat_manager = require('mail.chat_manager'); +var composer = require('mail.composer'); +var ChatThread = require('mail.ChatThread'); + +var config = require('web.config'); +var ControlPanelMixin = require('web.ControlPanelMixin'); +var core = require('web.core'); +var data = require('web.data'); +var Dialog = require('web.Dialog'); +var framework = require('web.framework'); +var Model = require('web.Model'); + +var pyeval = require('web.pyeval'); +var SearchView = require('web.SearchView'); +var Widget = require('web.Widget'); + +var QWeb = core.qweb; +var _t = core._t; + +/** + * Widget : Invite People to Channel Dialog + * + * Popup containing a 'many2many_tags' custom input to select multiple partners. + * Search user according to the input, and trigger event when selection is validated. + **/ +var PartnerInviteDialog = Dialog.extend({ + dialog_title: _t('Invite people'), + template: "mail.PartnerInviteDialog", + init: function(parent, title, channel_id){ + this.channel_id = channel_id; + + this._super(parent, { + title: title, + size: "medium", + buttons: [{ + text: _t("Invite"), + close: true, + classes: "btn-primary", + click: _.bind(this.on_click_add, this), + }], + }); + this.PartnersModel = new Model('res.partner'); + }, + start: function(){ + var self = this; + this.$input = this.$('.o_mail_chat_partner_invite_input'); + this.$input.select2({ + width: '100%', + allowClear: true, + multiple: true, + formatResult: function(item) { + var status = QWeb.render('mail.chat.UserStatus', {status: item.im_status}); + return $('').text(item.text).prepend(status); + }, + query: function (query) { + self.PartnersModel.call('im_search', [query.term, 20]).then(function(result){ + var data = []; + _.each(result, function(partner){ + partner.text = partner.name; + data.push(partner); + }); + query.callback({results: data}); + }); + } + }); + return this._super.apply(this, arguments); + }, + on_click_add: function(){ + var self = this; + var data = this.$input.select2('data'); + if(data.length >= 1){ + var ChannelModel = new Model('mail.channel'); + return ChannelModel.call('channel_invite', [], {ids : [this.channel_id], partner_ids: _.pluck(data, 'id')}) + .then(function(){ + var names = _.escape(_.pluck(data, 'text').join(', ')); + var notification = _.str.sprintf(_t('You added %s to the conversation.'), names); + self.do_notify(_t('New people'), notification); + }); + } + }, +}); + +var ChatAction = Widget.extend(ControlPanelMixin, { + template: 'mail.client_action', + + events: { + "click .o_mail_chat_channel_item": function (event) { + event.preventDefault(); + var channel_id = this.$(event.currentTarget).data('channel-id'); + this.set_channel(chat_manager.get_channel(channel_id)); + }, + "click .o_mail_sidebar_title .o_add": function (event) { + event.preventDefault(); + var type = $(event.target).data("type"); + this.$('.o_mail_add_channel[data-type=' + type + ']') + .show() + .find("input").focus(); + }, + "blur .o_mail_add_channel input": function () { + this.$('.o_mail_add_channel') + .hide(); + }, + "click .o_mail_partner_unpin": function (event) { + event.stopPropagation(); + var channel_id = $(event.target).data("channel-id"); + this.unsubscribe_from_channel(chat_manager.get_channel(channel_id)); + }, + "click .o_snackbar_undo": function (event) { + event.preventDefault(); + var channel = this.channel; + this.$snackbar.remove(); + this.clear_needactions_def.then(function (msgs_ids) { + chat_manager.undo_mark_as_read(msgs_ids, channel); + }); + }, + "click .o_mail_annoying_notification_bar .fa-close": function () { + this.$(".o_mail_annoying_notification_bar").slideUp(); + }, + "click .o_mail_request_permission": function (event) { + event.preventDefault(); + this.$(".o_mail_annoying_notification_bar").slideUp(); + var def = window.Notification.requestPermission(); + if (def) { + def.then(function () { + chat_manager.send_native_notification('Permission granted', 'Odoo has now the permission to send you native notifications on this device.'); + }); + } + }, + "keydown": function (event) { + if (event.which === $.ui.keyCode.ESCAPE && this.selected_message) { + this.unselect_message(); + } + }, + }, + + on_attach_callback: function () { + chat_manager.bus.trigger('client_action_open', true); + if (this.channel) { + this.thread.scroll_to({offset: this.channels_scrolltop[this.channel.id]}); + } + }, + on_detach_callback: function () { + chat_manager.bus.trigger('client_action_open', false); + this.channels_scrolltop[this.channel.id] = this.thread.get_scrolltop(); + }, + + init: function(parent, action, options) { + this._super.apply(this, arguments); + this.action_manager = parent; + this.domain = []; + this.action = action; + this.options = options || {}; + this.channels_scrolltop = {}; + this.throttled_render_sidebar = _.throttle(this.render_sidebar.bind(this), 100, { leading: false }); + this.notification_bar = (window.Notification && window.Notification.permission === "default"); + this.selected_message = null; + }, + + willStart: function () { + return chat_manager.is_ready; + }, + + start: function() { + var self = this; + + // create searchview + var options = { + $buttons: $("
"), + action: this.action, + disable_groupby: true, + }; + var dataset = new data.DataSetSearch(this, 'mail.message'); + var view_id = (this.action && this.action.search_view_id && this.action.search_view_id[0]) || false; + var default_channel_id = this.options.active_id || + this.action.context.active_id || + this.action.params.default_active_id || + 'channel_inbox'; + var default_channel = chat_manager.get_channel(default_channel_id) || + chat_manager.get_channel('channel_inbox'); + + this.searchview = new SearchView(this, dataset, view_id, {}, options); + this.searchview.on('search_data', this, this.on_search); + + this.basic_composer = new composer.BasicComposer(this, {mention_partners_restricted: true}); + this.extended_composer = new composer.ExtendedComposer(this, {mention_partners_restricted: true}); + this.thread = new ChatThread(this, { + display_help: true, + shorten_messages: false, + }); + + this.$buttons = $(QWeb.render("mail.chat.ControlButtons", {})); + this.$buttons.find('button').css({display:"inline-block"}); + this.$buttons.on('click', '.o_mail_chat_button_invite', this.on_click_button_invite); + this.$buttons.on('click', '.o_mail_chat_button_unsubscribe', this.on_click_button_unsubscribe); + this.$buttons.on('click', '.o_mail_chat_button_settings', this.on_click_button_settings); + this.$buttons.on('click', '.o_mail_toggle_channels', function () { + self.$('.o_mail_chat_sidebar').slideToggle(200); + }); + this.$buttons.on('click', '.o_mail_chat_button_mark_read', function () { + chat_manager.mark_all_as_read(self.channel, self.domain); + }); + this.$buttons.on('click', '.o_mail_chat_button_unstar_all', chat_manager.unstar_all); + this.$buttons.on('click', '.o_mail_chat_button_new_message', this.on_click_new_message); + this.$buttons.on('click', '.o_mail_chat_button_new_message_sent', this.on_click_new_message); + + this.thread.on('redirect', this, function (res_model, res_id) { + chat_manager.redirect(res_model, res_id, this.set_channel.bind(this)); + }); + this.thread.on('redirect_to_channel', this, function (channel_id) { + chat_manager.join_channel(channel_id).then(this.set_channel.bind(this)); + }); + this.thread.on('load_more_messages', this, this.load_more_messages); + this.thread.on('mark_as_read', this, function (message_id) { + chat_manager.mark_as_read([message_id]); + }); + this.thread.on('toggle_star_status', this, function (message_id) { + chat_manager.toggle_star_status(message_id); + }); + this.thread.on('select_message', this, this.select_message); + this.thread.on('unselect_message', this, this.unselect_message); + + this.basic_composer.on('post_message', this, this.on_post_message); + this.basic_composer.on('input_focused', this, this.on_composer_input_focused); + this.extended_composer.on('post_message', this, this.on_post_message); + this.extended_composer.on('input_focused', this, this.on_composer_input_focused); + + var def1 = this.thread.appendTo(this.$('.o_mail_chat_content')); + var def2 = this.basic_composer.appendTo(this.$('.o_mail_chat_content')); + var def3 = this.extended_composer.appendTo(this.$('.o_mail_chat_content')); + var def4 = this.searchview.appendTo($("
")).then(function () { + self.$searchview_buttons = self.searchview.$buttons.contents(); + }); + + this.render_sidebar(); + + return $.when(def1, def2, def3, def4) + .then(this.set_channel.bind(this, default_channel)) + .then(function () { + chat_manager.bus.on('open_channel', self, self.set_channel); + chat_manager.bus.on('new_message', self, self.on_new_message); + chat_manager.bus.on('update_message', self, self.on_update_message); + chat_manager.bus.on('new_channel', self, self.on_new_channel); + chat_manager.bus.on('anyone_listening', self, function (channel, query) { + query.is_displayed = query.is_displayed || (channel.id === self.channel.id && self.thread.is_at_bottom()); + }); + chat_manager.bus.on('unsubscribe_from_channel', self, self.render_sidebar); + chat_manager.bus.on('update_needaction', self, self.throttled_render_sidebar); + chat_manager.bus.on('update_channel_unread_counter', self, self.throttled_render_sidebar); + chat_manager.bus.on('update_dm_presence', self, self.throttled_render_sidebar); + self.thread.$el.on("scroll", null, _.debounce(function () { + if (self.thread.is_at_bottom()) { + chat_manager.mark_channel_as_seen(self.channel); + } + }, 100)); + }); + }, + + select_message: function(message_id) { + this.$el.addClass('o_mail_selection_mode'); + var message = chat_manager.get_message(message_id); + this.selected_message = message; + var subject = "Re: " + message.record_name; + this.extended_composer.set_subject(subject); + if (this.channel.type !== 'static') { + this.basic_composer.toggle(false); + } + this.extended_composer.toggle(true); + this.thread.scroll_to({id: message_id, duration: 200, only_if_necessary: true}); + this.extended_composer.focus('body'); + }, + + unselect_message: function() { + this.basic_composer.toggle(this.channel.type !== 'static' && !this.channel.mass_mailing); + this.extended_composer.toggle(this.channel.type !== 'static' && this.channel.mass_mailing); + if (!config.device.touch) { + var composer = this.channel.mass_mailing ? this.extended_composer : this.basic_composer; + composer.focus(); + } + this.$el.removeClass('o_mail_selection_mode'); + this.thread.unselect(); + this.selected_message = null; + }, + + render_sidebar: function () { + var self = this; + var $sidebar = $(QWeb.render("mail.chat.Sidebar", { + active_channel_id: this.channel ? this.channel.id: undefined, + channels: chat_manager.get_channels(), + needaction_counter: chat_manager.get_needaction_counter(), + })); + this.$(".o_mail_chat_sidebar").html($sidebar.contents()); + + this.$('.o_mail_add_channel[data-type=public]').find("input").autocomplete({ + source: function(request, response) { + self.last_search_val = _.escape(request.term); + self.do_search_channel(self.last_search_val).done(function(result){ + result.push({ + 'label': _.str.sprintf(''+_t("Create %s")+'', '"#'+self.last_search_val+'"'), + 'value': '_create', + }); + response(result); + }); + }, + select: function(event, ui) { + if (self.last_search_val) { + if (ui.item.value === '_create') { + chat_manager.create_channel(self.last_search_val, "public"); + } else { + chat_manager.join_channel(ui.item.id); + } + } + }, + focus: function(event) { + event.preventDefault(); + }, + html: true, + }); + + this.$('.o_mail_add_channel[data-type=dm]').find("input").autocomplete({ + source: function(request, response) { + self.last_search_val = _.escape(request.term); + chat_manager.search_partner(self.last_search_val).done(response); + }, + select: function(event, ui) { + var partner_id = ui.item.id; + chat_manager.create_channel(partner_id, "dm"); + }, + focus: function(event) { + event.preventDefault(); + }, + html: true, + }); + + this.$('.o_mail_add_channel[data-type=private]').find("input").on('keyup', this, function (event) { + var name = _.escape($(event.target).val()); + if(event.which === $.ui.keyCode.ENTER && name) { + chat_manager.create_channel(name, "private"); + } + }); + }, + + render_snackbar: function (template, context, timeout) { + if (this.$snackbar) { + this.$snackbar.remove(); + } + timeout = timeout || 20000; + this.$snackbar = $(QWeb.render(template, context)); + this.$('.o_mail_chat_content').append(this.$snackbar); + // Hide snackbar after [timeout] milliseconds (by default, 20s) + var $snackbar = this.$snackbar; + setTimeout(function() { $snackbar.fadeOut(); }, timeout); + }, + + do_search_channel: function(search_val){ + var Channel = new Model("mail.channel"); + return Channel.call('channel_search_to_join', [search_val]).then(function(result){ + var values = []; + _.each(result, function(channel){ + var escaped_name = _.escape(channel.name); + values.push(_.extend(channel, { + 'value': escaped_name, + 'label': escaped_name, + })); + }); + return values; + }); + }, + + set_channel: function (channel) { + var self = this; + // Store scroll position of previous channel + if (this.channel) { + this.channels_scrolltop[this.channel.id] = this.thread.get_scrolltop(); + } + var new_channel_scrolltop = this.channels_scrolltop[channel.id]; + + this.channel = channel; + this.messages_separator_position = undefined; // reset value on channel change + this.unread_counter = this.channel.unread_counter; + this.last_seen_message_id = this.channel.last_seen_message_id; + this.clear_needactions_def = $.Deferred(); + if (this.$snackbar) { + this.$snackbar.remove(); + } + + this.action.context.active_id = channel.id; + this.action.context.active_ids = [channel.id]; + + return this.fetch_and_render_thread().then(function () { + // Mark channel's messages as read and clear needactions + if (channel.type !== 'static') { + // Display snackbar if needactions have been cleared + if (channel.needaction_counter > 0) { + self.render_snackbar('mail.chat.UndoSnackbar', { + nb_needactions: channel.needaction_counter, + }); + } + chat_manager.mark_channel_as_seen(channel); + self.clear_needactions_def = chat_manager.mark_all_as_read(channel); + } + + // Update control panel + self.set("title", '#' + channel.name); + // Hide 'invite', 'unsubscribe' and 'settings' buttons in static channels and DM + self.$buttons + .find('.o_mail_chat_button_invite, .o_mail_chat_button_unsubscribe, .o_mail_chat_button_settings') + .toggle(channel.type !== "dm" && channel.type !== 'static'); + self.$buttons + .find('.o_mail_chat_button_mark_read, .o_mail_chat_button_new_message') + .toggle(channel.id === "channel_inbox"); + self.$buttons + .find('.o_mail_chat_button_new_message_sent') + .toggle(channel.id === "channel_sent"); + self.$buttons + .find('.o_mail_chat_button_unstar_all') + .toggle(channel.id === "channel_starred"); + + self.$('.o_mail_chat_channel_item') + .removeClass('o_active') + .filter('[data-channel-id=' + channel.id + ']') + .removeClass('o_unread_message') + .addClass('o_active'); + + var $new_messages_separator = self.$('.o_thread_new_messages_separator'); + if ($new_messages_separator.length) { + self.thread.$el.scrollTo($new_messages_separator); + } else { + self.thread.scroll_to({offset: new_channel_scrolltop}); + } + + // Update control panel before focusing the composer, otherwise focus is on the searchview + self.update_cp(); + if (config.device.size_class === config.device.SIZES.XS) { + self.$('.o_mail_chat_sidebar').hide(); + } + + // Display and focus the adequate composer, and unselect possibly selected message + // to prevent sending messages as reply to that message + self.unselect_message(); + + self.action_manager.do_push_state({ + action: self.action.id, + active_id: self.channel.id, + }); + }); + }, + unsubscribe_from_channel: function (channel) { + var self = this; + chat_manager + .unsubscribe(channel) + .then(this.render_sidebar.bind(this)) + .then(this.set_channel.bind(this, chat_manager.get_channel("channel_inbox"))) + .then(function () { + if (_.contains(['public', 'private'], channel.type)) { + var msg = _.str.sprintf(_t('You unsubscribed from %s.'), channel.name); + self.do_notify(_t("Unsubscribed"), msg); + } + delete self.channels_scrolltop[channel.id]; + }); + }, + + get_thread_rendering_options: function (messages) { + // Compute position of the 'New messages' separator, only once when joining + // a channel to keep it in the thread when new messages arrive + if (_.isUndefined(this.messages_separator_position)) { + if (!this.unread_counter) { + this.messages_separator_position = false; // no unread message -> don't display separator + } else { + var msg = chat_manager.get_last_seen_message(this.channel); + this.messages_separator_position = msg ? msg.id : 'top'; + } + } + return { + channel_id: this.channel.id, + display_load_more: !chat_manager.all_history_loaded(this.channel, this.domain), + display_needactions: this.channel.display_needactions, + messages_separator_position: this.messages_separator_position, + squash_close_messages: this.channel.type !== 'static' && !this.channel.mass_mailing, + display_empty_channel: !messages.length && !this.domain.length, + display_no_match: !messages.length && this.domain.length, + display_subject: this.channel.mass_mailing || this.channel.id === "channel_inbox", + display_reply_icon: true, + }; + }, + + fetch_and_render_thread: function () { + var self = this; + return chat_manager.get_messages({channel_id: this.channel.id, domain: this.domain}).then(function(result) { + self.thread.render(result, self.get_thread_rendering_options(result)); + self.update_button_status(result.length === 0); + }); + }, + + update_button_status: function (disabled) { + if (this.channel.id === "channel_inbox") { + this.$buttons + .find('.o_mail_chat_button_mark_read') + .toggleClass('disabled', disabled); + } + if (this.channel.id === "channel_starred") { + this.$buttons + .find('.o_mail_chat_button_unstar_all') + .toggleClass('disabled', disabled); + } + }, + + load_more_messages: function () { + var self = this; + var oldest_msg_id = this.$('.o_thread_message').first().data('messageId'); + var oldest_msg_selector = '.o_thread_message[data-message-id="' + oldest_msg_id + '"]'; + var offset = -framework.getPosition(document.querySelector(oldest_msg_selector)).top; + return chat_manager + .get_messages({channel_id: this.channel.id, domain: this.domain, load_more: true}) + .then(function(result) { + if (self.messages_separator_position === 'top') { + self.messages_separator_position = undefined; // reset value to re-compute separator position + } + self.thread.render(result, self.get_thread_rendering_options(result)); + offset += framework.getPosition(document.querySelector(oldest_msg_selector)).top; + self.thread.scroll_to({offset: offset}); + }); + }, + + update_cp: function () { + this.update_control_panel({ + breadcrumbs: this.action_manager.get_breadcrumbs(), + cp_content: { + $buttons: this.$buttons, + $searchview: this.searchview.$el, + $searchview_buttons: this.$searchview_buttons, + }, + searchview: this.searchview, + }); + }, + + do_show: function () { + this._super.apply(this, arguments); + this.update_cp(); + this.action_manager.do_push_state({ + action: this.action.id, + active_id: this.channel.id, + }); + }, + + on_search: function (domains) { + var result = pyeval.sync_eval_domains_and_contexts({ + domains: domains + }); + + this.domain = result.domain; + this.fetch_and_render_thread(); + }, + + on_post_message: function (message) { + var self = this; + var options = this.selected_message ? {} : {channel_id: this.channel.id}; + if (this.selected_message) { + message.subtype = 'mail.mt_comment'; + message.subtype_id = false; + message.message_type = 'comment'; + message.content_subtype = 'html'; + + options.model = this.selected_message.model; + options.res_id = this.selected_message.res_id; + } + chat_manager + .post_message(message, options) + .then(function() { + if (self.selected_message) { + self.render_snackbar('mail.chat.MessageSentSnackbar', {record_name: self.selected_message.record_name}, 5000); + self.unselect_message(); + } else { + self.thread.scroll_to(); + } + }) + .fail(function () { + // todo: display notification + }); + }, + on_new_message: function (message) { + var self = this; + if (_.contains(message.channel_ids, this.channel.id)) { + if (this.channel.type !== 'static' && this.thread.is_at_bottom()) { + chat_manager.mark_channel_as_seen(this.channel); + } + + var should_scroll = this.thread.is_at_bottom(); + this.fetch_and_render_thread().then(function () { + if (should_scroll) { + self.thread.scroll_to({id: message.id}); + } + }); + } + // Re-render sidebar to indicate that there is a new message in the corresponding channels + this.render_sidebar(); + // Dump scroll position of channels in which the new message arrived + this.channels_scrolltop = _.omit(this.channels_scrolltop, message.channel_ids); + }, + on_update_message: function (message) { + var self = this; + var current_channel_id = this.channel.id; + if ((current_channel_id === "channel_starred" && !message.is_starred) || + (current_channel_id === "channel_inbox" && !message.is_needaction)) { + chat_manager.get_messages({channel_id: this.channel.id, domain: this.domain}).then(function (messages) { + var options = self.get_thread_rendering_options(messages); + self.thread.remove_message_and_render(message.id, messages, options).then(function () { + self.update_button_status(messages.length === 0); + }); + }); + } else if (_.contains(message.channel_ids, current_channel_id)) { + this.fetch_and_render_thread(); + } + }, + on_new_channel: function (channel) { + this.render_sidebar(); + if (channel.autoswitch) { + this.set_channel(channel); + } + }, + on_composer_input_focused: function () { + var suggestions = chat_manager.get_mention_partner_suggestions(this.channel); + var composer = this.channel.mass_mailing ? this.extended_composer : this.basic_composer; + composer.mention_set_prefetched_partners(suggestions); + }, + + on_click_button_invite: function () { + var title = _.str.sprintf(_t('Invite people to #%s'), this.channel.name); + new PartnerInviteDialog(this, title, this.channel.id).open(); + }, + + on_click_button_unsubscribe: function () { + this.unsubscribe_from_channel(this.channel); + }, + on_click_button_settings: function() { + this.do_action({ + type: 'ir.actions.act_window', + res_model: "mail.channel", + res_id: this.channel.id, + views: [[false, 'form']], + target: 'current' + }); + }, + on_click_new_message: function () { + this.do_action({ + type: 'ir.actions.act_window', + res_model: 'mail.compose.message', + view_mode: 'form', + view_type: 'form', + views: [[false, 'form']], + target: 'new', + context: "{'default_no_auto_thread': False, 'active_model': 'mail.message'}", + }); + }, + destroy: function() { + this.$buttons.off().destroy(); + this._super.apply(this, arguments); + }, +}); + + +core.action_registry.add('mail.chat.instant_messaging', ChatAction); + +}); diff --git a/sent_mails/static/src/xml/client_action_sent_mails.xml b/sent_mails/static/src/xml/client_action_sent_mails.xml new file mode 100644 index 000000000..52e0f414c --- /dev/null +++ b/sent_mails/static/src/xml/client_action_sent_mails.xml @@ -0,0 +1,19 @@ + + + + + +
+ Sent +
+
+
+ + + + + + + +
\ No newline at end of file diff --git a/sent_mails/views/get_sent_mails.xml b/sent_mails/views/get_sent_mails.xml new file mode 100644 index 000000000..2fc3967f4 --- /dev/null +++ b/sent_mails/views/get_sent_mails.xml @@ -0,0 +1,27 @@ + + + + + +