AbstractHoliday::isClosedDay()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 1
1
<?php
2
3
namespace Holiday\Model;
4
5
abstract class AbstractHoliday implements HolidayInterface
6
{
7
    const TIME_ZONE = 'Europe/Paris';
8
    
9
    const MONDAY    = 'Monday';
10
    const TUESDAY   = 'Tuesday';
11
    const WEDNESDAY = 'Wednesday';
12
    const THURSDAY  = 'Thursday';
13
    const FRIDAY    = 'Friday';
14
    const SATURDAY  = 'Saturday';
15
    const SUNDAY    = 'Sunday';
16
17
    const FILTER_MODE_INCLUSION = 'INCLUSION';
18
    const FILTER_MODE_EXCLUSION = 'EXCLUSION';
19
20
    public static function getEasterDate($year)
21
    {
22
        $easter = new \DateTime('@' . easter_date($year));
23
        $easter->setTimezone(new \DateTimeZone(self::TIME_ZONE));
24
25
        return  $easter ;
26
    }
27
28
    public static function getEasterMonday($year)
29
    {
30
        return self::getEasterDate($year)->add(new \DateInterval('P1D'));
31
    }
32
33
    public static function getAscensionDay($year)
34
    {
35
        return self::getEasterDate($year)->add(new \DateInterval('P39D'));
36
    }
37
38
    public static function getWitmonday($year)
39
    {
40
        return self::getEasterDate($year)->add(new \DateInterval('P50D'));
41
    }
42
43
    public static function isClosedDay(\Datetime $date)
44
    {
45
        $year           = intval($date->format('Y'));
46
        $holidaysString = array_map(function ($holiday) {
47
            return $holiday->format('y-m-d') ;
48
        }, static::getHolidays($year));
49
        
50
        return in_array($date->format('y-m-d'), $holidaysString) ? true : false  ;
51
    }
52
53
    public static function getFilteredHolidays($year, array $filters, $mode = self::FILTER_MODE_EXCLUSION)
54
    {
55
        $holidays        = static::getHolidays($year);
56
        $cleanedHolidays = [];
57
        foreach ($holidays as $holiday) {
58
            if ($mode === self::FILTER_MODE_EXCLUSION) {
59
                if (!in_array($holiday->format('l'), $filters)) {
60
                    $cleanedHolidays [] = $holiday;
61
                }
62
            } else {
63
                if (in_array($holiday->format('l'), $filters)) {
64
                    $cleanedHolidays [] = $holiday;
65
                }
66
            }
67
        }
68
69
        return $cleanedHolidays;
70
    }
71
}
72