For my application I use laravel 5.3
and a package called markuspoerschke/iCal
which you can find here.
When a student wants to subscribe to his or her calender, we generate an URL which can be filled into Google Calender and Outlook. Except the last mentioned outlook
it isn't importing any events.
Example of how our generated ICS looks like. This contains 1 event with the description of 'test'.
BEGIN:VCALENDAR
VERSION:2.0
PRODID:www.onderwijsonline.nl
X-PUBLISHED-TTL:PT15M
BEGIN:VEVENT
UID:58e5f21fc2551
DTSTART;TZID=Europe/Amsterdam:20170406T090000
SEQUENCE:0
TRANSP:OPAQUE DTEND;TZID=Europe/Amsterdam:20170406T140000 URL:http://oo.dev/calendar/event/420
SUMMARY:Test
CLASS:PUBLIC
DTSTAMP:20170406T094535Z
END:VEVENT
END:VCALENDAR
The script that calls the package to generate this:
public function getIcal($token = null)
{
$user = $this->userRepository->getByToken($token);
$vCalendar = new \Eluceo\iCal\Component\Calendar('www.onderwijsonline.nl');
$vCalendar->setPublishedTTL('PT15M');
if (!is_null($user)) {
/**
* Calendar events
*/
$events = $this->calendarRepository->getEventsForUser($user->id, Carbon::now()->subWeeks(2), Carbon::now()->addWeeks(6));
foreach ($events as $event) {
$vEvent = new \Eluceo\iCal\Component\Event();
$vEvent
->setUseTimezone(true)
->setUseUtc(false)
->setDtStart(Carbon::parse($event['start']))
->setDtEnd(Carbon::parse($event['end']))
->setNoTime(($event['allDay'] == 1 ? true : false))
->setUrl($event['href'])
->setDescription($event['description'])
->setSummary($event['title']);
$vCalendar->addComponent($vEvent);
}
/**
* Project events
*/
$events = $this->calendarRepository->getEventsForProjects($user->id, null, null);
foreach ($events as $event) {
$vEvent = new \Eluceo\iCal\Component\Event();
$vEvent
->setUseTimezone(true)
->setUseUtc(false)
->setDtStart(Carbon::parse($event['start']))
->setDtEnd(Carbon::parse($event['end']))
->setNoTime(($event['allDay'] == 1 ? true : false))
->setUrl($event['href'])
->setSummary($event['title']);
$vCalendar->addComponent($vEvent);
}
/**
* Timetable events
*/
$events = $this->calendarRepository->getEventsForTimetables($user->id, Carbon::now()->subWeeks(2), Carbon::now()->addWeeks(6));
foreach ($events as $event) {
$vEvent = new \Eluceo\iCal\Component\Event();
$vEvent
->setUseTimezone(true)
->setUseUtc(false)
->setDtStart(Carbon::parse($event['start']))
->setDtEnd(Carbon::parse($event['end']))
->setNoTime(($event['allDay'] == 1 ? true : false))
->setSummary($event['title']);
$vCalendar->addComponent($vEvent);
}
}
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=onderwijsonline.ics');
return $vCalendar->render();
}
As I've mentioned above, this exact setup works fine for Google Calendar, but is not for outlook.
Does anyone know why and how that can be fixed?