summaryrefslogtreecommitdiff
path: root/addons/website_slides
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2018-08-13 20:36:28 +0200
committerJeremy Kersten <jke@odoo.com>2018-08-13 20:36:28 +0200
commitfbbf24f58acbcd9488cfa8393bd2d4e3a8e4c053 (patch)
tree2994a4151cbc70ac62d1741d84f7758c049557d4 /addons/website_slides
parent15df14b9e1863ca09115d920595a6eeb9f6514f1 (diff)
parent853e13800fb030f7ae7180558cb6c3c74b843cd1 (diff)
[MERGE] website: add multi-websites support
Diffstat (limited to 'addons/website_slides')
-rw-r--r--addons/website_slides/controllers/main.py12
-rw-r--r--addons/website_slides/data/website_slides_data.xml5
-rw-r--r--addons/website_slides/models/__init__.py1
-rw-r--r--addons/website_slides/models/res_config_settings.py2
-rw-r--r--addons/website_slides/models/slides.py14
-rw-r--r--addons/website_slides/models/website.py10
-rw-r--r--addons/website_slides/views/website_slides_backend.xml18
7 files changed, 44 insertions, 18 deletions
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py
index 2ef722104b5..fb281276c85 100644
--- a/addons/website_slides/controllers/main.py
+++ b/addons/website_slides/controllers/main.py
@@ -57,7 +57,8 @@ class WebsiteSlides(http.Controller):
""" Returns a list of available channels: if only one is available,
redirects directly to its slides
"""
- channels = request.env['slide.channel'].search([], order='sequence, id')
+ domain = request.website.website_domain()
+ channels = request.env['slide.channel'].search(domain, order='sequence, id')
if not channels:
return request.render("website_slides.channel_not_found")
elif len(channels) == 1:
@@ -71,6 +72,7 @@ class WebsiteSlides(http.Controller):
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:
@@ -93,6 +95,9 @@ class WebsiteSlides(http.Controller):
'''/slides/<model("slide.channel"):channel>/category/<model("slide.category"):category>/<string:slide_type>/page/<int:page>'''],
type='http', auth="public", website=True, sitemap=sitemap_slide)
def channel(self, channel, category=None, tag=None, page=1, slide_type=None, sorting='creation', search=None, **kw):
+ if not channel.can_access_from_current_website():
+ raise werkzeug.exceptions.NotFound()
+
user = request.env.user
Slide = request.env['slide.slide']
domain = [('channel_id', '=', channel.id)]
@@ -164,8 +169,11 @@ class WebsiteSlides(http.Controller):
# SLIDE.SLIDE CONTOLLERS
# --------------------------------------------------
- @http.route('''/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True)]"):slide>''', type='http', auth="public", website=True)
+ @http.route('''/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True), ('website_id', 'in', (False, current_website_id))]"):slide>''', type='http', auth="public", website=True)
def slide_view(self, slide, **kwargs):
+ if not slide.channel_id.can_access_from_current_website():
+ raise werkzeug.exceptions.NotFound()
+
values = self._get_slide_detail(slide)
if not values.get('private'):
self._set_viewed_slide(slide, 'slide')
diff --git a/addons/website_slides/data/website_slides_data.xml b/addons/website_slides/data/website_slides_data.xml
index 05d5f2d0aca..7ea95265642 100644
--- a/addons/website_slides/data/website_slides_data.xml
+++ b/addons/website_slides/data/website_slides_data.xml
@@ -2,9 +2,8 @@
<odoo>
<data noupdate="1">
- <record model="ir.config_parameter" id="google_app_key">
- <field name="key">website_slides.google_app_key</field>
- <field name="value">AIzaSyDOWlmDW-7DbLmOR9ZsT5AOEXf4n6TFwQA</field>
+ <record id="website.default_website" model="website">
+ <field name="website_slide_google_app_key">AIzaSyDOWlmDW-7DbLmOR9ZsT5AOEXf4n6TFwQA</field>
</record>
<record id="website_menu_slides" model="website.menu">
diff --git a/addons/website_slides/models/__init__.py b/addons/website_slides/models/__init__.py
index 63cd0092c43..2ad149ccded 100644
--- a/addons/website_slides/models/__init__.py
+++ b/addons/website_slides/models/__init__.py
@@ -2,3 +2,4 @@
from . import slides
from . import res_config_settings
+from . import website
diff --git a/addons/website_slides/models/res_config_settings.py b/addons/website_slides/models/res_config_settings.py
index 7021191249e..7ea6470a127 100644
--- a/addons/website_slides/models/res_config_settings.py
+++ b/addons/website_slides/models/res_config_settings.py
@@ -7,4 +7,4 @@ from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
- website_slide_google_app_key = fields.Char(string='Google Doc Key', config_parameter='website_slides.google_app_key')
+ website_slide_google_app_key = fields.Char(related='website_id.website_slide_google_app_key')
diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py
index 9346e937064..6c856f504ed 100644
--- a/addons/website_slides/models/slides.py
+++ b/addons/website_slides/models/slides.py
@@ -26,7 +26,7 @@ class Channel(models.Model):
channels. """
_name = 'slide.channel'
_description = 'Channel for Slides'
- _inherit = ['mail.thread', 'website.seo.metadata', 'website.published.mixin']
+ _inherit = ['mail.thread', 'website.seo.metadata', 'website.published.multi.mixin']
_order = 'sequence, id'
_order_by_strategy = {
'most_viewed': 'total_views desc',
@@ -330,6 +330,7 @@ class Slide(models.Model):
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')
dislikes = fields.Integer('Dislikes')
@@ -469,14 +470,17 @@ class Slide(models.Model):
return groups
def get_related_slides(self, limit=20):
- domain = [('website_published', '=', True), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)]
+ domain = request.website.website_domain()
+ domain += [('website_published', '=', True), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)]
if self.category_id:
domain += [('category_id', '=', self.category_id.id)]
for record in self.search(domain, limit=limit):
yield record
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 = request.website.website_domain()
+ domain += [('website_published', '=', True), ('channel_id.visibility', '!=', 'private'), ('id', '!=', self.id)]
+ for record in self.search(domain, limit=limit, order='total_views desc'):
yield record
def _post_publication(self):
@@ -542,7 +546,7 @@ class Slide(models.Model):
return {'error': _('Unknown document')}
def _parse_youtube_document(self, document_id, only_preview_fields):
- key = self.env['ir.config_parameter'].sudo().get_param('website_slides.google_app_key')
+ key = self.env['website'].get_current_website().website_slide_google_app_key
fetch_res = self._fetch_data('https://www.googleapis.com/youtube/v3/videos', {'id': document_id, 'key': key, 'part': 'snippet', 'fields': 'items(id,snippet)'}, 'json')
if fetch_res.get('error'):
return fetch_res
@@ -592,7 +596,7 @@ class Slide(models.Model):
if access_token:
params['access_token'] = access_token
if not params.get('access_token'):
- params['key'] = self.env['ir.config_parameter'].sudo().get_param('website_slides.google_app_key')
+ params['key'] = self.env['website'].get_current_website().website_slide_google_app_key
fetch_res = self._fetch_data('https://www.googleapis.com/drive/v2/files/%s' % document_id, params, "json")
if fetch_res.get('error'):
diff --git a/addons/website_slides/models/website.py b/addons/website_slides/models/website.py
new file mode 100644
index 00000000000..1896243fa8f
--- /dev/null
+++ b/addons/website_slides/models/website.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models
+
+
+class Website(models.Model):
+ _inherit = "website"
+
+ website_slide_google_app_key = fields.Char('Google Doc Key')
diff --git a/addons/website_slides/views/website_slides_backend.xml b/addons/website_slides/views/website_slides_backend.xml
index 802dfab3c69..b3f4ade55ba 100644
--- a/addons/website_slides/views/website_slides_backend.xml
+++ b/addons/website_slides/views/website_slides_backend.xml
@@ -60,6 +60,7 @@
<group>
<field name="channel_id"/>
<field name="category_id" context="{'default_channel_id': channel_id}"/>
+ <field name="website_id" groups="website.group_multi_website"/>
<field name="website_url"/>
</group>
<notebook>
@@ -108,6 +109,7 @@
<field name="arch" type="xml">
<tree string="Slides">
<field name="name"/>
+ <field name="website_id" groups="website.group_multi_website"/>
<field name="active" invisible="1"/>
<field name="slide_type"/>
<field name="channel_id"/>
@@ -198,7 +200,7 @@
</p>
</field>
</record>
-
+
<!-- SLIDE.CHANNEL VIEWS -->
<record model="ir.ui.view" id="view_slide_channel_form">
<field name="name">slide.channel.form</field>
@@ -229,6 +231,7 @@
<page string="General">
<group>
<group>
+ <field name="website_id" groups="website.group_multi_website"/>
<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="promoted_slide_id" attrs="{'invisible': [('promote_strategy', '!=', 'custom')]}"/>
@@ -269,6 +272,7 @@
<tree string="Channel">
<field name="sequence" widget="handle"/>
<field name="name"/>
+ <field name="website_id" groups="website.group_multi_website"/>
<field name="active" invisible="1"/>
<field name="visibility"/>
<field name="promote_strategy"/>
@@ -297,7 +301,7 @@
</p>
</field>
</record>
-
+
<menuitem name="Slides"
id="menu_website_slides_root"
sequence="32"
@@ -310,13 +314,13 @@
sequence="140"
parent="website.menu_website_global_configuration"
groups="website.group_website_designer"/>
-
- <menuitem action="action_slide_channels" id="menu_action_slide_channels_global"
+
+ <menuitem action="action_slide_channels" id="menu_action_slide_channels_global"
parent="menu_website_slides_root_global" sequence="1"/>
-
+
<menuitem action="action_ir_slide_category" id="menu_action_ir_slide_category_global" parent="menu_website_slides_root_global" sequence="2"/>
-
+
<menuitem action="action_slide_tag" id="menu_slide_tag" parent="menu_website_slides_root_global" sequence="10" groups="base.group_no_one"/>
-
+
</data>
</odoo>