blob: 544b5ced3863a34462e71a9f79f14e2a0b295164 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
<?php
namespace Sabre\VObject\Property;
use Sabre\VObject\DateTimeParser;
/**
* Time property.
*
* This object encodes TIME values.
*
* @copyright Copyright (C) fruux GmbH (https://fruux.com/)
* @author Evert Pot (http://evertpot.com/)
* @license http://sabre.io/license/ Modified BSD License
*/
class Time extends Text
{
/**
* In case this is a multi-value property. This string will be used as a
* delimiter.
*
* @var string|null
*/
public $delimiter = null;
/**
* Returns the type of value.
*
* This corresponds to the VALUE= parameter. Every property also has a
* 'default' valueType.
*
* @return string
*/
public function getValueType()
{
return 'TIME';
}
/**
* Sets the JSON value, as it would appear in a jCard or jCal object.
*
* The value must always be an array.
*/
public function setJsonValue(array $value)
{
// Removing colons from value.
$value = str_replace(
':',
'',
$value
);
if (1 === count($value)) {
$this->setValue(reset($value));
} else {
$this->setValue($value);
}
}
/**
* Returns the value, in the format it should be encoded for json.
*
* This method must always return an array.
*
* @return array
*/
public function getJsonValue()
{
$parts = DateTimeParser::parseVCardTime($this->getValue());
$timeStr = '';
// Hour
if (!is_null($parts['hour'])) {
$timeStr .= $parts['hour'];
if (!is_null($parts['minute'])) {
$timeStr .= ':';
}
} else {
// We know either minute or second _must_ be set, so we insert a
// dash for an empty value.
$timeStr .= '-';
}
// Minute
if (!is_null($parts['minute'])) {
$timeStr .= $parts['minute'];
if (!is_null($parts['second'])) {
$timeStr .= ':';
}
} else {
if (isset($parts['second'])) {
// Dash for empty minute
$timeStr .= '-';
}
}
// Second
if (!is_null($parts['second'])) {
$timeStr .= $parts['second'];
}
// Timezone
if (!is_null($parts['timezone'])) {
if ('Z' === $parts['timezone']) {
$timeStr .= 'Z';
} else {
$timeStr .=
preg_replace('/([0-9]{2})([0-9]{2})$/', '$1:$2', $parts['timezone']);
}
}
return [$timeStr];
}
/**
* Hydrate data from a XML subtree, as it would appear in a xCard or xCal
* object.
*/
public function setXmlValue(array $value)
{
$value = array_map(
function ($value) {
return str_replace(':', '', $value);
},
$value
);
parent::setXmlValue($value);
}
}
|