1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
iblockproptools.php
См. документацию.
1<?php
2
6
7Loc::loadMessages(__FILE__);
8
10{
11 public const CODE_MORE_PHOTO = 'MORE_PHOTO';
12 public const CODE_SKU_LINK = 'CML2_LINK';
13 public const CODE_BLOG_POST = 'BLOG_POST_ID';
14 public const CODE_BLOG_COMMENTS_COUNT = 'BLOG_COMMENTS_CNT';
15 public const CODE_FORUM_TOPIC = 'FORUM_TOPIC_ID';
16 public const CODE_FORUM_MESSAGES_COUNT = 'FORUM_MESSAGE_CNT';
17 public const CODE_VOTE_COUNT = 'VOTE_COUNT';
18 public const CODE_VOTE_COUNT_OLD = 'vote_count';
19 public const CODE_VOTE_SUMM = 'VOTE_SUM';
20 public const CODE_VOTE_SUMM_OLD = 'vote_sum';
21 public const CODE_VOTE_RATING = 'RATING';
22 public const CODE_VOTE_RATING_OLD = 'rating';
23 public const CODE_ARTNUMBER = 'ARTNUMBER';
24 public const CODE_BACKGROUND_IMAGE = 'BACKGROUND_IMAGE';
25 public const CODE_BRAND_FOR_FACEBOOK = 'BRAND_FOR_FACEBOOK';
26
27 public const XML_MORE_PHOTO = 'CML2_PICTURES';
28 public const XML_SKU_LINK = 'CML2_LINK';
29 public const XML_BLOG_POST = 'BLOG_POST_ID';
30 public const XML_BLOG_COMMENTS_COUNT = 'BLOG_COMMENTS_CNT';
31 public const XML_ARTNUMBER = 'CML2_ARTICLE';
32 public const XML_BACKGROUND_IMAGE = 'BACKGROUND_IMAGE';
33 public const XML_BRAND_FOR_FACEBOOK = 'BRAND_FOR_FACEBOOK';
34
37
38 protected static $errors = [];
39
45 public static function getErrors(): array
46 {
47 return self::$errors;
48 }
49
55 public static function clearErrors()
56 {
57 self::$errors = [];
58 }
59
68 public static function createProperty(int $iblockId, string $propertyCode, array $propertyParams = [])
69 {
70 static::clearErrors();
71
72 if ($iblockId <= 0 || $propertyCode === '')
73 {
74 return false;
75 }
76
78 'select' => ['ID'],
79 'filter' => ['=ID' => $iblockId],
80 ])->fetch();
81 if (empty($iblock))
82 {
83 return false;
84 }
85
86 $propertyParams['IBLOCK_ID'] = $iblockId;
87 $propertyDescription = static::getPropertyDescription($propertyCode, $propertyParams);
88 if ($propertyDescription === false)
89 {
90 return false;
91 }
92
93 $propertyDescription['IBLOCK_ID'] = $iblockId;
94 if (!static::validatePropertyDescription($propertyDescription))
95 {
96 return false;
97 }
98
99 $propertyId = 0;
101 'select' => ['ID'],
102 'filter' => [
103 '=IBLOCK_ID' => $iblockId,
104 '=CODE' => $propertyCode,
105 '=ACTIVE' => 'Y'
106 ],
107 ];
108 static::modifyGetListParams($getListParams, $propertyCode, $propertyDescription);
109 $property = Iblock\PropertyTable::getList($getListParams)->fetch();
110 if (!empty($property))
111 {
112 if (static::validateExistProperty($propertyCode, $property))
113 {
114 $propertyId = (int)$property['ID'];
115 }
116 }
117 unset($property);
118 if (!empty(self::$errors))
119 {
120 return false;
121 }
122 if ($propertyId > 0)
123 {
124 return $propertyId;
125 }
126
127 $propertyObject = new \CIBlockProperty();
128 $propertyId = (int)$propertyObject->Add($propertyDescription);
129 if ($propertyId > 0)
130 {
131 return $propertyId;
132 }
133 else
134 {
135 self::$errors[] = $propertyObject->LAST_ERROR;
136
137 return false;
138 }
139 }
140
148 public static function getPropertyDescription(
149 string $code,
150 array $fields = []
151 ): ?array
152 {
153 switch($code)
154 {
155 case self::CODE_MORE_PHOTO:
156 $name = Loc::getMessage('IBPT_PROP_TITLE_MORE_PHOTO');
157 if (isset($fields['IBLOCK_ID']))
158 {
159 if (Loader::includeModule('catalog'))
160 {
161 $catalog = CCatalogSku::GetInfoByIBlock($fields['IBLOCK_ID']);
162 if (!empty($catalog))
163 {
164 $name =
165 $catalog['CATALOG_TYPE'] === CCatalogSku::TYPE_OFFERS
166 ? Loc::getMessage('IBPT_PROP_TITLE_PRODUCT_VARIATION_MORE_PHOTO')
167 : Loc::getMessage('IBPT_PROP_TITLE_PRODUCT_MORE_PHOTO')
168 ;
169 }
170 }
171 }
172 $property = [
173 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_FILE,
174 'NAME' => $name,
175 'CODE' => self::CODE_MORE_PHOTO,
176 'XML_ID' => self::XML_MORE_PHOTO,
177 'MULTIPLE' => 'Y',
178 'MULTIPLE_CNT' => 1,
179 'FILE_TYPE' => 'jpg, gif, bmp, png, jpeg, webp',
180 'WITH_DESCRIPTION' => 'Y',
181 ];
182 break;
183 case self::CODE_SKU_LINK:
184 $property = [
185 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_ELEMENT,
186 'USER_TYPE' => CIBlockPropertySKU::USER_TYPE,
187 'NAME' => Loc::getMessage('IBPT_PROP_TITLE_SKU_LINK'),
188 'CODE' => self::CODE_SKU_LINK,
189 'XML_ID' => self::XML_SKU_LINK,
190 'FILTRABLE' => 'Y',
191 ];
192 break;
193 case self::CODE_BLOG_POST:
194 $property = [
195 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_NUMBER,
196 'NAME' => Loc::getMessage('IBPT_PROP_TITLE_BLOG_POST'),
197 'CODE' => self::CODE_BLOG_POST,
198 'XML_ID' => self::XML_BLOG_POST,
199 ];
200 break;
201 case self::CODE_BLOG_COMMENTS_COUNT:
202 $property = [
203 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_NUMBER,
204 'NAME' => Loc::getMessage('IBPT_PROP_TITLE_BLOG_COMMENTS_COUNT'),
205 'CODE' => self::CODE_BLOG_COMMENTS_COUNT,
206 'XML_ID' => self::XML_BLOG_COMMENTS_COUNT,
207 ];
208 break;
209 case self::CODE_ARTNUMBER:
210 $property = [
211 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_STRING,
212 'NAME' => Loc::getMessage('IBPT_PROP_TITLE_ARTNUMBER'),
213 'CODE' => self::CODE_ARTNUMBER,
214 'XML_ID' => self::XML_ARTNUMBER,
215 ];
216 break;
217 case self::CODE_BACKGROUND_IMAGE:
218 $property = [
219 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_STRING,
220 'NAME' => Loc::getMessage('IBPT_PROP_TITLE_BACKGROUND_IMAGE'),
221 'CODE' => self::CODE_BACKGROUND_IMAGE,
222 'XML_ID' => self::XML_BACKGROUND_IMAGE,
223 ];
224 break;
225 case self::CODE_BRAND_FOR_FACEBOOK:
226 $property = [
227 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_STRING,
228 'NAME' => Loc::getMessage('IBPT_PROP_TITLE_BRAND_FOR_FACEBOOK'),
229 'CODE' => self::CODE_BRAND_FOR_FACEBOOK,
230 'XML_ID' => self::XML_BRAND_FOR_FACEBOOK,
231 'MULTIPLE' => 'Y',
232 'USER_TYPE' => 'directory',
233 'USER_TYPE_SETTINGS' => [
234 'TABLE_NAME' => 'b_catalog_facebook_brand_reference',
235 ],
236 ];
237 break;
238 default:
239 $property = null;
240 break;
241 }
242 if ($property !== null)
243 {
244 $property += [
245 'ACTIVE' => 'Y',
246 'SORT' => 500,
247 'MULTIPLE' => 'N',
248 'IS_REQIRED' => 'N',
249 'USER_TYPE' => null,
250 ];
251 if (!empty($fields))
252 {
253 $property = $fields + $property;
254 }
255 }
256
257 return $property;
258 }
259
266 public static function validatePropertyDescription(array $propertyDescription): bool
267 {
268 if (empty($propertyDescription) || !isset($propertyDescription['CODE']))
269 {
270 return false;
271 }
272 $checkResult = true;
273
274 switch ($propertyDescription['CODE'])
275 {
276 case self::CODE_SKU_LINK:
277 if (
278 !isset($propertyDescription['LINK_IBLOCK_ID'])
279 || $propertyDescription['LINK_IBLOCK_ID'] <= 0
280 || $propertyDescription['LINK_IBLOCK_ID'] == $propertyDescription['IBLOCK_ID']
281 )
282 {
283 $checkResult = false;
284 }
285 if ($checkResult)
286 {
287 $iblockIterator = Iblock\IblockTable::getList([
288 'select' => ['ID'],
289 'filter' => ['=ID' => $propertyDescription['LINK_IBLOCK_ID']]
290 ]);
291 if (!($iblock = $iblockIterator->fetch()))
292 {
293 $checkResult = false;
294 }
295 }
296 break;
297 case self::CODE_MORE_PHOTO:
298 case self::CODE_BLOG_POST:
299 case self::CODE_BLOG_COMMENTS_COUNT:
300 case self::CODE_BRAND_FOR_FACEBOOK:
301 $checkResult = true;
302 break;
303 default:
304 $checkResult = false;
305 break;
306 }
307 return $checkResult;
308 }
309
317 public static function getClearedPropertiesID(int $iblockId, array $propertyCodes = []): array
318 {
319 if ($iblockId <= 0)
320 {
321 return [];
322 }
323 if (empty($propertyCodes) || !is_array($propertyCodes))
324 {
325 $propertyCodes = [
326 self::CODE_BLOG_POST,
327 self::CODE_BLOG_COMMENTS_COUNT,
328 self::CODE_FORUM_TOPIC,
329 self::CODE_FORUM_MESSAGES_COUNT,
330 self::CODE_VOTE_COUNT,
331 self::CODE_VOTE_COUNT_OLD,
332 self::CODE_VOTE_SUMM,
333 self::CODE_VOTE_SUMM_OLD,
334 self::CODE_VOTE_RATING,
335 self::CODE_VOTE_RATING_OLD,
336 ];
337 }
338 $result = [];
339 $propertyIterator = Iblock\PropertyTable::getList([
340 'select' => ['ID'],
341 'filter' => [
342 '=IBLOCK_ID' => $iblockId,
343 '@CODE' => $propertyCodes
344 ]
345 ]);
346 while ($property = $propertyIterator->fetch())
347 {
348 $result[] = (int)$property['ID'];
349 }
350
351 return $result;
352 }
353
362 public static function getExistProperty(int $iblockId, $propertyCodes, bool $indexCode = true)
363 {
364 if ($iblockId <= 0)
365 {
366 return false;
367 }
368 $propertyCodes = static::clearPropertyList($propertyCodes);
369 if (empty($propertyCodes))
370 {
371 return false;
372 }
373
374 $result = [];
375 $propertyIterator = Iblock\PropertyTable::getList([
376 'select' => [
377 'ID',
378 'CODE'
379 ],
380 'filter' => [
381 '=IBLOCK_ID' => $iblockId,
382 '@CODE' => $propertyCodes
383 ]
384 ]);
385 if ($indexCode)
386 {
387 while ($property = $propertyIterator->fetch())
388 {
389 $property['ID'] = (int)$property['ID'];
390 if (!isset($result[$property['CODE']]))
391 {
392 $result[$property['CODE']] = $property['ID'];
393 }
394 else
395 {
396 if (!is_array($result[$property['CODE']]))
397 {
398 $result[$property['CODE']] = [
399 $result[$property['CODE']]
400 ];
401 }
402 $result[$property['CODE']][] = $property['ID'];
403 }
404 }
405 unset($property, $propertyIterator);
406 }
407 else
408 {
409 while ($property = $propertyIterator->fetch())
410 {
411 $property['ID'] = (int)$property['ID'];
412 $result[$property['ID']] = $property['CODE'];
413 }
414 unset($property, $propertyIterator);
415 }
416 return $result;
417 }
418
425 public static function getPropertyCodes(bool $extendedMode = false): array
426 {
427 $result = [
428 self::CODE_MORE_PHOTO,
429 self::CODE_SKU_LINK,
430 self::CODE_BLOG_POST,
431 self::CODE_BLOG_COMMENTS_COUNT,
432 self::CODE_FORUM_TOPIC,
433 self::CODE_FORUM_MESSAGES_COUNT,
434 self::CODE_VOTE_COUNT,
435 self::CODE_VOTE_COUNT_OLD,
436 self::CODE_VOTE_SUMM,
437 self::CODE_VOTE_SUMM_OLD,
438 self::CODE_VOTE_RATING,
439 self::CODE_VOTE_RATING_OLD
440 ];
441 return (
442 $extendedMode
443 ? array_fill_keys($result, true)
444 : $result
445 );
446 }
447
454 public static function clearPropertyList($propertyCodes)
455 {
456 $result = [];
457 if (!is_array($propertyCodes))
458 {
459 $propertyCodes = [(string)$propertyCodes];
460 }
461 if (empty($propertyCodes))
462 {
463 return $result;
464 }
465
466 $currentList = static::getPropertyCodes(true);
467 foreach ($propertyCodes as $code)
468 {
469 $code = (string)$code;
470 if (isset($currentList[$code]))
471 {
472 $result[] = $code;
473 }
474 }
475 unset($code);
476
477 return $result;
478 }
479
488 protected static function modifyGetListParams(
490 string $propertyCode,
491 array$propertyDescription
492 ): void
493 {
494 switch ($propertyCode)
495 {
496 case self::CODE_SKU_LINK:
497 $getListParams['select'][] = 'XML_ID';
498 $getListParams['select'][] = 'USER_TYPE';
499
500 $getListParams['filter']['=LINK_IBLOCK_ID'] = $propertyDescription['LINK_IBLOCK_ID'];
501 $getListParams['filter']['=PROPERTY_TYPE'] = Iblock\PropertyTable::TYPE_ELEMENT;
502 $getListParams['filter']['=ACTIVE'] = 'Y';
503 $getListParams['filter']['=MULTIPLE'] = 'N';
504 break;
505 }
506 }
507
515 protected static function validateExistProperty(string $propertyCode, array $property): bool
516 {
517 $result = true;
518 switch ($propertyCode)
519 {
520 case self::CODE_SKU_LINK:
521 $fields = [];
522 if ($property['USER_TYPE'] != CIBlockPropertySKU::USER_TYPE)
523 {
525 }
526 if ($property['XML_ID'] != self::XML_SKU_LINK)
527 {
528 $fields['XML_ID'] = self::XML_SKU_LINK;
529 }
530 if (!empty($fields))
531 {
532 $propertyResult = Iblock\PropertyTable::update($property['ID'], $fields);
533 if (!$propertyResult->isSuccess())
534 {
535 self::$errors = $propertyResult->getErrorMessages();
536 $result = false;
537 }
538 unset($propertyResult);
539 }
540 unset($fields);
541 break;
542 }
543
544 return $result;
545 }
546}
const TYPE_ELEMENT
Определения propertytable.php:68
const TYPE_FILE
Определения propertytable.php:67
const TYPE_STRING
Определения propertytable.php:65
const TYPE_NUMBER
Определения propertytable.php:66
Определения loader.php:13
static includeModule($moduleName)
Определения loader.php:67
static getList(array $parameters=array())
Определения datamanager.php:431
static update($primary, array $data)
Определения datamanager.php:1256
const USER_TYPE
Определения prop_element_sku.php:9
const XML_BRAND_FOR_FACEBOOK
Определения iblockproptools.php:33
static getPropertyDescription(string $code, array $fields=[])
Определения iblockproptools.php:148
static clearPropertyList($propertyCodes)
Определения iblockproptools.php:454
const CODE_ARTNUMBER
Определения iblockproptools.php:23
const XML_MORE_PHOTO
Определения iblockproptools.php:27
const CODE_BACKGROUND_IMAGE
Определения iblockproptools.php:24
const USER_TYPE_SKU_LINK
Определения iblockproptools.php:36
const CODE_BRAND_FOR_FACEBOOK
Определения iblockproptools.php:25
const CODE_BLOG_POST
Определения iblockproptools.php:13
static getErrors()
Определения iblockproptools.php:45
const CODE_VOTE_SUMM_OLD
Определения iblockproptools.php:20
const XML_SKU_LINK
Определения iblockproptools.php:28
const CODE_FORUM_MESSAGES_COUNT
Определения iblockproptools.php:16
const XML_BLOG_COMMENTS_COUNT
Определения iblockproptools.php:30
const CODE_BLOG_COMMENTS_COUNT
Определения iblockproptools.php:14
static modifyGetListParams(array &$getListParams, string $propertyCode, array$propertyDescription)
Определения iblockproptools.php:488
static validatePropertyDescription(array $propertyDescription)
Определения iblockproptools.php:266
const CODE_VOTE_COUNT
Определения iblockproptools.php:17
static getPropertyCodes(bool $extendedMode=false)
Определения iblockproptools.php:425
static getClearedPropertiesID(int $iblockId, array $propertyCodes=[])
Определения iblockproptools.php:317
const CODE_VOTE_SUMM
Определения iblockproptools.php:19
const CODE_MORE_PHOTO
Определения iblockproptools.php:11
const XML_BLOG_POST
Определения iblockproptools.php:29
const CODE_VOTE_RATING_OLD
Определения iblockproptools.php:22
static createProperty(int $iblockId, string $propertyCode, array $propertyParams=[])
Определения iblockproptools.php:68
const XML_ARTNUMBER
Определения iblockproptools.php:31
static getExistProperty(int $iblockId, $propertyCodes, bool $indexCode=true)
Определения iblockproptools.php:362
static $errors
Определения iblockproptools.php:38
const XML_BACKGROUND_IMAGE
Определения iblockproptools.php:32
const CODE_SKU_LINK
Определения iblockproptools.php:12
const CODE_VOTE_RATING
Определения iblockproptools.php:21
const CODE_VOTE_COUNT_OLD
Определения iblockproptools.php:18
const CODE_FORUM_TOPIC
Определения iblockproptools.php:15
static validateExistProperty(string $propertyCode, array $property)
Определения iblockproptools.php:515
static clearErrors()
Определения iblockproptools.php:55
</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
$iblockId
Определения iblock_catalog_edit.php:30
$catalog
Определения iblock_catalog_edit.php:135
if(! $catalogEdit->isSuccess()) $iblock
Определения iblock_catalog_edit.php:38
$getListParams
Определения iblock_catalog_list.php:210
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$name
Определения menu_edit.php:35
$fields
Определения yandex_run.php:501