From abe6de3ab57dfd4f8f2166682d37731884b9cc94 Mon Sep 17 00:00:00 2001 From: Alex Tselegidis Date: Wed, 23 Sep 2020 14:53:15 +0300 Subject: [PATCH] Added more information to the ICS file, sent with the email confirmation. --- application/libraries/Ics_file.php | 82 ++++++++++++++++++++++++++++-- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/application/libraries/Ics_file.php b/application/libraries/Ics_file.php index f5d4094d..28056de8 100644 --- a/application/libraries/Ics_file.php +++ b/application/libraries/Ics_file.php @@ -15,7 +15,9 @@ use Jsvrcek\ICS\CalendarExport; use Jsvrcek\ICS\CalendarStream; use Jsvrcek\ICS\Exception\CalendarEventException; use Jsvrcek\ICS\Model\Calendar; +use Jsvrcek\ICS\Model\CalendarAlarm; use Jsvrcek\ICS\Model\CalendarEvent; +use Jsvrcek\ICS\Model\Description\Location; use Jsvrcek\ICS\Model\Relationship\Attendee; use Jsvrcek\ICS\Model\Relationship\Organizer; use Jsvrcek\ICS\Utility\Formatter; @@ -44,8 +46,10 @@ class Ics_file { */ public function get_stream($appointment, $service, $provider, $customer) { - $appointment_start = new DateTime($appointment['start_datetime']); - $appointment_end = new DateTime($appointment['end_datetime']); + $appointment_timezone = new DateTimeZone($provider['timezone']); + + $appointment_start = new DateTime($appointment['start_datetime'], $appointment_timezone); + $appointment_end = new DateTime($appointment['end_datetime'], $appointment_timezone); // Setup the event. $event = new CalendarEvent(); @@ -53,10 +57,44 @@ class Ics_file { $event ->setStart($appointment_start) ->setEnd($appointment_end) + ->setStatus('CONFIRMED') ->setSummary($service['name']) ->setUid($appointment['id']); - // Add the customer attendee. + if (!empty($service['location'])) + { + $location = new Location(); + $location->setName((string)$service['location']); + $event->addLocation($location); + } + + $description = [ + '', + lang('provider'), + '', + lang('name') . ': ' . $provider['first_name'] . ' ' . $provider['last_name'], + lang('email') .': ' . $provider['email'], + lang('phone_number') . ': ' . $provider['phone_number'], + lang('address') . ': ' . $provider['address'], + lang('city') . ': ' . $provider['city'], + lang('zip_code') . ': ' . $provider['zip_code'], + '', + lang('customer'), + '', + lang('name') . ': ' . $customer['first_name'] . ' ' . $customer['last_name'], + lang('email') .': ' . $customer['email'], + lang('phone_number') . ': ' . $customer['phone_number'], + lang('address') . ': ' . $customer['address'], + lang('city') . ': ' . $customer['city'], + lang('zip_code') . ': ' . $customer['zip_code'], + '', + lang('notes'), + '', + $appointment['notes'], + ]; + + $event->setDescription(implode("\\n", $description)); + $attendee = new Attendee(new Formatter()); if (isset($customer['email']) && ! empty($customer['email'])) @@ -64,8 +102,44 @@ class Ics_file { $attendee->setValue($customer['email']); } - + // Add the event attendees. $attendee->setName($customer['first_name'] . ' ' . $customer['last_name']); + $attendee->setCalendarUserType('INDIVIDUAL') + ->setRole('REQ-PARTICIPANT') + ->setParticipationStatus('NEEDS-ACTION') + ->setRsvp('TRUE'); + $event->addAttendee($attendee); + + $alarm = new CalendarAlarm(); + $alarm_datetime = clone $appointment_start; + $alarm->setTrigger($alarm_datetime->modify('-15 minutes')); + $alarm->setSummary('Alarm notification'); + $alarm->setDescription('This is an event reminder'); + $alarm->setAction('EMAIL'); + $alarm->addAttendee($attendee); + $event->addAlarm($alarm); + + $alarm = new CalendarAlarm(); + $alarm_datetime = clone $appointment_start; + $alarm->setTrigger($alarm_datetime->modify('-60 minutes')); + $alarm->setSummary('Alarm notification'); + $alarm->setDescription('This is an event reminder'); + $alarm->setAction('EMAIL'); + $alarm->addAttendee($attendee); + $event->addAlarm($alarm); + + $attendee = new Attendee(new Formatter()); + + if (isset($provider['email']) && ! empty($provider['email'])) + { + $attendee->setValue($provider['email']); + } + + $attendee->setName($provider['first_name'] . ' ' . $provider['last_name']); + $attendee->setCalendarUserType('INDIVIDUAL') + ->setRole('REQ-PARTICIPANT') + ->setParticipationStatus('ACCEPTED') + ->setRsvp('FALSE'); $event->addAttendee($attendee); // Set the organizer.