Slides

website_slides
REPOSITORY
REPOSITORYOCA/website
GIT
GIThttps://github.com/OCA/website.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/website/tree/8.0/website_slides
VERSION
VERSION 2.0.1
CATEGORY
CATEGORYWebsite
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Odoo SA, Incaser Informatica - Sergio Teruel
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Odoo SA, Incaser Informatica - Sergio Teruel
COMMITTERS
COMMITTERSHolger Brunn, Pedro M. Baeza, GitHub, Jairo Llopis, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate, sergio-incaser, Andhitia Rama
WEBSITE
WEBSITEhttps://github.com/OCA/website
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - website
    - web
    - base
    - share
    - mail
    - base_setup
    - web_kanban
    - website_mail
    - email_template
    - marketing
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (30)
XML IDNameModelTypeStatus
assets_frontend Slide ir.ui.view qweb Inherits website.assets_frontend
channel_not_found Private Presentation ir.ui.view qweb New
channels Channels ir.ui.view qweb New
embed_slide Embedded Slide Page ir.ui.view qweb New
embed_slide_forbidden Forbidden Embedded Slide ir.ui.view qweb New
home Odoo Slides ir.ui.view qweb New
opt_subscription_on_channels Subscription ir.ui.view qweb Inherits website_slides.channels
pdf_js_lib PDF JS Library ir.ui.view qweb New
related_slides Related Slide ir.ui.view qweb New
slide_detail_view Slide Detailed View ir.ui.view qweb New
slide_footer Footer Slides Link ir.ui.view qweb Inherits website.footer_default
slide_social_email Share by Email ir.ui.view qweb New
slide_social_embed Share on Your Website ir.ui.view qweb New
slide_social_media Share on Social Networks ir.ui.view qweb New
slides_channel_header Slides Channel Header ir.ui.view qweb New
slides_grid_view Slides (Grid View) ir.ui.view qweb New
slides_search Searching Slides ir.ui.view qweb New
slides_share Slides Media Share ir.ui.view qweb New
view_slide_channel_form slide.channel.form slide.channel form New
view_slide_channel_tree slide.channel.tree slide.channel tree New
view_slide_slide_form slide.slide.form slide.slide form New
view_slide_slide_graph slide.slide.graph slide.slide graph New
view_slide_slide_search slide.slide.filter slide.slide search New
view_slide_slide_tree slide.slide.tree slide.slide tree New
view_slide_tag_form slide.tag.form slide.tag form New
view_slide_tag_tree slide.tag.tree slide.tag tree New
view_slides_category_form slide.category.form slide.category form New
view_slides_category_tree slide.category.tree slide.category tree New
view_website_config_settings Website livechat settings website.config.settings xpath Inherits website.view_website_config_settings
website_slides.slide_embed_assets Website slides embed assets ir.ui.view qweb New
Models touched (7)

New fields (9)
  • channel_id Many2one → slide.channel
    ondelete='cascade' required=True string='Channel' args: 'slide.channel'
  • name Char
    required=True translate=True args: 'Name'
  • nbr_documents Integer
    compute='_count_presentations' store=True args: 'Number of Documents'
  • nbr_infographics Integer
    compute='_count_presentations' store=True args: 'Number of Infographics'
  • nbr_presentations Integer
    compute='_count_presentations' store=True args: 'Number of Presentations'
  • nbr_videos Integer
    compute='_count_presentations' store=True args: 'Number of Videos'
  • sequence Integer
    default=10 help='Display order'
  • slide_ids One2many → slide.slide
    string='Slides' args: 'slide.slide', 'category_id'
  • total Integer
    compute='_count_presentations' store=True
Public methods (0)

No public methods.

New fields (22)
  • access_error_msg Html
    default='<p>This channel is private and its content is restricted to some users.</p>' help='Message to display when not accessible due to access rights' translate=True args: 'Error Message'
  • can_see Boolean
    compute='_compute_access' search='_search_can_see' args: 'Can See'
  • can_see_full Boolean
    compute='_compute_access' args: 'Full Access'
  • can_upload Boolean
    compute='_compute_access' args: 'Can Upload'
  • category_ids One2many → slide.category
    string='Categories' args: 'slide.category', 'channel_id'
  • custom_slide_id Many2one → slide.slide
    string='Slide to Promote' args: 'slide.slide'
  • description Html
    translate=True args: 'Description'
  • group_ids Many2many → res.groups
    help='Groups allowed to see presentations in this channel' string='Channel Groups' args: 'res.groups', 'rel_channel_groups', 'channel_id', 'group_id'
  • name Char
    required=True translate=True args: 'Name'
  • nbr_documents Integer
    compute='_count_presentations' store=True args: 'Number of Documents'
  • nbr_infographics Integer
    compute='_count_presentations' store=True args: 'Number of Infographics'
  • nbr_presentations Integer
    compute='_count_presentations' store=True args: 'Number of Presentations'
  • nbr_videos Integer
    compute='_count_presentations' store=True args: 'Number of Videos'
  • promote_strategy Selection
    default='most_voted' required=True string='Featuring Policy' args: [('none', 'No Featured Presentation'), ('latest', 'Latest Published'), ('most_voted', 'Most Voted'), ('most_viewed', 'Most Viewed'), ('custom', 'Featured Presentation')]
  • promoted_slide_id Many2one → slide.slide
    compute='_compute_promoted_slide_id' store=True string='Featured Slide' args: 'slide.slide'
  • publish_template_id Many2one → email.template
    default=<expr> help='Email template to send slide publication through email' string='Published Template' args: 'email.template'
  • sequence Integer
    default=10 help='Display order'
  • share_template_id Many2one → email.template
    default=<expr> help='Email template used when sharing a slide' string='Shared Template' args: 'email.template'
  • slide_ids One2many → slide.slide
    string='Slides' args: 'slide.slide', 'channel_id'
  • total Integer
    compute='_count_presentations' store=True
  • upload_group_ids Many2many → res.groups
    help='Groups allowed to upload presentations in this channel. If void, every user can upload.' string='Upload Groups' args: 'res.groups', 'rel_upload_groups', 'channel_id', 'group_id'
  • visibility Selection
    default='public' required=True args: [('public', 'Public'), ('private', 'Private'), ('partial', 'Show channel but restrict presentations')]
