%PDF- %PDF-
| Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/dav/ |
| Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/dav/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 Dav
*/
class CApiDavManager extends AApiManager
{
/**
* @var array
*/
protected $aDavClients;
/**
* @param CApiGlobalManager &$oManager
*/
public function __construct(CApiGlobalManager &$oManager, $sForcedStorage = '')
{
parent::__construct('dav', $oManager);
CApi::Inc('common.dav.client');
$this->aDavClients = array();
}
/**
* @param CAccount $oAccount
* @return CDAVClient | false
*/
protected function &getDAVClient($oAccount)
{
$mResult = false;
if (!isset($this->aDavClients[$oAccount->Email]))
{
$this->aDavClients[$oAccount->Email] = new CDAVClient(
$this->GetServerUrl($oAccount), $oAccount->Email, $oAccount->IncomingMailPassword);
}
if (isset($this->aDavClients[$oAccount->Email]))
{
$mResult =& $this->aDavClients[$oAccount->Email];
}
return $mResult;
}
/**
* @param CAccount $oAccount = null
* @return string
*/
public function GetServerUrl($oAccount = null)
{
$oSettings =& CApi::GetSettings();
return rtrim($oAccount
? $oAccount->Domain->ExternalHostNameOfDAVServer
: $oSettings->GetConf('WebMail/ExternalHostNameOfDAVServer'), '/');
}
/**
* @return string
*/
public function GetCalendarStorageType()
{
return $this->oManager->GetStorageByType('calendar');
}
/**
* @return string
*/
public function GetContactsStorageType()
{
return $this->oManager->GetStorageByType('maincontacts');
}
/**
* @param CAccount $oAccount = null
* @return string
*/
public function GetServerHost($oAccount = null)
{
$mResult = '';
$sServerUrl = $this->GetServerUrl($oAccount);
if (!empty($sServerUrl))
{
$aUrlParts = parse_url($sServerUrl);
if (!empty($aUrlParts['host']))
{
$mResult = $aUrlParts['host'];
}
}
return $mResult;
}
/**
* @param CAccount $oAccount = null
* @return bool
*/
public function IsUseSsl($oAccount = null)
{
$bResult = false;
$sServerUrl = $this->GetServerUrl($oAccount);
if (!empty($sServerUrl))
{
$aUrlParts = parse_url($sServerUrl);
if (!empty($aUrlParts['port']) && $aUrlParts['port'] === 443)
{
$bResult = true;
}
if (!empty($aUrlParts['scheme']) && $aUrlParts['scheme'] === 'https')
{
$bResult = true;
}
}
return $bResult;
}
/**
* @param CAccount $oAccount = null
* @return string
*/
public function GetServerPort($oAccount)
{
$iResult = 80;
if ($this->IsUseSsl($oAccount))
{
$iResult = 443;
}
$sServerUrl = $this->GetServerUrl($oAccount);
if (!empty($sServerUrl))
{
$aUrlParts = parse_url($sServerUrl);
if (!empty($aUrlParts['port']))
{
$iResult = (int) $aUrlParts['port'];
}
}
return $iResult;
}
/**
* @param CAccount $oAccount
* @return string
*/
public function GetPrincipalUrl($oAccount)
{
$mResult = false;
try
{
$sServerUrl = $this->GetServerUrl($oAccount);
if (!empty($sServerUrl))
{
$aUrlParts = parse_url($sServerUrl);
$sPort = $sPath = '';
if (!empty($aUrlParts['port']) && (int)$aUrlParts['port'] !== 80)
{
$sPort = ':'.$aUrlParts['port'];
}
if (!empty($aUrlParts['path']))
{
$sPath = $aUrlParts['path'];
}
if (!empty($aUrlParts['scheme']) && !empty($aUrlParts['host']))
{
$sServerUrl = $aUrlParts['scheme'].'://'.$aUrlParts['host'].$sPort;
if ($this->GetCalendarStorageType() === 'caldav' || $this->GetContactsStorageType() === 'carddav')
{
$oDav =& $this->getDAVClient($oAccount);
if ($oDav && $oDav->Connect())
{
$mResult = $sServerUrl.$oDav->GetCurrentPrincipal();
}
}
else
{
$mResult = $sServerUrl . $sPath .'/principals/' . $oAccount->Email;
}
}
}
}
catch (Exception $oException)
{
$mResult = false;
$this->setLastException($oException);
}
return $mResult;
}
/**
* @param CAccount $oAccount
* @return string
*/
public function GetLogin($oAccount)
{
return $oAccount->Email;
}
/**
* @return bool
*/
public function IsMobileSyncEnabled()
{
$oSettings =& CApi::GetSettings();
return (bool) $oSettings->GetConf('Common/EnableMobileSync');
}
/**
* @return bool
*/
public function SetMobileSyncEnable($bMobileSyncEnable)
{
$oSettings =& CApi::GetSettings();
$oSettings->SetConf('Common/EnableMobileSync', $bMobileSyncEnable);
return (bool) $oSettings->SaveToXml();
}
/**
* @param CAccount $oAccount
* @return bool
*/
public function TestConnection($oAccount)
{
$mResult = false;
$oDav =& $this->getDAVClient($oAccount);
if ($oDav && $oDav->Connect())
{
$mResult = true;
}
return $mResult;
}
/**
* @param CAccount $oAccount
* @return bool
*/
public function DeletePrincipal($oAccount)
{
$oPrincipalBackend = \afterlogic\DAV\Backends::Principal();
$oPrincipalBackend->deletePrincipal(\afterlogic\DAV\Constants::PRINCIPALS_PREFIX . '/' . $oAccount->Email);
}
/**
* @param string $sData
* @return mixed
*/
public function VObjectReaderRead($sData)
{
return \Sabre\VObject\Reader::read($sData, \Sabre\VObject\Reader::OPTION_IGNORE_INVALID_LINES);
}
}