[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.
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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')
|
||||
@@ -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
|
||||
|
||||
|
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user