From eb58572ac2720aa92cdc37f3f632af2d2b99f988 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= <tde@openerp.com>
Date: Wed, 28 Jan 2015 12:38:26 +0100
Subject: [PATCH] [IMP][REF] website_customer, website_event, website_livechat,
 website_sale_delivery, website_slides: use the recently introduced
 website.published.mixin to replace the website_published and website_url
 fields defined in various remaining modules.

In slides, some templates have been updated because share_url was basically
website_url and has been replaced.
---
 .../models/website_customer.py                |  2 +-
 addons/website_event/models/event.py          |  9 ++----
 addons/website_livechat/models/im_livechat.py |  5 ++--
 .../models/sale_order.py                      |  5 ++--
 addons/website_slides/controllers/main.py     |  2 +-
 .../data/website_slides_data.xml              | 16 +++++-----
 addons/website_slides/models/slides.py        | 30 ++++++++++++-------
 addons/website_slides/view/website_slides.xml | 12 ++++----
 .../view/website_slides_backend.xml           | 16 ++++++----
 .../view/website_slides_embed.xml             |  4 +--
 10 files changed, 55 insertions(+), 46 deletions(-)

diff --git a/addons/website_customer/models/website_customer.py b/addons/website_customer/models/website_customer.py
index f248ecdf56a6..f84905e25c5a 100644
--- a/addons/website_customer/models/website_customer.py
+++ b/addons/website_customer/models/website_customer.py
@@ -14,6 +14,7 @@ class res_partner(osv.Model):
 class res_partner_tags(osv.Model):
     _description = 'Partner Tags - These tags can be used on website to find customers by sector, or ... '
     _name = 'res.partner.tag'
+    _inherit = 'website.published.mixin'
 
     def get_selection_class(self, cr, uid, context=None):
         classname = ['default', 'primary', 'success', 'warning', 'danger']
@@ -23,7 +24,6 @@ class res_partner_tags(osv.Model):
         'name': fields.char('Category Name', required=True, translate=True),
         'partner_ids': fields.many2many('res.partner', 'res_partner_res_partner_tag_rel', id1='tag_id', id2='partner_id', string='Partners'),
         'classname': fields.selection(get_selection_class, 'Class', help="Bootstrap class to customize the color of the tag", required=True),
