diff options
| author | Christophe Simonis <chs@odoo.com> | 2014-09-05 15:28:22 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2014-09-05 15:28:22 +0200 |
| commit | 31bf30d2d0eb78baaa36360b99fe58bf7cd4c9e7 (patch) | |
| tree | d7be61ecd6bb4c8b5552e39b03e2a64eebbbf323 /addons/website/controllers/main.py | |
| parent | afba9e8817c458640ae446ac7aaaab79be4fe1e9 (diff) | |
| parent | ed1c173971968eaa96693cb4e1547efa6e6c34e0 (diff) | |
[MERGE] forward port of branch 8.0 up to ed1c173
Diffstat (limited to 'addons/website/controllers/main.py')
| -rw-r--r-- | addons/website/controllers/main.py | 81 |
1 files changed, 57 insertions, 24 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index ce080d34821..0f08a9e717c 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -3,12 +3,15 @@ import cStringIO import datetime from itertools import islice import json +import xml.etree.ElementTree as ET + import logging import re from sys import maxint import werkzeug.utils +import urllib2 import werkzeug.wrappers from PIL import Image @@ -53,8 +56,10 @@ class Website(openerp.addons.web.controllers.main.Home): values = { 'path': page, } - # allow shortcut for /page/<website_xml_id> - if '.' not in page: + # /page/website.XXX --> /page/XXX + if page.startswith('website.'): + return request.redirect('/page/' + page[8:], code=301) + elif '.' not in page: page = 'website.%s' % page try: @@ -136,6 +141,22 @@ class Website(openerp.addons.web.controllers.main.Home): return request.make_response(content, [('Content-Type', mimetype)]) + @http.route('/website/info', type='http', auth="public", website=True) + def website_info(self): + try: + request.website.get_template('website.info').name + except Exception, e: + return request.registry['ir.http']._handle_exception(e, 404) + irm = request.env()['ir.module.module'].sudo() + apps = irm.search([('state','=','installed'),('application','=',True)]) + modules = irm.search([('state','=','installed'),('application','=',False)]) + values = { + 'apps': apps, + 'modules': modules, + 'version': openerp.service.common.exp_version() + } + return request.render('website.info', values) + #------------------------------------------------------ # Edit #------------------------------------------------------ @@ -197,13 +218,13 @@ class Website(openerp.addons.web.controllers.main.Home): user_groups = set(user.groups_id) views = request.registry["ir.ui.view"]\ - ._views_get(request.cr, request.uid, xml_id, bundles=bundles, context=request.context) + ._views_get(request.cr, request.uid, xml_id, bundles=bundles, context=dict(request.context or {}, active_test=False)) done = set() result = [] for v in views: if not user_groups.issuperset(v.groups_id): continue - if full or (v.application != 'always' and v.inherit_id.id != view_theme_id): + if full or (v.customize_show and v.inherit_id.id != view_theme_id): if v.inherit_id not in done: result.append({ 'name': v.inherit_id.name, @@ -220,7 +241,7 @@ class Website(openerp.addons.web.controllers.main.Home): 'xml_id': v.xml_id, 'inherit_id': v.inherit_id.id, 'header': False, - 'active': v.application in ('always', 'enabled'), + 'active': v.active, }) return result @@ -334,6 +355,18 @@ class Website(openerp.addons.web.controllers.main.Home): obj = _object.browse(request.cr, request.uid, _id) return bool(obj.website_published) + @http.route(['/website/seo_suggest/<keywords>'], type='http', auth="public", website=True) + def seo_suggest(self, keywords): + url = "http://google.com/complete/search" + try: + req = urllib2.Request("%s?%s" % (url, werkzeug.url_encode({ + 'ie': 'utf8', 'oe': 'utf8', 'output': 'toolbar', 'q': keywords}))) + request = urllib2.urlopen(req) + except (urllib2.HTTPError, urllib2.URLError): + return [] + xmlroot = ET.fromstring(request.read()) + return json.dumps([sugg[0].attrib['data'] for sugg in xmlroot if len(sugg) and sugg[0].attrib['data']]) + #------------------------------------------------------ # Themes #------------------------------------------------------ @@ -356,8 +389,9 @@ class Website(openerp.addons.web.controllers.main.Home): enable = [] disable = [] ids = self.get_view_ids(xml_ids) - for v in view.browse(request.cr, request.uid, ids, context=request.context): - if v.application != "disabled": + context = dict(request.context or {}, active_test=True) + for v in view.browse(request.cr, request.uid, ids, context=context): + if v.active: enable.append(v.xml_id) else: disable.append(v.xml_id) @@ -370,19 +404,12 @@ class Website(openerp.addons.web.controllers.main.Home): cr, uid, context, pool = request.cr, request.uid, request.context, request.registry view = pool["ir.ui.view"] - def set_application(ids, application): - write_ids = [] - for v in view.browse(cr, uid, self.get_view_ids(ids), context=context): - if v.application == 'always': - continue - if v.application != application: - write_ids.append(v.id) - - if write_ids: - view.write(cr, uid, write_ids, {'application': application}) + def set_active(ids, active): + if ids: + view.write(cr, uid, ids, {'active': active}, context=dict(request.context or {}, active_test=True)) - set_application(disable, 'disabled') - set_application(enable, 'enabled') + set_active(disable, False) + set_active(enable, True) return True @@ -405,7 +432,8 @@ class Website(openerp.addons.web.controllers.main.Home): '/website/image', '/website/image/<xmlid>', '/website/image/<xmlid>/<field>', - '/website/image/<model>/<id>/<field>' + '/website/image/<model>/<id>/<field>', + '/website/image/<model>/<id>/<field>/<int:max_width>x<int:max_height>' ], auth="public", website=True) def website_image(self, model=None, id=None, field=None, xmlid=None, max_width=None, max_height=None): """ Fetches the requested field and ensures it does not go above @@ -436,10 +464,15 @@ class Website(openerp.addons.web.controllers.main.Home): if not model or not id or not field: raise werkzeug.exceptions.NotFound() - response = werkzeug.wrappers.Response() - return request.registry['website']._image( - request.cr, request.uid, model, id, field, response, max_width, max_height) - + try: + response = werkzeug.wrappers.Response() + return request.registry['website']._image( + request.cr, request.uid, model, id, field, response, max_width, max_height) + except Exception: + logger.exception("Cannot render image field %r of record %s[%s] at size(%s,%s)", + field, model, id, max_width, max_height) + response = werkzeug.wrappers.Response() + return self.placeholder(response) #------------------------------------------------------ # Server actions |
