Liferay.Session = { autoExtend: false, sessionTimeout: 0, sessionTimeoutWarning: 0, redirectOnExpire: false, init: function(params) { var instance = this; params = params || {}; instance.autoExtend = params.autoExtend || instance.autoExtend; instance._timeout = params.timeout || instance.sessionTimeout; instance._warning = params.timeoutWarning || instance.sessionTimeoutWarning; instance.sessionTimeout = instance._timeout * 60000; instance.sessionTimeoutWarning = instance._warning * 60000; instance._timeoutDiff = instance.sessionTimeout - instance.sessionTimeoutWarning; instance._currentTime = instance.sessionTimeoutWarning; instance.redirectOnExpire = params.redirectOnExpire || instance.redirectOnExpire; instance._cookieKey = 'LFR_SESSION_STATE_' + themeDisplay.getUserId(); instance.banner = new jQuery; var urlBase = themeDisplay.getPathMain() + '/portal/'; instance._sessionUrls = { expire: urlBase + 'expire_session', extend: urlBase + 'extend_session' }; instance._stateCheck = setTimeout( function() { instance.checkState(); }, instance._timeoutDiff); var timeoutMinutes = instance._timeout; var timeLeft = instance._warning; instance._warningText = Liferay.Language.get('warning-your-session-will-expire', ['[$SPAN$]', timeoutMinutes]); instance._warningText = instance._warningText.replace(/\[\$SPAN\$\]/, ''); instance._toggleText = { hide: Liferay.Language.get('hide'), show: Liferay.Language.get('show') }; instance._expiredText = Liferay.Language.get('warning-your-session-has-expired'); instance._extendText = Liferay.Language.get('extend'); instance.setCookie(); }, checkState: function() { var instance = this; var currentTime = new Date().getTime(); var sessionState = instance.getCookie(); var newWaitTime = instance.sessionTimeoutWarning; var timeDiff = 0; clearTimeout(instance._stateCheck); if (sessionState == 'expired') { instance.expire(); } else { timeDiff = currentTime - sessionState; if (!instance.autoExtend) { if ((timeDiff + 100) >= instance.sessionTimeoutWarning) { instance.warn(); } else { newWaitTime = (instance.sessionTimeoutWarning - timeDiff) + 10000; instance._stateCheck = setTimeout( function() { instance.checkState(); }, newWaitTime); } } else { instance.extend(); } } }, getCookie: function() { var instance = this; return jQuery.cookie(instance._cookieKey) || 0; }, expire: function() { var instance = this; var banner = instance.banner; var warningText = banner.find('#session_warning_text'); document.title = instance._originalTitle; if (warningText.length) { var sessionHasExpired = instance._expiredText; warningText.html(sessionHasExpired); clearTimeout(instance._sessionExpired); var okBtn = banner.find('#ok_btn'); okBtn.click( function() { instance.notice.close(); window.location = themeDisplay.getURLHome(); } ); var cancelBtn = banner.find('#cancel_btn'); cancelBtn.hide(); jQuery.ajax( { url: instance._sessionUrls.expire } ); } instance.setCookie('expired'); if (instance.redirectOnExpire) { location.href = themeDisplay.getURLHome(); } }, extend: function() { var instance = this; if (instance._countdownTimer) { clearInterval(instance._countdownTimer); } jQuery.ajax( { url: instance._sessionUrls.extend } ); document.title = instance._originalTitle; instance._sessionWarning = setTimeout( function() { instance.warn(); }, instance.sessionTimeout); instance.setCookie(); }, setCookie: function(status) { var instance = this; var currentTime = new Date().getTime(); jQuery.cookie(instance._cookieKey, status || currentTime); }, warn: function() { var instance = this; instance.banner = new Liferay.Notice({ content: instance._warningText, closeText: instance._extendText, onClose: function() { instance.extend(); }, toggleText: false }); instance._counter(); instance._sessionExpired = setTimeout( function() { instance.expire(); }, instance.sessionTimeoutWarning); }, _counter: function() { var instance = this; var banner = instance.banner; if (banner.length) { instance._counterText = banner.find('.countdown-timer'); instance._originalTitle = document.title; var interval = 1000; instance._counterText.text(instance._setTime()); document.title = instance.banner.text(); instance._countdownTimer = setInterval( function() { var time = instance._setTime(); instance._currentTime = instance._currentTime - interval; if (instance._currentTime > 0) { instance._counterText.text(time); document.title = instance.banner.text(); } else { instance.banner.html(instance._expiredText); instance.banner.toggleClass('popup-alert-notice').toggleClass('popup-alert-warning'); if (instance._countdownTimer) { clearInterval(instance._countdownTimer); } } }, interval ); } }, _formatNumber: function(num) { var instance = this; if (!Liferay.Util.isArray(num)) { if (num <= 9) { num = '0' + num; } } else { num = jQuery.map(num, instance._formatNumber); } return num; }, _setTime: function() { var instance = this; var amount = instance._currentTime; if(amount <= 0){ } else { var days=0, hours=0, minutes=0, seconds=0, output=''; // Remove the milliseconds amount = Math.floor(amount/1000); hours = Math.floor(amount/3600); amount = amount%3600; minutes = Math.floor(amount/60); amount = amount%60; seconds = Math.floor(amount); return instance._formatNumber([hours, minutes, seconds]).join(':'); } }, _banner: [], _countdownTimer: null, _currentTime: 0, _originalTitle: '', _sessionUrls: {}, _sessionWarning: null, _sessionExpired: null, _timeout: 0, _timeoutDiff: 0, _warning: 0 };