[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:
Thibault Delavallée
2019-03-06 14:03:17 +00:00
parent 181e6487ef
commit 711a48aaa8
2 changed files with 33 additions and 26 deletions
+30 -23
View File
@@ -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>