for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Spatie\CalendarLinks\Generators;
use Spatie\CalendarLinks\Link;
use Spatie\CalendarLinks\Generator;
/**
* @see https://icalendar.org/RFC-Specifications/iCalendar-RFC-5545/
*/
class Ics implements Generator
{
public function generate(Link $link): string
$url = ['data:text/calendar;charset=utf8,',
'BEGIN:VCALENDAR',
'VERSION:2.0',
'BEGIN:VEVENT',
'SUMMARY:'.$link->title, ];
if ($link->allDay) {
$dateTimeFormat = 'Ymd';
$url[] = 'DTSTART:'.$link->from->format($dateTimeFormat);
$url[] = 'DTEND:'.$link->to->format($dateTimeFormat);
} else {
$dateTimeFormat = "e:Ymd\THis";
$url[] = 'DTSTART;TZID='.$link->from->format($dateTimeFormat);
$url[] = 'DTEND;TZID='.$link->to->format($dateTimeFormat);
}
if ($link->description) {
$url[] = 'DESCRIPTION:'.$this->escapeString($link->description);
if ($link->address) {
$url[] = 'LOCATION:'.$this->escapeString($link->address);
$url[] = 'END:VEVENT';
$url[] = 'END:VCALENDAR';
$redirectLink = implode('%0A', $url);
return $redirectLink;
protected function escapeString(string $field): string
return addcslashes($field, "\n,");