From 0f22f95289e3bc4ae99e558bd534810615e7c4fc Mon Sep 17 00:00:00 2001 From: qmo-odoo Date: Fri, 8 Feb 2019 13:27:00 +0000 Subject: [PATCH] [IMP] website_slides: webpage slide type The idea is a slide can be a HTML page completely customized by user. So, you can now easily create custom content and publish it on your website, like a normal slide. Task-1938643 --- addons/website_slides/controllers/main.py | 5 +++-- addons/website_slides/models/slide_channel.py | 8 ++++++-- addons/website_slides/models/slide_slide.py | 9 ++++++++- addons/website_slides/views/slide_slide_views.xml | 2 +- .../website_slides/views/website_slides_templates.xml | 11 ++++++++++- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py index 49b01f1b3b1..81416f18c64 100644 --- a/addons/website_slides/controllers/main.py +++ b/addons/website_slides/controllers/main.py @@ -114,10 +114,11 @@ class WebsiteSlides(http.Controller): if search: domain += [ - '|', '|', + '|', '|', '|', ('name', 'ilike', search), ('description', 'ilike', search), - ('index_content', 'ilike', search)] + ('index_content', 'ilike', search), + ('html_content', 'ilike', search)] pager_args['search'] = search else: if category: diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py index eea0fb04a71..53e46f6d7ee 100644 --- a/addons/website_slides/models/slide_channel.py +++ b/addons/website_slides/models/slide_channel.py @@ -91,6 +91,7 @@ class Channel(models.Model): nbr_documents = fields.Integer('Number of Documents', compute='_compute_slides_statistics', store=True) nbr_videos = fields.Integer('Number of Videos', compute='_compute_slides_statistics', store=True) nbr_infographics = fields.Integer('Number of Infographics', compute='_compute_slides_statistics', store=True) + nbr_webpages = fields.Integer("Number of Webpages", compute='_compute_slides_statistics', store=True) total_slides = fields.Integer('# Slides', compute='_compute_slides_statistics', store=True, oldname='total') total_views = fields.Integer('# Views', compute='_compute_slides_statistics', store=True) total_votes = fields.Integer('# Votes', compute='_compute_slides_statistics', store=True) @@ -150,7 +151,7 @@ class Channel(models.Model): 'slide_ids.likes', 'slide_ids.dislikes', 'slide_ids.total_views') def _compute_slides_statistics(self): result = dict.fromkeys(self.ids, dict( - nbr_presentations=0, nbr_documents=0, nbr_videos=0, nbr_infographics=0, + nbr_presentations=0, nbr_documents=0, nbr_videos=0, nbr_infographics=0, nbr_webpages=0, total_slides=0, total_views=0, total_votes=0, total_time=0)) read_group_res = self.env['slide.slide'].read_group( [('is_published', '=', True), ('channel_id', 'in', self.ids)], @@ -163,6 +164,7 @@ class Channel(models.Model): result[cid]['nbr_documents'] += res_group.get('slide_type', '') == 'document' and res_group['__count'] or 0 result[cid]['nbr_videos'] += res_group.get('slide_type', '') == 'video' and res_group['__count'] or 0 result[cid]['nbr_infographics'] += res_group.get('slide_type', '') == 'infographic' and res_group['__count'] or 0 + result[cid]['nbr_webpages'] += res_group.get('slide_type', '') == 'webpage' and res_group['__count'] or 0 result[cid]['total_slides'] += res_group['__count'] result[cid]['total_views'] += res_group.get('total_views', 0) result[cid]['total_votes'] += res_group.get('likes', 0) @@ -364,6 +366,7 @@ class Category(models.Model): nbr_documents = fields.Integer("Number of Documents", compute='_count_presentations', store=True) nbr_videos = fields.Integer("Number of Videos", compute='_count_presentations', store=True) nbr_infographics = fields.Integer("Number of Infographics", compute='_count_presentations', store=True) + nbr_webpages = fields.Integer("Number of Webpages", compute='_count_presentations', store=True) total_slides = fields.Integer(compute='_count_presentations', store=True, oldname='total') @api.depends('slide_ids.slide_type', 'slide_ids.is_published') @@ -380,4 +383,5 @@ class Category(models.Model): record.nbr_documents = result[record.id].get('document', 0) record.nbr_videos = result[record.id].get('video', 0) record.nbr_infographics = result[record.id].get('infographic', 0) - record.total_slides = record.nbr_presentations + record.nbr_documents + record.nbr_videos + record.nbr_infographics + record.nbr_webpages = result[record.id].get('webpage', 0) + record.total_slides = record.nbr_presentations + record.nbr_documents + record.nbr_videos + record.nbr_infographics + record.nbr_webpages diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py index 5f54709a5b1..4b85660885b 100644 --- a/addons/website_slides/models/slide_slide.py +++ b/addons/website_slides/models/slide_slide.py @@ -83,6 +83,7 @@ class Slide(models.Model): - Document - Infographic - Video + - Webpage Slide has various statistics like view count, embed count, like, dislikes """ @@ -101,6 +102,10 @@ class Slide(models.Model): 'channel_id', 'description', 'tag_ids', 'write_date', 'create_date', 'website_published', 'website_url', 'website_meta_title', 'website_meta_description', 'website_meta_keywords', 'website_meta_og_img'] + _sql_constraints = [ + ('exclusion_html_content_and_url', "CHECK(html_content IS NULL OR url IS NULL)", "A slide is either filled with a document url or HTML content. Not both.") + ] + # description name = fields.Char('Title', required=True, translate=True) active = fields.Boolean(default=True) @@ -127,9 +132,10 @@ class Slide(models.Model): ('infographic', 'Infographic'), ('presentation', 'Presentation'), ('document', 'Document'), + ('webpage', 'Web Page'), ('video', 'Video')], string='Type', required=True, - default='document', + default='document', readonly=True, help="The document type will be set automatically based on the document URL and properties (e.g. height and width for presentation and document).") index_content = fields.Text('Transcript') datas = fields.Binary('Content', attachment=True) @@ -137,6 +143,7 @@ class Slide(models.Model): document_id = fields.Char('Document ID', help="Youtube or Google Document ID") link_ids = fields.One2many('slide.slide.link', 'slide_id', string="External URL for this slide") mime_type = fields.Char('Mime-type') + html_content = fields.Html("HTML Content", help="Custom HTML content for slides of type 'Web Page'.", translate=True) # website website_id = fields.Many2one(related='channel_id.website_id', readonly=True) date_published = fields.Datetime('Publish Date') diff --git a/addons/website_slides/views/slide_slide_views.xml b/addons/website_slides/views/slide_slide_views.xml index 4a621d6206e..f175067fcd5 100644 --- a/addons/website_slides/views/slide_slide_views.xml +++ b/addons/website_slides/views/slide_slide_views.xml @@ -70,7 +70,7 @@ - + diff --git a/addons/website_slides/views/website_slides_templates.xml b/addons/website_slides/views/website_slides_templates.xml index c26ce86ecbb..1d27e66b9f4 100644 --- a/addons/website_slides/views/website_slides_templates.xml +++ b/addons/website_slides/views/website_slides_templates.xml @@ -182,6 +182,12 @@ Infographics + @@ -411,7 +417,10 @@
-
+
+
+
+