diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index 69de0219d71..4d37870eccd 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -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'], diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index ed99cfd752a..74ada83cee0 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -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):