Completed
Push — master ( 3a3feb...19ddc4 )
by Alies
15s queued 12s
created

WebOutlook::generate()   A

Complexity

Conditions 5
Paths 16

Size

Total Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 28
c 0
b 0
f 0
rs 9.1608
cc 5
nc 16
nop 1
1
<?php
2
3
namespace Spatie\CalendarLinks\Generators;
4
5
use DateTimeZone;
6
use Spatie\CalendarLinks\Generator;
7
use Spatie\CalendarLinks\Link;
8
9
/**
10
 * @see https://github.com/InteractionDesignFoundation/add-event-to-calendar-docs/blob/master/services/outlook-live.md
11
 */
12
class WebOutlook implements Generator
13
{
14
    /** @var string {@see https://www.php.net/manual/en/function.date.php} */
15
    const DATE_FORMAT = 'Y-m-d';
16
    const DATETIME_FORMAT = 'Y-m-d\TH:i:s\Z';
17
18
    /** {@inheritdoc} */
19
    public function generate(Link $link): string
20
    {
21
        $url = 'https://outlook.live.com/calendar/deeplink/compose?path=/calendar/action/compose&rru=addevent';
22
23
        $dateTimeFormat = $link->allDay ? self::DATE_FORMAT : self::DATETIME_FORMAT;
24
25
        $utcStartDateTime = (clone $link->from)->setTimezone(new DateTimeZone('UTC'));
26
        $utcEndDateTime = (clone $link->to)->setTimezone(new DateTimeZone('UTC'));
27
28
        $url .= '&startdt='.$utcStartDateTime->format($dateTimeFormat);
29
        $url .= '&enddt='.$utcEndDateTime->format($dateTimeFormat);
30
31
        if ($link->allDay) {
32
            $url .= '&allday=true';
33
        }
34
35
        $url .= '&subject='.urlencode($link->title);
36
37
        if ($link->description) {
38
            $url .= '&body='.urlencode($link->description);
39
        }
40
41
        if ($link->address) {
42
            $url .= '&location='.urlencode($link->address);
43
        }
44
45
        return $url;
46
    }
47
}
48