diff options
Diffstat (limited to 'addons/website_event_track_quiz/views')
11 files changed, 498 insertions, 0 deletions
diff --git a/addons/website_event_track_quiz/views/assets.xml b/addons/website_event_track_quiz/views/assets.xml new file mode 100644 index 00000000..c20fee1e --- /dev/null +++ b/addons/website_event_track_quiz/views/assets.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" ?> +<odoo><data> + <template id="assets_frontend" inherit_id="website.assets_frontend" name="Event Track Quiz Frontend Assets"> + <xpath expr="//link[last()]" position="after"> + <link rel="stylesheet" type="text/scss" href="/website_event_track_quiz/static/src/scss/event_quiz.scss" t-ignore="true"/> + </xpath> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/website_event_track_quiz/static/src/js/event_quiz.js"/> + <script type="text/javascript" src="/website_event_track_quiz/static/src/js/event_quiz_leaderboard.js"/> + </xpath> + </template> +</data></odoo> diff --git a/addons/website_event_track_quiz/views/event_event_views.xml b/addons/website_event_track_quiz/views/event_event_views.xml new file mode 100644 index 00000000..e9f4f8f0 --- /dev/null +++ b/addons/website_event_track_quiz/views/event_event_views.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo><data> + + <record id="event_event_view_form" model="ir.ui.view"> + <field name="name">event.event.view.form.inherit.track.quiz</field> + <field name="model">event.event</field> + <field name="inherit_id" ref="website_event.event_event_view_form"/> + <field name="arch" type="xml"> + <xpath expr="//label[@for='community_menu']" position="attributes"> + <attribute name="invisible">0</attribute> + </xpath> + </field> + </record> + +</data></odoo> + diff --git a/addons/website_event_track_quiz/views/event_leaderboard_templates.xml b/addons/website_event_track_quiz/views/event_leaderboard_templates.xml new file mode 100644 index 00000000..8a2e4eb6 --- /dev/null +++ b/addons/website_event_track_quiz/views/event_leaderboard_templates.xml @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + +<template id="event_leaderboard" name="Leaderboard"> + <t t-call="website_event.layout"> + <div t-if="visitors" class="bg-light pt32 pb32 o_wevent_quiz_leaderboard"> + <t t-call="website_event_track_quiz.leaderboard_search_bar"/> + <div class="container mt32"> + <div t-if="not search" class="row mb-3"> + <div class="col-md-4 d-flex flex-grow-1" t-foreach="top3_visitors" t-as="visitor"> + <t t-call="website_event_track_quiz.top3_visitor_card"></t> + </div> + </div> + <table class="table table-sm"> + <tr t-foreach="visitors" t-as="visitor" + t-attf-class="#{'alert-info' if visitor['visitor'] == current_visitor else 'bg-white'} #{'o_wevent_quiz_scroll_to' if scroll_to_position and visitor['visitor'] == current_visitor else ''}"> + <t t-call="website_event_track_quiz.all_visitor_card"/> + </tr> + </table> + <div class="form-inline justify-content-center"> + <t t-call="website_event_track_quiz.pager_nobox"/> + </div> + </div> + </div> + <div t-if="not visitors and search" class="container mt32"> + <t t-call="website_event_track_quiz.leaderboard_search_bar"/> + <div class='alert alert-warning mt32'>No user found for <strong><t t-esc="search"/></strong>. Try another search.</div> + </div> + <div t-if="not visitors and not search" class="vh-100 bg-light d-flex justify-content-center align-items-center"> + <h4 class="text-muted font-weight-bold">There is currently no leaderboard available</h4> + </div> + </t> +</template> + +<template id="pager_nobox" name="Pager (not box display)"> + <ul t-if="pager['page_count'] > 1" t-attf-class="o_wprofile_pager font-weight-bold pagination m-0"> + <li t-attf-class="page-item o_wprofile_pager_arrow #{'disabled' if pager['page']['num'] == 1 else ''}"> + <a t-att-href=" pager['page_first']['url'] if pager['page']['num'] != 1 else None" class="page-link"><i class="fa fa-step-backward"/></a> + </li> + <li t-attf-class="page-item o_wprofile_pager_arrow #{'disabled' if pager['page']['num'] == 1 else ''}"> + <a t-att-href=" pager['page_previous']['url'] if pager['page']['num'] != 1 else None" class="page-link"><i class="fa fa-caret-left"/></a> + </li> + <t t-foreach="pager['pages']" t-as="page"> + <li t-attf-class="page-item #{'active disabled bg-primary rounded-circle' if page['num'] == pager['page']['num'] else ''}"> <a t-att-href="page['url']" class="page-link" t-raw="page['num']"></a></li> + </t> + <li t-attf-class="page-item o_wprofile_pager_arrow #{'disabled' if pager['page']['num'] == pager['page_count'] else ''}"> + <a t-att-href="pager['page_next']['url'] if pager['page']['num'] != pager['page_count'] else None" class="page-link"><i class="fa fa-caret-right"/></a> + </li> + <li t-attf-class="page-item o_wprofile_pager_arrow #{'disabled' if pager['page']['num'] == pager['page_count'] else ''}"> + <a t-att-href=" pager['page_last']['url'] if pager['page']['num'] != pager['page_count'] else None" class="page-link"><i class="fa fa-step-forward"/></a> + </li> + </ul> +</template> + +<template id="top3_visitor_card" name="Top 3 Visitor Card"> + <div class="card w-100 text-center mb-2 border-bottom-0"> + <div class="card-body"> + <div class="d-inline-block position-relative"> + <img class="rounded-circle img-fluid" + style="width: 128px; height: 128px; object-fit: cover;" + t-att-src="image_data_uri(visitor['visitor'].partner_image) if visitor['visitor'].partner_image else '/web/static/src/img/user_placeholder.jpg'"/> + <img class="position-absolute" t-attf-src="/website_profile/static/src/img/rank_#{visitor['position']}.svg" alt="User rank" style="bottom: 0; right: -10px"/> + </div> + <h3 t-if="visitor['visitor'] == current_visitor and not visitor['visitor'].name" class="mt-2 mb-0">You</h3> + <h3 t-else="" class="mt-2 mb-0" t-esc="visitor['visitor'].display_name"/> + </div> + <div class="row mx-0 o_wprofile_top3_card_footer text-nowrap"> + <div class="col py-3"><b t-esc="visitor['points']"/> <span class="text-muted">Points</span></div> + </div> + </div> +</template> + +<template id="all_visitor_card" name="All VIsitor Card"> + <td class="align-middle text-right text-muted" style="width: 0"> + <span t-esc="visitor['position']"/> + </td> + <td class="align-middle d-none d-sm-table-cell"> + <img class="o_object_fit_cover rounded-circle o_wprofile_img_small" + width="30" + height="30" + t-att-src="image_data_uri(visitor['visitor'].partner_image) if visitor['visitor'].partner_image else '/web/static/src/img/user_placeholder.jpg'"/> + </td> + <td class="align-middle w-md-75"> + <span t-if="visitor['visitor'] == current_visitor and not visitor['visitor'].name" class="font-weight-bold">You</span> + <span t-else="" class="font-weight-bold" t-esc="visitor['visitor'].display_name"/><br/> + </td> + <td class="align-middle font-weight-bold text-right text-nowrap"> + <b t-esc="visitor['points']"/> <span class="text-muted small font-weight-bold">Points</span> + </td> +</template> + +<!-- Sub nav --> +<template id="leaderboard_search_bar" name="Leaderboard search bar"> + <div class="container"> + <div class="row align-items-center justify-content-between"> + <!-- Desktop Mode --> + <div class="col d-none d-md-flex flex-row align-items-center justify-content-end"> + <!-- search --> + <form t-attf-action="#{'/event/%s/community/leaderboard/results' % (slug(event))}" role="search" method="get"> + <div class="input-group ml-1 position-relative"> + <span class="input-group-prepend"> + <button class="btn btn-link text-white rounded-0 pr-1" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"></i> + </button> + </span> + <input type="text" class="form-control rounded-0" name="search" placeholder="Search Attendees" t-att-value="searched_name or ''"/> + </div> + </form> + </div> + + <!-- Mobile Mode --> + <div class="col d-md-none py-1 o_wprofile_user_profile_sub_nav_mobile_col"> + <div class="btn-group w-100 position-relative" role="group" aria-label="Mobile sub-nav"> + + <div class="btn-group ml-1 position-static mr-2"> + <a class="btn bg-black-25 text-white dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-search"></i></a> + <div class="dropdown-menu dropdown-menu-right w-100" style="right: 10px;"> + <form class="px-3" t-attf-action="#{'/event/%s/community/leaderboard' % (slug(event))}" role="search" method="get"> + <div class="input-group"> + <input type="text" class="form-control" name="search" placeholder="Search courses"/> + <span class="input-group-append"> + <button class="btn btn-primary" type="submit" aria-label="Search" title="Search"> + <i class="fa fa-search"/> + </button> + </span> + </div> + </form> + </div> + </div> + </div> + </div> + </div> + </div> +</template> +</odoo> diff --git a/addons/website_event_track_quiz/views/event_menus.xml b/addons/website_event_track_quiz/views/event_menus.xml new file mode 100644 index 00000000..3fec856d --- /dev/null +++ b/addons/website_event_track_quiz/views/event_menus.xml @@ -0,0 +1,17 @@ +<?xml version="1.0"?> +<odoo><data> + + <menuitem id="event_quiz_menu" + name="Quizzes" + action="event_quiz_action" + parent="event.menu_event_configuration" + groups="base.group_no_one" + sequence="50"/> + <menuitem id="event_quiz_question_menu" + name="Quiz Questions" + action="event_quiz_question_action" + parent="event.menu_event_configuration" + groups="base.group_no_one" + sequence="55"/> + +</data></odoo> diff --git a/addons/website_event_track_quiz/views/event_quiz_question_views.xml b/addons/website_event_track_quiz/views/event_quiz_question_views.xml new file mode 100644 index 00000000..f9c8ba0b --- /dev/null +++ b/addons/website_event_track_quiz/views/event_quiz_question_views.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="event_quiz_question_view_search" model="ir.ui.view"> + <field name="name">event.quiz.question.view.search</field> + <field name="model">event.quiz.question</field> + <field name="arch" type="xml"> + <search string="Quiz Questions"> + <field name="name"/> + <field name="quiz_id"/> + <group string="Group By" expand="0"> + <filter string="Quiz" name="groupby_quiz_id" context="{'group_by': 'quiz_id'}"/> + </group> + </search> + </field> + </record> + + <record id="event_quiz_question_view_tree" model="ir.ui.view"> + <field name="name">event.quiz.question.view.tree</field> + <field name="model">event.quiz.question</field> + <field name="arch" type="xml"> + <tree string="Quiz Questions"> + <field name="sequence" widget="handle"/> + <field name="name"/> + <field name="quiz_id"/> + <field name="awarded_points"/> + </tree> + </field> + </record> + + <record id="event_quiz_question_view_tree_from_quiz" model="ir.ui.view"> + <field name="name">event.quiz.question.view.tree.from.quiz</field> + <field name="model">event.quiz.question</field> + <field name="inherit_id" ref="website_event_track_quiz.event_quiz_question_view_tree"/> + <field name="mode">primary</field> + <field name="arch" type="xml"> + <xpath expr="//field[@name='quiz_id']" position="replace"> + </xpath> + </field> + </record> + + <record id="event_quiz_question_view_form" model="ir.ui.view"> + <field name="name">event.quiz.question.view.form</field> + <field name="model">event.quiz.question</field> + <field name="arch" type="xml"> + <form string="Quiz Question"> + <sheet> + <h1> + <field name="name" default_focus="1" + placeholder="e.g. According to Douglas, what should you pay most attention to?"/> + </h1> + <group> + <field name="quiz_id"/> + <field name="awarded_points" invisible="1"/> + </group> + <group name="questions"> + <field name="answer_ids" nolabel="1"> + <tree editable="bottom" create="true" delete="true"> + <field name="sequence" widget="handle"/> + <field name="text_value"/> + <field name="awarded_points"/> + <field name="comment"/> + </tree> + </field> + </group> + </sheet> + </form> + </field> + </record> + + <record id="event_quiz_question_view_form_from_quiz" model="ir.ui.view"> + <field name="name">event.quiz.question.view.form.from.quiz</field> + <field name="model">event.quiz.question</field> + <field name="inherit_id" ref="website_event_track_quiz.event_quiz_question_view_form"/> + <field name="mode">primary</field> + <field name="arch" type="xml"> + <xpath expr="//field[@name='quiz_id']" position="replace"> + </xpath> + </field> + </record> + + <record id="event_quiz_question_action" model="ir.actions.act_window"> + <field name="name">Event Quiz Questions</field> + <field name="res_model">event.quiz.question</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a Question + </p> + </field> + </record> +</odoo> diff --git a/addons/website_event_track_quiz/views/event_quiz_templates.xml b/addons/website_event_track_quiz/views/event_quiz_templates.xml new file mode 100644 index 00000000..1d8fd726 --- /dev/null +++ b/addons/website_event_track_quiz/views/event_quiz_templates.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<odoo> + <template id="quiz_content" name="Track: Quiz specific content"> + <t t-set="quiz_completed" t-value="quiz_completed or False"/> + + <div class="o_quiz_js_quiz col" + t-att-data-id="track.id" + t-att-data-event-id="track.event_id.id" + t-att-data-completed="1 if quiz_completed else 0" + t-att-data-quiz-attempts-count="quiz_attempts_count or 0" + t-att-data-quiz-points-gained="quiz_points" + t-att-data-is-manager="user_event_manager or 0"> + <t t-foreach="track.quiz_id.question_ids" t-as="question"> + <t t-call="website_event_track_quiz.quiz_question"/> + </t> + <div class="o_quiz_js_quiz_validation pt-3"/> + </div> + </template> + + <template id="quiz_question" name="Quiz question template"> + <div t-att-class="'o_quiz_js_quiz_question mt-3 %s' % ('completed-disabled' if quiz_completed else '')" + t-att-data-question-id="question['id']" t-att-data-title="question['name']" > + <div class="row d-flex mb-2 mx-0"> + <div class="h4"> + <span t-esc="question['name']"/> + </div> + </div> + <div class="list-group"> + <t t-foreach="question['answer_ids']" t-as="answer"> + <a t-att-data-answer-id="answer['id']" href="#" + t-att-data-text="answer['text_value']" t-att-data-is-correct="answer['is_correct']" t-att-data-comment="answer['comment']" + t-att-class="'o_quiz_quiz_answer list-group-item list-group-item-action d-flex align-items-center %s' % ('list-group-item-success' if slid_completed and answer['is_correct'] else '')"> + <label class="my-0 d-flex align-items-center justify-content-center mr-2"> + <input type="radio" + t-att-name="question['id']" + t-att-value="answer['id']" + class="d-none" + t-att-disabled="quiz_completed"/> + <i t-att-class="'fa fa-circle text-400 %s' % ('d-none' if quiz_completed and answer['is_correct'] else '')"/> + <i class="fa fa-times-circle text-danger d-none"></i> + <i t-att-class="'fa fa-check-circle text-success %s' % ('d-none' if not (quiz_completed and answer['is_correct']) else '')"></i> + </label> + <span t-esc="answer['text_value']"/> + </a> + </t> + <div class="o_quiz_quiz_answer_info list-group-item list-group-item-info d-none"> + <i class="fa fa-info-circle"/> + <span class="o_quiz_quiz_answer_comment"/> + </div> + </div> + </div> + </template> +</odoo> diff --git a/addons/website_event_track_quiz/views/event_quiz_views.xml b/addons/website_event_track_quiz/views/event_quiz_views.xml new file mode 100644 index 00000000..a7a528a5 --- /dev/null +++ b/addons/website_event_track_quiz/views/event_quiz_views.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <record id="event_quiz_view_search" model="ir.ui.view"> + <field name="name">event.quiz.view.search</field> + <field name="model">event.quiz</field> + <field name="arch" type="xml"> + <search string="Quizzes"> + <field name="name"/> + <field name="event_track_id"/> + <field name="event_id"/> + <group string="Group By" expand="0"> + <filter string="Track" name="groupby_event_track_id" context="{'group_by': 'event_track_id'}"/> + <filter string="Event" name="groupby_event_id" context="{'group_by': 'event_id'}"/> + </group> + </search> + </field> + </record> + + <record id="event_quiz_view_tree" model="ir.ui.view"> + <field name="name">event.quiz.view.tree</field> + <field name="model">event.quiz</field> + <field name="arch" type="xml"> + <tree string="Quizzes"> + <field name="name"/> + <field name="event_id"/> + <field name="event_track_id"/> + </tree> + </field> + </record> + + <record id="event_quiz_view_form" model="ir.ui.view"> + <field name="name">event.quiz.view.form</field> + <field name="model">event.quiz</field> + <field name="arch" type="xml"> + <form string="Quiz"> + <sheet> + <h1> + <field name="name" default_focus="1" + placeholder="e.g. Test your Knowledge"/> + </h1> + <group> + <field name="event_track_id"/> + <field name="event_id"/> + </group> + <group name="questions" string="Questions"> + <field name="question_ids" nolabel="1" + context="{ + 'tree_view_ref': 'website_event_track_quiz.event_quiz_question_view_tree_from_quiz', + 'form_view_ref': 'website_event_track_quiz.event_quiz_question_view_form_from_quiz' + }"/> + </group> + </sheet> + </form> + </field> + </record> + + <record id="event_quiz_view_form_from_track" model="ir.ui.view"> + <field name="name">event.quiz.view.form</field> + <field name="model">event.quiz</field> + <field name="inherit_id" ref="website_event_track_quiz.event_quiz_view_form"/> + <field name="mode">primary</field> + <field name="arch" type="xml"> + <xpath expr="//field[@name='event_track_id']" position="replace"></xpath> + <xpath expr="//field[@name='event_id']" position="replace"></xpath> + </field> + </record> + + <record id="event_quiz_action" model="ir.actions.act_window"> + <field name="name">Event Quizzes</field> + <field name="res_model">event.quiz</field> + <field name="view_mode">tree,form</field> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Create a Quiz + </p> + </field> + </record> +</odoo> diff --git a/addons/website_event_track_quiz/views/event_track_templates_page.xml b/addons/website_event_track_quiz/views/event_track_templates_page.xml new file mode 100644 index 00000000..2a50df5e --- /dev/null +++ b/addons/website_event_track_quiz/views/event_track_templates_page.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + +<template id="event_track_content" + name="Track: Main Description: add quiz" + inherit_id="website_event_track.event_track_content"> + <xpath expr="//div[hasclass('o_wesession_track_main_description')]" position="after"> + <div id="we_track_quiz_container" t-if="track.quiz_id" + t-att-class="'o_quiz_js_quiz_container o_quiz_main border-top bg-white px-2 pt-4 pb-4 col-12 %s' % ('' if track.is_quiz_completed else 'd-none')" + t-att-data-object-id="track.id"> + <h3 class="col-12">Quiz</h3> + <t t-call="website_event_track_quiz.quiz_content"> + <t t-set="track" t-value="track"/> + <t t-set="quiz_completed" t-value="track.is_quiz_completed"/> + <t t-set="quiz_points" t-value="track.quiz_points"/> + </t> + </div> + </xpath> + <xpath expr="//div[hasclass('o_we_track_reminder_button')]" position="before"> + <div class="o_we_track_quiz_button mr-2 my-1" t-if="track.quiz_id and not track.is_quiz_completed and not track.is_track_upcoming"> + <a class="btn btn-primary" href="#we_track_quiz_container" onclick="$('.o_quiz_js_quiz_container').removeClass('d-none'); "> + Take the Quiz + </a> + </div> + </xpath> +</template> + +</odoo> diff --git a/addons/website_event_track_quiz/views/event_track_views.xml b/addons/website_event_track_quiz/views/event_track_views.xml new file mode 100644 index 00000000..13a0ceac --- /dev/null +++ b/addons/website_event_track_quiz/views/event_track_views.xml @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<odoo> + <record id="event_track_view_form" model="ir.ui.view" > + <field name="name">event.track.view.form.inherit.event.track.quiz</field> + <field name="model">event.track</field> + <field name="inherit_id" ref="website_event_track.view_event_track_form"/> + <field name="arch" type="xml"> + <xpath expr="//group[@name='event_track_cta_group']" position="after"> + <group name="event_track_quiz_group"> + <field name="quiz_id" + context="{'form_view_ref': 'website_event_track_quiz.event_quiz_view_form_from_track'}"/> + </group> + </xpath> + </field> + </record> +</odoo> diff --git a/addons/website_event_track_quiz/views/event_track_visitor_views.xml b/addons/website_event_track_quiz/views/event_track_visitor_views.xml new file mode 100644 index 00000000..47f7e159 --- /dev/null +++ b/addons/website_event_track_quiz/views/event_track_visitor_views.xml @@ -0,0 +1,39 @@ +<?xml version="1.0"?> +<odoo><data> + + <record id="event_track_visitor_view_search" model="ir.ui.view" > + <field name="name">event.track.visitor.view.search.inherit.quiz</field> + <field name="model">event.track.visitor</field> + <field name="inherit_id" ref="website_event_track.event_track_visitor_view_search"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='is_wishlisted']" position="after"> + <field name="quiz_completed"/> + </xpath> + </field> + </record> + + <record id="event_track_visitor_view_form" model="ir.ui.view"> + <field name="name">event.track.visitor.view.form.inherit.quiz</field> + <field name="model">event.track.visitor</field> + <field name="inherit_id" ref="website_event_track.event_track_visitor_view_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='is_wishlisted']" position="after"> + <field name="quiz_completed"/> + <field name="quiz_points"/> + </xpath> + </field> + </record> + + <record id="event_track_visitor_view_list" model="ir.ui.view"> + <field name="name">event.track.visitor.view.list.inherit.quiz</field> + <field name="model">event.track.visitor</field> + <field name="inherit_id" ref="website_event_track.event_track_visitor_view_list"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='is_wishlisted']" position="after"> + <field name="quiz_completed"/> + <field name="quiz_points"/> + </xpath> + </field> + </record> + +</data></odoo> diff --git a/addons/website_event_track_quiz/views/event_type_views.xml b/addons/website_event_track_quiz/views/event_type_views.xml new file mode 100644 index 00000000..460a5e5b --- /dev/null +++ b/addons/website_event_track_quiz/views/event_type_views.xml @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<odoo><data> + <record id="event_type_view_form" model="ir.ui.view"> + <field name="name">event.type.view.form.inherit.track.quiz</field> + <field name="model">event.type</field> + <field name="inherit_id" ref="website_event.event_type_view_form"/> + <field name="arch" type="xml"> + <xpath expr="//div[@id='community-menu']" position="attributes"> + <attribute name="attrs">{'invisible': [('website_menu', '=', False)]}</attribute> + </xpath> + </field> + </record> +</data></odoo> |
