From f5f067f1f3a76639c7436b2ca3312fc59cd2c155 Mon Sep 17 00:00:00 2001 From: RainLoop Team Date: Thu, 23 Apr 2015 01:33:02 +0400 Subject: [PATCH] Small fixes --- dev/Knoin/Knoin.js | 6 ++++-- dev/Screen/AbstractSettings.js | 1 + dev/Styles/MessageList.less | 21 ++++++++++++++----- dev/View/Popup/Languages.js | 15 ++++++------- dev/View/User/MailBox/MessageList.js | 12 ++++++++++- .../0.0.0/app/libraries/MailSo/Base/Http.php | 8 +++---- .../0.0.0/app/libraries/MailSo/Log/Driver.php | 17 +++++++++++++-- .../0.0.0/app/libraries/MailSo/Log/Logger.php | 15 +++++++++++++ .../0.0.0/app/libraries/RainLoop/Actions.php | 15 +++++++++---- .../libraries/RainLoop/Config/Application.php | 2 ++ .../templates/Views/User/MailMessageList.html | 2 +- 11 files changed, 88 insertions(+), 26 deletions(-) diff --git a/dev/Knoin/Knoin.js b/dev/Knoin/Knoin.js index c8052eda5..42744c49f 100644 --- a/dev/Knoin/Knoin.js +++ b/dev/Knoin/Knoin.js @@ -170,8 +170,6 @@ Globals.popupVisibilityNames.push(this.viewModelName); oViewModel.viewModelDom.css('z-index', 3000 + Globals.popupVisibilityNames().length + 10); -// Utils.delegateRun(this, 'onShow'); // moved to showScreenPopup function (for parameters) - if (this.onShowTrigger) { this.onShowTrigger(!this.onShowTrigger()); @@ -257,6 +255,8 @@ if (ViewModelClassToShow.__vm && ViewModelClassToShow.__dom) { + Utils.delegateRun(ViewModelClassToShow.__vm, 'onBeforeShow', aParameters || []); + ViewModelClassToShow.__vm.modalVisibility(true); Utils.delegateRun(ViewModelClassToShow.__vm, 'onShow', aParameters || []); @@ -383,6 +383,8 @@ if (ViewModelClass.__vm && ViewModelClass.__dom && 'Popups' !== ViewModelClass.__vm.viewModelPosition()) { + Utils.delegateRun(ViewModelClass.__vm, 'onBeforeShow'); + ViewModelClass.__dom.show(); ViewModelClass.__vm.viewModelVisibility(true); diff --git a/dev/Screen/AbstractSettings.js b/dev/Screen/AbstractSettings.js index 0727236f4..27d179cd2 100644 --- a/dev/Screen/AbstractSettings.js +++ b/dev/Screen/AbstractSettings.js @@ -131,6 +131,7 @@ // show if (self.oCurrentSubScreen) { + Utils.delegateRun(self.oCurrentSubScreen, 'onBeforeShow'); self.oCurrentSubScreen.viewModelDom.show(); Utils.delegateRun(self.oCurrentSubScreen, 'onShow'); Utils.delegateRun(self.oCurrentSubScreen, 'onShowWithDelay', [], 200); diff --git a/dev/Styles/MessageList.less b/dev/Styles/MessageList.less index 78eba39e2..29ad90ad7 100644 --- a/dev/Styles/MessageList.less +++ b/dev/Styles/MessageList.less @@ -180,10 +180,12 @@ html.rl-no-preview-pane { .listThreadUidDesc { font-size: 16px; - padding: 7px 20px 5px 20px; - background-color: #999; + padding: 7px 20px 6px 20px; + background-color: #aaa; + border-bottom: 1px solid #888; color: #fff; cursor: pointer; + text-shadow: 0 1px 0 #000; text-align: center; } @@ -410,16 +412,25 @@ html.rl-no-preview-pane { .threads-len { .threads-len-data { - background-color: #999; - color: #fff; + + background-color: #eee; + color: #666; border-radius: 6px; - padding: 1px 2px 1px 5px; + padding: 2px 0px 1px 6px; margin-right: 2px; + border: 1px solid #ccc; [class^="icon-"], [class*=" icon-"] { font-size: 14px; } + + &:hover { + background-color: #aaa; + border-color: #666; + text-shadow: 0 1px 0 #999; + color: #fff; + } } } diff --git a/dev/View/Popup/Languages.js b/dev/View/Popup/Languages.js index e82bc9cf8..870d8850e 100644 --- a/dev/View/Popup/Languages.js +++ b/dev/View/Popup/Languages.js @@ -64,6 +64,14 @@ }); }; + LanguagesPopupView.prototype.onBeforeShow = function () + { + this.fLang = null; + this.userLanguage(''); + + this.langs([]); + }; + LanguagesPopupView.prototype.onShow = function (fLanguage, aLangs, sUserLanguage) { this.fLang = fLanguage; @@ -72,13 +80,6 @@ this.langs(aLangs); }; - LanguagesPopupView.prototype.onHide = function () - { - this.fLang = null; - this.userLanguage(''); - this.langs([]); - }; - LanguagesPopupView.prototype.changeLanguage = function (sLang) { if (this.fLang) diff --git a/dev/View/User/MailBox/MessageList.js b/dev/View/User/MailBox/MessageList.js index 373e5dc27..c61332277 100644 --- a/dev/View/User/MailBox/MessageList.js +++ b/dev/View/User/MailBox/MessageList.js @@ -630,7 +630,7 @@ MessageListMailBoxUserView.prototype.gotoThread = function (oMessage) { - if (oMessage) + if (oMessage && 0 < oMessage.threadsLen()) { MessageStore.messageListPageBeforeThread(MessageStore.messageListPage()); @@ -643,6 +643,13 @@ } }; + MessageListMailBoxUserView.prototype.clearListIsVisible = function () + { + return '' === this.messageListSearchDesc() && '' === this.messageListError() && + '' === MessageStore.messageListEndThreadUid() && + 0 < this.messageList().length && (this.isSpamFolder() || this.isTrashFolder()); + }; + MessageListMailBoxUserView.prototype.onBuild = function (oDom) { var self = this; @@ -671,6 +678,9 @@ .on('click', '.messageList .messageListItem .threads-len', function () { self.gotoThread(ko.dataFor(this)); }) + .on('dblclick', '.messageList .messageListItem .actionHandle', function () { + self.gotoThread(ko.dataFor(this)); + }) ; this.initUploaderForAppend(); diff --git a/rainloop/v/0.0.0/app/libraries/MailSo/Base/Http.php b/rainloop/v/0.0.0/app/libraries/MailSo/Base/Http.php index 4294908da..09552ef02 100644 --- a/rainloop/v/0.0.0/app/libraries/MailSo/Base/Http.php +++ b/rainloop/v/0.0.0/app/libraries/MailSo/Base/Http.php @@ -679,10 +679,10 @@ class Http { if ($bSetCacheHeader) { - \header('Cache-Control: public', true); - \header('Pragma: public', true); - \header('Last-Modified: '.\gmdate('D, d M Y H:i:s', $iUtcTimeStamp - $iExpireTime).' UTC', true); - \header('Expires: '.\gmdate('D, j M Y H:i:s', $iUtcTimeStamp + $iExpireTime).' UTC', true); + @\header('Cache-Control: public', true); + @\header('Pragma: public', true); + @\header('Last-Modified: '.\gmdate('D, d M Y H:i:s', $iUtcTimeStamp - $iExpireTime).' UTC', true); + @\header('Expires: '.\gmdate('D, j M Y H:i:s', $iUtcTimeStamp + $iExpireTime).' UTC', true); if (0 < strlen($sEtag)) { diff --git a/rainloop/v/0.0.0/app/libraries/MailSo/Log/Driver.php b/rainloop/v/0.0.0/app/libraries/MailSo/Log/Driver.php index 60a8d0021..0ac538b24 100644 --- a/rainloop/v/0.0.0/app/libraries/MailSo/Log/Driver.php +++ b/rainloop/v/0.0.0/app/libraries/MailSo/Log/Driver.php @@ -83,6 +83,8 @@ abstract class Driver $this->bTypedPrefix = true; $this->bGuidPrefix = true; + $this->iTimeOffset = 0; + $this->iWriteOnTimeoutOnly = 0; $this->bWriteOnErrorOnly = false; $this->bWriteOnPhpErrorOnly = false; @@ -106,6 +108,17 @@ abstract class Driver ); } + /** + * @param int $iTimeOffset + * + * @return \MailSo\Log\Driver + */ + public function SetTimeOffset($iTimeOffset) + { + $this->iTimeOffset = $iTimeOffset; + return $this; + } + /** * @return \MailSo\Log\Driver */ @@ -217,7 +230,7 @@ abstract class Driver protected function getTimeWithMicroSec() { $aMicroTimeItems = \explode(' ', \microtime()); - return \gmdate($this->sDatePattern, $aMicroTimeItems[1]).'.'. + return \MailSo\Log\Logger::DateHelper($this->sDatePattern, $this->iTimeOffset, $aMicroTimeItems[1]).'.'. \str_pad((int) ($aMicroTimeItems[0] * 1000), 3, '0', STR_PAD_LEFT); } @@ -247,7 +260,7 @@ abstract class Driver if (!$this->bFlushCache && ($this->bWriteOnErrorOnly || $this->bWriteOnPhpErrorOnly || 0 < $this->iWriteOnTimeoutOnly)) { $bErrorPhp = false; - + $bError = $this->bWriteOnErrorOnly && \in_array($iType, array( \MailSo\Log\Enumerations\Type::NOTICE, \MailSo\Log\Enumerations\Type::NOTICE_PHP, diff --git a/rainloop/v/0.0.0/app/libraries/MailSo/Log/Logger.php b/rainloop/v/0.0.0/app/libraries/MailSo/Log/Logger.php index 3d513f170..e5a0a37f4 100644 --- a/rainloop/v/0.0.0/app/libraries/MailSo/Log/Logger.php +++ b/rainloop/v/0.0.0/app/libraries/MailSo/Log/Logger.php @@ -91,6 +91,21 @@ class Logger extends \MailSo\Base\Collection return $oInstance; } + /** + * @param string $sFormat + * @param int $iTimeOffset = 0 + * @param int $iTimestamp = 0 + * + * @return string + */ + public static function DateHelper($sFormat, $iTimeOffset = 0, $iTimestamp = null) + { + $iTimestamp = null === $iTimestamp ? \time() : (int) $iTimestamp; + $iTimeOffset = (int) $iTimeOffset; + + return \gmdate($sFormat, $iTimestamp + $iTimeOffset * 3600); + } + /** * @return bool */ diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php index 8183a243b..d81d553ff 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -407,8 +407,9 @@ class Actions { if (false !== \strpos($sLine, '{date:')) { - $sLine = \preg_replace_callback('/\{date:([^}]+)\}/', function ($aMatch) { - return \gmdate($aMatch[1]); + $iTimeOffset = (int) $this->Config()->Get('logs', 'time_offset', 0); + $sLine = \preg_replace_callback('/\{date:([^}]+)\}/', function ($aMatch) use ($iTimeOffset) { + return \MailSo\Log\Logger::DateHelper($aMatch[1], $iTimeOffset); }, $sLine); $sLine = \preg_replace('/\{date:([^}]*)\}/', 'date', $sLine); @@ -939,6 +940,8 @@ class Actions if (!!$this->Config()->Get('logs', 'enable', false)) { + $iTimeOffset = (int) $this->Config()->Get('logs', 'time_offset', 0); + $this->oLogger->SetShowSecter(!$this->Config()->Get('logs', 'hide_passwords', true)); $sLogFileFullPath = \APP_PRIVATE_DATA.'logs/'.$this->compileLogFileName( @@ -956,6 +959,7 @@ class Actions ->WriteOnErrorOnly($this->Config()->Get('logs', 'write_on_error_only', false)) ->WriteOnPhpErrorOnly($this->Config()->Get('logs', 'write_on_php_error_only', false)) ->WriteOnTimeoutOnly($this->Config()->Get('logs', 'write_on_timeout_only', 0)) + ->SetTimeOffset($iTimeOffset) ); if (!$this->Config()->Get('debug', 'enable', false)) @@ -967,7 +971,10 @@ class Actions $oHttp = $this->Http(); - $this->oLogger->Write('[DATE:'.\gmdate('d.m.y').'][RL:'.APP_VERSION.'][PHP:'.PHP_VERSION.'][IP:'. + $this->oLogger->Write('[DATE:'.\MailSo\Log\Logger::DateHelper('d.m.y', $iTimeOffset). + (0 !== $iTimeOffset ? '][OFFSET:'.(0 < $iTimeOffset ? '+' : '-'). + \str_pad((string) \abs($iTimeOffset), 2, '0', STR_PAD_LEFT) : ''). + '][RL:'.APP_VERSION.'][PHP:'.PHP_VERSION.'][IP:'. $oHttp->GetClientIp($this->Config()->Get('labs', 'http_client_ip_check_proxy', false)).'][PID:'. (\MailSo\Base\Utils::FunctionExistsAndEnabled('getmypid') ? \getmypid() : 'unknown').']['. $oHttp->GetServer('SERVER_SOFTWARE', '~').']['. @@ -5462,7 +5469,7 @@ class Actions */ public function DoMessageList() { - \sleep(1); +// \sleep(1); // throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::CantGetMessageList); $sFolder = ''; diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php index 8dcb131ce..929350892 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Config/Application.php @@ -186,6 +186,8 @@ Values: 'hide_passwords' => array(true, 'Required for development purposes only. Disabling this option is not recommended.'), + 'time_offset' => array(0), + 'filename' => array('log-{date:Y-m-d}.txt', 'Log filename. For security reasons, some characters are removed from filename. diff --git a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html index 6c96d5104..ebe1fbaa1 100644 --- a/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html +++ b/rainloop/v/0.0.0/app/templates/Views/User/MailMessageList.html @@ -151,7 +151,7 @@    -
+