1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
propertytable.php
См. документацию.
1<?php
2
3namespace Bitrix\Iblock;
4
5use Bitrix\Main\ORM;
6use Bitrix\Main\Type\DateTime;
7use Bitrix\Main\Localization\Loc;
8
59
61{
62 public const CHECKBOX = 'C';
63 public const LISTBOX = 'L';
64
65 public const TYPE_STRING = 'S';
66 public const TYPE_NUMBER = 'N';
67 public const TYPE_FILE = 'F';
68 public const TYPE_ELEMENT = 'E';
69 public const TYPE_SECTION = 'G';
70 public const TYPE_LIST = 'L';
71
72 public const DEFAULT_MULTIPLE_CNT = 5;
73
74 // iblock module
75 public const USER_TYPE_DATE = 'Date';
76 public const USER_TYPE_DATETIME = 'DateTime';
77 public const USER_TYPE_XML_ID = 'ElementXmlID';
78 public const USER_TYPE_FILE_MAN = 'FileMan';
79 public const USER_TYPE_HTML = 'HTML';
80 public const USER_TYPE_ELEMENT_LIST = 'EList';
81 public const USER_TYPE_SEQUENCE = 'Sequence';
82 public const USER_TYPE_ELEMENT_AUTOCOMPLETE = 'EAutocomplete';
83 public const USER_TYPE_SKU = 'SKU';
84 public const USER_TYPE_SECTION_AUTOCOMPLETE = 'SectionAuto';
85
86 // other modules
87 public const USER_TYPE_CRM = 'ECrm'; // \Bitrix\Crm\Integration\IBlockElementProperty::USER_TYPE
88 public const USER_TYPE_MONEY = 'Money'; // \Bitrix\Currency\Integration\IblockMoneyProperty::USER_TYPE
89 public const USER_TYPE_DISK = 'DiskFile'; // \Bitrix\Disk\Integration\FileDiskProperty
90 public const USER_TYPE_GOOGLE_MAP = 'map_google'; // \CIBlockPropertyMapGoogle
91 public const USER_TYPE_YANDEX_MAP = 'map_yandex'; // \CIBlockPropertyMapYandex
92 public const USER_TYPE_FORUM_TOPIC = 'TopicID'; // \CIBlockPropertyTopicID
93 public const USER_TYPE_DIRECTORY = 'directory'; // \CIBlockPropertyDirectory::USER_TYPE
94 public const USER_TYPE_EMPLOYEE = 'employee'; // \CIBlockPropertyEmployee
95 public const USER_TYPE_USER = 'UserID'; // \CIBlockPropertyUserID::USER_TYPE
96
102 public static function getTableName(): string
103 {
104 return 'b_iblock_property';
105 }
106
107 public static function getObjectClass(): string
108 {
109 return Property::class;
110 }
111
117 public static function getMap(): array
118 {
119 return [
120 'ID' => (new ORM\Fields\IntegerField('ID'))
121 ->configurePrimary(true)
122 ->configureAutocomplete(true)
123 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_ID_FIELD'))
124 ,
125 'TIMESTAMP_X' => (new ORM\Fields\DatetimeField('TIMESTAMP_X'))
126 ->configureDefaultValue(function()
127 {
128 return new DateTime();
129 }
130 )
131 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_TIMESTAMP_X_FIELD'))
132 ,
133 'IBLOCK_ID' => (new ORM\Fields\IntegerField('IBLOCK_ID'))
134 ->configureRequired(true)
135 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_IBLOCK_ID_FIELD'))
136 ,
137 'NAME' => (new ORM\Fields\StringField('NAME'))
138 ->configureRequired(true)
139 ->configureSize(255)
140 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 255))
141 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_NAME_FIELD'))
142 ,
143 'ACTIVE' => (new ORM\Fields\BooleanField('ACTIVE'))
144 ->configureValues('N', 'Y')
145 ->configureDefaultValue('Y')
146 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_ACTIVE_FIELD'))
147 ,
148 'SORT' => (new ORM\Fields\IntegerField('SORT'))
149 ->configureDefaultValue(100)
150 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_SORT_FIELD'))
151 ,
152 'CODE' => (new ORM\Fields\StringField('CODE'))
153 ->configureNullable(true)
154 ->configureSize(50)
155 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 50))
156 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_CODE_FIELD'))
157 ,
158 'DEFAULT_VALUE' => (new ORM\Fields\TextField('DEFAULT_VALUE'))
159 ->configureNullable(true)
160 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_DEFAULT_VALUE_FIELD'))
161 ,
162 'PROPERTY_TYPE' => (new ORM\Fields\EnumField('PROPERTY_TYPE'))
163 ->configureRequired(true)
164 ->configureValues([
165 self::TYPE_STRING,
166 self::TYPE_NUMBER,
167 self::TYPE_FILE,
168 self::TYPE_ELEMENT,
169 self::TYPE_SECTION,
170 self::TYPE_LIST,
171 ])
172 ->configureDefaultValue(self::TYPE_STRING)
173 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_PROPERTY_TYPE_FIELD'))
174 ,
175 'ROW_COUNT' => (new ORM\Fields\IntegerField('ROW_COUNT'))
176 ->configureDefaultValue(1)
177 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_ROW_COUNT_FIELD'))
178 ,
179 'COL_COUNT' => (new ORM\Fields\IntegerField('COL_COUNT'))
180 ->configureDefaultValue(30)
181 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_COL_COUNT_FIELD'))
182 ,
183 'LIST_TYPE' => (new ORM\Fields\EnumField('LIST_TYPE'))
184 ->configureValues([
185 self::LISTBOX,
186 self::CHECKBOX,
187 ])
188 ->configureDefaultValue(self::LISTBOX)
189 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_LIST_TYPE_FIELD'))
190 ,
191 'MULTIPLE' => (new ORM\Fields\BooleanField('MULTIPLE'))
192 ->configureValues('N', 'Y')
193 ->configureDefaultValue('N')
194 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_MULTIPLE_FIELD'))
195 ,
196 'XML_ID' => (new ORM\Fields\StringField('XML_ID'))
197 ->configureNullable(true)
198 ->configureSize(100)
199 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 100))
200 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_XML_ID_FIELD'))
201 ,
202 'FILE_TYPE' => (new ORM\Fields\StringField('FILE_TYPE'))
203 ->configureNullable(true)
204 ->configureSize(200)
205 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 200))
206 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_FILE_TYPE_FIELD'))
207 ,
208 'MULTIPLE_CNT' => (new ORM\Fields\IntegerField('MULTIPLE_CNT'))
209 ->configureNullable(true)
210 ->configureDefaultValue(self::DEFAULT_MULTIPLE_CNT)
211 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_MULTIPLE_CNT_FIELD'))
212 ,
213 'TMP_ID' => (new ORM\Fields\StringField('TMP_ID'))
214 ->configureNullable(true)
215 ->configureSize(40)
216 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 40))
217 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_TMP_ID_FIELD'))
218 ,
219 'LINK_IBLOCK_ID' => (new ORM\Fields\IntegerField('LINK_IBLOCK_ID'))
220 ->configureNullable(true)
221 ->configureDefaultValue(0)
222 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_LINK_IBLOCK_ID_FIELD'))
223 ,
224 'WITH_DESCRIPTION' => (new ORM\Fields\BooleanField('WITH_DESCRIPTION'))
225 ->configureValues('N', 'Y')
226 ->configureDefaultValue('N')
227 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_WITH_DESCRIPTION_FIELD'))
228 ,
229 'SEARCHABLE' => (new ORM\Fields\BooleanField('SEARCHABLE'))
230 ->configureValues('N', 'Y')
231 ->configureDefaultValue('N')
232 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_SEARCHABLE_FIELD'))
233 ,
234 'FILTRABLE' => (new ORM\Fields\BooleanField('FILTRABLE'))
235 ->configureValues('N', 'Y')
236 ->configureDefaultValue('N')
237 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_FILTRABLE_FIELD'))
238 ,
239 'IS_REQUIRED' => (new ORM\Fields\BooleanField('IS_REQUIRED'))
240 ->configureValues('N', 'Y')
241 ->configureDefaultValue('N')
242 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_IS_REQUIRED_FIELD'))
243 ,
244 'VERSION' => (new ORM\Fields\EnumField('VERSION'))
245 ->configureValues([1, 2])
246 ->configureDefaultValue(1)
247 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_VERSION_FIELD'))
248 ,
249 'USER_TYPE' => (new ORM\Fields\StringField('USER_TYPE'))
250 ->configureNullable(true)
251 ->configureSize(255)
252 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 255))
253 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_USER_TYPE_FIELD'))
254 ,
255 'USER_TYPE_SETTINGS_LIST' => (new ORM\Fields\ArrayField('USER_TYPE_SETTINGS_LIST'))
256 ->configureNullable(true)
257 ->configureSerializationPhp()
258 ->configureColumnName('USER_TYPE_SETTINGS')
259 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_USER_TYPE_SETTINGS_FIELD'))
260 ,
261 'USER_TYPE_SETTINGS' => (new ORM\Fields\TextField('USER_TYPE_SETTINGS'))
262 ->configureNullable(true)
263 ,
264 'HINT' => (new ORM\Fields\StringField('HINT'))
265 ->configureNullable(true)
266 ->configureSize(255)
267 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 255))
268 ->configureTitle(Loc::getMessage('IBLOCK_PROPERTY_ENTITY_HINT_FIELD'))
269 ,
270 'LINK_IBLOCK' => new ORM\Fields\Relations\Reference(
271 'LINK_IBLOCK',
272 IblockTable::class,
273 ORM\Query\Join::on('this.LINK_IBLOCK_ID', 'ref.ID')
274 ),
275 'IBLOCK' => new ORM\Fields\Relations\Reference(
276 'IBLOCK',
277 IblockTable::class,
278 ORM\Query\Join::on('this.IBLOCK_ID', 'ref.ID')
279 ),
280 ];
281 }
282
289 public static function onBeforeAdd(ORM\Event $event): ORM\EventResult
290 {
292 $fields = $event->getParameter('fields');
293
294 $modifyFieldList = [];
295 self::copyOldFields($modifyFieldList, $fields);
296 $result->unsetField('USER_TYPE_SETTINGS');
297 if (!isset($fields['TIMESTAMP_X']))
298 {
299 $modifyFieldList['TIMESTAMP_X'] = new DateTime();
300 }
301
302 if (!empty($modifyFieldList))
303 {
304 $result->modifyFields($modifyFieldList);
305 }
306 unset($modifyFieldList);
307 unset($fields);
308
309 return $result;
310 }
311
318 public static function onBeforeUpdate(ORM\Event $event): ORM\EventResult
319 {
321 $fields = $event->getParameter('fields');
322
323 $modifyFieldList = [];
324 self::copyOldFields($modifyFieldList, $fields);
325 $result->unsetField('USER_TYPE_SETTINGS');
326 if (!isset($fields['TIMESTAMP_X']))
327 {
328 $modifyFieldList['TIMESTAMP_X'] = new DateTime();
329 }
330
331 if (!empty($modifyFieldList))
332 {
333 $result->modifyFields($modifyFieldList);
334 }
335 unset($modifyFieldList);
336 unset($fields);
337
338 return $result;
339 }
340
348 private static function copyOldFields(array &$result, array $data): void
349 {
350 if (!isset($data['USER_TYPE_SETTINGS_LIST']) && isset($data['USER_TYPE_SETTINGS']))
351 {
352 $settings = $data['USER_TYPE_SETTINGS'];
353 if (
354 is_string($settings)
355 && $settings !== ''
356 )
357 {
358 $settings = unserialize($settings, ['allowed_classes' => false]);
359 }
360 if (is_array($settings))
361 {
362 $result['USER_TYPE_SETTINGS_LIST'] = $settings;
363 }
364 unset($settings);
365 }
366 }
367}
const USER_TYPE_DISK
Определения propertytable.php:89
const USER_TYPE_CRM
Определения propertytable.php:87
const USER_TYPE_HTML
Определения propertytable.php:79
static getMap()
Определения propertytable.php:117
static onBeforeAdd(ORM\Event $event)
Определения propertytable.php:289
const USER_TYPE_ELEMENT_AUTOCOMPLETE
Определения propertytable.php:82
const TYPE_ELEMENT
Определения propertytable.php:68
const TYPE_FILE
Определения propertytable.php:67
const USER_TYPE_SKU
Определения propertytable.php:83
const USER_TYPE_YANDEX_MAP
Определения propertytable.php:91
const TYPE_STRING
Определения propertytable.php:65
const USER_TYPE_XML_ID
Определения propertytable.php:77
const USER_TYPE_EMPLOYEE
Определения propertytable.php:94
const USER_TYPE_ELEMENT_LIST
Определения propertytable.php:80
const USER_TYPE_SEQUENCE
Определения propertytable.php:81
const USER_TYPE_FILE_MAN
Определения propertytable.php:78
const DEFAULT_MULTIPLE_CNT
Определения propertytable.php:72
const TYPE_LIST
Определения propertytable.php:70
const USER_TYPE_USER
Определения propertytable.php:95
const USER_TYPE_DATETIME
Определения propertytable.php:76
const USER_TYPE_GOOGLE_MAP
Определения propertytable.php:90
const TYPE_SECTION
Определения propertytable.php:69
const USER_TYPE_DIRECTORY
Определения propertytable.php:93
const TYPE_NUMBER
Определения propertytable.php:66
static onBeforeUpdate(ORM\Event $event)
Определения propertytable.php:318
const USER_TYPE_FORUM_TOPIC
Определения propertytable.php:92
static getObjectClass()
Определения propertytable.php:107
const USER_TYPE_SECTION_AUTOCOMPLETE
Определения propertytable.php:84
const USER_TYPE_DATE
Определения propertytable.php:75
static getTableName()
Определения propertytable.php:102
const USER_TYPE_MONEY
Определения propertytable.php:88
Определения event.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
Определения chain.php:3
$settings
Определения product_settings.php:43
$event
Определения prolog_after.php:141
$fields
Определения yandex_run.php:501