Code Duplication    Length = 88-88 lines in 2 locations

src/Eccube/Doctrine/DBAL/Types/UTCDateTimeType.php 1 location

@@ 30-117 (lines=88) @@
27
use Doctrine\DBAL\Types\ConversionException;
28
use Doctrine\DBAL\Types\DateTimeType;
29
30
class UTCDateTimeType extends DateTimeType
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()
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

src/Eccube/Doctrine/DBAL/Types/UTCDateTimeTzType.php 1 location

@@ 31-118 (lines=88) @@
28
use Doctrine\DBAL\Types\DateTimeType;
29
use Doctrine\DBAL\Types\DateTimeTzType;
30
31
class UTCDateTimeTzType extends DateTimeTzType
32
{
33
    /**
34
     * UTCのタイムゾーン
35
     *
36
     * @var \DateTimeZone
37
     */
38
    static protected $utc;
39
40
    /**
41
     * アプリケーションのタイムゾーン
42
     *
43
     * @var \DateTimeZone
44
     */
45
    static protected $timezone;
46
47
    /**
48
     * {@inheritdoc}
49
     */
50
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
51
    {
52
        if ($value instanceof \DateTime) {
53
            $value->setTimezone(self::getUtcTimeZone());
54
        }
55
56
        return parent::convertToDatabaseValue($value, $platform);
57
    }
58
59
    /**
60
     * {@inheritdoc}
61
     */
62
    public function convertToPHPValue($value, AbstractPlatform $platform)
63
    {
64
        if ($value === null || $value instanceof \DateTime) {
65
            return $value;
66
        }
67
68
        $converted = \DateTime::createFromFormat(
69
            $platform->getDateTimeTzFormatString(),
70
            $value,
71
            self::getUtcTimeZone()
72
        );
73
74
        if (!$converted) {
75
            throw ConversionException::conversionFailedFormat(
76
                $value,
77
                $this->getName(),
78
                $platform->getDateTimeTzFormatString()
79
            );
80
        }
81
82
        $converted->setTimezone(self::getTimezone());
83
84
        return $converted;
85
    }
86
87
    /**
88
     * @return \DateTimeZone
89
     */
90
    protected static function getUtcTimeZone()
91
    {
92
        if (is_null(self::$utc)) {
93
            self::$utc = new \DateTimeZone('UTC');
94
        }
95
96
        return self::$utc;
97
    }
98
99
    /**
100
     * @return \DateTimeZone
101
     */
102
    public static function getTimezone()
103
    {
104
        if (is_null(self::$timezone)) {
105
            throw new \LogicException(sprintf('%s::$timezone is undefined.', self::class));
106
        }
107
108
        return self::$timezone;
109
    }
110
111
    /**
112
     * @param string $timezone
113
     */
114
    public static function setTimeZone($timezone = 'Asia/Tokyo')
115
    {
116
        self::$timezone = new \DateTimeZone($timezone);
117
    }
118
}
119