%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/ |
Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/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 Api */ class CApiGlobalManager { /** * @var api_Settings */ protected $oSettings; /** * @var CDbStorage */ protected $oConnection; /** * @var IDbHelper */ protected $oSqlHelper; /** * @var array */ protected $aManagers; /** * @var array */ protected $aStorageMap; public function __construct() { $this->oSettings = null; $this->oConnection = null; $this->oSqlHelper = null; $this->aManagers = array(); $this->aStorageMap = array( 'mailsuite' => 'db', 'min' => 'db', 'fetchers' => 'db', 'helpdesk' => 'db', 'subscriptions' => 'db', 'db' => 'db', 'domains' => 'db', 'tenants' => 'db', 'channels' => 'db', 'users' => 'db', 'webmail' => 'db', 'mail' => 'db', 'gcontacts' => 'db', 'maincontacts' => 'db', 'filecache' => 'file', 'calendar' => 'sabredav', 'filestorage' => 'sabredav', 'social' => 'db' ); if (CApi::GetConf('gcontacts.ldap', false)) { $this->aStorageMap['gcontacts'] = 'ldap'; } if (CApi::GetConf('contacts.ldap', false)) { $this->aStorageMap['maincontacts'] = 'ldap'; } } /** * @return api_Settings */ public function &GetSettings() { if (null === $this->oSettings) { CApi::Inc('common.settings'); try { $this->oSettings = new api_Settings(CApi::DataPath()); } catch (CApiBaseException $oException) { $this->oSettings = false; } } return $this->oSettings; } public function PrepareStorageMap() { CApi::Plugin()->RunHook('api-prepare-storage-map', array(&$this->aStorageMap)); } /** * @param string $sManagerName * @return string */ public function GetStorageByType($sManagerName) { $sManagerName = strtolower($sManagerName); return isset($this->aStorageMap[$sManagerName]) ? $this->aStorageMap[$sManagerName] : ''; } /** * @return CDbStorage */ public function &GetConnection() { if (null === $this->oConnection) { $oSettings =& $this->GetSettings(); if ($oSettings) { $this->oConnection = new CDbStorage($oSettings); } else { $this->oConnection = false; } } return $this->oConnection; } /** * @return CDbStorage */ public function &GetSqlHelper() { if (null === $this->oSqlHelper) { $oSettings =& $this->GetSettings(); if ($oSettings) { $this->oSqlHelper = CDbCreator::CreateCommandCreatorHelper($oSettings); } else { $this->oSqlHelper = false; } } return $this->oSqlHelper; } /** * @param bool $iMailProtocol * @return CApiImap4MailProtocol */ public function GetSimpleMailProtocol($sHost, $iPort, $bUseSsl = false) { CApi::Inc('common.net.protocols.imap4'); return new CApiImap4MailProtocol($sHost, $iPort, $bUseSsl); } public function &GetCommandCreator(AApiManagerStorage &$oStorage, $aCommandCreatorsNames) { $oSettings =& $oStorage->GetSettings(); $oCommandCreatorHelper =& $this->GetSqlHelper(); $oCommandCreator = null; if ($oSettings) { $sDbType = $oSettings->GetConf('Common/DBType'); $sDbPrefix = $oSettings->GetConf('Common/DBPrefix'); if (isset($aCommandCreatorsNames[$sDbType])) { CApi::Inc('common.db.command_creator'); CApi::StorageInc($oStorage->GetManagerName(), $oStorage->GetStorageName(), 'command_creator'); $oCommandCreator = new $aCommandCreatorsNames[$sDbType]($oCommandCreatorHelper, $sDbPrefix); } } return $oCommandCreator; } /** * @param string $sManagerType * @param string $sForcedStorage = '' */ public function GetByType($sManagerType, $sForcedStorage = '') { $oResult = null; if (CApi::IsValid()) { $sManagerKey = empty($sForcedStorage) ? $sManagerType : $sManagerType.'/'.$sForcedStorage; if (isset($this->aManagers[$sManagerKey])) { $oResult =& $this->aManagers[$sManagerKey]; } else { $sManagerType = strtolower($sManagerType); if (CApi::Inc('common.managers.'.$sManagerType.'.manager', false)) { $sClassName = 'CApi'.ucfirst($sManagerType).'Manager'; $oMan = new $sClassName($this, $sForcedStorage); $sCurrentStorageName = $oMan->GetStorageName(); $sManagerKey = empty($sCurrentStorageName) ? $sManagerType : $sManagerType.'/'.$sCurrentStorageName; $this->aManagers[$sManagerKey] = $oMan; $oResult =& $this->aManagers[$sManagerKey]; } } } return $oResult; } /** * @param string $sManagerType * @param string $sForcedStorage = '' */ public function GetByType1($sManagerType, $sForcedStorage = '') { $oResult = null; if (CApi::IsValid()) { if (empty($sForcedStorage)) { if (isset($this->aManagers[$sManagerType])) { $oResult =& $this->aManagers[$sManagerType]; } else { $sManagerType = strtolower($sManagerType); if (CApi::Inc('common.managers.'.$sManagerType.'.manager', false)) { $sClassName = 'CApi'.ucfirst($sManagerType).'Manager'; $this->aManagers[$sManagerType] = new $sClassName($this); $oResult =& $this->aManagers[$sManagerType]; } } } else { if (CApi::Inc('common.managers.'.$sManagerType.'.manager', false)) { $sClassName = 'CApi'.ucfirst($sManagerType).'Manager'; $oResult = new $sClassName($this, $sForcedStorage); } } } return $oResult; } } /** * @package Api */ class CApiGlobalManagerException extends CApiBaseException {} /** * @package Api */ abstract class AApiManager { /** * @var CApiManagerException */ protected $oLastException; /** * @var string */ protected $sManagerName; /** * @var CApiGlobalManager */ protected $oManager; /** * @var api_Settings */ protected $oSettings; public function __construct($sManagerName, CApiGlobalManager &$oManager) { $this->sManagerName = strtolower($sManagerName); $this->oSettings =& $oManager->GetSettings(); $this->oManager =& $oManager; $this->oLastException = null; } /** * @return string */ public function GetManagerName() { return $this->sManagerName; } /** * @return string */ public function GetStorageName() { return ''; } /** * @return &api_Settings */ public function &GetSettings() { return $this->oSettings; } /** * @param string $sInclude * @return void */ protected function inc($sInclude, $bDoExitOnError = true) { CApi::ManagerInc($this->GetManagerName(), $sInclude, $bDoExitOnError); } /** * @param string $sInclude * @return string */ public function path($sInclude) { return CApi::ManagerPath($this->GetManagerName(), $sInclude); } /** * @param Exception $oException * @param bool $bLog = true */ protected function setLastException(Exception $oException, $bLog = true) { $this->oLastException = $oException; if ($bLog) { $sFile = str_replace( str_replace('\\', '/', strtolower(realpath(CApi::WebMailPath()))), '~ ', str_replace('\\', '/', strtolower($oException->getFile()))); CApi::Log('Exception['.$oException->getCode().']: '.$oException->getMessage(). API_CRLF.$sFile.' ('.$oException->getLine().')'. API_CRLF.'----------------------------------------------------------------------'. API_CRLF.$oException->getTraceAsString(), ELogLevel::Error); } } /** * @return Exception */ public function GetLastException() { return $this->oLastException; } /** * @return int */ public function GetLastErrorCode() { $iResult = 0; if (null !== $this->oLastException) { $iResult = $this->oLastException->getCode(); } return $iResult; } /** * @return string */ public function GetLastErrorMessage() { $sResult = ''; if (null !== $this->oLastException) { $sResult = $this->oLastException->getMessage(); } return $sResult; } } /** * @package Api */ abstract class AApiManagerWithStorage extends AApiManager { /** * @var string */ protected $sStorageName; /** * @var AApiManagerStorage */ protected $oStorage; /** * @param string $sManagerName * @param CApiGlobalManager &$oManager * @param string $sForcedStorage = '' * @return AApiManager */ public function __construct($sManagerName, CApiGlobalManager &$oManager, $sForcedStorage = '') { parent::__construct($sManagerName, $oManager); $this->oStorage = null; $this->sStorageName = !empty($sForcedStorage) ? strtolower(trim($sForcedStorage)) : strtolower($oManager->GetStorageByType($sManagerName)); CApi::Inc('common.managers.'.$this->GetManagerName().'.storages.default'); if (CApi::Inc('common.managers.'.$this->GetManagerName().'.storages.'.$this->GetStorageName().'.storage', false)) { $sClassName = 'CApi'.ucfirst($this->GetManagerName()).ucfirst($this->GetStorageName()).'Storage'; $this->oStorage = new $sClassName($oManager); } else { $sClassName = 'CApi'.ucfirst($this->GetManagerName()).'Storage'; $this->oStorage = new $sClassName($this->sStorageName, $oManager); } } /** * @return string */ public function GetStorageName() { return $this->sStorageName; } /** * @return AApiManagerStorage */ public function &GetStorage() { return $this->oStorage; } public function moveStorageExceptionToManager() { if ($this->oStorage) { $oException = $this->oStorage->GetStorageException(); if ($oException) { $this->oLastException = $oException; } } } } /** * @package Api */ class CApiManagerException extends CApiBaseException {} /** * @package Api */ abstract class AApiManagerStorage { /** * @var string */ protected $sManagerName; /** * @var string */ protected $sStorageName; /** * @var api_Settings */ protected $oSettings; /** * @var CApiBaseException */ protected $oLastException; public function __construct($sManagerName, $sStorageName, CApiGlobalManager &$oManager) { $this->sManagerName = strtolower($sManagerName); $this->sStorageName = strtolower($sStorageName); $this->oSettings =& $oManager->GetSettings(); $this->oLastException = null; } /** * @return string */ public function GetManagerName() { return $this->sManagerName; } /** * @return string */ public function GetStorageName() { return $this->sStorageName; } /** * @return &api_Settings */ public function &GetSettings() { return $this->oSettings; } /** * @return CApiBaseException */ public function GetStorageException() { return $this->oLastException; } /** * @param CApiBaseException $oException */ public function SetStorageException($oException) { $this->oLastException = $oException; } /** * @todo move to db storage */ protected function throwDbExceptionIfExist() { // connection in db storage if ($this->oConnection) { $oException = $this->oConnection->GetException(); if ($oException instanceof CApiDbException) { throw new CApiBaseException(Errs::Db_ExceptionError, $oException); } } } /** * @param string $sInclude * @return void */ protected function inc($sInclude) { CApi::StorageInc($this->GetManagerName(), $this->GetStorageName(), $sInclude); } } /** * @package Api */ class CApiStorageException extends CApiBaseException {}