diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/Api.php b/rainloop/v/0.0.0/app/libraries/RainLoop/Api.php index 736734b35..ac183414e 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/Api.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/Api.php @@ -130,17 +130,19 @@ class Api /** * @param string $sEmail * @param string $sPassword + * @param array $aAdditionalOptions = array() * @param bool $bUseTimeout = true * * @return string */ - public static function GetUserSsoHash($sEmail, $sPassword, $bUseTimeout = true) + public static function GetUserSsoHash($sEmail, $sPassword, $aAdditionalOptions = array(), $bUseTimeout = true) { $sSsoHash = \MailSo\Base\Utils::Sha1Rand($sEmail.$sPassword); return \RainLoop\Api::Actions()->Cacher()->Set(\RainLoop\KeyPathHelper::SsoCacherKey($sSsoHash), \RainLoop\Utils::EncodeKeyValues(array( 'Email' => $sEmail, 'Password' => $sPassword, + 'AdditionalOptions' => $aAdditionalOptions, 'Time' => $bUseTimeout ? \time() : 0 ))) ? $sSsoHash : ''; } diff --git a/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php b/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php index ebe37c8f4..ff541c4ab 100644 --- a/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php +++ b/rainloop/v/0.0.0/app/libraries/RainLoop/ServiceActions.php @@ -898,9 +898,40 @@ class ServiceActions $sEmail = \trim($mData['Email']); $sPassword = $mData['Password']; + $aAdditionalOptions = isset($mData['AdditionalOptions']) && \is_array($mData['AdditionalOptions']) && + 0 < \count($mData['AdditionalOptions']) ? $mData['AdditionalOptions'] : null; + try { $oAccount = $this->oActions->LoginProcess($sEmail, $sPassword); + + if ($oAccount instanceof \RainLoop\Model\Account && $aAdditionalOptions) + { + $bNeedToSettings = false; + + $oSettings = $this->SettingsProvider()->Load($oAccount); + if ($oSettings) + { + $sLanguage = isset($aAdditionalOptions['Language']) ? + $aAdditionalOptions['Language'] : ''; + + if ($sLanguage) + { + $sLanguage = $this->oActions->ValidateLanguage($sLanguage); + if ($sLanguage !== $oSettings->GetConf('Language', '')) + { + $bNeedToSettings = true; + $oSettings->SetConf('Language', $sLanguage); + } + } + } + + if ($bNeedToSettings) + { + $this->SettingsProvider()->Save($oAccount, $oSettings); + } + } + $this->oActions->AuthToken($oAccount); $bLogout = !($oAccount instanceof \RainLoop\Model\Account);