diff options
| author | Jeremy Kersten <jke@odoo.com> | 2018-08-13 20:36:28 +0200 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2018-08-13 20:36:28 +0200 |
| commit | fbbf24f58acbcd9488cfa8393bd2d4e3a8e4c053 (patch) | |
| tree | 2994a4151cbc70ac62d1741d84f7758c049557d4 /addons/website_slides | |
| parent | 15df14b9e1863ca09115d920595a6eeb9f6514f1 (diff) | |
| parent | 853e13800fb030f7ae7180558cb6c3c74b843cd1 (diff) | |
[MERGE] website: add multi-websites support
Diffstat (limited to 'addons/website_slides')
| -rw-r--r-- | addons/website_slides/controllers/main.py | 12 | ||||
| -rw-r--r-- | addons/website_slides/data/website_slides_data.xml | 5 | ||||
| -rw-r--r-- | addons/website_slides/models/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_slides/models/res_config_settings.py | 2 | ||||
| -rw-r--r-- | addons/website_slides/models/slides.py | 14 | ||||
| -rw-r--r-- | addons/website_slides/models/website.py | 10 | ||||
| -rw-r--r-- | addons/website_slides/views/website_slides_backend.xml | 18 |
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> |
