Completed
Pull Request — master (#18)
by Samuel
03:55
created

Frequency::convertToDateIntervalFormat()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Recurrence\Model;
4
5
use Recurrence\Model\Exception\InvalidFrequencyOptionException;
6
7
/**
8
 * Class Frequency
9
 * @package Recurrence\Model
10
 */
11
class Frequency
12
{
13
    const FREQUENCY_YEARLY   = 'YEARLY';
14
    const FREQUENCY_MONTHLY  = 'MONTHLY';
15
    const FREQUENCY_WEEKLY   = 'WEEKLY';
16
    const FREQUENCY_DAILY    = 'DAILY';
17
    const FREQUENCY_HOURLY   = 'HOURLY';
18
    const FREQUENCY_MINUTELY = 'MINUTELY';
19
    const FREQUENCY_SECONDLY = 'SECONDLY';
20
21
    /**
22
     * @var array
23
     */
24
    private $frequencies = [
25
        self::FREQUENCY_YEARLY,
26
        self::FREQUENCY_MONTHLY,
27
        self::FREQUENCY_WEEKLY,
28
        self::FREQUENCY_DAILY,
29
        self::FREQUENCY_HOURLY,
30
        self::FREQUENCY_MINUTELY,
31
        self::FREQUENCY_SECONDLY,
32
    ];
33
34
    const DATEINTERVAL_YEARLY   = 'P1Y';
35
    const DATEINTERVAL_MONTHLY  = 'P1M';
36
    const DATEINTERVAL_WEEKLY   = 'P1W';
37
    const DATEINTERVAL_DAILY    = 'P1D';
38
    const DATEINTERVAL_HOURLY   = 'PT1H';
39
    const DATEINTERVAL_MINUTELY = 'PT1M';
40
    const DATEINTERVAL_SECONDLY = 'PT1S';
41
42
    /**
43
     * @var array
44
     */
45
    private $dateIntervalFrequencies = [
46
        self::FREQUENCY_YEARLY   => self::DATEINTERVAL_YEARLY,
47
        self::FREQUENCY_MONTHLY  => self::DATEINTERVAL_MONTHLY,
48
        self::FREQUENCY_WEEKLY   => self::DATEINTERVAL_WEEKLY,
49
        self::FREQUENCY_DAILY    => self::DATEINTERVAL_DAILY,
50
        self::FREQUENCY_HOURLY   => self::DATEINTERVAL_HOURLY,
51
        self::FREQUENCY_MINUTELY => self::DATEINTERVAL_MINUTELY,
52
        self::FREQUENCY_SECONDLY => self::DATEINTERVAL_SECONDLY,
53
    ];
54
55
    const DATETIME_YEARLY   = '+1 years';
56
    const DATETIME_MONTHLY  = '+1 months';
57
    const DATETIME_WEEKLY   = '+1 weeks';
58
    const DATETIME_DAILY    = '+1 days';
59
    const DATETIME_HOURLY   = '+1 hours';
60
    const DATETIME_MINUTELY = '+1 minutes';
61
    const DATETIME_SECONDLY = '+1 seconds';
62
63
    /**
64
     * @var array
65
     */
66
    private $dateTimeFrequencies = [
67
        self::FREQUENCY_YEARLY   => self::DATETIME_YEARLY,
68
        self::FREQUENCY_MONTHLY  => self::DATETIME_MONTHLY,
69
        self::FREQUENCY_WEEKLY   => self::DATETIME_WEEKLY,
70
        self::FREQUENCY_DAILY    => self::DATETIME_DAILY,
71
        self::FREQUENCY_HOURLY   => self::DATETIME_HOURLY,
72
        self::FREQUENCY_MINUTELY => self::DATETIME_MINUTELY,
73
        self::FREQUENCY_SECONDLY => self::DATETIME_SECONDLY,
74
    ];
75
76
    /**
77
     * @var string
78
     */
79
    private $frequencyName;
80
81
    /**
82
     * @param string $frequencyName
83
     */
84
    public function __construct($frequencyName)
85
    {
86
        if (!in_array($frequencyName, $this->frequencies)) {
87
            throw new InvalidFrequencyOptionException(sprintf('Invalid frequency name. Supported values are : %s', implode(', ', $this->frequencies)));
88
        }
89
90
        $this->frequencyName = $frequencyName;
91
    }
92
93
    /**
94
     * @return string
95
     */
96
    public function convertToDateIntervalFormat()
97
    {
98
        return $this->dateIntervalFrequencies[$this->frequencyName];
99
    }
100
101
    /**
102
     * @return string
103
     */
104
    public function convertToDateTimeFormat()
105
    {
106
        return $this->dateTimeFrequencies[$this->frequencyName];
107
    }
108
109
    /**
110
     * @return string
111
     */
112
    public function __toString()
113
    {
114
        return $this->frequencyName;
115
    }
116
}
117