TIP: You can type at any time to perform a new search.
Slides
website_slides · OCA/website
- Repository
- OCA/website · module folder · Try on Runboat
- Module version
- 2.0.1
- Category
- Website
- Folder size
- 9.08 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://github.com/OCA/website
- Last tracking update
- 2026-08-07 07:03:10
- Authors
- Odoo SA, Odoo Community Association (OCA), Incaser Informatica - Sergio Teruel
- Maintainers
- Odoo SA, Odoo Community Association (OCA), Incaser Informatica - Sergio Teruel
- Committers
- Holger Brunn, Pedro M. Baeza, GitHub, Jairo Llopis, Stéphane Bidoul (ACSONE), Weblate, OCA Transbot, oca-travis, sergio-incaser, Andhitia Rama
Code Analysis ⓘ
Views touched (30)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 | Inherits website.view_website_config_settings | |
website_slides.slide_embed_assets |
Website slides embed assets | ir.ui.view | qweb | New |
HTTP endpoints (14)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/page/<int:page>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/<string:slide_type>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/<string:slide_type>/page/<int:page>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/tag/<model("slide.tag"):tag>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/tag/<model("slide.tag"):tag>/page/<int:page>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/category/<model("slide.category"):category>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/category/<model("slide.category"):category>/page/<int:page>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/category/<model("slide.category"):category>/<string:slide_type>, /slides/<model("slide.channel", "[('can_see', '=', True)]"):channel>/category/<model("slide.category"):category>/<string:slide_type>/page/<int:page> |
WebsiteSlides.channel |
public | http | ALL | website |
/slides/add_slide |
WebsiteSlides.create_slide |
user | json | POST | website |
/slides/dialog_preview |
WebsiteSlides.dialog_preview |
user | json | POST | website |
/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True)]"):slide>/comment |
WebsiteSlides.slide_comment |
public | http | POST | sudo website |
/slides/slide/dislike |
WebsiteSlides.slide_dislike |
user | json | ALL | website |
/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True), ('download_security', '=', 'public')]"):slide>/download |
WebsiteSlides.slide_download |
public | http | ALL | website |
/slides/slide/overlay |
WebsiteSlides.slide_get_next_slides |
public | json | ALL | website |
/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True), ('datas', '!=', False), ('slide_type', '=', 'presentation')]"):slide>/pdf_content |
WebsiteSlides.slide_get_pdf_content |
public | http | ALL | website |
/slides/slide/like |
WebsiteSlides.slide_like |
user | json | ALL | website |
/slides/slide/send_share_email |
WebsiteSlides.slide_send_share_email |
user | json | ALL | website |
/slides/slide/<model("slide.slide"):slide>/promote |
WebsiteSlides.slide_set_promoted |
user | http | ALL | website |
/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True)]"):slide> |
WebsiteSlides.slide_view |
public | http | ALL | website |
/slides/embed/<int:slide_id> |
WebsiteSlides.slides_embed |
public | http | ALL | sudo website |
/slides |
WebsiteSlides.slides_index |
public | http | ALL | website |
Models touched (7)
New fields (9)
-
channel_idMany2one → slide.channelondelete='cascade'required=Truestring='Channel' args: 'slide.channel' -
nameCharrequired=Truetranslate=True args: 'Name' -
nbr_documentsIntegercompute='_count_presentations'store=True args: 'Number of Documents' -
nbr_infographicsIntegercompute='_count_presentations'store=True args: 'Number of Infographics' -
nbr_presentationsIntegercompute='_count_presentations'store=True args: 'Number of Presentations' -
nbr_videosIntegercompute='_count_presentations'store=True args: 'Number of Videos' -
sequenceIntegerdefault=10help='Display order' -
slide_idsOne2many → slide.slidestring='Slides' args: 'slide.slide', 'category_id' -
totalIntegercompute='_count_presentations'store=True
No public methods.
New fields (22)
-
access_error_msgHtmldefault='<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_seeBooleancompute='_compute_access'search='_search_can_see' args: 'Can See' -
can_see_fullBooleancompute='_compute_access' args: 'Full Access' -
can_uploadBooleancompute='_compute_access' args: 'Can Upload' -
category_idsOne2many → slide.categorystring='Categories' args: 'slide.category', 'channel_id' -
custom_slide_idMany2one → slide.slidestring='Slide to Promote' args: 'slide.slide' -
descriptionHtmltranslate=True args: 'Description' -
group_idsMany2many → res.groupshelp='Groups allowed to see presentations in this channel'string='Channel Groups' args: 'res.groups', 'rel_channel_groups', 'channel_id', 'group_id' -
nameCharrequired=Truetranslate=True args: 'Name' -
nbr_documentsIntegercompute='_count_presentations'store=True args: 'Number of Documents' -
nbr_infographicsIntegercompute='_count_presentations'store=True args: 'Number of Infographics' -
nbr_presentationsIntegercompute='_count_presentations'store=True args: 'Number of Presentations' -
nbr_videosIntegercompute='_count_presentations'store=True args: 'Number of Videos' -
promote_strategySelectiondefault='most_voted'required=Truestring='Featuring Policy' args: [('none', 'No Featured Presentation'), ('latest', 'Latest Published'), ('most_voted', 'Most Voted'), ('most_viewed', 'Most Viewed'), ('custom', 'Featured Presentation')] -
promoted_slide_idMany2one → slide.slidecompute='_compute_promoted_slide_id'store=Truestring='Featured Slide' args: 'slide.slide' -
publish_template_idMany2one → email.templatedefault=<expr>help='Email template to send slide publication through email'string='Published Template' args: 'email.template' -
sequenceIntegerdefault=10help='Display order' -
share_template_idMany2one → email.templatedefault=<expr>help='Email template used when sharing a slide'string='Shared Template' args: 'email.template' -
slide_idsOne2many → slide.slidestring='Slides' args: 'slide.slide', 'channel_id' -
totalIntegercompute='_count_presentations'store=True -
upload_group_idsMany2many → res.groupshelp='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' -
visibilitySelectiondefault='public'required=True args: [('public', 'Public'), ('private', 'Private'), ('partial', 'Show channel but restrict presentations')]
-
change_visibility(self)@api.onchange('visibility')
New fields (3)
-
count_viewsIntegerdefault=1 args: '# Views' -
slide_idMany2one → slide.slideindex=Truerequired=Truestring='Presentation' args: 'slide.slide' -
urlCharrequired=True args: 'Third Party Website URL'
-
add_embed_url(self, slide_id, url)
New fields (24)
-
category_idMany2one → slide.categorydomain="[('channel_id', '=', channel_id)]"string='Category' args: 'slide.category' -
channel_idMany2one → slide.channelrequired=Truestring='Channel' args: 'slide.channel' -
datasBinaryargs: 'Content' -
date_publishedDatetimeargs: 'Publish Date' -
descriptionTexttranslate=True args: 'Description' -
dislikesIntegerargs: 'Dislikes' -
document_idCharhelp='Youtube or Google Document ID' args: 'Document ID' -
download_securitySelectiondefault='user'required=Truestring='Download Security' args: [('none', 'No One'), ('user', 'Authentified Users Only'), ('public', 'Everyone')] -
embed_codeTextcompute='_get_embed_code'readonly=True args: 'Embed Code' -
embed_viewsIntegerargs: '# of Embedded Views' -
embedcount_idsOne2many → slide.embedstring='Embed Count' args: 'slide.embed', 'slide_id' -
imageBinaryattachment=True args: 'Image' -
image_mediumBinaryattachment=Truecompute='_get_image'store=True args: 'Medium' -
image_thumbBinaryattachment=Truecompute='_get_image'store=True args: 'Thumbnail' -
index_contentTextargs: 'Transcript' -
likesIntegerargs: 'Likes' -
mime_typeCharargs: 'Mime-type' -
nameCharrequired=Truetranslate=True args: 'Title' -
slide_typeSelectiondefault='document'help='Document type will be set automatically depending on file type, height and width.'required=Truestring='Type' args: [('infographic', 'Infographic'), ('presentation', 'Presentation'), ('document', 'Document'), ('video', 'Video')] -
slide_viewsIntegerargs: '# of Website Views' -
tag_idsMany2many → slide.tagstring='Tags' args: 'slide.tag', 'rel_slide_tag', 'slide_id', 'tag_id' -
total_viewsIntegercompute='_compute_total'default='0'store=True args: 'Total # Views' -
urlCharhelp='Youtube or Google Document URL' args: 'Document URL' -
website_message_idsOne2many → mail.messagedomain=<expr>help='Website communication history'string='Website Messages' args: 'mail.message', 'res_id'
-
check_field_access_rights(self, operation, fields)@api.modelAs 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)
-
nameCharrequired=True args: 'Name'
No public methods.
New fields (1)
-
website_slide_google_app_keyCharstring='Google Doc Key'
-
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)