summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2019-02-01 14:36:52 +0000
committerThibault Delavallée <tde@odoo.com>2019-02-05 11:19:52 +0000
commit8f3eff13fb76e71c881c8aae8e21b79cfad0cce2 (patch)
tree23c35b3d6dfeda5e703c8303810486cccf291f42 /addons
parent7105669b77a19bf5a80a6d481bca76139e0afafa (diff)
[REF] website_slides: light cleaning
Purpose of this commit is to prepare future code addition by making some noise in a separate commit. In this commit we move compute methods below fields definition because currently it is a complete mess and finding a given field gives a headache. Commit linked to task ID 1933820 and PR #30830.
Diffstat (limited to 'addons')
-rw-r--r--addons/website_slides/controllers/main.py18
-rw-r--r--addons/website_slides/models/slide_channel.py66
-rw-r--r--addons/website_slides/models/slide_slide.py51
3 files changed, 67 insertions, 68 deletions
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py
index 13a8b4505fb..d09d0e9020b 100644
--- a/addons/website_slides/controllers/main.py
+++ b/addons/website_slides/controllers/main.py
@@ -23,6 +23,15 @@ class WebsiteSlides(http.Controller):
'vote': 'likes desc',
}
+ def sitemap_slide(env, rule, qs):
+ Channel = env['slide.channel']
+ dom = sitemap_qs2dom(qs=qs, route='/slides/', field=Channel._rec_name)
+ dom += env['website'].get_current_website().website_domain()
+ for channel in Channel.search(dom):
+ loc = '/slides/%s' % slug(channel)
+ if not qs or qs.lower() in loc:
+ yield {'loc': loc}
+
def _set_viewed_slide(self, slide, view_mode):
slide_key = '%s_%s' % (view_mode, request.session.sid)
viewed_slides = request.session.setdefault(slide_key, list())
@@ -69,15 +78,6 @@ class WebsiteSlides(http.Controller):
'is_public_user': request.website.is_public_user(),
})
- def sitemap_slide(env, rule, qs):
- Channel = env['slide.channel']
- dom = sitemap_qs2dom(qs=qs, route='/slides/', field=Channel._rec_name)
- dom += env['website'].get_current_website().website_domain()
- for channel in Channel.search(dom):
- loc = '/slides/%s' % slug(channel)
- if not qs or qs.lower() in loc:
- yield {'loc': loc}
-
@http.route([
'''/slides/<model("slide.channel"):channel>''',
'''/slides/<model("slide.channel"):channel>/page/<int:page>''',
diff --git a/addons/website_slides/models/slide_channel.py b/addons/website_slides/models/slide_channel.py
index f8cf257f7c4..a9b47405672 100644
--- a/addons/website_slides/models/slide_channel.py
+++ b/addons/website_slides/models/slide_channel.py
@@ -20,11 +20,13 @@ class Channel(models.Model):
'latest': 'date_published desc',
}
+ # description
name = fields.Char('Name', translate=True, required=True)
active = fields.Boolean(default=True)
description = fields.Html('Description', translate=html_translate, sanitize_attributes=False)
sequence = fields.Integer(default=10, help='Display order')
category_ids = fields.One2many('slide.category', 'channel_id', string="Categories")
+ # slides: promote, statistics
slide_ids = fields.One2many('slide.slide', 'channel_id', string="Slides")
promote_strategy = fields.Selection([
('none', 'No Featured Presentation'),
@@ -35,43 +37,12 @@ class Channel(models.Model):
string="Featuring Policy", default='most_voted', required=True)
custom_slide_id = fields.Many2one('slide.slide', string='Slide to Promote')
promoted_slide_id = fields.Many2one('slide.slide', string='Featured Slide', compute='_compute_promoted_slide_id', store=True)
-
- @api.depends('custom_slide_id', 'promote_strategy', 'slide_ids.likes',
- 'slide_ids.total_views', "slide_ids.date_published")
- def _compute_promoted_slide_id(self):
- for record in self:
- if record.promote_strategy == 'none':
- record.promoted_slide_id = False
- elif record.promote_strategy == 'custom':
- record.promoted_slide_id = record.custom_slide_id
- elif record.promote_strategy:
- slides = self.env['slide.slide'].search(
- [('website_published', '=', True), ('channel_id', '=', record.id)],
- limit=1, order=self._order_by_strategy[record.promote_strategy])
- record.promoted_slide_id = slides and slides[0] or False
-
nbr_presentations = fields.Integer('Number of Presentations', compute='_count_presentations', store=True)
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)
total = fields.Integer(compute='_count_presentations', store=True)
-
- @api.depends('slide_ids.slide_type', 'slide_ids.website_published')
- def _count_presentations(self):
- result = dict.fromkeys(self.ids, dict())
- res = self.env['slide.slide'].read_group(
- [('website_published', '=', True), ('channel_id', 'in', self.ids)],
- ['channel_id', 'slide_type'], ['channel_id', 'slide_type'],
- lazy=False)
- for res_group in res:
- result[res_group['channel_id'][0]][res_group['slide_type']] = result[res_group['channel_id'][0]].get(res_group['slide_type'], 0) + res_group['__count']
- for record in self:
- record.nbr_presentations = result[record.id].get('presentation', 0)
- 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 = record.nbr_presentations + record.nbr_documents + record.nbr_videos + record.nbr_infographics
-
+ # configuration
publish_template_id = fields.Many2one(
'mail.template', string='Published Template',
help="Email template to send slide publication through email",
@@ -100,6 +71,37 @@ class Channel(models.Model):
can_see_full = fields.Boolean('Full Access', compute='_compute_access')
can_upload = fields.Boolean('Can Upload', compute='_compute_access')
+ @api.depends('custom_slide_id', 'promote_strategy', 'slide_ids.likes',
+ 'slide_ids.total_views', "slide_ids.date_published")
+ def _compute_promoted_slide_id(self):
+ for record in self:
+ if record.promote_strategy == 'none':
+ record.promoted_slide_id = False
+ elif record.promote_strategy == 'custom':
+ record.promoted_slide_id = record.custom_slide_id
+ elif record.promote_strategy:
+ slides = self.env['slide.slide'].search(
+ [('website_published', '=', True), ('channel_id', '=', record.id)],
+ limit=1, order=self._order_by_strategy[record.promote_strategy])
+ record.promoted_slide_id = slides and slides[0] or False
+
+ @api.depends('slide_ids.slide_type', 'slide_ids.website_published')
+ def _count_presentations(self):
+ result = dict.fromkeys(self.ids, dict())
+ res = self.env['slide.slide'].read_group(
+ [('website_published', '=', True), ('channel_id', 'in', self.ids)],
+ ['channel_id', 'slide_type'],
+ groupby=['channel_id', 'slide_type'],
+ lazy=False)
+ for res_group in res:
+ result[res_group['channel_id'][0]][res_group['slide_type']] = result[res_group['channel_id'][0]].get(res_group['slide_type'], 0) + res_group['__count']
+ for record in self:
+ record.nbr_presentations = result[record.id].get('presentation', 0)
+ 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 = record.nbr_presentations + record.nbr_documents + record.nbr_videos + record.nbr_infographics
+
def _search_can_see(self, operator, value):
if operator not in ('=', '!=', '<>'):
raise ValueError('Invalid operator: %s' % (operator,))
diff --git a/addons/website_slides/models/slide_slide.py b/addons/website_slides/models/slide_slide.py
index 02a9640cc2b..5ebbd8e81a1 100644
--- a/addons/website_slides/models/slide_slide.py
+++ b/addons/website_slides/models/slide_slide.py
@@ -107,17 +107,6 @@ class Slide(models.Model):
user_ids = fields.Many2many('res.users', 'slide_users', 'slide_id', 'user_id',
string='Subscribers', groups='base.group_system')
slide_user_ids = fields.One2many('slide.users', 'slide_id', string='Subscribers information', groups='base.group_system')
-
- @api.depends('image')
- def _get_image(self):
- for record in self:
- if record.image:
- record.image_medium = image.crop_image(record.image, type='top', ratio=(4, 3), size=(500, 400))
- record.image_thumb = image.crop_image(record.image, type='top', ratio=(4, 3), size=(200, 200))
- else:
- record.image_medium = False
- record.iamge_thumb = False
-
# content
slide_type = fields.Selection([
('infographic', 'Infographic'),
@@ -132,32 +121,29 @@ class Slide(models.Model):
url = fields.Char('Document URL', help="Youtube or Google Document URL")
document_id = fields.Char('Document ID', help="Youtube or Google Document ID")
mime_type = fields.Char('Mime-type')
-
- @api.onchange('url')
- def on_change_url(self):
- self.ensure_one()
- if self.url:
- res = self._parse_document_url(self.url)
- if res.get('error'):
- raise Warning(_('Could not fetch data from url. Document or access right not available:\n%s') % res['error'])
- values = res['values']
- if not values.get('document_id'):
- raise Warning(_('Please enter valid Youtube or Google Doc URL'))
- for key, value in values.items():
- self[key] = value
-
# website
website_id = fields.Many2one(related='channel_id.website_id', readonly=True)
date_published = fields.Datetime('Publish Date')
likes = fields.Integer('Likes', compute='_compute_user_info', store=True)
dislikes = fields.Integer('Dislikes', compute='_compute_user_info', store=True)
user_vote = fields.Integer('User vote', compute='_compute_user_info')
+ embed_code = fields.Text('Embed Code', readonly=True, compute='_get_embed_code')
# views
embedcount_ids = fields.One2many('slide.embed', 'slide_id', string="Embed Count")
slide_views = fields.Integer('# of Website Views')
embed_views = fields.Integer('# of Embedded Views')
total_views = fields.Integer("Total # Views", default="0", compute='_compute_total', store=True)
+ @api.depends('image')
+ def _get_image(self):
+ for record in self:
+ if record.image:
+ record.image_medium = image.crop_image(record.image, type='top', ratio=(4, 3), size=(500, 400))
+ record.image_thumb = image.crop_image(record.image, type='top', ratio=(4, 3), size=(200, 200))
+ else:
+ record.image_medium = False
+ record.iamge_thumb = False
+
@api.depends('slide_views', 'embed_views')
def _compute_total(self):
for record in self:
@@ -181,8 +167,6 @@ class Slide(models.Model):
for slide_sudo in self.sudo():
slide_sudo.update(slide_data[slide_sudo.id])
- embed_code = fields.Text('Embed Code', readonly=True, compute='_get_embed_code')
-
def _get_embed_code(self):
base_url = request and request.httprequest.url_root or self.env['ir.config_parameter'].sudo().get_param('web.base.url')
if base_url[-1] == '/':
@@ -201,6 +185,19 @@ class Slide(models.Model):
else:
record.embed_code = False
+ @api.onchange('url')
+ def on_change_url(self):
+ self.ensure_one()
+ if self.url:
+ res = self._parse_document_url(self.url)
+ if res.get('error'):
+ raise Warning(_('Could not fetch data from url. Document or access right not available:\n%s') % res['error'])
+ values = res['values']
+ if not values.get('document_id'):
+ raise Warning(_('Please enter valid Youtube or Google Doc URL'))
+ for key, value in values.items():
+ self[key] = value
+
@api.multi
@api.depends('name')
def _compute_website_url(self):