ResolveAndKeep::getDefaultDateTime()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 2
1
<?php
2
/**
3
 * GpsLab component.
4
 *
5
 * @author    Peter Gribanov <[email protected]>
6
 * @copyright Copyright (c) 2016, Peter Gribanov
7
 * @license   http://opensource.org/licenses/MIT
8
 */
9
10
namespace GpsLab\Bundle\DateBundle\TimeZone\Keeper;
11
12
use GpsLab\Bundle\DateBundle\Converter;
13
use GpsLab\Bundle\DateBundle\TimeZone\Resolver\CollectionResolver;
14
15
class ResolveAndKeep implements KeeperInterface
16
{
17
    /**
18
     * @var \DateTimeZone
19
     */
20
    protected $default_time_zone;
21
22
    /**
23
     * @var \DateTimeZone
24
     */
25
    protected $user_time_zone;
26
27
    /**
28
     * @var CollectionResolver
29
     */
30
    protected $collection;
31
32
    /**
33
     * @var Converter
34
     */
35
    protected $converter;
36
37
    /**
38
     * @param CollectionResolver $collection
39
     * @param Converter $converter
40
     * @param string|null $time_zone
41
     */
42
    public function __construct(CollectionResolver $collection, Converter $converter, $time_zone = null)
43
    {
44
        $this->collection = $collection;
45
        $this->converter = $converter;
46
        $this->default_time_zone = new \DateTimeZone($time_zone ?: date_default_timezone_get());
47
    }
48
49
    /**
50
     * @return \DateTimeZone
51
     */
52
    public function getDefaultTimeZone()
53
    {
54
        return clone $this->default_time_zone;
55
    }
56
57
    /**
58
     * @return \DateTimeZone
59
     */
60
    public function getUserTimeZone()
61
    {
62
        if (!($this->user_time_zone instanceof \DateTimeZone)) {
63
            // try resolve user TZ
64
            foreach ($this->collection->getResolvers() as $resolver) {
65
                $tz = $resolver->getUserTimeZone();
66
                if ($tz instanceof \DateTimeZone) {
67
                    $this->user_time_zone = $tz;
68
                    break;
69
                }
70
            }
71
72
            if (!($this->user_time_zone instanceof \DateTimeZone)) {
73
                $this->user_time_zone = clone $this->default_time_zone;
74
            }
75
        }
76
77
        return clone $this->user_time_zone;
78
    }
79
80
    /**
81
     * @param mixed $time
82
     *
83
     * @return \DateTime
84
     */
85
    public function getDefaultDateTime($time = 'now')
86
    {
87
        return $this->converter->getDateTime($time)->setTimezone($this->getDefaultTimeZone());
88
    }
89
90
    /**
91
     * @param mixed $time
92
     *
93
     * @return \DateTime
94
     */
95
    public function getUserDateTime($time = 'now')
96
    {
97
        return $this->converter->getDateTime($time)->setTimezone($this->getUserTimeZone());
98
    }
99
100
    /**
101
     * @param \DateTimeZone $tz
102
     *
103
     * @return self
104
     */
105
    public function setUserTimeZone(\DateTimeZone $tz)
106
    {
107
        $this->user_time_zone = $tz;
108
109
        return $this;
110
    }
111
}
112