*/ class Google implements Generator { /** @var string {@see https://www.php.net/manual/en/function.date.php} */ protected $dateFormat = 'Ymd'; /** @var string */ protected $dateTimeFormat = 'Ymd\THis'; /** @psalm-var GoogleUrlParameters */ protected array $urlParameters = []; /** @psalm-param GoogleUrlParameters $urlParameters */ public function __construct(array $urlParameters = []) { $this->urlParameters = $urlParameters; } /** {@inheritDoc} */ public function generate(Link $link): string { $url = 'https://calendar.google.com/calendar/render?action=TEMPLATE'; $dateTimeFormat = $link->allDay ? $this->dateFormat : $this->dateTimeFormat; $url .= '&dates='.$link->from->format($dateTimeFormat).'/'.$link->to->format($dateTimeFormat); $url .= '&ctz=' . $link->from->getTimezone()->getName(); $url .= '&text='.urlencode($link->title); if ($link->description) { $url .= '&details='.urlencode($link->description); } if ($link->address) { $url .= '&location='.urlencode($link->address); } foreach ($this->urlParameters as $key => $value) { $url .= '&'.urlencode($key).(in_array($value, [null, ''], true) ? '' : '='.urlencode((string) $value)); } return $url; } }