%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/DAV/ |
Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/DAV/Utils.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. */ namespace afterlogic\DAV; class Utils { public static $oUsersManager = null; public static function getUsersManager() { if (null === self::$oUsersManager) { /* @var $oUsersManager \CApiUsersManager */ self::$oUsersManager = \CApi::Manager('users'); } return self::$oUsersManager; } public static function getCurrentAccount() { return self::getUsersManager()->GetAccountOnLogin(\afterlogic\DAV\Auth\Backend::getInstance()->getCurrentUser()); } public static function getTenantUser($oAccount) { $sEmail = 'default_' . Constants::DAV_TENANT_PRINCIPAL; if ($oAccount->IdTenant > 0) { $oApiTenantsMan = \CApi::Manager('tenants'); $oTenant = $oApiTenantsMan ? $oApiTenantsMan->GetTenantById($oAccount->IdTenant) : null; if ($oTenant) { $sEmail = $oTenant->Login . '_' . Constants::DAV_TENANT_PRINCIPAL; } } return Backends::Principal()->getPrincipalByEmail($sEmail); } public static function getTenantPrincipalUri($principalUri) { $sTenantPrincipalUri = null; $oAccount = \afterlogic\DAV\Utils::GetAccountByLogin(basename($principalUri)); if ($oAccount) { $sTenantEmail = self::getTenantUser($oAccount); $sTenantPrincipalUri = \afterlogic\DAV\Constants::PRINCIPALS_PREFIX . '/' . $sTenantEmail; } return $sTenantPrincipalUri; } public static function ValidateClient($sClient) { $bIsSync = false; if (isset($GLOBALS['server']) && $GLOBALS['server'] instanceof \Sabre\DAV\Server) { $aHeaders = $GLOBALS['server']->httpRequest->getHeaders(); if (isset($aHeaders['user-agent'])) { $sUserAgent = $aHeaders['user-agent']; if (strpos(strtolower($sUserAgent), 'afterlogic ' . strtolower($sClient)) !== false) { $bIsSync = true; } } } return $bIsSync; } public static function GetAccountByLogin($sUserName) { $oUsersManager = self::getUsersManager(); return $oUsersManager->GetAccountOnLogin($sUserName); } public static function CheckPrincipals($sUserName) { $oPdo = \CApi::GetPDO(); $dbPrefix = \CApi::GetSettingsConf('Common/DBPrefix'); $sPrincipal = \afterlogic\DAV\Constants::PRINCIPALS_PREFIX . '/' . $sUserName; $oStmt = $oPdo->prepare( 'SELECT id FROM '.$dbPrefix.Constants::T_PRINCIPALS.' WHERE uri = ? LIMIT 1' ); $oStmt->execute(array($sPrincipal)); if(count($oStmt->fetchAll()) === 0) { $oStmt = $oPdo->prepare( 'INSERT INTO '.$dbPrefix.Constants::T_PRINCIPALS.' (uri,email,displayname) VALUES (?, ?, ?)' ); try { $oStmt->execute(array($sPrincipal, $sUserName, '')); } catch (Exception $e){} } $oStmt = $oPdo->prepare( 'SELECT principaluri FROM '.$dbPrefix.Constants::T_CALENDARS.' WHERE principaluri = ?' ); $oStmt->execute(array($sPrincipal)); if (count($oStmt->fetchAll()) === 0) { $oStmt = $oPdo->prepare( 'INSERT INTO '.$dbPrefix.Constants::T_CALENDARS.' (principaluri, displayname, uri, description, components, ctag, calendarcolor) VALUES (?, ?, ?, ?, ?, 1, ?)' ); $oAccount = self::GetAccountByLogin($sUserName); $oStmt->execute(array( $sPrincipal, \CApi::ClientI18N('CALENDAR/CALENDAR_DEFAULT_NAME', $oAccount), \Sabre\DAV\UUIDUtil::getUUID(), '', 'VEVENT,VTODO', Constants::CALENDAR_DEFAULT_COLOR ) ); } $oStmt = $oPdo->prepare( 'SELECT principaluri FROM '.$dbPrefix.Constants::T_CALENDARS.' WHERE principaluri = ? and uri = ? LIMIT 1' ); $oStmt->execute(array($sPrincipal, Constants::CALENDAR_DEFAULT_NAME)); if (count($oStmt->fetchAll()) !== 0) { $oStmt = $oPdo->prepare( 'UPDATE '.$dbPrefix.Constants::T_CALENDARS.' SET uri = ? WHERE principaluri = ? and uri = ?' ); $oStmt->execute(array( \Sabre\DAV\UUIDUtil::getUUID(), $sPrincipal, Constants::CALENDAR_DEFAULT_NAME ) ); } $oStmt = $oPdo->prepare( 'SELECT principaluri FROM '.$dbPrefix.Constants::T_ADDRESSBOOKS.' WHERE principaluri = ? and uri = ? LIMIT 1' ); $oStmt->execute(array($sPrincipal, Constants::ADDRESSBOOK_DEFAULT_NAME)); $bHasDefaultAddressbooks = (count($oStmt->fetchAll()) != 0); $oStmt->execute(array($sPrincipal, Constants::ADDRESSBOOK_DEFAULT_NAME_OLD)); $bHasOldDefaultAddressbooks = (count($oStmt->fetchAll()) != 0); $oStmt->execute(array($sPrincipal, Constants::ADDRESSBOOK_COLLECTED_NAME)); $bHasCollectedAddressbooks = (count($oStmt->fetchAll()) != 0); $stmt1 = $oPdo->prepare( 'INSERT INTO '.$dbPrefix.Constants::T_ADDRESSBOOKS.' (principaluri, displayname, uri, description, ctag) VALUES (?, ?, ?, ?, 1)' ); if (!$bHasDefaultAddressbooks) { if ($bHasOldDefaultAddressbooks) { $oStmt = $oPdo->prepare( 'UPDATE '.$dbPrefix.Constants::T_ADDRESSBOOKS.' SET uri = ? WHERE principaluri = ? and uri = ?' ); $oStmt->execute(array( Constants::ADDRESSBOOK_DEFAULT_NAME, $sPrincipal, Constants::ADDRESSBOOK_DEFAULT_NAME_OLD, ) ); } else { $stmt1->execute(array( $sPrincipal, Constants::ADDRESSBOOK_DEFAULT_DISPLAY_NAME, Constants::ADDRESSBOOK_DEFAULT_NAME, Constants::ADDRESSBOOK_DEFAULT_DISPLAY_NAME ) ); } } if (!$bHasCollectedAddressbooks) { $stmt1->execute(array( $sPrincipal, Constants::ADDRESSBOOK_COLLECTED_DISPLAY_NAME, Constants::ADDRESSBOOK_COLLECTED_NAME, Constants::ADDRESSBOOK_COLLECTED_DISPLAY_NAME ) ); } } public static function getPrincipalByEmail($sEmail) { $sEmail = trim(str_ireplace("mailto:", "", $sEmail)); $oPrincipalBackend = Backends::Principal(); $mPrincipalPath = $oPrincipalBackend->searchPrincipals(\afterlogic\DAV\Constants::PRINCIPALS_PREFIX, array('{http://sabredav.org/ns}email-address'=>$sEmail)); if($mPrincipalPath == 0) { throw new \Exception("Unknown email address"); } $sPrincipal = null; foreach ($mPrincipalPath as $aPrincipal) { if ($aPrincipal === \afterlogic\DAV\Constants::PRINCIPALS_PREFIX . '/' . $sEmail) { $sPrincipal = $aPrincipal; break; } } if (!isset($sPrincipal)) { throw new \Exception("Unknown email address"); } return $oPrincipalBackend->getPrincipalByPath($sPrincipal); } }