1 # -*- coding: utf-8 -*-
5 from openerp.osv import osv, orm
6 from openerp.addons.web import http
7 from openerp.addons.web.controllers import main
8 from openerp.addons.web.http import request
14 logger = logging.getLogger(__name__)
17 def auth_method_public():
18 registry = openerp.modules.registry.RegistryManager.get(request.db)
19 if not request.session.uid:
20 request.uid = registry['website'].get_public_user().id
22 request.uid = request.session.uid
23 http.auth_methods['public'] = auth_method_public
26 def urlplus(url, params):
30 for k,v in params.items():
31 url += "%s=%s&" % (k, urllib.quote_plus(str(v)))
35 class website(osv.osv):
36 _name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco
37 _description = "Website"
41 def get_public_user(self):
42 if not self.public_user:
43 ref = request.registry['ir.model.data'].get_object_reference(request.cr, openerp.SUPERUSER_ID, 'website', 'public_user')
44 self.public_user = request.registry[ref[0]].browse(request.cr, openerp.SUPERUSER_ID, ref[1])
45 return self.public_user
47 def get_rendering_context(self, additional_values=None):
48 debug = 'debug' in request.params
49 is_public_user = request.uid == self.get_public_user().id
52 'is_public_user': is_public_user,
53 'editable': not is_public_user,
55 'registry': request.registry,
58 'host_url': request.httprequest.host_url,
59 'res_company': request.registry['res.company'].browse(request.cr, openerp.SUPERUSER_ID, 1),
62 if values['editable']:
64 'script': "\n".join(['<script type="text/javascript" src="%s"></script>' % i for i in main.manifest_list('js', db=request.db, debug=debug)]),
65 'css': "\n".join('<link rel="stylesheet" href="%s">' % i for i in main.manifest_list('css', db=request.db, debug=debug))
68 values.update(additional_values)
71 def render(self, template, values={}):
73 'inherit_branding': values.get('editable', False),
76 return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, values, context=context)
77 except (osv.except_osv, orm.except_orm), err:
79 values['error'] = err[1]
80 return self.render('website.401', values)
82 # logger.error("Website Rendering Error.\n\n%s" % (traceback.format_exc()))
83 # return self.render('website.404', values)
85 logger.error("Website Rendering Error.\n\n%s" % (traceback.format_exc()))
86 if values['editable']:
87 values['traceback'] = traceback.format_exc()
88 return self.render('website.500', values)
90 return self.render('website.404', values)
92 def pager(self, url, total, page=1, step=30, scope=5, url_args=None):
95 d["page_count"] = int(math.ceil(float(total) / step))
97 page = max(1, min(int(page), d["page_count"]))
99 d["offset"] = (page-1) * step
102 pmin = max(page - int(math.floor(scope/2)), 1)
103 pmax = min(pmin + scope, d["page_count"])
105 if pmax - pmin < scope:
106 pmin = pmax - scope > 0 and pmax - scope or 1
109 _url = "%spage/%s/" % (url, page)
111 _url = "%s?%s" % (_url, urllib.urlencode(url_args))
114 d["page"] = {'url': get_url(page), 'num': page}
115 d["page_start"] = {'url': get_url(pmin), 'num': pmin}
116 d["page_end"] = {'url': get_url(min(pmax, page+1)), 'num': min(pmax, page+1)}
118 for page in range(pmin, pmax+1):
119 d["pages"].append({'url': get_url(page), 'num': page})
124 class res_partner(osv.osv):
125 _inherit = "res.partner"
127 def google_map_img(self, cr, uid, ids, zoom=8, width=298, height=298, context=None):
128 partner = self.browse(cr, uid, ids[0], context=context)
130 'center': '%s, %s %s, %s' % (partner.street, partner.city, partner.zip, partner.country_id and partner.country_id.name_get()[0][1] or ''),
131 'size': "%sx%s" % (height, width),
135 return urlplus('http://maps.googleapis.com/maps/api/staticmap' , params)
137 def google_map_link(self, cr, uid, ids, zoom=8, context=None):
138 partner = self.browse(cr, uid, ids[0], context=context)
140 'q': '%s, %s %s, %s' % (partner.street, partner.city, partner.zip, partner.country_id and partner.country_id.name_get()[0][1] or ''),
142 return urlplus('https://maps.google.be/maps' , params)