[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:
@@ -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'],
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user