diff options
| author | Thibault Delavallée <tde@odoo.com> | 2019-02-01 13:39:34 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2019-02-11 09:55:05 +0000 |
| commit | cbc2de0eb6227f8e86815d403cd7ce9bc55a49b6 (patch) | |
| tree | 9092e39a2db74d2529666567915392af7e2e9822 | |
| parent | 47bb7ef7968cb3c5c11f767df06fcf09333a2b13 (diff) | |
[IMP] website_slides: add tags and tag groups on channel
Purpose is to be able to filter, search and categorize channels. Notably
with eLearning in mind there will be more channels as a channel will also be
used to hold lessons.
For that purpose we add a model of tag linked to channels. Those tags are
organized by groups in order to be able to display them using a menu or
a small hierarchy of tags. Displaying a tag group as a specific navigation
element is controlled by a specific field.
Those models will be used to display a new and improved home page for
channels / courses.
This commit is linked to task ID 1936153 and PR #30985.
| -rw-r--r-- | addons/website_slides/__manifest__.py | 1 | ||||
| -rw-r--r-- | addons/website_slides/data/slide_data.xml | 6 | ||||
| -rw-r--r-- | addons/website_slides/models/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_slides/models/slide_channel.py | 3 | ||||
| -rw-r--r-- | addons/website_slides/models/slide_channel_tag.py | 31 | ||||
| -rw-r--r-- | addons/website_slides/security/ir.model.access.csv | 4 | ||||
| -rw-r--r-- | addons/website_slides/views/slide_channel_tag_views.xml | 96 | ||||
| -rw-r--r-- | addons/website_slides/views/slide_channel_views.xml | 1 | ||||
| -rw-r--r-- | addons/website_slides/views/website_slides_menu_views.xml | 11 |
9 files changed, 154 insertions, 0 deletions
diff --git a/addons/website_slides/__manifest__.py b/addons/website_slides/__manifest__.py index b24100651b2..7ebfc125132 100644 --- a/addons/website_slides/__manifest__.py +++ b/addons/website_slides/__manifest__.py @@ -29,6 +29,7 @@ Share and Publish Videos, Presentations and Documents' 'views/website_slides_embed_templates.xml', 'views/slide_slide_views.xml', 'views/slide_channel_views.xml', + 'views/slide_channel_tag_views.xml', 'views/website_slides_menu_views.xml', 'data/website_slides_ir_data.xml', 'data/mail_data.xml', diff --git a/addons/website_slides/data/slide_data.xml b/addons/website_slides/data/slide_data.xml index 164ba5957ef..cb2eda5bb3d 100644 --- a/addons/website_slides/data/slide_data.xml +++ b/addons/website_slides/data/slide_data.xml @@ -15,5 +15,11 @@ <field name="visibility">invite</field> <field name="description">Used to publish slides in partner network privately.</field> </record> + + <record id="slide_channel_tag_group_data_other" model="slide.channel.tag.group"> + <field name="name">Tags</field> + <field name="sequence">20</field> + <field name="website_published" eval="True"/> + </record> </data> </odoo> diff --git a/addons/website_slides/models/__init__.py b/addons/website_slides/models/__init__.py index c0bc050e663..3f6a3e49ddf 100644 --- a/addons/website_slides/models/__init__.py +++ b/addons/website_slides/models/__init__.py @@ -3,5 +3,6 @@ from . import gamification_challenge from . import slide_slide from . import slide_channel +from . import slide_channel_tag from . import res_config_settings from . import website diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index 2c0d56d7b17..ec68cc3f46e 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -34,6 +34,9 @@ class Channel(models.Model): active = fields.Boolean(default=True) description = fields.Html('Description', translate=html_translate, sanitize_attributes=False) sequence = fields.Integer(default=10, help='Display order') + tag_ids = fields.Many2many( + 'slide.channel.tag', 'slide_channel_tag_rel', 'channel_id', 'tag_id', + string='Tags', help='Used to categorize and filter displayed channels/courses') category_ids = fields.One2many('slide.category', 'channel_id', string="Categories") # slides: promote, statistics slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides") diff --git a/addons/website_slides/models/slide_channel_tag.py b/addons/website_slides/models/slide_channel_tag.py new file mode 100644 index 00000000000..174ec347c7f --- /dev/null +++ b/addons/website_slides/models/slide_channel_tag.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class SlideChannelTagGroup(models.Model): + _name = 'slide.channel.tag.group' + _description = 'Channel/Course tags' + _order = 'sequence asc' + + name = fields.Char('Name', required=True, translate=True) + sequence = fields.Integer('Sequence', default=10, index=True, required=True) + tag_ids = fields.One2many('slide.channel.tag', 'group_id', string='Tags') + website_published = fields.Boolean( + 'Menu entry', default=True, + help='Makes a menu entry in main navigation of Slides, allowing to filter on its tags directly from main navigation.') + + +class SlideChannelTag(models.Model): + _name = 'slide.channel.tag' + _description = 'Channel/Course tags' + _order = 'group_sequence asc, sequence asc' + + name = fields.Char('Name', required=True, translate=True) + sequence = fields.Integer('Sequence', default=10, index=True, required=True) + group_id = fields.Many2one('slide.channel.tag.group', string='Group', index=True, required=True) + group_sequence = fields.Integer( + 'Group sequence', related='group_id.sequence', + index=True, readonly=True, store=True) + channel_ids = fields.Many2many('slide.channel.tag', 'slide_channel_tag_rel', 'tag_id', 'channel_id', string='Channels') diff --git a/addons/website_slides/security/ir.model.access.csv b/addons/website_slides/security/ir.model.access.csv index 046ea6582e3..6f12b3236c7 100644 --- a/addons/website_slides/security/ir.model.access.csv +++ b/addons/website_slides/security/ir.model.access.csv @@ -5,6 +5,10 @@ access_slide_slide_partner_all,slide.slide.partner.all,model_slide_slide_partner access_slide_slide_partner_system,slide.slide.partner.system,model_slide_slide_partner,website.group_website_publisher,1,1,1,1 access_slide_tag_all,slide.tag.all,model_slide_tag,,1,0,0,0 access_slide_tag_publisher,slide.tag.publisher,model_slide_tag,website.group_website_publisher,1,1,1,1 +access_slide_channel_tag_all,slide.channel.tag.all,model_slide_channel_tag,,1,0,0,0 +access_slide_channel_tag_user,slide.channel.tag.user,model_slide_channel_tag,website.group_website_publisher,1,1,1,1 +access_slide_channel_tag_group_all,slide.channel.tag.group.all,model_slide_channel_tag_group,,1,0,0,0 +access_slide_channel_tag_group_user,slide.channel.tag.group.user,model_slide_channel_tag_group,website.group_website_publisher,1,1,1,1 access_slide_channel_all,slide.channel.all,model_slide_channel,,1,0,0,0 access_slide_channel_publisher,slide.channel.publisher,model_slide_channel,website.group_website_publisher,1,1,1,1 access_slide_channel_partners_all,slide.channel.users.all,model_slide_channel_partner,,0,0,0,0 diff --git a/addons/website_slides/views/slide_channel_tag_views.xml b/addons/website_slides/views/slide_channel_tag_views.xml new file mode 100644 index 00000000000..4a7eaf48f99 --- /dev/null +++ b/addons/website_slides/views/slide_channel_tag_views.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo><data> + <!-- SLIDE.CHANNEL.TAG --> + <record id="slide_channel_tag_view_search" model="ir.ui.view"> + <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"> + <field name="name"/> + <field name="group_id"/> + </search> + </field> + </record> + + <record id="slide_channel_tag_view_form" model="ir.ui.view"> + <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"> + <sheet> + <group> + <field name="name"/> + <field name="group_id"/> + </group> + </sheet> + </form> + </field> + </record> + + <record id="slide_channel_tag_view_tree" model="ir.ui.view"> + <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"> + <field name="sequence" widget="handle"/> + <field name="group_sequence" invisible="1"/> + <field name="name"/> + <field name="group_id"/> + </tree> + </field> + </record> + + <record id="slide_channel_tag_action" model="ir.actions.act_window"> + <field name="name">Channel Tags</field> + <field name="res_model">slide.channel.tag</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + </record> + + <!-- SLIDE.CHANNEL.TAG.GROUP --> + <record id="slide_channel_tag_group_view_search" model="ir.ui.view"> + <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"> + <field name="name"/> + </search> + </field> + </record> + + <record id="slide_channel_tag_group_view_form" model="ir.ui.view"> + <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"> + <sheet> + <group> + <field name="name"/> + <field name="website_published"/> + </group> + </sheet> + </form> + </field> + </record> + + <record id="slide_channel_tag_group_view_tree" model="ir.ui.view"> + <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"> + <field name="sequence" widget="handle"/> + <field name="name"/> + <field name="website_published"/> + </tree> + </field> + </record> + + <record id="slide_channel_tag_group_action" model="ir.actions.act_window"> + <field name="name">Channel Tag Groups</field> + <field name="res_model">slide.channel.tag.group</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + </record> + + </data> +</odoo> diff --git a/addons/website_slides/views/slide_channel_views.xml b/addons/website_slides/views/slide_channel_views.xml index ba317e74375..bb044e82723 100644 --- a/addons/website_slides/views/slide_channel_views.xml +++ b/addons/website_slides/views/slide_channel_views.xml @@ -67,6 +67,7 @@ </div> <field name="category_ids" widget="many2many_tags" placeholder="Categories" context="{'default_channel_id': active_id}" domain="[('channel_id','=', active_id)]"/> + <field name="tag_ids" widget="many2many_tags" placeholder="Tags"/> <notebook colspan="4"> <page string="General"> <group> diff --git a/addons/website_slides/views/website_slides_menu_views.xml b/addons/website_slides/views/website_slides_menu_views.xml index f2bbf21c25c..bf558fd0830 100644 --- a/addons/website_slides/views/website_slides_menu_views.xml +++ b/addons/website_slides/views/website_slides_menu_views.xml @@ -21,5 +21,16 @@ <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 |