-        'website_published': fields.boolean('Publish', help="The publish field allows you to show the tag on website."),
         'active': fields.boolean('Active'),
     }
     _defaults = {
diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py
index 553df76a4728..04a944774a68 100644
--- a/addons/website_event/models/event.py
+++ b/addons/website_event/models/event.py
@@ -1,14 +1,9 @@
 # -*- coding: utf-8 -*-
 
-from openerp import models, fields, api, _
-
-# from openerp.osv import osv, fields
-from openerp import SUPERUSER_ID
-from openerp.models import NewId
-
-# from openerp.tools.translate import _
 import re
 
+from openerp import models, fields, api, _
+from openerp import SUPERUSER_ID
 from openerp.addons.website.models.website import slug
 
 
diff --git a/addons/website_livechat/models/im_livechat.py b/addons/website_livechat/models/im_livechat.py
index 805858eddf35..91cc458ccebf 100644
--- a/addons/website_livechat/models/im_livechat.py
+++ b/addons/website_livechat/models/im_livechat.py
@@ -3,8 +3,7 @@ from openerp import models, fields
 
 
 class im_livechat_channel(models.Model):
+    _name = 'im_livechat.channel'
+    _inherit = ['im_livechat.channel', 'website.published.mixin']
 
-    _inherit = 'im_livechat.channel'
-
-    website_published = fields.Boolean("Website published", default=False, help="If checked, the channel and its ratings will be display on your website")
     website_description = fields.Html("Website description", default=False, help="Description of the channel displayed on the website page")
diff --git a/addons/website_sale_delivery/models/sale_order.py b/addons/website_sale_delivery/models/sale_order.py
index 2fbe081d768f..d9821d1391c0 100644
--- a/addons/website_sale_delivery/models/sale_order.py
+++ b/addons/website_sale_delivery/models/sale_order.py
@@ -6,9 +6,10 @@ from openerp.addons import decimal_precision
 
 
 class delivery_carrier(orm.Model):
-    _inherit = 'delivery.carrier'
+    _name = 'delivery.carrier'
+    _inherit = ['delivery.carrier', 'website.published.mixin']
+
     _columns = {
-        'website_published': fields.boolean('Available in the website', copy=False),
         'website_description': fields.text('Description for the website'),
     }
     _defaults = {
diff --git a/addons/website_slides/controllers/main.py b/addons/website_slides/controllers/main.py
index dc2907ec0a9d..e567bdf93c0c 100644
--- a/addons/website_slides/controllers/main.py
+++ b/addons/website_slides/controllers/main.py
@@ -260,7 +260,7 @@ class website_slides(http.Controller):
             return {
                 'img_src': '/website/image/slide.slide/%s/image_thumb' % (slide.id),
                 'caption': slide.name,
-                'url': slide.share_url
+                'url': slide.website_url
             }
         vals = map(slide_mapped_dict, slide.get_related_slides(slides_to_suggest))
         add_more_slide = slides_to_suggest - len(vals)
diff --git a/addons/website_slides/data/website_slides_data.xml b/addons/website_slides/data/website_slides_data.xml
index 399a6a76e6de..04372a644e44 100644
--- a/addons/website_slides/data/website_slides_data.xml
+++ b/addons/website_slides/data/website_slides_data.xml
@@ -42,12 +42,12 @@
         </td>
     </tr><tr>
         <td style="width: 600px; vertical-align:top; text-align:center; background-color:#FFFFF; color:#414141">
-            <a href="${object.share_url}" style="color: #a24689;">
+            <a href="${object.website_url}" style="color: #a24689;">
                 <img alt="${object.name}" src="${ctx['base_url']}/website/image/slide.slide/${object.id}/image" style="height:auto; width:500px; background-color: #cccccc; margin: 16px;">
             </a>
-            <p style="font-size:24px; font-weight:bold"><a href="${object.share_url}">${object.name}</a></p>
+            <p style="font-size:24px; font-weight:bold"><a href="${object.website_url}">${object.name}</a></p>
             <p style="color: #ccc;">Published on ${object.write_date}</p>
-            <p><a href="${object.share_url}">Click here to open the ${object.slide_type}</a></p>
+            <p><a href="${object.website_url}">Click here to open the ${object.slide_type}</a></p>
         </td>
     </tr></tbody>
 </table>
@@ -56,7 +56,7 @@
 <table cellpadding="0" cellspacing="0" style="margin: 10px 0px 0px 0px; vertical-align: top;padding: 0px; font-family:arial; font-size:12px; color: #ffffff; background-color:#8f8f8f;">
     <tbody><tr>
         <td style="width: 600px; font-size:12px; text-align:center; padding-top:10px; color:#a24689; padding-bottom:5px">
-            <a href="${object.share_url}" style="color:#a24689">View in browser</a> |
+            <a href="${object.website_url}" style="color:#a24689">View in browser</a> |
             <a href="/page/contactus" style="color:#a24689">Contact</a>
         </td>
     </tr></tbody>
@@ -93,13 +93,13 @@
         </td>
     </tr><tr>
         <td style="width: 600px; vertical-align:top; text-align:center; background-color:#FFFFF; color:#414141">
-            <a href="${object.share_url}" style="color: #a24689;">
+            <a href="${object.website_url}" style="color: #a24689;">
                 <img alt="${object.name}" src="${ctx['base_url']}/website/image/slide.slide/${object.id}/image"
                     style="height:auto; width:500px; background-color: #cccccc; margin: 16px;">
             </a>
-            <p style="font-size:24px; font-weight:bold"><a href="${object.share_url}">${object.name}</a></p>
+            <p style="font-size:24px; font-weight:bold"><a href="${object.website_url}">${object.name}</a></p>
             <p style="color: #ccc;">Published on ${object.write_date}</p>
-            <p><a href="${object.share_url}">Click here to open the ${object.slide_type}</a></p>
+            <p><a href="${object.website_url}">Click here to open the ${object.slide_type}</a></p>
         </td>
     </tr></tbody>
 </table>
@@ -108,7 +108,7 @@
 <table cellpadding="0" cellspacing="0" style="margin: 10px 0px 0px 0px; vertical-align: top;padding: 0px; font-family:arial; font-size:12px; color: #ffffff; background-color:#8f8f8f;">
     <tbody><tr>
         <td style="width: 600px; font-size:12px; text-align:center; padding-top:10px; color:#a24689; padding-bottom:5px">
-            <a href="${object.share_url}" style="color:#a24689">View in browser</a> |
+            <a href="${object.website_url}" style="color:#a24689">View in browser</a> |
             <a href="/page/contactus" style="color:#a24689">Contact</a>
         </td>
     </tr></tbody>
diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py
index 355fcf93cbca..18e06b4e1ffd 100644
--- a/addons/website_slides/models/slides.py
+++ b/addons/website_slides/models/slides.py
@@ -21,7 +21,7 @@ class Channel(models.Model):
     channels. """
     _name = 'slide.channel'
     _description = 'Channel for Slides'
-    _inherit = ['mail.thread', 'website.seo.metadata']
+    _inherit = ['mail.thread', 'website.seo.metadata', 'website.published.mixin']
     _order = 'sequence, id'
     _order_by_strategy = {
         'most_viewed': 'total_views desc',
@@ -30,7 +30,6 @@ class Channel(models.Model):
     }
 
     name = fields.Char('Name', translate=True, required=True)
-    website_published = fields.Boolean('Published', help="Published on the website", copy=False)
     description = fields.Html('Description', translate=True)
     sequence = fields.Integer(default=10, help='Display order')
     category_ids = fields.One2many('slide.category', 'channel_id', string="Categories")
@@ -115,6 +114,14 @@ class Channel(models.Model):
         self.can_see_full = self.visibility == 'public' or bool(self.group_ids & self.env.user.groups_id)
         self.can_upload = self.can_see and (not self.upload_group_ids or bool(self.upload_group_ids & self.env.user.groups_id))
 
+    @api.multi
+    @api.depends('name')
+    def _website_url(self, name, arg):
+        res = super(Channel, self)._website_url(name, arg)
+        base_url = self.env['ir.config_parameter'].get_param('web.base.url')
+        res.update({(channel.id, '%s/slides/%s' % (base_url, slug(channel))) for channel in self})
+        return res
+
     @api.onchange('visibility')
     def change_visibility(self):
         if self.visibility == 'public':
@@ -202,7 +209,7 @@ class Slide(models.Model):
     Slide has various statistics like view count, embed count, like, dislikes """
 
     _name = 'slide.slide'
-    _inherit = ['mail.thread', 'website.seo.metadata']
+    _inherit = ['mail.thread', 'website.seo.metadata', 'website.published.mixin']
     _description = 'Slides'
 
     _PROMOTIONAL_FIELDS = [
@@ -267,7 +274,6 @@ class Slide(models.Model):
                 setattr(self, key, value)
 
     # website
-    website_published = fields.Boolean('Published', help="Published on the website", copy=False)
     date_published = fields.Datetime('Publish Date')
     website_message_ids = fields.One2many(
         'mail.message', 'res_id',
@@ -286,13 +292,6 @@ class Slide(models.Model):
         for record in self:
             record.total_views = record.slide_views + record.embed_views
 
-    share_url = fields.Char('Share URL', readonly=True, compute='_get_share_url')
-
-    def _get_share_url(self):
-        base_url = self.env['ir.config_parameter'].get_param('web.base.url')
-        for record in self:
-            record.share_url = "%s/slides/slide/%s" % (base_url, slug(record))
-
     embed_code = fields.Text('Embed Code', readonly=True, compute='_get_embed_code')
 
     def _get_embed_code(self):
@@ -310,6 +309,15 @@ class Slide(models.Model):
             else:
                 record.embed_code = False
 
+    @api.multi
+    @api.depends('name')
+    def _website_url(self, name, arg):
+        res = super(Slide, self)._website_url(name, arg)
+        base_url = self.env['ir.config_parameter'].get_param('web.base.url')
+        res.update({(slide.id, '%s/slides/slide/%s' % (base_url, slug(slide))) for slide in self})
+        return res
+
+
     @api.model
     def create(self, values):
         if not values.get('index_content'):
diff --git a/addons/website_slides/view/website_slides.xml b/addons/website_slides/view/website_slides.xml
index 959222ad80ce..cb30661aaf60 100644
--- a/addons/website_slides/view/website_slides.xml
+++ b/addons/website_slides/view/website_slides.xml
@@ -27,16 +27,16 @@
 <!-- Tools template: share on social networkds -->
 <template id='slides_share' name="Slides Media Share">
     <div class="form-group">
-        <a target="_Blank" t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{slide.share_url}">
+        <a target="_Blank" t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{slide.website_url}">
             <i class="fa fa-facebook-square fa-2x"></i>
         </a>
-        <a target="_Blank" t-attf-href="https://twitter.com/intent/tweet?text=#{slide.name}&amp;url=#{slide.share_url}">
+        <a target="_Blank" t-attf-href="https://twitter.com/intent/tweet?text=#{slide.name}&amp;url=#{slide.website_url}">
             <i class="fa fa-twitter-square fa-2x"></i>
         </a>
-        <a target="_Blank" t-attf-href="http://www.linkedin.com/shareArticle?mini=true&amp;url=#{slide.share_url}&amp;title=#{slide.name}&amp;">
+        <a target="_Blank" t-attf-href="http://www.linkedin.com/shareArticle?mini=true&amp;url=#{slide.website_url}&amp;title=#{slide.name}&amp;">
             <i class="fa fa-linkedin-square fa-2x"></i>
         </a>
-        <a target="_Blank" t-attf-href="https://plus.google.com/share?url=#{slide.share_url}">
+        <a target="_Blank" t-attf-href="https://plus.google.com/share?url=#{slide.website_url}">
             <i class="fa fa-google-plus-square fa-2x"></i>
         </a>
     </div>
@@ -381,7 +381,7 @@
         <t t-if="not private">
             <meta property="og:title" t-att-content="slide.name" />
             <meta property="og:type" content="website" />
-            <meta property="og:url" t-att-content="slide.share_url" />
+            <meta property="og:url" t-att-content="slide.website_url" />
             <meta property="og:image" t-attf-content="#{request.httprequest.host_url}/website/image/slide.slide/#{slide.id}/image_thumb"/>
             <meta property="og:description" t-att-content="slide.description" />
         </t>
@@ -731,7 +731,7 @@
     <h4 class="mt0">Share on Social Networks</h4>
     <t t-call="website_slides.slides_share"/>
     <h4 class="mt0">Share Link</h4>
-    <input type="text" class="form-control" t-att-value="slide.share_url" readonly="readonly" onClick="this.select();"/>
+    <input type="text" class="form-control" t-att-value="slide.website_url" readonly="readonly" onClick="this.select();"/>
     <span class="help-block">Use permanent link to share in social media</span>
 </template>
 
diff --git a/addons/website_slides/view/website_slides_backend.xml b/addons/website_slides/view/website_slides_backend.xml
index 3266dacf3f4d..d2c5fea0a97a 100644
--- a/addons/website_slides/view/website_slides_backend.xml
+++ b/addons/website_slides/view/website_slides_backend.xml
@@ -42,6 +42,12 @@
                 <form string="Slide">
                     <sheet>
                         <field name="image" widget="image" class="oe_left oe_avatar" options='{"preview_image": "image_thumb"}'/>
+                        <div class="oe_right oe_button_box" name="buttons">
+                            <button class="oe_inline oe_stat_button" name="open_website_url"
+                                    type="object" icon="fa-globe">
+                                <field name="website_published" widget="website_button"/>
+                            </button>
+                        </div>
                         <div class="oe_title oe_left">
                             <div class="oe_edit_only">
                                 <label for="name" string="Name"/>
@@ -51,13 +57,10 @@
                             </h1>
                             <field name="tag_ids" widget="many2many_tags" placeholder="Tags..."/>
                         </div>
-                        <div class="oe_right oe_button_box" name="buttons">
-                            <field name="website_published" class="pull-right" widget="website_button"/>
-                        </div>
                         <group>
                             <field name="channel_id"/>
                             <field name="category_id" context="{'default_channel_id': channel_id}"/>
-                            <field name="share_url"/>
+                            <field name="website_url"/>
                         </group>
                         <notebook>
                             <page string="Description">
@@ -201,7 +204,10 @@
                             </h1>
                         </div>
                         <div class="oe_right oe_button_box" name="buttons">
-                            <field name="website_published" class="pull-right" widget="website_button"/>
+                            <button class="oe_inline oe_stat_button" name="open_website_url"
+                                    type="object" icon="fa-globe">
+                                <field name="website_published" widget="website_button"/>
+                            </button>
                         </div>
                         <field name="category_ids" widget="many2many_tags" placeholder="Categories" context="{'default_channel_id': active_id}"
                             domain="[('channel_id','=', active_id)]"/>
diff --git a/addons/website_slides/view/website_slides_embed.xml b/addons/website_slides/view/website_slides_embed.xml
index ea57412698c2..8b876293b4d1 100644
--- a/addons/website_slides/view/website_slides_embed.xml
+++ b/addons/website_slides/view/website_slides_embed.xml
@@ -115,7 +115,7 @@
                             <div class="row">
                                 <div class="col-lg-8 col-md-8 col-sm-4 col-xs-4 text-left">
                                     <div class="oe_slides_ellipsis">
-                                        <a target="_new" t-att-href="slide.share_url">
+                                        <a target="_new" t-att-href="slide.website_url">
                                             <span  t-esc="slide.name" t-attf-title="#{slide.name}"/>
                                         </a>
                                     </div>
@@ -152,7 +152,7 @@
                         <div id="slide_suggest" class="oe_slide_embed_option">
                             <t t-foreach="related_slides" t-as="suggest_slide">
                                 <div class="col-md-4 col-sm-4 col-xs-4 oe_slides_suggestion_media">
-                                    <a t-att-href="suggest_slide.share_url" target="_new">
+                                    <a t-att-href="suggest_slide.website_url" target="_new">
                                         <div class="oe_slides_suggestion_caption">
                                             <h4><t t-esc="suggest_slide.name"/></h4>
                                         </div>
-- 
GitLab