%PDF- %PDF-
| Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/domains/ |
| Current File : //www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/domains/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 Domains
*/
class CApiDomainsManager extends AApiManagerWithStorage
{
/**
* @param CApiGlobalManager &$oManager
*/
public function __construct(CApiGlobalManager &$oManager, $sForcedStorage = '')
{
parent::__construct('domains', $oManager, $sForcedStorage);
$this->inc('classes.domain');
}
/**
* @return CDomain
*/
public function GetDefaultDomain()
{
$oDomain = new CDomain();
$oDomain->IsDefaultDomain = true;
return $oDomain;
}
/**
* @param string $sDomainId
* @return CDomain
*/
public function GetDomainById($sDomainId)
{
$oDomain = null;
try
{
$oDomain = $this->oStorage->GetDomainById($sDomainId);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $oDomain;
}
/**
* @param string $sDomainName
* @return CDomain
*/
public function GetDomainByName($sDomainName)
{
$oDomain = null;
try
{
$oDomain = $this->oStorage->GetDomainByName($sDomainName);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $oDomain;
}
/**
* @param string $sDomainUrl
* @return CDomain
*/
public function GetDomainByUrl($sDomainUrl)
{
$oDomain = null;
try
{
$oDomain = $this->oStorage->GetDomainByUrl($sDomainUrl);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
$oDomain = (null === $oDomain) ? $this->GetDefaultDomain() : $oDomain;
return $oDomain;
}
/**
* @param CDomain &$oDomain
* @return bool
*/
public function CreateDomain(CDomain &$oDomain)
{
$bResult = false;
try
{
if ($oDomain->Validate())
{
if (!$this->DomainExists($oDomain->Name))
{
$oTenant = null;
$oTenantsApi = null;
if (0 < $oDomain->IdTenant && CApi::GetConf('tenant', false))
{
/* @var $oTenantsApi CApiTenantsManager */
$oTenantsApi = CApi::Manager('tenants');
if ($oTenantsApi)
{
/* @var $oTenant CTenant */
$oTenant = $oTenantsApi->GetTenantById($oDomain->IdTenant);
if (!$oTenant)
{
throw new CApiManagerException(Errs::TenantsManager_TenantDoesNotExist);
}
else
{
if (0 < $oTenant->DomainCountLimit &&
$oTenant->DomainCountLimit <= $oTenant->GetDomainCount())
{
throw new CApiManagerException(Errs::TenantsManager_DomainCreateUserLimitReached);
}
}
}
else
{
$oDomain->IdTenant = 0;
}
}
else
{
$oDomain->IdTenant = 0;
}
if (!$this->oStorage->CreateDomain($oDomain))
{
throw new CApiManagerException(Errs::DomainsManager_DomainCreateFailed);
}
}
else
{
throw new CApiManagerException(Errs::DomainsManager_DomainAlreadyExists);
}
}
$bResult = true;
}
catch (CApiBaseException $oException)
{
$bResult = false;
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param CDomain $oDomain
* @return bool
*/
public function UpdateDomain(CDomain $oDomain)
{
$bResult = false;
try
{
if ($oDomain->Validate())
{
if ($oDomain->IsDefaultDomain)
{
$oSettings =& CApi::GetSettings();
$aSettingsMap = $oDomain->GetSettingsMap();
foreach ($aSettingsMap as $sProperty => $sSettingsName)
{
$oSettings->SetConf($sSettingsName, $oDomain->{$sProperty});
}
$bResult = $oSettings->SaveToXml();
}
else
{
if (!$this->oStorage->UpdateDomain($oDomain))
{
throw new CApiManagerException(Errs::DomainsManager_DomainUpdateFailed);
}
$bResult = true;
}
}
}
catch (CApiBaseException $oException)
{
$bResult = false;
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param array $aDomainsIds
* @return bool
*/
public function AreDomainsEmpty($aDomainsIds)
{
$bResult = false;
try
{
$bResult = $this->oStorage->AreDomainsEmpty($aDomainsIds);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param array $aDomainsIds
* @param bool $bEnable = true
* @return bool
*/
public function EnableOrDisableDomains($aDomainsIds, $bEnable = true)
{
$bResult = false;
if (is_array($aDomainsIds))
{
try
{
$bResult = $this->oStorage->EnableOrDisableDomains($aDomainsIds, $bEnable);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
}
return $bResult;
}
/**
* @param int $iTenantId
* @param bool $bEnable = true
* @return bool
*/
public function EnableOrDisableDomainsByTenantId($iTenantId, $bEnable = true)
{
$bResult = false;
try
{
$bResult = $this->oStorage->EnableOrDisableDomainsByTenantId($iTenantId, $bEnable);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param int $iDomainId
* @param bool $bRemoveAllAccounts = false
* @return bool
*/
public function DeleteDomainById($iDomainId, $bRemoveAllAccounts = false)
{
$bResult = false;
try
{
$oDomain = $this->GetDomainById($iDomainId);
if (!$oDomain)
{
throw new CApiManagerException(Errs::DomainsManager_DomainDoesNotExist);
}
if (!$bRemoveAllAccounts && !$this->AreDomainsEmpty(array($iDomainId)))
{
throw new CApiManagerException(Errs::DomainsManager_DomainNotEmpty);
}
if ($bRemoveAllAccounts)
{
/* @var $oUsersApi CApiUsersManager */
$oUsersApi = CApi::Manager('users');
$aPrevIdList = null;
while (true)
{
$aIdList = $oUsersApi->GetUserListIdWithOutOrder($iDomainId, 0, 20);
if (!$aIdList || 0 === count($aIdList) || (null !== $aPrevIdList &&
implode(',', $aPrevIdList) === implode(',', $aIdList)))
{
break;
}
foreach ($aIdList as $iAccountId)
{
$oUsersApi->DeleteAccountById($iAccountId);
}
$aPrevIdList = $aIdList;
}
}
$bResult = $this->oStorage->DeleteDomains(array($iDomainId));
}
catch (CApiBaseException $oException)
{
$bResult = false;
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param array $aDomainsIds
* @param bool $bRemoveAllAccounts = false
* @return bool
*/
public function DeleteDomains($aDomainsIds, $bRemoveAllAccounts = false)
{
$bResult = true;
if (is_array($aDomainsIds))
{
foreach ($aDomainsIds as $iIdDomain)
{
if (!$this->DeleteDomainById($iIdDomain, $bRemoveAllAccounts))
{
$bResult = false;
}
}
}
return $bResult;
}
/**
* @param int $iTenantId
* @param bool $bRemoveAllAccounts = false
* @return bool
*/
public function DeleteDomainsByTenantId($iTenantId, $bRemoveAllAccounts = false)
{
$bResult = true;
$aDomainsIds = $this->GetDomainIdsByTenantId($iTenantId);
if (is_array($aDomainsIds))
{
foreach ($aDomainsIds as $iIdDomain)
{
if (!$this->DeleteDomainById($iIdDomain, $bRemoveAllAccounts))
{
$bResult = false;
}
}
}
return $bResult;
}
/**
* @param string $sDomainName
* @param bool $bRemoveAllAccounts = false
* @return bool
*/
public function DeleteDomainByName($sDomainName, $bRemoveAllAccounts = false)
{
$bResult = false;
$oDomain = $this->GetDomainByName($sDomainName);
if ($oDomain)
{
$bResult = $this->DeleteDomainById($oDomain->IdDomain, $bRemoveAllAccounts);
}
else
{
$this->setLastException(new CApiManagerException(Errs::DomainsManager_DomainDoesNotExist));
}
return $bResult;
}
/**
* @param int $iTenantId = 0
*
* @return array | false
*/
public function GetFullDomainsList($iTenantId = 0)
{
return $this->GetDomainsList(1, 99999, 'name', true, '', $iTenantId);
}
/**
* @param int $iTenantId = 0
*
* @return array | false
*/
public function GetFilterList($iTenantId = 0)
{
return $this->GetFullDomainsList($iTenantId);
}
/**
* @param int $iPage
* @param int $iDomainsPerPage
* @param string $sOrderBy = 'name'
* @param bool $bOrderType = true
* @param string $sSearchDesc = ''
* @param int $iTenantId = 0
*
* @return array | false [IdDomain => [IsInternal, Name]]
*/
public function GetDomainsList($iPage, $iDomainsPerPage, $sOrderBy = 'name', $bOrderType = true, $sSearchDesc = '', $iTenantId = 0)
{
$aResult = false;
try
{
$aResult = $this->oStorage->GetDomainsList($iPage, $iDomainsPerPage,
$sOrderBy, $bOrderType, $sSearchDesc, $iTenantId);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $aResult;
}
/**
* @param int $iTenantId
*
* @return array | false
*/
public function GetDomainIdsByTenantId($iTenantId)
{
$aResult = false;
try
{
$aResult = $this->oStorage->GetDomainIdsByTenantId($iTenantId);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $aResult;
}
/**
* @param int $iVisibility
* @param int $iTenantId
*
* @return array | false
*/
public function SetGlobalAddressBookVisibilityByTenantId($iVisibility, $iTenantId)
{
$bResult = false;
try
{
if (0 < $iTenantId)
{
$this->oStorage->SetGlobalAddressBookVisibilityByTenantId($iVisibility, $iTenantId);
$bResult = true;
}
}
catch (CApiBaseException $oException)
{
$bResult = false;
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param string $sDomainName
* @return bool
*/
public function DomainExists($sDomainName)
{
$bResult = false;
try
{
$bResult = $this->oStorage->DomainExists($sDomainName);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $bResult;
}
/**
* @param string $sSearchDesc = ''
* @param int $iTenantId = 0
*
* @return int | false
*/
public function GetDomainCount($sSearchDesc = '', $iTenantId = 0)
{
$iResult = false;
try
{
$iResult = $this->oStorage->GetDomainCount($sSearchDesc, $iTenantId);
}
catch (CApiBaseException $oException)
{
$this->setLastException($oException);
}
return $iResult;
}
}