From d264cd164017795cee3a8b463eee318c7dc61552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 16 Apr 2014 12:59:01 +0200 Subject: [PATCH] [IMP] website_mail: make the template / mail editor work. We now have a limited set of fields that we try to edit (body_html and body for body, email_from and email for email-from, name and subject for subject), because t-field is not dynamic. If the model that should be edited does not hold those fields, the mail editor won't work. Also fixed editor not being actiated when going into the body edition. bzr revid: tde@openerp.com-20140416105901-vavkh9erjsq4mof9 --- addons/mass_mailing/models/mass_mailing.py | 2 +- .../website/static/src/js/website.editor.js | 1 + .../controllers/email_designer.py | 63 ++++++++++++++----- addons/website_mail/models/email_template.py | 29 ++------- .../static/src/js/website_email_designer.js | 5 +- .../views/website_email_designer.xml | 42 ++++++++----- 6 files changed, 82 insertions(+), 60 deletions(-) diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py index cb94001be49..bd314f03a3d 100644 --- a/addons/mass_mailing/models/mass_mailing.py +++ b/addons/mass_mailing/models/mass_mailing.py @@ -516,7 +516,7 @@ class MassMailing(osv.Model): if not len(ids) == 1: raise ValueError('One and only one ID allowed for this action') mail = self.browse(cr, uid, ids[0], context=context) - url = '/website_mail/email_designer?model=mail.mass_mailing&res_id=%d&field_body=body_html&field_from=email_form&field_subject=name&template_model=%s' % (ids[0], mail.mailing_model) + url = '/website_mail/email_designer?model=mail.mass_mailing&res_id=%d&template_model=%s&enable_editor=1' % (ids[0], mail.mailing_model) return { 'name': _('Open with Visual Editor'), 'type': 'ir.actions.act_url', diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 365b8cf46ea..2119d05f650 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -427,6 +427,7 @@ editor.edit(); } }); + website.editor_bar = editor; }; /* ----- TOP EDITOR BAR FOR ADMIN ---- */ diff --git a/addons/website_mail/controllers/email_designer.py b/addons/website_mail/controllers/email_designer.py index 8b343913399..447474ced36 100644 --- a/addons/website_mail/controllers/email_designer.py +++ b/addons/website_mail/controllers/email_designer.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- -# from openerp import SUPERUSER_ID +from urllib import urlencode + from openerp.addons.web import http from openerp.addons.web.http import request @@ -8,33 +9,63 @@ from openerp.addons.web.http import request class WebsiteEmailDesigner(http.Controller): @http.route('/website_mail/email_designer', type='http', auth="user", website=True, multilang=True) - def index(self, model, res_id, template_model, field_body='body', field_from='email_from', field_subject='name', **kw): + def index(self, model, res_id, template_model=None, **kw): if not model or not model in request.registry or not res_id: return request.redirect('/') -# if not 'body' in request.registry[model]._all_columns and not 'body_html' in request.registry[model]._all_columns: -# return request.redirect('/') + model_cols = request.registry[model]._all_columns + if 'body' not in model_cols and 'body_html' not in model_cols or \ + 'email' not in model_cols and 'email_from' not in model_cols or \ + 'name' not in model_cols and 'subject' not in model_cols: + return request.redirect('/') obj_ids = request.registry[model].exists(request.cr, request.uid, [res_id], context=request.context) if not obj_ids: return request.redirect('/') + # try to find fields to display / edit -> as t-field is static, we have to limit + # the available fields to a given subset + email_from_field = 'email' + if 'email_from' in model_cols: + email_from_field = 'email_from' + subject_field = 'name' + if 'subject' in model_cols: + subject_field = 'subject' + body_field = 'body' + if 'body_html' in model_cols: + body_field = 'body_html' + cr, uid, context = request.cr, request.uid, request.context - tmpl_obj = request.registry['email.template'] res_id = int(res_id) + record = request.registry[model].browse(cr, uid, res_id, context=context) - tids = tmpl_obj.search(cr, uid, [('model','=',template_model)], context=context) - templates = tmpl_obj.browse(cr, uid, tids, context=context) - - print templates values = { - 'object': request.registry[model].browse(cr, uid, res_id, context=context), - 'templates': templates, + 'record': record, + 'templates': None, 'model': model, 'res_id': res_id, - 'field_body': field_body, - 'field_from': field_from, - 'field_subject': field_subject, + 'email_from_field': email_from_field, + 'subject_field': subject_field, + 'body_field': body_field, } - print '*', values - return request.website.render("website_mail.designer_index", values) + + if getattr(record, body_field): + values['mode'] = 'email_designer' + else: + if kw.get('enable_editor'): + kw.pop('enable_editor') + fragments = dict(model=model, res_id=res_id, **kw) + if template_model: + fragments['template_model'] = template_model + return request.redirect('/website_mail/email_designer?%s' % urlencode(fragments)) + values['mode'] = 'email_template' + + tmpl_obj = request.registry['email.template'] + if template_model: + tids = tmpl_obj.search(cr, uid, [('model', '=', template_model)], context=context) + else: + tids = tmpl_obj.search(cr, uid, [], context=context) + templates = tmpl_obj.browse(cr, uid, tids, context=context) + values['templates'] = templates + + return request.website.render("website_mail.email_designer", values) @http.route(['/website_mail/snippets'], type='json', auth="user", website=True) def snippets(self): diff --git a/addons/website_mail/models/email_template.py b/addons/website_mail/models/email_template.py index 8f8ba3ccf51..aaf8f32cdc1 100644 --- a/addons/website_mail/models/email_template.py +++ b/addons/website_mail/models/email_template.py @@ -1,35 +1,16 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2014-Today OpenERP SA (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp.osv import osv, fields +from openerp.osv import osv from openerp.tools.translate import _ class EmailTemplate(osv.Model): _inherit = 'email.template' - def action_edit_html(self, cr, uid, ids, name, args, context=None): - # tde fixme: avoid asserts - assert len(ids)==1, "One and only one ID allowed for this action" - url = '/website_mail/email_designer?model=email.template&res_id=%d&field_body=body_html&field_from=email_form&field_subject=name' % (ids[0],) + def action_edit_html(self, cr, uid, ids, context=None): + if not len(ids) == 1: + raise ValueError('One and only one ID allowed for this action') + url = '/website_mail/email_designer?model=email.template&res_id=%d&enable_editor=1' % (ids[0],) return { 'name': _('Edit Template'), 'type': 'ir.actions.act_url', diff --git a/addons/website_mail/static/src/js/website_email_designer.js b/addons/website_mail/static/src/js/website_email_designer.js index b023f08eb5a..bd6516bc955 100644 --- a/addons/website_mail/static/src/js/website_email_designer.js +++ b/addons/website_mail/static/src/js/website_email_designer.js @@ -3,9 +3,6 @@ var website = openerp.website; website.snippet.BuildingBlock.include({ - // init: function (parent) { - // this._super.apply(this, arguments); - // }, _get_snippet_url: function () { return '/website_mail/snippets'; } @@ -18,7 +15,7 @@ $('#email_template').hide(); $(".js_content", $(this).parent()).children().clone().appendTo('#email_body'); - // Todo: switch to edit mode + openerp.website.editor_bar.edit(); event.preventDefault(); }); }); diff --git a/addons/website_mail/views/website_email_designer.xml b/addons/website_mail/views/website_email_designer.xml index c478315ea2a..5dee573d735 100644 --- a/addons/website_mail/views/website_email_designer.xml +++ b/addons/website_mail/views/website_email_designer.xml @@ -1,15 +1,15 @@ - + - -