%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/tenants/ |
Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/tenants/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 Tenants */ class CApiTenantsManager extends AApiManagerWithStorage { /** * @var array */ static $aTenantNameCache = array(); /** * @param CApiGlobalManager &$oManager */ public function __construct(CApiGlobalManager &$oManager, $sForcedStorage = '') { parent::__construct('tenants', $oManager, $sForcedStorage); $this->inc('classes.tenant'); } /** * @param int $iPage * @param int $iTenantsPerPage * @param string $sOrderBy = 'Login' * @param bool $bOrderType = true * @param string $sSearchDesc = '' * * @return array | false [Id => [Login, Description]] */ public function GetTenantList($iPage, $iTenantsPerPage, $sOrderBy = 'Login', $bOrderType = true, $sSearchDesc = '') { $aResult = false; try { $aResult = $this->oStorage->GetTenantList($iPage, $iTenantsPerPage, $sOrderBy, $bOrderType, $sSearchDesc); } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $aResult; } /** * @param string $sSearchDesc = '' * * @return int|false */ public function GetTenantCount($sSearchDesc = '') { $iResult = false; try { $iResult = $this->oStorage->GetTenantCount($sSearchDesc); } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $iResult; } /** * @param int $iTenantId * * @return int */ public function GetTenantAllocatedSize($iTenantId) { $iResult = 0; if (0 < $iTenantId) { try { $iResult = $this->oStorage->GetTenantAllocatedSize($iTenantId); } catch (CApiBaseException $oException) { $this->setLastException($oException); } } return $iResult; } /** * @return CTenant */ public function GetDefaultGlobalTenant() { $oTenant = new CTenant(); $oTenant->IsDefault = true; $oTenant->SipAllowConfiguration = true; $oTenant->TwilioAllowConfiguration = true; $oTenant->HelpdeskAdminEmailAccount = $this->oSettings->GetConf('Helpdesk/AdminEmailAccount'); $oTenant->HelpdeskClientIframeUrl = $this->oSettings->GetConf('Helpdesk/ClientIframeUrl'); $oTenant->HelpdeskAgentIframeUrl = $this->oSettings->GetConf('Helpdesk/AgentIframeUrl'); $oTenant->HelpdeskSiteName = $this->oSettings->GetConf('Helpdesk/SiteName'); $oTenant->HelpdeskStyleAllow = $this->oSettings->GetConf('Helpdesk/StyleAllow'); $oTenant->HelpdeskStyleImage = $this->oSettings->GetConf('Helpdesk/StyleImage'); $oTenant->HelpdeskStyleText = $this->oSettings->GetConf('Helpdesk/StyleText'); $oTenant->HelpdeskFetcherType = $this->oSettings->GetConf('Helpdesk/FetcherType'); $oTenant->LoginStyleImage = $this->oSettings->GetConf('Common/LoginStyleImage'); $oTenant->AppStyleImage = $this->oSettings->GetConf('Common/AppStyleImage'); return $oTenant; } /** * @param mixed $mTenantId * @param bool $bIdIsHash = false * * @return CTenant */ public function GetTenantById($mTenantId, $bIdIsHash = false) { $oTenant = null; try { $oTenant = $this->oStorage->GetTenantById($mTenantId, $bIdIsHash); if ($oTenant) { /* @var $oTenant CTenant */ $mTenantId = $oTenant->IdTenant; $iFilesUsageInMB = 0; if (0 < strlen($oTenant->FilesUsageInBytes)) { $iFilesUsageInMB = (int) ($oTenant->FilesUsageInBytes / (1024 * 1024)); } $oTenant->AllocatedSpaceInMB = $this->GetTenantAllocatedSize($mTenantId) + $iFilesUsageInMB; $oTenant->FlushObsolete('AllocatedSpaceInMB'); $oTenant->FilesUsageInMB = $iFilesUsageInMB; $oTenant->FlushObsolete('FilesUsageInMB'); if (0 < $oTenant->QuotaInMB) { $oTenant->FilesUsageDynamicQuotaInMB = $oTenant->QuotaInMB - $oTenant->AllocatedSpaceInMB + $oTenant->FilesUsageInMB; $oTenant->FilesUsageDynamicQuotaInMB = 0 < $oTenant->FilesUsageDynamicQuotaInMB ? $oTenant->FilesUsageDynamicQuotaInMB : 0; $oTenant->FlushObsolete('FilesUsageDynamicQuotaInMB'); } } } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $oTenant; } /** * @param string $sTenantHash * * @return CTenant */ public function GetTenantByHash($sTenantHash) { return $this->GetTenantById($sTenantHash, true); } /** * @param string $sTenantLogin * @param string $sTenantPassword = null * * @return int */ public function GetTenantIdByLogin($sTenantLogin, $sTenantPassword = null) { $iTenantId = 0; try { if (!empty($sTenantLogin)) { $iTenantId = $this->oStorage->GetTenantIdByLogin($sTenantLogin, $sTenantPassword); } } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $iTenantId; } /** * @param string $iDomainId * * @return int */ public function GetTenantIdByDomainId($iDomainId) { $iTenantId = 0; try { if (0 < $iDomainId) { $iTenantId = $this->oStorage->GetTenantIdByDomainId($iDomainId); } } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $iTenantId; } /** * @param int $iIdTenant * @param bool $bUseCache = false * * @return string */ public function GetTenantLoginById($iIdTenant, $bUseCache = false) { $sResult = ''; try { if (0 < $iIdTenant) { if ($bUseCache && !empty(self::$aTenantNameCache[$iIdTenant])) { return self::$aTenantNameCache[$iIdTenant]; } $sResult = $this->oStorage->GetTenantLoginById($iIdTenant); if ($bUseCache && !empty($sResult)) { self::$aTenantNameCache[$iIdTenant] = $sResult; } } } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $sResult; } /** * @param CTenant $oTenant * * @return bool */ public function TenantExists(CTenant $oTenant) { $bResult = $oTenant->IsDefault; if (!$bResult) { try { $bResult = $this->oStorage->TenantExists($oTenant); } catch (CApiBaseException $oException) { $this->setLastException($oException); } } return $bResult; } /** * @param int $iTenantId * * @return array|bool */ public function GetTenantDomains($iTenantId) { $mResult = false; if (0 < $iTenantId) { try { $mResult = $this->oStorage->GetTenantDomains($iTenantId); } catch (CApiBaseException $oException) { $this->setLastException($oException); } } return $mResult; } /** * @param CTenant $oTenant * * @return bool */ public function CreateTenant(CTenant &$oTenant) { $bResult = false; try { if ($oTenant->Validate() && !$oTenant->IsDefault) { if (!$this->TenantExists($oTenant)) { if (0 < $oTenant->IdChannel && CApi::GetConf('tenant', false)) { /* @var $oChannelsApi CApiChannelsManager */ $oChannelsApi = CApi::Manager('channels'); if ($oChannelsApi) { /* @var $oChannel CChannel */ $oChannel = $oChannelsApi->GetChannelById($oTenant->IdChannel); if (!$oChannel) { throw new CApiManagerException(Errs::ChannelsManager_ChannelDoesNotExist); } } else { $oTenant->IdChannel = 0; } } else { $oTenant->IdChannel = 0; } if (!$this->oStorage->CreateTenant($oTenant)) { throw new CApiManagerException(Errs::TenantsManager_TenantCreateFailed); } } else { throw new CApiManagerException(Errs::TenantsManager_TenantAlreadyExists); } } $bResult = true; } catch (CApiBaseException $oException) { $bResult = false; $this->setLastException($oException); } return $bResult; } /** * @param CTenant $oTenant */ public function UpdateTenant(CTenant $oTenant) { $bResult = false; try { if ($oTenant->Validate()) { if ($oTenant->IsDefault && 0 === $oTenant->IdTenant) { $this->oSettings->SetConf('Helpdesk/AdminEmailAccount', $oTenant->HelpdeskAdminEmailAccount); $this->oSettings->SetConf('Helpdesk/ClientIframeUrl', $oTenant->HelpdeskClientIframeUrl); $this->oSettings->SetConf('Helpdesk/AgentIframeUrl', $oTenant->HelpdeskAgentIframeUrl); $this->oSettings->SetConf('Helpdesk/SiteName', $oTenant->HelpdeskSiteName); $this->oSettings->SetConf('Helpdesk/StyleAllow', $oTenant->HelpdeskStyleAllow); $this->oSettings->SetConf('Helpdesk/StyleImage', $oTenant->HelpdeskStyleImage); $this->oSettings->SetConf('Helpdesk/StyleText', $oTenant->HelpdeskStyleText); $this->oSettings->SetConf('Helpdesk/FetcherType', $oTenant->HelpdeskFetcherType); $this->oSettings->SetConf('Common/LoginStyleImage', $oTenant->LoginStyleImage); $this->oSettings->SetConf('Common/AppStyleImage', $oTenant->AppStyleImage); $this->oSettings->SetConf('Helpdesk/FacebookAllow', $oTenant->HelpdeskFacebookAllow); $this->oSettings->SetConf('Helpdesk/FacebookId', $oTenant->HelpdeskFacebookId); $this->oSettings->SetConf('Helpdesk/FacebookSecret', $oTenant->HelpdeskFacebookSecret); $this->oSettings->SetConf('Helpdesk/GoogleAllow', $oTenant->HelpdeskGoogleAllow); $this->oSettings->SetConf('Helpdesk/GoogleId', $oTenant->HelpdeskGoogleId); $this->oSettings->SetConf('Helpdesk/GoogleSecret', $oTenant->HelpdeskGoogleSecret); $this->oSettings->SetConf('Helpdesk/TwitterAllow', $oTenant->HelpdeskTwitterAllow); $this->oSettings->SetConf('Helpdesk/TwitterId', $oTenant->HelpdeskTwitterId); $this->oSettings->SetConf('Helpdesk/TwitterSecret', $oTenant->HelpdeskTwitterSecret); $this->oSettings->SetConf('Social/FacebookAllow', $oTenant->SocialFacebookAllow); $this->oSettings->SetConf('Social/FacebookId', $oTenant->SocialFacebookId); $this->oSettings->SetConf('Social/FacebookSecret', $oTenant->SocialFacebookSecret); $this->oSettings->SetConf('Social/GoogleAllow', $oTenant->SocialGoogleAllow); $this->oSettings->SetConf('Social/GoogleId', $oTenant->SocialGoogleId); $this->oSettings->SetConf('Social/GoogleSecret', $oTenant->SocialGoogleSecret); $this->oSettings->SetConf('Social/GoogleApiKey', $oTenant->SocialGoogleApiKey); $this->oSettings->SetConf('Social/TwitterAllow', $oTenant->SocialTwitterAllow); $this->oSettings->SetConf('Social/TwitterId', $oTenant->SocialTwitterId); $this->oSettings->SetConf('Social/TwitterSecret', $oTenant->SocialTwitterSecret); $this->oSettings->SetConf('Social/TwitterAllow', $oTenant->SocialTwitterAllow); $this->oSettings->SetConf('Social/TwitterId', $oTenant->SocialTwitterId); $this->oSettings->SetConf('Social/TwitterSecret', $oTenant->SocialTwitterSecret); $this->oSettings->SetConf('Social/DropboxAllow', $oTenant->SocialDropboxAllow); $this->oSettings->SetConf('Social/DropboxKey', $oTenant->SocialDropboxKey); $this->oSettings->SetConf('Social/DropboxSecret', $oTenant->SocialDropboxSecret); $this->oSettings->SetConf('Sip/AllowSip', $oTenant->SipAllow); $this->oSettings->SetConf('Sip/Realm', $oTenant->SipRealm); $this->oSettings->SetConf('Sip/WebsocketProxyUrl', $oTenant->SipWebsocketProxyUrl); $this->oSettings->SetConf('Sip/OutboundProxyUrl', $oTenant->SipOutboundProxyUrl); $this->oSettings->SetConf('Sip/CallerID', $oTenant->SipCallerID); $this->oSettings->SetConf('Twilio/AllowTwilio', $oTenant->TwilioAllow); $this->oSettings->SetConf('Twilio/PhoneNumber', $oTenant->TwilioPhoneNumber); $this->oSettings->SetConf('Twilio/AccountSID', $oTenant->TwilioAccountSID); $this->oSettings->SetConf('Twilio/AuthToken', $oTenant->TwilioAuthToken); $this->oSettings->SetConf('Twilio/AppSID', $oTenant->TwilioAppSID); $bResult = $this->oSettings->SaveToXml(); } else { if (null !== $oTenant->GetObsoleteValue('QuotaInMB')) { $iQuota = $oTenant->QuotaInMB; if (0 < $iQuota) { $iSize = $this->GetTenantAllocatedSize($oTenant->IdTenant); if ($iSize > $iQuota) { throw new CApiManagerException(Errs::TenantsManager_QuotaLimitExided); } } } if (!$this->oStorage->UpdateTenant($oTenant)) { throw new CApiManagerException(Errs::TenantsManager_TenantUpdateFailed); } if (null !== $oTenant->GetObsoleteValue('IsDisabled')) { /* @var $oDomainsApi CApiDomainsManager */ $oDomainsApi = CApi::Manager('domains'); if (!$oDomainsApi->EnableOrDisableDomainsByTenantId($oTenant->IdTenant, !$oTenant->IsDisabled)) { $oException = $oDomainsApi->GetLastException(); if ($oException) { throw $oException; } } } } } $bResult = true; // $this->UpdateTenantMainCapa($oTenant->IdTenant); } catch (CApiBaseException $oException) { $bResult = false; $this->setLastException($oException); } return $bResult; } /** * @todo * @param int $iTenantID */ public function UpdateTenantMainCapa($iTenantID) { $bResult = false; if (0 < $iTenantID) { // TODO subscriptions // $aCapa = array(); // $oSubscriptionsApi = /* @var $oSubscriptionsApi CApiSubscriptionsManager */ CApi::Manager('subscriptions'); // $aSubs = $oSubscriptionsApi ? $oSubscriptionsApi->GetSubscriptions($iTenantID) : null; // if (is_array($aSubs) && 0 < count($aSubs)) // { // foreach ($aSubs as /* @var $oSub CSubscription */ $oSub) // { // if ($oSub) // { // $sCapa = $oSub->Capa; // if ('' === $sCapa) // { // $aCapa = array(); // break; // } // else // { // if (0 < strlen($oSub->Capa)) // { // $aCapa = array_merge($aCapa, explode(' ', $oSub->Capa)); // } // } // } // } // } // // try // { // $aCapa = array_unique($aCapa); // $bResult = $this->oStorage->UpdateTenantMainCapa($iTenantID, implode(' ', $aCapa)); // } // catch (CApiBaseException $oException) // { // $this->setLastException($oException); // } } return $bResult; } /** * @param CTenant $oTenant * @param int $iNewAllocatedSizeInBytes * * @return bool */ public function TryToAllocateFileUsage($oTenant, $iNewAllocatedSizeInBytes) { try { if ($oTenant && 0 < $oTenant->IdTenant) { $iNewUsedInMB = (int) round($iNewAllocatedSizeInBytes / (1024 * 1024)); if (0 < $oTenant->QuotaInMB && $oTenant->FilesUsageDynamicQuotaInMB < $iNewUsedInMB) { return false; } else { return $this->oStorage->AllocateFileUsage($oTenant, $iNewAllocatedSizeInBytes); } return true; } } catch (CApiBaseException $oException) { $this->setLastException($oException); } return false; } /** * @param int $iTenantID * @param int|null $iExceptUserId = null * * @return array|bool */ public function GetSubscriptionUserUsage($iTenantID, $iExceptUserId = null) { $mResult = false; if (0 < $iTenantID) { $mResult = $this->oStorage->GetSubscriptionUserUsage($iTenantID, $iExceptUserId); } return $mResult; } /** * @param int $iChannelId * @return array */ public function GetTenantsIdsByChannelId($iChannelId) { $aResult = false; try { $aResult = $this->oStorage->GetTenantsIdsByChannelId($iChannelId); } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $aResult; } /** * @param int $iChannelId * @return bool */ public function DeleteTenantsByChannelId($iChannelId) { $iResult = 1; $aTenantsIds = $this->GetTenantsIdsByChannelId($iChannelId); if (is_array($aTenantsIds)) { foreach ($aTenantsIds as $iTenantId) { if (0 < $iTenantId) { $oTenant = $this->GetTenantById($iTenantId); if ($oTenant) { $iResult &= $this->DeleteTenant($oTenant); } } } } return (bool) $iResult; } /** * @param CTenant $oTenant * * @return bool */ public function DeleteTenant(CTenant $oTenant) { $bResult = false; try { if ($oTenant && !$oTenant->IsDefault) { /* @var $oDomainsApi CApiDomainsManager */ $oDomainsApi = CApi::Manager('domains'); if (!$oDomainsApi->DeleteDomainsByTenantId($oTenant->IdTenant, true)) { $oException = $oDomainsApi->GetLastException(); if ($oException) { throw $oException; } } $bResult = $this->oStorage->DeleteTenant($oTenant->IdTenant); // TODO subscriptions // if ($bResult) // { // $this->oStorage->DeleteTenantSubscriptions($oTenant->IdTenant); // } } } catch (CApiBaseException $oException) { $this->setLastException($oException); } return $bResult; } }