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 @@ - + - -