diff --git a/addons/website/__openerp__.py b/addons/website/__openerp__.py index 7779686c041..4cfabd942ca 100644 --- a/addons/website/__openerp__.py +++ b/addons/website/__openerp__.py @@ -20,12 +20,13 @@ OpenERP Website CMS 'views/snippets.xml', 'views/themes.xml', 'views/res_config.xml', + 'views/ir_actions.xml', ], 'demo': [ 'data/website_demo.xml', ], 'js': ['static/src/js/website.backend.js'], - 'qweb' : ['static/src/xml/website.backend.xml'], + 'qweb': ['static/src/xml/website.backend.xml'], 'css': ['static/src/css/website.backend.css'], 'application': True, } diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index b9fc68bb667..e97a3be9d97 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -9,7 +9,6 @@ import datetime from sys import maxint -import psycopg2 import werkzeug import werkzeug.exceptions import werkzeug.utils @@ -27,6 +26,7 @@ logger = logging.getLogger(__name__) # Completely arbitrary limits MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT = IMAGE_LIMITS = (1024, 768) + class Website(openerp.addons.web.controllers.main.Home): #------------------------------------------------------ # View @@ -366,5 +366,34 @@ class Website(openerp.addons.web.controllers.main.Home): return response + #------------------------------------------------------ + # Server actions + #------------------------------------------------------ + @http.route(['/website/action/'], type='http', auth="public", website=True) + def actions_server(self, id_or_xml_id, **post): + cr, uid, context = request.cr, request.uid, request.context + res, action_id, action = None, None, None + ServerActions = request.registry['ir.actions.server'] -# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: + # find the action_id, either an int, an int into a basestring, or an xml_id + if isinstance(id_or_xml_id, basestring) and '.' in id_or_xml_id: + action_id = request.registry['ir.model.data'].xmlid_to_res_id(request.cr, request.uid, id_or_xml_id, raise_if_not_found=False) + else: + try: + action_id = int(id_or_xml_id) + except ValueError: + pass + # check it effectively exists + if action_id: + action_ids = ServerActions.exists(cr, uid, [action_id], context=context) + action_id = action_ids and action_ids[0] or None + # run it, return only LazyResponse that are templates to be rendered + if action_id: + action = ServerActions.browse(cr, uid, action_id, context=context) + if action.state == 'code' and action.website_published: + action_res = ServerActions.run(cr, uid, [action_id], context=context) + if isinstance(action_res, LazyResponse): + res = action_res + if res: + return res + return request.redirect('/') diff --git a/addons/website/data/website_demo.xml b/addons/website/data/website_demo.xml index d23bc50c817..a7fa4d76a07 100644 --- a/addons/website/data/website_demo.xml +++ b/addons/website/data/website_demo.xml @@ -13,4 +13,122 @@ Great Product for Great People + + + + + + + + + Website Partner Post and Thanks Demo + True + + + +partner_id, partner = False, None +post_partner_id = request.params.get('partner_id') +post_body = request.params.get('body') +if post_partner_id: + try: + post_partner_id = int(post_partner_id) + except: + post_partner_id = False +if post_partner_id: + partner_ids = pool['res.partner'].search(cr, uid, [('id', '=', post_partner_id)], context=context) + partner_id = partner_ids and partner_ids[0] or False +if partner_id and post_body: + partner = pool['res.partner'].message_post(cr, uid, partner_id, body=post_body, subtype='mail.mt_comment', context=context) +values = { + 'partner': partner, +} +response = request.website.render("website.template_partner_post", values) + + code + ir.actions.server + + +