From 00582919791900f5cf83fb3d11a93aa53e2cc774 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 9 Jan 2014 16:11:40 +0100 Subject: [PATCH] [IMP] Use qweb template for login and webclient bootstrap The database manager should be rewritten server side bzr revid: fme@openerp.com-20140109151140-8x3ia8zpdpw1lics --- addons/web/__openerp__.py | 5 +- addons/web/controllers/main.py | 65 +++++++++++++++----- addons/web/views/webclient_bootstrap.html | 33 ---------- addons/web/views/webclient_templates.xml | 75 +++++++++++++++++++++++ 4 files changed, 127 insertions(+), 51 deletions(-) delete mode 100644 addons/web/views/webclient_bootstrap.html create mode 100644 addons/web/views/webclient_templates.xml diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 09347eea24c..212a8a57cc6 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -12,7 +12,10 @@ This module provides the core of the OpenERP Web Client. 'depends': ['base'], 'auto_install': True, 'post_load': 'wsgi_postload', - 'js' : [ + 'data': [ + 'views/webclient_templates.xml', + ], + 'js': [ "static/lib/es5-shim/es5-shim.min.js", "static/lib/datejs/globalization/en-US.js", "static/lib/datejs/core.js", diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 2ddf8e559ba..5a5f9c6ae35 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -532,7 +532,8 @@ def content_disposition(filename): # OpenERP Web web Controllers #---------------------------------------------------------- -# TODO: obsoleted by webclient_bootstrap() but need to change edi and pos addons before removing this +# TODO: to remove once the database manager has been migrated server side +# and `edi` + `pos` addons has been adapted to use render_bootstrap_template() html_template = """ @@ -559,38 +560,45 @@ html_template = """ """ -def webclient_bootstrap(**options): - # `options` can contain `client_options` dict. See chrome.js for more information about client_options. +def render_bootstrap_template(db, template, values=None, **kw): + if values is None: + values = {} + values.update(kw) + for res in ['js', 'css']: - if res not in options: - options[res] = manifest_list(res, db=options.get('db'), debug=options.get('debug', request.debug)) + if res not in values: + values[res] = manifest_list(res, db=db, debug=values.get('debug', request.debug)) - if 'modules' not in options: - options['modules'] = module_boot(db=options.get('db')) + if 'modules' not in values: + values['modules'] = module_boot(db=db) + values['modules'] = simplejson.dumps(values['modules']) - return env.get_template("webclient_bootstrap.html").render(options) + registry = openerp.modules.registry.RegistryManager.get(db) + with registry.cursor() as cr: + view_obj = registry["ir.ui.view"] + return view_obj.render(cr, openerp.SUPERUSER_ID, template, values) class Home(http.Controller): @http.route('/', type='http', auth="none") def index(self, s_action=None, db=None, debug=False, **kw): - return redirect_with_hash('web', keep_query=True) + return redirect_with_hash('/web', keep_query=True) @http.route('/web', type='http', auth="none") def web_client(self, s_action=None, db=None, debug=False, **kw): debug = debug is not False # we just check presence of `debug` query param # if db not provided, use the session one - if db is None: + if not db: db = request.session.db # if no database provided and no database in session, use monodb - if db is None: + if not db: db = http.db_monodb(request.httprequest) # if no db can be found til here, send to the database selector # the database selector will redirect to database manager if needed - if db is None: + if not db: return redirect_with_hash('/web/database/selector', keep_query=['debug']) # always switch the session to the computed db @@ -598,8 +606,22 @@ class Home(http.Controller): request.session.logout() request.session.db = db - html = webclient_bootstrap(db=db, debug=debug) - return request.make_response(html, {'Cache-Control': 'no-cache', 'Content-Type': 'text/html; charset=utf-8'}) + if request.session.uid: + html = render_bootstrap_template(db, "web.webclient_bootstrap") + return request.make_response(html, {'Cache-Control': 'no-cache', 'Content-Type': 'text/html; charset=utf-8'}) + else: + return redirect_with_hash('/web/login', keep_query=True) + + @http.route('/web/login', type='http', auth="none") + def web_login(self, **kw): + assert request.session.db is not None + values = request.params.copy() + if request.httprequest.method == 'POST': + uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) + if uid is not False: + return set_cookie_and_redirect('/web') + values['authentication_failed'] = True + return render_bootstrap_template(request.session.db, 'web.login', values) @http.route('/login', type='http', auth="none") def login(self, db, login, key): @@ -787,10 +809,19 @@ class Database(http.Controller): @http.route('/web/database/manager', type='http', auth="none") def manager(self, debug=False): debug = debug is not False # we just check presence of `debug` query param - options = { - 'action': 'database_manager' + js = "\n ".join('' % i for i in manifest_list('js', debug=debug)) + css = "\n ".join('' % i for i in manifest_list('css', debug=debug)) + + r = html_template % { + 'js': js, + 'css': css, + 'modules': simplejson.dumps(module_boot()), + 'init': """ + var wc = new s.web.WebClient(null, { action: 'database_manager' }); + wc.appendTo($(document.body)); + """ } - return webclient_bootstrap(client_options=options) + return r @http.route('/web/database/get_list', type='json', auth="none") def get_list(self): diff --git a/addons/web/views/webclient_bootstrap.html b/addons/web/views/webclient_bootstrap.html deleted file mode 100644 index 097631d09ba..00000000000 --- a/addons/web/views/webclient_bootstrap.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - OpenERP - - - {% for css_file in css %} - - {% endfor %} - {% for js_file in js %} - - {% endfor %} - - - - - - diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml new file mode 100644 index 00000000000..05c7b358915 --- /dev/null +++ b/addons/web/views/webclient_templates.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + +