%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/ |
Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/api.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 Api */ class CApi { /** * @var CApiGlobalManager */ static $oManager; /** * @var CApiPluginManager */ static $oPlugin; /** * @var array */ static $aConfig; /** * @var bool */ static $bIsValid; /** * @var string */ static $sSalt; /** * @var array */ static $aI18N; /** * @var array */ static $aClientI18N; /** * @var bool */ static $bUseDbLog = true; public static function Run() { include_once self::LibrariesPath().'MailSo/MailSo.php'; CApi::$aI18N = null; CApi::$aClientI18N = array(); if (!is_object(CApi::$oManager)) { CApi::Inc('common.functions'); CApi::Inc('common.constants'); CApi::Inc('common.enum'); CApi::Inc('common.exception'); CApi::Inc('common.utils'); CApi::Inc('common.crypt'); CApi::Inc('common.container'); CApi::Inc('common.manager'); CApi::Inc('common.xml'); CApi::Inc('common.plugin'); CApi::Inc('common.utils.get'); CApi::Inc('common.utils.post'); CApi::Inc('common.utils.session'); CApi::Inc('common.http'); CApi::Inc('common.social'); CApi::Inc('common.twilio'); CApi::Inc('common.db.storage'); $sSalt = ''; $sSaltFile = CApi::DataPath().'/salt.php'; if (!@file_exists($sSaltFile)) { $sSaltDesc = '<?php #'.md5(microtime(true).rand(1000, 9999)).md5(microtime(true).rand(1000, 9999)); @file_put_contents($sSaltFile, $sSaltDesc); } else { $sSalt = md5(file_get_contents($sSaltFile)); } CApi::$sSalt = $sSalt; CApi::$aConfig = include CApi::RootPath().'common/config.php'; $sSettingsFile = CApi::DataPath().'/settings/config.php'; if (@file_exists($sSettingsFile)) { $aAppConfig = include $sSettingsFile; if (is_array($aAppConfig)) { CApi::$aConfig = array_merge(CApi::$aConfig, $aAppConfig); } } $oHtml = \MailSo\Base\Http::SingletonInstance(); $sHost = $oHtml->GetHost(); if (0 < \strlen($sHost)) { $sDomainSettingsFile = CApi::DataPath().'/settings/'.$sHost.'.config.php'; if (@file_exists($sDomainSettingsFile)) { $aDomainAppConfig = include $sDomainSettingsFile; if (is_array($aDomainAppConfig)) { CApi::$aConfig = array_merge(CApi::$aConfig, $aDomainAppConfig); } } } CApi::$oManager = new CApiGlobalManager(); CApi::$oPlugin = new CApiPluginManager(CApi::$oManager); CApi::$bIsValid = CApi::validateApi(); CApi::$oManager->PrepareStorageMap(); require_once CApi::RootPath().'DAV/autoload.php'; } } /** * @return string */ static public function EncodeKeyValues(array $aValues, $iSaltLen = 32) { return api_Utils::UrlSafeBase64Encode( api_Crypt::XxteaEncrypt(serialize($aValues), substr(md5(self::$sSalt), 0, $iSaltLen))); } /** * @return array */ public static function DecodeKeyValues($sEncodedValues, $iSaltLen = 32) { $aResult = unserialize( api_Crypt::XxteaDecrypt( api_Utils::UrlSafeBase64Decode($sEncodedValues), substr(md5(self::$sSalt), 0, $iSaltLen))); return is_array($aResult) ? $aResult : array(); } public static function PostRun() { CApi::Manager('users'); CApi::Manager('domains'); } /** * @return CApiPluginManager */ public static function Plugin() { return CApi::$oPlugin; } /** * @param string $sManagerType * @param string $sForcedStorage = '' */ public static function Manager($sManagerType, $sForcedStorage = '') { return CApi::$oManager->GetByType($sManagerType, $sForcedStorage); } /** * @return CApiGlobalManager */ public static function GetManager() { return CApi::$oManager; } /** * @return \MailSo\Cache\CacheClient */ public static function Cacher() { static $oCacher = null; if (null === $oCacher) { $oCacher = \MailSo\Cache\CacheClient::NewInstance(); $oCacher->SetDriver(\MailSo\Cache\Drivers\File::NewInstance(CApi::DataPath().'/cache')); $oCacher->SetCacheIndex(self::Version()); } return $oCacher; } /** * @return api_Settings */ public static function &GetSettings() { return CApi::$oManager->GetSettings(); } /** * @param string $sKey * * @return mixed */ public static function GetSettingsConf($sKey) { $oSettings =& CApi::GetSettings(); return $oSettings->GetConf($sKey); } /** * @return PDO|false */ public static function GetPDO() { static $oPdoCache = null; if (null !== $oPdoCache) { return $oPdoCache; } $oSettings =& CApi::GetSettings(); $sDbPort = ''; $sUnixSocket = ''; $iDbType = $oSettings->GetConf('Common/DBType'); $sDbHost = $oSettings->GetConf('Common/DBHost'); $sDbName = $oSettings->GetConf('Common/DBName'); $sDbLogin = $oSettings->GetConf('Common/DBLogin'); $sDbPassword = $oSettings->GetConf('Common/DBPassword'); $iPos = strpos($sDbHost, ':'); if (false !== $iPos && 0 < $iPos) { $sAfter = substr($sDbHost, $iPos + 1); $sDbHost = substr($sDbHost, 0, $iPos); if (is_numeric($sAfter)) { $sDbPort = $sAfter; } else { $sUnixSocket = $sAfter; } } $oPdo = false; if (class_exists('PDO')) { try { $oPdo = @new PDO((EDbType::PostgreSQL === $iDbType ? 'pgsql' : 'mysql').':dbname='.$sDbName. (empty($sDbHost) ? '' : ';host='.$sDbHost). (empty($sDbPort) ? '' : ';port='.$sDbPort). (empty($sUnixSocket) ? '' : ';unix_socket='.$sUnixSocket), $sDbLogin, $sDbPassword); if ($oPdo) { $oPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } } catch (Exception $oException) { self::Log($oException->getMessage(), ELogLevel::Error); self::Log($oException->getTraceAsString(), ELogLevel::Error); $oPdo = false; } } else { self::Log('Class PDO dosn\'t exist', ELogLevel::Error); } if (false !== $oPdo) { $oPdoCache = $oPdo; } return $oPdo; } /** * @param string $sKey * @param mixed $mDefault = null * @return mixed */ public static function GetConf($sKey, $mDefault = null) { return (isset(CApi::$aConfig[$sKey])) ? CApi::$aConfig[$sKey] : $mDefault; } /** * @param string $sKey * @param mixed $mValue * @return void */ public static function SetConf($sKey, $mValue) { CApi::$aConfig[$sKey] = $mValue; } /** * @return bool */ public static function ManagerInc($sManagerName, $sFileName, $bDoExitOnError = true) { $sManagerName = preg_replace('/[^a-z]/', '', strtolower($sManagerName)); return CApi::Inc('common.managers.'.$sManagerName.'.'.$sFileName, $bDoExitOnError); } /** * @return bool */ public static function ManagerPath($sManagerName, $sFileName) { $sManagerName = preg_replace('/[^a-z]/', '', strtolower($sManagerName)); return CApi::IncPath('common.managers.'.$sManagerName.'.'.$sFileName); } /** * @return bool */ public static function StorageInc($sManagerName, $sStorageName, $sFileName) { $sManagerName = preg_replace('/[^a-z]/', '', strtolower($sManagerName)); $sStorageName = preg_replace('/[^a-z]/', '', strtolower($sStorageName)); return CApi::Inc('common.managers.'.$sManagerName.'.storages.'.$sStorageName.'.'.$sFileName); } /** * @return bool */ public static function IncPath($sFileName) { $sFileName = preg_replace('/[^a-z0-9\._\-]/', '', strtolower($sFileName)); $sFileName = preg_replace('/[\.]+/', '.', $sFileName); $sFileName = str_replace('.', '/', $sFileName); return CApi::RootPath().$sFileName.'.php'; } /** * @param string $sFileName * @param bool $bDoExitOnError = true * @return bool */ public static function Inc($sFileName, $bDoExitOnError = true) { static $aCache = array(); $sFileFullPath = ''; $sFileName = preg_replace('/[^a-z0-9\._\-]/', '', strtolower($sFileName)); $sFileName = preg_replace('/[\.]+/', '.', $sFileName); $sFileName = str_replace('.', '/', $sFileName); if (isset($aCache[$sFileName])) { return true; } else { $sFileFullPath = CApi::RootPath().$sFileName.'.php'; if (@file_exists($sFileFullPath)) { $aCache[$sFileName] = true; include_once $sFileFullPath; return true; } } if ($bDoExitOnError) { exit('FILE NOT EXISTS = '.$sFileFullPath); } return false; } /** * @param string $sNewLocation */ public static function Location($sNewLocation) { CApi::Log('Location: '.$sNewLocation); @header('Location: '.$sNewLocation); } /** * @param string $sDesc * @param CAccount|string|null $mAccount */ public static function LogEvent($sDesc, $mAccount = null) { $oSettings =& CApi::GetSettings(); if ($oSettings && $oSettings->GetConf('Common/EnableEventLogging')) { $sDate = gmdate('H:i:s'); $iIp = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknown'; $sAccount = $mAccount instanceof \CAccount ? $mAccount->Email : (is_string($mAccount) ? $mAccount : 'unknown'); CApi::Log('Event: '.$sAccount.' > '.$sDesc); CApi::LogOnly('['.$sDate.']['.$iIp.']['.$sAccount.'] > '.$sDesc, CApi::GetConf('log.event-file', 'event.txt')); } } /** * @param mixed $mObject * @param int $iLogLevel = ELogLevel::Full * @param string $sFilePrefix = '' */ public static function LogObject($mObject, $iLogLevel = ELogLevel::Full, $sFilePrefix = '') { CApi::Log(print_r($mObject, true), $iLogLevel, $sFilePrefix); } /** * @param Exception $mObject * @param int $iLogLevel = ELogLevel::Error * @param string $sFilePrefix = '' */ public static function LogException($mObject, $iLogLevel = ELogLevel::Error, $sFilePrefix = '') { CApi::Log((string) $mObject, $iLogLevel, $sFilePrefix); } /** * @param string $sFilePrefix = '' * * @return string */ public static function GetLogFileName($sFilePrefix = '') { return $sFilePrefix.CApi::GetConf('log.log-file', 'log.txt'); } /** * @param bool $bOn = true */ public static function SpecifiedUserLogging($bOn = true) { if ($bOn) { @setcookie('SpecifiedUserLogging', '1', 0, CApi::GetConf('labs.app-cookie-path', '/'), null, null, true); } else { @setcookie('SpecifiedUserLogging', '0', 0, CApi::GetConf('labs.app-cookie-path', '/'), null, null, true); } } /** * @return \MailSo\Log\Logger */ public static function MailSoLogger() { static $oLogger = null; if (null === $oLogger) { $oLogger = \MailSo\Log\Logger::NewInstance() ->Add( \MailSo\Log\Drivers\Callback::NewInstance(function ($sDesc) { CApi::Log($sDesc); })->DisableTimePrefix()->DisableGuidPrefix() ) ->AddForbiddenType(\MailSo\Log\Enumerations\Type::TIME) ; } return $oLogger; } /** * @param string $sDesc * @param string $sLogFile */ private static function dbDebugBacktrace($sDesc, $sLogFile) { static $iDbBacktraceCount = null; if (null === $iDbBacktraceCount) { $iDbBacktraceCount = (int) CApi::GetConf('labs.db-debug-backtrace-limit', 0); if (!function_exists('debug_backtrace') || version_compare(PHP_VERSION, '5.4.0') < 0) { $iDbBacktraceCount = 0; } } if (0 < $iDbBacktraceCount && is_string($sDesc) && (false !== strpos($sDesc, 'DB[') || false !== strpos($sDesc, 'DB ERROR'))) { $bSkip = true; $sLogData = ''; $iCount = $iDbBacktraceCount; foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 20) as $aData) { if ($aData && isset($aData['function']) && !in_array(strtolower($aData['function']), array( 'log', 'logonly', 'logend', 'logevent', 'logexception', 'logobject', 'dbdebugbacktrace' ))) { $bSkip = false; } if (!$bSkip) { $iCount--; if (isset($aData['class'], $aData['type'], $aData['function'])) { $sLogData .= $aData['class'].$aData['type'].$aData['function']; } else if (isset($aData['function'])) { $sLogData .= $aData['function']; } if (isset($aData['file'])) { $sLogData .= ' ../'.basename($aData['file']); } if (isset($aData['line'])) { $sLogData .= ' *'.$aData['line']; } $sLogData .= "\n"; } if (0 === $iCount) { break; } } if (0 < strlen($sLogData)) { try { @error_log('['.\MailSo\Log\Logger::Guid().'][DB/backtrace]'.API_CRLF.trim($sLogData).API_CRLF, 3, $sLogFile); } catch (Exception $oE) {} } } } /** * @param string $sDesc * @param int $iLogLevel = ELogLevel::Full * @param string $sFilePrefix = '' * @param bool $bIdDb = false */ public static function Log($sDesc, $iLogLevel = ELogLevel::Full, $sFilePrefix = '') { static $bIsFirst = true; $oSettings =& CApi::GetSettings(); if ($oSettings && $oSettings->GetConf('Common/EnableLogging') && ($iLogLevel <= $oSettings->GetConf('Common/LoggingLevel') || (ELogLevel::Spec === $oSettings->GetConf('Common/LoggingLevel') && isset($_COOKIE['SpecifiedUserLogging']) && '1' === (string) $_COOKIE['SpecifiedUserLogging']))) { $sLogFile = self::GetLogFileName($sFilePrefix); $sGuid = \MailSo\Log\Logger::Guid(); $aMicro = explode('.', microtime(true)); $sDate = gmdate('H:i:s.').str_pad((isset($aMicro[1]) ? substr($aMicro[1], 0, 2) : '0'), 2, '0'); if ($bIsFirst) { $sUri = api_Utils::RequestUri(); $bIsFirst = false; $sPost = (isset($_POST) && count($_POST) > 0) ? '[POST('.count($_POST).')]' : '[GET]'; CApi::LogOnly(API_CRLF.'['.$sDate.']['.$sGuid.'] '.$sPost.'[ip:'.(isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'unknown').'] '.$sUri, $sLogFile); if (!empty($sPost)) { if (CApi::GetConf('labs.log.post-view', false)) { CApi::LogOnly('['.$sDate.']['.$sGuid.'] POST > '.print_r($_POST, true), $sLogFile); } else { CApi::LogOnly('['.$sDate.']['.$sGuid.'] POST > ['.implode(', ', array_keys($_POST)).']', $sLogFile); } } CApi::LogOnly('['.$sDate.']['.$sGuid.']', $sLogFile); // @register_shutdown_function('CApi::LogEnd'); } CApi::LogOnly('['.$sDate.']['.$sGuid.'] '.(is_string($sDesc) ? $sDesc : print_r($sDesc, true)), $sLogFile); } } /** * @param string $sDesc * @param string $sLogFile */ public static function LogOnly($sDesc, $sLogFile) { static $bDir = null; static $sLogDir = null; if (null === $sLogDir) { $sS = CApi::GetConf('log.custom-full-path', ''); $sLogDir = empty($sS) ? CApi::DataPath().'/logs/' : rtrim(trim($sS), '\\/').'/'; } if (null === $bDir) { $bDir = true; if (!@is_dir($sLogDir)) { @mkdir($sLogDir, 0777); } } try { @error_log($sDesc.API_CRLF, 3, $sLogDir.$sLogFile); } catch (Exception $oE) {} self::dbDebugBacktrace($sDesc, $sLogDir.$sLogFile); } public static function LogEnd() { CApi::Log('# script shutdown'); } /** * @return string */ public static function RootPath() { defined('API_ROOTPATH') || define('API_ROOTPATH', rtrim(dirname(__FILE__), '/\\').'/'); return API_ROOTPATH; } /** * @return string */ public static function WebMailPath() { return CApi::RootPath().ltrim(API_PATH_TO_WEBMAIL, '/'); } /** * @return string */ public static function LibrariesPath() { return CApi::RootPath().'../'; } /** * @return string */ public static function Version() { static $sVersion = null; if (null === $sVersion) { $sAppVersion = @file_get_contents(CApi::WebMailPath().'VERSION'); $sVersion = (false === $sAppVersion) ? '0.0.0' : $sAppVersion; } return $sVersion; } /** * @return string */ public static function VersionJs() { return preg_replace('/[^0-9a-z]/', '', CApi::Version(). (CApi::GetConf('labs.cache.static', true) ? '' : '-'.md5(time()))); } /** * @return string */ public static function DataPath() { $dataPath = 'data'; if (!defined('API_DATA_FOLDER') && @file_exists(CApi::WebMailPath().'inc_settings_path.php')) { include CApi::WebMailPath().'inc_settings_path.php'; } if (!defined('API_DATA_FOLDER') && isset($dataPath) && null !== $dataPath) { define('API_DATA_FOLDER', api_Utils::GetFullPath($dataPath, CApi::WebMailPath())); } return defined('API_DATA_FOLDER') ? API_DATA_FOLDER : ''; } /** * @return bool */ protected static function validateApi() { $iResult = 1; $oSettings =& CApi::GetSettings(); $iResult &= $oSettings && ($oSettings instanceof api_Settings); return (bool) $iResult; } /** * @return bool */ public static function IsValid() { return (bool) CApi::$bIsValid; } /** * @param string $sEmail * @param string $sPassword * @param string $sLogin = '' * @return string */ public static function GenerateSsoToken($sEmail, $sPassword, $sLogin = '') { $sSsoHash = \md5($sEmail.$sPassword.$sLogin.\microtime(true).\rand(10000, 99999)); return CApi::Cacher()->Set('SSO:'.$sSsoHash, CApi::EncodeKeyValues(array( 'Email' => $sEmail, 'Password' => $sPassword, 'Login' => $sLogin ))) ? $sSsoHash : ''; } /** * @param string $sLangFile * @return array */ private static function convertIniToLang($sLangFile) { $aResultLang = false; $aLang = @parse_ini_string(file_get_contents($sLangFile), true); if (is_array($aLang)) { $aResultLang = array(); foreach ($aLang as $sKey => $mValue) { if (is_array($mValue)) { foreach ($mValue as $sSecKey => $mSecValue) { $aResultLang[$sKey.'/'.$sSecKey] = $mSecValue; } } else { $aResultLang[$sKey] = $mValue; } } } return $aResultLang; } /** * @param mixed $mLang * @param string $sData * @param array|null $aParams = null * @return array */ private static function processTranslateParams($mLang, $sData, $aParams = null, $iPlural = null) { $sResult = $sData; if ($mLang && isset($mLang[$sData])) { $sResult = $mLang[$sData]; } if (isset($iPlural)) { $aPluralParts = explode('|', $sResult); $sResult = ($aPluralParts && $aPluralParts[$iPlural]) ? $aPluralParts[$iPlural] : ( $aPluralParts && $aPluralParts[0] ? $aPluralParts[0] : $sResult); } if (null !== $aParams && is_array($aParams)) { foreach ($aParams as $sKey => $sValue) { $sResult = str_replace('%'.$sKey.'%', $sValue, $sResult); } } return $sResult; } /** * @param string $sData * @param CAccount $oAccount * @param array $aParams = null * * @return string */ public static function ClientI18N($sData, $oAccount = null, $aParams = null, $iPluralCount = null) { $sLanguage = $oAccount ? $oAccount->User->DefaultLanguage : ''; if (empty($sLanguage)) { $oSettings =& \CApi::GetSettings(); $sLanguage = $oSettings->GetConf('Common/DefaultLanguage'); } $aLang = null; if (isset(CApi::$aClientI18N[$sLanguage])) { $aLang = CApi::$aClientI18N[$sLanguage]; } else { CApi::$aClientI18N[$sLanguage] = false; $sLangFile = CApi::WebMailPath().'i18n/'.$sLanguage.'.ini'; if (!@file_exists($sLangFile)) { $sLangFile = CApi::WebMailPath().'i18n/English.ini'; $sLangFile = @file_exists($sLangFile) ? $sLangFile : ''; } if (0 < strlen($sLangFile)) { $aLang = self::convertIniToLang($sLangFile); if (is_array($aLang)) { CApi::$aClientI18N[$sLanguage] = $aLang; } } } // return self::processTranslateParams($aLang, $sData, $aParams); return isset($iPluralCount) ? self::processTranslateParams($aLang, $sData, $aParams, self::getPlural($sLanguage, $iPluralCount)) : self::processTranslateParams($aLang, $sData, $aParams); } public static function getPlural($sLang = '', $iNumber = 0) { $iResult = 0; $iNumber = (int) $iNumber; switch ($sLang) { case 'Arabic': $iResult = ($iNumber === 0 ? 0 : $iNumber === 1 ? 1 : ($iNumber === 2 ? 2 : ($iNumber % 100 >= 3 && $iNumber % 100 <= 10 ? 3 : ($iNumber % 100 >= 11 ? 4 : 5)))); break; case 'Bulgarian': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Chinese-Simplified': $iResult = 0; break; case 'Chinese-Traditional': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Czech': $iResult = ($iNumber === 1) ? 0 : (($iNumber >= 2 && $iNumber <= 4) ? 1 : 2); break; case 'Danish': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Dutch': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'English': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Estonian': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Finish': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'French': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'German': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Greek': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Hebrew': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Hungarian': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Italian': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Japanese': $iResult = 0; break; case 'Korean': $iResult = 0; break; case 'Latvian': $iResult = ($iNumber % 10 === 1 && $iNumber % 100 !== 11 ? 0 : ($iNumber !== 0 ? 1 : 2)); break; case 'Lithuanian': $iResult = ($iNumber % 10 === 1 && $iNumber % 100 !== 11 ? 0 : ($iNumber % 10 >= 2 && ($iNumber % 100 < 10 || $iNumber % 100 >= 20) ? 1 : 2)); break; case 'Norwegian': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Persian': $iResult = 0; break; case 'Polish': $iResult = ($iNumber === 1 ? 0 : ($iNumber % 10 >= 2 && $iNumber % 10 <= 4 && ($iNumber % 100 < 10 || $iNumber % 100 >= 20) ? 1 : 2)); break; case 'Portuguese-Portuguese': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Portuguese-Brazil': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Romanian': $iResult = ($iNumber === 1 ? 0 : (($iNumber === 0 || ($iNumber % 100 > 0 && $iNumber % 100 < 20)) ? 1 : 2)); break; case 'Russian': $iResult = ($iNumber % 10 === 1 && $iNumber % 100 !== 11 ? 0 : ($iNumber % 10 >= 2 && $iNumber % 10 <= 4 && ($iNumber % 100 < 10 || $iNumber % 100 >= 20) ? 1 : 2)); break; case 'Serbian': $iResult = ($iNumber % 10 === 1 && $iNumber % 100 !== 11 ? 0 : ($iNumber % 10 >= 2 && $iNumber % 10 <= 4 && ($iNumber % 100 < 10 || $iNumber % 100 >= 20) ? 1 : 2)); break; case 'Spanish': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Swedish': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Thai': $iResult = 0; break; case 'Turkish': $iResult = ($iNumber === 1 ? 0 : 1); break; case 'Ukrainian': $iResult = ($iNumber % 10 === 1 && $iNumber % 100 !== 11 ? 0 : ($iNumber % 10 >= 2 && $iNumber % 10 <= 4 && ($iNumber % 100 < 10 || $iNumber % 100 >= 20) ? 1 : 2)); break; default: $iResult = 0; break; } return $iResult; } /** * @param string $sMimeType * @param string $sFileName = '' * @return bool */ public static function isExpandMimeTypeSupported($sMimeType, $sFileName = '') { $bResult = false; \CApi::Plugin()->RunHook('webmail.supports-expanding-attachments', array(&$bResult, $sMimeType, $sFileName)); return $bResult; } /** * @param string $sMimeType * @param string $sFileName = '' * @return bool */ public static function isIframedMimeTypeSupported($sMimeType, $sFileName = '') { $bResult = /*!$this->oHttp->IsLocalhost() &&*/ // TODO \CApi::GetConf('labs.allow-officeapps-viewer', true) && !!preg_match('/\.(doc|docx|docm|dotm|dotx|xlsx|xlsb|xls|xlsm|pptx|ppsx|ppt|pps|pptm|potm|ppam|potx|ppsm)$/', strtolower(trim($sFileName))); \CApi::Plugin()->RunHook('webmail.supports-iframed-attachments', array(&$bResult, $sMimeType, $sFileName)); return $bResult; } /** * @param string $sData * @param array $aParams = null * * @return string */ public static function I18N($sData, $aParams = null, $sForceCustomInitialisationLang = '') { if (null === CApi::$aI18N) { CApi::$aI18N = false; if ('' !== $sForceCustomInitialisationLang) { $sLang = $sForceCustomInitialisationLang; } else { $sLang = CApi::GetConf('labs.i18n', ''); } $sLangFile = ''; if (0 < strlen($sLang)) { $sLangFile = CApi::RootPath().'common/i18n/'.$sLang.'.ini'; } if (0 === strlen($sLangFile) || !@file_exists($sLangFile)) { $sLangFile = CApi::RootPath().'common/i18n/English.ini'; } if (0 < strlen($sLangFile) && @file_exists($sLangFile)) { $aResultLang = self::convertIniToLang($sLangFile); if (is_array($aResultLang)) { CApi::$aI18N = $aResultLang; } } } return self::processTranslateParams(CApi::$aI18N, $sData, $aParams); } } CApi::Run(); CApi::PostRun();