diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index 83af820b976..a347f789f7c 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -17,30 +17,6 @@ import werkzeug.wrappers
logger = logging.getLogger(__name__)
-def template_values():
- script = "\n".join(['' % i for i in manifest_list('js', db=request.db)])
- css = "\n".join('' % i for i in manifest_list('css', db=request.db))
- try:
- request.session.check_security()
- loggued = True
- uid = request.session._uid
- except http.SessionExpiredException:
- loggued = False
- uid = openerp.SUPERUSER_ID
-
- values = {
- 'loggued': loggued,
- 'editable': loggued,
- 'request': request,
- 'registry': request.registry,
- 'cr': request.cr,
- 'uid': uid,
- 'script': script,
- 'css': css,
- 'host_url': request.httprequest.host_url,
- }
- return values
-
class Website(openerp.addons.web.controllers.main.Home):
@http.route('/', type='http', auth="admin")
def index(self, **kw):
@@ -52,13 +28,11 @@ class Website(openerp.addons.web.controllers.main.Home):
@http.route('/pagenew/', type='http', auth="admin")
def pagenew(self, path):
- values = template_values()
- uid = values['uid']
imd = request.registry['ir.model.data']
view = request.registry['ir.ui.view']
- view_model, view_id = imd.get_object_reference(request.cr, uid, 'website', 'default_page')
- newview_id = view.copy(request.cr, uid, view_id)
- newview = view.browse(request.cr, uid, newview_id, context={})
+ view_model, view_id = imd.get_object_reference(request.cr, request.uid, 'website', 'default_page')
+ newview_id = view.copy(request.cr, request.uid, view_id)
+ newview = view.browse(request.cr, request.uid, newview_id, context={})
newview.write({
'arch': newview.arch.replace("website.default_page", path),
'name': "page/%s" % path
@@ -68,7 +42,7 @@ class Website(openerp.addons.web.controllers.main.Home):
else:
module = False
idname = path
- imd.create(request.cr, uid, {
+ imd.create(request.cr, request.uid, {
'name': idname,
'module': module,
'model': 'ir.ui.view',
@@ -79,29 +53,14 @@ class Website(openerp.addons.web.controllers.main.Home):
@http.route('/page/', type='http', auth="admin")
def page(self, path):
- #def get_html_head():
- # head += ['' % i for i in manifest_list('css', db=request.db)]
- #modules = request.registry.get("ir.module.module").search_read(request.cr, openerp.SUPERUSER_ID, fields=['id', 'shortdesc', 'summary', 'icon_image'], limit=50)
- values = template_values()
- uid = values['uid']
- context = {
- 'inherit_branding': values['editable'],
- }
- company = request.registry['res.company'].browse(request.cr, uid, 1, context=context)
- values.update(
- res_company=company,
- path=path,
- google_map_url="http://maps.googleapis.com/maps/api/staticmap?" + urllib.urlencode({
- 'center': '%s, %s %s, %s' % (company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or ''),
- 'sensor': 'false',
- 'zoom': '8',
- 'size': '298x298',
- }),
- )
+ website = request.registry.get("website")
+ values = website.get_rendering_context({
+ 'path': path
+ })
try:
- html = request.registry.get("ir.ui.view").render(request.cr, uid, path, values, context)
- except ValueError, e:
- html = request.registry.get("ir.ui.view").render(request.cr, uid, 'website.404', values, context)
+ html = website.render(path, values)
+ except ValueError:
+ html = website.render('website.404', values)
return html
@http.route('/website/attach', type='http', auth='admin') # FIXME: auth
diff --git a/addons/website/website.py b/addons/website/website.py
index ef2464983ab..ebb66ab6e4c 100644
--- a/addons/website/website.py
+++ b/addons/website/website.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import openerp
+from openerp.osv import osv
from openerp.addons.web import http
from openerp.addons.web.controllers import main
from openerp.addons.web.http import request
@@ -18,22 +19,36 @@ def auth_method_public():
http.auth_methods['public'] = auth_method_public
-class website(object):
- def render(self, template, add_values={}):
+class website(osv.osv):
+ _name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco
+ _description = "Website"
+
+ def get_rendering_context(self, additional_values=None):
debug = 'debug' in request.params
- script = "\n".join(['' % i for i in main.manifest_list('js', db=request.db, debug=debug)])
- css = "\n".join('' % i for i in main.manifest_list('css', db=request.db, debug=debug))
- _values = {
- 'editable': request.uid != request.public_uid,
+ editable = False
+ if request.uid or (request.public_uid and request.uid != request.public_uid):
+ editable = True
+ values = {
+ 'debug': debug,
+ 'editable': editable,
'request': request,
'registry': request.registry,
'cr': request.cr,
'uid': request.uid,
- 'script': script,
- 'css': css,
'host_url': request.httprequest.host_url,
'res_company': request.registry['res.company'].browse(request.cr, openerp.SUPERUSER_ID, 1),
}
- _values.update(add_values)
- return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, _values)
-website = website()
+ if editable:
+ values.update({
+ 'script': "\n".join(['' % i for i in main.manifest_list('js', db=request.db, debug=debug)]),
+ 'css': "\n".join('' % i for i in main.manifest_list('css', db=request.db, debug=debug))
+ })
+ if additional_values:
+ values.update(additional_values)
+ return values
+
+ def render(self, template, values={}):
+ # context = {
+ # 'inherit_branding': values['editable'],
+ # }
+ return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, values)
diff --git a/addons/website_crm/controllers/main.py b/addons/website_crm/controllers/main.py
index 37e921b029b..83613e108d4 100644
--- a/addons/website_crm/controllers/main.py
+++ b/addons/website_crm/controllers/main.py
@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-
-import openerp
from openerp.addons.web import http
from openerp.addons.web.http import request
-from openerp.addons.website.controllers.main import template_values
from urllib import quote_plus
@@ -11,16 +9,14 @@ class contactus(http.Controller):
@http.route(['/crm/contactus'], type='http', auth="admin")
def contactus(self, *arg, **post):
+ website = request.registry['website']
post['user_id'] = False
request.registry['crm.lead'].create(request.cr, request.uid, post)
- values = template_values()
- company = request.registry['res.company'].browse(request.cr, request.uid, 1)
+ values = website.get_rendering_context()
+ company = values['res_company']
values.update({
- 'res_company': company,
'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=8&size=298x298" % quote_plus('%s, %s %s, %s' % (company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or ''))
})
- html = request.registry.get("ir.ui.view").render(request.cr, request.uid, "website_crm.thanks", values)
- return html
-
+ return website.render("website_crm.thanks", values)
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index 68cc2f73718..cca132dca36 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -1,9 +1,7 @@
# -*- coding: utf-8 -*-
-from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.addons.web.http import request
-from openerp.addons.website import website
from openerp.tools.translate import _
from datetime import datetime
@@ -13,10 +11,11 @@ import urllib
import werkzeug
-class website_hr(http.Controller):
+class website_event(http.Controller):
@http.route(['/event'], type='http', auth="public")
def events(self, **searches):
+ website = request.registry['website']
event_obj = request.registry['event.event']
searches.setdefault('date', 'all')
@@ -83,27 +82,26 @@ class website_hr(http.Controller):
obj_ids = event_obj.search(request.cr, request.uid, dom_without("none"), order="date_begin DESC")
- values = {
+ values = website.get_rendering_context({
'event_ids': event_obj.browse(request.cr, request.uid, obj_ids),
'dates': dates,
'types': types,
'countries': countries,
'searches': searches,
'search_path': "?%s" % urllib.urlencode(searches),
- }
+ })
- html = website.render("website_event.index", values)
- return html
+ return website.render("website_event.index", values)
@http.route(['/event/'], type='http', auth="public")
def event(self, event_id=None, **post):
+ website = request.registry['website']
event = request.registry['event.event'].browse(request.cr, request.uid, event_id)
- values = {
+ values = website.get_rendering_context({
'event_id': event,
'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=12&size=298x298" % urllib.quote_plus('%s, %s %s, %s' % (event.street, event.city, event.zip, event.country_id and event.country_id.name_get()[0][1] or ''))
- }
- html = website.render("website_event.detail", values)
- return html
+ })
+ return website.render("website_event.detail", values)
@http.route(['/event//add_cart'], type='http', auth="public")
def add_cart(self, event_id=None, **post):
diff --git a/addons/website_hr/controllers/main.py b/addons/website_hr/controllers/main.py
index cf5d33325bc..968ec607269 100644
--- a/addons/website_hr/controllers/main.py
+++ b/addons/website_hr/controllers/main.py
@@ -2,21 +2,18 @@
from openerp.addons.web import http
from openerp.addons.web.http import request
-from openerp.addons.website import website
class website_hr(http.Controller):
@http.route(['/hr'], type='http', auth="public")
def blog(self, **post):
+ website = request.registry['website']
hr_obj = request.registry['hr.employee']
-
employee_ids = hr_obj.search(request.cr, request.uid, [(1, "=", 1)])
- values = {
- 'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids),
- }
-
- html = website.render("website_hr.index", values)
- return html
+ values = website.get_rendering_context({
+ 'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids)
+ })
+ return website.render("website_hr.index", values)
@http.route(['/hr/publish'], type='http', auth="public")
def publish(self, **post):
diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py
index 7bc35f1fe4a..2c67e3c6ba8 100644
--- a/addons/website_mail/controllers/main.py
+++ b/addons/website_mail/controllers/main.py
@@ -2,7 +2,6 @@
from openerp.addons.web import http
from openerp.addons.web.http import request
-from openerp.addons.website import website
import werkzeug
from openerp.tools.translate import _
from openerp.tools.safe_eval import safe_eval
@@ -15,17 +14,18 @@ class website_mail(http.Controller):
@http.route(['/blog', '/blog/', '/blog//'], type='http', auth="public")
def blog(self, mail_group_id=None, blog_id=None, **post):
+ website = request.registry['website']
group_obj = request.registry['mail.group']
message_obj = request.registry['mail.message']
- values = {
+ values = website.get_rendering_context({
'blog_ids': None,
'blog_id': None,
'nav_list': dict(),
'prev_date': None,
'next_date': None,
'mail_group_id': mail_group_id,
- }
+ })
domain = mail_group_id and [("res_id", "=", mail_group_id)] or []
for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"):
@@ -50,8 +50,7 @@ class website_mail(http.Controller):
if blog_id:
values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id)
- html = website.render("website_mail.index", values)
- return html
+ return website.render("website_mail.index", values)
@http.route(['/blog/nav'], type='http', auth="public")
def nav(self, **post):
diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index bae6b8b0758..33110a2bc1c 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -2,54 +2,57 @@
import openerp
import simplejson
+from openerp.osv import osv
from openerp.addons.web import http
-from openerp.addons.website import website
from openerp.addons.web.http import request
+def get_order(order_id=None):
+ order_obj = request.registry.get('sale.order')
+ # check if order allready exists
+ if order_id:
+ try:
+ order_obj.browse(request.cr, openerp.SUPERUSER_ID, order_id).pricelist_id
+ except:
+ order_id = None
+ if not order_id:
+ fields = [k for k, v in order_obj._columns.items()]
+ order_value = order_obj.default_get(request.cr, openerp.SUPERUSER_ID, fields)
+ order_value['partner_id'] = openerp.SUPERUSER_ID != request.public_uid and \
+ request.registry.get('res.users').browse(request.cr, openerp.SUPERUSER_ID, request.uid).partner_id.id or \
+ None
+ order_value.update(order_obj.onchange_partner_id(request.cr, openerp.SUPERUSER_ID, [], request.uid, context={})['value'])
+ order_id = order_obj.create(request.cr, openerp.SUPERUSER_ID, order_value)
+ return order_obj.browse(request.cr, openerp.SUPERUSER_ID, order_id)
+
+def get_current_order():
+ order = get_order(request.httprequest.session.get('ecommerce_order_id'))
+ request.httprequest.session['ecommerce_order_id'] = order.id
+ return order
+
+def get_categories():
+ category_obj = request.registry.get('pos.category')
+ category_ids = category_obj.search(request.cr, openerp.SUPERUSER_ID, [('parent_id', '=', False)])
+ return category_obj.browse(request.cr, openerp.SUPERUSER_ID, category_ids)
+
+
+class website(osv.osv):
+ _inherit = "website"
+ def get_rendering_context(self, additional_values=None):
+ values = {
+ 'website_sale_get_categories': get_categories,
+ 'order': get_current_order(),
+ # 'website_sale_get_current_order': get_current_order, # TODO: replace 'order' key in templates
+ }
+ if additional_values:
+ values.update(additional_values)
+ return super(website, self).get_rendering_context(values)
class Ecommerce(http.Controller):
- def get_categories(self):
- category_obj = request.registry.get('pos.category')
- category_ids = category_obj.search(request.cr, openerp.SUPERUSER_ID, [('parent_id', '=', False)])
- return category_obj.browse(request.cr, openerp.SUPERUSER_ID, category_ids)
-
- def get_current_order(self):
- order = self.get_order(request.httprequest.session.get('ecommerce_order_id'))
- request.httprequest.session['ecommerce_order_id'] = order.id
- return order
-
- def get_order(self, order_id=None):
-
- order_obj = request.registry.get('sale.order')
- # check if order allready exists
- if order_id:
- try:
- order_obj.browse(request.cr, openerp.SUPERUSER_ID, order_id).pricelist_id
- except:
- order_id = None
- if not order_id:
- fields = [k for k, v in order_obj._columns.items()]
- order_value = order_obj.default_get(request.cr, openerp.SUPERUSER_ID, fields)
- order_value['partner_id'] = openerp.SUPERUSER_ID != request.public_uid and \
- request.registry.get('res.users').browse(request.cr, openerp.SUPERUSER_ID, request.uid).partner_id.id or \
- None
- order_value.update(order_obj.onchange_partner_id(request.cr, openerp.SUPERUSER_ID, [], request.uid, context={})['value'])
- order_id = order_obj.create(request.cr, openerp.SUPERUSER_ID, order_value)
- return order_obj.browse(request.cr, openerp.SUPERUSER_ID, order_id)
-
- def render(self, template, values={}):
- _values = {
- 'order': self.get_current_order(),
- 'categories': self.get_categories(),
- }
- _values.update(values)
- return website.render(template, _values)
-
def recommended_product(self, my_pids):
if not my_pids:
return []
-
+
my_pids = str(my_pids)[1:-1]
product_ids = []
query = """
@@ -70,6 +73,7 @@ class Ecommerce(http.Controller):
@http.route(['/shop', '/shop/category/'], type='http', auth="public")
def category(self, cat_id=0, offset=0, **post):
+ website = request.registry['website']
domain = [("sale_ok", "=", True)]
if post.get("search"):
@@ -81,17 +85,17 @@ class Ecommerce(http.Controller):
product_obj = request.registry.get('product.product')
product_ids = product_obj.search(request.cr, request.uid, domain, limit=20, offset=offset)
- values = {
+ values = website.get_rendering_context({
'current_category': cat_id,
'products': product_obj.browse(request.cr, request.uid, product_ids),
'search': post.get("search"),
- }
- html = self.render("website_sale.products", values)
- return html
+ })
+ return website.render("website_sale.products", values)
@http.route(['/shop/product/'], type='http', auth="public")
def product(self, cat_id=0, product_id=0):
- order = self.get_current_order()
+ website = request.registry['website']
+ order = get_current_order()
product_id = product_id and int(product_id) or 0
product_obj = request.registry.get('product.product')
@@ -99,17 +103,17 @@ class Ecommerce(http.Controller):
line = [line for line in order.order_line if line.product_id.id == product_id]
quantity = line and int(line[0].product_uom_qty) or 0
- values = {
+ values = website.get_rendering_context({
'product': product_obj.browse(request.cr, request.uid, product_id),
'quantity': quantity,
'recommended_products': self.recommended_product([product_id]),
- }
- html = self.render("website_sale.product", values)
- return html
+ })
+ return website.render("website_sale.product", values)
@http.route(['/shop/mycart'], type='http', auth="public")
def mycart(self, **post):
- order = self.get_current_order()
+ website = request.registry['website']
+ order = get_current_order()
if post.get('code'):
pricelist_obj = request.registry.get('product.pricelist')
@@ -118,14 +122,16 @@ class Ecommerce(http.Controller):
order.write({'pricelist_id': pricelist_ids[0]})
my_pids = [line.product_id.id for line in order.order_line]
- values= {"recommended_products": self.recommended_product(my_pids)}
+ values = website.get_rendering_context({
+ "recommended_products": self.recommended_product(my_pids)
+ })
- html = self.render("website_sale.mycart", values)
- return html
+ return website.render("website_sale.mycart", values)
@http.route(['/shop/add_cart'], type='http', auth="public")
def add_cart(self, product_id=0, remove=False):
-
+ website = request.registry['website']
+ values = website.get_rendering_context()
context = {}
order_obj = request.registry.get('sale.order')
@@ -133,13 +139,12 @@ class Ecommerce(http.Controller):
user_obj = request.registry.get('res.users')
product_id = product_id and int(product_id) or 0
- order = self.get_current_order()
+ order = get_current_order()
quantity = 0
# values initialisation
order_line_ids = order_line_obj.search(request.cr, openerp.SUPERUSER_ID, [('order_id', '=', order.id), ('product_id', '=', product_id)], context=context)
- values = {}
if order_line_ids:
order_line = order_line_obj.read(request.cr, openerp.SUPERUSER_ID, order_line_ids, [], context=context)[0]
quantity = order_line['product_uom_qty'] + (remove and -1 or 1)
@@ -165,8 +170,7 @@ class Ecommerce(http.Controller):
order_line_id = order_line_obj.create(request.cr, openerp.SUPERUSER_ID, values, context=context)
order.write({'order_line': [(4, order_line_id)]}, context=context)
- html = self.render("website_sale.total")
-
+ html = website.render("website_sale.total", values)
return simplejson.dumps({"quantity": quantity, "totalHTML": html})
@http.route(['/shop/remove_cart'], type='http', auth="public")
@@ -175,7 +179,11 @@ class Ecommerce(http.Controller):
@http.route(['/shop/checkout'], type='http', auth="public")
def checkout(self, **post):
- order = self.get_current_order()
+ website = request.registry['website']
+ values = website.get_rendering_context({
+ 'partner': False
+ })
+ order = get_current_order()
if order.state != 'draft':
return self.confirmed(**post)
@@ -188,7 +196,6 @@ class Ecommerce(http.Controller):
country_state_obj = request.registry.get('res.country.state')
payment_obj = request.registry.get('portal.payment.acquirer')
- values = {'partner': False}
if request.uid != request.public_uid:
values['partner'] = user_obj.browse(request.cr, request.uid, request.uid).partner_id
@@ -206,12 +213,12 @@ class Ecommerce(http.Controller):
content = payment_obj.render(request.cr, openerp.SUPERUSER_ID, payment.id, order, order.name, order.pricelist_id.currency_id, order.amount_total)
payment._content = content
- return self.render("website_sale.checkout", values)
+ return website.render("website_sale.checkout", values)
@http.route(['/shop/confirm_order'], type='http', auth="public")
def confirm_order(self, **post):
- order = self.get_current_order()
-
+ order = get_current_order()
+
json = {'error': [], 'validation': False}
partner_obj = request.registry.get('res.partner')
user_obj = request.registry.get('res.users')
@@ -296,23 +303,23 @@ class Ecommerce(http.Controller):
@http.route(['/shop/confirmed'], type='http', auth="public")
def confirmed(self, **post):
+ website = request.registry['website']
if request.httprequest.session.get('ecommerce_order_id'):
- order = self.get_current_order()
+ order = get_current_order()
if order.state != 'draft':
request.httprequest.session['ecommerce_order_id_old'] = order.id
request.httprequest.session['ecommerce_order_id'] = None
- order_old = self.get_order(request.httprequest.session.get('ecommerce_order_id_old'))
+ order_old = get_order(request.httprequest.session.get('ecommerce_order_id_old'))
if not order_old.order_line:
return self.mycart(**post)
- values = {
+ values = website.get_rendering_context({
'temp': 0,
'order': order_old,
- 'categories': self.get_categories(),
- }
- return self.render("website_sale.confirmed", values)
+ })
+ return website.render("website_sale.confirmed", values)
@http.route(['/shop/publish'], type='http', auth="public")
def publish(self, **post):
diff --git a/addons/website_sale/views/ecommerce.xml b/addons/website_sale/views/ecommerce.xml
index bc848ec18e5..3a96895a457 100644
--- a/addons/website_sale/views/ecommerce.xml
+++ b/addons/website_sale/views/ecommerce.xml
@@ -56,7 +56,7 @@