[IMP] mail,*: replace emojis by unicode in chat messages

*im_livechat,rating.

Emojis are now encoded in unicode characters in messages. This
allows to copy/paste messages including emojis, ensures that
emojis are properly displayed in mail interfaces (at least those
that support unicode, e.g. GMAIL, counter-example: outlook), and
allows the user to directly use emojis of its smartphone in mobile.

This commit also adds several new emojis.

PR #11095
This commit is contained in:
Rohan Patel
2017-09-11 12:20:49 +02:00
committed by Aaron Bohy
parent a58fb415fc
commit 8c1f6a7cc6
27 changed files with 195 additions and 132 deletions
@@ -3,29 +3,29 @@
<data>
<!-- Smiley for rating to be displayed in the conversation -->
<record id="mail_shortcode_rating_0" model="mail.shortcode">
<field name="source">:rating_0</field>
<field name="substitution">&lt;img src='/rating/static/src/img/rating_0.png'/&gt;</field>
<field name="source">:rating_0</field> <!-- unicode of this image is not found -->
<field name="substitution">&lt;img src='/rating/static/src/img/rating_0.png' alt=':rating_0'/&gt;</field>
<field name="description">Rating Empty Smiley</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_shortcode_rating_1" model="mail.shortcode">
<field name="source">:rating_1</field>
<field name="substitution">&lt;img src='/rating/static/src/img/rating_1.png'/&gt;</field>
<field name="source">:rating_1</field> <!-- unicode of this image is not found -->
<field name="substitution">&lt;img src='/rating/static/src/img/rating_1.png' alt=':rating_1'/&gt;</field>
<field name="description">Rating Smiley Bad</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_shortcode_rating_5" model="mail.shortcode">
<field name="source">:rating_5</field>
<field name="substitution">&lt;img src='/rating/static/src/img/rating_5.png'/&gt;</field>
<field name="source">:rating_5</field> <!-- unicode of this image is not found -->
<field name="substitution">&lt;img src='/rating/static/src/img/rating_5.png' alt=':rating_5'/&gt;</field>
<field name="description">Rating Smiley Okay</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_shorcode_rating_10" model="mail.shortcode">
<field name="source">:rating_10</field>
<field name="substitution">&lt;img src='/rating/static/src/img/rating_10.png'/&gt;</field>
<field name="source">:rating_10</field> <!-- unicode of this image is not found -->
<field name="substitution">&lt;img src='/rating/static/src/img/rating_10.png' alt=':rating_10'/&gt;</field>
<field name="description">Rating Smiley Good</field>
<field name="shortcode_type">image</field>
</record>
+1 -1
View File
@@ -267,7 +267,7 @@ class MailController(http.Controller):
'channel_slots': request.env['mail.channel'].channel_fetch_slot(),
'commands': request.env['mail.channel'].get_mention_commands(),
'mention_partner_suggestions': request.env['res.partner'].get_static_mention_suggestions(),
'shortcodes': request.env['mail.shortcode'].sudo().search_read([], ['shortcode_type', 'source', 'substitution', 'description']),
'shortcodes': request.env['mail.shortcode'].sudo().search_read([], ['shortcode_type', 'source', 'unicode_source', 'substitution', 'description']),
'menu_id': request.env['ir.model.data'].xmlid_to_res_id('mail.mail_channel_menu_root_chat'),
}
return values
+169 -120
View File
@@ -3,179 +3,228 @@
<data>
<!-- Smileys -->
<record id="mail_smiley_smile" model="mail.shortcode">
<record id="mail_smiley_normal_smile" model="mail.shortcode">
<field name="source">:)</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/smile.png'/&gt;</field>
<field name="description">Emoji Smile</field>
<field name="unicode_source">😊</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/normal_smile.png' alt='😊'/&gt;</field>
<field name="description">Smile</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_sad" model="mail.shortcode">
<field name="source">:(</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/sad.png'/&gt;</field>
<field name="description">Emoji Sad</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_laugh" model="mail.shortcode">
<record id="mail_smiley_smile" model="mail.shortcode">
<field name="source">:D</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/laugh.png'/&gt;</field>
<field name="description">Emoji Laugh</field>
<field name="unicode_source">😄</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/smile.png' alt='😄'/&gt;</field>
<field name="description">Smile with open mouth</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_laugh" model="mail.shortcode">
<field name="source">xD</field>
<field name="unicode_source">😆</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/laugh.png' alt='😆'/&gt;</field>
<field name="description">Laugh</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_tears_of_joy" model="mail.shortcode">
<field name="source">:-)</field>
<field name="unicode_source">😂</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/tears_of_joy.png' alt='😂'/&gt;</field>
<field name="description">Tears of joy</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_wink" model="mail.shortcode">
<field name="source">;)</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/wink.png'/&gt;</field>
<field name="description">Emoji Wink</field>
<field name="unicode_source">😉</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/wink.png' alt='😉'/&gt;</field>
<field name="description">Wink</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_sunglass" model="mail.shortcode">
<field name="source">B)</field>
<field name="unicode_source">😎</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/sunglass.png' alt='😎'/&gt;</field>
<field name="description">Face with sunglass</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_stuck" model="mail.shortcode">
<field name="source">O_0</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/stuck_out_tongue.png'/&gt;</field>
<field name="description">Emoji Stuck Out Tongue Winking Eye</field>
<field name="source">;p</field>
<field name="unicode_source">😜</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/stuck_out_tongue.png' alt='😜'/&gt;</field>
<field name="description">Stuck Out Tongue Winking Eye</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_scream" model="mail.shortcode">
<field name="source">:@</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/scream.png'/&gt;</field>
<field name="description">Emoji Scream</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_neutral" model="mail.shortcode">
<field name="source">:|</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/neutral.png'/&gt;</field>
<field name="description">Emoji Speechless/Neutral face</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_cheeky" model="mail.shortcode">
<field name="source">:p</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/yum.png'/&gt;</field>
<field name="description">Emoji Cheeky</field>
<field name="unicode_source">😋</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/yum.png' alt='😋'/&gt;</field>
<field name="description">Cheeky</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_flushed" model="mail.shortcode">
<field name="source">o_o</field>
<field name="unicode_source">😳</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/flushed.png' alt='😳'/&gt;</field>
<field name="description">Flushed face</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_neutral" model="mail.shortcode">
<field name="source">:|</field>
<field name="unicode_source">😐</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/neutral.png' alt='😐'/&gt;</field>
<field name="description">Speechless/Neutral face</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_confused" model="mail.shortcode">
<field name="source">:/</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/confused.png'/&gt;</field>
<field name="description">Emoji Confused</field>
<field name="unicode_source">😕</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/confused.png' alt='😕'/&gt;</field>
<field name="description">Confused</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_sad" model="mail.shortcode">
<field name="source">:(</field>
<field name="unicode_source">😞</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/sad.png' alt='😞'/&gt;</field>
<field name="description">Sad</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_scream" model="mail.shortcode">
<field name="source">:@</field>
<field name="unicode_source">😱</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/scream.png' alt='😱'/&gt;</field>
<field name="description">Scream</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_open_mouth" model="mail.shortcode">
<field name="source">:O</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/open_mouth.png'/&gt;</field>
<field name="description">Emoji Open Mouth</field>
<field name="unicode_source">😮</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/open_mouth.png' alt='😮'/&gt;</field>
<field name="description">Open Mouth</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_heart" model="mail.shortcode">
<field name="source">&lt;3</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/heart.png'/&gt;</field>
<field name="description">Emoji Heart</field>
<record id="mail_smiley_angry" model="mail.shortcode">
<field name="source">3:(</field>
<field name="unicode_source">😈</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/angry.png' alt='😈'/&gt;</field>
<field name="description">Angry</field>
<field name="shortcode_type">image</field>
</record>
<!-- Other images -->
<record id="mail_smiley_thumbsup" model="mail.shortcode">
<field name="source">:+1</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/thumbsup.png'/&gt;</field>
<field name="description">Emoji Thumbs Up</field>
<record id="mail_smiley_evil" model="mail.shortcode">
<field name="source">3:)</field>
<field name="unicode_source">😈</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/evil.png' alt='😈'/&gt;</field>
<field name="description">Face with evil</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_thumbsdown" model="mail.shortcode">
<field name="source">:-1</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/thumbsdown.png'/&gt;</field>
<field name="description">Emoji Thumbs Down</field>
<record id="mail_smiley_monkey_see" model="mail.shortcode">
<field name="source">:no_see</field>
<field name="unicode_source">🙈</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/monkey_eye.png' alt='🙈'/&gt;</field>
<field name="description">No see</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_monkey_hear" model="mail.shortcode">
<field name="source">:no_hear</field>
<field name="unicode_source">🙉</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/monkey_hear.png' alt='🙉'/&gt;</field>
<field name="description">No hear</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_monkey_speak" model="mail.shortcode">
<field name="source">:no_speak</field>
<field name="unicode_source">🙊</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/monkey_speak.png' alt='🙊'/&gt;</field>
<field name="description">No speak</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_bug" model="mail.shortcode">
<field name="source">:bug</field>
<field name="unicode_source">🐞</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/bug.png' alt='🐞'/&gt;</field>
<field name="description">Bug</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_kitten" model="mail.shortcode">
<field name="source">:kitten</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/cat.png'/&gt;</field>
<field name="description">Emoji Kitten</field>
<field name="unicode_source">😸</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/cat.png' alt='😸'/&gt;</field>
<field name="description">Kitten</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_pinky" model="mail.shortcode">
<field name="source">:pinky</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/pinky.png'/&gt;</field>
<field name="description">Emoji Pinky</field>
<record id="mail_smiley_heart" model="mail.shortcode">
<field name="source">&lt;3</field>
<field name="unicode_source">❤</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/heart.png' alt='❤'/&gt;</field>
<field name="description">Heart</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_musti" model="mail.shortcode">
<field name="source">:musti</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/musti.png'/&gt;</field>
<field name="description">Emoji Musti</field>
<record id="mail_smiley_thumbsup" model="mail.shortcode">
<field name="source">:+1</field>
<field name="unicode_source">👍</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/thumbsup.png' alt='👍'/&gt;</field>
<field name="description">Thumbs Up</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_man_with_turban" model="mail.shortcode">
<field name="source">:turban</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/man_with_turban.png'/&gt;</field>
<field name="description">Emoji Man With Turban</field>
<record id="mail_smiley_thumbsdown" model="mail.shortcode">
<field name="source">:-1</field>
<field name="unicode_source">👎</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/thumbsdown.png' alt='👎'/&gt;</field>
<field name="description">Thumbs Down</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_troll" model="mail.shortcode">
<field name="source">:troll</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/trollface.png'/&gt;</field>
<field name="description">Emoji Troll Face</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_boar" model="mail.shortcode">
<field name="source">:boar</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/boar.png'/&gt;</field>
<field name="description">Emoji Boar</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_poop" model="mail.shortcode">
<field name="source">:poop</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/poop.png'/&gt;</field>
<field name="description">Emoji Poop</field>
<field name="unicode_source">💩</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/poop.png' alt='💩'/&gt;</field>
<field name="description">Poop</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_cookie" model="mail.shortcode">
<field name="source">:cookie</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/cookie.png'/&gt;</field>
<field name="description">Emoji Cookie</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_postal_horn" model="mail.shortcode">
<field name="source">:postal_horn</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/postal_horn.png'/&gt;</field>
<field name="description">Emoji Postal Horn</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_ghost" model="mail.shortcode">
<field name="source">:ghost</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/ghost.png'/&gt;</field>
<field name="description">Emoji Ghost</field>
<field name="unicode_source">👻</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/ghost.png' alt='👻'/&gt;</field>
<field name="description">Ghost</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_cookie" model="mail.shortcode">
<field name="source">:cookie</field>
<field name="unicode_source">🍪</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/cookie.png' alt='🍪'/&gt;</field>
<field name="description">Cookie</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_beer" model="mail.shortcode">
<field name="source">:beer</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/beer.png'/&gt;</field>
<field name="description">Emoji Beer</field>
<field name="unicode_source">🍺</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/beer.png' alt='🍺'/&gt;</field>
<field name="description">Beer</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_man" model="mail.shortcode">
<field name="source">:man</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/man.png'/&gt;</field>
<field name="description">Emoji Man</field>
<record id="mail_smiley_coffee" model="mail.shortcode">
<field name="source">:coffee</field>
<field name="unicode_source">☕</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/coffee.png' alt='☕'/&gt;</field>
<field name="description">Coffee</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_cake" model="mail.shortcode">
<field name="source">:cake</field>
<field name="unicode_source">🎂</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/cake.png' alt='🎂'/&gt;</field>
<field name="description">Cake</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_party" model="mail.shortcode">
<field name="source">:party</field>
<field name="unicode_source">🎉</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/party.png' alt='🎉'/&gt;</field>
<field name="description">Party</field>
<field name="shortcode_type">image</field>
</record>
<record id="mail_smiley_trophy" model="mail.shortcode">
<field name="source">:trophy</field>
<field name="unicode_source">🏆</field>
<field name="substitution">&lt;img src='/mail/static/src/img/smiley/trophy.png' alt='🏆'/&gt;</field>
<field name="description">Trophy</field>
<field name="shortcode_type">image</field>
</record>
+1
View File
@@ -15,6 +15,7 @@ class MailShortcode(models.Model):
_description = 'Canned Response / Shortcode'
source = fields.Char('Shortcut', required=True, index=True, help="The shortcut which must be replaced in the Chat Messages")
unicode_source = fields.Char(string='Unicode Character', help="The source is replaced by this unicode character in the Chat Messages")
substitution = fields.Text('Substitution', required=True, index=True, help="The escaped html code replacing the shortcut")
description = fields.Char('Description')
shortcode_type = fields.Selection([('image', 'Smiley'), ('text', 'Canned Response')], required=True, default='text',
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1017 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

+14 -1
View File
@@ -29,6 +29,7 @@ var chat_unread_counter = 0;
var unread_conversation_counter = 0;
var emojis = [];
var emoji_substitutions = {};
var emoji_unicodes = {};
var needaction_counter = 0;
var starred_counter = 0;
var mention_partner_suggestions = [];
@@ -670,8 +671,12 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, {
if (s.shortcode_type === 'text') {
canned_responses.push(_.pick(s, ['id', 'source', 'substitution']));
} else {
emojis.push(_.pick(s, ['id', 'source', 'substitution', 'description']));
emojis.push(_.pick(s, ['id', 'source', 'unicode_source', 'substitution', 'description']));
emoji_substitutions[_.escape(s.source)] = s.substitution;
if (s.unicode_source) {
emoji_substitutions[_.escape(s.unicode_source)] = s.substitution;
emoji_unicodes[_.escape(s.source)] = s.unicode_source;
}
}
});
bus.start_polling();
@@ -760,6 +765,14 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, {
body: body,
attachment_ids: data.attachment_ids,
};
// Replace emojis by their unicode character
_.each(_.keys(emoji_unicodes), function (key) {
var escaped_key = String(key).replace(/([.*+?=^!:${}()|[\]\/\\])/g, '\\$1');
var regexp = new RegExp("(\\s|^)(" + escaped_key + ")(?=\\s|$)", "g");
msg.body = msg.body.replace(regexp, "$1" + emoji_unicodes[key]);
});
if ('subject' in data) {
msg.subject = data.subject;
}
+2 -2
View File
@@ -240,8 +240,8 @@ class RatingMixin(models.AbstractModel):
if hasattr(self, 'message_post'):
feedback = tools.plaintext2html(feedback or '')
self.message_post(
body="<img src='/rating/static/src/img/rating_%s.png' style='width:20px;height:20px;float:left;margin-right: 5px;'/>%s"
% (rate, feedback),
body="<img src='/rating/static/src/img/rating_%s.png' alt=':rating_%s' style='width:20px;height:20px;float:left;margin-right: 5px;'/>%s"
% (rate, rate, feedback),
subtype=subtype or "mail.mt_comment",
author_id=rating.partner_id and rating.partner_id.id or None # None will set the default author in mail_thread.py
)