[IMP] use model._fields instead of model._all_columns to cover all fields
[odoo/odoo.git] / addons / website_mail / controllers / email_designer.py
1 # -*- coding: utf-8 -*-
2
3 from urllib import urlencode
4
5 from openerp.addons.web import http
6 from openerp.addons.web.http import request
7 from openerp.tools.mail import html_sanitize
8
9
10 class WebsiteEmailDesigner(http.Controller):
11
12     @http.route('/website_mail/email_designer', type='http', auth="user", website=True)
13     def index(self, model, res_id, template_model=None, **kw):
14         if not model or not model in request.registry or not res_id:
15             return request.redirect('/')
16         model_fields = request.registry[model]._fields
17         if 'body' not in model_fields and 'body_html' not in model_fields or \
18            'email' not in model_fields and 'email_from' not in model_fields or \
19            'name' not in model_fields and 'subject' not in model_fields:
20             return request.redirect('/')
21         res_id = int(res_id)
22         obj_ids = request.registry[model].exists(request.cr, request.uid, [res_id], context=request.context)
23         if not obj_ids:
24             return request.redirect('/')
25         # try to find fields to display / edit -> as t-field is static, we have to limit
26         # the available fields to a given subset
27         email_from_field = 'email'
28         if 'email_from' in model_fields:
29             email_from_field = 'email_from'
30         subject_field = 'name'
31         if 'subject' in model_fields:
32             subject_field = 'subject'
33         body_field = 'body'
34         if 'body_html' in model_fields:
35             body_field = 'body_html'
36
37         cr, uid, context = request.cr, request.uid, request.context
38         record = request.registry[model].browse(cr, uid, res_id, context=context)
39
40         values = {
41             'record': record,
42             'templates': None,
43             'model': model,
44             'res_id': res_id,
45             'email_from_field': email_from_field,
46             'subject_field': subject_field,
47             'body_field': body_field,
48         }
49
50         if getattr(record, body_field):
51             values['mode'] = 'email_designer'
52         else:
53             if kw.get('enable_editor'):
54                 kw.pop('enable_editor')
55                 fragments = dict(model=model, res_id=res_id, **kw)
56                 if template_model:
57                     fragments['template_model'] = template_model
58                 return request.redirect('/website_mail/email_designer?%s' % urlencode(fragments))
59             values['mode'] = 'email_template'
60
61         tmpl_obj = request.registry['email.template']
62         if template_model:
63             tids = tmpl_obj.search(cr, uid, [('model', '=', template_model)], context=context)
64         else:
65             tids = tmpl_obj.search(cr, uid, [], context=context)
66         templates = tmpl_obj.browse(cr, uid, tids, context=context)
67         values['templates'] = templates
68         values['html_sanitize'] = html_sanitize
69
70         return request.website.render("website_mail.email_designer", values)
71
72     @http.route(['/website_mail/snippets'], type='json', auth="user", website=True)
73     def snippets(self):
74         return request.website._render('website_mail.email_designer_snippets')