From 1a92829c7dc21e1af1dcc72fbac7cc4633e9f570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Warnon?= Date: Tue, 17 Dec 2019 07:31:49 +0000 Subject: [PATCH 1/3] [REF] website_slides: rename 'channel_management.xml' to 'slide_course_join.xml' This commit simply renames a template file to better reflect its purpose and also align with its JS widget file naming. It is a preparation commit for pending changes. Task 2045571 PR #41972 --- addons/website_slides/static/src/js/slides_course_join.js | 2 +- .../src/xml/{channel_management.xml => slide_course_join.xml} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename addons/website_slides/static/src/xml/{channel_management.xml => slide_course_join.xml} (100%) diff --git a/addons/website_slides/static/src/js/slides_course_join.js b/addons/website_slides/static/src/js/slides_course_join.js index 1e753b967f6..f9d55811955 100644 --- a/addons/website_slides/static/src/js/slides_course_join.js +++ b/addons/website_slides/static/src/js/slides_course_join.js @@ -9,7 +9,7 @@ var _t = core._t; var CourseJoinWidget = publicWidget.Widget.extend({ template: 'slide.course.join', - xmlDependencies: ['/website_slides/static/src/xml/channel_management.xml'], + xmlDependencies: ['/website_slides/static/src/xml/slide_course_join.xml'], events: { 'click .o_wslides_js_course_join_link': '_onClickJoin', }, diff --git a/addons/website_slides/static/src/xml/channel_management.xml b/addons/website_slides/static/src/xml/slide_course_join.xml similarity index 100% rename from addons/website_slides/static/src/xml/channel_management.xml rename to addons/website_slides/static/src/xml/slide_course_join.xml From 660e1054311d0115a107750aa30b9c282d10875f Mon Sep 17 00:00:00 2001 From: Florent Lejoly Date: Mon, 30 Sep 2019 11:25:38 +0000 Subject: [PATCH 2/3] [IMP] website_[sale_]slides: allow users to take the slide quiz before joining the course MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PURPOSE When previewing a slide of type 'quiz', users are tempted to answer the questions even if they are not member of the course yet. This commit will allow users to answer the quiz without being a member of the course, and offer a smart redirection to join / buy based on the enroll type of the channel. SPECIFICATIONS We introduce a "CourseJoinWidget" that will handle the display and the behavior of the "join" button based on the user (public or not) and the enroll type (public course or based on a payment). When the user answers questions and he's not a member yet, we store the answers temporarily in the session object. When he comes back on the quiz page after having completed his membership, we fill in the quiz based on his previously entered answers and clean the session. LINKS Task 2045571 PR #41972 Co-authored-by: Florent Lejolyn Co-authored-by: Aurélien Warnon --- .../static/src/js/slides_course_join.js | 43 ++++ .../static/src/js/slides_course_quiz.js | 2 +- .../static/src/xml/slide_course_join.xml | 15 ++ .../src/xml/website_sale_slides_quiz.xml | 46 +---- addons/website_sale_slides/views/assets.xml | 1 + addons/website_slides/controllers/main.py | 35 +++- .../website_slides/data/slide_slide_demo.xml | 3 +- .../static/src/js/slides_course_join.js | 85 ++++++-- .../static/src/js/slides_course_quiz.js | 189 +++++++++++++----- .../static/src/xml/slide_course_join.xml | 14 +- .../static/src/xml/slide_quiz.xml | 56 ++++-- .../views/website_slides_templates_course.xml | 3 +- .../views/website_slides_templates_lesson.xml | 7 +- ...ite_slides_templates_lesson_fullscreen.xml | 10 +- 14 files changed, 370 insertions(+), 139 deletions(-) create mode 100644 addons/website_sale_slides/static/src/js/slides_course_join.js create mode 100644 addons/website_sale_slides/static/src/xml/slide_course_join.xml diff --git a/addons/website_sale_slides/static/src/js/slides_course_join.js b/addons/website_sale_slides/static/src/js/slides_course_join.js new file mode 100644 index 00000000000..22ebe96da3e --- /dev/null +++ b/addons/website_sale_slides/static/src/js/slides_course_join.js @@ -0,0 +1,43 @@ +odoo.define('website_sale_slides.course.join.widget', function (require) { +"use strict"; + +var CourseJoinWidget = require('website_slides.course.join.widget').courseJoinWidget; + +CourseJoinWidget.include({ + xmlDependencies: (CourseJoinWidget.prototype.xmlDependencies || []).concat( + ["/website_sale_slides/static/src/xml/slide_course_join.xml"] + ), + init: function (parent, options) { + this._super.apply(this, arguments); + this.productId = options.channel.productId || false; + }, + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * When the user joins the course, if it's set as "on payment" and the user is logged in, + * we redirect to the shop page for this course. + * + * @param {MouseEvent} ev + * @override + * @private + */ + _onClickJoin: function (ev) { + ev.preventDefault(); + + if (this.channel.channelEnroll === 'payment' && !this.publicUser) { + var shopUrl = _.str.sprintf('/shop/cart/update?product_id=%s&express=1', this.productId); + this.beforeJoin().then(function () { + window.location.href = shopUrl; + }); + } else { + this._super.apply(this, arguments); + } + }, +}); + +return CourseJoinWidget; + +}); diff --git a/addons/website_sale_slides/static/src/js/slides_course_quiz.js b/addons/website_sale_slides/static/src/js/slides_course_quiz.js index 1e601acc7a7..3922a631a30 100644 --- a/addons/website_sale_slides/static/src/js/slides_course_quiz.js +++ b/addons/website_sale_slides/static/src/js/slides_course_quiz.js @@ -5,7 +5,7 @@ var sAnimations = require('website.content.snippets.animation'); var Quiz = require('website_slides.quiz').Quiz; sAnimations.registry.websiteSlidesQuizNoFullscreen.include({ - _extractChannelData: function (slideData){ + _extractChannelData: function (slideData) { return _.extend({}, this._super.apply(this, arguments), { productId: slideData.productId, enroll: slideData.enroll, diff --git a/addons/website_sale_slides/static/src/xml/slide_course_join.xml b/addons/website_sale_slides/static/src/xml/slide_course_join.xml new file mode 100644 index 00000000000..404386d7c36 --- /dev/null +++ b/addons/website_sale_slides/static/src/xml/slide_course_join.xml @@ -0,0 +1,15 @@ + + + + + + + Sign in + + + Buy course + + + + + diff --git a/addons/website_sale_slides/static/src/xml/website_sale_slides_quiz.xml b/addons/website_sale_slides/static/src/xml/website_sale_slides_quiz.xml index 9392a8bff21..5a371469a49 100644 --- a/addons/website_sale_slides/static/src/xml/website_sale_slides_quiz.xml +++ b/addons/website_sale_slides/static/src/xml/website_sale_slides_quiz.xml @@ -1,43 +1,15 @@ - -
-
- Sign in and buy the course to join it and take the quiz! - - - + XP - - -
-
- Sign in - Don't have an account ? Sign Up ! -
-
-
-
- - - Buy the course - - -
- - - - -
-
-
+ + + + Sign in and buy the course to take the quiz + + + To validate your answers, buy the course! + +
diff --git a/addons/website_sale_slides/views/assets.xml b/addons/website_sale_slides/views/assets.xml index 65b544695e0..0aad00a5ae1 100644 --- a/addons/website_sale_slides/views/assets.xml +++ b/addons/website_sale_slides/views/assets.xml @@ -4,6 +4,7 @@