diff --git a/dev/App/User.js b/dev/App/User.js index ace3b45f5..f00a071fa 100644 --- a/dev/App/User.js +++ b/dev/App/User.js @@ -126,10 +126,10 @@ { _.delay(function () { $('#rl-bg').attr('style', 'background-image: none !important;') - .backstretch(Links.publicLink(Settings.settingsGet('UserBackgroundHash')), { - 'fade': Globals.bAnimationSupported ? 1000 : 0 + .backstretch(Links.userBackground(Settings.settingsGet('UserBackgroundHash')), { + 'fade': Globals.bAnimationSupported ? 1000 : 0, 'centeredX': true, 'centeredY': true }).removeAttr('style'); - }, 2000); + }, 1000); } this.socialUsers = _.bind(this.socialUsers, this); diff --git a/dev/Common/Links.js b/dev/Common/Links.js index 2b9cbe8de..8255bce82 100644 --- a/dev/Common/Links.js +++ b/dev/Common/Links.js @@ -171,6 +171,16 @@ return this.sServer + '/Raw/0/Public/' + sHash + '/'; }; + /** + * @param {string} sHash + * @return {string} + */ + Links.prototype.userBackground = function (sHash) + { + return this.sServer + '/Raw/' + this.sSubQuery + this.sSpecSuffix + '/UserBackground/' + + this.sSubSubQuery + sHash; + }; + /** * @param {string} sInboxFolderName = 'INBOX' * @return {string} diff --git a/dev/Common/Utils.js b/dev/Common/Utils.js index 5c36a00c6..7f61f4e05 100644 --- a/dev/Common/Utils.js +++ b/dev/Common/Utils.js @@ -1614,7 +1614,7 @@ Utils.__themeTimer = 0; Utils.__themeAjax = null; - Utils.changeTheme = function (sValue, sHash, themeTrigger, Links) + Utils.changeTheme = function (sValue, themeTrigger) { var oThemeLink = $('#rlThemeLink'), @@ -1673,26 +1673,6 @@ } } - if (Links) - { - var $oBg = $('#rl-bg'); - if (!sHash) - { - if ($oBg.data('backstretch')) - { - $oBg.backstretch('destroy').attr('style', ''); - } - } - else - { - $oBg.backstretch(Links.publicLink(sHash), { - 'fade': Globals.bAnimationSupported ? 1000 : 0, - 'centeredX': true, - 'centeredY': true - }); - } - } - themeTrigger(Enums.SaveSettingsStep.TrueResult); } diff --git a/dev/Settings/Admin/General.js b/dev/Settings/Admin/General.js index 16dd61e16..c1be78fa8 100644 --- a/dev/Settings/Admin/General.js +++ b/dev/Settings/Admin/General.js @@ -93,7 +93,7 @@ self.theme.subscribe(function (sValue) { - Utils.changeTheme(sValue, '', self.themeTrigger); + Utils.changeTheme(sValue, self.themeTrigger); Remote.saveAdminConfig(f3, { 'Theme': Utils.trim(sValue) diff --git a/dev/Settings/User/Themes.js b/dev/Settings/User/Themes.js index 6b53155fd..4c305f707 100644 --- a/dev/Settings/User/Themes.js +++ b/dev/Settings/User/Themes.js @@ -5,6 +5,7 @@ var _ = require('_'), + $ = require('$'), ko = require('ko'), Jua = require('Jua'), @@ -49,7 +50,7 @@ oTheme.selected(sValue === oTheme.name); }); - Utils.changeTheme(sValue, this.background.hash(), this.themeTrigger, Links); + Utils.changeTheme(sValue, this.themeTrigger); Remote.saveSettings(null, { 'Theme': sValue @@ -58,7 +59,23 @@ }, this); this.background.hash.subscribe(function (sValue) { - Utils.changeTheme(this.theme(), sValue, this.themeTrigger, Links); + + var $oBg = $('#rl-bg'); + if (!sValue) + { + if ($oBg.data('backstretch')) + { + $oBg.backstretch('destroy').attr('style', ''); + } + } + else + { + $('#rl-bg').attr('style', 'background-image: none !important;').backstretch( + Links.userBackground(sValue), { + 'fade': 1000, 'centeredX': true, 'centeredY': true + }).removeAttr('style'); + } + }, this); } diff --git a/dev/Styles/Animations.less b/dev/Styles/Animations.less index fa2131264..ba3272bb5 100644 --- a/dev/Styles/Animations.less +++ b/dev/Styles/Animations.less @@ -104,7 +104,7 @@ html.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper { &.csstransitions .modal.fade { .transition(all 200ms ease-out); - transform: scale(.9); + transform: scale(1.1); &.in { transform: none; 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 8c4aeb362..efd5fe1a6 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -1567,11 +1567,11 @@ class Actions { $aResult['UserBackgroundName'] = (string) $oSettings->GetConf('UserBackgroundName', $aResult['UserBackgroundName']); $aResult['UserBackgroundHash'] = (string) $oSettings->GetConf('UserBackgroundHash', $aResult['UserBackgroundHash']); - - if (!empty($aResult['UserBackgroundHash'])) // TODO - { - $aResult['IncludeBackground'] = './?/Raw/0/Public/'.$aResult['UserBackgroundHash'].'/'; - } +// if (!empty($aResult['UserBackgroundName']) && !empty($aResult['UserBackgroundHash'])) +// { +// $aResult['IncludeBackground'] = './?/Raw/&s=/{{USER}}/UserBackground/&ss=/'. +// $aResult['UserBackgroundHash'].'/'; +// } } $aResult['DefaultIdentityID'] = $oSettingsLocal->GetConf('DefaultIdentityID', $oAccount ? $oAccount->Email() : $aResult['DefaultIdentityID']); @@ -1593,10 +1593,10 @@ class Actions $aResult['AllowTwitterSocial'] = false; } - $sStaticCache = \md5(APP_VERSION.$this->Plugins()->Hash().$aResult['UserBackgroundHash']); + $sStaticCache = \md5(APP_VERSION.$this->Plugins()->Hash()); $sTheme = $this->ValidateTheme($sTheme); - $sNewThemeLink = './?/Css/0/'.($bAdmin ? 'Admin' : 'User').'/-/'.$sTheme.'/-/'.$sStaticCache.'/Hash/'; + $sNewThemeLink = './?/Css/0/'.($bAdmin ? 'Admin' : 'User').'/-/'.$sTheme.'/-/'.$sStaticCache.'/Hash/-/'; $bUserLanguage = false; if (!$bAdmin && !$aResult['Auth'] && !empty($_COOKIE['rllang']) && @@ -5703,35 +5703,16 @@ class Actions { try { - if (!$oMessage->GetBcc()) + if (\is_resource($rMessageStream)) { - if (\is_resource($rMessageStream)) - { - \rewind($rMessageStream); - } - - $this->MailClient()->MessageAppendStream( - $rMessageStream, $iMessageStreamSize, $sSentFolder, array( - \MailSo\Imap\Enumerations\MessageFlag::SEEN - )); + \rewind($rMessageStream); } - else - { - $rAppendMessageStream = \MailSo\Base\ResourceRegistry::CreateMemoryResource(); - $iAppendMessageStreamSize = \MailSo\Base\Utils::MultipleStreamWriter( - $oMessage->ToStream(false), array($rAppendMessageStream), 8192, true, true, true); - - $this->MailClient()->MessageAppendStream( - $rAppendMessageStream, $iAppendMessageStreamSize, $sSentFolder, array( - \MailSo\Imap\Enumerations\MessageFlag::SEEN - )); - - if (\is_resource($rAppendMessageStream)) - { - @fclose($rAppendMessageStream); - } - } + $this->MailClient()->MessageAppendStream( + $rMessageStream, $iMessageStreamSize, $sSentFolder, array( + \MailSo\Imap\Enumerations\MessageFlag::SEEN + ) + ); } catch (\Exception $oException) { @@ -5900,8 +5881,7 @@ class Actions { $mResult = null; - $sData = $this->StorageProvider()->Get( - $oAccount, + $sData = $this->StorageProvider()->Get($oAccount, \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, 'contacts_sync' ); @@ -5943,8 +5923,7 @@ class Actions $mData = $this->getContactsSyncData($oAccount); - $bResult = $this->StorageProvider()->Put( - $oAccount, + $bResult = $this->StorageProvider()->Put($oAccount, \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, 'contacts_sync', \RainLoop\Utils::EncodeKeyValues(array( @@ -6988,14 +6967,10 @@ class Actions $oSettings = $this->SettingsProvider()->Load($oAccount); if ($oAccount && $oSettings) { - $sHash = $oSettings->GetConf('UserBackgroundHash', ''); - if (!empty($sHash)) - { - $this->StorageProvider()->Clear(null, - \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, - \RainLoop\KeyPathHelper::PublicFile($sHash) - ); - } + $this->StorageProvider()->Clear($oAccount, + \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, + 'background' + ); $oSettings->SetConf('UserBackgroundName', ''); $oSettings->SetConf('UserBackgroundHash', ''); @@ -7041,43 +7016,30 @@ class Actions $sData = @\stream_get_contents($rData); if (!empty($sData) && 0 < \strlen($sData)) { - $iLimit = 3; - while (true) + $sName = $aFile['name']; + if (empty($sName)) { - $iLimit--; - if (0 > $iLimit) - { - $sHash = ''; - break; - } - - $sHash = \sha1($sSavedName.\microtime(true).\rand(10000, 99999)); - if (!$this->StorageProvider()->Get(null, - \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, - \RainLoop\KeyPathHelper::PublicFile($sHash), null)) - { - break; - } + $sName = '_'; } - if (!empty($sHash)) - { - if ($this->StorageProvider()->Put(null, - \RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, - \RainLoop\KeyPathHelper::PublicFile($sHash), - 'data:'.$sMimeType.':'.$sData + if ($this->StorageProvider()->Put($oAccount, + \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, + 'background', + \json_encode(array( + 'Name' => $aFile['name'], + 'ContentType' => $sMimeType, + 'Raw' => \base64_encode($sData) )) + )) + { + $oSettings = $this->SettingsProvider()->Load($oAccount); + if ($oSettings) { - $sName = $aFile['name']; + $sHash = \md5($sName.APP_VERSION.APP_SALT.\rand(1000, 9999).\microtime(true)); - $oSettings = $this->SettingsProvider()->Load($oAccount); - if ($oSettings) - { - $oSettings->SetConf('UserBackgroundName', $sName); - $oSettings->SetConf('UserBackgroundHash', $sHash); - - $this->SettingsProvider()->Save($oAccount, $oSettings); - } + $oSettings->SetConf('UserBackgroundName', $sName); + $oSettings->SetConf('UserBackgroundHash', $sHash); + $this->SettingsProvider()->Save($oAccount, $oSettings); } } } @@ -7622,6 +7584,42 @@ class Actions return $this->rawSmart(false, true); } + /** + * @return bool + */ + public function RawUserBackground() + { + $sRawKey = (string) $this->GetActionParam('RawKey', ''); + $this->verifyCacheByKey($sRawKey); + + $oAccount = $this->getAccountFromToken(); + + $sData = $this->StorageProvider()->Get($oAccount, + \RainLoop\Providers\Storage\Enumerations\StorageType::CONFIG, + 'background' + ); + + if (!empty($sData)) + { + $aData = \json_decode($sData, true); + unset($sData); + + if (!empty($aData['ContentType']) && !empty($aData['Raw']) && + \in_array($aData['ContentType'], array('image/png', 'image/jpg', 'image/jpeg'))) + { + $this->cacheByKey($sRawKey); + + @\header('Content-Type: '.$aData['ContentType']); + echo \base64_decode($aData['Raw']); + unset($aData); + + return true; + } + } + + return false; + } + /** * @return bool */ diff --git a/rainloop/v/0.0.0/app/templates/Index.html b/rainloop/v/0.0.0/app/templates/Index.html index 330cf2820..c3232f395 100644 --- a/rainloop/v/0.0.0/app/templates/Index.html +++ b/rainloop/v/0.0.0/app/templates/Index.html @@ -12,6 +12,7 @@