[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
This commit is contained in:
Thibault Delavallée
2019-03-04 16:13:04 +00:00
parent 2f8ea621a8
commit adcdb4e0f0
3 changed files with 13 additions and 10 deletions
+1 -1
View File
@@ -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
@@ -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
})]
+10 -7
View File
@@ -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