%PDF- %PDF-
Direktori : /data/www_bck/varak.net_bck/mail2.varak.net/libraries/ProjectSeven/ |
Current File : //data/www_bck/varak.net_bck/mail2.varak.net/libraries/ProjectSeven/Service.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 ProjectSeven; /** * @category ProjectSeven */ class Service { /** * @var \MailSo\Base\Http */ protected $oHttp; /** * @var \ProjectSeven\Actions */ protected $oActions; protected $oTwilio; /** * @return void */ protected function __construct() { $this->oHttp = \MailSo\Base\Http::NewInstance(); $this->oActions = Actions::NewInstance(); $this->oActions->SetHttp($this->oHttp); $this->oTwilio = $this->oActions->GetTwilio(); \CApi::Plugin()->SetActions($this->oActions); // \MailSo\Config::$FixIconvByMbstring = false; \MailSo\Config::$SystemLogger = \CApi::MailSoLogger(); \MailSo\Config::$PreferStartTlsIfAutoDetect = !!\CApi::GetConf('labs.prefer-starttls', true); } /** * @return \ProjectSeven\Service */ public static function NewInstance() { return new self(); } /** * @return bool */ protected function validateToken() { return $this->oHttp->IsPost() ? $this->oActions->ValidateCsrfToken($this->oHttp->GetPost('Token')) : true; } /** * @param bool $bHelpdesk = false * @param string $sHelpdeskHash = '' * @param string $sCalendarPubHash = '' * @param string $sFileStoragePubHash = '' * @param bool $bMobile = false * @return string */ private function indexHTML($bHelpdesk = false, $sHelpdeskHash = '', $sCalendarPubHash = '', $sFileStoragePubHash = '', $bMobile = false) { $sResult = ''; $mHelpdeskIdTenant = false; $oApiIntegrator = \CApi::Manager('integrator'); if ($oApiIntegrator) { if ($bHelpdesk) { $oApiHelpdesk = \CApi::Manager('helpdesk'); if ($oApiHelpdesk) { $oLogginedAccount = $this->oActions->GetDefaultAccount(); $oApiCapability = \CApi::Manager('capability'); $mHelpdeskIdTenant = $oApiIntegrator->GetTenantIdByHash($sHelpdeskHash); if (!is_int($mHelpdeskIdTenant)) { \CApi::Location('./'); return ''; } $bDoId = false; $sThread = $this->oHttp->GetQuery('thread'); if (0 < strlen($sThread)) { if ($oApiHelpdesk) { $iThreadID = $oApiHelpdesk->GetThreadIdByHash($mHelpdeskIdTenant, $sThread); if (0 < $iThreadID) { $oApiIntegrator->SetThreadIdFromRequest($iThreadID); $bDoId = true; } } } $sActivateHash = $this->oHttp->GetQuery('activate'); if (0 < strlen($sActivateHash) && !$this->oHttp->HasQuery('forgot')) { $bRemove = true; $oUser = $oApiHelpdesk->GetUserByActivateHash($mHelpdeskIdTenant, $sActivateHash); /* @var $oUser \CHelpdeskUser */ if ($oUser) { if (!$oUser->Activated) { $oUser->Activated = true; $oUser->RegenerateActivateHash(); if ($oApiHelpdesk->UpdateUser($oUser)) { $bRemove = false; $oApiIntegrator->SetUserAsActivated($oUser); } } } if ($bRemove) { $oApiIntegrator->RemoveUserAsActivated(); } } if ($oLogginedAccount && $oApiCapability && $oApiCapability->IsHelpdeskSupported($oLogginedAccount) && $oLogginedAccount->IdTenant === $mHelpdeskIdTenant) { if (!$bDoId) { $oApiIntegrator->SetThreadIdFromRequest(0); } $oApiIntegrator->SkipMobileCheck(); \CApi::Location('./'); return ''; } } else { \CApi::Location('./'); return ''; } } $sResult = file_get_contents(PSEVEN_APP_ROOT_PATH.'templates/Index.html'); if (is_string($sResult)) { @\header('Content-Type: text/html; charset=utf-8', true); @\header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); @\header('Last-Modified: '.\gmdate('D, d M Y H:i:s').' GMT'); @\header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); @\header('Cache-Control: post-check=0, pre-check=0', false); @\header('Pragma: no-cache'); $sFrameOptions = \CApi::GetConf('labs.x-frame-options', ''); if (0 < \strlen($sFrameOptions)) { @\header('X-Frame-Options: '.$sFrameOptions); } $sResult = strtr($sResult, array( '{{AppVersion}}' => PSEVEN_APP_VERSION, '{{IntegratorDir}}' => $oApiIntegrator->GetAppDirValue(), '{{IntegratorLinks}}' => $oApiIntegrator->BuildHeadersLink('.', $bHelpdesk, $mHelpdeskIdTenant, $sHelpdeskHash, $sCalendarPubHash, $sFileStoragePubHash, $bMobile), '{{IntegratorBody}}' => $oApiIntegrator->BuildBody('.', $bHelpdesk, $mHelpdeskIdTenant, $sHelpdeskHash, $sCalendarPubHash, $sFileStoragePubHash, $bMobile) )); } } else { $sResult = ''; } return $sResult; } /** * @return void */ public function Handle() { $sVersion = file_get_contents(PSEVEN_APP_ROOT_PATH.'VERSION'); define('PSEVEN_APP_VERSION', $sVersion); if (!class_exists('MailSo\Version')) { echo 'MailSo'; return ''; } else if (!class_exists('\\CApi') || !\CApi::IsValid()) { echo 'AfterLogic API'; return ''; } $sPathInfo = \trim(\trim($this->oHttp->GetServer('PATH_INFO', '')), ' /'); if (!empty($sPathInfo)) { if ('dav' === \substr($sPathInfo, 0, 3)) { $this->oActions->PathInfoDav(); return ''; } } /* @var $oApiIntegrator \CApiIntegratorManager */ $oApiIntegrator = \CApi::Manager('integrator'); // ------ Redirect to HTTPS $iLogginedUserId = $oApiIntegrator->GetLogginedUserId(); $oSettings =& \CApi::GetSettings(); $bRedirectToHttps = $oSettings->GetConf('Common/RedirectToHttps'); $bHttps = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== "off") || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == "443")); if (0 >= $iLogginedUserId && $bRedirectToHttps && !$bHttps) { header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); } // ------ /* @var $oApiCapability \CApiCapabilityManager */ $oApiCapability = \CApi::Manager('capability'); $sResult = ''; $sQuery = \trim(\trim($this->oHttp->GetServer('QUERY_STRING', '')), ' /'); $iPos = \strpos($sQuery, '&'); if (0 < $iPos) { $sQuery = \substr($sQuery, 0, $iPos); } $aPaths = explode('/', $sQuery); if (0 < count($aPaths) && !empty($aPaths[0])) { $sFirstPart = strtolower($aPaths[0]); if ('ping' === $sFirstPart) { @header('Content-Type: text/plain; charset=utf-8'); $sResult = 'Pong'; } else if (('ajax' === $sFirstPart)) { @ob_start(); $aResponseItem = null; $sAction = $this->oHttp->GetPost('Action', null); try { \CApi::Log('AJAX: Action: '.$sAction); if ('AppData' !== $sAction && \CApi::GetConf('labs.webmail.csrftoken-protection', true) && !$this->validateToken()) { throw new \ProjectSeven\Exceptions\ClientException(\ProjectSeven\Notifications::InvalidToken); } else if (!empty($sAction)) { $sMethodName = 'Ajax'.$sAction; if (method_exists($this->oActions, $sMethodName) && is_callable(array($this->oActions, $sMethodName))) { $this->oActions->SetActionParams($this->oHttp->GetPostAsArray()); $aResponseItem = call_user_func(array($this->oActions, $sMethodName)); } else if (\CApi::Plugin()->JsonHookExists($sMethodName)) { $this->oActions->SetActionParams($this->oHttp->GetPostAsArray()); $aResponseItem = \CApi::Plugin()->RunJsonHook($this->oActions, $sMethodName); } } if (!is_array($aResponseItem)) { throw new \ProjectSeven\Exceptions\ClientException(\ProjectSeven\Notifications::UnknownError); } } catch (\Exception $oException) { // if ($oException instanceof \ProjectSeven\Exceptions\ClientException && // \ProjectSeven\Notifications::AuthError === $oException->getCode()) // { // $oApiIntegrator = /* @var $oApiIntegrator \CApiIntegratorManager */ \CApi::Manager('integrator'); // $oApiIntegrator->SetLastErrorCode(\ProjectSeven\Notifications::AuthError); // $oApiIntegrator->LogoutAccount(); // } \CApi::LogException($oException); $sAction = empty($sAction) ? 'Unknown' : $sAction; $aAdditionalParams = null; if ($oException instanceof \ProjectSeven\Exceptions\ClientException) { $aAdditionalParams = $oException->GetObjectParams(); } $aResponseItem = $this->oActions->ExceptionResponse(null, $sAction, $oException, $aAdditionalParams); } @header('Content-Type: application/json; charset=utf-8'); \CApi::Plugin()->RunHook('ajax.response-result', array($sAction, &$aResponseItem)); $sResult = \MailSo\Base\Utils::Php2js($aResponseItem, \CApi::MailSoLogger()); // \CApi::Log('AJAX: Response: '.$sResult); } else if ('upload' === $sFirstPart) { @ob_start(); $aResponseItem = null; $sAction = empty($aPaths[1]) ? '' : $aPaths[1]; try { $sMethodName = 'Upload'.$sAction; if (method_exists($this->oActions, $sMethodName) && is_callable(array($this->oActions, $sMethodName))) { $sError = ''; $sInputName = 'jua-uploader'; $iError = UPLOAD_ERR_OK; $_FILES = isset($_FILES) ? $_FILES : null; if (isset($_FILES, $_FILES[$sInputName], $_FILES[$sInputName]['name'], $_FILES[$sInputName]['tmp_name'], $_FILES[$sInputName]['size'], $_FILES[$sInputName]['type'])) { $iError = (isset($_FILES[$sInputName]['error'])) ? (int) $_FILES[$sInputName]['error'] : UPLOAD_ERR_OK; if (UPLOAD_ERR_OK === $iError) { $this->oActions->SetActionParams(array( 'AccountID' => $this->oHttp->GetPost('AccountID', ''), 'FileData' => $_FILES[$sInputName], 'AdditionalData' => $this->oHttp->GetPost('AdditionalData', null), 'IsExt' => '1' === (string) $this->oHttp->GetPost('IsExt', '0') ? '1' : '0', 'TenantHash' => (string) $this->oHttp->GetPost('TenantHash', ''), 'Token' => $this->oHttp->GetPost('Token', '') )); \CApi::LogObject($this->oActions->GetActionParams()); $aResponseItem = call_user_func(array($this->oActions, $sMethodName)); } else { $sError = $this->oActions->convertUploadErrorToString($iError); } } else if (!isset($_FILES) || !is_array($_FILES) || 0 === count($_FILES)) { $sError = 'size'; } else { $sError = 'unknown'; } } if (!is_array($aResponseItem) && empty($sError)) { throw new \ProjectSeven\Exceptions\ClientException(\ProjectSeven\Notifications::UnknownError); } } catch (\Exception $oException) { \CApi::LogException($oException); $aResponseItem = $this->oActions->ExceptionResponse(null, 'Upload', $oException); $sError = 'exception'; } if (0 < strlen($sError)) { $aResponseItem['Error'] = $sError; } @ob_get_clean(); if ('iframe' === $this->oHttp->GetPost('jua-post-type', '')) { @header('Content-Type: text/html; charset=utf-8'); } else { @header('Content-Type: application/json; charset=utf-8'); } $sResult = \MailSo\Base\Utils::Php2js($aResponseItem); } else if ('speclogon' === $sFirstPart || 'speclogoff' === $sFirstPart) { \CApi::SpecifiedUserLogging('speclogon' === $sFirstPart); \CApi::Location('./'); } else if ('sso' === $sFirstPart) { $oApiIntegratorManager = \CApi::Manager('integrator'); try { $sHash = $this->oHttp->GetRequest('hash'); if (!empty($sHash)) { $sData = \CApi::Cacher()->Get('SSO:'.$sHash, true); $aData = \CApi::DecodeKeyValues($sData); if (!empty($aData['Email']) && isset($aData['Password'], $aData['Login'])) { $oAccount = $oApiIntegratorManager->LoginToAccount($aData['Email'], $aData['Password'], $aData['Login']); if ($oAccount) { $oApiIntegratorManager->SetAccountAsLoggedIn($oAccount); } } } else { $oApiIntegratorManager->LogoutAccount(); } } catch (\Exception $oExc) { \CApi::LogException($oExc); } \CApi::Location('./'); } else if ('autodiscover' === $sFirstPart) { $oSettings =& \CApi::GetSettings(); $sInput = \file_get_contents('php://input'); //$sInput = '<?'.'xml version="1.0" encoding="utf-8"?'.'><Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006"><Request><EMailAddress>test@afterlogic.com</EMailAddress><AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema></Request></Autodiscover>'; \CApi::Log('#autodiscover:'); \CApi::LogObject($sInput); $aMatches = array(); $aEmailAddress = array(); \preg_match("/\<AcceptableResponseSchema\>(.*?)\<\/AcceptableResponseSchema\>/i", $sInput, $aMatches); \preg_match("/\<EMailAddress\>(.*?)\<\/EMailAddress\>/", $sInput, $aEmailAddress); if (!empty($aMatches[1]) && !empty($aEmailAddress[1])) { $sIncMailServer = trim($oSettings->GetConf('WebMail/ExternalHostNameOfLocalImap')); $sOutMailServer = trim($oSettings->GetConf('WebMail/ExternalHostNameOfLocalSmtp')); if (0 < \strlen($sIncMailServer) && 0 < \strlen($sOutMailServer)) { $iIncMailPort = 143; $iOutMailPort = 25; $aMatch = array(); if (\preg_match('/:([\d]+)$/', $sIncMailServer, $aMatch) && !empty($aMatch[1]) && is_numeric($aMatch[1])) { $sIncMailServer = preg_replace('/:[\d]+$/', $sIncMailServer, ''); $iIncMailPort = (int) $aMatch[1]; } $aMatch = array(); if (\preg_match('/:([\d]+)$/', $sOutMailServer, $aMatch) && !empty($aMatch[1]) && is_numeric($aMatch[1])) { $sOutMailServer = preg_replace('/:[\d]+$/', $sOutMailServer, ''); $iOutMailPort = (int) $aMatch[1]; } $sResult = \implode("\n", array( '<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">', ' <Response xmlns="'.$aMatches[1].'">', ' <Account>', ' <AccountType>email</AccountType>', ' <Action>settings</Action>', ' <Protocol>', ' <Type>IMAP</Type>', ' <Server>'.$sIncMailServer.'</Server>', ' <LoginName>'.$aEmailAddress[1].'</LoginName>', ' <Port>'.$iIncMailPort.'</Port>', ' <SSL>'.(993 === $iIncMailPort ? 'on' : 'off').'</SSL>', ' <SPA>off</SPA>', ' <AuthRequired>on</AuthRequired>', ' </Protocol>', ' <Protocol>', ' <Type>SMTP</Type>', ' <Server>'.$sOutMailServer.'</Server>', ' <LoginName>'.$aEmailAddress[1].'</LoginName>', ' <Port>'.$iOutMailPort.'</Port>', ' <SSL>'.(465 === $iOutMailPort ? 'on' : 'off').'</SSL>', ' <SPA>off</SPA>', ' <AuthRequired>on</AuthRequired>', ' </Protocol>', ' </Account>', ' </Response>', '</Autodiscover>')); } } if (empty($sResult)) { $usec = $sec = 0; list($usec, $sec) = \explode(' ', microtime()); $sResult = \implode("\n", array('<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">', (empty($aMatches[1]) ? ' <Response>' : ' <Response xmlns="'.$aMatches[1].'">' ), ' <Error Time="'.\gmdate('H:i:s', $sec).\substr($usec, 0, \strlen($usec) - 2).'" Id="2477272013">', ' <ErrorCode>600</ErrorCode>', ' <Message>Invalid Request</Message>', ' <DebugData />', ' </Error>', ' </Response>', '</Autodiscover>')); } header('Content-Type: text/xml'); $sResult = '<'.'?xml version="1.0" encoding="utf-8"?'.'>'."\n".$sResult; \CApi::Log(''); \CApi::Log($sResult); } else if ('profile' === $sFirstPart) { /* @var $oApiIosManager \CApiIosManager */ $oApiIosManager = \CApi::Manager('ios'); $oAccount = $oApiIntegrator->GetLogginedDefaultAccount(); $mResultProfile = $oApiIosManager && $oAccount ? $oApiIosManager->GenerateXMLProfile($oAccount) : false; if ($mResultProfile !== false) { header('Content-type: application/x-apple-aspen-config; chatset=utf-8'); header('Content-Disposition: attachment; filename="afterlogic.mobileconfig"'); echo $mResultProfile; } else { \CApi::Location('./?IOS/Error'); } } else if ('ios' === $sFirstPart) { $sResult = file_get_contents(PSEVEN_APP_ROOT_PATH.'templates/Ios.html'); $iUserId = $oApiIntegrator->GetLogginedUserId(); if (0 < $iUserId) { $oAccount = $oApiIntegrator->GetLogginedDefaultAccount(); $bError = isset($aPaths[1]) && 'error' === strtolower($aPaths[1]); // TODO @setcookie('skip_ios', '1', time() + 3600 * 3600, '/', null, null, true); $sResult = strtr($sResult, array( '{{IOS/HELLO}}' => \CApi::ClientI18N('IOS/HELLO', $oAccount), '{{IOS/DESC_P1}}' => \CApi::ClientI18N('IOS/DESC_P1', $oAccount), '{{IOS/DESC_P2}}' => \CApi::ClientI18N('IOS/DESC_P2', $oAccount), '{{IOS/DESC_P3}}' => \CApi::ClientI18N('IOS/DESC_P3', $oAccount), '{{IOS/DESC_P4}}' => \CApi::ClientI18N('IOS/DESC_P4', $oAccount), '{{IOS/DESC_P5}}' => \CApi::ClientI18N('IOS/DESC_P5', $oAccount), '{{IOS/DESC_P6}}' => \CApi::ClientI18N('IOS/DESC_P6', $oAccount), '{{IOS/DESC_P7}}' => \CApi::ClientI18N('IOS/DESC_P7', $oAccount), '{{IOS/DESC_BUTTON_YES}}' => \CApi::ClientI18N('IOS/DESC_BUTTON_YES', $oAccount), '{{IOS/DESC_BUTTON_SKIP}}' => \CApi::ClientI18N('IOS/DESC_BUTTON_SKIP', $oAccount), '{{IOS/DESC_BUTTON_OPEN}}' => \CApi::ClientI18N('IOS/DESC_BUTTON_OPEN', $oAccount), '{{AppVersion}}' => PSEVEN_APP_VERSION, '{{IntegratorLinks}}' => $oApiIntegrator->BuildHeadersLink() )); } else { \CApi::Location('./'); } } else if ('raw' === $sFirstPart) { $sAction = empty($aPaths[1]) ? '' : $aPaths[1]; try { if (!empty($sAction)) { $sMethodName = 'Raw'.$sAction; if (method_exists($this->oActions, $sMethodName)) { $this->oActions->SetActionParams(array( 'AccountID' => empty($aPaths[2]) || '0' === (string) $aPaths[2] ? '' : $aPaths[2], 'RawKey' => empty($aPaths[3]) ? '' : $aPaths[3], 'IsExt' => empty($aPaths[4]) ? '0' : ('1' === (string) $aPaths[4] ? '1' : 0), 'TenantHash' => empty($aPaths[5]) ? '' : $aPaths[5] )); if (!call_user_func(array($this->oActions, $sMethodName))) { \CApi::Log('False result.', \ELogLevel::Error); } } else { \CApi::Log('Invalid action.', \ELogLevel::Error); } } else { \CApi::Log('Empty action.', \ELogLevel::Error); } } catch (\Exception $oException) { \CApi::LogException($oException, \ELogLevel::Error); } } else if ('post' === $sFirstPart) { $sAction = $this->oHttp->GetPost('Action'); try { if (!empty($sAction)) { $sMethodName = 'Post'.$sAction; if (method_exists($this->oActions, $sMethodName) && is_callable(array($this->oActions, $sMethodName))) { $this->oActions->SetActionParams($this->oHttp->GetPostAsArray()); if (!call_user_func(array($this->oActions, $sMethodName))) { \CApi::Log('False result.', \ELogLevel::Error); } } else { \CApi::Log('Invalid action.', \ELogLevel::Error); } } else { \CApi::Log('Empty action.', \ELogLevel::Error); } } catch (\Exception $oException) { \CApi::LogException($oException, \ELogLevel::Error); } } else if ($this->oHttp->HasQuery('facebook')) { $mResult = \api_Social::Facebook(\api_Social::GetTenantFromCookieByHash()); if (false !== $mResult && is_array($mResult)) { \api_Social::Process($mResult); } } else if ($this->oHttp->HasQuery('google')) { $mResult = \api_Social::Google(\api_Social::GetTenantFromCookieByHash()); if (false !== $mResult && is_array($mResult)) { \api_Social::Process($mResult); } } else if ($this->oHttp->HasQuery('twitter')) { $mResult = \api_Social::Twitter(\api_Social::GetTenantFromCookieByHash()); if (false !== $mResult && is_array($mResult)) { \api_Social::Process($mResult); } } else if ($this->oHttp->HasQuery('dropbox')) { $mResult = \api_Social::Dropbox(\api_Social::GetTenantFromCookieByHash()); if (false !== $mResult && is_array($mResult)) { \api_Social::Process($mResult); } } else if ($this->oHttp->HasQuery('helpdesk')) { $sResult = $this->indexHTML(true, $this->oHttp->GetQuery('helpdesk')); } else if ($this->oHttp->HasQuery('invite')) { $aInviteValues = \CApi::DecodeKeyValues($this->oHttp->GetQuery('invite')); $oApiUsersManager = \CApi::Manager('users'); $oApiCalendarManager = \CApi::Manager('calendar'); if (isset($aInviteValues['organizer'])) { $oAccountOrganizer = $oApiUsersManager->GetAccountOnLogin($aInviteValues['organizer']); if (isset($oAccountOrganizer, $aInviteValues['attendee'], $aInviteValues['calendarId'], $aInviteValues['eventId'], $aInviteValues['action'])) { $oCalendar = $oApiCalendarManager->GetCalendar($oAccountOrganizer, $aInviteValues['calendarId']); if ($oCalendar) { $oEvent = $oApiCalendarManager->GetEvent($oAccountOrganizer, $aInviteValues['calendarId'], $aInviteValues['eventId']); if ($oEvent && is_array($oEvent) && 0 < count ($oEvent) && isset($oEvent[0])) { if (is_string($sResult)) { $sResult = file_get_contents(PSEVEN_APP_ROOT_PATH.'templates/InviteExternal.html'); $dt = new \DateTime(); $dt->setTimestamp($oEvent[0]['startTS']); if (!$oEvent[0]['allDay']) { $sDefaultTimeZone = new \DateTimeZone($oAccountOrganizer->GetDefaultStrTimeZone()); $dt->setTimezone($sDefaultTimeZone); } $sAction = $aInviteValues['action']; $sActionColor = 'green'; $sActionText = ''; switch (strtoupper($sAction)) { case 'ACCEPTED': $sActionColor = 'green'; $sActionText = 'Accepted'; break; case 'DECLINED': $sActionColor = 'red'; $sActionText = 'Declined'; break; case 'TENTATIVE': $sActionColor = '#A0A0A0'; $sActionText = 'Tentative'; break; } $sDateFormat = 'm/d/Y'; $sTimeFormat = 'h:i A'; switch ($oAccountOrganizer->User->DefaultDateFormat) { case \EDateFormat::DDMMYYYY: $sDateFormat = 'd/m/Y'; break; case \EDateFormat::DD_MONTH_YYYY: $sDateFormat = 'd/m/Y'; break; default: $sDateFormat = 'm/d/Y'; break; } switch ($oAccountOrganizer->User->DefaultTimeFormat) { case \ETimeFormat::F24: $sTimeFormat = 'H:i'; break; case \EDateFormat::DD_MONTH_YYYY: \ETimeFormat::F12; $sTimeFormat = 'h:i A'; break; default: $sTimeFormat = 'h:i A'; break; } $sDateTime = $dt->format($sDateFormat.' '.$sTimeFormat); $mResult = array( '{{COLOR}}' => $oCalendar->Color, '{{EVENT_NAME}}' => $oEvent[0]['subject'], '{{EVENT_BEGIN}}' => ucfirst(\CApi::ClientI18N('REMINDERS/EVENT_BEGIN', $oAccountOrganizer)), '{{EVENT_DATE}}' => $sDateTime, '{{CALENDAR}}' => ucfirst(\CApi::ClientI18N('REMINDERS/CALENDAR', $oAccountOrganizer)), '{{CALENDAR_NAME}}' => $oCalendar->DisplayName, '{{EVENT_DESCRIPTION}}' => $oEvent[0]['description'], '{{EVENT_ACTION}}' => $sActionText, '{{ACTION_COLOR}}' => $sActionColor, ); $sResult = strtr($sResult, $mResult); } else { \CApi::Log('Empty template.', \ELogLevel::Error); } } else { \CApi::Log('Event not found.', \ELogLevel::Error); } } else { \CApi::Log('Calendar not found.', \ELogLevel::Error); } $sAttendee = $aInviteValues['attendee']; if (!empty($sAttendee)) { $oApiCalendarManager->UpdateAppointment($oAccountOrganizer, $aInviteValues['calendarId'], $aInviteValues['eventId'], $sAttendee, $aInviteValues['action']); } } } } else if ($this->oHttp->HasQuery('calendar-pub') && 0 < strlen($this->oHttp->GetQuery('calendar-pub'))) { $sResult = $this->indexHTML(false, '', $this->oHttp->GetQuery('calendar-pub')); } else if ($this->oHttp->HasQuery('files-pub') && 0 < strlen($this->oHttp->GetQuery('files-pub'))) { $sResult = $this->indexHTML(false, '', '', $this->oHttp->GetQuery('files-pub')); } else if ('min' === $sFirstPart || 'window' === $sFirstPart) { $sAction = empty($aPaths[1]) ? '' : $aPaths[1]; try { if (!empty($sAction)) { $sMethodName = $aPaths[0].$sAction; if (method_exists($this->oActions, $sMethodName)) { if ('Min' === $aPaths[0]) { $oMinManager = /* @var $oMinManager \CApiMinManager */ \CApi::Manager('min'); $mHashResult = $oMinManager->GetMinByHash(empty($aPaths[2]) ? '' : $aPaths[2]); $this->oActions->SetActionParams(array( 'Result' => $mHashResult, 'Hash' => empty($aPaths[2]) ? '' : $aPaths[2], )); } else { $this->oActions->SetActionParams(array( 'AccountID' => empty($aPaths[2]) || '0' === (string) $aPaths[2] ? '' : $aPaths[2], 'RawKey' => empty($aPaths[3]) ? '' : $aPaths[3] )); } $mResult = call_user_func(array($this->oActions, $sMethodName)); $sTemplate = isset($mResult['Template']) && !empty($mResult['Template']) && is_string($mResult['Template']) ? $mResult['Template'] : null; if (!empty($sTemplate) && is_array($mResult) && file_exists(PSEVEN_APP_ROOT_PATH.$sTemplate)) { $sResult = file_get_contents(PSEVEN_APP_ROOT_PATH.$sTemplate); if (is_string($sResult)) { $sResult = strtr($sResult, $mResult); } else { \CApi::Log('Empty template.', \ELogLevel::Error); } } else if (!empty($sTemplate)) { \CApi::Log('Empty template.', \ELogLevel::Error); } else if (true === $mResult) { $sResult = ''; } else { \CApi::Log('False result.', \ELogLevel::Error); } } else { \CApi::Log('Invalid action.', \ELogLevel::Error); } } else { \CApi::Log('Empty action.', \ELogLevel::Error); } } catch (\Exception $oException) { \CApi::LogException($oException); } } else if ('twilio' === $sFirstPart) { $sResult = $this->oTwilio->Init($aPaths, $this->oHttp); } else if ('plugins' === $sFirstPart) { $sType = !empty($aPaths[1]) ? trim($aPaths[1]) : ''; if ('js' === $sType) { @header('Content-Type: application/javascript; charset=utf-8'); $sResult = \CApi::Plugin()->CompileJs(); } } else if ('postlogin' === $sFirstPart && \CApi::GetConf('labs.allow-post-login', false)) { $oSettings =& \CApi::GetSettings(); $sEmail = trim((string) $this->oHttp->GetRequest('Email', '')); $sLogin = (string) $this->oHttp->GetRequest('Login', ''); $sPassword = (string) $this->oHttp->GetRequest('Password', ''); $sAtDomain = trim($oSettings->GetConf('WebMail/LoginAtDomainValue')); if (\ELoginFormType::Login === (int) $oSettings->GetConf('WebMail/LoginFormType') && 0 < strlen($sAtDomain)) { $sEmail = \api_Utils::GetAccountNameFromEmail($sLogin).'@'.$sAtDomain; $sLogin = $sEmail; } if (0 !== strlen($sPassword) && 0 !== strlen($sEmail.$sLogin)) { try { $oAccount = $oApiIntegrator->LoginToAccount( $sEmail, $sPassword, $sLogin ); } catch (Exception $oEx) { echo $oEx->getMessage(); exit; } if ($oAccount instanceof \CAccount) { $oApiIntegrator->SetAccountAsLoggedIn($oAccount); } } \CApi::Location('./'); } else if ('mobile' === $sFirstPart) { if ($oApiIntegrator && $oApiCapability && $oApiCapability->IsNotLite()) { $oApiIntegrator->SetMobile(true); } \CApi::Location('./'); } else { @ob_start(); \CApi::Plugin()->RunServiceHandle($sFirstPart, $aPaths); $sResult = @ob_get_clean(); if (0 === strlen($sResult)) { $sResult = $this->getIndexHTML(); } } } else { $sResult = $this->getIndexHTML(); } // Output result echo $sResult; } /** * @return string */ private function getIndexHTML() { /* @var $oApiIntegrator \CApiIntegratorManager */ $oApiIntegrator = \CApi::Manager('integrator'); /* @var $oApiCapability \CApiCapabilityManager */ $oApiCapability = \CApi::Manager('capability'); if ($oApiIntegrator && $oApiCapability && $oApiCapability->IsNotLite() && 1 === $oApiIntegrator->IsMobile()) { return $this->indexHTML(false, '', '', '', true); } else { return $this->indexHTML(); } } }