From dcce7716b3202eabd77666bcaaee9040e6a5e5b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Warnon?= Date: Fri, 15 Feb 2019 11:16:16 +0000 Subject: [PATCH] [IMP] website_slides: support slide_type param in slides/all route Task #1940360 Subtask of #1902304 Purpose ======= The slide/all route now supports a 'slide_type' param that will filter channels to contain at least one slide of type 'slide_type'. This is a preliminary work for the slides_survey bridge. --- addons/website_slides/controllers/main.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index b097c227f6b..df122e9d90c 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -75,7 +75,7 @@ class WebsiteSlides(WebsiteProfile): tags |= search_tag return tags - def _build_channel_domain(self, base_domain, **post): + def _build_channel_domain(self, base_domain, slide_type=None, **post): search_term = post.get('search') category_id = post.get('category_id') channel_tag_id = post.get('channel_tag_id') @@ -92,6 +92,9 @@ class WebsiteSlides(WebsiteProfile): domain = expression.AND([domain, [('tag_ids', 'in', [channel_tag_id])]]) elif tags: domain = expression.AND([domain, [('tag_ids', 'in', tags.ids)]]) + + if slide_type and 'nbr_%ss' % slide_type in request.env['slide.channel']: + domain = expression.AND([domain, [('nbr_%ss' % slide_type, '>', 0)]]) return domain # -------------------------------------------------- @@ -144,17 +147,19 @@ class WebsiteSlides(WebsiteProfile): }) @http.route('/slides/all', type='http', auth="public", website=True) - def slides_channel_all(self, **post): + def slides_channel_all(self, slide_type=None, **post): """ Home page displaying a list of courses displayed according to some criterion and search terms. + : param string slide_type: if provided, filter the slide.channels + to contain at least one slide of type 'slide_type' : param dict post: post parameters, including * search_term: keywords entered in the search box, used to filter on slide content; * category_id: id of a slide.category; * channel_tag_id: id of a channel.tag; """ domain = request.website.website_domain() - domain = self._build_channel_domain(domain, **post) + domain = self._build_channel_domain(domain, slide_type=slide_type, **post) order = self._channel_order_by_criterion.get(post.get('sorting', 'date'), 'create_date desc')