Should create a multipart/mixed: from gmail,
bold, with attachment.
', res.get('body', ''),
'message_parse: html version should be in body after parsing multipart/mixed')
+ res = self.mail_thread.message_parse(cr, uid, MAIL_MULTIPART_MIXED_TWO)
+ self.assertNotIn('First and second part', res.get('body', ''),
+ 'message_parse: text version should not be in body after parsing multipart/mixed')
+ self.assertIn('First part', res.get('body', ''),
+ 'message_parse: first part of the html version should be in body after parsing multipart/mixed')
+ self.assertIn('Second part', res.get('body', ''),
+ 'message_parse: second part of the html version should be in body after parsing multipart/mixed')
+
@mute_logger('openerp.addons.mail.mail_thread', 'openerp.models')
def test_10_message_process(self):
""" Testing incoming emails processing. """
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index d2ebacfd8a6..169adf24e63 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -120,6 +120,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.is_initialized = $.Deferred();
this.mutating_mutex = new $.Mutex();
this.save_list = [];
+ this.render_value_defs = [];
this.reload_mutex = new $.Mutex();
this.__clicked_inside = false;
this.__blur_timeout = null;
@@ -674,6 +675,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
} else if (mode === "create") {
mode = "edit";
}
+ this.render_value_defs = [];
this.set({actual_mode: mode});
},
check_actual_mode: function(source, options) {
@@ -724,12 +726,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
});
},
on_button_cancel: function(event) {
+ var self = this;
if (this.can_be_discarded()) {
if (this.get('actual_mode') === 'create') {
this.trigger('history_back');
} else {
this.to_view_mode();
- this.trigger('load_record', this.datarecord);
+ $.when.apply(null, this.render_value_defs).then(function(){
+ self.trigger('load_record', self.datarecord);
+ });
}
}
this.trigger('on_button_cancel');
@@ -2239,7 +2244,7 @@ instance.web.form.ReinitializeWidgetMixin = {
instance.web.form.ReinitializeFieldMixin = _.extend({}, instance.web.form.ReinitializeWidgetMixin, {
reinitialize: function() {
instance.web.form.ReinitializeWidgetMixin.reinitialize.call(this);
- this.render_value();
+ this.view.render_value_defs.push(this.render_value());
},
});
@@ -4747,9 +4752,8 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in
self.render_tag(data);
}
if (! values || values.length > 0) {
- this._display_orderer.add(self.get_render_data(values)).done(handle_names);
- }
- else{
+ return this._display_orderer.add(self.get_render_data(values)).done(handle_names);
+ } else {
handle_names([]);
}
},
diff --git a/addons/website_membership/views/website_membership.xml b/addons/website_membership/views/website_membership.xml
index f1f101f47eb..3f4e6b0a49d 100644
--- a/addons/website_membership/views/website_membership.xml
+++ b/addons/website_membership/views/website_membership.xml
@@ -89,7 +89,7 @@
- -
+
-
diff --git a/openerp/addons/base/ir/ir_mail_server.py b/openerp/addons/base/ir/ir_mail_server.py
index 5c82b2f1fce..30d9d88edf8 100644
--- a/openerp/addons/base/ir/ir_mail_server.py
+++ b/openerp/addons/base/ir/ir_mail_server.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2011-2012 OpenERP S.A ()
+# Copyright (C) 2011-2014 OpenERP S.A. ()
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -24,7 +24,7 @@ from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.charset import Charset
from email.header import Header
-from email.utils import formatdate, make_msgid, COMMASPACE, parseaddr
+from email.utils import formatdate, make_msgid, COMMASPACE, getaddresses, formataddr
from email import Encoders
import logging
import re
@@ -140,30 +140,15 @@ def encode_rfc2822_address_header(header_text):
``"Name"`` portion by the RFC2047-encoded
version, preserving the address part untouched.
"""
- header_text_utf8 = tools.ustr(header_text).encode('utf-8')
- header_text_ascii = try_coerce_ascii(header_text_utf8)
- if header_text_ascii:
- return header_text_ascii
+ def encode_addr(addr):
+ name, email = addr
+ if not try_coerce_ascii(name):
+ name = str(Header(name, 'utf-8'))
+ return formataddr((name, email))
- name, email = parseaddr(header_text_utf8)
- if not name:
- return email
+ addresses = getaddresses([tools.ustr(header_text).encode('utf-8')])
+ return COMMASPACE.join(map(encode_addr, addresses))
- # non-ASCII characters are present, attempt to
- # replace all "Name" patterns with the RFC2047-
- # encoded version
- name_encoded = str(Header(name, 'utf-8'))
- header_text_utf8 = "%s <%s>" % (name_encoded, email)
- # try again after encoding
- header_text_ascii = try_coerce_ascii(header_text_utf8)
- if header_text_ascii:
- return header_text_ascii
- # fallback to extracting pure addresses only, which could
- # still cause a failure downstream if the actual addresses
- # contain non-ASCII characters
- return COMMASPACE.join(extract_rfc2822_addresses(header_text_utf8))
-
-
class ir_mail_server(osv.osv):
"""Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities."""
_name = "ir.mail_server"
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index 540832d1931..738ae3a660a 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -248,7 +248,7 @@ class view(osv.osv):
return values
def create(self, cr, uid, values, context=None):
- if 'type' not in values:
+ if not values.get('type'):
if values.get('inherit_id'):
values['type'] = self.browse(cr, uid, values['inherit_id'], context).type
else:
diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py
index 06c62b5cc37..e0c9667ebcd 100644
--- a/openerp/addons/base/res/res_users.py
+++ b/openerp/addons/base/res/res_users.py
@@ -358,7 +358,7 @@ class res_users(osv.osv):
if not context:
context={}
ids = []
- if name:
+ if name and operator in ['=', 'ilike']:
ids = self.search(cr, user, [('login','=',name)]+ args, limit=limit, context=context)
if not ids:
ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context)
diff --git a/openerp/tools/mail.py b/openerp/tools/mail.py
index 392e512f704..5f620eb61d8 100644
--- a/openerp/tools/mail.py
+++ b/openerp/tools/mail.py
@@ -579,7 +579,7 @@ def append_content_to_html(html, content, plaintext=True, preserve=False, contai
elif plaintext:
content = '\n%s\n' % plaintext2html(content, container_tag)
else:
- content = re.sub(r'(?i)(?html.*>|?body.*>|)', '', content)
+ content = re.sub(r'(?i)(?(?:html|body|head|!\s*DOCTYPE)[^>]*>)', '', content)
content = u'\n%s\n' % ustr(content)
# Force all tags to lowercase
html = re.sub(r'(?)\W*(\w+)([ >])',