From 7390b48a89511df0176e3e8b5940305bed63c3d3 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 12 Nov 2013 11:13:32 +0100 Subject: [PATCH 01/16] [IMP] Moved Add menu item to the dialog's body bzr revid: fme@openerp.com-20131112101332-k8md3tiysoydn224 --- addons/website/static/src/js/website.menu.js | 4 +--- addons/website/static/src/xml/website.menu.xml | 12 ++++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/addons/website/static/src/js/website.menu.js b/addons/website/static/src/js/website.menu.js index 5ed3f5dcb7f..04da43cefa2 100644 --- a/addons/website/static/src/js/website.menu.js +++ b/addons/website/static/src/js/website.menu.js @@ -27,7 +27,7 @@ website.menu.EditMenuDialog = website.editor.Dialog.extend({ template: 'website.menu.dialog.edit', events: _.extend({}, website.editor.Dialog.prototype.events, { - 'click button.js_add_menu': 'add_menu', + 'click a.js_add_menu': 'add_menu', 'click button.js_edit_menu': 'edit_menu', 'click button.js_delete_menu': 'delete_menu', }), @@ -40,8 +40,6 @@ }, start: function () { var r = this._super.apply(this, arguments); - var button = openerp.qweb.render('website.menu.dialog.footer-button'); - this.$('.modal-footer').prepend(button); this.$('.oe_menu_editor').nestedSortable({ listType: 'ul', handle: 'div', diff --git a/addons/website/static/src/xml/website.menu.xml b/addons/website/static/src/xml/website.menu.xml index c9c73c32ae7..6eea8b25466 100644 --- a/addons/website/static/src/xml/website.menu.xml +++ b/addons/website/static/src/xml/website.menu.xml @@ -21,19 +21,19 @@ - - - - Edit Structure + Edit Menu
+

+ + Add Menu Entry + +

