[IMP] website_slides compatible with Multi-Website

This commit is contained in:
Kaushal Prajapati 2018-01-01 16:44:15 +05:30 committed by Siddharth Bhalgami
parent 75b104de5b
commit a8637343a9
3 changed files with 21 additions and 6 deletions

View File

@ -51,6 +51,7 @@ class Channel(models.Model):
@api.depends('custom_slide_id', 'promote_strategy', 'slide_ids.likes', @api.depends('custom_slide_id', 'promote_strategy', 'slide_ids.likes',
'slide_ids.total_views', "slide_ids.date_published") 'slide_ids.total_views', "slide_ids.date_published")
def _compute_promoted_slide_id(self): def _compute_promoted_slide_id(self):
domain = self.env['website'].get_current_website()
for record in self: for record in self:
if record.promote_strategy == 'none': if record.promote_strategy == 'none':
record.promoted_slide_id = False record.promoted_slide_id = False
@ -58,7 +59,7 @@ class Channel(models.Model):
record.promoted_slide_id = record.custom_slide_id record.promoted_slide_id = record.custom_slide_id
elif record.promote_strategy: elif record.promote_strategy:
slides = self.env['slide.slide'].search( slides = self.env['slide.slide'].search(
[('website_published', '=', True), ('channel_id', '=', record.id)], [('website_published', '=', True), '|', ('website_ids', '=', False), ('website_ids', 'in', domain.id), ('channel_id', '=', record.id)],
limit=1, order=self._order_by_strategy[record.promote_strategy]) limit=1, order=self._order_by_strategy[record.promote_strategy])
record.promoted_slide_id = slides and slides[0] or False record.promoted_slide_id = slides and slides[0] or False
@ -71,8 +72,9 @@ class Channel(models.Model):
@api.depends('slide_ids.slide_type', 'slide_ids.website_published') @api.depends('slide_ids.slide_type', 'slide_ids.website_published')
def _count_presentations(self): def _count_presentations(self):
result = dict.fromkeys(self.ids, dict()) result = dict.fromkeys(self.ids, dict())
domain = self.env['website'].get_current_website()
res = self.env['slide.slide'].read_group( res = self.env['slide.slide'].read_group(
[('website_published', '=', True), ('channel_id', 'in', self.ids)], [('website_published', '=', True), '|', ('website_ids', '=', False), ('website_ids', 'in', domain.id), ('channel_id', 'in', self.ids)],
['channel_id', 'slide_type'], ['channel_id', 'slide_type'], ['channel_id', 'slide_type'], ['channel_id', 'slide_type'],
lazy=False) lazy=False)
for res_group in res: for res_group in res:
@ -112,6 +114,11 @@ class Channel(models.Model):
can_see_full = fields.Boolean('Full Access', compute='_compute_access') can_see_full = fields.Boolean('Full Access', compute='_compute_access')
can_upload = fields.Boolean('Can Upload', compute='_compute_access') can_upload = fields.Boolean('Can Upload', compute='_compute_access')
website_ids = fields.Many2many('website', 'website_slide_channel_pub_rel',
'website_id', 'slide_channel_id',
string='Websites', copy=False,
help='List of websites in which Slide channel is published.')
def _search_can_see(self, operator, value): def _search_can_see(self, operator, value):
if operator not in ('=', '!=', '<>'): if operator not in ('=', '!=', '<>'):
raise ValueError('Invalid operator: %s' % (operator,)) raise ValueError('Invalid operator: %s' % (operator,))
@ -200,8 +207,9 @@ class Category(models.Model):
@api.depends('slide_ids.slide_type', 'slide_ids.website_published') @api.depends('slide_ids.slide_type', 'slide_ids.website_published')
def _count_presentations(self): def _count_presentations(self):
result = dict.fromkeys(self.ids, dict()) result = dict.fromkeys(self.ids, dict())
domain = self.env['website'].get_current_website()
res = self.env['slide.slide'].read_group( res = self.env['slide.slide'].read_group(
[('website_published', '=', True), ('category_id', 'in', self.ids)], [('website_published', '=', True), '|', ('website_ids', '=', False), ('website_ids', 'in', domain.id), ('category_id', 'in', self.ids)],
['category_id', 'slide_type'], ['category_id', 'slide_type'], ['category_id', 'slide_type'], ['category_id', 'slide_type'],
lazy=False) lazy=False)
for res_group in res: for res_group in res:
@ -288,6 +296,9 @@ class Slide(models.Model):
image = fields.Binary('Image', attachment=True) image = fields.Binary('Image', attachment=True)
image_medium = fields.Binary('Medium', compute="_get_image", store=True, attachment=True) image_medium = fields.Binary('Medium', compute="_get_image", store=True, attachment=True)
image_thumb = fields.Binary('Thumbnail', compute="_get_image", store=True, attachment=True) image_thumb = fields.Binary('Thumbnail', compute="_get_image", store=True, attachment=True)
website_ids = fields.Many2many('website', 'website_slide_pub_rel', 'website_id', 'slide_id',
string='Websites', copy=False,
help='List of websites in which Slide is published.')
@api.depends('image') @api.depends('image')
def _get_image(self): def _get_image(self):
@ -464,14 +475,16 @@ class Slide(models.Model):
return groups return groups
def get_related_slides(self, limit=20): def get_related_slides(self, limit=20):
domain = [('website_published', '=', True), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)] domain = self.env['website'].get_current_website()
domain = [('website_published', '=', True), '|', ('website_ids', '=', False), ('website_ids', 'in', domain.id), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)]
if self.category_id: if self.category_id:
domain += [('category_id', '=', self.category_id.id)] domain += [('category_id', '=', self.category_id.id)]
for record in self.search(domain, limit=limit): for record in self.search(domain, limit=limit):
yield record yield record
def get_most_viewed_slides(self, limit=20): def get_most_viewed_slides(self, limit=20):
for record in self.search([('website_published', '=', True), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)], limit=limit, order='total_views desc'): domain = self.env['website'].get_current_website()
for record in self.search([('website_published', '=', True), '|', ('website_ids', '=', False), ('website_ids', 'in', domain.id), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)], limit=limit, order='total_views desc'):
yield record yield record
def _post_publication(self): def _post_publication(self):

