[REF] website_slides: cleanup membership fields

Purpose of this commit is to finalize the cleanup of current user's membership
on a given slide.

As a followup of odoo/odoo@8b2f887c29 we remove now dead ``_compute_user_info``
method. We also introduce a shortcut to ``user_membership_id.sudo().completed``
by adding its computation directly while computing user_membership_id as well
as user_vote. It allows to remove some sudo on user_membership_id.

Task-2607416

Part-of: odoo/odoo#74171
This commit is contained in:
Thibault Delavallée
2022-02-28 11:07:37 +00:00
parent c0d56da9b0
commit 1bcd34ea6b
2 changed files with 8 additions and 36 deletions
+3 -4
View File
@@ -121,7 +121,6 @@ class WebsiteSlides(WebsiteProfile):
return slide._compute_quiz_info(request.env.user.partner_id, quiz_done=quiz_done)[slide.id]
def _get_slide_quiz_data(self, slide):
slide_completed = slide.user_membership_id.sudo().completed
values = {
'slide_questions': [{
'id': question.id,
@@ -129,7 +128,7 @@ class WebsiteSlides(WebsiteProfile):
'answer_ids': [{
'id': answer.id,
'text_value': answer.text_value,
'is_correct': answer.is_correct if slide_completed or request.website.is_publisher() else None,
'is_correct': answer.is_correct if slide.user_has_completed or request.website.is_publisher() else None,
'comment': answer.comment if request.website.is_publisher else None
} for answer in question.sudo().answer_ids],
} for question in slide.question_ids]
@@ -958,7 +957,7 @@ class WebsiteSlides(WebsiteProfile):
return fetch_res
slide = fetch_res['slide']
if slide.user_membership_id.sudo().completed:
if slide.user_has_completed:
self._channel_remove_session_answers(slide.channel_id, slide)
return {'error': 'slide_quiz_done'}
@@ -992,7 +991,7 @@ class WebsiteSlides(WebsiteProfile):
'comment': answer.comment
} for answer in user_answers
},
'completed': slide.user_membership_id.sudo().completed,
'completed': slide.user_has_completed,
'channel_completion': slide.channel_id.completion,
'quizKarmaWon': quiz_info['quiz_karma_won'],
'quizKarmaGain': quiz_info['quiz_karma_gain'],
+5 -32
View File
@@ -116,6 +116,9 @@ class Slide(models.Model):
'slide.slide.partner', string="Subscriber information",
compute='_compute_user_membership_id', compute_sudo=False,
help="Subscriber information for the current logged in user")
# current user membership
user_vote = fields.Integer('User vote', compute='_compute_user_membership_id', compute_sudo=False)
user_has_completed = fields.Boolean('Is Member', compute='_compute_user_membership_id', compute_sudo=False)
# Quiz related fields
question_ids = fields.One2many("slide.question", "slide_id", string="Questions")
questions_count = fields.Integer(string="Numbers of Questions", compute='_compute_questions_count')
@@ -183,7 +186,6 @@ class Slide(models.Model):
date_published = fields.Datetime('Publish Date', readonly=True, tracking=False)
likes = fields.Integer('Likes', compute='_compute_like_info', store=True, compute_sudo=False)
dislikes = fields.Integer('Dislikes', compute='_compute_like_info', store=True, compute_sudo=False)
user_vote = fields.Integer('User vote', compute='_compute_user_membership_id', compute_sudo=False)
embed_code = fields.Html('Embed Code', readonly=True, compute='_compute_embed_code', sanitize=False)
embed_code_external = fields.Html('External Embed Code', readonly=True, compute='_compute_embed_code', sanitize=False,
help="Same as 'Embed Code' but used to embed the content on an external website.")
@@ -292,36 +294,6 @@ class Slide(models.Model):
slide.likes = mapped_data_like.get(slide.id, 0)
slide.dislikes = mapped_data_dislike.get(slide.id, 0)
@api.depends('slide_partner_ids.vote')
@api.depends_context('uid')
def _compute_user_info(self):
""" Deprecated. Now computed directly by _compute_user_membership_id
for user_vote and _compute_like_info for likes / dislikes. Remove me in
master. """
default_stats = {'likes': 0, 'dislikes': 0, 'user_vote': False}
if not self.ids:
self.update(default_stats)
return
slide_data = dict.fromkeys(self.ids, default_stats)
slide_partners = self.env['slide.slide.partner'].sudo().search([
('slide_id', 'in', self.ids)
])
for slide_partner in slide_partners:
if slide_partner.vote == 1:
slide_data[slide_partner.slide_id.id]['likes'] += 1
if slide_partner.partner_id == self.env.user.partner_id:
slide_data[slide_partner.slide_id.id]['user_vote'] = 1
elif slide_partner.vote == -1:
slide_data[slide_partner.slide_id.id]['dislikes'] += 1
if slide_partner.partner_id == self.env.user.partner_id:
slide_data[slide_partner.slide_id.id]['user_vote'] = -1
for slide in self:
slide.update(slide_data[slide.id])
@api.depends('slide_partner_ids.slide_id')
def _compute_slide_views(self):
# TODO awa: tried compute_sudo, for some reason it doesn't work in here...
@@ -412,7 +384,7 @@ class Slide(models.Model):
else:
slide.slide_type = False
@api.depends('slide_partner_ids.partner_id', 'slide_partner_ids.vote')
@api.depends('slide_partner_ids.partner_id', 'slide_partner_ids.vote', 'slide_partner_ids.completed')
@api.depends('uid')
def _compute_user_membership_id(self):
slide_partners = self.env['slide.slide.partner'].sudo().search([
@@ -426,6 +398,7 @@ class Slide(models.Model):
self.env['slide.slide.partner']
)
record.user_vote = record.user_membership_id.vote
record.user_has_completed = record.user_membership_id.completed
@api.depends('slide_category', 'google_drive_id', 'video_source_type', 'youtube_id')
def _compute_embed_code(self):