summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérémy Hennecart <jeh@odoo.com>2019-07-22 12:23:22 +0000
committerThibault Delavallée <tde@odoo.com>2019-08-05 08:40:33 +0000
commit4587e6a3965b1963920670d7cda755c7bd9d6367 (patch)
tree73a9720b651cb57eae2ac525897bc4a37a3f8de7
parentad9d7c5c06a6e00a6942fe312c7087bfb62865de (diff)
[REF] website_slides: make eLearning an application with its own menu structure
PURPOSE eLearning should have its own application in manager. Indeed this is becoming a big application and having it embedded inside Website application is not enough anymore. It should also hold updated and easy-to-use menus, navigation, actions and views in backend. SPECIFICATIONS Update manifest and make website_slides an application separated from website embedded menus. Implement new menu structure * Courses * Courses List view: Course Name, # Views, # Attendees, # Ratings, Revenues, Reviews * Contents * Reporting * Courses: list view on slide.channel model, ordered by # views. * add a graph view (group by content) * Contents: graph view on slide.slide model Area Graph: X month Y measure: # Views (others measures: Attendees, ...) Group by: course (color) * Reviews: see kanban of latest reviews; * Quiz: list view on slide.question model. List view: Add # Quizz Trials, # Quizz Passed, Avg Attempts * Configuration * Settings * Allow Forum on Courses (installs website_slides_forum) * Allow Certifications (installs website_slides_survey) * Allow Selling Courses (installs website_sale_slides) * Course Tags * See channel.tags.group with label Course Tags, form view allow to configure group tags * https://drive.google.com/a/odoo.com/file/d/1G0g2UnG5cZG55EXQ5icbgwe7T2eSZskT/view?usp=drivesdk * On click: open :https://drive.google.com/a/odoo.com/file/d/1I_PW3aZAbrslXadiYqmVF-_6dGXx8knd/view?usp=drivesdk * Content Tags This structure will gain new items in sub-modules, notably bridge with form and website_sale. Those will be implemented in next commits. LINKS Task 1978729 PR #35061 Co-Authored-By: Thibault Delavallée <tde@odoo.com> Co-Authored-By: Jérémy Hennecart <jeh@odoo.com>
-rw-r--r--addons/website_slides/__manifest__.py5
-rw-r--r--addons/website_slides/controllers/main.py4
-rw-r--r--addons/website_slides/data/ir_data.xml15
-rw-r--r--addons/website_slides/models/res_config_settings.py4
-rw-r--r--addons/website_slides/models/slide_question.py21
-rw-r--r--addons/website_slides/models/slide_slide.py3
-rw-r--r--addons/website_slides/views/rating_rating_views.xml60
-rw-r--r--addons/website_slides/views/res_config_settings_views.xml61
-rw-r--r--addons/website_slides/views/slide_channel_tag_views.xml24
-rw-r--r--addons/website_slides/views/slide_channel_views.xml74
-rw-r--r--addons/website_slides/views/slide_question_views.xml80
-rw-r--r--addons/website_slides/views/slide_slide_views.xml69
-rw-r--r--addons/website_slides/views/website_slides_menu_views.xml102
-rw-r--r--addons/website_slides/views/website_slides_templates_utils.xml2
14 files changed, 397 insertions, 127 deletions
diff --git a/addons/website_slides/__manifest__.py b/addons/website_slides/__manifest__.py
index 047c21cb97e..5373f5bd6de 100644
--- a/addons/website_slides/__manifest__.py
+++ b/addons/website_slides/__manifest__.py
@@ -3,7 +3,7 @@
'name': 'eLearning',
'version': '2.0',
'sequence': 145,
- 'summary': 'Create online Courses',
+ 'summary': 'Manage and publish an eLearning platform',
'website': 'https://www.odoo.com/page/slides',
'category': 'Website',
'description': """
@@ -28,6 +28,8 @@ Featuring
'views/assets.xml',
'views/res_config_settings_views.xml',
'views/res_partner_views.xml',
+ 'views/rating_rating_views.xml',
+ 'views/slide_question_views.xml',
'views/slide_slide_views.xml',
'views/slide_channel_partner_views.xml',
'views/slide_channel_views.xml',
@@ -41,7 +43,6 @@ Featuring
'views/website_slides_templates_profile.xml',
'views/website_slides_templates_utils.xml',
'wizard/slide_channel_invite_views.xml',
- 'data/ir_data.xml',
'data/gamification_data.xml',
'data/mail_data.xml',
'data/slide_data.xml',
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py
index df03b5410b7..ca0a8d83c72 100644
--- a/addons/website_slides/controllers/main.py
+++ b/addons/website_slides/controllers/main.py
@@ -835,8 +835,8 @@ class WebsiteSlides(WebsiteProfile):
if slide.slide_type == 'webpage':
redirect_url += "?enable_editor=1"
if slide.slide_type == "quiz":
- action_id = request.env.ref('website_slides.action_slides_slides').id
- redirect_url = '/web#id=%s&action=%s&model=slide.slide&view_type=form' % (slide.id, action_id)
+ action_id = request.env.ref('website_slides.slide_slide_action').id
+ redirect_url = '/web#id=%s&action=%s&model=slide.slide&view_type=form' %( slide.id, action_id)
return {
'url': redirect_url,
'channel_type': channel.channel_type,
diff --git a/addons/website_slides/data/ir_data.xml b/addons/website_slides/data/ir_data.xml
deleted file mode 100644
index 3b298c1e27d..00000000000
--- a/addons/website_slides/data/ir_data.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<odoo>
- <data noupdate="1">
- <!-- jump to Channel on installation complete -->
- <record id="action_open_channels" model="ir.actions.act_url">
- <field name="name">Channels</field>
- <field name="target">self</field>
- <field name="url" eval="'/slides'"/>
- </record>
- <record id="base.open_menu" model="ir.actions.todo">
- <field name="action_id" ref="action_open_channels"/>
- <field name="state">open</field>
- </record>
- </data>
-</odoo>
diff --git a/addons/website_slides/models/res_config_settings.py b/addons/website_slides/models/res_config_settings.py
index 9425ba89108..fa9e7508afc 100644
--- a/addons/website_slides/models/res_config_settings.py
+++ b/addons/website_slides/models/res_config_settings.py
@@ -8,4 +8,6 @@ class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
website_slide_google_app_key = fields.Char(related='website_id.website_slide_google_app_key', readonly=False)
- module_website_sale_slides = fields.Boolean("Sell courses")
+ module_website_sale_slides = fields.Boolean(string="Sell courses")
+ module_website_slides_forum = fields.Boolean(string="Forum on Courses")
+ module_website_slides_survey = fields.Boolean(string="Certifications")
diff --git a/addons/website_slides/models/slide_question.py b/addons/website_slides/models/slide_question.py
index 9d497190434..98c51585dda 100644
--- a/addons/website_slides/models/slide_question.py
+++ b/addons/website_slides/models/slide_question.py
@@ -14,6 +14,10 @@ class SlideQuestion(models.Model):
question = fields.Char("Question Name", required=True, translate=True)
slide_id = fields.Many2one('slide.slide', string="Slide", required=True)
answer_ids = fields.One2many('slide.answer', 'question_id', string="Answer")
+ # statistics
+ attempts_count = fields.Integer(compute='_compute_statistics', groups='website.group_website_publisher')
+ attempts_avg = fields.Float(compute="_compute_statistics", digits=(6, 2), groups='website.group_website_publisher')
+ done_count = fields.Integer(compute="_compute_statistics", groups='website.group_website_publisher')
@api.constrains('answer_ids')
def _check_only_one_good_answer(self):
@@ -37,6 +41,23 @@ class SlideQuestion(models.Model):
if len(question.answer_ids) < 2:
raise ValidationError(_("A question must at least have two possible answers"))
+ @api.depends('slide_id')
+ def _compute_statistics(self):
+ slide_partners = self.env['slide.slide.partner'].sudo().search([('slide_id', 'in', self.slide_id.ids)])
+ slide_stats = dict((s.slide_id.id, dict({'attempts_count': 0, 'attempts_unique': 0, 'done_count': 0})) for s in slide_partners)
+
+ for slide_partner in slide_partners:
+ slide_stats[slide_partner.slide_id.id]['attempts_count'] += slide_partner.quiz_attempts_count
+ slide_stats[slide_partner.slide_id.id]['attempts_unique'] += 1
+ if slide_partner.completed:
+ slide_stats[slide_partner.slide_id.id]['done_count'] += 1
+
+ for question in self:
+ stats = slide_stats.get(question.slide_id.id)
+ question.attempts_count = stats.get('attempts_count', 0) if stats else 0
+ question.attempts_avg = stats.get('attempts_count', 0) / stats.get('attempts_unique', 1) if stats else 0
+ question.done_count = stats.get('done_count', 0) if stats else 0
+
class SlideAnswer(models.Model):
_name = "slide.answer"
diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py
index 6cb8083536d..2cc0e839616 100644
--- a/addons/website_slides/models/slide_slide.py
+++ b/addons/website_slides/models/slide_slide.py
@@ -116,12 +116,11 @@ class Slide(models.Model):
'slide.slide.partner', string="Subscriber information", compute='_compute_user_membership_id',
help="Subscriber information for the current logged in user")
# Quiz related fields
- question_ids = fields.One2many("slide.question","slide_id", string="Questions")
+ question_ids = fields.One2many("slide.question", "slide_id", string="Questions")
quiz_first_attempt_reward = fields.Integer("First attempt reward", default=10)
quiz_second_attempt_reward = fields.Integer("Second attempt reward", default=7)
quiz_third_attempt_reward = fields.Integer("Third attempt reward", default=5,)
quiz_fourth_attempt_reward = fields.Integer("Reward for every attempt after the third try", default=2)
-
# content
slide_type = fields.Selection([
('infographic', 'Infographic'),
diff --git a/addons/website_slides/views/rating_rating_views.xml b/addons/website_slides/views/rating_rating_views.xml
new file mode 100644
index 00000000000..b3128c56460
--- /dev/null
+++ b/addons/website_slides/views/rating_rating_views.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="rating_rating_view_search_slide_channel" model="ir.ui.view">
+ <field name="name">rating.rating.view.search.slides</field>
+ <field name="model">rating.rating</field>
+ <field name="priority">20</field>
+ <field name="inherit_id" ref="rating.rating_rating_view_search"/>
+ <field name="mode">primary</field>
+ <field name="arch" type="xml">
+ <xpath expr="//filter[@name='resource']" position="after">
+ <filter string="Course" name="groupby_course" context="{'group_by': 'res_name'}"/>
+ </xpath>
+ <xpath expr="/search" position="inside">
+ <filter string="Creation Date" name="rating_last_30_days" date="create_date" default_period="last_30_days"/>
+ <separator/>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="rating_rating_view_graph_slide_channel" model="ir.ui.view">
+ <field name="name">rating.rating.graph</field>
+ <field name="model">rating.rating</field>
+ <field name="priority">20</field>
+ <field name="arch" type="xml">
+ <graph string="Rating Average" type="bar" stacked="False">
+ <field name="res_name" type="row"/>
+ <field name="rating" type="col"/>
+ </graph>
+ </field>
+ </record>
+
+ <record id="rating_rating_action_slide_channel" model="ir.actions.act_window">
+ <field name="name">Courses Rating</field>
+ <field name="res_model">rating.rating</field>
+ <field name="view_mode">kanban,tree,graph,pivot,form</field>
+ <field name="domain">[('consumed', '=', True), ('res_model', '=', 'slide.channel')]</field>
+ <field name="context">{'search_default_groupby_course': 1}</field>
+ <field name="search_view_id" ref="rating_rating_view_search_slide_channel"/>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_empty_folder">
+ There is no rating for those courses at the moment
+ </p>
+ </field>
+ </record>
+
+ <record id="rating_rating_action_slide_channel_report" model="ir.actions.act_window">
+ <field name="name">Courses Rating</field>
+ <field name="res_model">rating.rating</field>
+ <field name="view_mode">graph,tree</field>
+ <field name="domain">[('consumed', '=', True), ('res_model', '=', 'slide.channel')]</field>
+ <field name="context">{}</field>
+ <field name="search_view_id" ref="rating_rating_view_search_slide_channel"/>
+ <field name="view_id" ref="rating_rating_view_graph_slide_channel"/>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_empty_folder">
+ There is no rating for those courses at the moment
+ </p>
+ </field>
+ </record>
+</odoo>
diff --git a/addons/website_slides/views/res_config_settings_views.xml b/addons/website_slides/views/res_config_settings_views.xml
index cc53296289c..6925fbc33b5 100644
--- a/addons/website_slides/views/res_config_settings_views.xml
+++ b/addons/website_slides/views/res_config_settings_views.xml
@@ -5,7 +5,7 @@
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="website.res_config_settings_view_form"/>
<field name="arch" type="xml">
- <div id="google_maps_setting" position="after">
+ <xpath expr="//div[@id='google_maps_setting']" position="after">
<div class="col-12 col-lg-6 o_setting_box" id="slides_install_setting">
<div class="o_setting_right_pane">
<span class="o_form_label">Slides</span>
@@ -26,19 +26,58 @@
</div>
</div>
</div>
- <div class="col-12 col-lg-6"></div>
- <div class="col-12 col-lg-6 o_setting_box" id="slides_install_website_sale">
- <div class="o_setting_left_pane">
- <field name="module_website_sale_slides"/>
- </div>
- <div class="o_setting_right_pane">
- <label for="module_website_sale_slides"/>
- <div class="text-muted">
- Sell courses on your website
+ </xpath>
+ <xpath expr="//div[hasclass('settings')]" position="inside">
+ <div class="app_settings_block" data-string="eLearning" string="eLearning" data-key="website_slides">
+ <h2>eLearning</h2>
+ <div class="row mt16 o_settings_container" id="elearning_selection_settings">
+ <div class="col-12 col-lg-6 o_setting_box" id="elearning_install_forum">
+ <div class="o_setting_left_pane">
+ <field name="module_website_slides_forum"/>
+ </div>
+ <div class="o_setting_right_pane">
+ <label for="module_website_slides_forum"/>
+ <div class="text-muted">
+ Allow Forum on Courses
+ </div>
+ </div>
+ </div>
+ <div class="col-12 col-lg-6"></div>
+ <div class="col-12 col-lg-6 o_setting_box" id="elearning_install_certif">
+ <div class="o_setting_left_pane">
+ <field name="module_website_slides_survey"/>
+ </div>
+ <div class="o_setting_right_pane">
+ <label for="module_website_slides_survey"/>
+ <div class="text-muted">
+ Allow to take certifications
+ </div>
+ </div>
+ </div>
+ <div class="col-12 col-lg-6"></div>
+ <div class="col-12 col-lg-6 o_setting_box" id="elearning_install_sell">
+ <div class="o_setting_left_pane">
+ <field name="module_website_sale_slides"/>
+ </div>
+ <div class="o_setting_right_pane">
+ <label for="module_website_sale_slides"/>
+ <div class="text-muted">
+ Sell courses on your website
+ </div>
+ </div>
</div>
</div>
</div>
- </div>
+ </xpath>
</field>
</record>
+
+ <record id="website_slides_action_settings" model="ir.actions.act_window">
+ <field name="name">Settings</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">res.config.settings</field>
+ <field name="view_mode">form</field>
+ <field name="target">inline</field>
+ <field name="context">{'module': 'website_slides'}</field>
+ </record>
</odoo>
diff --git a/addons/website_slides/views/slide_channel_tag_views.xml b/addons/website_slides/views/slide_channel_tag_views.xml
index ee838298a61..5607dd3d7a0 100644
--- a/addons/website_slides/views/slide_channel_tag_views.xml
+++ b/addons/website_slides/views/slide_channel_tag_views.xml
@@ -5,7 +5,7 @@
<field name="name">slide.channel.tag.view.search</field>
<field name="model">slide.channel.tag</field>
<field name="arch" type="xml">
- <search string="Channel Tags">
+ <search string="Course Tags">
<field name="name"/>
<field name="group_id"/>
</search>
@@ -16,7 +16,7 @@
<field name="name">slide.channel.tag.view.form</field>
<field name="model">slide.channel.tag</field>
<field name="arch" type="xml">
- <form string="Channel Tag">
+ <form string="Course Tag">
<sheet>
<group>
<field name="name"/>
@@ -31,7 +31,7 @@
<field name="name">slide.channel.tag.view.tree</field>
<field name="model">slide.channel.tag</field>
<field name="arch" type="xml">
- <tree string="Channel Tags">
+ <tree string="Course Tags" editable="top">
<field name="sequence" widget="handle"/>
<field name="group_sequence" invisible="1"/>
<field name="name"/>
@@ -41,7 +41,7 @@
</record>
<record id="slide_channel_tag_action" model="ir.actions.act_window">
- <field name="name">Channel Tags</field>
+ <field name="name">Course Tags</field>
<field name="res_model">slide.channel.tag</field>
<field name="view_mode">tree,form</field>
</record>
@@ -51,7 +51,7 @@
<field name="name">slide.channel.tag.group.view.search</field>
<field name="model">slide.channel.tag.group</field>
<field name="arch" type="xml">
- <search string="Channel Tag Groups">
+ <search string="Course Tag Groups">
<field name="name"/>
</search>
</field>
@@ -61,16 +61,12 @@
<field name="name">slide.channel.tag.group.view.form</field>
<field name="model">slide.channel.tag.group</field>
<field name="arch" type="xml">
- <form string="Channel Tag Group">
+ <form string="Course Tag Group">
<sheet>
- <div class="oe_button_box" name="button_box">
- <button class="oe_stat_button" name="website_publish_button"
- type="object" icon="fa-globe">
- <field name="is_published" widget="website_button" help="Makes a menu entry in main navigation of Slides, allowing to filter on its tags directly from main navigation."/>
- </button>
- </div>
<group>
<field name="name"/>
+ <field name="is_published" string="Menu entry"/>
+ <field name="tag_ids"/>
</group>
</sheet>
</form>
@@ -81,7 +77,7 @@
<field name="name">slide.channel.tag.group.view.tree</field>
<field name="model">slide.channel.tag.group</field>
<field name="arch" type="xml">
- <tree string="Channel Tag Groups">
+ <tree string="Course Tag Groups">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="is_published" string="Menu Entry"/>
@@ -90,7 +86,7 @@
</record>
<record id="slide_channel_tag_group_action" model="ir.actions.act_window">
- <field name="name">Channel Tag Groups</field>
+ <field name="name">Course Tags</field>
<field name="res_model">slide.channel.tag.group</field>
<field name="view_mode">tree,form</field>
</record>
diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml
index 7cdf9e63d96..edd662541e5 100644
--- a/addons/website_slides/views/slide_channel_views.xml
+++ b/addons/website_slides/views/slide_channel_views.xml
@@ -17,6 +17,20 @@
</field>
</record>
+ <record model="ir.ui.view" id="slide_category_view_from_fchannel">
+ <field name="name">slide.category.form</field>
+ <field name="model">slide.category</field>
+ <field name="arch" type="xml">
+ <form string="Category">
+ <sheet>
+ <group>
+ <field name="name"/>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
<record id="view_slides_category_tree" model="ir.ui.view">
<field name="name">slide.category.tree</field>
<field name="model">slide.category</field>
@@ -74,7 +88,7 @@
<field name="active" invisible="1"/>
<field name="enroll" widget="radio" options="{'horizontal': true}"/>
<field name="category_ids" widget="many2many_tags" placeholder="Categories"
- context="{'default_channel_id': active_id}"
+ context="{'default_channel_id': active_id, 'form_view_ref': 'website_slides.slide_category_view_from_fchannel'}"
domain="[('channel_id','=', active_id)]"/>
<field name="tag_ids" widget="many2many_tags" placeholder="Tags"/>
<field name="user_id"/>
@@ -151,22 +165,39 @@
</record>
<record id="slide_channel_view_tree" model="ir.ui.view">
- <field name="name">slide.channel.tree</field>
+ <field name="name">slide.channel.view.tree</field>
<field name="model">slide.channel</field>
<field name="arch" type="xml">
- <tree string="Channel">
+ <tree string="Courses">
<field name="sequence" widget="handle"/>
<field name="name"/>
+ <field name="channel_type"/>
+ <field name="visibility"/>
+ <field name="enroll"/>
+ <field name="user_id"/>
<field name="website_id" groups="website.group_multi_website"/>
<field name="active" invisible="1"/>
- <field name="enroll"/>
- <field name="promote_strategy"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="slide_channel_view_tree_report" model="ir.ui.view">
+ <field name="name">slide.channel.view.tree.report</field>
+ <field name="model">slide.channel</field>
+ <field name="priority">20</field>
+ <field name="arch" type="xml">
+ <tree string="Courses" create="false" default_order="total_views desc">
+ <field name="name"/>
+ <field name="total_views"/>
+ <field name="members_count"/>
+ <field name="total_votes"/>
+ <field name="rating_avg_stars"/>
</tree>
</field>
</record>
<record id="slide_channel_view_search" model="ir.ui.view">
- <field name="name">slide.channel.search</field>
+ <field name="name">slide.channel.view.search</field>
<field name="model">slide.channel</field>
<field name="arch" type="xml">
<search string="Courses">
@@ -176,14 +207,37 @@
</field>
</record>
- <record id="action_slide_channels" model="ir.actions.act_window">
- <field name="name">Channels</field>
+ <record id="slide_channel_view_graph" model="ir.ui.view">
+ <field name="name">slide.channel.view.graph</field>
+ <field name="model">slide.channel</field>
+ <field name="arch" type="xml">
+ <graph string="Courses" type="bar">
+ <field name="name"/>
+ <field name="total_views" type="measure"/>
+ </graph>
+ </field>
+ </record>
+
+ <record id="slide_channel_action_overview" model="ir.actions.act_window">
+ <field name="name">eLearning Overview</field>
<field name="res_model">slide.channel</field>
<field name="view_mode">tree,form</field>
- <field name="search_view_id" ref="website_slides.slide_channel_view_search"/>
+ <field name="view_id" ref="slide_channel_view_tree"/>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ Create a course
+ </p>
+ </field>
+ </record>
+
+ <record id="slide_channel_action_report" model="ir.actions.act_window">
+ <field name="name">Courses</field>
+ <field name="res_model">slide.channel</field>
+ <field name="view_mode">tree,graph,form</field>
+ <field name="view_id" ref="slide_channel_view_tree_report"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
- Create a channel
+ Create a course
</p>
</field>
</record>
diff --git a/addons/website_slides/views/slide_question_views.xml b/addons/website_slides/views/slide_question_views.xml
new file mode 100644
index 00000000000..b89be114c96
--- /dev/null
+++ b/addons/website_slides/views/slide_question_views.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="slide_question_view_form" model="ir.ui.view">
+ <field name="name">slide.question.view.form</field>
+ <field name="model">slide.question</field>
+ <field name="arch" type="xml">
+ <form string="Quiz">
+ <sheet>
+ <div class="oe_edit_only">
+ <label for="question" string="Question Name"/>
+ </div>
+ <h1>
+ <field name="question" default_focus="1" placeholder="Name"/>
+ </h1>
+ <field name="answer_ids">
+ <tree editable="bottom" create="true" delete="true">
+ <field name="text_value"/>
+ <field name="is_correct"/>
+ </tree>
+ </field>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="slide_question_view_tree" model="ir.ui.view">
+ <field name="name">slide.question.view.tree</field>
+ <field name="model">slide.question</field>
+ <field name="arch" type="xml">
+ <tree string="Quizzes">
+ <field name="sequence" widget="handle"/>
+ <field name="question"/>
+ <field name="slide_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="slide_question_view_tree_report" model="ir.ui.view">
+ <field name="name">slide.question.view.tree.report</field>
+ <field name="model">slide.question</field>
+ <field name="priority">20</field>
+ <field name="arch" type="xml">
+ <tree string="Quizzes">
+ <field name="sequence" widget="handle"/>
+ <field name="question"/>
+ <field name="slide_id"/>
+ <field name="attempts_count"/>
+ <field name="attempts_avg"/>
+ <field name="done_count"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="slide_question_view_search" model="ir.ui.view">
+ <field name="name">slide.question.view.search</field>
+ <field name="model">slide.question</field>
+ <field name="arch" type="xml">
+ <search string="Quizzes">
+ <field name="question"/>
+ <field name="slide_id"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="slide_question_action_report" model="ir.actions.act_window">
+ <field name="name">Quizzes</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">slide.question</field>
+ <field name="view_mode">tree,form</field>
+ <field name="view_id" ref="slide_question_view_tree_report"/>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ There is no quiz
+ </p>
+ <p>
+ Add quizzes at the end of your lessons to evaluate what your students understood.
+ </p>
+ </field>
+ </record>
+</odoo>
diff --git a/addons/website_slides/views/slide_slide_views.xml b/addons/website_slides/views/slide_slide_views.xml
index e380ba4abb8..2be7ac9a8d1 100644
--- a/addons/website_slides/views/slide_slide_views.xml
+++ b/addons/website_slides/views/slide_slide_views.xml
@@ -20,14 +20,14 @@
<field name="name">slide.tag.tree</field>
<field name="model">slide.tag</field>
<field name="arch" type="xml">
- <tree string="Tags">
+ <tree string="Tags" editable="bottom">
<field name="name"/>
</tree>
</field>
</record>
<record id="action_slide_tag" model="ir.actions.act_window">
- <field name="name">Tags</field>
+ <field name="name">Content Tags</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">slide.tag</field>
<field name="view_mode">tree,form</field>
@@ -38,7 +38,7 @@
<field name="name">slide.slide.form</field>
<field name="model">slide.slide</field>
<field name="arch" type="xml">
- <form string="Slide">
+ <form string="Lesson">
<sheet>
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<div class="oe_button_box" name="button_box">
@@ -141,34 +141,11 @@
</field>
</record>
- <record id="view_slide_question_form" model="ir.ui.view">
- <field name="name">slide.question.form</field>
- <field name="model">slide.question</field>
- <field name="arch" type="xml">
- <form string="Slide">
- <sheet>
- <div class="oe_edit_only">
- <label for="question" string="Question Name"/>
- </div>
- <h1>
- <field name="question" default_focus="1" placeholder="Name"/>
- </h1>
- <field name="answer_ids">
- <tree editable="bottom" create="true" delete="true">
- <field name="text_value"/>
- <field name="is_correct"/>
- </tree>
- </field>
- </sheet>
- </form>
- </field>
- </record>
-
<record id="view_slide_slide_tree" model="ir.ui.view">
<field name="name">slide.slide.tree</field>
<field name="model">slide.slide</field>
<field name="arch" type="xml">
- <tree string="Slides">
+ <tree string="Contents">
<field name="name"/>
<field name="website_id" groups="website.group_multi_website"/>
<field name="active" invisible="1"/>
@@ -176,6 +153,10 @@
<field name="channel_id"/>
<field name="category_id"/>
<field name="date_published"/>
+ <field name="slide_views"/>
+ <field name="public_views"/>
+ <field name="total_views"/>
+ <field name="completion_time"/>
</tree>
</field>
</record>
@@ -184,42 +165,50 @@
<field name="name">slide.slide.filter</field>
<field name="model">slide.slide</field>
<field name="arch" type="xml">
- <search string="Search Slides">
+ <search string="Search Contents">
<field name="name"/>
<filter name="published" string="Published" domain="[('is_published', '=', True)]"/>
<filter name="not_published" string="Waiting for validation" domain="[('is_published', '=', False)]"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active','=',False)]"/>
<group expand="0" string="Group By">
- <filter string="Channel" name="channel" domain="[]" context="{'group_by': 'channel_id'}"/>
- <filter string="Category" name="category" domain="[]" context="{'group_by': 'category_id'}"/>
- <filter string="Type" name="type" domain="[]" context="{'group_by': 'slide_type'}"/>
+ <filter string="Channel" name="groupby_channel" domain="[]" context="{'group_by': 'channel_id'}"/>
+ <filter string="Category" name="groupby_category" domain="[]" context="{'group_by': 'category_id'}"/>
+ <filter string="Type" name="groupby_type" domain="[]" context="{'group_by': 'slide_type'}"/>
</group>
</search>
</field>
</record>
- <record id="view_slide_slide_graph" model="ir.ui.view">
- <field name="name">slide.slide.graph</field>
+ <record id="slide_slide_view_graph" model="ir.ui.view">
+ <field name="name">slide.slide.view.graph</field>
<field name="model">slide.slide</field>
<field name="arch" type="xml">
- <graph string="Graph of Slides">
- <field name="date_published" interval="month" type="col"/>
+ <graph string="Graph of Contents" stacked="False">
<field name="channel_id" type="row"/>
+ <field name="total_views" type="measure"/>
</graph>
</field>
</record>
- <record id="action_slides_slides" model="ir.actions.act_window">
- <field name="name">Slides</field>
+ <record id="slide_slide_action" model="ir.actions.act_window">
+ <field name="name">Contents</field>
<field name="res_model">slide.slide</field>
- <field name="view_mode">tree,form,graph</field>
- <field name="context">{'search_default_channel': 1}</field>
+ <field name="view_mode">tree,form</field>
+ <field name="context">{'search_default_groupby_channel': 1}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
- Add a new slide
+ Add a new lesson
</p>
</field>
</record>
+
+ <record id="slide_slide_action_report" model="ir.actions.act_window">
+ <field name="name">Contents</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">slide.slide</field>
+ <field name="view_mode">graph,tree,form</field>
+ <field name="view_id" ref="slide_slide_view_graph"/>
+ </record>
</data>
</odoo> \ No newline at end of file
diff --git a/addons/website_slides/views/website_slides_menu_views.xml b/addons/website_slides/views/website_slides_menu_views.xml
index bf558fd0830..fb69ddee195 100644
--- a/addons/website_slides/views/website_slides_menu_views.xml
+++ b/addons/website_slides/views/website_slides_menu_views.xml
@@ -1,36 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
- <data>
- <menuitem name="Slides"
- id="menu_website_slides_root"
- sequence="32"
- parent="website.menu_website_configuration"
- groups="website.group_website_designer"
- action="action_slides_slides"/>
+ <menuitem name="eLearning"
+ id="website_slides_menu_root"
+ web_icon="website_slides,static/description/icon.png"
+ groups="website.group_website_publisher"
+ action="slide_channel_action_overview"/>
- <menuitem name="Slides"
- id="menu_website_slides_root_global"
- sequence="140"
- parent="website.menu_website_global_configuration"
- groups="website.group_website_designer"/>
+ <!-- Main top menu elements -->
+ <menuitem name="Courses"
+ id="website_slides_menu_courses"
+ parent="website_slides_menu_root"
+ sequence="1"/>
+ <menuitem name="Reporting"
+ id="website_slides_menu_report"
+ parent="website_slides_menu_root"
+ sequence="9"/>
+ <menuitem name="Configuration"
+ id="website_slides_menu_configuration"
+ parent="website_slides_menu_root"
+ sequence="99"/>
+
+ <!-- Courses sub-menu -->
+ <menuitem name="Courses"
+ id="website_slides_menu_courses_courses"
+ parent="website_slides_menu_courses"
+ sequence="1"
+ action="slide_channel_action_overview"/>
+ <menuitem name="Contents"
+ id="website_slides_menu_courses_content"
+ parent="website_slides_menu_courses"
+ sequence="2"
+ action="slide_slide_action"/>
+ <menuitem name="Reviews"
+ id="website_slides_menu_courses_reviews"
+ parent="website_slides_menu_courses"
+ sequence="3"
+ action="rating_rating_action_slide_channel"/>
- <menuitem action="website_slides.action_slide_channels" id="menu_action_slide_channels_global"
- parent="menu_website_slides_root_global" sequence="1"/>
+ <!-- Reporting sub-menu -->
+ <menuitem name="Courses"
+ id="website_slides_menu_report_courses"
+ parent="website_slides_menu_report"
+ sequence="1"
+ action="slide_channel_action_report"/>
+ <menuitem name="Contents"
+ id="website_slides_menu_report_contents"
+ parent="website_slides_menu_report"
+ sequence="2"
+ action="slide_slide_action_report"/>
+ <menuitem name="Reviews"
+ id="website_slides_menu_report_reviews"
+ parent="website_slides_menu_report"
+ sequence="6"
+ action="rating_rating_action_slide_channel_report"/>
+ <menuitem name="Quizzes"
+ id="website_slides_menu_report_quizzes"
+ parent="website_slides_menu_report"
+ sequence="7"
+ action="slide_question_action_report"/>
- <menuitem action="website_slides.action_ir_slide_category" id="menu_action_ir_slide_category_global" parent="menu_website_slides_root_global" sequence="2"/>
+ <!-- Settings sub-menu -->
+ <menuitem name="Settings"
+ id="website_slides_menu_config_settings"
+ parent="website_slides_menu_configuration"
+ sequence="1"
+ action="website_slides_action_settings"
+ groups="base.group_system"/>
+ <menuitem name="Course Tags"
+ id="website_slides_menu_config_course_tags"
+ parent="website_slides_menu_configuration"
+ sequence="2"
+ action="slide_channel_tag_group_action"/>
+ <menuitem name="Content Tags"
+ id="website_slides_menu_config_content_tags"
+ parent="website_slides_menu_configuration"
+ sequence="3"
+ action="action_slide_tag"/>
- <menuitem action="website_slides.action_slide_tag" id="menu_slide_tag" parent="menu_website_slides_root_global" sequence="10" groups="base.group_no_one"/>
-
- <!-- Channel tags -->
- <menuitem id="slide_channel_tag_menu"
- action="website_slides.slide_channel_tag_action"
- parent="menu_website_slides_root_global"
- sequence="20"
- groups="base.group_no_one"/>
- <menuitem id="slide_channel_tag_group_menu"
- action="website_slides.slide_channel_tag_group_action"
- parent="menu_website_slides_root_global"
- sequence="21"
- groups="base.group_no_one"/>
- </data>
</odoo> \ No newline at end of file
diff --git a/addons/website_slides/views/website_slides_templates_utils.xml b/addons/website_slides/views/website_slides_templates_utils.xml
index 580b54023cb..80368c76e09 100644
--- a/addons/website_slides/views/website_slides_templates_utils.xml
+++ b/addons/website_slides/views/website_slides_templates_utils.xml
@@ -37,7 +37,7 @@
<!-- Website edit page -->
<template id="slide_edit_options" inherit_id="website.user_navbar" name="Edit Slide Options">
<xpath expr="//li[@id='edit-page-menu']" position="after">
- <t t-if="main_object._name == 'slide.slide'" t-set="action" t-value="'website_slides.action_slides_slides'" />
+ <t t-if="main_object._name == 'slide.slide'" t-set="action" t-value="'website_slides.slide_slide_action'"/>
</xpath>
</template>