File size: 3,040 Bytes
12759cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php

class Line
{
    protected $image = null;
    protected $name = null;
    protected $openingDateTime = null;
    protected $closingDateTime = null;
    protected $disruptions = [];
    protected $dateDayStart;

    public function __construct($name, $dateDayStart) {
        $this->name = $name;
        $this->dateDayStart = $dateDayStart;
    }

    public function getId() {

        $lineName = $this->getName() ?? '';
        return strtoupper(str_replace(['Métro ', 'Ligne '], '', $lineName));
    }

    public function getDisruptions() {
        return $this->disruptions;
    }

    public function findDisruption($impact) {
        foreach($this->disruptions as $disruption) {
            $dateStart = $impact->getDateStart();
            $dateEnd = $impact->getDateEnd();
            $dateStart = $dateStart->modify('-10 minutes');
            $dateEnd = $dateEnd->modify('+10 minutes');
            if(!$impact->hasRealDisruptionId() && ($dateStart > $disruption->getDateEnd() || $dateEnd < $disruption->getDateStart())) {
                continue;
            }

            if($impact->getDistruptionId() != $disruption->getId()) {
                continue;
            }

            return $disruption;
        }

        return null;
    }

    public function addImpact($impact) {
        $disruption = $this->findDisruption($impact);

        if(!$disruption) {
            $disruption = new Disruption($impact->getDistruptionId(), $this->dateDayStart, $this);
            $this->disruptions[] = $disruption;
        }

        $disruption->addImpact($impact);
    }

    public function getName() {

        return $this->name;
    }

    public function setImage($image) {

        $this->image = $image;
    }

    public function getImage() {

        return $this->image;
    }

    public function setOpeningDateTime($dateTime) {

        return $this->openingDateTime = $dateTime;
    }

    public function getOpeningDateTime() {

        return $this->openingDateTime;
    }

    public function setClosingDateTime($dateTime) {

        return $this->closingDateTime = $dateTime;
    }

    public function getClosingDateTime() {

        return $this->closingDateTime;
    }

    public function hasOpeningHours() {

        return $this->openingDateTime != null && $this->closingDateTime != null;
    }

    public function isLigneOpen($date) {
        if(!$this->hasOpeningHours()) {

            return true;
        }

        return $date > $this->getOpeningDateTime() && $date < $this->getClosingDateTime();
    }

    public function getImpactsInPeriod($date) {
        $impacts = [];

        foreach($this->disruptions as $disruption) {
            $impacts = array_merge($impacts, $disruption->getImpactsInPeriod($date));
        }

        return $impacts;
    }

    public function getImpacts() {
        $impacts = [];
        foreach($this->disruptions as $disruption) {
            $impacts = array_merge($impacts, $disruption->getImpacts());
        }

        return $impacts;
    }
}