File manager - Edit - /home/c14075/dragmet-ural.ru/www/bitrix/modules/iblock/lib/userfield/types/elementtype.php
Back
<?php namespace Bitrix\Iblock\UserField\Types; use Bitrix\Main\Application; use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Type; use Bitrix\Main\UserField\Types\EnumType; use Bitrix\Iblock; use CDBResult; use CUserTypeManager; use CIBlockElementEnum; /** * Class ElementType * @package Bitrix\Iblock\UserField\Types */ class ElementType extends EnumType { public const USER_TYPE_ID = 'iblock_element', RENDER_COMPONENT = 'bitrix:iblock.field.element'; protected static ?bool $iblockIncluded = null; /** * @return array */ public static function getDescription(): array { return [ 'DESCRIPTION' => Loc::getMessage('USER_TYPE_IBEL_DESCRIPTION'), 'BASE_TYPE' => CUserTypeManager::BASE_TYPE_INT, ]; } /** * @param array $userField * @return array */ public static function prepareSettings(array $userField): array { $height = (int)($userField['SETTINGS']['LIST_HEIGHT'] ?? 1); $disp = ($userField['SETTINGS']['DISPLAY'] ?? ''); if ($disp !== static::DISPLAY_CHECKBOX && $disp !== static::DISPLAY_LIST) { $disp = static::DISPLAY_LIST; } $iblockId = (int)($userField['SETTINGS']['IBLOCK_ID'] ?? 0); if($iblockId <= 0) { $iblockId = ''; } $elementId = (int)($userField['SETTINGS']['DEFAULT_VALUE'] ?? 0); if($elementId <= 0) { $elementId = ''; } $activeFilter = (($userField['SETTINGS']['ACTIVE_FILTER'] ?? '') === 'Y' ? 'Y' : 'N'); return [ 'DISPLAY' => $disp, 'LIST_HEIGHT' => (max($height, 1)), 'IBLOCK_ID' => $iblockId, 'DEFAULT_VALUE' => $elementId, 'ACTIVE_FILTER' => $activeFilter, ]; } /** * @param array $userField * @return string|null */ public static function onSearchIndex(array $userField): ?string { $res = ''; if (!isset($userField['VALUE'])) { return $res; } if (is_array($userField['VALUE'])) { $val = $userField['VALUE']; } else { $val = [$userField['VALUE']]; } Type\Collection::normalizeArrayValuesByInt($val); if (!empty($val) && Loader::includeModule('iblock')) { $iterator = Iblock\ElementTable::getList([ 'select' => [ 'NAME', ], 'filter' => [ '@ID' => $val, ], ]); while ($row = $iterator->fetch()) { $res .= $row['NAME'] . "\r\n"; } unset($row, $iterator); } unset($val); return $res; } /** * @param array $userField * @return bool|CDBResult */ public static function getList(array $userField) { if(self::$iblockIncluded === null) { self::$iblockIncluded = Loader::includeModule('iblock'); } $elementEnumList = false; if(self::$iblockIncluded && (int)$userField['SETTINGS']['IBLOCK_ID']) { $elementEnumList = CIBlockElementEnum::getTreeList( (int)$userField['SETTINGS']['IBLOCK_ID'], $userField['SETTINGS']['ACTIVE_FILTER'] ); } return $elementEnumList; } /** * @param array $userField * @param array $additionalParameters */ public static function getEnumList(array &$userField, array $additionalParameters = []): void { if (self::$iblockIncluded === null) { self::$iblockIncluded = Loader::includeModule('iblock'); } $userField['SETTINGS']['IBLOCK_ID'] ??= 0; $userField['SETTINGS']['SHOW_NO_VALUE'] ??= 'Y'; $userField['SETTINGS']['DISPLAY'] ??= ''; $userField['SETTINGS']['ACTIVE_FILTER'] ??= 'N'; if ( !self::$iblockIncluded || (int)$userField['SETTINGS']['IBLOCK_ID']<= 0 ) { return; } $result = []; $showNoValue = ( $userField['MANDATORY'] !== 'Y' || $userField['SETTINGS']['SHOW_NO_VALUE'] !== 'N' || ( isset($additionalParameters['SHOW_NO_VALUE']) && $additionalParameters['SHOW_NO_VALUE'] === true ) ); if ( $showNoValue && ( $userField['SETTINGS']['DISPLAY'] !== 'CHECKBOX' || $userField['MULTIPLE'] !== 'Y' ) ) { $result = [ null => static::getEmptyCaption($userField) ]; } $elements = self::getElements( (int)$userField['SETTINGS']['IBLOCK_ID'], $userField['SETTINGS']['ACTIVE_FILTER'] ); if (!is_array($elements)) { return; } $result = array_replace($result, $elements); $userField['USER_TYPE']['FIELDS'] = $result; } public static function getDefaultValue(array $userField, array $additionalParameters = []) { $value = ($userField['SETTINGS']['DEFAULT_VALUE'] ?? ''); return ($userField['MULTIPLE'] === 'Y' ? [$value] : $value); } protected static function getElements($iblockId, $activeFilter = 'N') { if ($iblockId <= 0 || !Loader::includeModule('iblock')) { return false; } $currentCache = \Bitrix\Main\Data\Cache::createInstance(); $cacheTtl = 86400; $cacheId = md5('CIBlockElementEnum::getTreeList_' . $iblockId . '_' . $activeFilter); $cacheDir = '/iblock/elementtype/' . $iblockId; if($currentCache->initCache($cacheTtl, $cacheId, $cacheDir)) { $result = $currentCache->getVars(); } else { $currentCache->startDataCache(); $taggedCache = Application::getInstance()->getTaggedCache(); $taggedCache->startTagCache($cacheDir); $filter = ['IBLOCK_ID' => $iblockId]; if($activeFilter === 'Y') { $filter['ACTIVE'] = 'Y'; } $result = []; $elements = \Bitrix\Iblock\ElementTable::getList([ 'select' => [ 'ID', 'NAME', ], 'filter' => \CIBlockElement::getPublicElementsOrmFilter($filter), 'order' => [ 'NAME' => 'ASC', 'ID' => 'ASC', ], ]); while($element = $elements->fetch()) { $result[$element['ID']] = $element['NAME']; } unset($elements); $taggedCache->registerTag('iblock_id_' . $iblockId); $taggedCache->endTagCache(); if (empty($result)) { $result = false; } $currentCache->endDataCache($result); } return $result; } }
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.27 |
proxy
|
phpinfo
|
Settings