/home/ivoiecob/email.hirewise-va.com/vendor/afterlogic/dav/lib/DAV/CalDAV/Schedule/IMipPlugin.php
<?php
namespace Afterlogic\DAV\CalDAV\Schedule;
use Sabre\DAV;
use Sabre\VObject\ITip;
use Aurora\Modules\CalendarMeetingsPlugin\Classes\Helper;
use Aurora\Modules\Core\Module;
use Aurora\System\Api;
/**
* iMIP handler.
*
* This class is responsible for sending out iMIP messages. iMIP is the
* email-based transport for iTIP. iTIP deals with scheduling operations for
* iCalendar objects.
*
* If you want to customize the email that gets sent out, you can do so by
* extending this class and overriding the sendMessage method.
*
* @copyright Copyright (C) fruux GmbH (https://fruux.com/)
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
class IMipPlugin extends \Sabre\CalDAV\Schedule\IMipPlugin
{
/** @var DAV\Server $server */
protected $server;
public function __construct()
{
}
/*
* This initializes the plugin.
*
* This function is called by Sabre\DAV\Server, after
* addPlugin is called.
*
* This method should set up the required event subscriptions.
*
* @param DAV\Server $server
* @return void
*/
public function initialize(DAV\Server $server)
{
parent::initialize($server);
$this->server = $server;
}
/**
* Event handler for the 'schedule' event.
*
* @param ITip\Message $iTipMessage
* @return void
*/
public function schedule(ITip\Message $iTipMessage)
{
// Not sending any emails if the system considers the update
// insignificant.
if (!$iTipMessage->significantChange) {
if (!$iTipMessage->scheduleStatus) {
$iTipMessage->scheduleStatus = '1.0;We got the message, but it\'s not significant enough to warrant an email';
}
return;
}
$summary = $iTipMessage->message->VEVENT->SUMMARY;
if (parse_url($iTipMessage->sender, PHP_URL_SCHEME) === 'mailto') {
$senderEmail = substr($iTipMessage->sender, 7);
} else {
$iPos = strpos($iTipMessage->sender, 'principals/');
if ($iPos !== false) {
$senderEmail = \trim(substr($iTipMessage->sender, $iPos + 11), '/');
} else {
return;
}
}
if (parse_url($iTipMessage->recipient, PHP_URL_SCHEME) === 'mailto') {
$recipient = substr($iTipMessage->recipient, 7);
} else {
$iPos = strpos($iTipMessage->recipient, 'principals/');
if ($iPos !== false) {
$recipient = \trim(substr($iTipMessage->recipient, $iPos + 11), '/');
} else {
return;
}
}
if ($iTipMessage->senderName) {
$sender = $iTipMessage->senderName . ' <' . $senderEmail . '>';
} else {
$sender = $senderEmail;
}
if ($iTipMessage->recipientName) {
$recipient = $iTipMessage->recipientName . ' <' . $recipient . '>';
}
$subject = 'iTIP message';
switch (strtoupper($iTipMessage->method)) {
case 'REPLY':
$sPartstat = $iTipMessage->message->VEVENT->ATTENDEE['PARTSTAT']->getValue();
$oModule = Api::GetModule('CalendarMeetingsPlugin');
$subject = 'Re: ' . $summary;
if ($oModule) {
switch ($sPartstat) {
case 'ACCEPTED':
$subject = $oModule->i18N('SUBJECT_PREFFIX_ACCEPTED') . ': '. $summary;
break;
case 'DECLINED':
$subject = $oModule->i18N('SUBJECT_PREFFIX_DECLINED') . ': '. $summary;
break;
case 'TENTATIVE':
$subject = $oModule->i18N('SUBJECT_PREFFIX_TENTATIVE') . ': '. $summary;
break;
}
}
break;
case 'REQUEST':
$subject = $summary;
break;
case 'CANCEL':
$subject = 'Cancelled: ' . $summary;
break;
}
$headers = [
'Reply-To: ' . $sender,
'From: ' . $sender,
'Content-Type: text/calendar; charset=UTF-8; method=' . $iTipMessage->method,
];
if (DAV\Server::$exposeVersion) {
$headers[] = 'X-Sabre-Version: ' . DAV\Version::VERSION;
}
$htmlBody = '';
if (strtoupper($iTipMessage->method) === 'REQUEST') {
$oUser = Module::getInstance()->GetUserByPublicId($senderEmail);
/** @var \Sabre\VObject\Property\ICalendar\DateTime $oDTSTART */
$oDTSTART = $iTipMessage->message->VEVENT->DTSTART;
$sStartDateFormat = $oDTSTART->hasTime() ? 'D, F d, o, H:i' : 'D, F d, o';
$sStartDate = \Aurora\Modules\Calendar\Classes\Helper::getStrDate($oDTSTART, $oUser->DefaultTimeZone, $sStartDateFormat);
$calindarId = '';
$url = \Afterlogic\Dav\Server::getInstance()->httpRequest->getUrl();
if (!empty($url)) {
list($calenndarPath, $eventId) = \Sabre\Uri\split($url);
$calindarId = basename($calenndarPath);
}
$htmlBody = Helper::createHtmlFromEvent(
$calindarId,
$iTipMessage->uid,
$senderEmail,
$recipient,
$sStartDate,
$iTipMessage->message->VEVENT->LOCATION,
$iTipMessage->message->VEVENT->DESCRIPTION
);
foreach ($iTipMessage->message->VEVENT->ATTENDEE as &$attendee) {
$sAttendee = (string) $attendee;
$iPos = strpos($sAttendee, 'principals/');
if ($iPos !== false) {
$attendee->setValue(trim(substr($sAttendee, $iPos + 11),'/'));
}
}
Helper::sendAppointmentMessage(
$senderEmail,
$recipient,
$subject,
$iTipMessage->message,
$iTipMessage->method,
$htmlBody
);
$iTipMessage->scheduleStatus = '1.1; Scheduling message is sent via iMip';
}
return false;
}
}