From adcdb4e0f0158b0d647293aa03cf56cbb7a061c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 28 Feb 2019 11:51:33 +0000 Subject: [PATCH] [FIX] website_slides: various models improvements Purpose of this commit is to fix and improve some model related bits of code: * add an ondelete cascade on some required fields; * make a public method private because it should be accessed only through controllers; * do not add odoobot as channel member; notably for demo data it can create unnecessary of noise in members and notifications; Commit linked to task ID 1941250 and PR #31453 --- addons/website_slides/controllers/main.py | 2 +- addons/website_slides/models/slide_channel.py | 4 ++-- addons/website_slides/models/slide_slide.py | 17 ++++++++++------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index d829f22d2fd..8d3c696c540 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -776,7 +776,7 @@ class WebsiteSlides(WebsiteProfile): try: slide = request.env['slide.slide'].browse(slide_id) if is_embedded: - request.env['slide.embed'].sudo().add_embed_url(slide.id, referrer_url) + request.env['slide.embed'].sudo()._add_embed_url(slide.id, referrer_url) values = self._get_slide_detail(slide) values['page'] = page values['is_embedded'] = is_embedded diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 30aee951c11..ec732174a44 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -280,8 +280,8 @@ class Channel(models.Model): @api.model def create(self, vals): - # Ensure creator is member of its channel it is easier for him to manage it - if not vals.get('channel_partner_ids'): + # Ensure creator is member of its channel it is easier for him to manage it (unless it is odoobot) + if not vals.get('channel_partner_ids') and not self.env.user._is_superuser(): vals['channel_partner_ids'] = [(0, 0, { 'partner_id': self.env.user.partner_id.id })] diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index 9ca2eff8adb..2b2b1e43fd8 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -24,21 +24,22 @@ class SlidePartnerRelation(models.Model): _table = 'slide_slide_partner' slide_id = fields.Many2one('slide.slide', ondelete="cascade", index=True, required=True) - channel_id = fields.Many2one('slide.channel', string="Channel", related="slide_id.channel_id", store=True, index=True) - partner_id = fields.Many2one('res.partner', index=True, required=True) + channel_id = fields.Many2one( + 'slide.channel', string="Channel", + related="slide_id.channel_id", store=True, index=True, ondelete='cascade') + partner_id = fields.Many2one('res.partner', index=True, required=True, ondelete='cascade') vote = fields.Integer('Vote', default=0) completed = fields.Boolean('Completed') - - quiz_attempts_count = fields.Integer(string="Number of times this user attempted the quiz") + quiz_attempts_count = fields.Integer('Quiz attempts count', default=0) class SlideLink(models.Model): _name = 'slide.slide.link' _description = "External URL for a particular slide" - slide_id = fields.Many2one('slide.slide', required=True) + slide_id = fields.Many2one('slide.slide', required=True, ondelete='cascade') name = fields.Char('Title', required=True) - link = fields.Char("External Link", required=True) + link = fields.Char('External Link', required=True) class EmbeddedSlide(models.Model): @@ -51,8 +52,10 @@ class EmbeddedSlide(models.Model): url = fields.Char('Third Party Website URL', required=True) count_views = fields.Integer('# Views', default=1) - def add_embed_url(self, slide_id, url): + def _add_embed_url(self, slide_id, url): baseurl = urls.url_parse(url).netloc + if not baseurl: + return 0 embeds = self.search([('url', '=', baseurl), ('slide_id', '=', int(slide_id))], limit=1) if embeds: embeds.count_views += 1