summaryrefslogtreecommitdiff
path: root/addons/mail/models/mail_shortcode.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/mail/models/mail_shortcode.py')
-rw-r--r--addons/mail/models/mail_shortcode.py33
1 files changed, 22 insertions, 11 deletions
diff --git a/addons/mail/models/mail_shortcode.py b/addons/mail/models/mail_shortcode.py
index 42627e5abe5..a28bd0df552 100644
--- a/addons/mail/models/mail_shortcode.py
+++ b/addons/mail/models/mail_shortcode.py
@@ -5,44 +5,55 @@ import re
from openerp import api, fields, models
-class ImChatShortcode(models.Model):
+class MailShortcode(models.Model):
""" Shortcode
- Canned Responses, allowing the user to defined shortcuts in its chat message.
- These shortcode are globals and are available for every user. Smiley use this mecanism.
+ Canned Responses, allowing the user to defined shortcuts in its message. Should be applied before storing message in database.
+ Emoji allowing replacing text with image for visual effect. Should be applied when the message is displayed (only for final rendering).
+ These shortcodes are global and are available for every user.
"""
- _name = 'im_chat.shortcode'
+ _name = 'mail.shortcode'
_description = 'Canned Response / Shortcode'
source = fields.Char('Shortcut', required=True, index=True, help="The shortcut which must be replace in the Chat Messages")
substitution = fields.Char('Substitution', required=True, index=True, help="The excaped html code replacing the shortcut")
description = fields.Char('Description')
+ shortcode_type = fields.Selection([('image', 'Smiley'), ('text', 'Canned Response')], required=True, default='text',
+ help="* Smiley are only used for HTML code to display an image "\
+ "* Text (default value) is use to substitute text with another text")
@api.model
def create(self, values):
if values.get('substitution'):
values['substitution'] = self._sanitize_shorcode(values['substitution'])
- return super(ImChatShortcode, self).create(values)
+ return super(MailShortcode, self).create(values)
@api.multi
def write(self, values):
if values.get('substitution'):
values['substitution'] = self._sanitize_shorcode(values['substitution'])
- return super(ImChatShortcode, self).write(values)
+ return super(MailShortcode, self).write(values)
def _sanitize_shorcode(self, substitution):
""" Sanitize the shortcode substitution :
- - HTML substitution : only allow the img tag (smiley)
- - escape other substitutions to avoid XSS
+ - HTML substitution : only allow the img tag (emoji)
+ - escape other substitutions to avoid XSS
"""
- is_img_tag = re.match(r'''^<img\s+src=('|")([^'"]*)\1\s*/?>$''', substitution, re.M|re.I)
+ is_img_tag = re.match(r'''^<img\s+src=('|")([^'"]*)\1\s*/?>$''', substitution, re.M | re.I)
if is_img_tag:
return substitution
return cgi.escape(substitution)
@api.model
- def replace_shortcode(self, message):
- for shortcode in self.search([]):
+ def apply_shortcode(self, message, shortcode_type=None):
+ """ Apply the substitution on the given text
+ :param message : the text where the shortcode will be applied
+ :param shortcode_type : shortcode type that should be applied during the substitution
+ """
+ domain = []
+ if shortcode_type:
+ domain.append(('shortcode_type', '=', shortcode_type))
+ for shortcode in self.search(domain):
regex = '(?:^|\s)(%s)(?:\s|$)' % re.escape(shortcode.source)
message = re.sub(regex, " " + shortcode.substitution + " ", message)
return message