%PDF- %PDF-
| Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/capability/ |
| Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/capability/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 Capability
*/
class CApiCapabilityManager extends AApiManager
{
/**
* @param CApiGlobalManager &$oManager
*/
public function __construct(CApiGlobalManager &$oManager, $sForcedStorage = '')
{
parent::__construct('capability', $oManager);
}
/**
* @return bool
*/
public function IsNotLite()
{
return !!CApi::Manager('licensing');
}
/**
* @return bool
*/
public function IsCollaborationSupported()
{
return $this->IsNotLite() && !!CApi::Manager('collaboration');
}
/**
* @return bool
*/
public function IsMailsuite()
{
return !!CApi::GetConf('mailsuite', false) && !!CApi::Manager('mailsuite');
}
/**
* @return bool
*/
public function IsDavSupported()
{
return $this->IsNotLite() && !!CApi::Manager('dav');
}
/**
* @return bool
*/
public function IsTenantsSupported()
{
return $this->IsNotLite() && !!CApi::GetConf('tenant', false);
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsCalendarSupported($oAccount = null)
{
$bResult = $this->IsNotLite() && $this->IsDavSupported();
if ($bResult && $oAccount)
{
$bResult = $oAccount->Domain->AllowCalendar && $oAccount->User->GetCapa(ECapa::CALENDAR);
}
return $bResult;
}
/**
* @return bool
*/
public function IsIosProfileSupported()
{
return $this->IsNotLite();
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsCalendarSharingSupported($oAccount = null)
{
$bResult = $this->IsCalendarSupported() && $this->IsCollaborationSupported();
if ($bResult && $oAccount)
{
$bResult = $this->IsCalendarSupported($oAccount) && $oAccount->User->GetCapa(ECapa::CAL_SHARING);
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsCalendarAppointmentsSupported($oAccount = null)
{
$bResult = $this->IsCalendarSupported() && $this->IsCollaborationSupported();
if ($bResult && $oAccount)
{
$bResult = $this->IsCalendarSupported($oAccount) && $oAccount->User->GetCapa(ECapa::MEETINGS); // TODO
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsContactsSupported($oAccount = null)
{
$bResult = true;
if ($oAccount)
{
$bResult = $oAccount->Domain->AllowContacts &&
($oAccount->User->GetCapa(ECapa::PAB) || $oAccount->User->GetCapa(ECapa::GAB));
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsPersonalContactsSupported($oAccount = null)
{
$bResult = $this->IsContactsSupported();
if ($oAccount)
{
$bResult = $this->IsContactsSupported($oAccount) && $oAccount->User->GetCapa(ECapa::PAB);
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @param bool $bCheckShowSettings = true
* @return bool
*/
public function IsGlobalContactsSupported($oAccount = null, $bCheckShowSettings = true)
{
$bResult = $this->IsContactsSupported() && $this->IsCollaborationSupported() && !!CApi::Manager('gcontacts');
if ($bResult && $bCheckShowSettings)
{
$oSettings = null;
$oSettings =& CApi::GetSettings();
$bResult = $oSettings && !!$oSettings->GetConf('Contacts/ShowGlobalContactsInAddressBook');
}
if ($bResult && $oAccount)
{
$bResult = $this->IsContactsSupported($oAccount) && $oAccount->User->GetCapa(ECapa::GAB);
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsSharedContactsSupported($oAccount = null)
{
$bResult = $this->IsContactsSupported() && $this->IsCollaborationSupported() &&
\CApi::GetConf('labs.contacts-sharing', false);
if ($bResult && $oAccount)
{
$bResult = $this->IsContactsSupported($oAccount) && $oAccount->User->GetCapa(ECapa::CONTACTS_SHARING);
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsGlobalSuggestContactsSupported($oAccount = null)
{
return $this->IsGlobalContactsSupported($oAccount, false);
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsFilesSupported($oAccount = null)
{
$bResult = !!CApi::GetConf('files', false) && $this->IsNotLite();
if ($bResult && $oAccount)
{
if ($this->IsTenantsSupported())
{
$bResult = false;
$oTenant = $this->getCachedTenant($oAccount->IdTenant);
if ($oTenant)
{
$bResult = $oTenant->IsFilesSupported();
}
}
if ($bResult)
{
$bResult = $oAccount->Domain->AllowFiles && $oAccount->User->GetCapa(ECapa::FILES);
}
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsTwilioSupported($oAccount = null)
{
$bResult = $this->IsCollaborationSupported() && !!CApi::GetConf('labs.twilio', false);
if ($bResult && $oAccount)
{
$oTenant = $this->getCachedTenant($oAccount->IdTenant);
if ($oTenant)
{
$bResult = $oTenant->IsTwilioSupported();
}
if ($bResult)
{
$bResult = $oAccount->User->GetCapa(ECapa::TWILIO);
}
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsSipSupported($oAccount = null)
{
$bResult = $this->IsCollaborationSupported() && !!CApi::GetConf('labs.voice', false);
if ($bResult && $oAccount)
{
$oTenant = $this->getCachedTenant($oAccount->IdTenant);
if ($oTenant)
{
$bResult = $oTenant->IsSipSupported();
}
if ($bResult)
{
$bResult = $oAccount->User->GetCapa(ECapa::SIP);
}
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsHelpdeskSupported($oAccount = null)
{
$bResult = $this->IsCollaborationSupported() && !!CApi::GetConf('helpdesk', false);
if ($bResult && $oAccount)
{
$oTenant = $this->getCachedTenant($oAccount->IdTenant);
if ($oTenant)
{
$bResult = $oTenant->IsHelpdeskSupported();
}
if ($bResult)
{
$bResult = $oAccount->Domain->AllowHelpdesk && $oAccount->User->GetCapa(ECapa::HELPDESK);
}
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsMobileSyncSupported($oAccount = null)
{
$bResult = $this->IsNotLite() && $this->IsDavSupported() &&
($this->IsContactsSupported() || $this->IsGlobalContactsSupported() ||
$this->IsCalendarSupported() || $this->IsHelpdeskSupported());
if ($bResult)
{
$oSettings = null;
$oSettings =& CApi::GetSettings();
$bResult = $oSettings && $oSettings->GetConf('Common/EnableMobileSync');
}
if ($bResult && $oAccount)
{
$bResult = $oAccount->User->GetCapa(ECapa::MOBILE_SYNC) &&
($this->IsContactsSupported($oAccount) || $this->IsGlobalContactsSupported($oAccount) ||
$this->IsCalendarSupported($oAccount) || $this->IsHelpdeskSupported($oAccount));
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsOutlookSyncSupported($oAccount = null)
{
$bResult = $this->IsNotLite() && $this->IsDavSupported() && $this->IsCollaborationSupported();
// if ($bResult && $oAccount)
// {
// $bResult = $oAccount->User->GetCapa(ECapa::OUTLOOK_SYNC);
// }
// TODO
return $bResult;
}
/**
* @staticvar $sCache
* @return string
*/
public function GetSystemCapaAsString()
{
static $sCache = null;
if (null === $sCache)
{
$aCapa[] = ECapa::WEBMAIL;
if ($this->IsPersonalContactsSupported())
{
$aCapa[] = ECapa::PAB;
}
if ($this->IsGlobalContactsSupported())
{
$aCapa[] = ECapa::GAB;
}
if ($this->IsCalendarSupported())
{
$aCapa[] = ECapa::CALENDAR;
}
if ($this->IsCalendarAppointmentsSupported())
{
$aCapa[] = ECapa::MEETINGS;
}
if ($this->IsCalendarSharingSupported())
{
$aCapa[] = ECapa::CAL_SHARING;
}
if ($this->IsMobileSyncSupported())
{
$aCapa[] = ECapa::MOBILE_SYNC;
}
if ($this->IsOutlookSyncSupported())
{
$aCapa[] = ECapa::OUTLOOK_SYNC;
}
if ($this->IsFilesSupported())
{
$aCapa[] = ECapa::FILES;
}
if ($this->IsHelpdeskSupported())
{
$aCapa[] = ECapa::HELPDESK;
}
if ($this->IsSipSupported())
{
$aCapa[] = ECapa::SIP;
}
if ($this->IsTwilioSupported())
{
$aCapa[] = ECapa::TWILIO;
}
$sCache = trim(strtoupper(implode(' ', $aCapa)));
}
return $sCache;
}
/**
* @return bool
*/
public function HasSslSupport()
{
return api_Utils::HasSslSupport();
}
/**
* @return bool
*/
public function HasGdSupport()
{
return api_Utils::HasGdSupport();
}
/**
* @param int $iIdTenant
* @return CTenant
*/
private function getCachedTenant($iIdTenant)
{
static $aCache = array();
$oTenant = null;
if (isset($aCache[$iIdTenant]))
{
$oTenant = $aCache[$iIdTenant];
}
else
{
$oApiTenants = /* @var $oApiTenants CApiTenantsManager */ CApi::Manager('tenants');
if ($oApiTenants)
{
$oTenant = (0 < $iIdTenant) ? $oApiTenants->GetTenantById($iIdTenant) : $oApiTenants->GetDefaultGlobalTenant();
}
}
if ($oTenant && !isset($aCache[$iIdTenant]))
{
$aCache[$iIdTenant] = $oTenant;
}
return $oTenant;
}
}