GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

TimeTableChecker::isOverridden()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
nc 4
nop 2
dl 0
loc 14
ccs 7
cts 7
cp 1
crap 4
rs 9.7998
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace Sourcebox\OpeningHours\Checker;
5
6
use Sourcebox\OpeningHours\Day;
7
use Sourcebox\OpeningHours\Override;
8
use Sourcebox\OpeningHours\Override\OverrideInterface;
9
use Sourcebox\OpeningHours\TimePeriod;
10
use Sourcebox\OpeningHours\TimeTable;
11
12
/**
13
 * Class TimeTableChecker
14
 * @package Sourcebox\OpeningHours\Checker
15
 */
16
class TimeTableChecker
17
{
18
    /**
19
     * @var TimeTable
20
     */
21
    private $timeTable;
22
23
    /**
24
     * @var OverrideInterface[]
25
     */
26
    private $overrides = [];
27
28
    /**
29
     * TimeTableChecker constructor.
30
     *
31
     * @param TimeTable $timeTable
32
     * @param Override\OverrideInterface[] $overrides
33
     */
34 60
    public function __construct(TimeTable $timeTable, array $overrides = [])
35
    {
36 60
        $this->timeTable = $timeTable;
37 60
        $this->overrides = $overrides;
38 60
    }
39
40
    /**
41
     * @return TimeTable
42
     */
43 22
    public function getTimeTable(): TimeTable
44
    {
45 22
        return $this->timeTable;
46
    }
47
48
    /**
49
     * @param TimeTable $timeTable
50
     *
51
     * @return TimeTableChecker
52
     */
53 2
    public function setTimeTable(TimeTable $timeTable): TimeTableChecker
54
    {
55 2
        $this->timeTable = $timeTable;
56
57 2
        return $this;
58
    }
59
60
    /**
61
     * @return Override\OverrideInterface[]
62
     */
63 2
    public function getOverrides(): array
64
    {
65 2
        return $this->overrides;
66
    }
67
68
    /**
69
     * @param Override\OverrideInterface[] $overrides
70
     *
71
     * @return TimeTableChecker
72
     */
73 2
    public function setOverrides(array $overrides): TimeTableChecker
74
    {
75 2
        $this->overrides = $overrides;
76
77 2
        return $this;
78
    }
79
80
    /**
81
     * @param OverrideInterface $override
82
     */
83 38
    public function addOverride(OverrideInterface $override)
84
    {
85 38
        $this->overrides[] = $override;
86 38
    }
87
88
    /**
89
     * Checks if certain day has time periods.
90
     *
91
     * @param int $dayId
92
     *
93
     * @return TimePeriod[]
94
     */
95 26
    public function getTimePeriodsForDay(int $dayId)
96
    {
97 26
        $day = $this->timeTable->getDay($dayId);
98
99 26
        if ($day instanceof Day && count($day->getTimePeriods()) >= 1) {
100 24
            return $day->getTimePeriods();
101
        }
102
103 8
        return [];
104
    }
105
106
    /**
107
     * Check if a date's time is within the day's time period.
108
     * @param \DateTime $dateTime
109
     *
110
     * @return bool
111
     */
112 20
    public function isDateTimeWithinDayTimePeriods(\DateTime $dateTime)
113
    {
114 20
        $timePeriods = $this->getTimePeriodsForDay((int) $dateTime->format('N'));
115
116 20
        foreach ($timePeriods as $timePeriod) {
117 18
            if ($this->isDateTimeBetweenTimePeriod($dateTime, $timePeriod)) {
118 18
                return true;
119
            }
120
        }
121
122 6
        return false;
123
    }
124
125
    /**
126
     * Check if the time of the given DateTime is within TimePeriod's from and until time.
127
     *
128
     * @param \DateTime $dateTime
129
     * @param TimePeriod $timePeriod
130
     *
131
     * @return bool
132
     */
133 18
    public function isDateTimeBetweenTimePeriod(\DateTime $dateTime, TimePeriod $timePeriod) : bool
134
    {
135 18
        return $dateTime >= $this->createDateTimeForHour($dateTime, $timePeriod->getFrom())
136 18
            && $dateTime <= $this->createDateTimeForHour($dateTime, $timePeriod->getUntil());
137
    }
138
139
    /**
140
     * Creates a DateTime object based on given DateTime's date and given hour.
141
     *
142
     * @param \DateTime $dateTime
143
     * @param string $time
144
     *
145
     * @return \DateTime
146
     */
147 20
    public function createDateTimeForHour(\DateTime $dateTime, string $time) : \DateTime
148
    {
149 20
        list($hours, $minutes) = explode(':', $time);
150
151 20
        $dateTime = \DateTime::createFromFormat(
152 20
            'Y-m-d H:i:s',
153 20
            $dateTime->format('Y-m-d H:i:s'),
154 20
            $this->getTimeTable()->getTimezone()
155
        );
156
157 20
        $dateTime->setTime((int) $hours, (int) $minutes, 0);
158
159 20
        return $dateTime;
160
    }
161
162
    /**
163
     * Checks if datetime is overridden.
164
     *
165
     * @param \DateTime $dateTime
166
     * @param string $type
167
     *
168
     * @return bool
169
     */
170 48
    public function isOverridden(\DateTime $dateTime, string $type)
171
    {
172 48
        foreach ($this->overrides as $override) {
173 36
            if ($override->getType() !== $type) {
174 12
                continue;
175
            }
176
177 36
            if ($override->isOverridden($dateTime)) {
178 36
                return true;
179
            }
180
        }
181
182 26
        return false;
183
    }
184
}
185