summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorJérome Maes <jem@openerp.com>2015-10-01 17:15:01 +0200
committerJérome Maes <jem@openerp.com>2015-10-06 09:43:46 +0200
commit22631a152a1d242eefd9454857773039f58570bd (patch)
tree4eb3dbdb2bcc937b0eb7929ff50017f9396e2955 /addons
parenta4b17c262107091ede3c59e8c9cfa0b9f544a593 (diff)
[FIX] mail, website_mail : special controller for message author avatar
Previous commit (3304b31938a5f9189ba0e1966cf2e31ef129b2cf) was not performant enough for AL, so got special autorization to make a particular controller for mail.message author avatar. Avatar of message is avaiblable if current user has 'read' access right to the document. Otherwise the default avatar is one white pixel.
Diffstat (limited to 'addons')
-rw-r--r--addons/mail/controllers/main.py23
-rw-r--r--addons/website_mail/controllers/main.py2
-rw-r--r--addons/website_mail/views/website_mail.xml2
3 files changed, 25 insertions, 2 deletions
diff --git a/addons/mail/controllers/main.py b/addons/mail/controllers/main.py
index d6cdc9fe23f..7411a4a41aa 100644
--- a/addons/mail/controllers/main.py
+++ b/addons/mail/controllers/main.py
@@ -1,3 +1,4 @@
+import base64
from operator import itemgetter
import psycopg2
import werkzeug
@@ -9,6 +10,8 @@ from openerp import http
from openerp.exceptions import AccessError
from openerp.http import request
+from openerp.addons.web.controllers.main import binary_content
+
class MailController(http.Controller):
_cp_path = '/mail'
@@ -209,6 +212,26 @@ class MailController(http.Controller):
return self._redirect_to_messaging()
return werkzeug.utils.redirect('/mail/view?%s' % url_encode({'model': model, 'res_id': res_id}))
+ @http.route('/mail/<string:res_model>/<int:res_id>/avatar/<int:partner_id>', type='http', auth='public')
+ def avatar(self, res_model, res_id, partner_id):
+ headers = [[('Content-Type', 'image/png')]]
+ content = 'R0lGODlhAQABAIABAP///wAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' # default image is one white pixel
+ if res_model in request.env:
+ try:
+ # if the current user has access to the document, get the partner avatar as sudo()
+ request.env[res_model].browse(res_id).check_access_rule('read')
+ if partner_id in request.env[res_model].browse(res_id).sudo().exists().message_ids.mapped('author_id').ids:
+ status, headers, content = binary_content(model='res.partner', id=partner_id, field='image_medium', default_mimetype='image/png', env=request.env(user=openerp.SUPERUSER_ID))
+ if status == 304:
+ return werkzeug.wrappers.Response(status=304)
+ except AccessError:
+ pass
+ image_base64 = base64.b64decode(content)
+ headers.append(('Content-Length', len(image_base64)))
+ response = request.make_response(image_base64, headers)
+ response.status = str(status)
+ return response
+
@http.route('/mail/needaction', type='json', auth='user')
def needaction(self):
return request.env['res.partner'].get_needaction_count()
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index 5ae3b6a0734..a71d25dea51 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -157,7 +157,7 @@ class WebsiteMail(http.Controller):
'body': msg.body,
'date': msg.date,
'author': msg.author_id.name,
- 'image_url': request.website.image_url(msg.author_id, 'image_small')
+ 'image_url': '/mail/%s/%s/avatar/%s' % (msg.model, msg.res_id, msg.author_id.id)
}
return data
except Exception:
diff --git a/addons/website_mail/views/website_mail.xml b/addons/website_mail/views/website_mail.xml
index ae716f086c2..d01d4ade86f 100644
--- a/addons/website_mail/views/website_mail.xml
+++ b/addons/website_mail/views/website_mail.xml
@@ -71,7 +71,7 @@
<t t-if="message.website_published or website.env.user.sudo(website.env.user.id).has_group('base.group_website_publisher')">
<li class="media" t-if="message.message_type == 'comment'" t-att-id="'message-%s' % message.id">
<div class="media-body">
- <img class="media-object pull-left img-circle" t-attf-src="/web/image/mail.message/#{message.id}/author_avatar"
+ <img class="media-object pull-left img-circle" t-attf-src="/mail/#{message.model}/#{message.res_id}/avatar/#{message.author_id.id}"
style="width: 50px; margin-right: 10px;"/>
<div class="media-body">
<h5 class="media-heading">