Completed
Push — master ( 87afc0...a49ade )
by Gaël
12s queued 11s
created

OpeningHoursParser::parse()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 13
c 0
b 0
f 0
nc 2
nop 1
dl 0
loc 21
rs 9.8333
1
<?php
2
3
namespace DansMaCulotte\MondialRelay\Helpers;
4
5
use Spatie\OpeningHours\OpeningHours;
6
use stdClass;
7
8
class OpeningHoursParser
9
{
10
    /**
11
     * Parse the SOAP result of a relay point and returns an array of OpeningHours
12
     *
13
     * @param stdClass $relayPoint
14
     * @return OpeningHours
15
     */
16
    public static function parse(stdClass $relayPoint)
17
    {
18
        $businessHours = [];
19
20
        $days = [
21
            'monday' => 'Lundi',
22
            'tuesday' => 'Mardi',
23
            'wednesday' => 'Mercredi',
24
            'thursday' => 'Jeudi',
25
            'friday' => 'Vendredi',
26
            'saturday' => 'Samedi',
27
            'sunday' => 'Dimanche',
28
        ];
29
30
        foreach ($days as $day => $dayFr) {
31
            $businessHours[$day] =  OpeningHoursParser::formatOpeningHoursDay($relayPoint->{'Horaires_' . $dayFr}->string);
32
        }
33
34
        $openingHours = OpeningHours::create($businessHours);
35
36
        return $openingHours;
37
    }
38
39
40
    /**
41
     * @param array $hours Array of string of hours e.g. [1030, 1400, 1500, 2000]
42
     * @return array       Array of formatted hours e.g. [10:30-14:00, 15:00-20:00]
43
     */
44
    private static function formatOpeningHoursDay(array $hours)
45
    {
46
        $validOpenings = [];
47
        if (!empty($hours[0]) && !empty($hours[1])) {
48
            array_push($validOpenings, OpeningHoursParser::formatRangeTime($hours[0], $hours[1]));
49
        }
50
51
        if (!empty($hours[2]) && !empty($hours[3])) {
52
            array_push($validOpenings, OpeningHoursParser::formatRangeTime($hours[2], $hours[3]));
53
        }
54
55
        return $validOpenings;
56
    }
57
58
59
    /**
60
     * @param string $startTime Date time e.g. 1030
61
     * @param string $endTime   Date time e.g. 1400
62
     * @return string           Formatted range time e.g. 10:30-14:00
63
     */
64
    private static function formatRangeTime(string $startTime, string $endTime)
65
    {
66
        return implode('-', [OpeningHoursParser::formatTime($startTime), OpeningHoursParser::formatTime($endTime)]);
67
    }
68
69
70
    /**
71
     * @param string $hours  Date time e.g. 1030
72
     * @return string        Formatted date time e.g. 10:30
73
     */
74
    private static function formatTime($hours)
75
    {
76
        return implode(':', str_split($hours, 2));
77
    }
78
}
79