[IMP] website_slides: de-traw-ify

Replace the t-raws used for the end-of-quiz message by t-outs.

This requires marking the two subfields of `quiz/submit` as Markup,
rewrite the method in a more modern style while at it.

Also update the tour to ensure that the message is indeed inserted as
markup, reset the users' karma to a known value to ensure the
motivational message is predictable.
This commit is contained in:
Xavier Morel
2021-07-20 05:47:26 +00:00
parent 7f72555f4e
commit 0691736b49
4 changed files with 43 additions and 28 deletions
@@ -5,6 +5,7 @@ odoo.define('website_slides.quiz', function (require) {
var Dialog = require('web.Dialog');
var core = require('web.core');
var session = require('web.session');
const {Markup} = require('web.utils');
var CourseJoinWidget = require('website_slides.course.join.widget').courseJoinWidget;
var QuestionFormWidget = require('website_slides.quiz.question.form');
@@ -342,35 +343,39 @@ odoo.define('website_slides.quiz', function (require) {
*
* @private
*/
_submitQuiz: function () {
var self = this;
return this._rpc({
async _submitQuiz() {
const data = await this._rpc({
route: '/slides/slide/quiz/submit',
params: {
slide_id: self.slide.id,
slide_id: this.slide.id,
answer_ids: this._getQuizAnswers(),
}
}).then(function (data) {
if (data.error) {
self._alertShow(data.error);
} else {
self.quiz = _.extend(self.quiz, data);
if (data.completed) {
self._disableAnswers();
new SlideQuizFinishModal(self, {
quiz: self.quiz,
hasNext: self.slide.hasNext,
userId: self.userId
}).open();
self.slide.completed = true;
self.trigger_up('slide_completed', {slide: self.slide, completion: data.channel_completion});
}
self._hideEditOptions();
self._renderAnswersHighlightingAndComments();
self._renderValidationInfo();
}
});
if (data.error) {
this._alertShow(data.error);
return;
}
Object.assign(this.quiz, data);
const {rankProgress, completed, channel_completion: completion} = this.quiz;
// two of the rankProgress properties are HTML messages, mark if set
if ('description' in rankProgress) {
rankProgress['description'] = Markup(rankProgress['description'] || '');
rankProgress['previous_rank']['motivational'] =
Markup(rankProgress['previous_rank']['motivational'] || '');
}
if (completed) {
this._disableAnswers();
new SlideQuizFinishModal(this, {
quiz: this.quiz,
hasNext: this.slide.hasNext,
userId: this.userId
}).open();
this.slide.completed = true;
this.trigger_up('slide_completed', {slide: this.slide, completion});
}
this._hideEditOptions();
this._renderAnswersHighlightingAndComments();
this._renderValidationInfo();
},
/**
@@ -105,6 +105,9 @@ tour.register('course_member', {
trigger: '.o_wslides_js_lesson_quiz_question:last .list-group a:first'
}, {
trigger: '.o_wslides_js_lesson_quiz_submit'
}, {
// check that we have a properly motivational message to motivate us!
trigger: '.o_wslides_quiz_modal_rank_motivational > div > div:contains("Reach the next rank and gain a very nice mug !")'
}, {
trigger: 'a:contains("End course")'
},
@@ -144,8 +144,12 @@
</div>
</div>
<div class="pb-3 o_wslides_quiz_modal_rank_motivational">
<t t-set="showLastRankDescription" t-value="widget.quiz.rankProgress.last_rank &amp;&amp; !widget.quiz.rankProgress.level_up" />
<t t-raw="showLastRankDescription ? widget.quiz.rankProgress.description : widget.quiz.rankProgress.previous_rank.motivational" />
<t t-if="widget.quiz.rankProgress.last_rank and !widget.quiz.rankProgress.level_up">
<t t-out="widget.quiz.rankProgress.description"/>
</t>
<t t-else="">
<t t-out="widget.quiz.rankProgress.previous_rank.motivational"/>
</t>
</div>
</div>
<div class="o_wslides_quiz_modal_dismiss align-self-end d-none">
@@ -102,7 +102,8 @@ class TestUi(TestUICommon):
user_demo = self.user_demo
user_demo.flush()
user_demo.write({
'groups_id': [(5, 0), (4, self.env.ref('base.group_user').id)]
'karma': 1,
'groups_id': [(6, 0, self.env.ref('base.group_user').ids)]
})
self.browser_js(
@@ -115,7 +116,8 @@ class TestUi(TestUICommon):
user_demo = self.user_demo
user_demo.flush()
user_demo.write({
'groups_id': [(5, 0), (4, self.env.ref('base.group_user').id), (4, self.env.ref('website_slides.group_website_slides_officer').id)]
'karma': 1,
'groups_id': [(6, 0, (self.env.ref('base.group_user') | self.env.ref('website_slides.group_website_slides_officer')).ids)]
})
self.browser_js(
@@ -127,6 +129,7 @@ class TestUi(TestUICommon):
def test_course_member_portal(self):
user_portal = self.user_portal
user_portal.flush()
user_portal.karma = 1
self.browser_js(
'/slides',