From 27405c0c83b05e9239eb76550004732776fc5e6a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 11 Mar 2014 21:52:20 +0100 Subject: [PATCH 01/98] [FIX] ensure_db() werkzeug.BaseResponse.url usage leads to encoded hashes loss bzr revid: fme@openerp.com-20140311205220-kk0pal10lodurcst --- addons/web/controllers/main.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index d13226ca731..0074a88ba9c 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -141,7 +141,12 @@ def ensure_db(redirect='/web/database/selector'): # Thus, we redirect the user to the same page but with the session cookie set. # This will force using the database route dispatcher... r = request.httprequest - response = werkzeug.utils.redirect(r.url, 302) + url_redirect = r.base_url + if r.query_string: + # Can't use werkzeug.wrappers.BaseRequest.url with encoded hashes: + # https://github.com/amigrave/werkzeug/commit/b4a62433f2f7678c234cdcac6247a869f90a7eb7 + url_redirect += '?' + r.query_string + response = werkzeug.utils.redirect(url_redirect, 302) request.session.db = db response = r.app.get_response(r, response, explicit_session=False) werkzeug.exceptions.abort(response) From 9684f077358091c0eccf30abb2dfecd83fb0eb4a Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 11 Mar 2014 21:53:37 +0100 Subject: [PATCH 02/98] [FIX] signup_url_for_action(), use `redirect` url parameter and bring back `action` in fragment bzr revid: fme@openerp.com-20140311205337-9vasnqx5cudbk3f3 --- addons/auth_signup/res_users.py | 11 ++++++++--- addons/portal/mail_mail.py | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/addons/auth_signup/res_users.py b/addons/auth_signup/res_users.py index e91af657cc2..32aa22b2744 100644 --- a/addons/auth_signup/res_users.py +++ b/addons/auth_signup/res_users.py @@ -20,8 +20,8 @@ ############################################################################## from datetime import datetime, timedelta import random -from urllib import urlencode from urlparse import urljoin +import werkzeug from openerp.addons.base.ir.ir_mail_server import MailDeliveryException from openerp.osv import osv, fields @@ -53,7 +53,7 @@ class res_partner(osv.Model): (not partner.signup_expiration or dt <= partner.signup_expiration) return res - def _get_signup_url_for_action(self, cr, uid, ids, action='login', view_type=None, menu_id=None, res_id=None, model=None, context=None): + def _get_signup_url_for_action(self, cr, uid, ids, action=None, view_type=None, menu_id=None, res_id=None, model=None, context=None): """ generate a signup url for the given partner ids and action, possibly overriding the url state components (menu_id, id, view_type) """ if context is None: @@ -80,6 +80,8 @@ class res_partner(osv.Model): continue # no signup token, no user, thus no signup url! fragment = dict() + if action: + fragment['action'] = action if view_type: fragment['view_type'] = view_type if menu_id: @@ -89,7 +91,10 @@ class res_partner(osv.Model): if res_id: fragment['id'] = res_id - res[partner.id] = urljoin(base_url, "/web/login?%s#%s" % (urlencode(query), urlencode(fragment))) + if fragment: + query['redirect'] = '/web#' + werkzeug.url_encode(fragment) + + res[partner.id] = urljoin(base_url, "/web/login?%s" % werkzeug.url_encode(query)) return res diff --git a/addons/portal/mail_mail.py b/addons/portal/mail_mail.py index 18eb15361a3..0fe2081fa45 100644 --- a/addons/portal/mail_mail.py +++ b/addons/portal/mail_mail.py @@ -39,7 +39,7 @@ class mail_mail(osv.Model): if partner and not partner.user_ids: contex_signup = dict(context, signup_valid=True) signup_url = partner_obj._get_signup_url_for_action(cr, SUPERUSER_ID, [partner.id], - action='login', model=mail.model, res_id=mail.res_id, + model=mail.model, res_id=mail.res_id, context=contex_signup)[partner.id] return _("""Access your messages and documents through our Customer Portal""") % signup_url else: From cf68961f668b058952b205b5ba7991ea8c5f6b8b Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 12 Mar 2014 11:32:39 +0100 Subject: [PATCH 03/98] [IMP] /web/login redirects if already logged in bzr revid: fme@openerp.com-20140312103239-deyoc7t00g8kusd1 --- addons/web/controllers/main.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 0074a88ba9c..c30cd052bd6 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -663,6 +663,9 @@ class Home(http.Controller): def web_login(self, redirect=None, **kw): ensure_db() + if request.httprequest.method == 'GET' and redirect and request.session.uid: + return http.redirect_with_hash(redirect) + values = request.params.copy() if not redirect: redirect = '/web?' + request.httprequest.query_string From 2ed053642abfbf20678c02955b8b0bb575cf8d30 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 12 Mar 2014 12:21:41 +0100 Subject: [PATCH 04/98] [IMP] oaut & signup, redirect if already logged in bzr revid: fme@openerp.com-20140312112141-uvo89w4ovmzq5ozq --- addons/auth_oauth/controllers/main.py | 3 +++ addons/auth_signup/controllers/main.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index 53a6ffd5462..a338927c3a1 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -68,6 +68,9 @@ class OAuthLogin(openerp.addons.web.controllers.main.Home): @http.route() def web_login(self, *args, **kw): + if request.httprequest.method == 'GET' and request.session.uid and request.params.get('redirect'): + # Redirect if already logged in and redirect param is present + return http.redirect_with_hash(request.params.get('redirect')) providers = self.list_providers() response = super(OAuthLogin, self).web_login(*args, **kw) diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 08b67108c3f..92ae6364954 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -37,6 +37,9 @@ class AuthSignup(openerp.addons.web.controllers.main.Home): mode = request.params.get('mode') qcontext = request.params.copy() super_response = None + if request.httprequest.method == 'GET' and request.session.uid and request.params.get('redirect'): + # Redirect if already logged in and redirect param is present + return http.redirect_with_hash(request.params.get('redirect')) if request.httprequest.method != 'POST' or mode not in ('reset', 'signup'): # Default behavior is to try to login, which in reset or signup mode in a non-sense. super_response = super(AuthSignup, self).web_login(*args, **kw) From 77e56eea05948e8bde8a42f6cdf1f5a2e10085ae Mon Sep 17 00:00:00 2001 From: Simon Lejeune Date: Thu, 13 Mar 2014 14:34:59 +0100 Subject: [PATCH 05/98] [REF] Changed seek(0) to flush when manipulating files and reordered the impors bzr revid: sle@openerp.com-20140313133459-y3zvhhjby8pysew1 --- addons/report/controllers/main.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/addons/report/controllers/main.py b/addons/report/controllers/main.py index 0dae5f41288..e057e80beb7 100644 --- a/addons/report/controllers/main.py +++ b/addons/report/controllers/main.py @@ -41,20 +41,20 @@ import signal import os from distutils.version import LooseVersion - from werkzeug import exceptions from werkzeug.test import Client from werkzeug.wrappers import BaseResponse from werkzeug.datastructures import Headers from reportlab.graphics.barcode import createBarcodeDrawing - - -_logger = logging.getLogger(__name__) try: from pyPdf import PdfFileWriter, PdfFileReader except ImportError: PdfFileWriter = PdfFileReader = None + +_logger = logging.getLogger(__name__) + + class Report(http.Controller): @http.route(['/report//'], type='http', auth='user', website=True, multilang=True) @@ -303,7 +303,7 @@ class Report(http.Controller): # Directly load the document if we have it if save_in_attachment and save_in_attachment['loaded_documents'].get(reporthtml[0]): pdfreport.write(save_in_attachment['loaded_documents'].get(reporthtml[0])) - pdfreport.seek(0) + pdfreport.flush() pdfdocuments.append(pdfreport) continue @@ -312,7 +312,7 @@ class Report(http.Controller): head_file = tempfile.NamedTemporaryFile(suffix='.html', prefix='report.header.tmp.', dir=tmp_dir, mode='w+') head_file.write(headers[index]) - head_file.seek(0) + head_file.flush() command_arg_local.extend(['--header-html', head_file.name]) # Footer stuff @@ -320,14 +320,14 @@ class Report(http.Controller): foot_file = tempfile.NamedTemporaryFile(suffix='.html', prefix='report.footer.tmp.', dir=tmp_dir, mode='w+') foot_file.write(footers[index]) - foot_file.seek(0) + foot_file.flush() command_arg_local.extend(['--footer-html', foot_file.name]) # Body stuff content_file = tempfile.NamedTemporaryFile(suffix='.html', prefix='report.body.tmp.', dir=tmp_dir, mode='w+') content_file.write(reporthtml[1]) - content_file.seek(0) + content_file.flush() try: # If the server is running with only one worker, increase it to two to be able @@ -364,7 +364,7 @@ class Report(http.Controller): _logger.info('The PDF document %s is now saved in the ' 'database' % attachment['name']) - pdfreport.seek(0) + pdfreport.flush() pdfdocuments.append(pdfreport) if headers: @@ -461,7 +461,7 @@ class Report(http.Controller): document.close() merged = StringIO.StringIO() writer.write(merged) - merged.seek(0) + merged.flush() content = merged.read() merged.close() return content From 353bbdc2c3d0e019561eb60aacb36b68b4ed935a Mon Sep 17 00:00:00 2001 From: "chm@openerp.com" <> Date: Fri, 14 Mar 2014 17:23:46 +0100 Subject: [PATCH 06/98] [FIX] website: route and redirect: remove all backslash from url bzr revid: chm@openerp.com-20140314162346-25vohj6ayp65tgiy --- addons/website/controllers/main.py | 2 +- addons/website/models/website.py | 2 +- .../static/src/js/website.editor.newpage.js | 2 +- addons/website/static/src/js/website.js | 2 +- .../website/static/src/js/website.mobile.js | 4 +- addons/website_blog/controllers/main.py | 28 ++++---- .../views/website_blog_templates.xml | 2 +- .../controllers/main.py | 20 +++--- .../views/website_crm_partner_assign.xml | 10 +-- addons/website_customer/controllers/main.py | 12 ++-- .../views/website_customer.xml | 16 ++--- addons/website_event/controllers/main.py | 4 +- addons/website_event/views/website_event.xml | 4 +- addons/website_event_sale/controllers/main.py | 2 +- .../static/src/js/website.tour.event_sale.js | 2 +- .../website_event_track/controllers/event.py | 6 +- addons/website_event_track/models/event.py | 8 +-- .../views/website_event.xml | 2 +- addons/website_google_map/controllers/main.py | 4 +- .../static/src/js/google_map.js | 2 +- .../website_hr_recruitment/models/hr_job.py | 2 +- .../views/templates.xml | 4 +- .../controllers/email_designer.py | 2 +- addons/website_mail/controllers/main.py | 4 +- .../static/src/js/website_mail.js | 2 +- addons/website_membership/controllers/main.py | 20 +++--- .../views/website_membership.xml | 14 ++-- addons/website_partner/controllers/main.py | 2 +- addons/website_project/controllers/main.py | 2 +- .../website_project/views/website_project.xml | 2 +- .../static/src/js/website_quotation.js | 4 +- addons/website_sale/controllers/main.py | 64 +++++++++---------- addons/website_sale/models/product.py | 4 +- .../static/src/js/website.tour.sale.js | 12 ++-- .../static/src/js/website_sale.editor.js | 6 +- .../static/src/js/website_sale.js | 4 +- .../static/src/js/website_sale_validate.js | 2 +- addons/website_sale/views/website_sale.xml | 40 ++++++------ .../website_sale_delivery/controllers/main.py | 4 +- 39 files changed, 164 insertions(+), 164 deletions(-) diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index eff28b61fcd..abc64fee6e0 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -296,7 +296,7 @@ class Website(openerp.addons.web.controllers.main.Home): #------------------------------------------------------ # Helpers #------------------------------------------------------ - @http.route(['/website/kanban/'], type='http', auth="public", methods=['POST'], website=True) + @http.route(['/website/kanban'], type='http', auth="public", methods=['POST'], website=True) def kanban(self, **post): return request.website.kanban_col(**post) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 966810297ea..d4af418309c 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -248,7 +248,7 @@ class website(osv.osv): pmin = pmax - scope if pmax - scope > 0 else 1 def get_url(page): - _url = "%spage/%s/" % (url, page) if page > 1 else url + _url = "%s/page/%s" % (url, page) if page > 1 else url if url_args: _url = "%s?%s" % (_url, werkzeug.url_encode(url_args)) return _url diff --git a/addons/website/static/src/js/website.editor.newpage.js b/addons/website/static/src/js/website.editor.newpage.js index b475223ecd9..77a086790fa 100644 --- a/addons/website/static/src/js/website.editor.newpage.js +++ b/addons/website/static/src/js/website.editor.newpage.js @@ -48,7 +48,7 @@ } }).then(function (val, field, $dialog) { if (val) { - var url = '/website/add/' + encodeURI(val); + var url = '/website/add' + encodeURI(val); if ($dialog.find('input[type="checkbox"]').is(':checked')) url +="?add_menu=1"; document.location = url; } diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js index 249058d91fb..eec815ed8c7 100644 --- a/addons/website/static/src/js/website.js +++ b/addons/website/static/src/js/website.js @@ -103,7 +103,7 @@ var page = +$a.attr("href").split(",").pop().split('-')[1]; data['page'] = page; - $.post('/website/kanban/', data, function (col) { + $.post('/website/kanban', data, function (col) { $col.find("> .thumbnail").remove(); $pagination.last().before(col); }); diff --git a/addons/website/static/src/js/website.mobile.js b/addons/website/static/src/js/website.mobile.js index 59c2328e09b..88a558f5094 100644 --- a/addons/website/static/src/js/website.mobile.js +++ b/addons/website/static/src/js/website.mobile.js @@ -18,9 +18,9 @@ }, start: function () { if (!window.location.origin) { // fix for ie9 - window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '') + '/'; + window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); } - document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview"; + document.getElementById("mobile-viewport").src = window.location.origin + (window.location.pathname.length ? '/' : '') + window.location.pathname + "#mobile-preview"; this.$el.modal(); }, destroy: function () { diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py index 2e1477e8f2d..10a43be1bef 100644 --- a/addons/website_blog/controllers/main.py +++ b/addons/website_blog/controllers/main.py @@ -42,7 +42,7 @@ class WebsiteBlog(http.Controller): @http.route([ '/blog', - '/blog/page//', + '/blog/page/', ], type='http', auth="public", website=True, multilang=True) def blogs(self, page=1): BYPAGE = 60 @@ -50,7 +50,7 @@ class WebsiteBlog(http.Controller): blog_obj = request.registry['blog.post'] total = blog_obj.search(cr, uid, [], count=True, context=context) pager = request.website.pager( - url='/blog/', + url='/blog', total=total, page=page, step=BYPAGE, @@ -63,14 +63,14 @@ class WebsiteBlog(http.Controller): }) @http.route([ - '/blog//', - '/blog//page//', - '/blog//tag//', - '/blog//tag//page//', - '/blog//date//', - '/blog//date//page//', - '/blog//tag//date//', - '/blog//tag//date//page//', + '/blog/', + '/blog//page/', + '/blog//tag/', + '/blog//tag//page/', + '/blog//date/', + '/blog//date//page/', + '/blog//tag//date/', + '/blog//tag//date//page/', ], type='http', auth="public", website=True, multilang=True) def blog(self, blog=None, tag=None, date=None, page=1, **opt): """ Prepare all values to display the blog. @@ -106,13 +106,13 @@ class WebsiteBlog(http.Controller): domain = [] if blog: - path_filter += "%s/" % blog.id + path_filter += "%s" % blog.id domain += [("id", "in", [post.id for post in blog.blog_post_ids])] if tag: - path_filter += 'tag/%s/' % tag.id + path_filter += 'tag/%s' % tag.id domain += [("id", "in", [post.id for post in tag.blog_post_ids])] if date: - path_filter += "date/%s/" % date + path_filter += "date/%s" % date domain += [("create_date", ">=", date.split("_")[0]), ("create_date", "<=", date.split("_")[1])] blog_post_ids = blog_post_obj.search(cr, uid, domain, context=context) @@ -147,7 +147,7 @@ class WebsiteBlog(http.Controller): return request.website.render("website_blog.blog_post_short", values) @http.route([ - '/blogpost//', + '/blogpost/', ], type='http', auth="public", website=True, multilang=True) def blog_post(self, blog_post, tag=None, date=None, page=1, enable_editor=None, **post): """ Prepare all values to display the blog. diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml index 203dcc3bb71..4ca762456f1 100644 --- a/addons/website_blog/views/website_blog_templates.xml +++ b/addons/website_blog/views/website_blog_templates.xml @@ -12,7 +12,7 @@ diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py index fbfb1908a14..6d6dda59a99 100644 --- a/addons/website_crm_partner_assign/controllers/main.py +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -13,21 +13,21 @@ class WebsiteCrmPartnerAssign(http.Controller): _references_per_page = 20 @http.route([ - '/partners/', - '/partners/page//', + '/partners', + '/partners/page/', '/partners/grade/', - '/partners/grade//page//', + '/partners/grade//page/', '/partners/country/', '/partners/country/-', - '/partners/country//page//', - '/partners/country/-/page//', + '/partners/country//page/', + '/partners/country/-/page/', - '/partners/grade//country//', + '/partners/grade//country/', '/partners/grade//country/-', - '/partners/grade//country//page//', - '/partners/grade//country/-/page//', + '/partners/grade//country//page/', + '/partners/grade//country/-/page/', ], type='http', auth="public", website=True, multilang=True) def partners(self, country_id=0, grade_id=0, page=0, **post): @@ -72,7 +72,7 @@ class WebsiteCrmPartnerAssign(http.Controller): partner_ids = partner_obj.search( request.cr, openerp.SUPERUSER_ID, partner_domain, context=request.context) - pager = request.website.pager(url="/partners/", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post) + pager = request.website.pager(url="/partners", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post) # search for partners to display partners_data = partner_obj.search_read(request.cr, openerp.SUPERUSER_ID, @@ -110,7 +110,7 @@ class WebsiteCrmPartnerAssign(http.Controller): } return request.website.render("website_crm_partner_assign.index", values) - @http.route(['/partners//', '/partners/-/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/partners/', '/partners/-'], type='http', auth="public", website=True, multilang=True) def partners_ref(self, partner_id, **post): partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context) values = website_partner.get_partner_template_value(partner) diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml index cd2e3cb58bd..56ac22d1eee 100644 --- a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml +++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml @@ -5,7 +5,7 @@ @@ -55,7 +55,7 @@
  • - + @@ -93,11 +93,11 @@
    - +
    - - + -
    @@ -112,7 +112,7 @@

    World Map

    diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py index 173b0871dbe..5f0825e132c 100644 --- a/addons/website_customer/controllers/main.py +++ b/addons/website_customer/controllers/main.py @@ -12,12 +12,12 @@ class WebsiteCustomer(http.Controller): _references_per_page = 20 @http.route([ - '/customers/', - '/customers/page//', + '/customers', + '/customers/page/', '/customers/country/', '/customers/country/-', - '/customers/country//page//', - '/customers/country/-/page//', + '/customers/country//page/', + '/customers/country/-/page/', ], type='http', auth="public", website=True, multilang=True) def customers(self, country_id=0, page=0, **post): cr, uid, context = request.cr, request.uid, request.context @@ -62,7 +62,7 @@ class WebsiteCustomer(http.Controller): # pager pager = request.website.pager( - url="/customers/", total=len(partner_ids), page=page, step=self._references_per_page, + url="/customers", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post ) @@ -83,7 +83,7 @@ class WebsiteCustomer(http.Controller): } return request.website.render("website_customer.index", values) - @http.route(['/customers//', '/customers/-/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/customers/', '/customers/-'], type='http', auth="public", website=True, multilang=True) def customer(self, partner_id, **post): partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context) values = website_partner.get_partner_template_value(partner) diff --git a/addons/website_customer/views/website_customer.xml b/addons/website_customer/views/website_customer.xml index ad924cba55d..ba89f456e23 100644 --- a/addons/website_customer/views/website_customer.xml +++ b/addons/website_customer/views/website_customer.xml @@ -5,7 +5,7 @@ @@ -44,11 +44,11 @@
  • - + @@ -143,7 +143,7 @@ @@ -158,11 +158,11 @@

    References

    - +
    - +
    diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index eb38e2dbe55..c410536a0b5 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -33,7 +33,7 @@ from openerp import tools import werkzeug.urls class website_event(http.Controller): - @http.route(['/event/', '/event/page/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/event', '/event/page/'], type='http', auth="public", website=True, multilang=True) def events(self, page=1, **searches): cr, uid, context = request.cr, request.uid, request.context event_obj = request.registry['event.event'] @@ -134,7 +134,7 @@ class website_event(http.Controller): event_count = event_obj.search( request.cr, request.uid, dom_without("none"), count=True, context=request.context) - pager = request.website.pager(url="/event/", total=event_count, page=page, step=step, scope=5) + pager = request.website.pager(url="/event", total=event_count, page=page, step=step, scope=5) order = 'website_published desc, date_begin' if searches.get('date','all') == 'old': diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index e490b1a0687..1096287bb3b 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -50,7 +50,7 @@
  • - + not published

    @@ -243,7 +243,7 @@

    Event not found!

    Sorry, the requested event is not available anymore.

    -

    Return to the event list.

    +

    Return to the event list.

    diff --git a/addons/website_event_sale/controllers/main.py b/addons/website_event_sale/controllers/main.py index cc9ddc0ad56..2db874cf5b7 100644 --- a/addons/website_event_sale/controllers/main.py +++ b/addons/website_event_sale/controllers/main.py @@ -78,7 +78,7 @@ class website_event(website_event): order_obj.write(request.cr, SUPERUSER_ID, [order.id], {'order_line': [(4, order_line_id)]}, context=request.context) if not _values: - return request.redirect("/event/%s/" % event_id) + return request.redirect("/event/%s" % event_id) return request.redirect("/shop/checkout") def _add_event(self, event_name="New Event", context={}, **kwargs): diff --git a/addons/website_event_sale/static/src/js/website.tour.event_sale.js b/addons/website_event_sale/static/src/js/website.tour.event_sale.js index 3c74cc2317e..c67c412d7d2 100644 --- a/addons/website_event_sale/static/src/js/website.tour.event_sale.js +++ b/addons/website_event_sale/static/src/js/website.tour.event_sale.js @@ -44,7 +44,7 @@ { title: "Complete checkout", waitFor: '#top_menu .my_cart_quantity:contains(5)', - element: 'form[action="/shop/confirm_order/"] .btn:contains("Confirm")', + element: 'form[action="/shop/confirm_order"] .btn:contains("Confirm")', onload: function (tour) { if ($("input[name='name']").val() === "") $("input[name='name']").val("website_sale-test-shoptest"); diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py index d4b7177814d..466e3d37a40 100644 --- a/addons/website_event_track/controllers/event.py +++ b/addons/website_event_track/controllers/event.py @@ -38,7 +38,7 @@ class website_event(http.Controller): return request.website.render("website_event_track.track_view", values) # TODO: not implemented - @http.route(['/event//agenda/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/event//agenda'], type='http', auth="public", website=True, multilang=True) def event_agenda(self, event, tag=None, **post): values = { 'event': event, @@ -47,7 +47,7 @@ class website_event(http.Controller): return request.website.render("website_event_track.agenda", values) @http.route([ - '/event//track/', + '/event//track', '/event//track/tag/' ], type='http', auth="public", website=True, multilang=True) def event_tracks(self, event, tag=None, **post): @@ -74,7 +74,7 @@ class website_event(http.Controller): } return request.website.render("website_event_track.tracks", values) - @http.route(['/event//track_proposal/'], type='http', auth="public", website=True, multilang=True) + @http.route(['/event//track_proposal'], type='http', auth="public", website=True, multilang=True) def event_track_proposal(self, event, **post): values = { 'event': event } return request.website.render("website_event_track.event_track_proposal", values) diff --git a/addons/website_event_track/models/event.py b/addons/website_event_track/models/event.py index cfba63cfc6b..1c098232a2e 100644 --- a/addons/website_event_track/models/event.py +++ b/addons/website_event_track/models/event.py @@ -142,12 +142,12 @@ class event_event(osv.osv): context = context or {} result = super(event_event, self)._get_new_menu_pages(cr, uid, event, context=context) if event.show_tracks: - result.append( (_('Talks'), '/event/%s/track/' % slug(event))) - result.append( (_('Agenda'), '/event/%s/agenda/' % slug(event))) + result.append( (_('Talks'), '/event/%s/track' % slug(event))) + result.append( (_('Agenda'), '/event/%s/agenda' % slug(event))) if event.blog_id: - result.append( (_('News'), '/blogpost/'+slug(event.blog_ig))) + result.append( (_('News'), '/blogpost'+slug(event.blog_ig))) if event.show_track_proposal: - result.append( (_('Talk Proposals'), '/event/%s/track_proposal/' % slug(event))) + result.append( (_('Talk Proposals'), '/event/%s/track_proposal' % slug(event))) return result # diff --git a/addons/website_event_track/views/website_event.xml b/addons/website_event_track/views/website_event.xml index 03f6f750b6f..3eb2a4bbbde 100644 --- a/addons/website_event_track/views/website_event.xml +++ b/addons/website_event_track/views/website_event.xml @@ -174,7 +174,7 @@