%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/ios/ |
Current File : //www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/managers/ios/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 IOS */ class CApiIosManager extends AApiManager { /* * @var $oApiUsersManager CApiUsersManager */ private $oApiUsersManager; /* * @var $oApiDavManager CApiDavManager */ private $oApiDavManager; /** * @param CApiGlobalManager &$oManager */ public function __construct(CApiGlobalManager &$oManager, $sForcedStorage = '') { parent::__construct('ios', $oManager); /* * @var $oApiUsersManager CApiUsersManager */ $this->oApiUsersManager = CApi::Manager('users'); /* * @var $oApiDavManager CApiDavManager */ $this->oApiDavManager = CApi::Manager('dav'); } /** * @return DOMElement */ private function generateDict($oXmlDocument, $aPayload) { $oDictElement = $oXmlDocument->createElement('dict'); foreach ($aPayload as $sKey => $mValue) { $oDictElement->appendChild($oXmlDocument->createElement('key', $sKey)); if (is_int($mValue)) { $oDictElement->appendChild($oXmlDocument->createElement('integer', $mValue)); } else if (is_bool($mValue)) { $oDictElement->appendChild($oXmlDocument->createElement($mValue ? 'true': 'false')); } else { $oDictElement->appendChild($oXmlDocument->createElement('string', $mValue)); } } return $oDictElement; } /** * @param string $sPayloadId * @param CAccount $oAccount * @return DOMElement | bool */ private function generateEmailDict($oXmlDocument, $sPayloadId, $oAccount, $bIsDemo = false) { $oSettings = CApi::GetSettings(); $sIncMailServer = $oAccount->IncomingMailServer; $iIncMailPort = $oAccount->IncomingMailPort; if ($sIncMailServer == 'localhost' || $sIncMailServer == '127.0.0.1') { $sIncMailServer = $oSettings->GetConf('WebMail/ExternalHostNameOfLocalImap'); $aParsedUrl = parse_url($sIncMailServer); if (isset($aParsedUrl['host'])) { $sIncMailServer = $aParsedUrl['host']; } if (isset($aParsedUrl['port'])) { $iIncMailPort = $aParsedUrl['port']; } } $sOutMailServer = $oAccount->OutgoingMailServer; $iOutMailPort = $oAccount->OutgoingMailPort; if ($sOutMailServer == 'localhost' || $sOutMailServer == '127.0.0.1') { $sOutMailServer = $oSettings->GetConf('WebMail/ExternalHostNameOfLocalSmtp'); $aParsedUrl = parse_url($sOutMailServer); if (isset($aParsedUrl['host'])) { $sOutMailServer = $aParsedUrl['host']; } if (isset($aParsedUrl['port'])) { $iOutMailPort = $aParsedUrl['port']; } } if (empty($sIncMailServer) || empty($sOutMailServer)) { return false; } $aEmail = array( 'PayloadVersion' => 1, 'PayloadUUID' => \Sabre\DAV\UUIDUtil::getUUID(), 'PayloadType' => 'com.apple.mail.managed', 'PayloadIdentifier' => $sPayloadId.'.email', 'PayloadDisplayName' => 'Email Account', 'PayloadOrganization' => $oAccount->Domain->SiteName, 'PayloadDescription' => 'Configures email account', 'EmailAddress' => $oAccount->Email, 'EmailAccountType' => EMailProtocol::IMAP4 === $oAccount->IncomingMailProtocol ? 'EmailTypeIMAP' : 'EmailTypePOP', 'EmailAccountDescription' => $oAccount->Email, 'EmailAccountName' => 0 === strlen($oAccount->FriendlyName) ? $oAccount->Email : $oAccount->FriendlyName, 'IncomingMailServerHostName' => $sIncMailServer, 'IncomingMailServerPortNumber' => $iIncMailPort, 'IncomingMailServerUseSSL' => 993 === $iIncMailPort, 'IncomingMailServerUsername' => $oAccount->IncomingMailLogin, 'IncomingPassword' => $bIsDemo ? 'demo' : $oAccount->IncomingMailPassword, 'IncomingMailServerAuthentication' => 'EmailAuthPassword', 'OutgoingMailServerHostName' => $sOutMailServer, 'OutgoingMailServerPortNumber' => $iOutMailPort, 'OutgoingMailServerUseSSL' => 465 === $iIncMailPort, 'OutgoingMailServerUsername' => 0 === strlen($oAccount->OutgoingMailLogin) ? $oAccount->IncomingMailLogin : $oAccount->OutgoingMailLogin, 'OutgoingPassword' => $bIsDemo ? 'demo' : (0 === strlen($oAccount->OutgoingMailPassword) ? $oAccount->IncomingMailPassword : $oAccount->OutgoingMailPassword), 'OutgoingMailServerAuthentication' => ESMTPAuthType::NoAuth === $oAccount->OutgoingMailAuth ? 'EmailAuthNone' : 'EmailAuthPassword', ); return $this->generateDict($oXmlDocument, $aEmail); } /** * @param string $sPayloadId * @return DOMElement */ private function generateCaldavDict($oXmlDocument, $sPayloadId, $oAccount, $bIsDemo = false) { $aCaldav = array( 'PayloadVersion' => 1, 'PayloadUUID' => \Sabre\DAV\UUIDUtil::getUUID(), 'PayloadType' => 'com.apple.caldav.account', 'PayloadIdentifier' => $sPayloadId.'.caldav', 'PayloadDisplayName' => 'CalDAV Account', 'PayloadOrganization' => $oAccount->Domain->SiteName, 'PayloadDescription' => 'Configures CalDAV Account', 'CalDAVAccountDescription' => $oAccount->Domain->SiteName.' Calendars', 'CalDAVHostName' => $this->oApiDavManager ? $this->oApiDavManager->GetServerHost($oAccount) : '', 'CalDAVUsername' => $oAccount->Email, 'CalDAVPassword' => $bIsDemo ? 'demo' : $oAccount->IncomingMailPassword, 'CalDAVUseSSL' => $this->oApiDavManager ? $this->oApiDavManager->IsUseSsl($oAccount) : '', 'CalDAVPort' => $this->oApiDavManager ? $this->oApiDavManager->GetServerPort($oAccount) : '', 'CalDAVPrincipalURL' => $this->oApiDavManager ? $this->oApiDavManager->GetPrincipalUrl($oAccount) : '', ); return $this->generateDict($oXmlDocument, $aCaldav); } /** * @param string $sPayloadId * @return DOMElement */ private function generateCarddavDict($oXmlDocument, $sPayloadId, $oAccount, $bIsDemo = false) { $aCarddav = array( 'PayloadVersion' => 1, 'PayloadUUID' => \Sabre\DAV\UUIDUtil::getUUID(), 'PayloadType' => 'com.apple.carddav.account', 'PayloadIdentifier' => $sPayloadId.'.carddav', 'PayloadDisplayName' => 'CardDAV Account', 'PayloadOrganization' => $oAccount->Domain->SiteName, 'PayloadDescription' => 'Configures CardDAV Account', 'CardDAVAccountDescription' => $oAccount->Domain->SiteName.' Contacts', 'CardDAVHostName' => $this->oApiDavManager ? $this->oApiDavManager->GetServerHost($oAccount) : '', 'CardDAVUsername' => $oAccount->Email, 'CardDAVPassword' => $bIsDemo ? 'demo' : $oAccount->IncomingMailPassword, 'CardDAVUseSSL' => $this->oApiDavManager ? $this->oApiDavManager->IsUseSsl($oAccount) : '', 'CardDAVPort' => $this->oApiDavManager ? $this->oApiDavManager->GetServerPort($oAccount) : '', 'CardDAVPrincipalURL' => $this->oApiDavManager ? $this->oApiDavManager->GetPrincipalUrl($oAccount) : '', ); return $this->generateDict($oXmlDocument, $aCarddav); } /** * @param \CAccount $oAccount * @return string */ public function GenerateXMLProfile($oAccount) { $mResult = false; if ($oAccount) { $oDomImplementation = new DOMImplementation(); $oDocumentType = $oDomImplementation->createDocumentType( 'plist', '-//Apple//DTD PLIST 1.0//EN', 'http://www.apple.com/DTDs/PropertyList-1.0.dtd' ); $oXmlDocument = $oDomImplementation->createDocument('', '', $oDocumentType); $oXmlDocument->xmlVersion = '1.0'; $oXmlDocument->encoding = 'UTF-8'; $oXmlDocument->formatOutput = true; $oPlist = $oXmlDocument->createElement('plist'); $oPlist->setAttribute('version', '1.0'); $sPayloadId = $this->oApiDavManager ? 'afterlogic.'.$this->oApiDavManager->GetServerHost($oAccount) : ''; $aPayload = array( 'PayloadVersion' => 1, 'PayloadUUID' => \Sabre\DAV\UUIDUtil::getUUID(), 'PayloadType' => 'Configuration', 'PayloadRemovalDisallowed' => false, 'PayloadIdentifier' => $sPayloadId, 'PayloadOrganization' => $oAccount->Domain->SiteName, 'PayloadDescription' => $oAccount->Domain->SiteName.' Mobile', 'PayloadDisplayName' => $oAccount->Domain->SiteName.' Mobile Profile', // 'ConsentText' => 'AfterLogic Profile @ConsentText', ); $oArrayElement = $oXmlDocument->createElement('array'); $bIsDemo = false; \CApi::Plugin()->RunHook('plugin-is-demo-account', array(&$oAccount, &$bIsDemo)); if (!$bIsDemo) { $aInfo = $this->oApiUsersManager->GetUserAccountListInformation($oAccount->IdUser); if (is_array($aInfo) && 0 < count($aInfo)) { foreach (array_keys($aInfo) as $iIdAccount) { if ($oAccount->IdAccount === $iIdAccount) { $oAccountItem = $oAccount; } else { $oAccountItem = $this->oApiUsersManager->GetAccountById($iIdAccount); } $oEmailDictElement = $this->generateEmailDict($oXmlDocument, $sPayloadId, $oAccountItem, $bIsDemo); if ($oEmailDictElement === false) { return false; } else { $oArrayElement->appendChild($oEmailDictElement); } unset($oAccountItem); unset($oEmailDictElement); } } else { return false; } } // Calendars $oCaldavDictElement = $this->generateCaldavDict($oXmlDocument, $sPayloadId, $oAccount, $bIsDemo); $oArrayElement->appendChild($oCaldavDictElement); // Contacts $oCarddavDictElement = $this->generateCarddavDict($oXmlDocument, $sPayloadId, $oAccount, $bIsDemo); $oArrayElement->appendChild($oCarddavDictElement); $oDictElement = $this->generateDict($oXmlDocument, $aPayload); $oPayloadContentElement = $oXmlDocument->createElement('key', 'PayloadContent'); $oDictElement->appendChild($oPayloadContentElement); $oDictElement->appendChild($oArrayElement); $oPlist->appendChild($oDictElement); $oXmlDocument->appendChild($oPlist); $mResult = $oXmlDocument->saveXML(); } return $mResult; } }