diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index f4fc6574ed3..e0cab93db9a 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -502,15 +502,6 @@ class Website(Home): request.env['web_editor.assets'].make_scss_customization(url, values) return True - @http.route(['/website/update_visitor_timezone'], type='json', auth="public", website=True) - def update_visitor_timezone(self, timezone): - visitor_sudo = request.env['website.visitor']._get_visitor_from_request() - if visitor_sudo: - if timezone in pytz.all_timezones: - visitor_sudo.write({'timezone': timezone}) - return True - return False - # ------------------------------------------------------ # Server actions # ------------------------------------------------------ diff --git a/addons/website/models/website_visitor.py b/addons/website/models/website_visitor.py index b4950ae9aa6..223353fa7d9 100644 --- a/addons/website/models/website_visitor.py +++ b/addons/website/models/website_visitor.py @@ -3,6 +3,7 @@ from datetime import datetime, timedelta import uuid +import pytz from odoo import fields, models, api, _ from odoo.addons.base.models.res_partner import _tz_get @@ -185,7 +186,11 @@ class WebsiteVisitor(models.Model): # Cookie associated to a Partner visitor = Visitor - if force_create and not visitor: + if visitor and not visitor.timezone: + tz = self._get_visitor_timezone() + if tz: + visitor.timezone = tz + if not visitor and force_create: visitor = self._create_visitor() return visitor @@ -235,6 +240,11 @@ class WebsiteVisitor(models.Model): 'country_id': country_id, 'website_id': request.website.id, } + + tz = self._get_visitor_timezone() + if tz: + vals['timezone'] = tz + if not self.env.user._is_public(): vals['partner_id'] = self.env.user.partner_id.id vals['name'] = self.env.user.partner_id.name @@ -298,3 +308,12 @@ class WebsiteVisitor(models.Model): self.env.cr.execute(query, (date_now, self.id), log_exceptions=False) except Exception: pass + + def _get_visitor_timezone(self): + tz = request.httprequest.cookies.get('tz') if request else None + if tz in pytz.all_timezones: + return tz + elif not self.env.user._is_public(): + return self.env.user.tz + else: + return None diff --git a/addons/website/static/lib/jstz.min.js b/addons/website/static/lib/jstz.min.js index a6be0f665e2..b8441beae4b 100644 --- a/addons/website/static/lib/jstz.min.js +++ b/addons/website/static/lib/jstz.min.js @@ -1,2 +1 @@ -/* jstz.min.js Version: 1.0.6 Build date: 2015-11-04 */ -!function(e){var a=function(){"use strict";var e="s",s={DAY:864e5,HOUR:36e5,MINUTE:6e4,SECOND:1e3,BASELINE_YEAR:2014,MAX_SCORE:864e6,AMBIGUITIES:{"America/Denver":["America/Mazatlan"],"Europe/London":["Africa/Casablanca"],"America/Chicago":["America/Mexico_City"],"America/Asuncion":["America/Campo_Grande","America/Santiago"],"America/Montevideo":["America/Sao_Paulo","America/Santiago"],"Asia/Beirut":["Asia/Amman","Asia/Jerusalem","Europe/Helsinki","Asia/Damascus","Africa/Cairo","Asia/Gaza","Europe/Minsk"],"Pacific/Auckland":["Pacific/Fiji"],"America/Los_Angeles":["America/Santa_Isabel"],"America/New_York":["America/Havana"],"America/Halifax":["America/Goose_Bay"],"America/Godthab":["America/Miquelon"],"Asia/Dubai":["Asia/Yerevan"],"Asia/Jakarta":["Asia/Krasnoyarsk"],"Asia/Shanghai":["Asia/Irkutsk","Australia/Perth"],"Australia/Sydney":["Australia/Lord_Howe"],"Asia/Tokyo":["Asia/Yakutsk"],"Asia/Dhaka":["Asia/Omsk"],"Asia/Baku":["Asia/Yerevan"],"Australia/Brisbane":["Asia/Vladivostok"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Majuro":["Asia/Kamchatka","Pacific/Fiji"],"Pacific/Tongatapu":["Pacific/Apia"],"Asia/Baghdad":["Europe/Minsk","Europe/Moscow"],"Asia/Karachi":["Asia/Yekaterinburg"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"]}},i=function(e){var a=-e.getTimezoneOffset();return null!==a?a:0},r=function(){var a=i(new Date(s.BASELINE_YEAR,0,2)),r=i(new Date(s.BASELINE_YEAR,5,2)),n=a-r;return 0>n?a+",1":n>0?r+",1,"+e:a+",0"},n=function(){var e,a;if("undefined"!=typeof Intl&&"undefined"!=typeof Intl.DateTimeFormat&&(e=Intl.DateTimeFormat(),"undefined"!=typeof e&&"undefined"!=typeof e.resolvedOptions))return a=e.resolvedOptions().timeZone,a&&(a.indexOf("/")>-1||"UTC"===a)?a:void 0},o=function(e){for(var a=new Date(e,0,1,0,0,1,0).getTime(),s=new Date(e,12,31,23,59,59).getTime(),i=a,r=new Date(i).getTimezoneOffset(),n=null,o=null;s-864e5>i;){var t=new Date(i),A=t.getTimezoneOffset();A!==r&&(r>A&&(n=t),A>r&&(o=t),r=A),i+=864e5}return n&&o?{s:u(n).getTime(),e:u(o).getTime()}:!1},u=function l(e,a,i){"undefined"==typeof a&&(a=s.DAY,i=s.HOUR);for(var r=new Date(e.getTime()-a).getTime(),n=e.getTime()+a,o=new Date(r).getTimezoneOffset(),u=r,t=null;n-i>u;){var A=new Date(u),c=A.getTimezoneOffset();if(c!==o){t=A;break}u+=i}return a===s.DAY?l(t,s.HOUR,s.MINUTE):a===s.HOUR?l(t,s.MINUTE,s.SECOND):t},t=function(e,a,s,i){if("N/A"!==s)return s;if("Asia/Beirut"===a){if("Africa/Cairo"===i.name&&13983768e5===e[6].s&&14116788e5===e[6].e)return 0;if("Asia/Jerusalem"===i.name&&13959648e5===e[6].s&&14118588e5===e[6].e)return 0}else if("America/Santiago"===a){if("America/Asuncion"===i.name&&14124816e5===e[6].s&&1397358e6===e[6].e)return 0;if("America/Campo_Grande"===i.name&&14136912e5===e[6].s&&13925196e5===e[6].e)return 0}else if("America/Montevideo"===a){if("America/Sao_Paulo"===i.name&&14136876e5===e[6].s&&1392516e6===e[6].e)return 0}else if("Pacific/Auckland"===a&&"Pacific/Fiji"===i.name&&14142456e5===e[6].s&&13961016e5===e[6].e)return 0;return s},A=function(e,i){for(var r=function(a){for(var r=0,n=0;n=a.rules[n].s&&e[n].e<=a.rules[n].e)){r="N/A";break}if(r=0,r+=Math.abs(e[n].s-a.rules[n].s),r+=Math.abs(a.rules[n].e-e[n].e),r>s.MAX_SCORE){r="N/A";break}}return r=t(e,i,r,a)},n={},o=a.olson.dst_rules.zones,u=o.length,A=s.AMBIGUITIES[i],c=0;u>c;c++){var m=o[c],l=r(o[c]);"N/A"!==l&&(n[m.name]=l)}for(var f in n)if(n.hasOwnProperty(f))for(var d=0;d