%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/integrator/ |
Current File : //www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/integrator/manager.php |
<?php /* * Copyright 2004-2014, AfterLogic Corp. * Licensed under AGPLv3 license or AfterLogic license * if commercial version of the product was purchased. * See the LICENSE file for a full license statement. */ /** * @package Integrator */ class CApiIntegratorManager extends AApiManager { /** * @type string */ const AUTH_KEY = 'p7auth'; /** * @type string */ const MOBILE_KEY = 'p7mobile'; /** * @type string */ const AUTH_HD_KEY = 'p7hdauth'; /** * @type string */ const TOKEN_KEY = 'p7token'; /** * @type string */ const TOKEN_LAST_CODE = 'p7lastcode'; /** * @type string */ const TOKEN_LANGUAGE = 'p7lang'; /** * @type string */ const TOKEN_HD_THREAD_ID = 'p7hdthread'; /** * @type string */ const TOKEN_HD_ACTIVATED = 'p7hdactivated'; /** * @type string */ const TOKEN_SKIP_MOBILE_CHECK = 'p7skipmobile'; /** * @var bool */ private $bCache; /** * @param CApiGlobalManager &$oManager */ public function __construct(CApiGlobalManager &$oManager) { $this->bCache = false; parent::__construct('integrator', $oManager); } /** * @param string $sDir * @param string $sType * @return array */ private function folderFiles($sDir, $sType) { $aResult = array(); if (is_dir($sDir)) { $aFiles = api_Utils::GlobRecursive($sDir.'/*'.$sType); foreach ($aFiles as $sFile) { if ((empty($sType) || $sType === substr($sFile, -strlen($sType))) && is_file($sFile)) { $aResult[] = $sFile; } } } return $aResult; } /** * @param string $sTheme * @param bool $bMobile = false * @return string */ private function compileTemplates($sTheme, $bMobile = false) { $bMobile = false; // false $sHash = CApi::Plugin()->Hash(); $sCacheFileName = ''; if (CApi::GetConf('labs.cache.templates', $this->bCache)) { $sCacheFileName = 'templates-'.md5(CApi::Version().$sHash).($bMobile ? '-mobile' : '').'.cache'; $sCacheFullFileName = CApi::DataPath().'/cache/'.$sCacheFileName; if (file_exists($sCacheFullFileName)) { return file_get_contents($sCacheFullFileName); } } $sResult = ''; $sT = 'templates/'.($bMobile ? 'mobile' : 'views').''; $iL = strlen($sT) + 1; $sDirName = CApi::WebMailPath().$sT; $aList = $this->folderFiles($sDirName, '.html'); foreach ($aList as $sFileName) { $sName = ''; $iPos = strpos($sFileName, $sT.'/'); if (false !== $iPos && 0 < $iPos) { $sName = substr($sFileName, $iPos + $iL); } else { $sName = '@errorName'.md5(rand(10000, 20000)); } // $sThemeFileName = ''; // if (0 < strlen($sTheme)) // { // $iPos = strpos($sFileName, $sT.'/'); // if (false !== $iPos && 0 < $iPos) // { // $sThemeFileName = substr($sFileName, $iPos + $iL); // } // } // // if (0 < strlen($sThemeFileName)) // { // $sThemeFileName = CApi::WebMailPath().'skins/'.$sTheme.'/templates/'.$sThemeFileName; // if (file_exists($sThemeFileName)) // { // $sFileName = $sThemeFileName; // } // } $sTemplateID = preg_replace('/[^a-zA-Z0-9_]/', '', str_replace(array('/', '\\'), '_', substr($sName, 0, -5))); $sTemplateHtml = file_get_contents($sFileName); $sTemplateHtml = CApi::Plugin()->ParseTemplate($sTemplateID, $sTemplateHtml); $sTemplateHtml = preg_replace('/\{%INCLUDE-START\/[a-zA-Z\-_]+\/INCLUDE-END%\}/', '', $sTemplateHtml); $sTemplateHtml = preg_replace('/<script([^>]*)>/', '<script$1>', $sTemplateHtml); $sTemplateHtml = preg_replace('/<\/script>/', '</script>', $sTemplateHtml); $sResult .= '<script id="'.$sTemplateID.'" type="text/html">'. preg_replace('/[\r\n\t]+/', ' ', $sTemplateHtml).'</script>'; } $aPluginsTemplates = CApi::Plugin()->GetPluginsTemplates(); foreach ($aPluginsTemplates as $aData) { $sTemplateID = preg_replace('/[^a-zA-Z0-9_]/', '', str_replace(array('/', '\\'), '_', $aData[0])); $sTemplateHtml = file_get_contents($aData[1]); $sTemplateHtml = CApi::Plugin()->ParseTemplate($sTemplateID, $sTemplateHtml); $sTemplateHtml = preg_replace('/\{%INCLUDE-START\/[a-zA-Z\-_]+\/INCLUDE-END%\}/', '', $sTemplateHtml); $sTemplateHtml = preg_replace('/<script([^>]*)>/', '<script$1>', $sTemplateHtml); $sTemplateHtml = preg_replace('/<\/script>/', '</script>', $sTemplateHtml); $sResult .= '<script id="'.$sTemplateID.'" type="text/html">'. preg_replace('/[\r\n\t]+/', ' ', $sTemplateHtml).'</script>'; } $sResult = trim($sResult); if (CApi::GetConf('labs.cache.templates', $this->bCache)) { if (!is_dir(dirname($sCacheFullFileName))) { mkdir(dirname($sCacheFullFileName), 0777, true); } $sResult = '<!-- '.$sCacheFileName.' -->'.$sResult; file_put_contents($sCacheFullFileName, $sResult); } return $sResult; } /** * @param string $sTheme * @return string */ private function validatedThemeValue($sTheme) { if ('' === $sTheme || !in_array($sTheme, $this->GetThemeList())) { $sTheme = 'Default'; } return $sTheme; } /** * @param string $sLanguage * @return string */ private function validatedLanguageValue($sLanguage) { if ('' === $sLanguage || !in_array($sLanguage, $this->GetLanguageList())) { $sLanguage = 'English'; } return $sLanguage; } /** * @param string $sLanguage * @return string */ private function compileLanguage($sLanguage) { $sLanguage = $this->validatedLanguageValue($sLanguage); $sCacheFileName = ''; if (CApi::GetConf('labs.cache.i18n', $this->bCache)) { $sCacheFileName = 'i18n-'.$sLanguage.'-'.md5(CApi::Version()).'.cache'; $sCacheFullFileName = CApi::DataPath().'/cache/'.$sCacheFileName; if (file_exists($sCacheFullFileName)) { return file_get_contents($sCacheFullFileName); } } $aResultLang = array(); $sMomentLanguage = api_Utils::ConvertLanguageNameToShort($sLanguage); $sFileName = CApi::WebMailPath().'i18n/'.$sLanguage.'.ini'; $sMoment = 'window.moment && window.moment.lang && window.moment.lang(\'' . $sMomentLanguage . '\');'; /* $sMomentFileName = CApi::WebMailPath().'i18n/moment/'.$sMomentLanguage.'.js'; if (file_exists($sMomentFileName)) { $sMoment = file_get_contents($sMomentFileName); $sMoment = preg_replace('/\/\/[^\n]+\n/', '', $sMoment); } */ $aLang = null; $sData = @file_get_contents($sFileName); if (false !== $sData) { $aLang = @parse_ini_string(trim($sData), true); } if (is_array($aLang)) { foreach ($aLang as $sKey => $mValue) { if (is_array($mValue)) { foreach ($mValue as $sSecKey => $mSecValue) { $aResultLang[$sKey.'/'.$sSecKey] = $mSecValue; } } else { $aResultLang[$sKey] = $mValue; } } } CApi::Plugin()->ParseLangs($sLanguage, $aResultLang); $sLangJs = ''; $aLangKeys = array_keys($aResultLang); foreach ($aLangKeys as $sKey) { $sString = isset($aResultLang[$sKey]) ? $aResultLang[$sKey] : $sKey; $sLangJs .= '"'.str_replace('"', '\\"', str_replace('\\', '\\\\', $sKey)).'":' .'"'.str_replace(array("\r", "\n", "\t"), array('\r', '\n', '\t'), str_replace('"', '\\"', str_replace('\\', '\\\\', $sString))).'",'; } $sResult = empty($sLangJs) ? 'null' : '{'.substr($sLangJs, 0, -1).'}'; $sResult = '<script>window.pSevenLang=\''.$sLanguage.'\';window.pSevenI18N='.$sResult.';'.$sMoment.'</script>'; if (CApi::GetConf('labs.cache.i18n', $this->bCache)) { if (!is_dir(dirname($sCacheFullFileName))) { mkdir(dirname($sCacheFullFileName), 0777); } $sResult = '<!-- '.$sCacheFileName.' -->'.$sResult; @file_put_contents($sCacheFullFileName, $sResult); } return $sResult; } /** * @return string|null */ private function getCookiePath() { static $sPath = false; if (false === $sPath) { $sPath = CApi::GetConf('labs.app-cookie-path', '/'); } return $sPath; } /** * @return string */ public function GetLoginLanguage() { $sLanguage = empty($_COOKIE[self::TOKEN_LANGUAGE]) ? '' : $_COOKIE[self::TOKEN_LANGUAGE]; return '' === $sLanguage ? '' : $this->validatedLanguageValue($sLanguage); } /** * @param string $sLanguage */ public function SetLoginLanguage($sLanguage) { $sLanguage = $this->validatedLanguageValue($sLanguage); @setcookie(self::TOKEN_LANGUAGE, $sLanguage, 0, $this->getCookiePath(), null, null, true); } /** * @return int */ public function GetLogginedUserId() { $iUserId = 0; $sKey = empty($_COOKIE[self::AUTH_KEY]) ? '' : $_COOKIE[self::AUTH_KEY]; if (!empty($sKey) && is_string($sKey)) { $aAccountHashTable = CApi::DecodeKeyValues($sKey); if (is_array($aAccountHashTable) && isset($aAccountHashTable['token']) && 'auth' === $aAccountHashTable['token'] && 0 < strlen($aAccountHashTable['id']) && is_int($aAccountHashTable['id'])) { $iUserId = $aAccountHashTable['id']; } } return $iUserId; } /** * @return int */ public function GetLogginedHelpdeskUserId() { $iHdUserId = 0; $sKey = empty($_COOKIE[self::AUTH_HD_KEY]) ? '' : $_COOKIE[self::AUTH_HD_KEY]; if (!empty($sKey) && is_string($sKey)) { $aUserHashTable = CApi::DecodeKeyValues($sKey); if (is_array($aUserHashTable) && isset($aUserHashTable['token']) && 'hd_auth' === $aUserHashTable['token'] && 0 < strlen($aUserHashTable['id']) && is_int($aUserHashTable['id'])) { $iHdUserId = (int) $aUserHashTable['id']; } } return $iHdUserId; } /** * @return CAccount | null */ public function GetLogginedDefaultAccount() { $oResult = null; $iUserId = $this->GetLogginedUserId(); if (0 < $iUserId) { $oApiUsers = CApi::Manager('users'); if ($oApiUsers) { $iAccountId = $oApiUsers->GetDefaultAccountId($iUserId); if (0 < $iAccountId) { $oAccount = $oApiUsers->GetAccountById($iAccountId); $oResult = $oAccount instanceof \CAccount ? $oAccount : null; } } } return $oResult; } /** * @return string */ public function GetCsrfToken() { static $sToken = null; if (null === $sToken) { $sToken = !empty($_COOKIE[self::TOKEN_KEY]) ? $_COOKIE[self::TOKEN_KEY] : null; } if (null === $sToken) { $sToken = md5(rand(1000, 9999).CApi::$sSalt.microtime(true)); @setcookie(self::TOKEN_KEY, $sToken, time() + 60 * 60 * 24 * 30, $this->getCookiePath(), null, null, true); } return $sToken; } /** * @param int $iCode * * @return void */ public function SetLastErrorCode($iCode) { @setcookie(self::TOKEN_LAST_CODE, $iCode, 0, $this->getCookiePath(), null, null, true); } /** * @return int */ public function GetLastErrorCode() { return isset($_COOKIE[self::TOKEN_LAST_CODE]) ? (int) $_COOKIE[self::TOKEN_LAST_CODE] : 0; } /** * @return void */ public function ClearLastErrorCode() { if (isset($_COOKIE[self::TOKEN_LAST_CODE])) { unset($_COOKIE[self::TOKEN_LAST_CODE]); } @setcookie(self::TOKEN_LAST_CODE, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); } /** * @param string $sToken * * @return bool */ public function ValidateCsrfToken($sToken) { return $sToken === $this->GetCsrfToken(); } /** * @return bool */ public function LogoutAccount() { @setcookie(self::AUTH_KEY, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); return true; } /** * @param int $iThreadID * * @return void */ public function SetThreadIdFromRequest($iThreadID) { $aHashTable = array( 'token' => 'thread_id', 'id' => (int) $iThreadID ); CApi::LogObject($aHashTable); $_COOKIE[self::TOKEN_HD_THREAD_ID] = CApi::EncodeKeyValues($aHashTable); @setcookie(self::TOKEN_HD_THREAD_ID, CApi::EncodeKeyValues($aHashTable), 0, $this->getCookiePath(), null, null, true); } /** * @return int|null */ public function GetThreadIdFromRequestAndClear() { $mHdThreadId = null; $sKey = empty($_COOKIE[self::TOKEN_HD_THREAD_ID]) ? '' : $_COOKIE[self::TOKEN_HD_THREAD_ID]; if (!empty($sKey) && is_string($sKey)) { $aUserHashTable = CApi::DecodeKeyValues($sKey); if (is_array($aUserHashTable) && isset($aUserHashTable['token'], $aUserHashTable['id']) && 'thread_id' === $aUserHashTable['token'] && 0 < strlen($aUserHashTable['id']) && is_int($aUserHashTable['id'])) { $mHdThreadId = (int) $aUserHashTable['id']; } } if (0 < strlen($sKey)) { if (isset($_COOKIE[self::TOKEN_HD_THREAD_ID])) { unset($_COOKIE[self::TOKEN_HD_THREAD_ID]); } @setcookie(self::TOKEN_HD_THREAD_ID, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); } return $mHdThreadId; } /** * @return void */ public function RemoveUserAsActivated() { if (isset($_COOKIE[self::TOKEN_HD_ACTIVATED])) { $_COOKIE[self::TOKEN_HD_ACTIVATED] = ''; unset($_COOKIE[self::TOKEN_HD_ACTIVATED]); @setcookie(self::TOKEN_HD_ACTIVATED, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); } } /** * @param CHelpdeskUser $oHelpdeskUser * * @return void */ public function SetUserAsActivated($oHelpdeskUser, $bForgot = false) { $aHashTable = array( 'token' => 'hd_activated_email', 'forgot' => $bForgot, 'email' => $oHelpdeskUser->Email ); $_COOKIE[self::TOKEN_HD_ACTIVATED] = CApi::EncodeKeyValues($aHashTable); @setcookie(self::TOKEN_HD_ACTIVATED, CApi::EncodeKeyValues($aHashTable), 0, $this->getCookiePath(), null, null, true); } /** * @param bool $bForgot = false * * @return int */ public function GetActivatedUserEmailAndClear() { $sEmail = ''; $sKey = empty($_COOKIE[self::TOKEN_HD_ACTIVATED]) ? '' : $_COOKIE[self::TOKEN_HD_ACTIVATED]; if (!empty($sKey) && is_string($sKey)) { $aUserHashTable = CApi::DecodeKeyValues($sKey); if (is_array($aUserHashTable) && isset($aUserHashTable['token']) && 'hd_activated_email' === $aUserHashTable['token'] && 0 < strlen($aUserHashTable['email'])) { $sEmail = $aUserHashTable['email']; } } if (0 < strlen($sKey)) { if (isset($_COOKIE[self::TOKEN_HD_ACTIVATED])) { unset($_COOKIE[self::TOKEN_HD_ACTIVATED]); } @setcookie(self::TOKEN_HD_THREAD_ID, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); } return $sEmail; } /** * @param CAccount $oAccount * @param bool $bSignMe = false * * @return void */ public function SetAccountAsLoggedIn(CAccount $oAccount, $bSignMe = false) { $aAccountHashTable = array( 'token' => 'auth', 'sign-me' => $bSignMe, 'id' => $oAccount->IdUser ); $iTime = $bSignMe ? time() + 60 * 60 * 24 * 30 : 0; $_COOKIE[self::AUTH_KEY] = CApi::EncodeKeyValues($aAccountHashTable); @setcookie(self::AUTH_KEY, CApi::EncodeKeyValues($aAccountHashTable), $iTime, $this->getCookiePath(), null, null, true); } /** * @param CHelpdeskUser $oUser * @param bool $bSignMe = false * * @return void */ public function SetHelpdeskUserAsLoggedIn(CHelpdeskUser $oUser, $bSignMe = false) { $aUserHashTable = array( 'token' => 'hd_auth', 'sign-me' => $bSignMe, 'id' => $oUser->IdHelpdeskUser ); $iTime = $bSignMe ? time() + 60 * 60 * 24 * 30 : 0; $_COOKIE[self::AUTH_HD_KEY] = CApi::EncodeKeyValues($aUserHashTable); @setcookie(self::AUTH_HD_KEY, CApi::EncodeKeyValues($aUserHashTable), $iTime, $this->getCookiePath(), null, null, true); } /** * @return bool */ public function LogoutHelpdeskUser() { @setcookie(self::AUTH_HD_KEY, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); return true; } public function SkipMobileCheck() { @setcookie(self::TOKEN_SKIP_MOBILE_CHECK, '1', 0, $this->getCookiePath(), null, null, true); } /** * @return int */ public function IsMobile() { if (isset($_COOKIE[self::TOKEN_SKIP_MOBILE_CHECK]) && '1' === (string) $_COOKIE[self::TOKEN_SKIP_MOBILE_CHECK]) { @setcookie(self::TOKEN_SKIP_MOBILE_CHECK, '', time() - 60 * 60 * 24 * 30, $this->getCookiePath()); return 0; } return isset($_COOKIE[self::MOBILE_KEY]) ? ('1' === (string) $_COOKIE[self::MOBILE_KEY] ? 1 : 0) : -1; } /** * @param bool $bMobile * @return bool */ public function SetMobile($bMobile) { @setcookie(self::MOBILE_KEY, $bMobile ? '1' : '0', time() + 60 * 60 * 24 * 200, $this->getCookiePath()); return true; } public function ResetCookies() { $sAccountHash = !empty($_COOKIE[self::AUTH_KEY]) ? $_COOKIE[self::AUTH_KEY] : ''; if (0 < strlen($sAccountHash)) { $aAccountHashTable = CApi::DecodeKeyValues($sAccountHash); if (isset($aAccountHashTable['sign-me']) && $aAccountHashTable['sign-me']) { @setcookie(self::AUTH_KEY, CApi::EncodeKeyValues($aAccountHashTable), time() + 60 * 60 * 24 * 30, $this->getCookiePath(), null, null, true); } $sToken = !empty($_COOKIE[self::TOKEN_KEY]) ? $_COOKIE[self::TOKEN_KEY] : null; if (null !== $sToken) { @setcookie(self::TOKEN_KEY, $sToken, time() + 60 * 60 * 24 * 30, $this->getCookiePath(), null, null, true); } } $sHelpdeskHash = !empty($_COOKIE[self::AUTH_HD_KEY]) ? $_COOKIE[self::AUTH_HD_KEY] : ''; if (0 < strlen($sHelpdeskHash)) { $aHelpdeskHashTable = CApi::DecodeKeyValues($sHelpdeskHash); if (isset($aHelpdeskHashTable['sign-me']) && $aHelpdeskHashTable['sign-me']) { @setcookie(self::AUTH_HD_KEY, CApi::EncodeKeyValues($aHelpdeskHashTable), time() + 60 * 60 * 24 * 30, $this->getCookiePath(), null, null, true); } } } /** * @param string $sEmail * @param string $sIncPassword * @param string $sIncLogin = '' * @param string $sLanguage = '' * @return CAccount | null | bool */ public function LoginToAccount($sEmail, $sIncPassword, $sIncLogin = '', $sLanguage = '') { $oResult = null; /* @var $oApiUsersManager CApiUsersManager */ $oApiUsersManager = CApi::Manager('users'); /* @var $oApiWebmailManager CApiWebmailManager */ $oApiWebmailManager = CApi::Manager('webmail'); CApi::Plugin()->RunHook('api-integrator-login-to-account', array(&$sEmail, &$sIncPassword, &$sIncLogin, &$sLanguage)); $oAccount = $oApiUsersManager->GetAccountOnLogin($sEmail); if ($oAccount instanceof CAccount) { if ($oAccount->IsDisabled || ($oAccount->Domain && $oAccount->Domain->IsDisabled)) { throw new CApiManagerException(Errs::WebMailManager_AccountDisabled); } // else if (!$oAccount->Domain->AllowWebMail) // { // throw new CApiManagerException(Errs::WebMailManager_AccountWebmailDisabled); // } if (0 < $oAccount->IdTenant) { $oApiTenantsManager = /* @var $oApiTenantsManager CApiTenantsManager */ CApi::Manager('tenants'); if ($oApiTenantsManager) { $oTenant = $oApiTenantsManager->GetTenantById($oAccount->IdTenant); if ($oTenant && ($oTenant->IsDisabled || (0 < $oTenant->Expared && $oTenant->Expared < \time()))) { throw new CApiManagerException(Errs::WebMailManager_AccountDisabled); } } } if (0 < strlen($sLanguage) && $sLanguage !== $oAccount->User->DefaultLanguage) { $oAccount->User->DefaultLanguage = $sLanguage; } if ($oAccount->Domain->AllowWebMail) { if ($sIncPassword !== $oAccount->IncomingMailPassword) { $oAccount->IncomingMailPassword = $sIncPassword; } $oApiMailManager = CApi::Manager('mail'); $oApiMailManager->ValidateAccountConnection($oAccount); } else if ($sIncPassword !== $oAccount->IncomingMailPassword) { throw new CApiManagerException(Errs::Mail_AccountAuthentication); } $sObsoleteIncPassword = $oAccount->GetObsoleteValue('IncomingMailPassword'); $sObsoleteLanguage = $oAccount->User->GetObsoleteValue('DefaultLanguage'); if (null !== $sObsoleteIncPassword && $sObsoleteIncPassword !== $oAccount->IncomingMailPassword || null !== $sObsoleteLanguage && $sObsoleteLanguage !== $oAccount->User->DefaultLanguage || $oAccount->ForceSaveOnLogin) { $oApiUsersManager->UpdateAccount($oAccount); } $oApiUsersManager->UpdateAccountLastLoginAndCount($oAccount->IdUser); $oResult = $oAccount; } else if (null === $oAccount) { $aExtValues = array(); if (0 < strlen($sIncLogin)) { $aExtValues['Login'] = $sIncLogin; } $oAccount = $oApiWebmailManager->CreateAccountProcess($sEmail, $sIncPassword, $sLanguage, $aExtValues); if ($oAccount instanceof CAccount) { CApi::Plugin()->RunHook('api-integrator-login-success-post-create-account-call', array(&$oAccount)); $oResult = $oAccount; } else { $oException = $oApiWebmailManager->GetLastException(); CApi::Plugin()->RunHook('api-integrator-login-error-post-create-account-call', array(&$oException)); throw (is_object($oException)) ? $oException : new CApiManagerException(Errs::WebMailManager_AccountCreateOnLogin); } } else { $oException = $oApiUsersManager->GetLastException(); CApi::Plugin()->RunHook('api-integrator-login-error-post-create-account-call', array(&$oException)); throw (is_object($oException)) ? $oException : new CApiManagerException(Errs::WebMailManager_AccountCreateOnLogin); } if ($oResult instanceof CAccount) { CApi::Plugin()->RunHook('statistics.login', array(&$oResult, null)); } CApi::Plugin()->RunHook('api-integrator-login-to-account-result', array(&$oResult)); return $oResult; } /** * @return CHelpdeskUser|null|bool */ public function LoginToHelpdeskAccount($iIdTenant, $sEmail, $sPassword) { $oResult = null; CApi::Plugin()->RunHook('api-integrator-login-to-helpdesk-user', array(&$sEmail, &$sPassword)); $oApiHelpdeskManager = /* @var $oApiHelpdeskManager CApiHelpdeskManager */ CApi::Manager('helpdesk'); $oApiUsersManager = /* @var $oApiUsersManager CApiUsersManager */ CApi::Manager('users'); $oApiCapabilityManager = /* @var $oApiCapabilityManager CApiCapabilityManager */ CApi::Manager('capability'); if (!$oApiHelpdeskManager || !$oApiUsersManager || !$oApiCapabilityManager || !$oApiCapabilityManager->IsHelpdeskSupported()) { return false; } $oAccount = $oApiUsersManager->GetAccountOnLogin($sEmail); if ($oAccount && $oAccount->IdTenant === $iIdTenant && $oApiCapabilityManager->IsHelpdeskSupported($oAccount) && $oAccount->IncomingMailPassword === $sPassword) { $this->SetAccountAsLoggedIn($oAccount); $this->SetThreadIdFromRequest(0); throw new CApiManagerException(Errs::HelpdeskManager_AccountSystemAuthentication); } $oUser = /* @var $oUser CHelpdeskUser */ $oApiHelpdeskManager->GetUserByEmail($iIdTenant, $sEmail); if ($oUser instanceof CHelpdeskUser && $oUser->ValidatePassword($sPassword) && $iIdTenant === $oUser->IdTenant) { if (!$oUser->Activated) { throw new CApiManagerException(Errs::HelpdeskManager_UnactivatedUser); } $oResult = $oUser; CApi::Plugin()->RunHook('statistics.helpdesk-login', array(&$oResult, null)); } else { throw new CApiManagerException(Errs::HelpdeskManager_AccountAuthentication); } if ($oResult instanceof CHelpdeskUser) { CApi::Plugin()->RunHook('statistics.helpdesk-login', array(&$oResult, null)); } CApi::Plugin()->RunHook('api-integrator-login-to-helpdesk-user-result', array(&$oResult)); return $oResult; } /** * @return CHelpdeskUser|bool */ public function RegisterHelpdeskAccount($iIdTenant, $sEmail, $sName, $sPassword, $bCreateFromFetcher = false) { $mResult = false; $oApiHelpdeskManager = /* @var $oApiHelpdeskManager CApiHelpdeskManager */ CApi::Manager('helpdesk'); $oApiUsersManager = /* @var $oApiUsersManager CApiUsersManager */ CApi::Manager('users'); $oApiCapabilityManager = /* @var $oApiCapabilityManager CApiCapabilityManager */ CApi::Manager('capability'); if (!$oApiHelpdeskManager || !$oApiUsersManager || !$oApiCapabilityManager || !$oApiCapabilityManager->IsHelpdeskSupported()) { return $mResult; } $oUser = /* @var $oUser CHelpdeskUser */ $oApiHelpdeskManager->GetUserByEmail($iIdTenant, $sEmail); if (!$oUser) { $oAccount = $oApiUsersManager->GetAccountOnLogin($sEmail); if ($oAccount && $oAccount->IdTenant === $iIdTenant && $oApiCapabilityManager->IsHelpdeskSupported($oAccount)) { throw new CApiManagerException(Errs::HelpdeskManager_UserAlreadyExists); } $oUser = new CHelpdeskUser(); $oUser->Activated = false; $oUser->Email = $sEmail; $oUser->Name = $sName; $oUser->IdTenant = $iIdTenant; $oUser->IsAgent = false; $oUser->SetPassword($sPassword, $bCreateFromFetcher); $oApiHelpdeskManager->CreateUser($oUser, $bCreateFromFetcher); if (!$oUser || 0 === $oUser->IdHelpdeskUser) { throw new CApiManagerException(Errs::HelpdeskManager_UserCreateFailed); } else { $mResult = $oUser; } } else { throw new CApiManagerException(Errs::HelpdeskManager_UserAlreadyExists); } return $mResult; } public function RegisterSocialAccount($iIdTenant, $sTenantHash, $sNotificationEmail, $sSocialId, $sSocialType, $sSocialName) { $bResult = false; $oApiHelpdeskManager = /* @var $oApiHelpdeskManager CApiHelpdeskManager */ CApi::Manager('helpdesk'); $oApiUsersManager = /* @var $oApiUsersManager CApiUsersManager */ CApi::Manager('users'); $oApiCapabilityManager = /* @var $oApiCapabilityManager CApiCapabilityManager */ CApi::Manager('capability'); if (!$oApiHelpdeskManager || !$oApiUsersManager || !$oApiCapabilityManager || !$oApiCapabilityManager->IsHelpdeskSupported()) { return $bResult; } $oUser = /* @var $oUser CHelpdeskUser */ $oApiHelpdeskManager->GetUserBySocialId($iIdTenant, $sSocialId); if (!$oUser) { $oAccount = $this->GetAhdSocialUser($sTenantHash, $sSocialId); if ($oAccount && $oAccount->IdTenant === $iIdTenant && $oApiCapabilityManager->IsHelpdeskSupported($oAccount)) { throw new CApiManagerException(Errs::HelpdeskManager_UserAlreadyExists); } $oUser = new CHelpdeskUser(); $oUser->Activated = true; $oUser->Name = $sSocialName; $oUser->NotificationEmail = $sNotificationEmail; $oUser->SocialId = $sSocialId; $oUser->SocialType = $sSocialType; $oUser->IdTenant = $iIdTenant; $oUser->IsAgent = false; $oApiHelpdeskManager->CreateUser($oUser); if (!$oUser || 0 === $oUser->IdHelpdeskUser) { throw new CApiManagerException(Errs::HelpdeskManager_UserCreateFailed); } else { $bResult = true; } } else { throw new CApiManagerException(Errs::HelpdeskManager_UserAlreadyExists); } return $bResult; } /** * @return int|bool */ public function GetTenantIdByHash($sTenantHash) { $iResult = 0; $oApiCapabilityManager = /* @var $oApiCapabilityManager CApiCapabilityManager */ CApi::Manager('capability'); if (0 === strlen($sTenantHash) && $oApiCapabilityManager->IsHelpdeskSupported() && !$oApiCapabilityManager->IsTenantsSupported()) { return 0; } else if (0 < strlen($sTenantHash)) { $oApiTenantsManager = /* @var $oApiTenantsManager CApiTenantsManager */ CApi::Manager('tenants'); if ($oApiTenantsManager) { $oTenant = $oApiTenantsManager->GetTenantByHash($sTenantHash); if ($oTenant && $oTenant->IsHelpdeskSupported()) { $iResult = $oTenant->IdTenant; } } } return 0 < $iResult ? $iResult : false; } /** * @param CAccount $oAccount * * @return CDomain */ private function getDefaultAccountDomain($oAccount) { /* @var $oApiDomainsManager CApiDomainsManager */ $oApiDomainsManager = CApi::Manager('domains'); $oDomain = ($oAccount && $oAccount->IsDefaultAccount) ? $oAccount->Domain : $oApiDomainsManager->GetDefaultDomain(); if (null === $oDomain) { /* @var $oApiUsersManager CApiUsersManager */ $oApiUsersManager = CApi::Manager('users'); $iDomainId = $oApiUsersManager->GetDefaultAccountDomainId($oAccount->IdUser); if (0 < $iDomainId) { $oDomain = $oApiDomainsManager->GetDomainById($iDomainId); } else { $oDomain = $oApiDomainsManager->GetDefaultDomain(); } } return $oDomain; } /** * @param CDomain $oDomain * @param CAccount $oDefaultAccount = null * @return array */ private function appDataDomainSettings($oDomain, $oDefaultAccount = null) { $aResult = array(); if ($oDomain) { $oApiCapabilityManager = /* @var $oApiCapabilityManager CApiCapabilityManager */ CApi::Manager('capability'); $oSettings =& CApi::GetSettings(); $aResult['AllowUsersChangeInterfaceSettings'] = (bool) $oDomain->AllowUsersChangeInterfaceSettings; $aResult['AllowUsersChangeEmailSettings'] = (bool) $oDomain->AllowUsersChangeEmailSettings; $aResult['AllowUsersAddNewAccounts'] = (bool) $oDomain->AllowUsersAddNewAccounts; $aResult['AllowOpenPGP'] = (bool) $oDomain->AllowOpenPGP; $aResult['AllowWebMail'] = (bool) $oDomain->AllowWebMail; $aResult['DefaultTab'] = $oDomain->DefaultTab; $aResult['AllowIosProfile'] = $oApiCapabilityManager->IsIosProfileSupported(); $aResult['DefaultTab'] = $oDomain->DefaultTab; $aResult['PasswordMinLength'] = $oSettings->GetConf('Common/PasswordMinLength')/*$oDomain->PasswordMinLength*/; $aResult['PasswordMustBeComplex'] = (bool) $oSettings->GetConf('Common/PasswordMustBeComplex')/*$oDomain->PasswordMustBeComplex*/; if (!\CApi::GetConf('labs.open-pgp', true)) { $aResult['AllowOpenPGP'] = false; } $aRegistrationDomains = array(); $aRegistrationQuestions = array(); $aResult['AllowRegistration'] = (bool) $oSettings->GetConf('Common/AllowRegistration'); $aResult['AllowPasswordReset'] = (bool) $oSettings->GetConf('Common/AllowPasswordReset'); if ($aResult['AllowRegistration']) { $sRegistrationDomains = (string) $oSettings->GetConf('Common/RegistrationDomains'); $aRegistrationDomains = explode(',', strtolower($sRegistrationDomains)); $aRegistrationDomains = array_map('trim', $aRegistrationDomains); $sRegistrationQuestions = (string) $oSettings->GetConf('Common/RegistrationQuestions'); $aRegistrationQuestions = explode('|', $sRegistrationQuestions); $aRegistrationQuestions = array_map('trim', $aRegistrationQuestions); } $aResult['RegistrationDomains'] = $aRegistrationDomains; $aResult['RegistrationQuestions'] = $aRegistrationQuestions; list($sLanguage, $sTheme, $sSiteName) = $this->getThemeAndLanguage(); // $aResult['SiteName'] = $oDomain->SiteName; // $aResult['DefaultLanguage'] = $oDomain->DefaultLanguage; // $aResult['DefaultLanguageShort'] = api_Utils::ConvertLanguageNameToShort($aResult['DefaultLanguage']); // $aResult['DefaultTheme'] = $oDomain->DefaultSkin; $aResult['SiteName'] = $sSiteName; $aResult['DefaultLanguage'] = $sLanguage; $aResult['DefaultLanguageShort'] = api_Utils::ConvertLanguageNameToShort($aResult['DefaultLanguage']); $aResult['DefaultTheme'] = $sTheme; $aResult['Languages'] = array(); $aLangs = $this->GetLanguageList(); foreach ($aLangs as $sLang) { $aResult['Languages'][] = array( 'name' => $this->getLanguageName($sLang), 'value' => $sLang ); } $aResult['Themes'] = array(); $aThemes = $this->GetThemeList(); foreach ($aThemes as $sTheme) { $aResult['Themes'][] = $sTheme; } $aResult['DateFormats'] = array(); foreach (array(EDateFormat::MMDDYYYY, EDateFormat::DDMMYYYY, EDateFormat::DD_MONTH_YYYY) as $sDateFmtName) { $aResult['DateFormats'][] = $sDateFmtName; } $iAttachmentSizeLimit = ((bool) $oSettings->GetConf('WebMail/EnableAttachmentSizeLimit')) ? (int) $oSettings->GetConf('WebMail/AttachmentSizeLimit') : 0; $iImageUploadSizeLimit = ((bool) $oSettings->GetConf('WebMail/EnableAttachmentSizeLimit')) ? (int) $oSettings->GetConf('WebMail/ImageUploadSizeLimit') : 0; $iFileSizeLimit = ((bool) $oSettings->GetConf('Files/EnableSizeLimit')) ? (int) $oSettings->GetConf('Files/SizeLimit') : 0; $aResult['AttachmentSizeLimit'] = $iAttachmentSizeLimit; $aResult['ImageUploadSizeLimit'] = $iImageUploadSizeLimit; $aResult['FileSizeLimit'] = $iFileSizeLimit; $aResult['AutoSave'] = (bool) CApi::GetConf('webmail.autosave', true); $aResult['IdleSessionTimeout'] = (int) $oSettings->GetConf('WebMail/IdleSessionTimeout'); $aResult['AllowInsertImage'] = (bool) $oSettings->GetConf('WebMail/AllowInsertImage'); $aResult['AllowBodySize'] = (bool) $oSettings->GetConf('WebMail/AllowBodySize'); $aResult['MaxBodySize'] = (int) $oSettings->GetConf('WebMail/MaxBodySize'); $aResult['MaxSubjectSize'] = (int) $oSettings->GetConf('WebMail/MaxSubjectSize'); $aResult['AllowPrefetch'] = (bool) CApi::GetConf('webmail.use-prefetch', true); $aResult['AllowLanguageOnLogin'] = (bool) $oSettings->GetConf('WebMail/AllowLanguageOnLogin'); $aResult['FlagsLangSelect'] = (bool) $oSettings->GetConf('WebMail/FlagsLangSelect'); $aResult['LoginFormType'] = (int) $oSettings->GetConf('WebMail/LoginFormType'); $aResult['LoginSignMeType'] = (int) $oSettings->GetConf('WebMail/LoginSignMeType'); $aResult['LoginAtDomainValue'] = (string) $oSettings->GetConf('WebMail/LoginAtDomainValue'); $aResult['DemoWebMail'] = (bool) CApi::GetConf('demo.webmail.enable', false); $aResult['DemoWebMailLogin'] = CApi::GetConf('demo.webmail.login', ''); $aResult['DemoWebMailPassword'] = CApi::GetConf('demo.webmail.password', ''); $aResult['GoogleAnalyticsAccount'] = CApi::GetConf('labs.google-analytic.account', ''); $aResult['CustomLoginUrl'] = (string) CApi::GetConf('labs.webmail.custom-login-url', ''); $aResult['CustomLogoutUrl'] = (string) CApi::GetConf('labs.webmail.custom-logout-url', ''); $aResult['ShowQuotaBar'] = (bool) $oSettings->GetConf('WebMail/ShowQuotaBar'); $aResult['ServerUseUrlRewrite'] = (bool) CApi::GetConf('labs.server-use-url-rewrite', false); $aResult['ServerUrlRewriteBase'] = (string) CApi::GetConf('labs.server-url-rewrite-base', ''); $aResult['IosDetectOnLogin'] = (bool) CApi::GetConf('labs.webmail.ios-detect-on-login', true); $aResult['AllowContactsSharing'] = $oApiCapabilityManager->IsSharedContactsSupported($oDefaultAccount); if ($aResult['IosDetectOnLogin']) { $aResult['IosDetectOnLogin'] = isset($_COOKIE['skip_ios']) && '1' === (string) $_COOKIE['skip_ios'] ? false : true; } $sCustomLanguage = $this->GetLoginLanguage(); if (!empty($sCustomLanguage)) { $aResult['DefaultLanguage'] = $sCustomLanguage; $aResult['DefaultLanguageShort'] = api_Utils::ConvertLanguageNameToShort($sCustomLanguage); } $aResult['LoginDescription'] = ''; CApi::Plugin()->RunHook('api-app-domain-data', array($oDomain, &$aResult)); } return $aResult; } /** * @param CHelpdeskUser $oUser * @return array */ private function appDataHelpdeskUserSettings($oUser) { $aResult = array(); if ($oUser) { $aResult['Name'] = $oUser->Name; $aResult['Email'] = $oUser->Email; $aResult['Language'] = $oUser->Language; $aResult['DateFormat'] = $oUser->DateFormat; $aResult['TimeFormat'] = $oUser->TimeFormat; $aResult['IsHelpdeskAgent'] = $oUser->IsAgent; } return $aResult; } /** * @param CAccount $oAccount * @return array */ private function appDataUserSettings($oAccount) { $aResult = array(); if ($oAccount) { $oSettings =& CApi::GetSettings(); $oApiCapabilityManager = CApi::Manager('capability'); /* @var $oApiCapabilityManager CApiCapabilityManager */ $aResult['IdUser'] = $oAccount->User->IdUser; $aResult['MailsPerPage'] = (int) $oAccount->User->MailsPerPage; $aResult['ContactsPerPage'] = (int) $oAccount->User->ContactsPerPage; $aResult['AutoCheckMailInterval'] = (int) $oAccount->User->AutoCheckMailInterval; $aResult['DefaultEditor'] = (int) $oAccount->User->DefaultEditor; // $aResult['Layout'] = (int) $oAccount->User->Layout; $aResult['Layout'] = 0; $aResult['DefaultTheme'] = $oAccount->User->DefaultSkin; $aResult['DefaultLanguage'] = $oAccount->User->DefaultLanguage; $aResult['DefaultLanguageShort'] = api_Utils::ConvertLanguageNameToShort($oAccount->User->DefaultLanguage); $aResult['DefaultDateFormat'] = $oAccount->User->DefaultDateFormat; $aResult['DefaultTimeFormat'] = $oAccount->User->DefaultTimeFormat; $aResult['AllowCompose'] = (bool) $oAccount->AllowCompose; $aResult['AllowReply'] = (bool) $oAccount->AllowReply; $aResult['AllowForward'] = (bool) $oAccount->AllowForward; $aFetcherDomains = CApi::GetConf('labs.fetchers.domains', array()); $aResult['AllowFetcher'] = CApi::GetConf('labs.fetchers', false) && ($oAccount->Domain->IsInternal || \in_array($oAccount->IncomingMailServer, $aFetcherDomains)); $iSaveMail = $oSettings->GetConf('WebMail/SaveMail'); $iSaveMail = ESaveMail::Always !== $iSaveMail ? $oAccount->User->SaveMail : ESaveMail::Always; $aResult['SaveMail'] = (int) $iSaveMail; $aResult['ThreadsEnabled'] = !!$oAccount->Domain->UseThreads; $aResult['UseThreads'] = false; $aResult['SaveRepliedMessagesToCurrentFolder'] = false; $aResult['DesktopNotifications'] = (bool) $oAccount->User->DesktopNotifications; $aResult['AllowChangeInputDirection'] = (bool) $oAccount->User->AllowChangeInputDirection; $aResult['EnableOpenPgp'] = (bool) $oAccount->User->EnableOpenPgp; $aResult['AllowAutosaveInDrafts'] = (bool) $oAccount->User->AllowAutosaveInDrafts; $aResult['AutosignOutgoingEmails'] = (bool) $oAccount->User->AutosignOutgoingEmails; if ($aResult['ThreadsEnabled']) { $aResult['UseThreads'] = (bool) $oAccount->User->UseThreads; $aResult['SaveRepliedMessagesToCurrentFolder'] = (bool) $oAccount->User->SaveRepliedMessagesToCurrentFolder; } $aResult['OutlookSyncEnable'] = $oApiCapabilityManager->IsOutlookSyncSupported($oAccount); $aResult['MobileSyncEnable'] = $oApiCapabilityManager->IsMobileSyncSupported($oAccount); $aResult['ShowPersonalContacts'] = $oApiCapabilityManager->IsPersonalContactsSupported($oAccount); $aResult['ShowGlobalContacts'] = $oApiCapabilityManager->IsGlobalContactsSupported($oAccount, true); $aResult['IsCollaborationSupported'] = $oApiCapabilityManager->IsCollaborationSupported(); $aResult['AllowFilesSharing'] = (bool) CApi::GetConf('labs.files-sharing', false); $aResult['IsFilesSupported'] = $oApiCapabilityManager->IsFilesSupported($oAccount); $aResult['IsHelpdeskSupported'] = $oApiCapabilityManager->IsHelpdeskSupported($oAccount); $aResult['IsHelpdeskAgent'] = $aResult['IsHelpdeskSupported']; // TODO $aResult['AllowHelpdeskNotifications'] = (bool) $oAccount->User->AllowHelpdeskNotifications; $aResult['LastLogin'] = 0; if ($oSettings->GetConf('WebMail/EnableLastLoginNotification')) { $aResult['LastLogin'] = $oAccount->User->LastLogin; } $aResult['AllowVoice'] = false; $aResult['VoiceProvider'] = ''; $aResult['SipRealm'] = ''; $aResult['SipWebsocketProxyUrl'] = ''; $aResult['SipOutboundProxyUrl'] = ''; $aResult['SipCallerID'] = ''; $aResult['TwilioNumber'] = ''; $aResult['TwilioEnable'] = true; $aResult['SipEnable'] = true; $aResult['SipImpi'] = ''; $aResult['SipPassword'] = ''; $aResult['FilesEnable'] = $oAccount->User->FilesEnable; // $aResult['VoiceAccountSID'] = ''; // $aResult['VoiceAuthToken'] = ''; // $aResult['VoiceAppSID'] = ''; $oApiTenants = CApi::Manager('tenants'); /* @var $oApiTenants CApiTenantsManager */ if ($oApiTenants) { $oTenant = 0 < $oAccount->IdTenant ? $oApiTenants->GetTenantById($oAccount->IdTenant) : $oApiTenants->GetDefaultGlobalTenant(); if ($oTenant) { if ($oTenant->SipAllowConfiguration && $oTenant->SipAllow && $oTenant->IsSipSupported() && $oApiCapabilityManager->IsSipSupported($oAccount)) { $aResult['AllowVoice'] = $oTenant->SipAllow; if ($aResult['AllowVoice']) { $aResult['AllowVoice'] = $oAccount->User->SipEnable; } $aResult['VoiceProvider'] = 'sip'; $aResult['SipRealm'] = (string) $oTenant->SipRealm; $aResult['SipWebsocketProxyUrl'] = (string) $oTenant->SipWebsocketProxyUrl; $aResult['SipOutboundProxyUrl'] = (string) $oTenant->SipOutboundProxyUrl; $aResult['SipCallerID'] = (string) $oTenant->SipCallerID; $aResult['SipEnable'] = $oAccount->User->SipEnable; // $aResult['VoiceImpi'] = $oAccount->User->SipImpi; $aResult['SipImpi'] = $oAccount->User->SipImpi; // $aResult['VoicePassword'] = $oAccount->User->SipPassword; $aResult['SipPassword'] = $oAccount->User->SipPassword; } else if ($oTenant->TwilioAllowConfiguration && $oTenant->TwilioAllow && $oTenant->IsTwilioSupported() && $oApiCapabilityManager->IsTwilioSupported($oAccount)) { $aResult['AllowVoice'] = $oTenant->TwilioAllow; if ($aResult['AllowVoice']) { $aResult['AllowVoice'] = $oAccount->User->TwilioEnable; } $aResult['VoiceProvider'] = 'twilio'; // $aResult['VoiceAccountSID'] = (string) $oTenant->TwilioAccountSID; // $aResult['VoiceAuthToken'] = (string) $oTenant->TwilioAuthToken; // $aResult['VoiceAppSID'] = (string) $oTenant->TwilioAppSID; $aResult['TwilioNumber'] = $oAccount->User->TwilioNumber; $aResult['TwilioEnable'] = $oAccount->User->TwilioEnable; } } if ($aResult['VoiceProvider'] === 'sip' && (0 === strlen($aResult['SipRealm']) || 0 === strlen($aResult['SipWebsocketProxyUrl']))) { $aResult['AllowVoice'] = false; $aResult['SipRealm'] = ''; $aResult['SipWebsocketProxyUrl'] = ''; $aResult['SipOutboundProxyUrl'] = ''; $aResult['SipCallerID'] = ''; $aResult['SipEnable'] = false; $aResult['SipImpi'] = ''; $aResult['SipPassword'] = ''; // $aResult['VoiceAccountSID'] = ''; // $aResult['VoiceAuthToken'] = ''; // $aResult['VoiceAppSID'] = ''; } } /* @var $oApiUsersManager CApiUsersManager */ $oApiUsersManager = CApi::Manager('users'); /* @var $oApiDavManager CApiDavManager */ $oApiDavManager = CApi::Manager('dav'); $aResult['AllowCalendar'] = $oApiCapabilityManager->IsCalendarSupported($oAccount); $aResult['Calendar'] = null; if ($aResult['AllowCalendar'] && $oApiDavManager && $oAccount->IsDefaultAccount) { /* @var $oCalUser CCalUser */ $oCalUser = $oApiUsersManager->GetOrCreateCalUserByUserId($oAccount->IdUser); if ($oCalUser) { $aResult['Calendar'] = array(); $aResult['Calendar']['ShowWeekEnds'] = (bool) $oCalUser->ShowWeekEnds; $aResult['Calendar']['ShowWorkDay'] = (bool) $oCalUser->ShowWorkDay; $aResult['Calendar']['WorkDayStarts'] = (int) $oCalUser->WorkDayStarts; $aResult['Calendar']['WorkDayEnds'] = (int) $oCalUser->WorkDayEnds; $aResult['Calendar']['WeekStartsOn'] = (int) $oCalUser->WeekStartsOn; $aResult['Calendar']['DefaultTab'] = (int) $oCalUser->DefaultTab; $aResult['Calendar']['SyncLogin'] = (string) $oApiDavManager->GetLogin($oAccount); $aResult['Calendar']['DavServerUrl'] = (string) $oApiDavManager->GetServerUrl($oAccount); $aResult['Calendar']['DavPrincipalUrl'] = (string) $oApiDavManager->GetPrincipalUrl($oAccount); $aResult['Calendar']['AllowReminders'] = true; } } $aResult['CalendarSharing'] = false; $aResult['CalendarAppointments'] = false; $aResult['AllowCalendar'] = null === $aResult['Calendar'] ? false : $aResult['AllowCalendar']; if ($aResult['AllowCalendar']) { $aResult['CalendarSharing'] = $oApiCapabilityManager->IsCalendarSharingSupported($oAccount); $aResult['CalendarAppointments'] = $oApiCapabilityManager->IsCalendarAppointmentsSupported($oAccount); } $oApiSocial /* @var $oApiSocial \CApiSocialManager */ = \CApi::Manager('social'); $aSocials = $oApiSocial->GetSocials($oAccount->IdAccount); $aResult['SocialAccounts'] = array(); foreach ($aSocials as $oSocial) { if ($oSocial && $oSocial instanceof \CSocial) { $aResult['SocialAccounts'][] = $oSocial->ToArray(); } } $bIsDemo = false; CApi::Plugin()->RunHook('plugin-is-demo-account', array(&$oAccount, &$bIsDemo)); $aResult['IsDemo'] = $bIsDemo; CApi::Plugin()->RunHook('api-app-user-data', array(&$oAccount, &$aResult)); } return $aResult; } /** * @param string $sLang * * @return string */ private function getLanguageName($sLang) { static $aCache = null; if (null === $aCache) { $aCache = CApi::GetConf('langs.names', array()); if (is_array($aCache)) { $aCache = array_change_key_case($aCache, CASE_LOWER); } } if (isset($aCache[strtolower($sLang)])) { return $aCache[strtolower($sLang)]; } return $sLang; } /** * @return array */ public function GetLanguageList() { static $aList = null; if (null === $aList) { $aList = array(); $sDir = CApi::WebMailPath().'i18n'; if (@is_dir($sDir)) { $rDirH = @opendir($sDir); if ($rDirH) { while (($sFile = @readdir($rDirH)) !== false) { if ('.' !== $sFile{0} && is_file($sDir.'/'.$sFile) && '.ini' === substr($sFile, -4)) { $sLang = strtolower(substr($sFile, 0, -4)); if (0 < strlen($sLang)) { if ('english' === $sLang) { array_unshift($aList, substr($sFile, 0, -4)); } else { $aList[] = substr($sFile, 0, -4); } } } } @closedir($rDirH); } } } return $aList; } /** * @return array */ public function GetThemeList() { static $sList = null; if (null === $sList) { $sList = array(); $aThemes = CApi::GetConf('themes', array()); $sDir = CApi::WebMailPath().'skins'; if (is_array($aThemes)) { foreach ($aThemes as $sTheme) { if (file_exists($sDir.'/'.$sTheme.'/styles.css')) { $sList[] = $sTheme; } } } } return $sList; } /** * @param CDomain $oDomain * * @return array */ public function GetTabList($oDomain) { $aList = array(); if ($oDomain->AllowWebMail) { $aList['mailbox'] = CApi::ClientI18N('TITLE/MAILBOX_TAB'); } if ($oDomain->AllowContacts) { $aList['contacts'] = CApi::ClientI18N('TITLE/CONTACTS'); } if ($oDomain->AllowCalendar) { $aList['calendar'] = CApi::ClientI18N('TITLE/CALENDAR'); } if ($oDomain->AllowFiles) { $aList['files'] = CApi::ClientI18N('TITLE/FILESTORAGE'); } if ($oDomain->AllowHelpdesk) { $aList['helpdesk'] = CApi::ClientI18N('TITLE/HELPDESK'); } return $aList; } /** * @param bool $bHelpdesk = false * @param int $iHelpdeskIdTenant = null * @param string $sHelpdeskTenantHash = '' * @param string $sCalendarPubHash = '' * @param string $sFileStoragePubHash = '' * @return array */ public function AppData($bHelpdesk = false, $iHelpdeskIdTenant = null, $sHelpdeskTenantHash = '', $sCalendarPubHash = '', $sFileStoragePubHash = '') { $aAppData = array( 'Auth' => false, 'User' => null, 'TenantHash' => '', 'IsMobile' => 0, 'IsMailsuite' => false, 'HelpdeskSiteName' => '', 'HelpdeskIframeUrl' => '', 'HelpdeskRedirect' => false, 'HelpdeskThreadId' => 0, 'HelpdeskActivatedEmail' => '', 'HelpdeskForgotHash' => '', 'ClientDebug' => \CApi::GetConf('labs.webmail-client-debug', false), 'MailExpandFolders' => \CApi::GetConf('labs.mail-expand-folders', false), 'HtmlEditorDefaultFontName' => \CApi::GetConf('labs.htmleditor-default-font-name', ''), 'HtmlEditorDefaultFontSize' => \CApi::GetConf('labs.htmleditor-default-font-size', ''), 'AllowSaveAsPdf' => !!\CApi::GetConf('labs.allow-save-as-pdf', false), 'LastErrorCode' => $this->GetLastErrorCode(), 'Token' => $this->GetCsrfToken(), 'ZipAttachments' => !!class_exists('ZipArchive'), 'AllowIdentities' => !!$this->oSettings->GetConf('WebMail/AllowIdentities'), 'SocialFacebook' => false, 'SocialGoogle' => false, 'SocialGoogleId' => '', 'SocialGoogleApiKey' => '', 'SocialTwitter' => false, 'SocialDropbox' => false, 'SocialDropboxKey' => '', 'SocialDropboxSecret' => '', 'SocialEmail' => '', 'SocialIsLoggined' => false, 'Links' => array( 'ImportingContacts' => \CApi::GetConf('links.importing-contacts', ''), 'OutlookSyncPlugin32' => \CApi::GetConf('links.outlook-sync-plugin-32', ''), 'OutlookSyncPlugin64' => \CApi::GetConf('links.outlook-sync-plugin-64', ''), 'OutlookSyncPluginReadMore' => \CApi::GetConf('links.outlook-sync-read-more', '') ) ); $oApiCapability = \CApi::Manager('capability'); if ($oApiCapability) { if ($oApiCapability->IsNotLite()) { $aAppData['IsMobile'] = $this->IsMobile(); } $aAppData['IsMailsuite'] = $oApiCapability->IsMailsuite(); } $iIdTenant = 0; if (\CApi::GetConf('labs.allow-social-integration', true)) { \api_Social::Init($aAppData, $sHelpdeskTenantHash); } if (0 < $aAppData['LastErrorCode']) { $this->ClearLastErrorCode(); } $oAccount = null; if (!empty($sCalendarPubHash)) { $oAccount = $this->GetLogginedDefaultAccount(); if ($oAccount) { $aAppData['Auth'] = true; $aAppData['User'] = $this->appDataUserSettings($oAccount); } $aAppData['CalendarPubHash'] = $sCalendarPubHash; $aAppData['IsMobile'] = 0; return $aAppData; } if (!empty($sFileStoragePubHash)) { $aAppData['FileStoragePubHash'] = $sFileStoragePubHash; $oMin = \CApi::Manager('min'); $mMin = $oMin->GetMinByHash($sFileStoragePubHash); $aAppData['FileStoragePubParams'] = array(); if (!empty($mMin['__hash__'])) { $aAppData['FileStoragePubParams'] = $mMin; } $aAppData['IsMobile'] = 0; return $aAppData; } $oApiHelpdeskManager = CApi::Manager('helpdesk'); /* @var $oApiHelpdeskManager CApiHelpdeskManager */ $oApiTenant = CApi::Manager('tenants'); /* @var $oApiTenant CApiTenantsManager */ $oTenant = $oApiTenant ? $oApiTenant->GetDefaultGlobalTenant() : null; $aAppData['LoginStyleImage'] = ''; $aAppData['AppStyleImage'] = ''; $aAppData['HelpdeskSiteName'] = ''; $aAppData['HelpdeskStyleImage'] = ''; if ($oTenant) { $aAppData['LoginStyleImage'] = $oTenant->LoginStyleImage; $aAppData['AppStyleImage'] = $oTenant->AppStyleImage; } $mThreadId = $this->GetThreadIdFromRequestAndClear(); if ($bHelpdesk) { $aHelpdeskMainData = null; $aAppData['TenantHash'] = $sHelpdeskTenantHash; $aAppData['IsMobile'] = 0; $iUserId = $this->GetLogginedHelpdeskUserId(); if (0 < $iUserId && $oApiHelpdeskManager) { $oHelpdeskUser = $oApiHelpdeskManager->GetUserById($iHelpdeskIdTenant, $iUserId); if ($oHelpdeskUser) { $aHelpdeskMainData = $oApiHelpdeskManager->GetHelpdeskMainSettings($oHelpdeskUser->IdTenant); $aAppData['Auth'] = true; $aAppData['HelpdeskIframeUrl'] = $oHelpdeskUser->IsAgent ? $aHelpdeskMainData['AgentIframeUrl'] : $aHelpdeskMainData['ClientIframeUrl']; $aAppData['HelpdeskSiteName'] = isset($aHelpdeskMainData['SiteName']) ? $aHelpdeskMainData['SiteName'] : ''; $aAppData['User'] = $this->appDataHelpdeskUserSettings($oHelpdeskUser); } } if (!$aHelpdeskMainData && $oApiHelpdeskManager) { $iIdTenant = $this->GetTenantIdByHash($sHelpdeskTenantHash); if (0 < $iIdTenant) { $aHelpdeskMainData = $oApiHelpdeskManager->GetHelpdeskMainSettings($iIdTenant); $aAppData['HelpdeskSiteName'] = isset($aHelpdeskMainData['SiteName']) ? $aHelpdeskMainData['SiteName'] : ''; $aAppData['HelpdeskStyleImage'] = isset($aHelpdeskMainData['StyleImage']) && isset($aHelpdeskMainData['StyleAllow']) && $aAppData['StyleAllow'] ? $aHelpdeskMainData['StyleImage'] : ''; } } $oHttp = \MailSo\Base\Http::SingletonInstance(); $aAppData['HelpdeskForgotHash'] = $oHttp->GetRequest('forgot', ''); if (0 === strlen($aAppData['HelpdeskForgotHash'])) { $aAppData['HelpdeskThreadId'] = null === $mThreadId ? 0 : $mThreadId; $aAppData['HelpdeskActivatedEmail'] = $this->GetActivatedUserEmailAndClear(); } $aAppData['App'] = array(); $aAppData['App']['DateFormats'] = array(); foreach (array(EDateFormat::MMDDYYYY, EDateFormat::DDMMYYYY, EDateFormat::DD_MONTH_YYYY) as $sDateFmtName) { $aAppData['App']['DateFormats'][] = $sDateFmtName; } return $aAppData; } else { $aAppData['HelpdeskRedirect'] = is_int($mThreadId); $aAppData['HelpdeskThreadId'] = null === $mThreadId ? 0 : $mThreadId; } $oDefaultAccount = null; $oDomain = null; $iUserId = $this->GetLogginedUserId(); if (0 < $iUserId) { /* @var $oApiUsersManager CApiUsersManager */ $oApiUsersManager = CApi::Manager('users'); $aInfo = $oApiUsersManager->GetUserAccountListInformation($iUserId); if (is_array($aInfo) && 0 < count($aInfo)) { $aAppData['Auth'] = true; $iDefault = 0; $aAccounts = array(); foreach ($aInfo as $iAccountId => $aData) { if (is_array($aData) && !empty($aData[1])) { $aAccounts[] = array( 'AccountID' => $iAccountId, 'Email' => $aData[1], 'FriendlyName' => $aData[2], 'Signature' => array( 'Signature' => $aData[3], 'Type' => $aData[4], 'Options' => $aData[5] ) ); if ($aData[0]) { $iDefault = $iAccountId; } } } $aAppData['Default'] = $iDefault; $aAppData['Accounts'] = $aAccounts; $oDefaultAccount = $oApiUsersManager->GetAccountById($iDefault); if ($oDefaultAccount) { $aAppData['User'] = $this->appDataUserSettings($oDefaultAccount); if ($oApiHelpdeskManager) { $aData = $oApiHelpdeskManager->GetHelpdeskMainSettings($oDefaultAccount->IdTenant); $aAppData['HelpdeskIframeUrl'] = isset($aAppData['User']['IsHelpdeskAgent']) && $aAppData['User']['IsHelpdeskAgent'] ? $aData['AgentIframeUrl'] : $aData['ClientIframeUrl']; } } } } if ($aAppData['Auth']) { if (0 < $oDefaultAccount->IdTenant) { $aAppData['AppStyleImage'] = ''; $oAccountTenant = $oApiTenant ? (0 < $oDefaultAccount->IdTenant ? $oApiTenant->GetTenantById($oDefaultAccount->IdTenant) : $oApiTenant->GetDefaultGlobalTenant()) : null; if ($oAccountTenant) { $aAppData['AppStyleImage'] = $oAccountTenant->AppStyleImage; } } } $oDomain = $this->getDefaultAccountDomain($oDefaultAccount); $aAppData['App'] = $this->appDataDomainSettings($oDomain, $oDefaultAccount); $aAppData['Plugins'] = array(); $aAppData['HelpdeskThreadId'] = null === $aAppData['HelpdeskThreadId'] ? 0 : $aAppData['HelpdeskThreadId']; CApi::Plugin()->RunHook('api-app-data', array($oDefaultAccount, &$aAppData)); return $aAppData; } public function GetAhdSocialUser($sHelpdeskTenantHash = '', $sUserId = '') { $sTenantHash = $sHelpdeskTenantHash; $iIdTenant = $this->GetTenantIdByHash($sTenantHash); if (!is_int($iIdTenant)) { throw new \ProjectSeven\Exceptions\ClientException(\ProjectSeven\Notifications::InvalidInputParameter); } $oApiHelpdeskManager = CApi::Manager('helpdesk'); $oUser = $oApiHelpdeskManager->GetUserBySocialId($iIdTenant, $sUserId); return $oUser; } /** * @param bool $bHelpdesk = false * @param int $iHelpdeskIdTenant = null * @param string $sHelpdeskHash = '' * @param string $sCalendarPubHash = '' * @param string $sFileStoragePubHash = '' * * @return string */ private function compileAppData($bHelpdesk = false, $iHelpdeskIdTenant = null, $sHelpdeskHash = '', $sCalendarPubHash = '', $sFileStoragePubHash = '') { return '<script>window.pSevenAppData='.@json_encode($this->AppData($bHelpdesk, $iHelpdeskIdTenant, $sHelpdeskHash, $sCalendarPubHash, $sFileStoragePubHash)).';</script>'; } /** * @return array */ private function getThemeAndLanguage() { static $sLanguage = false; static $sTheme = false; static $sSiteName = false; if (false === $sLanguage && false === $sTheme && false === $sSiteName) { $oSettings =& CApi::GetSettings(); $sSiteName = $oSettings->GetConf('Common/SiteName'); $sLanguage = $oSettings->GetConf('Common/DefaultLanguage'); $sTheme = $oSettings->GetConf('WebMail/DefaultSkin'); $oAccount = $this->GetLogginedDefaultAccount(); if ($oAccount) { $sSiteName = $oAccount->Domain->SiteName; $sTheme = $oAccount->User->DefaultSkin; $sLanguage = $oAccount->User->DefaultLanguage; } else { /* @var $oApiDomainsManager CApiDomainsManager */ $oApiDomainsManager = CApi::Manager('domains'); $oInput = new api_Http(); $oDomain = /* @var $oDomain CDomain */ $oApiDomainsManager->GetDomainByUrl($oInput->GetHost()); if ($oDomain) { $sTheme = $oDomain->DefaultSkin; $sLanguage = $this->GetLoginLanguage(); if (empty($sLanguage)) { $sLanguage = $this->getBrowserLanguage(); } if (empty($sLanguage)) { $sLanguage = $oDomain->DefaultLanguage; } $sSiteName = $oDomain->SiteName; } } $sLanguage = $this->validatedLanguageValue($sLanguage); $sTheme = $this->validatedThemeValue($sTheme); } return array($sLanguage, $sTheme, $sSiteName); } private function getBrowserLanguage() { // $aLanguages = array('af'=>'Afrikaans', 'sq'=>'Albanian', 'ar-dz'=>'Arabic (Algeria)', 'ar-bh'=>'Arabic (Bahrain)', 'ar-eg'=>'Arabic (Egypt)', 'ar-iq'=>'Arabic (Iraq)', 'ar-jo'=>'Arabic (Jordan)', 'ar-kw'=>'Arabic (Kuwait)', 'ar-lb'=>'Arabic (Lebanon)', 'ar-ly'=>'Arabic (libya)', 'ar-ma'=>'Arabic (Morocco)', 'ar-om'=>'Arabic (Oman)', 'ar-qa'=>'Arabic (Qatar)', 'ar-sa'=>'Arabic (Saudi Arabia)', 'ar-sy'=>'Arabic (Syria)', 'ar-tn'=>'Arabic (Tunisia)', 'ar-ae'=>'Arabic (U.A.E.)', 'ar-ye'=>'Arabic (Yemen)', 'ar'=>'Arabic', 'hy'=>'Armenian', 'as'=>'Assamese', 'az'=>'Azeri', 'eu'=>'Basque', 'be'=>'Belarusian', 'bn'=>'Bengali', 'bg'=>'Bulgarian', 'ca'=>'Catalan', 'zh-cn'=>'Chinese (China)', 'zh-hk'=>'Chinese (Hong Kong SAR)', 'zh-mo'=>'Chinese (Macau SAR)', 'zh-sg'=>'Chinese (Singapore)', 'zh-tw'=>'Chinese (Taiwan)', 'zh'=>'Chinese', 'hr'=>'Croatian', 'cs'=>'Czech', 'da'=>'Danish', 'div'=>'Divehi', 'nl-be'=>'Dutch (Belgium)', 'nl'=>'Dutch (Netherlands)', 'en-au'=>'English (Australia)', 'en-bz'=>'English (Belize)', 'en-ca'=>'English (Canada)', 'en-ie'=>'English (Ireland)', 'en-jm'=>'English (Jamaica)', 'en-nz'=>'English (New Zealand)', 'en-ph'=>'English (Philippines)', 'en-za'=>'English (South Africa)', 'en-tt'=>'English (Trinidad)', 'en-gb'=>'English (United Kingdom)', 'en-us'=>'English (United States)', 'en-zw'=>'English (Zimbabwe)', 'en'=>'English', 'us'=>'English (United States)', 'et'=>'Estonian', 'fo'=>'Faeroese', 'fa'=>'Farsi', 'fi'=>'Finnish', 'fr-be'=>'French (Belgium)', 'fr-ca'=>'French (Canada)', 'fr-lu'=>'French (Luxembourg)', 'fr-mc'=>'French (Monaco)', 'fr-ch'=>'French (Switzerland)', 'fr'=>'French (France)', 'mk'=>'FYRO Macedonian', 'gd'=>'Gaelic', 'ka'=>'Georgian', 'de-at'=>'German (Austria)', 'de-li'=>'German (Liechtenstein)', 'de-lu'=>'German (Luxembourg)', 'de-ch'=>'German (Switzerland)', 'de'=>'German (Germany)', 'el'=>'Greek', 'gu'=>'Gujarati', 'he'=>'Hebrew', 'hi'=>'Hindi', 'hu'=>'Hungarian', 'is'=>'Icelandic', 'id'=>'Indonesian', 'it-ch'=>'Italian (Switzerland)', 'it'=>'Italian (Italy)', 'ja'=>'Japanese', 'kn'=>'Kannada', 'kk'=>'Kazakh', 'kok'=>'Konkani', 'ko'=>'Korean', 'kz'=>'Kyrgyz', 'lv'=>'Latvian', 'lt'=>'Lithuanian', 'ms'=>'Malay', 'ml'=>'Malayalam', 'mt'=>'Maltese', 'mr'=>'Marathi', 'mn'=>'Mongolian (Cyrillic)', 'ne'=>'Nepali (India)', 'nb-no'=>'Norwegian (Bokmal)', 'nn-no'=>'Norwegian (Nynorsk)', 'no'=>'Norwegian (Bokmal)', 'or'=>'Oriya', 'pl'=>'Polish', 'pt-br'=>'Portuguese (Brazil)', 'pt'=>'Portuguese (Portugal)', 'pa'=>'Punjabi', 'rm'=>'Rhaeto-Romanic', 'ro-md'=>'Romanian (Moldova)', 'ro'=>'Romanian', 'ru-md'=>'Russian (Moldova)', 'ru'=>'Russian', 'sa'=>'Sanskrit', 'sr'=>'Serbian', 'sk'=>'Slovak', 'ls'=>'Slovenian', 'sb'=>'Sorbian', 'es-ar'=>'Spanish (Argentina)', 'es-bo'=>'Spanish (Bolivia)', 'es-cl'=>'Spanish (Chile)', 'es-co'=>'Spanish (Colombia)', 'es-cr'=>'Spanish (Costa Rica)', 'es-do'=>'Spanish (Dominican Republic)', 'es-ec'=>'Spanish (Ecuador)', 'es-sv'=>'Spanish (El Salvador)', 'es-gt'=>'Spanish (Guatemala)', 'es-hn'=>'Spanish (Honduras)', 'es-mx'=>'Spanish (Mexico)', 'es-ni'=>'Spanish (Nicaragua)', 'es-pa'=>'Spanish (Panama)', 'es-py'=>'Spanish (Paraguay)', 'es-pe'=>'Spanish (Peru)', 'es-pr'=>'Spanish (Puerto Rico)', 'es-us'=>'Spanish (United States)', 'es-uy'=>'Spanish (Uruguay)', 'es-ve'=>'Spanish (Venezuela)', 'es'=>'Spanish (Traditional Sort)', 'sx'=>'Sutu', 'sw'=>'Swahili', 'sv-fi'=>'Swedish (Finland)', 'sv'=>'Swedish', 'syr'=>'Syriac', 'ta'=>'Tamil', 'tt'=>'Tatar', 'te'=>'Telugu', 'th'=>'Thai', 'ts'=>'Tsonga', 'tn'=>'Tswana', 'tr'=>'Turkish', 'uk'=>'Ukrainian', 'ur'=>'Urdu', 'uz'=>'Uzbek', 'vi'=>'Vietnamese', 'xh'=>'Xhosa', 'yi'=>'Yiddish', 'zu'=>'Zulu'); $aLanguages = array( 'ar-dz' => 'Arabic', 'ar-bh' => 'Arabic', 'ar-eg' => 'Arabic', 'ar-iq' => 'Arabic', 'ar-jo' => 'Arabic', 'ar-kw' => 'Arabic', 'ar-lb' => 'Arabic', 'ar-ly' => 'Arabic', 'ar-ma' => 'Arabic', 'ar-om' => 'Arabic', 'ar-qa' => 'Arabic', 'ar-sa' => 'Arabic', 'ar-sy' => 'Arabic', 'ar-tn' => 'Arabic', 'ar-ae' => 'Arabic', 'ar-ye' => 'Arabic', 'ar' => 'Arabic', 'bg' => 'Bulgarian', 'zh-cn' => 'Chinese-Simplified', 'zh-hk' => 'Chinese-Simplified', 'zh-mo' => 'Chinese-Simplified', 'zh-sg' => 'Chinese-Simplified', 'zh-tw' => 'Chinese-Simplified', 'zh' => 'Chinese-Simplified', 'cs' => 'Czech', 'da' => 'Danish', 'nl-be' => 'Dutch', 'nl' => 'Dutch', 'en-au' => 'English', 'en-bz' => 'English ', 'en-ca' => 'English', 'en-ie' => 'English', 'en-jm' => 'English', 'en-nz' => 'English', 'en-ph' => 'English', 'en-za' => 'English', 'en-tt' => 'English', 'en-gb' => 'English', 'en-us' => 'English', 'en-zw' => 'English', 'en' => 'English', 'us' => 'English', 'et' => 'Estonian', 'fi' => 'Finnish', 'fr-be' => 'French', 'fr-ca' => 'French', 'fr-lu' => 'French', 'fr-mc' => 'French', 'fr-ch' => 'French', 'fr' => 'French', 'de-at' => 'German', 'de-li' => 'German', 'de-lu' => 'German', 'de-ch' => 'German', 'de' => 'German', 'el' => 'Greek', 'he' => 'Hebrew', 'hu' => 'Hungarian', 'it-ch' => 'Italian', 'it' => 'Italian', 'ja' => 'Japanese', 'ko' => 'Korean', 'lv' => 'Latvian', 'lt' => 'Lithuanian', 'nb-no' => 'Norwegian', 'nn-no' => 'Norwegian', 'no' => 'Norwegian', 'pl' => 'Polish', 'pt-br' => 'Portuguese-Brazil', 'pt' => 'Portuguese-Portuguese', 'pt-pt' => 'Portuguese-Portuguese', 'ro-md' => 'Romanian', 'ro' => 'Romanian', 'ru-md' => 'Russian', 'ru' => 'Russian', 'sr' => 'Serbian', 'es-ar' => 'Spanish', 'es-bo' => 'Spanish', 'es-cl' => 'Spanish', 'es-co' => 'Spanish', 'es-cr' => 'Spanish', 'es-do' => 'Spanish', 'es-ec' => 'Spanish', 'es-sv' => 'Spanish', 'es-gt' => 'Spanish', 'es-hn' => 'Spanish)', 'es-mx' => 'Spanish', 'es-ni' => 'Spanish', 'es-pa' => 'Spanish', 'es-py' => 'Spanish', 'es-pe' => 'Spanish', 'es-pr' => 'Spanish', 'es-us' => 'Spanish ', 'es-uy' => 'Spanish', 'es-ve' => 'Spanish', 'es' => 'Spanish', 'sv-fi' => 'Swedish', 'sv' => 'Swedish', 'th' => 'Thai', 'tr' => 'Turkish', 'uk' => 'Ukrainian' ); $sLanguage = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']) : 'en'; $aTempLanguages = preg_split('/[,;]+/', $sLanguage); $sLanguage = !empty($aTempLanguages[0]) ? $aTempLanguages[0] : 'en'; $sLanguageShort = substr($sLanguage, 0, 2); return \array_key_exists($sLanguage, $aLanguages) ? $aLanguages[$sLanguage] : (\array_key_exists($sLanguageShort, $aLanguages) ? $aLanguages[$sLanguageShort] : ''); } /** * @param bool $bHelpdesk = false * @return string */ public function GetAppDirValue($bHelpdesk = false) { list($sLanguage, $sTheme, $sSiteName) = $this->getThemeAndLanguage(); return \in_array($sLanguage, array('Arabic', 'Hebrew', 'Persian')) ? 'rtl' : 'ltr'; } /** * @param string $sWebPath = '.' * @param bool $bHelpdesk = false * @param int $iHelpdeskIdTenant = null * @param string $sHelpdeskHash = '' * @param string $sCalendarPubHash = '' * @param string $sFileStoragePubHash = '' * @param bool $bMobile = false * @return string */ public function BuildHeadersLink($sWebPath = '.', $bHelpdesk = false, $iHelpdeskIdTenant = null, $sHelpdeskHash = '', $sCalendarPubHash = '', $sFileStoragePubHash = '', $bMobile = false) { list($sLanguage, $sTheme, $sSiteName) = $this->getThemeAndLanguage($bHelpdesk); $sMobileSuffix = $bMobile ? '-mobile' : ''; $sVersionJs = '?'.CApi::VersionJs(); $sWebPath = empty($sWebPath) ? '.' : $sWebPath; if ($bHelpdesk) { $sS = '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/static/css/libs.css'.$sVersionJs.'" />'. '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/skins/'.$sTheme.'/styles'.$sMobileSuffix.'.css'.$sVersionJs.'" />'; $oApiTenant = /* @var $oApiTenant CApiTenantsManager */ CApi::Manager('tenants'); $oTenant = $oApiTenant && null !== $iHelpdeskIdTenant ? (0 < $iHelpdeskIdTenant ? $oApiTenant->GetTenantById($iHelpdeskIdTenant) : $oApiTenant->GetDefaultGlobalTenant()) : null; if ($oTenant && $oTenant->HelpdeskStyleAllow) { $sS .= '<style>'.strip_tags($oTenant->GetHelpdeskStyleText()).'</style>'; } return $sS; } else if (!empty($sCalendarPubHash)) { return '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/static/css/libs.css'.$sVersionJs.'" />'. '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/skins/'.$sTheme.'/styles'.$sMobileSuffix.'.css'.$sVersionJs.'" />'; } else if (!empty($sFileStoragePubHash)) { return '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/static/css/libs.css'.$sVersionJs.'" />'. '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/skins/'.$sTheme.'/styles'.$sMobileSuffix.'.css'.$sVersionJs.'" />'; } else { $sS = '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/static/css/libs.css'.$sVersionJs.'" />'. '<link type="text/css" rel="stylesheet" href="'.$sWebPath.'/skins/'.$sTheme.'/styles'.$sMobileSuffix.'.css'.$sVersionJs.'" />'; $sS .= '<style>'.\CApi::Plugin()->CompileCss().'</style>'; return $sS; } } /** * @param string $sWebPath = '.' * @param bool $bHelpdesk = false * @param int $iHelpdeskIdTenant = null * @param string $sHelpdeskHash = '' * @param string $sCalendarPubHash = '' * @param string $sFileStoragePubHash = '' * @param bool $bMobile = false * * @return string */ public function BuildBody($sWebPath = '.', $bHelpdesk = false, $iHelpdeskIdTenant = null, $sHelpdeskHash = '', $sCalendarPubHash = '', $sFileStoragePubHash = '', $bMobile = false) { list($sLanguage, $sTheme, $sSiteName) = $this->getThemeAndLanguage(); $sMobileSuffix = $bMobile && !$bHelpdesk ? '-mobile' : ''; $sWebPath = empty($sWebPath) ? '.' : $sWebPath; return '<div class="pSevenMain"><div id="pSevenLoading"></div><div id="pSevenContent"></div><div id="pSevenHidden"></div>'. '<div>'. $this->compileTemplates($sTheme, $bMobile). '<script src="'.$sWebPath.'/static/js/libs.js?'.CApi::VersionJs().'"></script>'. $this->compileLanguage($sLanguage). $this->compileAppData($bHelpdesk, $iHelpdeskIdTenant, $sHelpdeskHash, $sCalendarPubHash, $sFileStoragePubHash). '<script src="'.$sWebPath.'/static/js/app'.$sMobileSuffix.($bHelpdesk ? '-helpdesk' : (empty($sCalendarPubHash) ? (empty($sFileStoragePubHash) ? '' : '-filestorage-pub') : '-calendar-pub')).(CApi::GetConf('labs.use-app-min-js', false) ? '.min' : '').'.js?'.CApi::VersionJs().'"></script>'. (CApi::Plugin()->HasJsFiles() ? '<script src="?/Plugins/js/'.CApi::Plugin()->Hash().'/"></script>' : ''). '</div></div>'."\r\n".'<!-- '.CApi::Version().' -->' ; } }