Completed
Push — master ( 96016b...ff8a4f )
by Olivier
01:36
created

Calendar::hasEvents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Shapin\Calendar\Model;
6
7
class Calendar
8
{
9
    private $events = [];
10
11 3
    public function getFlattenedEvents(): array
12
    {
13 3
        $events = [];
14 3
        $eventsInARecurrence = [];
15 3
        $recurringEvents = [];
16 3
        foreach ($this->getEvents() as $event) {
17 3
            if ($event->isARecurrence()) {
18 2
                $eventsInARecurrence[] = $event;
19
20 2
                continue;
21
            }
22
23 3
            if ($event->isRecurring()) {
24 3
                $recurringEvents[] = $event;
25
            }
26
27 3
            $events[$event->getStartAt()->getTimestamp()] = $event;
28
        }
29
30
        // Deal with recurring events
31 3
        foreach ($recurringEvents as $event) {
32 3
            $startAt = $event->getStartAt();
33 3
            $duration = $event->getEndAt()->diff($startAt);
34 3
            $modifier = $event->getRecurrenceRule()->getModifier();
35
36 3
            $until = $event->getLastEventStartAt();
37 3
            $nextEventStartAt = $startAt->modify($modifier);
38 3
            while ($nextEventStartAt < $until) {
39 3
                $newEvent = new Event(
40 3
                    $nextEventStartAt,
41 3
                    $nextEventStartAt->add($duration)
42
                );
43 3
                $newEvent->setSummary($event->getSummary());
44 3
                $newEvent->setDescription($event->getDescription());
45
46 3
                $events[$newEvent->getStartAt()->getTimestamp()] = $newEvent;
47 3
                $nextEventStartAt = $nextEventStartAt->modify($modifier);
48
            }
49
        }
50
51
        // Replace recurring events with updated ones
52 3
        foreach ($eventsInARecurrence as $event) {
53 2
            $events[$event->getRecurrenceId()->getTimestamp()] = $event;
54
        }
55
56 3
        ksort($events);
57
58 3
        return $events;
59
    }
60
61 3
    public function hasEvents(): bool
62
    {
63 3
        return 0 < count($this->events);
64
    }
65
66 3
    public function addEvent(Event $event): self
67
    {
68 3
        $this->events[] = $event;
69
70 3
        return $this;
71
    }
72
73 3
    public function getEvents(): array
74
    {
75 3
        return $this->events;
76
    }
77
}
78