diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 420366862bd..f6c7726df23 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -12,6 +12,8 @@ from openerp.addons.web.http import request import werkzeug import werkzeug.exceptions import werkzeug.wrappers +import hashlib +import os logger = logging.getLogger(__name__) @@ -154,6 +156,50 @@ class Website(openerp.addons.web.controllers.main.Home): return response + @http.route('/website/image', type='http', auth="public") + def image(self, model, id, field, **kw): + last_update = '__last_update' + Model = request.registry[model] + headers = [('Content-Type', 'image/png')] + etag = request.httprequest.headers.get('If-None-Match') + hashed_session = hashlib.md5(request.session_id).hexdigest() + retag = hashed_session + + print Model.search(request.cr, request.uid, [(1,'=',1)]) + + try: + if etag: + date = Model.read(request.cr, request.uid, [id], [last_update], request.context)[0].get(last_update) + if hashlib.md5(date).hexdigest() == etag: + return werkzeug.wrappers.Response(status=304) + + res = Model.read(request.cr, request.uid, [id], [last_update, field], request.context)[0] + retag = hashlib.md5(res.get(last_update)).hexdigest() + image_base64 = res.get(field) + + if kw.get('resize'): + resize = kw.get('resize').split(',') + if len(resize) == 2 and int(resize[0]) and int(resize[1]): + width = int(resize[0]) + height = int(resize[1]) + # resize maximum 500*500 + if width > 500: width = 500 + if height > 500: height = 500 + image_base64 = openerp.tools.image_resize_image(base64_source=image_base64, size=(width, height), encoding='base64', filetype='PNG') + + image_data = base64.b64decode(image_base64) + except Exception: + image_data = open(os.path.join(http.addons_manifest['web']['addons_path'], 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() + + headers.append(('ETag', retag)) + headers.append(('Content-Length', len(image_data))) + try: + ncache = int(kw.get('cache')) + headers.append(('Cache-Control', 'no-cache' if ncache == 0 else 'max-age=%s' % (ncache))) + except: + pass + return request.make_response(image_data, headers) + @http.route(['/website/publish/'], type='http', auth="public") def publish(self, **post): _id = int(post['id']) diff --git a/addons/website/views/views.xml b/addons/website/views/views.xml index 12267889b62..e081585b682 100644 --- a/addons/website/views/views.xml +++ b/addons/website/views/views.xml @@ -408,7 +408,9 @@ ✆
- + + + diff --git a/addons/website/website.py b/addons/website/website.py index de0a36d8f68..a3208f96470 100644 --- a/addons/website/website.py +++ b/addons/website/website.py @@ -24,7 +24,7 @@ def urlplus(url, params): return url url += "?" for k,v in params.items(): - url += "%s=%s&" % (k, urllib.quote_plus(v)) + url += "%s=%s&" % (k, urllib.quote_plus(str(v))) return url diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 09734664b88..8f681b6cbcd 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -103,7 +103,6 @@ class website_event(http.Controller): event = request.registry['event.event'].browse(request.cr, request.uid, event_id, {'show_address': 1}) 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 '')) }) return website.render("website_event.detail", values) diff --git a/addons/website_event/event.py b/addons/website_event/event.py index da80f86fc5b..3a880503bc9 100644 --- a/addons/website_event/event.py +++ b/addons/website_event/event.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from openerp.osv import osv, fields +from openerp import SUPERUSER_ID # defined for access rules class product(osv.osv): @@ -9,3 +10,16 @@ class product(osv.osv): 'event_ticket_ids': fields.one2many('event.event.ticket', 'product_id', 'Event Tickets'), } + +class event_event(osv.osv): + _inherit = "event.event" + + def google_map_img(self, cr, uid, ids, zoom=8, width=298, height=298, context=None): + partner = self.browse(cr, uid, ids[0], context=context) + if partner.address_id: + return self.browse(cr, SUPERUSER_ID, ids[0], context=context).address_id.google_map_img() + + def google_map_link(self, cr, uid, ids, zoom=8, context=None): + partner = self.browse(cr, uid, ids[0], context=context) + if partner.address_id: + return self.browse(cr, SUPERUSER_ID, ids[0], context=context).address_id.google_map_link() diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index 1ee411f8e91..be9902732f4 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -112,14 +112,16 @@ - + Events

When & Where

- + + +
                               
diff --git a/addons/website_hr/hr.py b/addons/website_hr/hr.py index 91ae7a89ada..105a60c1a21 100644 --- a/addons/website_hr/hr.py +++ b/addons/website_hr/hr.py @@ -9,3 +9,5 @@ class hr(osv.osv): 'website_published': fields.boolean('Available in the website'), } + def img(self, cr, uid, ids, field='image_small', context=None): + return "/website/image?model=%s&field=%s&id=%s" % (self._name, field, ids[0]) diff --git a/addons/website_hr/views/website_hr.xml b/addons/website_hr/views/website_hr.xml index 4092e280eb8..024aa3e7b6e 100644 --- a/addons/website_hr/views/website_hr.xml +++ b/addons/website_hr/views/website_hr.xml @@ -32,7 +32,7 @@
- +
diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml index 9bd036b1865..1fe090c0534 100644 --- a/addons/website_sale/views/website_sale.xml +++ b/addons/website_sale/views/website_sale.xml @@ -113,7 +113,7 @@
- +
@@ -144,7 +144,7 @@ - +
@@ -160,7 +160,7 @@
- +
@@ -195,7 +195,7 @@ - +
diff --git a/addons/website_sale/website_sale.py b/addons/website_sale/website_sale.py index 235bcf683aa..b15dc29db3e 100644 --- a/addons/website_sale/website_sale.py +++ b/addons/website_sale/website_sale.py @@ -57,6 +57,8 @@ class product_product(osv.osv): product_ids = self.search(cr, uid, [("id", "in", product_ids)]) return self.browse(cr, uid, product_ids) + def img(self, cr, uid, ids, field='image_small', context=None): + return "/website/image?model=%s&field=%s&id=%s" % (self._name, field, ids[0]) class sale_order(osv.osv): _inherit = "sale.order"