Public methods (1)
  • change_visibility(self)
    @api.onchange('visibility')

New fields (3)
  • count_views Integer
    default=1 args: '# Views'
  • slide_id Many2one → slide.slide
    index=True required=True string='Presentation' args: 'slide.slide'
  • url Char
    required=True args: 'Third Party Website URL'
Public methods (1)
  • add_embed_url(self, slide_id, url)

New fields (24)
  • category_id Many2one → slide.category
    domain="[('channel_id', '=', channel_id)]" string='Category' args: 'slide.category'
  • channel_id Many2one → slide.channel
    required=True string='Channel' args: 'slide.channel'
  • datas Binary
    args: 'Content'
  • date_published Datetime
    args: 'Publish Date'
  • description Text
    translate=True args: 'Description'
  • dislikes Integer
    args: 'Dislikes'
  • document_id Char
    help='Youtube or Google Document ID' args: 'Document ID'
  • download_security Selection
    default='user' required=True string='Download Security' args: [('none', 'No One'), ('user', 'Authentified Users Only'), ('public', 'Everyone')]
  • embed_code Text
    compute='_get_embed_code' readonly=True args: 'Embed Code'
  • embed_views Integer
    args: '# of Embedded Views'
  • embedcount_ids One2many → slide.embed
    string='Embed Count' args: 'slide.embed', 'slide_id'
  • image Binary
    attachment=True args: 'Image'
  • image_medium Binary
    attachment=True compute='_get_image' store=True args: 'Medium'
  • image_thumb Binary
    attachment=True compute='_get_image' store=True args: 'Thumbnail'
  • index_content Text
    args: 'Transcript'
  • likes Integer
    args: 'Likes'
  • mime_type Char
    args: 'Mime-type'
  • name Char
    required=True translate=True args: 'Title'
  • slide_type Selection
    default='document' help='Document type will be set automatically depending on file type, height and width.' required=True string='Type' args: [('infographic', 'Infographic'), ('presentation', 'Presentation'), ('document', 'Document'), ('video', 'Video')]
  • slide_views Integer
    args: '# of Website Views'
  • tag_ids Many2many → slide.tag
    string='Tags' args: 'slide.tag', 'rel_slide_tag', 'slide_id', 'tag_id'
  • total_views Integer
    compute='_compute_total' default='0' store=True args: 'Total # Views'
  • url Char
    help='Youtube or Google Document URL' args: 'Document URL'
  • website_message_ids One2many → mail.message
    domain=<expr> help='Website communication history' string='Website Messages' args: 'mail.message', 'res_id'
Public methods (7)
  • check_field_access_rights(self, operation, fields)
    @api.model
    As per channel access configuration (visibility) - public ==> no restriction on slides access - private ==> restrict all slides of channel based on access group defined on channel group_ids field - partial ==> show channel, but presentations based on groups means any user can see channel but not slide's content. For private: implement using record rule For partial: user can see channel, but channel gridview have slide detail so we have to implement partial field access mechanism for public user so he can have access of promotional field (name, view_count) of slides,but not all fields like data (actual pdf content) all fields should be accessible only for user group defined on channel group_ids
  • create(self, values)
    @api.model
  • get_most_viewed_slides(self, limit=20)
  • get_related_slides(self, limit=20)
  • on_change_url(self)
    @api.onchange('url')
  • send_share_email(self, email)
    @api.one
  • write(self, values)
    @api.multi

New fields (1)
  • name Char
    required=True args: 'Name'
Public methods (0)

No public methods.

New fields (1)
  • website_slide_google_app_key Char
    string='Google Doc Key'
Public methods (2)
  • get_default_website_slide_google_app_key(self, fields)
    @api.model
  • set_website_slide_google_app_key(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • open_website_url(self, cr, uid, ids, context=None)