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 @@