Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Some source from login.js
- "use strict";
- var FADE_DURATION = .45;
- var FADE_DELAY = 20;
- var AJAX_TIMEOUT = 3e4;
- var LOCALE_FADES = [];
- var HAS_CSS_OPACITY = "opacity" in document.body.style;
- var login_form = DOM.get("login_form");
- var login_username_el = DOM.get("user");
- var login_password_el = DOM.get("pass");
- var login_submit_el = DOM.get("login_submit");
- var goto_app = DOM.get("goto_app");
- var goto_uri = DOM.get("goto_uri");
- var div_cache = {
- "login-page": DOM.get("login-page") || false,
- "locale-container": DOM.get("locale-container") || false,
- "login-container": DOM.get("login-container") || false,
- "locale-footer": DOM.get("locale-footer") || false,
- "content-cell": DOM.get("content-container") || false,
- invalid: DOM.get("invalid") || false
- };
- var content_cell = div_cache["content-cell"];
- if (div_cache["locale-footer"]) div_cache["locale-footer"].style.display = "block";
- var reset_form = DOM.get("reset_form");
- var reset_username_el = DOM.get("reset_pass_username");
- var RESET_FADES = [];
- var show_reset = function() {
- if (!reset_username_el.value) reset_username_el.value = login_username_el.value;
- while (RESET_FADES.length) clearInterval(RESET_FADES.shift());
- RESET_FADES.push(fade_in(reset_form));
- RESET_FADES.push(fade_out(login_form));
- reset_username_el.focus()
- };
- var hide_reset = function() {
- while (RESET_FADES.length) clearInterval(RESET_FADES.shift());
- RESET_FADES.push(fade_in(login_form));
- RESET_FADES.push(fade_out(reset_form));
- login_username_el.focus()
- };
- function toggle_locales(show_locales) {
- while (LOCALE_FADES.length) clearInterval(LOCALE_FADES.shift());
- var newly_shown = div_cache[show_locales ? "locale-container" : "login-container"];
- set_opacity(newly_shown, 0);
- if (HAS_CSS_OPACITY) {
- content_cell.replaceChild(newly_shown, content_cell.children[0])
- } else {
- var old = content_cell.children[0];
- content_cell.insertBefore(newly_shown, old);
- newly_shown.style.display = "";
- old.style.display = "none"
- }
- LOCALE_FADES.push(fade_in(newly_shown));
- LOCALE_FADES.push((show_locales ? fade_out : fade_in)("locale-footer"))
- }
- if (HAS_CSS_OPACITY) {
- var set_opacity = function set_opacity(el, opacity) {
- el.style.opacity = opacity
- }
- } else {
- var filter_regex = /(DXImageTransform\.Microsoft\.Alpha\()[^)]*\)/;
- var set_opacity = function set_opacity(el, opacity) {
- var filter_text = el.currentStyle.filter;
- if (!filter_text) {
- el.style.filter = "progid:DXImageTransform.Microsoft.Alpha(enabled=true)"
- } else if (!filter_regex.test(filter_text)) {
- el.style.filter += " progid:DXImageTransform.Microsoft.Alpha(enabled=true)"
- } else {
- var new_filter = filter_text.replace(filter_regex, "$1enabled=true)");
- if (new_filter !== filter_text) el.style.filter = new_filter
- }
- try {
- el.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity * 100
- } catch (e) {
- try {
- el.filters.item("alpha").opacity = opacity * 100
- } catch (error) {}
- }
- }
- }
- function fade_in(el, duration, _fade_out_instead) {
- el = div_cache[el] || DOM.get(el) || el;
- var style_obj = el.style;
- var interval;
- var cur_style = window.getComputedStyle ? getComputedStyle(el, null) : el.currentStyle;
- var visibility = cur_style.visibility;
- var start_opacity;
- if (el.offsetWidth && visibility !== "hidden") {
- if (window.getComputedStyle) {
- start_opacity = Number(cur_style.opacity)
- } else {
- try {
- start_opacity = el.filters.item("DXImageTransform.Microsoft.Alpha").opacity
- } catch (e) {
- try {
- start_opacity = el.filters("alpha").opacity
- } catch (error) {
- start_opacity = 100
- }
- }
- start_opacity /= 100
- }
- if (!start_opacity) start_opacity = 0
- } else {
- start_opacity = 0;
- set_opacity(el, 0)
- }
- if (_fade_out_instead && start_opacity < .01) {
- if (start_opacity) set_opacity(el, 0);
- return
- }
- if (!duration) duration = FADE_DURATION;
- var duration_ms = duration * 1e3;
- var start = new Date;
- var end;
- if (_fade_out_instead) {
- end = duration_ms + start.getTime()
- } else {
- style_obj.visibility = "visible"
- }
- var fader = function() {
- var opacity;
- if (_fade_out_instead) {
- opacity = start_opacity * (end - new Date) / duration_ms;
- if (opacity <= 0) {
- opacity = 0;
- clearInterval(interval);
- style_obj.visibility = "hidden"
- }
- } else {
- opacity = start_opacity + (1 - start_opacity) * (new Date - start) / duration_ms;
- if (opacity >= 1) {
- opacity = 1;
- clearInterval(interval)
- }
- }
- set_opacity(el, opacity)
- };
- fader();
- interval = setInterval(fader, FADE_DELAY);
- return interval
- }
- function fade_out(el, timeout) {
- return fade_in(el, timeout, true)
- }
- function ajaxObject(url, callbackFunction) {
- this._url = url;
- this._callback = callbackFunction || function() {}
- }
- ajaxObject.prototype.updating = false;
- ajaxObject.prototype.abort = function() {
- if (this.updating) {
- this.AJAX.abort();
- delete this.AJAX
- }
- };
- ajaxObject.prototype.update = function(passData, postMethod) {
- if (this.AJAX) return false;
- var ajax = null;
- if (window.XMLHttpRequest) {
- ajax = new XMLHttpRequest
- } else if (window.ActiveXObject) {
- ajax = new ActiveXObject("Microsoft.XMLHTTP")
- } else {
- return false
- }
- var timeout;
- var that = this;
- ajax.onreadystatechange = function() {
- if (ajax.readyState == 4) {
- clearTimeout(timeout);
- that.updating = false;
- that._callback(ajax);
- delete that.AJAX
- }
- };
- try {
- var uri;
- timeout = setTimeout(function() {
- that.abort();
- show_status(MESSAGES.ajax_timeout, "error")
- }, AJAX_TIMEOUT);
- if (/post/i.test(postMethod)) {
- uri = this._url + "?login_only=1";
- ajax.open("POST", uri, true);
- ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- ajax.send(passData)
- } else {
- uri = this._url + "?" + passData + "×tamp=" + (new Date).getTime();
- ajax.open("GET", uri, true);
- ajax.send(null)
- }
- this.AJAX = ajax;
- this.updating = true
- } catch (e) {
- login_form.submit()
- }
- return true
- };
- var _text_content = "textContent" in document.body ? "textContent" : "innerText";
- function login_results(ajax_obj) {
- var result;
- try {
- result = JSON.parse(ajax_obj && ajax_obj.responseText)
- } catch (e) {
- result = null
- }
- var response_status = ajax_obj.status;
- if (response_status === 200) {
- if (result) {
- var final_uri;
- var login_url_regex = /^\/(?:logout|login|openid_connect_callback)\/?/;
- if (result.redirect && !login_url_regex.test(result.redirect)) {
- final_uri = result.redirect
- }
- var location_obj_to_redirect;
- if (/^(?:\/cpsess[^\/]+)\/$/.test(final_uri)) {
- location_obj_to_redirect = top.location
- } else {
- if (result.security_token && top !== window) {
- for (var f = 0; f < top.frames.length; f++) {
- if (top.frames[f] !== window) {
- var href = top.frames[f].location.href.replace(/\/cpsess[.\d]+/, result.security_token);
- top.frames[f].location.href = href
- }
- }
- }
- location_obj_to_redirect = location
- }
- var redirector = function() {
- location_obj_to_redirect.href = final_uri
- };
- if (result.notices && result.notices.length) {
- show_status(MESSAGES.read_below, "warn");
- var click_form = DOM.get("clickthrough_form");
- var container = click_form.querySelector(".notices");
- for (n = 0; n < result.notices.length; n++) {
- var new_p = document.createElement("p");
- new_p.textContent = result.notices[n].content;
- container.appendChild(new_p)
- }
- click_form.onsubmit = redirector;
- fade_out(login_form);
- fade_in(click_form)
- } else {
- show_status(MESSAGES.success, "success");
- fade_out("content-container", FADE_DURATION / 2);
- redirector()
- }
- } else {
- login_form.submit()
- }
- return
- } else {
- if (parseInt(response_status / 100, 10) === 4) {
- var msg_code = result && result.message;
- show_status(MESSAGES[msg_code || "invalid_login"] || MESSAGES.invalid_login, "error");
- set_status_timeout()
- } else {
- show_status(MESSAGES.network_error, "error")
- }
- show_links(document.body);
- login_button.release();
- return
- }
- }
- var level_classes = {
- info: "info-notice",
- error: "error-notice",
- success: "success-notice",
- warn: "warn-notice"
- };
- var levels_regex = "";
- for (var lv in level_classes) levels_regex += "|" + level_classes[lv];
- levels_regex = new RegExp("\\b(?:" + levels_regex.slice(1) + ")\\b");
- function show_status(message, level) {
- DOM.get("login-status-message")[_text_content] = message;
- var container = DOM.get("login-status");
- var this_class = level && level_classes[level] || level_classes.info;
- var el_class = container.className.replace(levels_regex, this_class);
- container.className = el_class;
- fade_in(container);
- reset_status_timeout()
- }
- var STATUS_TIMEOUT = null;
- function reset_status_timeout() {
- clearTimeout(STATUS_TIMEOUT);
- STATUS_TIMEOUT = null
- }
- function set_status_timeout(delay) {
- STATUS_TIMEOUT = setTimeout(function() {
- fade_out("login-status")
- }, delay || 8e3)
- }
- var LOGIN_SUBMIT_OK = true;
- document.body.onkeyup = function() {
- LOGIN_SUBMIT_OK = true
- };
- document.body.onmousedown = function() {
- LOGIN_SUBMIT_OK = true
- };
- function do_login() {
- if (LOGIN_SUBMIT_OK) {
- LOGIN_SUBMIT_OK = false;
- hide_links(document.body);
- login_button.suppress();
- show_status(MESSAGES.authenticating, "info");
- var goto_app_query = goto_app && goto_app.value ? "&goto_app=" + encodeURIComponent(goto_app.value) : "";
- var goto_uri_query = goto_uri && goto_uri.value ? "&goto_uri=" + encodeURIComponent(goto_uri.value) : "";
- var ajax_login = new ajaxObject(login_form.action, login_results);
- ajax_login.update("user=" + encodeURIComponent(login_username_el.value) + "&pass=" + encodeURIComponent(login_password_el.value) + goto_app_query + goto_uri_query, "POST")
- }
- return false
- }
- function _set_links_style(el, prop, val) {
- var links = el.getElementsByTagName("a");
- for (var lk = links.length - 1; lk >= 0; lk--) {
- links[lk].style[prop] = val
- }
- }
- function hide_links(el) {
- _set_links_style(el, "visibility", "hidden")
- }
- function show_links(el) {
- _set_links_style(el, "visibility", "")
- }
- var login_button = {
- button: login_submit_el,
- _suppressed_disabled: null,
- suppress: function() {
- if (this._suppressed_disabled === null) {
- this._suppressed_disabled = this.button.disabled;
- this.button.disabled = true
- }
- },
- release: function() {
- if (this._suppressed_disabled !== null) {
- this.button.disabled = this._suppressed_disabled;
- this._suppressed_disabled = null
- }
- },
- queue_disabled: function(state) {
- if (this._suppressed_disabled === null) {
- this.button.disabled = state
- } else {
- this._suppressed_disabled = state
- }
- }
- };
- if (!window.JSON) {
- login_button.suppress();
- var new_script = document.createElement("script");
- new_script.onreadystatechange = function() {
- if (this.readyState === "loaded" || this.readyState === "complete") {
- this.onreadystatechange = null;
- window.JSON = {
- parse: window.jsonParse
- };
- window.jsonParse = undefined;
- login_button.release()
- }
- };
- new_script.src = "/unprotected/json-minified.js";
- document.getElementsByTagName("head")[0].appendChild(new_script)
- }
- try {
- login_form.onsubmit = do_login;
- set_opacity(DOM.get("login-wrapper"), 0);
- LOCALE_FADES.push(fade_in("login-wrapper"));
- var preload = document.createElement("div");
- preload.id = "preload_images";
- document.body.insertBefore(preload, document.body.firstChild);
- if (window.IS_LOGOUT) {
- set_status_timeout(1e4)
- } else if (/(?:\?|&)locale=[^&]/.test(location.search)) {
- show_status(MESSAGES.session_locale)
- }
- setTimeout(function() {
- login_username_el.focus()
- }, 100)
- } catch (e) {
- if (window.console) console.warn(e)
- }
- //jstz.min.js
- /*! jstz - v1.0.4 - 2012-12-18 */
- (function(e) {
- var t = function() {
- "use strict";
- var e = "s",
- n = function(e) {
- var t = -e.getTimezoneOffset();
- return t !== null ? t : 0
- },
- r = function(e, t, n) {
- var r = new Date;
- return e !== undefined && r.setFullYear(e), r.setDate(n), r.setMonth(t), r
- },
- i = function(e) {
- return n(r(e, 0, 2))
- },
- s = function(e) {
- return n(r(e, 5, 2))
- },
- o = function(e) {
- var t = e.getMonth() > 7 ? s(e.getFullYear()) : i(e.getFullYear()),
- r = n(e);
- return t - r !== 0
- },
- u = function() {
- var t = i(),
- n = s(),
- r = i() - s();
- return r < 0 ? t + ",1" : r > 0 ? n + ",1," + e : t + ",0"
- },
- a = function() {
- var e = u();
- return new t.TimeZone(t.olson.timezones[e])
- },
- f = function(e) {
- var t = new Date(2010, 6, 15, 1, 0, 0, 0),
- n = {
- "America/Denver": new Date(2011, 2, 13, 3, 0, 0, 0),
- "America/Mazatlan": new Date(2011, 3, 3, 3, 0, 0, 0),
- "America/Chicago": new Date(2011, 2, 13, 3, 0, 0, 0),
- "America/Mexico_City": new Date(2011, 3, 3, 3, 0, 0, 0),
- "America/Asuncion": new Date(2012, 9, 7, 3, 0, 0, 0),
- "America/Santiago": new Date(2012, 9, 3, 3, 0, 0, 0),
- "America/Campo_Grande": new Date(2012, 9, 21, 5, 0, 0, 0),
- "America/Montevideo": new Date(2011, 9, 2, 3, 0, 0, 0),
- "America/Sao_Paulo": new Date(2011, 9, 16, 5, 0, 0, 0),
- "America/Los_Angeles": new Date(2011, 2, 13, 8, 0, 0, 0),
- "America/Santa_Isabel": new Date(2011, 3, 5, 8, 0, 0, 0),
- "America/Havana": new Date(2012, 2, 10, 2, 0, 0, 0),
- "America/New_York": new Date(2012, 2, 10, 7, 0, 0, 0),
- "Asia/Beirut": new Date(2011, 2, 27, 1, 0, 0, 0),
- "Europe/Helsinki": new Date(2011, 2, 27, 4, 0, 0, 0),
- "Europe/Istanbul": new Date(2011, 2, 28, 5, 0, 0, 0),
- "Asia/Damascus": new Date(2011, 3, 1, 2, 0, 0, 0),
- "Asia/Jerusalem": new Date(2011, 3, 1, 6, 0, 0, 0),
- "Asia/Gaza": new Date(2009, 2, 28, 0, 30, 0, 0),
- "Africa/Cairo": new Date(2009, 3, 25, 0, 30, 0, 0),
- "Pacific/Auckland": new Date(2011, 8, 26, 7, 0, 0, 0),
- "Pacific/Fiji": new Date(2010, 11, 29, 23, 0, 0, 0),
- "America/Halifax": new Date(2011, 2, 13, 6, 0, 0, 0),
- "America/Goose_Bay": new Date(2011, 2, 13, 2, 1, 0, 0),
- "America/Miquelon": new Date(2011, 2, 13, 5, 0, 0, 0),
- "America/Godthab": new Date(2011, 2, 27, 1, 0, 0, 0),
- "Europe/Moscow": t,
- "Asia/Yekaterinburg": t,
- "Asia/Omsk": t,
- "Asia/Krasnoyarsk": t,
- "Asia/Irkutsk": t,
- "Asia/Yakutsk": t,
- "Asia/Vladivostok": t,
- "Asia/Kamchatka": t,
- "Europe/Minsk": t,
- "Australia/Perth": new Date(2008, 10, 1, 1, 0, 0, 0)
- };
- return n[e]
- };
- return {
- determine: a,
- date_is_dst: o,
- dst_start_for: f
- }
- }();
- t.TimeZone = function(e) {
- "use strict";
- var n = {
- "America/Denver": ["America/Denver", "America/Mazatlan"],
- "America/Chicago": ["America/Chicago", "America/Mexico_City"],
- "America/Santiago": ["America/Santiago", "America/Asuncion", "America/Campo_Grande"],
- "America/Montevideo": ["America/Montevideo", "America/Sao_Paulo"],
- "Asia/Beirut": ["Asia/Beirut", "Europe/Helsinki", "Europe/Istanbul", "Asia/Damascus", "Asia/Jerusalem", "Asia/Gaza"],
- "Pacific/Auckland": ["Pacific/Auckland", "Pacific/Fiji"],
- "America/Los_Angeles": ["America/Los_Angeles", "America/Santa_Isabel"],
- "America/New_York": ["America/Havana", "America/New_York"],
- "America/Halifax": ["America/Goose_Bay", "America/Halifax"],
- "America/Godthab": ["America/Miquelon", "America/Godthab"],
- "Asia/Dubai": ["Europe/Moscow"],
- "Asia/Dhaka": ["Asia/Yekaterinburg"],
- "Asia/Jakarta": ["Asia/Omsk"],
- "Asia/Shanghai": ["Asia/Krasnoyarsk", "Australia/Perth"],
- "Asia/Tokyo": ["Asia/Irkutsk"],
- "Australia/Brisbane": ["Asia/Yakutsk"],
- "Pacific/Noumea": ["Asia/Vladivostok"],
- "Pacific/Tarawa": ["Asia/Kamchatka"],
- "Africa/Johannesburg": ["Asia/Gaza", "Africa/Cairo"],
- "Asia/Baghdad": ["Europe/Minsk"]
- },
- r = e,
- i = function() {
- var e = n[r],
- i = e.length,
- s = 0,
- o = e[0];
- for (; s < i; s += 1) {
- o = e[s];
- if (t.date_is_dst(t.dst_start_for(o))) {
- r = o;
- return
- }
- }
- },
- s = function() {
- return typeof n[r] != "undefined"
- };
- return s() && i(), {
- name: function() {
- return r
- }
- }
- }, t.olson = {}, t.olson.timezones = {
- "-720,0": "Etc/GMT+12",
- "-660,0": "Pacific/Pago_Pago",
- "-600,1": "America/Adak",
- "-600,0": "Pacific/Honolulu",
- "-570,0": "Pacific/Marquesas",
- "-540,0": "Pacific/Gambier",
- "-540,1": "America/Anchorage",
- "-480,1": "America/Los_Angeles",
- "-480,0": "Pacific/Pitcairn",
- "-420,0": "America/Phoenix",
- "-420,1": "America/Denver",
- "-360,0": "America/Guatemala",
- "-360,1": "America/Chicago",
- "-360,1,s": "Pacific/Easter",
- "-300,0": "America/Bogota",
- "-300,1": "America/New_York",
- "-270,0": "America/Caracas",
- "-240,1": "America/Halifax",
- "-240,0": "America/Santo_Domingo",
- "-240,1,s": "America/Santiago",
- "-210,1": "America/St_Johns",
- "-180,1": "America/Godthab",
- "-180,0": "America/Argentina/Buenos_Aires",
- "-180,1,s": "America/Montevideo",
- "-120,0": "Etc/GMT+2",
- "-120,1": "Etc/GMT+2",
- "-60,1": "Atlantic/Azores",
- "-60,0": "Atlantic/Cape_Verde",
- "0,0": "Etc/UTC",
- "0,1": "Europe/London",
- "60,1": "Europe/Berlin",
- "60,0": "Africa/Lagos",
- "60,1,s": "Africa/Windhoek",
- "120,1": "Asia/Beirut",
- "120,0": "Africa/Johannesburg",
- "180,0": "Asia/Baghdad",
- "180,1": "Europe/Moscow",
- "210,1": "Asia/Tehran",
- "240,0": "Asia/Dubai",
- "240,1": "Asia/Baku",
- "270,0": "Asia/Kabul",
- "300,1": "Asia/Yekaterinburg",
- "300,0": "Asia/Karachi",
- "330,0": "Asia/Kolkata",
- "345,0": "Asia/Kathmandu",
- "360,0": "Asia/Dhaka",
- "360,1": "Asia/Omsk",
- "390,0": "Asia/Rangoon",
- "420,1": "Asia/Krasnoyarsk",
- "420,0": "Asia/Jakarta",
- "480,0": "Asia/Shanghai",
- "480,1": "Asia/Irkutsk",
- "525,0": "Australia/Eucla",
- "525,1,s": "Australia/Eucla",
- "540,1": "Asia/Yakutsk",
- "540,0": "Asia/Tokyo",
- "570,0": "Australia/Darwin",
- "570,1,s": "Australia/Adelaide",
- "600,0": "Australia/Brisbane",
- "600,1": "Asia/Vladivostok",
- "600,1,s": "Australia/Sydney",
- "630,1,s": "Australia/Lord_Howe",
- "660,1": "Asia/Kamchatka",
- "660,0": "Pacific/Noumea",
- "690,0": "Pacific/Norfolk",
- "720,1,s": "Pacific/Auckland",
- "720,0": "Pacific/Tarawa",
- "765,1,s": "Pacific/Chatham",
- "780,0": "Pacific/Tongatapu",
- "780,1,s": "Pacific/Apia",
- "840,0": "Pacific/Kiritimati"
- }, typeof exports != "undefined" ? exports.jstz = t : e.jstz = t
- })(this);
- //cptimezone_optimized.js
- (function(window) {
- "use strict";
- var JSTZ_RELATIVE_PATH = "sharedjs/jstz.min.js";
- var TIMEZONE_COOKIE = "timezone";
- var COOKIE_TIMEZONE_MISMATCH_CLASS = "if-timezone-cookie-needs-update";
- var DETECTED_TZ_CLASS = "detected-timezone";
- var SHOWN_CLASS = "shown";
- function _get_cookie(sKey) {
- return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null
- }
- function _detect_timezone() {
- return window.jstz.determine().name()
- }
- function reset_timezone_and_reload() {
- return reset_timezone(location.reload.bind(location))
- }
- function _set_cookie(callback) {
- document.cookie = TIMEZONE_COOKIE + "=" + _detect_timezone() + "; path=/";
- if (callback) {
- callback()
- }
- }
- function set_timezone_if_unset(on_success) {
- return !_get_cookie(TIMEZONE_COOKIE) && reset_timezone(on_success)
- }
- function reset_timezone(on_success) {
- _set_cookie(on_success);
- return true
- }
- function set_timezone_and_reload_if_unset() {
- return set_timezone_if_unset(location.reload.bind(location))
- }
- function show_cookie_timezone_mismatch_nodes() {
- var detected_tz = _detect_timezone();
- if (detected_tz !== _get_cookie(TIMEZONE_COOKIE)) {
- var detected_nodes = document.querySelectorAll("." + DETECTED_TZ_CLASS);
- [].forEach.call(detected_nodes, function(n) {
- n.textContent = detected_tz
- });
- var show_nodes = document.querySelectorAll("." + COOKIE_TIMEZONE_MISMATCH_CLASS);
- [].forEach.call(show_nodes, function(n) {
- n.className += " " + SHOWN_CLASS
- })
- }
- }
- window.CPTimezone = {
- show_cookie_timezone_mismatch_nodes: show_cookie_timezone_mismatch_nodes,
- reset_timezone_and_reload: reset_timezone_and_reload,
- reset_timezone: reset_timezone,
- set_timezone_and_reload_if_unset: set_timezone_and_reload_if_unset
- }
- })(window);
- CPTimezone.reset_timezone();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement