[REF] website_slides: clean slide fetch details method and controller
Currently there is a tool method on controller allowing to prepare some slide related data. However controllers still add values in the slide dictionary outside of this method, making it non consistent. Let us prepare all side related data in this tool method to simplify code understanding. Commit linked to task ID 1941250 and PR #31512.
This commit is contained in:
@@ -68,26 +68,42 @@ class WebsiteSlides(WebsiteProfile):
|
||||
return True
|
||||
|
||||
def _get_slide_detail(self, slide):
|
||||
most_viewed_slides = slide._get_most_viewed_slides(self.SLIDES_PER_ASIDE)
|
||||
related_slides = slide._get_related_slides(self.SLIDES_PER_ASIDE)
|
||||
if slide.channel_id.channel_type == 'documentation':
|
||||
most_viewed_slides = slide._get_most_viewed_slides(self.SLIDES_PER_ASIDE)
|
||||
related_slides = slide._get_related_slides(self.SLIDES_PER_ASIDE)
|
||||
uncategorized_slides = request.env['slide.slide']
|
||||
else:
|
||||
most_viewed_slides, related_slides = request.env['slide.slide'], request.env['slide.slide']
|
||||
uncategorized_slides = slide.channel_id.slide_ids.filtered(lambda slide: not slide.category_id)
|
||||
|
||||
channel_slides_ids = slide.channel_id.slide_ids.ids
|
||||
slide_index = channel_slides_ids.index(slide.id)
|
||||
previous_slide = slide.channel_id.slide_ids[slide_index-1] if slide_index > 0 else None
|
||||
next_slide = slide.channel_id.slide_ids[slide_index+1] if slide_index < len(channel_slides_ids) - 1 else None
|
||||
|
||||
values = {
|
||||
# slide
|
||||
'slide': slide,
|
||||
'most_viewed_slides': most_viewed_slides,
|
||||
'related_slides': related_slides,
|
||||
'previous_slide': previous_slide,
|
||||
'next_slide': next_slide,
|
||||
'uncategorized_slides': uncategorized_slides,
|
||||
# user
|
||||
'user': request.env.user,
|
||||
'user_progress': self._get_user_progress(slide.channel_id)['user_progress'],
|
||||
'is_public_user': request.website.is_public_user(),
|
||||
# rating and comments
|
||||
'comments': slide.website_message_ids or [],
|
||||
'user_progress': {}
|
||||
}
|
||||
if slide.channel_id.channel_type == "training":
|
||||
channel_slides_ids = slide.channel_id.slide_ids.ids
|
||||
slide_index = channel_slides_ids.index(slide.id)
|
||||
previous_slide = slide.channel_id.slide_ids[slide_index-1] if slide_index > 0 else None
|
||||
next_slide = slide.channel_id.slide_ids[slide_index+1] if slide_index < len(channel_slides_ids) - 1 else None
|
||||
|
||||
# allow rating and comments
|
||||
if slide.channel_id.allow_comment:
|
||||
values.update({
|
||||
'previous_slide': slug(previous_slide) if previous_slide else "",
|
||||
'next_slide': slug(next_slide) if next_slide else ""
|
||||
'message_post_hash': slide._generate_signed_token(request.env.user.partner_id.id),
|
||||
'message_post_pid': request.env.user.partner_id.id,
|
||||
})
|
||||
|
||||
return values
|
||||
|
||||
def _get_quiz_points(self, slide, attempt_count):
|
||||
@@ -494,21 +510,12 @@ class WebsiteSlides(WebsiteProfile):
|
||||
def slide_view(self, slide, **kwargs):
|
||||
if not slide.channel_id.can_access_from_current_website():
|
||||
raise werkzeug.exceptions.NotFound()
|
||||
self._set_viewed_slide(slide)
|
||||
|
||||
self._set_viewed_slide(slide)
|
||||
values = self._get_slide_detail(slide)
|
||||
# allow rating and comments
|
||||
if slide.channel_id.allow_comment:
|
||||
values.update({
|
||||
'message_post_hash': slide._generate_signed_token(request.env.user.partner_id.id),
|
||||
'message_post_pid': request.env.user.partner_id.id,
|
||||
})
|
||||
self._set_viewed_slide(slide)
|
||||
if slide.channel_id.channel_type == "training":
|
||||
values.update(self._get_user_progress(slide.channel_id))
|
||||
values['uncategorized_slides'] = slide.channel_id.slide_ids.filtered(lambda slide: not slide.category_id)
|
||||
if 'fullscreen' in kwargs:
|
||||
return request.render("website_slides.slide_fullscreen", values)
|
||||
|
||||
if 'fullscreen' in kwargs:
|
||||
return request.render("website_slides.slide_fullscreen", values)
|
||||
return request.render("website_slides.slide_detail_view", values)
|
||||
|
||||
@http.route('''/slides/slide/<model("slide.slide"):slide>/pdf_content''',
|
||||
|
||||
@@ -55,13 +55,13 @@
|
||||
</div>
|
||||
<div>
|
||||
<t t-if="previous_slide">
|
||||
<a class="o_wslides_slide_button" t-attf-href="/slides/slide/#{previous_slide}">Prev</a>
|
||||
<a class="o_wslides_slide_button" t-attf-href="/slides/slide/#{slug(previous_slide)}">Prev</a>
|
||||
</t>
|
||||
<a t-if="slide.slide_type in ('webpage', 'video', 'document', 'iconographic') and not slide.question_ids and (slide.id in user_progress and not user_progress[slide.id].completed)"
|
||||
t-att-href="'/slides/slide/%s/set_completed?%s' % (slide.id, 'next_slide=%s' % next_slide if next_slide else '')"
|
||||
t-att-href="'/slides/slide/%s/set_completed?%s' % (slide.id, 'next_slide=%s' % next_slide.id if next_slide else '')"
|
||||
class="o_wslides_slide_button_done">Set Done</a>
|
||||
<t t-if="next_slide">
|
||||
<a class="o_wslides_slide_button" t-attf-href="/slides/slide/#{next_slide}">Next</a>
|
||||
<a class="o_wslides_slide_button" t-attf-href="/slides/slide/#{slug(next_slide)}">Next</a>
|
||||
</t>
|
||||
<a t-if="slide.channel_id.channel_type == 'training'" t-attf-href="/slides/slide/#{slug(slide)}?fullscreen=1" class="o_wslides_slide_button_fullscreen ml-2"><i class="fa fa-desktop mr-2"></i>fullscreen</a>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user