diff options
| author | Jérome Maes <jem@openerp.com> | 2015-10-01 17:15:01 +0200 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2015-10-06 09:43:46 +0200 |
| commit | 22631a152a1d242eefd9454857773039f58570bd (patch) | |
| tree | 4eb3dbdb2bcc937b0eb7929ff50017f9396e2955 /addons | |
| parent | a4b17c262107091ede3c59e8c9cfa0b9f544a593 (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.py | 23 | ||||
| -rw-r--r-- | addons/website_mail/controllers/main.py | 2 | ||||
| -rw-r--r-- | addons/website_mail/views/website_mail.xml | 2 |
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"> |
