[FIX] mass_mailing: avoid too long URIs by blacklisting fields in editor call
The call to the web_editor is made through an iframe with some get parameters. While not really a problem in itself, this has the disadvantage of generating long URIs. In some case, since all the fields in the views are included as a GET parameter, URIs can be generated that go up to several thousand characters. Most servers will return a 414 for such URIs, preventing the edition of the mail template in the view. To avoid this problem, this commit extends the 'html_frame' widget and blacklist 2 fields that can get too long once encoded. Ideally, it would probably be better to stop sending all the fields and simply add the *needed* fields one by one, but since it's difficult to know exactly what fields might be needed and this is stable, I'm gonna go with this 'workaround' but conservative fix. opw-685646
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
odoo.define('mass_mailing.mass_mailing', function (require) {
|
odoo.define('mass_mailing.mass_mailing', function (require) {
|
||||||
|
|
||||||
var core = require('web.core');
|
var core = require('web.core');
|
||||||
|
var FieldTextHtml = require('web_editor.backend').FieldTextHtml;
|
||||||
var KanbanRecord = require('web_kanban.Record');
|
var KanbanRecord = require('web_kanban.Record');
|
||||||
var KanbanView = require('web_kanban.KanbanView');
|
var KanbanView = require('web_kanban.KanbanView');
|
||||||
|
|
||||||
@@ -25,4 +26,21 @@ KanbanView.include({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
FieldTextHtml.include({
|
||||||
|
get_datarecord: function() {
|
||||||
|
/* Avoid extremely long URIs by whitelisting fields in the datarecord
|
||||||
|
that get set as a get parameter */
|
||||||
|
var datarecord = this._super();
|
||||||
|
if (this.view.model === 'mail.mass_mailing') {
|
||||||
|
// these fields can potentially get very long, let's remove them
|
||||||
|
var blacklist = ['mailing_domain', 'contact_list_ids'];
|
||||||
|
for (var k in blacklist) {
|
||||||
|
delete datarecord[blacklist[k]];
|
||||||
|
}
|
||||||
|
delete datarecord[this.name];
|
||||||
|
}
|
||||||
|
return datarecord;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -220,9 +220,12 @@ var FieldTextHtml = widget.extend({
|
|||||||
this.$translate = $();
|
this.$translate = $();
|
||||||
return def;
|
return def;
|
||||||
},
|
},
|
||||||
|
get_datarecord: function() {
|
||||||
|
return this.view.get_fields_values();
|
||||||
|
},
|
||||||
get_url: function (_attr) {
|
get_url: function (_attr) {
|
||||||
var src = this.options.editor_url || "/web_editor/field/html";
|
var src = this.options.editor_url || "/web_editor/field/html";
|
||||||
var datarecord = this.view.get_fields_values();
|
var datarecord = this.get_datarecord();
|
||||||
|
|
||||||
var attr = {
|
var attr = {
|
||||||
'model': this.view.model,
|
'model': this.view.model,
|
||||||
@@ -269,7 +272,6 @@ var FieldTextHtml = widget.extend({
|
|||||||
|
|
||||||
delete datarecord[this.name];
|
delete datarecord[this.name];
|
||||||
src += "&datarecord="+ encodeURIComponent(JSON.stringify(datarecord));
|
src += "&datarecord="+ encodeURIComponent(JSON.stringify(datarecord));
|
||||||
|
|
||||||
return src;
|
return src;
|
||||||
},
|
},
|
||||||
initialize_content: function() {
|
initialize_content: function() {
|
||||||
@@ -384,4 +386,9 @@ core.form_widget_registry
|
|||||||
.add('html', FieldTextHtmlSimple)
|
.add('html', FieldTextHtmlSimple)
|
||||||
.add('html_frame', FieldTextHtml);
|
.add('html_frame', FieldTextHtml);
|
||||||
|
|
||||||
|
return {
|
||||||
|
FieldTextHtmlSimple: FieldTextHtmlSimple,
|
||||||
|
FieldTextHtml: FieldTextHtml,
|
||||||
|
};
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user