Completed
Pull Request — experimental/3.1 (#2308)
by chihiro
39:48
created

UTCDateTimeType::setTimeZone()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
/*
3
 * This file is part of EC-CUBE
4
 *
5
 * Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved.
6
 *
7
 * http://www.lockon.co.jp/
8
 *
9
 * This program is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU General Public License
11
 * as published by the Free Software Foundation; either version 2
12
 * of the License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
 */
23
24
namespace Eccube\Doctrine\DBAL\Types;
25
26
use Doctrine\DBAL\Platforms\AbstractPlatform;
27
use Doctrine\DBAL\Types\ConversionException;
28
use Doctrine\DBAL\Types\DateTimeType;
29
30
class UTCDateTimeType extends DateTimeType
0 ignored issues
show
introduced by
Missing class doc comment
Loading history...
31
{
32
    /**
33
     * UTCのタイムゾーン
34
     *
35
     * @var \DateTimeZone
36
     */
37
    static protected $utc;
38
39
    /**
40
     * アプリケーションのタイムゾーン
41
     *
42
     * @var \DateTimeZone
43
     */
44
    static protected $timezone;
45
46
    /**
47
     * {@inheritdoc}
48
     */
49
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
50
    {
51
        if ($value instanceof \DateTime) {
52
            $value->setTimezone(self::getUtcTimeZone());
53
        }
54
55
        return parent::convertToDatabaseValue($value, $platform);
56
    }
57
58
    /**
59
     * {@inheritdoc}
60
     */
61
    public function convertToPHPValue($value, AbstractPlatform $platform)
62
    {
63
        if ($value === null || $value instanceof \DateTime) {
64
            return $value;
65
        }
66
67
        $converted = \DateTime::createFromFormat(
68
            $platform->getDateTimeFormatString(),
69
            $value,
70
            self::getUtcTimeZone()
71
        );
72
73
        if (!$converted) {
74
            throw ConversionException::conversionFailedFormat(
75
                $value,
76
                $this->getName(),
77
                $platform->getDateTimeFormatString()
78
            );
79
        }
80
81
        $converted->setTimezone(self::getTimezone());
82
83
        return $converted;
84
    }
85
86
    /**
87
     * @return \DateTimeZone
88
     */
89
    protected static function getUtcTimeZone()
90
    {
91
        if (is_null(self::$utc)) {
92
            self::$utc = new \DateTimeZone('UTC');
93
        }
94
95
        return self::$utc;
96
    }
97
98
    /**
99
     * @return \DateTimeZone
100
     */
101
    public static function getTimezone()
0 ignored issues
show
introduced by
Declare public methods first, then protected ones and finally private ones
Loading history...
102
    {
103
        if (is_null(self::$timezone)) {
104
            throw new \LogicException(sprintf('%s::$timezone is undefined.', self::class));
105
        }
106
107
        return self::$timezone;
108
    }
109
110
    /**
111
     * @param string $timezone
112
     */
113
    public static function setTimeZone($timezone = 'Asia/Tokyo')
114
    {
115
        self::$timezone = new \DateTimeZone($timezone);
116
    }
117
}
118