diff options
| author | Aurélien Warnon <awa@odoo.com> | 2020-07-23 14:12:10 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-08-04 14:28:29 +0000 |
| commit | 92caab190183aed30726e4251366f972d0c5755f (patch) | |
| tree | c0e4f1267786d89bcaf21e0ee2f19699d0081f1c /addons/website_event_track_live_quiz | |
| parent | fe17857e89cf48646b0d82cdb1cd3395447a1b3b (diff) | |
[ADD] website_event_track_live_quiz: integrate quiz within live track
RATIONALE
Events are sometimes held online, gathering a community. In this merge we
improve Event application to better support full-online events with improved
tracks, wishlists, chat rooms, .
PURPOSE
This bridge module enables a better integration of the quiz features within the
"next track suggestion" at the end of a track video.
The track suggestion mechanism will let the user choose to take the quiz before
being redirected to the next track. If he takes no action, he is redirected
automatically.
LINKS
Task ID-2283735 (Talks -> Session upgrade)
Task ID-2283729 (Live/Youtube Tracks)
Co-Authored-By: Aurélien Warnon <awa@odoo.com>
Co-Authored-By: David Beguin <dbe@odoo.com>
Co-Authored-By: Quentin Mourier <qmo@odoo.com>
Co-Authored-By: Thibault Delavallée <tde@odoo.com>
Diffstat (limited to 'addons/website_event_track_live_quiz')
10 files changed, 165 insertions, 0 deletions
diff --git a/addons/website_event_track_live_quiz/__init__.py b/addons/website_event_track_live_quiz/__init__.py index 67dee8c60db..dd15b5c32e5 100644 --- a/addons/website_event_track_live_quiz/__init__.py +++ b/addons/website_event_track_live_quiz/__init__.py @@ -1,2 +1,4 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import controllers diff --git a/addons/website_event_track_live_quiz/__manifest__.py b/addons/website_event_track_live_quiz/__manifest__.py index ec6a1d8c9d5..b01c4da1cce 100644 --- a/addons/website_event_track_live_quiz/__manifest__.py +++ b/addons/website_event_track_live_quiz/__manifest__.py @@ -14,10 +14,14 @@ 'website_event_track_quiz', ], 'data': [ + 'views/assets.xml', + 'views/event_track_templates_page.xml', ], 'demo': [ ], 'qweb': [ + 'static/src/xml/website_event_track_live_templates.xml', + 'static/src/xml/website_event_track_quiz_templates.xml', ], 'application': False, 'installable': True, diff --git a/addons/website_event_track_live_quiz/controllers/__init__.py b/addons/website_event_track_live_quiz/controllers/__init__.py new file mode 100644 index 00000000000..b4c6a301891 --- /dev/null +++ b/addons/website_event_track_live_quiz/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import track_live_quiz diff --git a/addons/website_event_track_live_quiz/controllers/track_live_quiz.py b/addons/website_event_track_live_quiz/controllers/track_live_quiz.py new file mode 100644 index 00000000000..282798301fe --- /dev/null +++ b/addons/website_event_track_live_quiz/controllers/track_live_quiz.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.addons.website_event_track_live.controllers.track_live import EventTrackLiveController + + +class EventTrackLiveQuizController(EventTrackLiveController): + + def _prepare_track_suggestion_values(self, track, track_suggestion): + res = super(EventTrackLiveQuizController, self)._prepare_track_suggestion_values(track, track_suggestion) + res['current_track']['show_quiz'] = bool(track.quiz_id) and not track.is_quiz_completed + return res diff --git a/addons/website_event_track_live_quiz/static/src/js/event_quiz.js b/addons/website_event_track_live_quiz/static/src/js/event_quiz.js new file mode 100644 index 00000000000..2fd34e66aa4 --- /dev/null +++ b/addons/website_event_track_live_quiz/static/src/js/event_quiz.js @@ -0,0 +1,58 @@ +odoo.define('website_event_track_live_quiz.event_quiz', function (require) { +'use strict'; + +var Quiz = require('website_event_track_quiz.event.quiz'); + +var WebsiteEventTrackSuggestionQuiz = Quiz.include({ + xmlDependencies: Quiz.prototype.xmlDependencies.concat([ + '/website_event_track_live_quiz/static/src/xml/website_event_track_quiz_templates.xml', + ]), + + /** + * @override + */ + willStart: function () { + return Promise.all([ + this._super(...arguments), + this._getTrackSuggestion() + ]); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + _submitQuiz: function () { + var self = this; + return this._super(...arguments).then(function (data) { + if (data.quiz_completed) { + self.$('.o_quiz_js_quiz_next_track') + .removeClass('btn-light') + .addClass('btn-secondary'); + } + + return Promise.resolve(data); + }); + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + _getTrackSuggestion: function () { + var self = this; + return this._rpc({ + route: '/event_track/get_track_suggestion', + params: { + track_id: this.track.id, + } + }).then(function (suggestion) { + self.nextSuggestion = suggestion; + return Promise.resolve(); + }); + } +}); + +return WebsiteEventTrackSuggestionQuiz; + +}); diff --git a/addons/website_event_track_live_quiz/static/src/js/website_event_track_suggestion.js b/addons/website_event_track_live_quiz/static/src/js/website_event_track_suggestion.js new file mode 100644 index 00000000000..17f98f9b7fd --- /dev/null +++ b/addons/website_event_track_live_quiz/static/src/js/website_event_track_suggestion.js @@ -0,0 +1,34 @@ +odoo.define('website_event_track_live_quiz.website_event_track_suggestion', function (require) { +'use strict'; + +var WebsiteEventTrackSuggestion = require('website_event_track_live.website_event_track_suggestion'); + +var WebsiteEventTrackSuggestionLiveQuiz = WebsiteEventTrackSuggestion.include({ + xmlDependencies: WebsiteEventTrackSuggestion.prototype.xmlDependencies.concat([ + '/website_event_track_live_quiz/static/src/xml/website_event_track_live_templates.xml', + ]), + events: _.extend({}, WebsiteEventTrackSuggestion.prototype.events, { + 'click .owevent_track_suggestion_quiz': '_onQuizClick' + }), + + init: function (parent, options) { + this._super(...arguments); + this.currentTrack.showQuiz = options.current_track.show_quiz; + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * If the user takes the quiz, stop the next suggestion timer + */ + _onQuizClick: function () { + clearInterval(this.timerInterval); + this.$('.owevent_track_suggestion_timer_text_wrapper').remove(); + } +}); + +return WebsiteEventTrackSuggestionLiveQuiz; + +}); diff --git a/addons/website_event_track_live_quiz/static/src/xml/website_event_track_live_templates.xml b/addons/website_event_track_live_quiz/static/src/xml/website_event_track_live_templates.xml new file mode 100644 index 00000000000..91c37f78bc0 --- /dev/null +++ b/addons/website_event_track_live_quiz/static/src/xml/website_event_track_live_templates.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + +<t t-extend="website_event_track_live.website_event_track_suggestion"> + <t t-jquery="a.owevent_track_suggestion_replay" t-operation="before"> + <a t-if="widget.currentTrack.showQuiz" class="btn btn-primary btn-lg mr-2 owevent_track_suggestion_quiz" + href="#we_track_quiz_container" + onclick="$('.o_quiz_js_quiz_container').removeClass('d-none');"> + <span>Take the Quiz</span> + </a> + </t> +</t> + +</odoo> diff --git a/addons/website_event_track_live_quiz/static/src/xml/website_event_track_quiz_templates.xml b/addons/website_event_track_live_quiz/static/src/xml/website_event_track_quiz_templates.xml new file mode 100644 index 00000000000..a1524d14621 --- /dev/null +++ b/addons/website_event_track_live_quiz/static/src/xml/website_event_track_quiz_templates.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + +<t t-extend="quiz.validation"> + <t t-jquery="button.o_quiz_js_quiz_reset" t-operation="after"> + <a t-if="widget.nextSuggestion" + t-attf-class="btn border o_quiz_js_quiz_next_track #{widget.track.completed ? 'btn-secondary' : 'btn-light'}" + t-att-href="widget.nextSuggestion.suggestion.website_url"> + Next Track + </a> + </t> +</t> + +</odoo> diff --git a/addons/website_event_track_live_quiz/views/assets.xml b/addons/website_event_track_live_quiz/views/assets.xml new file mode 100644 index 00000000000..7609ee3c03f --- /dev/null +++ b/addons/website_event_track_live_quiz/views/assets.xml @@ -0,0 +1,11 @@ +<?xml version="1.0"?> +<odoo> + +<template id="assets_frontend" inherit_id="website.assets_frontend" name="Event Track Live Quiz Assets Frontend"> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/website_event_track_live_quiz/static/src/js/website_event_track_suggestion.js"></script> + <script type="text/javascript" src="/website_event_track_live_quiz/static/src/js/event_quiz.js"></script> + </xpath> +</template> + +</odoo> diff --git a/addons/website_event_track_live_quiz/views/event_track_templates_page.xml b/addons/website_event_track_live_quiz/views/event_track_templates_page.xml new file mode 100644 index 00000000000..7bd968af4a0 --- /dev/null +++ b/addons/website_event_track_live_quiz/views/event_track_templates_page.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + +<template id="event_track_content" + name="Main Description: tweak quiz" + inherit_id="website_event_track_quiz.event_track_content"> + <xpath expr="//div[hasclass('o_we_track_quiz_button')]" position="attributes"> + <attribute name="t-if">track.quiz_id and not track.is_quiz_completed and not track.is_track_upcoming and (not track.is_track_live or track.is_youtube_replay or not track.youtube_video_id)</attribute> + </xpath> +</template> + +</odoo> |