View File

@ -39,7 +39,7 @@
<div class="row"> <div class="row">
<t t-foreach="channels" t-as="channel"> <t t-foreach="channels" t-as="channel">
<div t-if="channel_index % 3 == 0" class="clearfix"/> <div t-if="channel_index % 3 == 0" class="clearfix"/>
<div class="col-sm-4 mb32"> <div class="col-sm-4 mb32" t-attf-data-publish="#{channel.website_published &amp; (not channel.website_ids or website in channel.website_ids) and 'on' or 'off'}">
<div class="well well-sm"> <div class="well well-sm">
<div> <div>
<a t-attf-href="/slides/#{slug(channel)}"> <a t-attf-href="/slides/#{slug(channel)}">

View File

@ -67,6 +67,7 @@
<field name="channel_id"/> <field name="channel_id"/>
<field name="category_id" context="{'default_channel_id': channel_id}"/> <field name="category_id" context="{'default_channel_id': channel_id}"/>
<field name="website_url"/> <field name="website_url"/>
<field name="website_ids" widget="many2many_tags"/>
</group> </group>
<notebook> <notebook>
<page string="Description"> <page string="Description">
@ -230,6 +231,7 @@
<field name="promote_strategy" widget="radio"/> <field name="promote_strategy" widget="radio"/>
<field name="custom_slide_id" class="oe_edit_only" attrs="{'invisible': [('promote_strategy', '!=', 'custom')]}" domain="[('channel_id','=',id), ('website_published','=',True)]"/> <field name="custom_slide_id" class="oe_edit_only" attrs="{'invisible': [('promote_strategy', '!=', 'custom')]}" domain="[('channel_id','=',id), ('website_published','=',True)]"/>
<field name="promoted_slide_id" attrs="{'invisible': [('promote_strategy', '!=', 'custom')]}"/> <field name="promoted_slide_id" attrs="{'invisible': [('promote_strategy', '!=', 'custom')]}"/>
<field name="website_ids" widget="many2many_tags"/>
</group> </group>
<group> <group>
<field name="publish_template_id" domain="[('model','=','slide.slide')]"/> <field name="publish_template_id" domain="[('model','=','slide.slide')]"/>