[FIX] mail: Support nameless attachments
`ir.attachment` records do not require to have a filename set. In `AttachmentBox`, a filename is always set, although in case it's missing it was untranslated. I fixed that. In cases where `AttachmentBox` is not used but its underlying templates are rendered using other means, a user could get a client-side error like this one when browsing a record that had an attachment without filename: <details><summary>Error</summary> ``` Error: TypeError: dict.attachment.filename.split is not a function https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:26 Rastreo de error: anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:26:45 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous/<@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:340:33 foreach@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:180:25 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:338:25 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous/<@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:27:31 foreach@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:180:25 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:11:23 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:20:30 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:15:31 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 call@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:154:35 anonymous@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js line 469 > Function:11:31 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:458:58 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 _render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:480:29 render@https://www.tecnativa.com/web/static/lib/qweb/qweb2.js:450:26 render@https://www.tecnativa.com/mail/static/src/js/thread_widget.js:183:28 _fetchAndRenderThread/<@https://www.tecnativa.com/mail/static/src/js/thread_field.js:124:36 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3283:104 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3283:104 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 rpc/<@https://www.tecnativa.com/web/static/src/js/services/ajax_service.js:16:29 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 Deferred/</deferred[tuple[0]]@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3321:62 genericJsonRpc/<@https://www.tecnativa.com/web/static/src/js/core/ajax.js:65:18 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3276:89 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 then/</</<@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3283:104 fire@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3119:58 fireWith@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:3231:49 done@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:9275:42 callback@https://www.tecnativa.com/web/static/lib/jquery/jquery.js:9685:57 ``` The error is produced when trying to render this line: https://github.com/odoo/odoo/blob/66c5053a3d1f8cb456929453a62869c95eccf86a/addons/mail/static/src/xml/thread.xml#L506 </details> This patch ensures all attachment has a filename, and fixes that problem. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr @Tecnativa TT19555 closes odoo/odoo#37546 Forward-port-of: odoo/odoo#37253 X-original-commit: ebba3c9fa709dccf4cab91e9f37aa3eaa24c7d21 Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
@@ -7,6 +7,7 @@ var Widget = require('web.Widget');
|
||||
var DocumentViewer = require('mail.DocumentViewer');
|
||||
|
||||
var QWeb = core.qweb;
|
||||
var _t = core._t;
|
||||
|
||||
var AttachmentBox = Widget.extend({
|
||||
template: 'mail.chatter.AttachmentBox',
|
||||
@@ -36,7 +37,7 @@ var AttachmentBox = Widget.extend({
|
||||
_.each(attachments, function (attachment) {
|
||||
// required for compatibility with the chatter templates.
|
||||
attachment.url = '/web/content/' + attachment.id + '?download=true';
|
||||
attachment.filename = attachment.name || 'unnamed';
|
||||
attachment.filename = attachment.name || _t('unnamed');
|
||||
});
|
||||
var sortedAttachments = _.partition(attachments, function (att) {
|
||||
return att.mimetype && att.mimetype.split('/')[0] === 'image';
|
||||
|
||||
@@ -48,6 +48,9 @@ var AbstractMessage = Class.extend({
|
||||
this._type = data.message_type || undefined;
|
||||
|
||||
this._processAttachmentURL();
|
||||
this._attachmentIDs.forEach(function (attachment) {
|
||||
attachment.filename = attachment.filename || attachment.name || _t("unnamed");
|
||||
});
|
||||
},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user