1 # -*- coding: utf-8 -*-
5 from openerp.osv import osv
6 from openerp.addons.web import http
7 from openerp.addons.web.controllers import main
8 from openerp.addons.web.http import request
13 def auth_method_public():
14 registry = openerp.modules.registry.RegistryManager.get(request.db)
15 if not request.session.uid:
16 request.uid = registry['website'].get_public_user().id
18 request.uid = request.session.uid
19 http.auth_methods['public'] = auth_method_public
22 def urlplus(url, params):
26 for k,v in params.items():
27 url += "%s=%s&" % (k, urllib.quote_plus(v))
30 class website(osv.osv):
31 _name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco
32 _description = "Website"
36 def get_public_user(self):
37 if not self.public_user:
38 ref = request.registry['ir.model.data'].get_object_reference(request.cr, openerp.SUPERUSER_ID, 'website', 'public_user')
39 self.public_user = request.registry[ref[0]].browse(request.cr, openerp.SUPERUSER_ID, ref[1])
40 return self.public_user
42 def get_rendering_context(self, additional_values=None):
43 debug = 'debug' in request.params
44 is_public_user = request.uid == self.get_public_user().id
47 'is_public_user': is_public_user,
48 'editable': not is_public_user,
50 'registry': request.registry,
53 'host_url': request.httprequest.host_url,
54 'res_company': request.registry['res.company'].browse(request.cr, openerp.SUPERUSER_ID, 1),
57 if values['editable']:
59 'script': "\n".join(['<script type="text/javascript" src="%s"></script>' % i for i in main.manifest_list('js', db=request.db, debug=debug)]),
60 'css': "\n".join('<link rel="stylesheet" href="%s">' % i for i in main.manifest_list('css', db=request.db, debug=debug))
63 values.update(additional_values)
66 def render(self, template, values={}):
68 'inherit_branding': values.get('editable', False),
70 return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, values, context=context)
72 def pager(self, url, total, page=1, step=30, scope=5):
75 d["page_count"] = int(math.ceil(total / step))
77 page = max(1, min(int(page), d["page_count"]))
79 d["offset"] = (page-1) * step
82 pmin = max(page - int(math.floor(scope/2)), 1)
83 pmax = min(pmin + scope, d["page_count"])
85 if pmax - pmin < scope:
86 pmin = pmax - scope > 0 and pmax - scope or 1
89 d["page"] = {'url': "%spage/%s/" % (url, page), 'num': page}
90 d["page_start"] = {'url': "%spage/%s/" % (url, pmin), 'num': pmin}
91 d["page_end"] = {'url': "%spage/%s/" % (url, min(pmax, page+1)), 'num': min(pmax, page+1)}
93 for page in range(pmin, pmax+1):
94 d["pages"].append({'url': "%spage/%s/" % (url, page), 'num': page})