1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
multiplefieldserializer.php
См. документацию.
1<?php
2
3namespace Bitrix\Main\UserField\Internal;
4
5
6use Bitrix\Main\ObjectException;
7use Bitrix\Main\ORM\Fields\ArrayField;
8use Bitrix\Main\Type\Date;
9use Bitrix\Main\Type\DateTime;
10
12{
13 public static function setMultipleFieldSerialization(ArrayField $entityField, $fieldAsType, array $userField)
14 {
15 if ($fieldAsType instanceof \Bitrix\Main\ORM\Fields\DatetimeField)
16 {
17 $useTimezone = ($userField['SETTINGS']['USE_TIMEZONE'] ?? 'Y') === 'Y';
18 $entityField->configureSerializeCallback([static::class, 'serializeMultipleDatetime']);
19 if ($useTimezone)
20 {
21 $entityField->configureUnserializeCallback([static::class, 'unserializeMultipleDatetimeWithTimezone']);
22 }
23 else
24 {
25 $entityField->configureUnserializeCallback([static::class, 'unserializeMultipleDatetime']);
26 }
27
28 }
29 elseif ($fieldAsType instanceof \Bitrix\Main\ORM\Fields\DateField)
30 {
31 $entityField->configureSerializeCallback([static::class, 'serializeMultipleDate']);
32 $entityField->configureUnserializeCallback([static::class, 'unserializeMultipleDate']);
33 } else
34 {
35 $entityField->configureSerializationPhp();
36 }
37 }
38
39 public static function serializeMultipleDatetime($value)
40 {
41 if (is_array($value) || $value instanceof \Traversable)
42 {
43 $tmpValue = [];
44
45 foreach ($value as $k => $singleValue)
46 {
47 $dateTime = ($singleValue instanceof DateTime)
48 ? $singleValue
49 : DateTime::createFromUserTime($singleValue)
50 ;
51
52 $tmpValue[$k] = $dateTime->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT);
53 }
54
55 return serialize($tmpValue);
56 }
57
58 return $value;
59 }
60
67 public static function unserializeMultipleDatetime($value)
68 {
69 if ($value != '')
70 {
72 foreach ($items as $datetime)
73 {
75 $datetime->disableUserTime();
76 }
77
78 return $items;
79 }
80
81 return $value;
82 }
83
90 public static function unserializeMultipleDatetimeWithTimezone($value)
91 {
92 if ($value != '')
93 {
94 $value = unserialize(
95 $value,
96 ['allowed_classes' => [
97 Date::class,
98 DateTime::class,
99 \DateTime::class,
100 ]]
101 );
102
103 foreach ($value as &$singleValue)
104 {
105 if ($singleValue instanceof DateTime)
106 {
107 $singleValue = $singleValue->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT);
108 }
109 try
110 {
111 //try new independent datetime format
112 $singleValue = new DateTime($singleValue, \Bitrix\Main\UserFieldTable::MULTIPLE_DATETIME_FORMAT);
113 } catch (ObjectException $e)
114 {
115 //try site format
116 $singleValue = new DateTime($singleValue);
117 }
118 }
119 }
120
121 return $value;
122 }
123
129 public static function serializeMultipleDate($value)
130 {
131 if (is_array($value) || $value instanceof \Traversable)
132 {
133 $tmpValue = [];
134
135 foreach ($value as $k => $singleValue)
136 {
137 $date = ($singleValue instanceof Date)
138 ? $singleValue
139 : DateTime::createFromUserTime($singleValue)
140 ;
141
142 $tmpValue[$k] = $date->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATE_FORMAT);
143 }
144
145 return serialize($tmpValue);
146 }
147
148 return $value;
149 }
150
157 public static function unserializeMultipleDate($value)
158 {
159 if ($value != '')
160 {
161 $value = unserialize(
162 $value,
163 ['allowed_classes' => [
164 Date::class,
165 DateTime::class,
166 \DateTime::class,
167 ]]
168 );
169
170 foreach ($value as &$singleValue)
171 {
172 if ($singleValue instanceof Date)
173 {
174 $singleValue = $singleValue->format(\Bitrix\Main\UserFieldTable::MULTIPLE_DATE_FORMAT);
175 }
176 try
177 {
178 //try new independent datetime format
179 $singleValue = new Date($singleValue, \Bitrix\Main\UserFieldTable::MULTIPLE_DATE_FORMAT);
180 } catch (ObjectException $e)
181 {
182 //try site format
183 $singleValue = new Date($singleValue);
184 }
185 }
186 }
187
188 return $value;
189 }
190}
configureUnserializeCallback($callback)
Определения arrayfield.php:93
configureSerializeCallback($callback)
Определения arrayfield.php:78
Определения date.php:9
static setMultipleFieldSerialization(ArrayField $entityField, $fieldAsType, array $userField)
Определения multiplefieldserializer.php:13
const MULTIPLE_DATE_FORMAT
Определения userfield.php:35
const MULTIPLE_DATETIME_FORMAT
Определения userfield.php:36
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$items
Определения template.php:224
$k
Определения template_pdf.php:567