From 92b0539d1d777213199860d72bc412b04d1d40be Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 12 Nov 2013 11:04:11 +0100 Subject: [PATCH 02/16] [IMP] remove unused local variable in list_pages bzr revid: xmo@openerp.com-20131112100411-r4va4xpcovnawuzr --- addons/website/models/website.py | 1 - 1 file changed, 1 deletion(-) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 7648d4cdcf2..ef2b93c53f6 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -336,7 +336,6 @@ class website(osv.osv): router = request.httprequest.app.get_db_router(request.db) for rule in router.iter_rules(): - endpoint = rule.endpoint if not self.rule_is_enumerable(rule): continue From 5b0e0a343b3a1f94f2b4d4a6d2a8cbf1de4bd774 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 12 Nov 2013 11:15:59 +0100 Subject: [PATCH 03/16] [IMP] use pair unpacking rather than indexing + comment bzr revid: xmo@openerp.com-20131112101559-s280ffmmc06vq23a --- addons/website/models/website.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index ef2b93c53f6..28d6c763490 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -345,8 +345,7 @@ class website(osv.osv): ))) for values in generated: - # rule.build returns (domain_part, rel_url) - url = rule.build(values, append_unknown=False)[1] + domain_part, url = rule.build(values, append_unknown=False) yield {'name': url, 'url': url } def kanban(self, cr, uid, ids, model, domain, column, template, step=None, scope=None, orderby=None, context=None): From 3275dcf32a1e7b08f5f30959e82af32e04bcc8b9 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Tue, 12 Nov 2013 11:45:09 +0100 Subject: [PATCH 04/16] [FIX] website.hr.recruitment, website res.company: access right, add a constraint with address_id (must be published) on hr.recruitment and add a related field website_published on res.company bzr revid: chm@openerp.com-20131112104509-0n266eias5oc55gb --- addons/website_hr_recruitment/models/hr_job.py | 9 +++++++++ addons/website_partner/__openerp__.py | 1 + addons/website_partner/data/website_data.xml | 8 ++++++++ addons/website_partner/models/__init__.py | 3 ++- addons/website_partner/models/res_company.py | 11 +++++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 addons/website_partner/data/website_data.xml create mode 100644 addons/website_partner/models/res_company.py diff --git a/addons/website_hr_recruitment/models/hr_job.py b/addons/website_hr_recruitment/models/hr_job.py index 96e2c1d7efd..8c341467354 100644 --- a/addons/website_hr_recruitment/models/hr_job.py +++ b/addons/website_hr_recruitment/models/hr_job.py @@ -10,3 +10,12 @@ class hr_job(osv.osv): 'website_published': fields.boolean('Available in the website'), 'website_description': fields.html('Description for the website'), } + + def _check_address_id_published(self, cr, uid, ids, context=None): + for obj in self.browse(cr, uid, ids, context=context): + if obj.website_published and obj.address_id and not obj.address_id.website_published: + return False + return True + _constraints = [ + (_check_address_id_published, "This Jobpost can't be published if the field Job Location is not website published.", ['address_id','website_published']), + ] \ No newline at end of file diff --git a/addons/website_partner/__openerp__.py b/addons/website_partner/__openerp__.py index be318efa541..fa113ba3a44 100644 --- a/addons/website_partner/__openerp__.py +++ b/addons/website_partner/__openerp__.py @@ -31,6 +31,7 @@ 'views/res_partner_view.xml', 'views/website_partner_view.xml', 'security/website_partner_security.xml', + 'data/website_data.xml', ], 'css': [ ], diff --git a/addons/website_partner/data/website_data.xml b/addons/website_partner/data/website_data.xml new file mode 100644 index 00000000000..dbb20996241 --- /dev/null +++ b/addons/website_partner/data/website_data.xml @@ -0,0 +1,8 @@ + + + + + True + + + \ No newline at end of file diff --git a/addons/website_partner/models/__init__.py b/addons/website_partner/models/__init__.py index f6dfb12ddc8..22f0f772809 100644 --- a/addons/website_partner/models/__init__.py +++ b/addons/website_partner/models/__init__.py @@ -1 +1,2 @@ -import res_partner \ No newline at end of file +import res_partner +import res_company \ No newline at end of file diff --git a/addons/website_partner/models/res_company.py b/addons/website_partner/models/res_company.py new file mode 100644 index 00000000000..c514be0fe65 --- /dev/null +++ b/addons/website_partner/models/res_company.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from openerp.osv import osv, fields + + +class WebsiteResCompany(osv.Model): + _inherit = 'res.company' + + _columns = { + 'website_published': fields.related('partner_id', 'website_published', string='Publish', help="Publish on the website"), + } From 91ac20c28c4c86837310d682a6e7b76799a1f8f7 Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 12 Nov 2013 12:21:50 +0100 Subject: [PATCH 05/16] [FIX] Remove lang_code from kwargs bzr revid: fme@openerp.com-20131112112150-ka9ner1bkqx6ioeg --- addons/website/models/website.py | 2 +- addons/website_sale/controllers/main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 28d6c763490..176ff0d3a38 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -37,7 +37,7 @@ def route(routes, *route_args, **route_kwargs): @http.route(new_routes, *route_args, **route_kwargs) @functools.wraps(f, assigned=functools.WRAPPER_ASSIGNMENTS + ('func_name',)) def wrap(*args, **kwargs): - request.route_lang = kwargs.get('lang_code', None) + request.route_lang = kwargs.pop('lang_code', None) if not hasattr(request, 'website'): request.multilang = f.multilang # TODO: Select website, currently hard coded diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index f2570d7e235..19611c5d5dc 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -342,7 +342,7 @@ class Ecommerce(http.Controller): return request.website.render("website_sale.products", values) @website.route(['/shop/product//'], type='http', auth="public", multilang=True) - def product(self, product, search='', category='', filter='', promo=None, lang_code=None): + def product(self, product, search='', category='', filter='', promo=None): if promo: self.change_pricelist(promo) From b1b29acd4b1890406f7568ee8522bf03572f6c0a Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 12 Nov 2013 13:08:14 +0100 Subject: [PATCH 06/16] [ADD] pages to pages listing I don't see a good way to reverse `/page/` for Website.page during pages listing, so reintoduce explicit handling of that crap. Ideally it would be possible to plug in new converters per db and create some sort of PageConverte, *or* add a reverse operation to controllers on top of converters (-> controller-specific url generation even with un-generable converters). bzr revid: xmo@openerp.com-20131112120814-ekt1rzlzj06pzypw --- addons/website/models/website.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 176ff0d3a38..74a0351e2d4 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -332,9 +332,21 @@ class website(osv.osv): of the same. :rtype: list({name: str, url: str}) """ + # FIXME: possibility to add custom converters without editing server + # would allow the creation of a pages converter generating page + # urls on its own + View = self.pool['ir.ui.view'] + views = View.search_read(cr, uid, [['page', '=', True]], + fields=['name'], order='name', context=context) + xids = View.get_external_id(cr, uid, [view['id'] for view in views], context=context) + for view in views: + if xids[view['id']]: + yield { + 'name': view['name'], + 'url': '/page/' + xids[view['id']], + } router = request.httprequest.app.get_db_router(request.db) - for rule in router.iter_rules(): if not self.rule_is_enumerable(rule): continue From 557d887496553980647450179ba6dffaca59e4bf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Tue, 12 Nov 2013 15:44:42 +0100 Subject: [PATCH 07/16] [IMP] preprocess static @href|src|action, static url doesn't need t-href anymore you need to pull server branch bzr revid: fme@openerp.com-20131112144442-y9bw5q6kkoym8o1i --- addons/website/models/ir_qweb.py | 26 +++++++++++++++++++ addons/website/models/ir_ui_view.py | 23 ---------------- addons/website/views/website_templates.xml | 16 ++++++------ .../views/website_blog_templates.xml | 2 +- addons/website_crm/views/website_crm.xml | 2 +- .../views/website_crm_partner_assign.xml | 4 +-- .../views/website_customer.xml | 2 +- addons/website_event/views/website_event.xml | 4 +-- .../views/website_hr_recruitment.xml | 12 ++++----- .../views/website_membership.xml | 6 ++--- addons/website_sale/views/website_sale.xml | 22 ++++++++-------- 11 files changed, 61 insertions(+), 58 deletions(-) diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index d7bd704b895..6e33742803d 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -21,6 +21,7 @@ from PIL import Image as I from openerp.osv import orm, fields from openerp.tools import ustr, DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT +from openerp.addons.web.http import request REMOTE_CONNECTION_TIMEOUT = 2.5 @@ -32,6 +33,31 @@ class QWeb(orm.AbstractModel): _name = 'website.qweb' _inherit = 'ir.qweb' + URL_ATTRS = { + 'form': 'action', + 'a': 'href', + 'link': 'href', + 'frame': 'src', + 'iframe': 'src', + 'script': 'src', + } + + def add_template(self, into, name, node, context): + # preprocessing for multilang static urls + if request and 'url_for' in context: + router = request.httprequest.app.get_db_router(request.db).bind('') + for tag, attr in self.URL_ATTRS.items(): + for e in node.getElementsByTagName(tag): + url = e.getAttribute(attr) + if url: + try: + func = router.match(url)[0] + if func.multilang: + e.setAttribute(attr, context['url_for'](url)) + except Exception, e: + pass + super(QWeb, self).add_template(into, name, node, context) + def get_converter_for(self, field_type): return self.pool.get( 'website.qweb.field.' + field_type, diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index 123557a625e..d502ef774fa 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -100,25 +100,6 @@ class view(osv.osv): return arch - URL_ATTRS = { - 'form': 'action', - 'a': 'href', - 'link': 'href', - 'frame': 'src', - 'iframe': 'src', - 'script': 'src', - } - def _normalize_urls(self, root): - for element in root.iter(): - attr = self.URL_ATTRS.get(element.tag) - if attr is None or attr not in element.attrib: - continue - - value = element.get(attr) - if not urlparse(value).scheme: - element.attrib.pop(attr) - element.set('t-' + attr, value) - def save(self, cr, uid, res_id, value, xpath=None, context=None): """ Update a view section. The view section may embed fields to write @@ -131,10 +112,6 @@ class view(osv.osv): arch_section = html.fromstring( value, parser=html.HTMLParser(encoding='utf-8')) - # TODO fme: Temporary desactivated because this breaks most of the snippets - # Need to find another way to normalize multilang urls (postprocessing) ? - # self._normalize_urls(arch_section) - if xpath is None: # value is an embedded field on its own, not a view section self.save_embedded_field(cr, uid, arch_section, context=context) diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index fbd7a9294a9..d4ac07c77c0 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -147,13 +147,13 @@

Our products & Services

Connect with us

- Copyright © Company name - Sitemap + Copyright © Company name - Sitemap
@@ -366,7 +366,7 @@

This page does not exists, but you can create it as you are administrator of this site.

Create Page - or Search a Page + or Search a Page
Edit the content bellow this line to adapt the default "page not found" page.
@@ -381,8 +381,8 @@

Maybe you were looking for one of these popular pages ?

@@ -420,8 +420,8 @@

                     
                 
               
diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml
index 4e605907ed8..4c5f0243f40 100644
--- a/addons/website_blog/views/website_blog_templates.xml
+++ b/addons/website_blog/views/website_blog_templates.xml
@@ -263,7 +263,7 @@
                 through your blog entries, referenced in Google.
             

diff --git a/addons/website_crm/views/website_crm.xml b/addons/website_crm/views/website_crm.xml index 0a4702e49c7..f97a3c20ea4 100644 --- a/addons/website_crm/views/website_crm.xml +++ b/addons/website_crm/views/website_crm.xml @@ -4,7 +4,7 @@