Frequency::convertToDateTimeFormat()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

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