27 'DESCRIPTION' => Loc::getMessage(
'USER_TYPE_HLEL_DESCRIPTION'),
28 'BASE_TYPE' => CUserTypeManager::BASE_TYPE_INT,
42 $additionalParameters ?? [],
43 [
'mode' => self::MODE_VIEW]
47 return parent::renderField($userField, $additionalParameters);
62 $additionalParameters ?? [],
63 [
'mode' => self::MODE_VIEW]
67 return parent::renderView($userField, $additionalParameters);
82 $additionalParameters ?? [],
83 [
'mode' => self::MODE_EDIT]
87 return parent::renderEdit($userField, $additionalParameters);
92 $enum = static::getList($userField);
98 while($item = $enum->Fetch())
100 $items[$item[
'ID']] = $item;
102 $additionalParameters[
'items'] =
$items;
104 return parent::renderEditForm($userField, $additionalParameters);
118 $items[$item[
'ID']] = $item[
'VALUE'];
121 $additionalParameters[
'items'] =
$items;
123 return parent::renderFilter($userField, $additionalParameters);
129 $emptyCaption =
' ';
131 $value = (int)($additionalParameters[
'VALUE'] ?? 0);
133 if (!isset($cache[$value]))
138 $additionalParameters[
'VALUE'] = $emptyCaption;
140 return parent::renderAdminListView($userField, $additionalParameters);
144 $cache[(int)$item[
'ID']] = $item[
'NAME'];
148 if (!isset($cache[$value]))
150 $cache[$value] = $emptyCaption;
153 $additionalParameters[
'VALUE'] = $cache[$value];
155 return parent::renderAdminListView($userField, $additionalParameters);
166 $values[$item[
'ID']] = $item[
'VALUE'];
170 $additionalParameters[
'enumItems'] = $values;
172 return parent::renderAdminListEdit($userField, $additionalParameters);
191 if (isset($userField[
'MULTIPLE']) && $userField[
'MULTIPLE'] ===
'Y')
197 if (!empty($userField[
'SETTINGS']) && is_array($userField[
'SETTINGS']))
218 $items[$item[
'ID']] = $item[
'VALUE'];
224 'id' => $additionalParameters[
'ID'],
225 'name' => $additionalParameters[
'NAME'],
241 if (!isset(self::$highloadblockIncluded))
246 $userField[
'MANDATORY'] ??=
'N';
247 $userField[
'SETTINGS'][
'HLBLOCK_ID'] ??= 0;
248 $userField[
'SETTINGS'][
'HLFIELD_ID'] ??= 0;
249 $userField[
'SETTINGS'][
'SHOW_NO_VALUE'] ??=
'Y';
250 $userField[
'SETTINGS'][
'DISPLAY'] ??=
'';
253 !self::$highloadblockIncluded
254 || (
int)$userField[
'SETTINGS'][
'HLBLOCK_ID'] <= 0
262 $userField[
'MANDATORY'] !==
'Y'
263 || $userField[
'SETTINGS'][
'SHOW_NO_VALUE'] !==
'N'
265 isset($additionalParameters[
'SHOW_NO_VALUE'])
266 && $additionalParameters[
'SHOW_NO_VALUE'] === true
273 $userField[
'SETTINGS'][
'DISPLAY'] !==
'CHECKBOX'
274 || $userField[
'MULTIPLE'] !==
'Y'
279 null => static::getEmptyCaption($userField)
285 $checkValue = ($additionalParameters[
'mode'] ??
'') === self::MODE_VIEW;
288 $currentValues = self::getCurrentValue($userField, $additionalParameters);
310 $userField[
'USER_TYPE'][
'FIELDS'] =
$result;
316 $elements = self::loadElement(
317 $userField[
'SETTINGS'],
321 if (!is_array($elements))
335 $userField[
'USER_TYPE'][
'FIELDS'] =
$result;
340 $defaultSettings = static::getDefaultSettings($multiple);
342 $height = (int)(
$settings[
'LIST_HEIGHT'] ?? $defaultSettings[
'LIST_HEIGHT']);
345 $height = $defaultSettings[
'LIST_HEIGHT'];
348 $display = (string)(
$settings[
'DISPLAY'] ?? $defaultSettings[
'DISPLAY']);
350 $display !== static::DISPLAY_CHECKBOX
351 && $display !== static::DISPLAY_LIST
352 && $display !== static::DISPLAY_UI
353 && $display !== static::DISPLAY_DIALOG
356 $display = $defaultSettings[
'DISPLAY'];
359 $hlblockId = (int)(
$settings[
'HLBLOCK_ID'] ?? $defaultSettings[
'HLBLOCK_ID']);
362 $hlblockId = $defaultSettings[
'HLBLOCK_ID'];
365 $hlfieldId = (int)(
$settings[
'HLFIELD_ID'] ?? $defaultSettings[
'HLFIELD_ID']);
368 $hlfieldId = $defaultSettings[
'HLFIELD_ID'];
394 'DISPLAY' => $display,
395 'LIST_HEIGHT' => $height,
396 'HLBLOCK_ID' => $hlblockId,
397 'HLFIELD_ID' => $hlfieldId,
405 'DISPLAY' => static::DISPLAY_LIST,
406 'LIST_HEIGHT' => $multiple ? 5 : 1,
409 'DEFAULT_VALUE' => ($multiple ? [] :
''),
413 private static function getHighloadblockSelectorHtml(
string $name,
array $select): string
417 $list = static::getDropDownData();
420 $html =
'<select name="' .
$name .
'[HLBLOCK_ID]" onchange="hlChangeFieldOnHlblockChanged(this)">';
421 $html .=
'<option value="">'.htmlspecialcharsbx(Loc::getMessage(
'USER_TYPE_HLEL_SEL_HLBLOCK')).
'</option>';
423 foreach ($list as $_hlblockId => $hlblockData)
425 $html .=
'<option value="'.$_hlblockId.
'"'
426 . ($_hlblockId ===
$select[
'HLBLOCK_ID'] ?
' selected' :
'') .
'>'
431 $html .=
'</select> ';
434 $html .=
'<select name="' .
$name .
'[HLFIELD_ID]" id="hl_ufsett_field_selector">';
435 $html .=
'<option value="">'.htmlspecialcharsbx(Loc::getMessage(
'USER_TYPE_HLEL_SEL_HLBLOCK_FIELD')).
'</option>';
439 foreach ($list[
$select[
'HLBLOCK_ID']][
'fields'] as $fieldId => $fieldName)
441 $html .=
'<option value="'.$fieldId.
'"'.($fieldId ===
$select[
'HLFIELD_ID'] ?
' selected' :
'').
'>'.
htmlspecialcharsbx($fieldName).
'</option>';
445 $html .=
'</select>';
450 function hlChangeFieldOnHlblockChanged(hlSelect)
452 var list = '.CUtil::PhpToJSObject($list).
';
453 var fieldSelect = BX("hl_ufsett_field_selector");
455 for(var i=fieldSelect.length-1; i >= 0; i--)
456 fieldSelect.remove(i);
458 var newOption = new Option(\''.
CUtil::JSEscape(Loc::getMessage(
'USER_TYPE_HLEL_SEL_HLBLOCK_FIELD')).
'\',
"",
false,
false);
459 fieldSelect.options.add(newOption);
461 if (list[hlSelect.value])
463 for(var j in list[hlSelect.value][
"fields"])
465 var newOption =
new Option(list[hlSelect.value][
"fields"][j], j,
false,
false);
466 fieldSelect.options.add(newOption);
476 public static function getList($userField)
480 if (!isset(self::$highloadblockIncluded))
482 self::$highloadblockIncluded = Loader::includeModule('highloadblock
');
485 if (self::$highloadblockIncluded)
487 $rows = static::getHlRows($userField, true);
489 $rs = new CDBResult();
490 $rs->InitFromArray($rows);
496 public static function getEntityReferences($userfield, \Bitrix\Main\Entity\ScalarField $entityField): array
499 if ($userfield['SETTINGS
']['HLBLOCK_ID
'])
501 $hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getByPrimary(
502 $userfield['SETTINGS
']['HLBLOCK_ID
'], ['cache
' => ['ttl
' => 3600*24*365]]
507 $hlentity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock);
510 new \Bitrix\Main\Entity\ReferenceField(
511 $entityField->getName() . '_REF
',
513 ['=this.
' . $entityField->getName() => 'ref.ID
']
517 return $referenceFields;
524 public static function getHlRows($userfield, $clearValues = false): array
526 global $USER_FIELD_MANAGER;
530 $hlblock_id = (int)($userfield['SETTINGS
']['HLBLOCK_ID
'] ?? 0);
531 $hlfield_id = (int)($userfield['SETTINGS
']['HLFIELD_ID
'] ?? 0);
532 if ($hlfield_id <= 0)
537 if (!empty($hlblock_id))
539 $hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getById($hlblock_id)->fetch();
542 if (!empty($hlblock))
548 $iterator = Main\UserFieldTable::getList([
553 '=ENTITY_ID
' => HighloadBlockTable::compileEntityId($hlblock['ID
']),
554 '=ID
' => $hlfield_id,
557 $row = $iterator->fetch();
561 $row['USER_TYPE
'] = $USER_FIELD_MANAGER->GetUserType($row['USER_TYPE_ID']);
570 if ($hlfield_id == 0)
572 $userfield = array('FIELD_NAME
' => 'ID
');
577 // validated successfully. get data
578 $hlDataClass = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock)->getDataClass();
579 $rows = $hlDataClass::getList(array(
580 'select' => array('ID
', $userfield['FIELD_NAME
']),
584 foreach ($rows as &$row)
586 $row['ID
'] = (int)$row['ID
'];
587 if ($userfield['FIELD_NAME
'] == 'ID
')
589 $row['VALUE
'] = $row['ID
'];
594 if ($userfield['USER_TYPE_ID'] !== EnumType::USER_TYPE_ID && $clearValues)
596 $row['VALUE
'] = $row[$userfield['FIELD_NAME
']];
600 $row['VALUE
'] = $USER_FIELD_MANAGER->getListView($userfield, $row[$userfield['FIELD_NAME
']]);
602 $row['VALUE
'] .= ' [
'.$row['ID
'].']
';
611 public static function getAdminListViewHtml(array $userField, ?array $additionalParameters): string
614 $empty_caption = '&
nbsp;
';
616 $cacheKey = $userField['SETTINGS
']['HLBLOCK_ID
'].'_v
'.$additionalParameters["VALUE"];
618 if (!array_key_exists($cacheKey, $cache) && !empty($additionalParameters["VALUE"]))
620 $iterator = static::getList($userField);
623 return $empty_caption;
625 while ($arEnum = $iterator->GetNext())
627 $cache[$userField['SETTINGS
']['HLBLOCK_ID
'].'_v
'.$arEnum["ID"]] = $arEnum["VALUE"];
629 unset($arEnum, $iterator);
631 if (!array_key_exists($cacheKey, $cache))
633 $cache[$cacheKey] = $empty_caption;
636 return $cache[$cacheKey];
639 public static function getDropDownData(): array
641 global $USER_FIELD_MANAGER;
643 $hlblocks = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('order
' => 'NAME
'))->fetchAll();
647 foreach ($hlblocks as $hlblock)
649 // add hlblock itself
650 $list[$hlblock['ID
']] = [
651 'name
' => $hlblock['NAME
'],
657 $userfields = $USER_FIELD_MANAGER->GetUserFields('HLBLOCK_
'.$hlblock['ID
'], 0, LANGUAGE_ID);
659 foreach ($userfields as $userfield)
661 $fieldTitle = $userfield['LIST_COLUMN_LABEL
'] <> ''? $userfield['LIST_COLUMN_LABEL
'] : $userfield['FIELD_NAME
'];
662 $list[$hlblock['ID
']]['fields
'][(int)$userfield['ID
']] = $fieldTitle;
669 public static function getDropDownHtml($hlblockId = null, $hlfieldId = null, string $name = ''): string
676 return self::getHighloadblockSelectorHtml(
679 'HLBLOCK_ID
' => (int)$hlblockId,
680 'HLFIELD_ID
' => (int)$hlfieldId,
685 public static function getDefaultValue(array $userField, array $additionalParameters = [])
687 if (!isset($userField['MULTIPLE
']))
692 if (!empty($userField['SETTINGS
']) && is_array($userField['SETTINGS
']))
694 if ($userField['MULTIPLE
'] === 'Y
')
696 if (!is_array($userField['SETTINGS
']['DEFAULT_VALUE
']))
698 $userField['SETTINGS
']['DEFAULT_VALUE
'] = [
699 $userField['SETTINGS
']['DEFAULT_VALUE
']
702 $result = $userField['SETTINGS
']['DEFAULT_VALUE
'];
703 Main\Type\Collection::normalizeArrayValuesByInt($result, false);
707 $result = (int)($userField['SETTINGS
']['DEFAULT_VALUE
'] ?? 0);
724 public static function getFieldValue(array $userField, array $additionalParameters = [])
726 return EnumType::getFieldValue($userField, $additionalParameters);
729 private static function getCurrentValue(array $userField, array $additionalParameters = [])
731 if (isset($additionalParameters['VALUE
']))
733 return $additionalParameters['VALUE
'];
736 return $userField['VALUE
'] ?? null;
743 public static function getEmptyCaption(array $userField): string
745 $message = (string)($userField['SETTINGS
']['CAPTION_NO_VALUE
'] ?? '');
749 ? HtmlFilter::encode($userField['SETTINGS
']['CAPTION_NO_VALUE
'])
750 : (string)Loc::getMessage('USER_TYPE_HLEL_NO_VALUE
')
754 public static function getDisplayTypeList(): array
757 static::DISPLAY_LIST => Loc::getMessage('USER_TYPE_HLEL_LIST
'),
758 static::DISPLAY_CHECKBOX => Loc::getMessage('USER_TYPE_HLEL_CHECKBOX
'),
762 private static function loadElement(array $settings, array $filter): ?array
764 global $USER_FIELD_MANAGER;
766 if (!isset(self::$highloadblockIncluded))
768 self::$highloadblockIncluded = Loader::includeModule('highloadblock
');
770 if (!self::$highloadblockIncluded)
775 $hlblockId = (int)($settings['HLBLOCK_ID
'] ?? 0);
776 $hlfieldId = (int)($settings['HLFIELD_ID
'] ?? 0);
782 $hlblock = \Bitrix\Highloadblock\HighloadBlockTable::resolveHighloadblock($hlblockId);
783 if ($hlblock === null)
788 $hlblock['ID
'] = (int)$hlblock['ID
'];
789 $field = self::resolveField($hlblock['ID
'], $hlfieldId);
791 $entity = HighloadBlockTable::compileEntity($hlblock);
792 $hlDataClass = $entity->getDataClass();
796 $field['FIELD_NAME
'],
805 $iterator = $hlDataClass::getList([
810 while ($row = $iterator->fetch())
812 $row['ID
'] = (int)$row['ID
'];
813 if ($field['FIELD_NAME
'] === 'ID
')
815 $row['VALUE
'] = $row['ID
'];
820 $USER_FIELD_MANAGER->getListView($field, $row[$field['FIELD_NAME
']])
821 . ' [
'.$row['ID
'].']
'
824 $rows[$row['ID
']] = $row['VALUE
'];
826 unset($row, $iterator);
831 private static function resolveField(int $hlblockId, int $hlfieldId): array
833 global $USER_FIELD_MANAGER;
836 'FIELD_NAME
' => 'ID
',
841 return $defaultField;
844 $row = Main\UserFieldTable::getRow([
849 '=ENTITY_ID
' => HighloadBlockTable::compileEntityId($hlblockId),
858 return $defaultField;
860 $row['USER_TYPE
'] = $USER_FIELD_MANAGER->GetUserType($row['USER_TYPE_ID']);
if($_SERVER $defaultValue['REQUEST_METHOD']==="GET" &&!empty($RestoreDefaults) && $bizprocPerms==="W" &&check_bitrix_sessid())
static getConnection($name="")
static includeModule($moduleName)
static normalizeArrayValuesByInt(&$map, $sorted=true)
static renderAdminListEdit(array $userField, ?array $additionalParameters)
static renderEdit(array $userField, ?array $additionalParameters=[])
static getFilterData(array $userField, array $additionalParameters)
static renderEditForm(array $userField, ?array $additionalParameters)
static bool $highloadblockIncluded
static getDefaultSettings(bool $multiple=false)
static getEnumList(array &$userField, array $additionalParameters=[])
static renderField(array $userField, ?array $additionalParameters=[])
static verifySettings(array $settings, bool $multiple)
static renderView(array $userField, ?array $additionalParameters=[])
static checkFields(array $userField, $value)
static renderFilter(array $userField, ?array $additionalParameters)
static prepareSettings(array $userField)
static renderAdminListView(array $userField, ?array $additionalParameters)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if($request->isPost() && $currentAction !==null &&check_bitrix_sessid()) $currentValues
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)