From 455fb2d6b349df99449e1b8655349be8ce2869db Mon Sep 17 00:00:00 2001 From: "Rifakat Haradwala (Open ERP)" Date: Fri, 18 Mar 2011 19:14:19 +0530 Subject: [PATCH 01/10] [IMP] email: email cleanup bzr revid: rha@tinyerp.com-20110318134419-78qmipdipsryqgnz --- addons/crm/crm.py | 4 +- addons/crm/crm_lead.py | 6 +- addons/crm/crm_meeting.py | 2 +- addons/crm/crm_phonecall.py | 2 +- addons/crm/security/ir.model.access.csv | 4 +- addons/crm_claim/crm_claim.py | 10 +-- addons/crm_fundraising/crm_fundraising.py | 2 +- addons/crm_helpdesk/crm_helpdesk.py | 8 +- addons/email/__init__.py | 2 +- addons/email/__openerp__.py | 2 +- addons/email/email_data.xml | 2 +- addons/email/email_message.py | 85 ++++++++++--------- addons/email/email_smtp_server.py | 8 +- .../{email_gateway.py => email_thread.py} | 75 ++++------------ ...gateway_view.xml => email_thread_view.xml} | 10 +-- addons/email/email_view.xml | 2 +- .../openerp_mailgate/openerp_mailgate.py | 2 +- addons/email/security/ir.model.access.csv | 2 +- addons/email/wizard/email_compose_message.py | 22 ++--- addons/email_template/email_template.py | 60 ++----------- addons/event/event.py | 2 +- addons/fetchmail/fetchmail.py | 6 +- addons/hr_recruitment/hr_recruitment.py | 6 +- .../openerp-outlook-plugin/tiny_xmlrpc.py | 4 +- addons/project_issue/project_issue.py | 6 +- addons/project_mailgate/project_mailgate.py | 14 +-- addons/thunderbird/partner/partner.py | 16 ++-- 27 files changed, 137 insertions(+), 227 deletions(-) rename addons/email/{email_gateway.py => email_thread.py} (89%) rename addons/email/{email_gateway_view.xml => email_thread_view.xml} (93%) diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 63344aeca48..cbf246edb31 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -308,7 +308,7 @@ class crm_case(object): return {'value': {'phone': address.phone}} def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None): - mailgate_pool = self.pool.get('mailgate.thread') + mailgate_pool = self.pool.get('email.thread') return mailgate_pool.history(cr, uid, cases, keyword, history=history,\ subject=subject, email=email, \ details=details, email_from=email_from,\ @@ -458,7 +458,7 @@ class crm_case(object): raise osv.except_osv(_('Error!'), ("Partner Email is not specified in Case")) if not case.user_id.user_email: raise osv.except_osv(_('Error!'), ("User Email is not specified in Case")) - + if destination and case.section_id.user_id: case_email = case.section_id.user_id.user_email else: diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index da9b7bb2418..6c3fa3d71f6 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -40,7 +40,7 @@ class crm_lead(crm_case, osv.osv): _name = "crm.lead" _description = "Lead/Opportunity" _order = "date_action, priority, id desc" - _inherit = ['mailgate.thread','res.partner.address'] + _inherit = ['email.thread','res.partner.address'] def _compute_day(self, cr, uid, ids, fields, args, context=None): """ @param cr: the current row, from the database cursor, @@ -326,7 +326,7 @@ class crm_lead(crm_case, osv.osv): @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks """ - mailgate_pool = self.pool.get('email.server.tools') + thread_pool = self.pool.get('email.thread') subject = msg.get('subject') body = msg.get('body') @@ -343,7 +343,7 @@ class crm_lead(crm_case, osv.osv): if msg.get('priority', False): vals['priority'] = priority - res = mailgate_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) + res = thread_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) if res: vals.update(res) diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py index 5ac7948d067..66040426d40 100644 --- a/addons/crm/crm_meeting.py +++ b/addons/crm/crm_meeting.py @@ -42,7 +42,7 @@ class crm_meeting(crm_case, osv.osv): _name = 'crm.meeting' _description = "Meeting" _order = "id desc" - _inherit = ['mailgate.thread',"calendar.event"] + _inherit = ['email.thread',"calendar.event"] _columns = { # From crm.case 'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}), diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py index 8cd1511f3e5..0c9ca249e2a 100644 --- a/addons/crm/crm_phonecall.py +++ b/addons/crm/crm_phonecall.py @@ -32,7 +32,7 @@ class crm_phonecall(crm_case, osv.osv): _name = "crm.phonecall" _description = "Phonecall" _order = "id desc" - _inherit = ['mailgate.thread'] + _inherit = ['email.thread'] _columns = { # From crm.case 'id': fields.integer('ID'), diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv index 142c5282bb2..26d86830af2 100644 --- a/addons/crm/security/ir.model.access.csv +++ b/addons/crm/security/ir.model.access.csv @@ -28,13 +28,13 @@ "access_res_partner_address_manager","res.partner.address.crm.user.manager","base.model_res_partner_address","base.group_sale_manager",1,0,0,0 "access_res_partner_category_manager","res.partner.category.crm.manager","base.model_res_partner_category","base.group_sale_manager",1,0,0,0 "email_email_message_manager","email.email.message.manager","email.model_email_message","base.group_sale_manager",1,0,0,0 -"email_thread_manager","email.mailgate.thread.manager","email.model_mailgate_thread","base.group_sale_manager",1,1,1,1 +"email_thread_manager","email.mailgate.thread.manager","email.model_email_thread","base.group_sale_manager",1,1,1,1 "access_calendar_attendee_crm_user","calendar.attendee.crm.user","model_calendar_attendee","base.group_sale_salesman",1,1,1,0 "access_calendar_attendee_crm_manager","calendar.attendee.crm.manager","model_calendar_attendee","base.group_sale_manager",1,1,1,1 "access_res_partner","res.partner.crm.user","base.model_res_partner","base.group_sale_salesman",1,1,1,0 "access_res_partner_address","res.partner.address.crm.user","base.model_res_partner_address","base.group_sale_salesman",1,1,1,0 "access_res_partner_category","res.partner.category.crm.user","base.model_res_partner_category","base.group_sale_salesman",1,1,1,0 -"email_mailgate_thread","email.mailgate.thread","email.model_mailgate_thread","base.group_sale_salesman",1,1,1,1 +"email_mailgate_thread","email.mailgate.thread","email.model_email_thread","base.group_sale_salesman",1,1,1,1 "email_gateway_email_message_user","email.email.message.user","email.model_email_message","base.group_sale_salesman",1,1,1,1 "access_crm_case_categ_manager","crm.case.categ manager","model_crm_case_categ","base.group_sale_manager",1,1,1,1 "access_base_action_rule_manager","base.action.rule manager","model_base_action_rule","base.group_sale_manager",1,1,1,1 diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py index 0c85c6d3bcf..94b541b83d7 100644 --- a/addons/crm_claim/crm_claim.py +++ b/addons/crm_claim/crm_claim.py @@ -40,7 +40,7 @@ class crm_claim(crm.crm_case, osv.osv): _name = "crm.claim" _description = "Claim" _order = "priority,date desc" - _inherit = ['mailgate.thread'] + _inherit = ['email.thread'] _columns = { 'id': fields.integer('ID', readonly=True), 'name': fields.char('Claim Subject', size=128, required=True), @@ -156,7 +156,7 @@ class crm_claim(crm.crm_case, osv.osv): self.write(cr, uid, [ids[i]], {'stage_id' : stage_id}) return res - + def message_new(self, cr, uid, msg, context=None): """ Automatically calls when new email message arrives @@ -165,7 +165,7 @@ class crm_claim(crm.crm_case, osv.osv): @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks """ - mailgate_pool = self.pool.get('email.server.tools') + thread_pool = self.pool.get('email.thread') subject = msg.get('subject') body = msg.get('body') @@ -182,7 +182,7 @@ class crm_claim(crm.crm_case, osv.osv): if msg.get('priority', False): vals['priority'] = priority - res = mailgate_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) + res = thread_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) if res: vals.update(res) @@ -206,7 +206,7 @@ class crm_claim(crm.crm_case, osv.osv): @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param ids: List of update mail’s IDs + @param ids: List of update mail’s IDs """ if isinstance(ids, (str, int, long)): ids = [ids] diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py index c9aec2486e9..a78ba93be34 100644 --- a/addons/crm_fundraising/crm_fundraising.py +++ b/addons/crm_fundraising/crm_fundraising.py @@ -31,7 +31,7 @@ class crm_fundraising(crm.crm_case, osv.osv): _name = "crm.fundraising" _description = "Fund Raising" _order = "id desc" - _inherit = ['mailgate.thread'] + _inherit = ['email.thread'] _columns = { 'id': fields.integer('ID'), 'name': fields.char('Name', size=128, required=True), diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py index dcc50f5413d..3493e03bc79 100644 --- a/addons/crm_helpdesk/crm_helpdesk.py +++ b/addons/crm_helpdesk/crm_helpdesk.py @@ -39,7 +39,7 @@ class crm_helpdesk(crm.crm_case, osv.osv): _name = "crm.helpdesk" _description = "Helpdesk" _order = "id desc" - _inherit = ['mailgate.thread'] + _inherit = ['email.thread'] _columns = { 'id': fields.integer('ID', readonly=True), 'name': fields.char('Name', size=128, required=True), @@ -104,7 +104,7 @@ class crm_helpdesk(crm.crm_case, osv.osv): @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks """ - mailgate_pool = self.pool.get('email.server.tools') + thread_pool = self.pool.get('email.thread') subject = msg.get('subject') body = msg.get('body') @@ -121,7 +121,7 @@ class crm_helpdesk(crm.crm_case, osv.osv): if msg.get('priority', False): vals['priority'] = priority - res = mailgate_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) + res = thread_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) if res: vals.update(res) @@ -145,7 +145,7 @@ class crm_helpdesk(crm.crm_case, osv.osv): @param self: The object pointer @param cr: the current row, from the database cursor, @param uid: the current user’s ID for security checks, - @param ids: List of update mail’s IDs + @param ids: List of update mail’s IDs """ if isinstance(ids, (str, int, long)): ids = [ids] diff --git a/addons/email/__init__.py b/addons/email/__init__.py index f038c9f6cab..95b26dd215f 100644 --- a/addons/email/__init__.py +++ b/addons/email/__init__.py @@ -21,7 +21,7 @@ import email_smtp_server import email_message -import email_gateway +import email_thread import res_partner import wizard diff --git a/addons/email/__openerp__.py b/addons/email/__openerp__.py index 80c5088e181..8c381eae028 100644 --- a/addons/email/__openerp__.py +++ b/addons/email/__openerp__.py @@ -34,7 +34,7 @@ 'update_xml': [ "wizard/email_compose_message_view.xml", "email_view.xml", - "email_gateway_view.xml", + "email_thread_view.xml", "res_partner_view.xml", 'security/ir.model.access.csv', 'email_data.xml', diff --git a/addons/email/email_data.xml b/addons/email/email_data.xml index 76adcf62810..cd824172473 100644 --- a/addons/email/email_data.xml +++ b/addons/email/email_data.xml @@ -19,7 +19,7 @@ -1 - + diff --git a/addons/email/email_message.py b/addons/email/email_message.py index cf703a78788..81120f733da 100644 --- a/addons/email/email_message.py +++ b/addons/email/email_message.py @@ -63,10 +63,10 @@ def format_date_tz(date, tz=None): format = tools.DEFAULT_SERVER_DATETIME_FORMAT return tools.server_to_local_timestamp(date, format, format, tz) -class email_message_template(osv.osv_memory): - _name = 'email.message.template' +class email_message_common(osv.osv_memory): + _name = 'email.message.common' _columns = { - 'name':fields.text('Subject', translate=True), + 'subject':fields.text('Subject', translate=True), 'model': fields.char('Object Name', size=128, select=1), 'res_id': fields.integer('Resource ID', select=1), 'date': fields.datetime('Date'), @@ -79,20 +79,22 @@ class email_message_template(osv.osv_memory): 'references': fields.text('References', help="References emails."), 'reply_to':fields.char('Reply-To', size=250), 'sub_type': fields.char('Sub Type', size=32), - 'headers': fields.char('x_headers',size=256), + 'headers': fields.text('x_headers'), 'priority':fields.integer('Priority'), - 'description': fields.text('Description', translate=True), + 'body': fields.text('Description', translate=True), + 'body_html': fields.text('HTML', help="Contains HTML version of email"), 'smtp_server_id':fields.many2one('email.smtp_server', 'SMTP Server'), } + _rec_name='subject' _sql_constraints = [] -email_message_template() +email_message_common() class email_message(osv.osv): ''' Email Message ''' - _inherit = 'email.message.template' + _inherit = 'email.message.common' _name = 'email.message' _description = 'Email Message' _order = 'date desc' @@ -170,7 +172,6 @@ class email_message(osv.osv): return result _columns = { - 'message': fields.text('Description'), 'partner_id': fields.many2one('res.partner', 'Partner'), 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'), 'display_text': fields.function(_get_display_text, method=True, type='text', size="512", string='Display Text'), @@ -184,12 +185,12 @@ class email_message(osv.osv): ('sent', 'Sent Items'), ], 'Folder'), 'state':fields.selection([ - ('draft', 'Draft'), - ('sending', 'Sending'), - ('waiting', 'Waiting'), + ('outgoing', 'Outgoing'), ('sent', 'Sent'), + ('received', 'Received'), ('exception', 'Exception'), ], 'State', readonly=True), + 'auto_delete': fields.boolean('Auto Delete', help="Permanently delete emails after sending"), } _defaults = { @@ -197,21 +198,21 @@ class email_message(osv.osv): 'folder': lambda * a: 'outbox', } - def unlink(self, cr, uid, ids, context=None): - """ - It just changes the folder of the item to "Trash", if it is no in Trash folder yet, - or completely deletes it if it is already in Trash. - """ - to_update = [] - to_remove = [] - for mail in self.browse(cr, uid, ids, context=context): - if mail.folder == 'trash': - to_remove.append(mail.id) - else: - to_update.append(mail.id) - # Changes the folder to trash - self.write(cr, uid, to_update, {'folder': 'trash'}, context=context) - return super(email_message, self).unlink(cr, uid, to_remove, context=context) +# def unlink(self, cr, uid, ids, context=None): +# """ +# It just changes the folder of the item to "Trash", if it is no in Trash folder yet, +# or completely deletes it if it is already in Trash. +# """ +# to_update = [] +# to_remove = [] +# for mail in self.browse(cr, uid, ids, context=context): +# if mail.folder == 'trash': +# to_remove.append(mail.id) +# else: +# to_update.append(mail.id) +# # Changes the folder to trash +# self.write(cr, uid, to_update, {'folder': 'trash'}, context=context) +# return super(email_message, self).unlink(cr, uid, to_remove, context=context) def init(self, cr): cr.execute("""SELECT indexname @@ -221,22 +222,22 @@ class email_message(osv.osv): cr.execute("""CREATE INDEX email_message_res_id_model_idx ON email_message (model, res_id)""") - def process_queue(self, cr, uid, ids, arg): - self.process_email_queue(cr, uid, ids=ids) - return True +# def process_queue(self, cr, uid, ids, arg): +# self.process_email_queue(cr, uid, ids=ids) +# return True - def run_mail_scheduler(self, cursor, user, context=None): - """ - This method is called by OpenERP Scheduler - to periodically send emails - """ - try: - self.process_email_queue(cursor, user, context=context) - except Exception, e: - LOGGER.notifyChannel( - "Email Template", - netsvc.LOG_ERROR, - _("Error sending mail: %s") % e) +# def run_mail_scheduler(self, cursor, user, context=None): +# """ +# This method is called by OpenERP Scheduler +# to periodically send emails +# """ +# try: +# self.process_email_queue(cursor, user, context=context) +# except Exception, e: +# LOGGER.notifyChannel( +# "Email Template", +# netsvc.LOG_ERROR, +# _("Error sending mail: %s") % e) def email_send(self, cr, uid, email_from, email_to, subject, body, model=False, email_cc=None, email_bcc=None, reply_to=False, attach=None, message_id=False, references=False, openobject_id=False, debug=False, subtype='plain', x_headers={}, priority='3', smtp_server_id=False, context=None): @@ -325,7 +326,7 @@ class email_message(osv.osv): subtype=message.sub_type, x_headers=message.headers and eval(message.headers) or {}, priority=message.priority, debug=message.debug, - smtp_server=smtp_server and smtp_server.smtpserver or None, + smtp_server=smtp_server and smtp_server.smtp_host or None, smtp_port=smtp_server and smtp_server.smtpport or None, ssl=smtp_server and smtp_server.smtpssl or False, smtp_user=smtp_server and smtp_server.smtpuname or None, diff --git a/addons/email/email_smtp_server.py b/addons/email/email_smtp_server.py index 2af9030ca04..f9b1be3a597 100644 --- a/addons/email/email_smtp_server.py +++ b/addons/email/email_smtp_server.py @@ -106,7 +106,7 @@ unless it is already specified in the From Email, e.g: John Doe ", help="Specify the username if your SMTP server requires authentication, " "otherwise leave it empty."), 'smtppass': fields.char('Password', - size=120, + size=120, required=False), 'smtptls':fields.boolean('TLS'), 'smtpssl':fields.boolean('SSL/TLS'), @@ -133,7 +133,7 @@ unless it is already specified in the From Email, e.g: John Doe ", default_ids = self.search(cr, uid, [('default','=',True)]) if len(default_ids) > 1: return False - + return True _constraints = [ @@ -145,7 +145,7 @@ unless it is already specified in the From Email, e.g: John Doe ", def name_get(self, cr, uid, ids, context=None): return [(a["id"], "%s (%s)" % (a['email_id'], a['name'])) for a in self.read(cr, uid, ids, ['name', 'email_id'], context=context)] - + def test_smtp_connection(self, cr, uid, ids, context=None): """ @@ -153,7 +153,7 @@ unless it is already specified in the From Email, e.g: John Doe ", """ try: for smtp_server in self.browse(cr, uid, ids, context=context): - smtp = tools.connect_smtp_server(smtp_server.smtpserver, smtp_server.smtpport, user_name=smtp_server.smtpuname, + smtp = tools.connect_smtp_server(smtp_server.smtpserver, smtp_server.smtpport, user_name=smtp_server.smtpuname, user_password=smtp_server.smtppass, ssl=smtp_server.smtpssl, tls=smtp_server.smtptls) try: smtp.quit() diff --git a/addons/email/email_gateway.py b/addons/email/email_thread.py similarity index 89% rename from addons/email/email_gateway.py rename to addons/email/email_thread.py index 3de3f04141f..e15b3228824 100644 --- a/addons/email/email_gateway.py +++ b/addons/email/email_thread.py @@ -34,12 +34,12 @@ import xmlrpclib _logger = logging.getLogger('mailgate') -class mailgate_thread(osv.osv): +class email_thread(osv.osv): ''' - Mailgateway Thread + Email Thread ''' - _name = 'mailgate.thread' - _description = 'Mailgateway Thread' + _name = 'email.thread' + _description = 'Email Thread' _columns = { 'message_ids': fields.one2many('email.message', 'res_id', 'Messages', readonly=True), @@ -71,7 +71,7 @@ class mailgate_thread(osv.osv): def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None): raise Exception, _('Method is not implemented') - def message_followers(self, cr, uid, ids, context=None): + def thread_followers(self, cr, uid, ids, context=None): """ Get a list of emails of the people following this thread """ res = {} @@ -172,18 +172,6 @@ class mailgate_thread(osv.osv): } obj.create(cr, uid, data, context=context) return True -mailgate_thread() - -def format_date_tz(date, tz=None): - if not date: - return 'n/a' - format = tools.DEFAULT_SERVER_DATETIME_FORMAT - return tools.server_to_local_timestamp(date, format, format, tz) - -class mailgate_tool(osv.osv_memory): - - _name = 'email.server.tools' - _description = "Email Server Tools" def _decode_header(self, text): """Returns unicode() string conversion of the the given encoded smtp header""" @@ -194,45 +182,6 @@ class mailgate_tool(osv.osv_memory): def to_email(self,text): return re.findall(r'([^ ,<@]+@[^> ,]+)',text) - def history(self, cr, uid, model, res_ids, msg, attach, context=None): - """This function creates history for mails fetched - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param model: OpenObject Model - @param res_ids: Ids of the record of OpenObject model created - @param msg: Email details - @param attach: Email attachments - """ - if isinstance(res_ids, (int, long)): - res_ids = [res_ids] - - msg_pool = self.pool.get('email.message') - for res_id in res_ids: - case = self.pool.get(model).browse(cr, uid, res_id, context=context) - partner_id = hasattr(case, 'partner_id') and (case.partner_id and case.partner_id.id or False) or False - if not partner_id and model == 'res.partner': - partner_id = res_id - msg_data = { - 'name': msg.get('subject', 'No subject'), - 'date': msg.get('date'), - 'description': msg.get('body', msg.get('from')), - 'history': True, - 'partner_id': partner_id, - 'model': model, - 'email_cc': msg.get('cc'), - 'email_from': msg.get('from'), - 'email_to': msg.get('to'), - 'message_id': msg.get('message-id'), - 'references': msg.get('references') or msg.get('in-reply-to'), - 'res_id': res_id, - 'user_id': uid, - 'folder': 'inbox', - 'attachment_ids': [(6, 0, attach)] - } - msg_pool.create(cr, uid, msg_data, context=context) - return True - def email_forward(self, cr, uid, model, res_ids, msg, email_error=False, context=None): """Sends an email to all people following the thread @param res_id: Id of the record of OpenObject model created from the email message @@ -242,8 +191,8 @@ class mailgate_tool(osv.osv_memory): model_pool = self.pool.get(model) for res in model_pool.browse(cr, uid, res_ids, context=context): - message_followers = model_pool.message_followers(cr, uid, [res.id])[res.id] - message_followers_emails = self.to_email(','.join(filter(None, message_followers))) + thread_followers = model_pool.thread_followers(cr, uid, [res.id])[res.id] + message_followers_emails = self.to_email(','.join(filter(None, thread_followers))) message_recipients = self.to_email(','.join(filter(None, [self._decode_header(msg['from']), self._decode_header(msg['to']), @@ -486,6 +435,14 @@ class mailgate_tool(osv.osv_memory): return res -mailgate_tool() + +email_thread() + +def format_date_tz(date, tz=None): + if not date: + return 'n/a' + format = tools.DEFAULT_SERVER_DATETIME_FORMAT + return tools.server_to_local_timestamp(date, format, format, tz) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/email/email_gateway_view.xml b/addons/email/email_thread_view.xml similarity index 93% rename from addons/email/email_gateway_view.xml rename to addons/email/email_thread_view.xml index 9fc708eac0f..95ff5d35032 100644 --- a/addons/email/email_gateway_view.xml +++ b/addons/email/email_thread_view.xml @@ -3,8 +3,8 @@ - mailgate.thread.form - mailgate.thread + email.thread.form + email.thread form
@@ -41,8 +41,8 @@ - mailgate.thread.tree - mailgate.thread + email.thread.tree + email.thread tree @@ -54,7 +54,7 @@ Mailgateway Threads - mailgate.thread + email.thread tree,form form diff --git a/addons/email/email_view.xml b/addons/email/email_view.xml index 66c749f69ca..0849c766c2c 100644 --- a/addons/email/email_view.xml +++ b/addons/email/email_view.xml @@ -44,7 +44,7 @@ -