[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>
This commit is contained in:
Jérémy Hennecart
2019-08-05 08:40:33 +00:00
committed by Thibault Delavallée
co-authored by Thibault Delavallée
parent ad9d7c5c06
commit 4587e6a396
14 changed files with 397 additions and 127 deletions
+3 -2
View File
@@ -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',
+2 -2
View File
@@ -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,
-15
View File
@@ -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>
@@ -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")
@@ -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"
+1 -2
View File
@@ -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'),
@@ -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>
@@ -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>
@@ -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>
@@ -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 channel
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 course
</p>
</field>
</record>
@@ -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>
@@ -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>
@@ -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>
@@ -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>