31 'PROPERTY_TYPE' =>
'S',
32 'USER_TYPE' => self::USER_TYPE,
33 'DESCRIPTION' => Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_DESCRIPTION'),
34 'GetSettingsHTML' =>
array(__CLASS__,
'GetSettingsHTML'),
35 'GetPropertyFieldHtml' =>
array(__CLASS__,
'GetPropertyFieldHtml'),
36 'PrepareSettings' =>
array(__CLASS__,
'PrepareSettings'),
37 'GetAdminListViewHTML' =>
array(__CLASS__,
'GetAdminListViewHTML'),
38 'GetPublicViewHTML' =>
array(__CLASS__,
'GetPublicViewHTML'),
39 'GetPublicEditHTML' =>
array(__CLASS__,
'GetPublicEditHTML'),
40 'GetPublicEditHTMLMulty' =>
array(__CLASS__,
'GetPublicEditHTMLMulty'),
41 'GetAdminFilterHTML' =>
array(__CLASS__,
'GetAdminFilterHTML'),
42 'GetExtendedValue' =>
array(__CLASS__,
'GetExtendedValue'),
43 'GetSearchContent' =>
array(__CLASS__,
'GetSearchContent'),
44 'AddFilterFields' =>
array(__CLASS__,
'AddFilterFields'),
45 'GetUIFilterProperty' =>
array(__CLASS__,
'GetUIFilterProperty'),
46 'GetUIEntityEditorProperty' =>
array(__CLASS__,
'GetUIEntityEditorProperty'),
47 'GetUIEntityEditorPropertyEditHtml' =>
array(__CLASS__,
'GetUIEntityEditorPropertyEditHtml'),
48 'GetUIEntityEditorPropertyViewHtml' =>
array(__CLASS__,
'GetUIEntityEditorPropertyViewHtml'),
64 $directoryTableName =
'';
66 if (!empty($arProperty[
"USER_TYPE_SETTINGS"]) && is_array($arProperty[
"USER_TYPE_SETTINGS"]))
68 if (isset($arProperty[
"USER_TYPE_SETTINGS"][
"size"]))
70 $size = (int)$arProperty[
"USER_TYPE_SETTINGS"][
"size"];
75 if (isset($arProperty[
"USER_TYPE_SETTINGS"][
"width"]))
77 $width = (int)$arProperty[
"USER_TYPE_SETTINGS"][
"width"];
82 if (isset($arProperty[
"USER_TYPE_SETTINGS"][
"group"]) && $arProperty[
"USER_TYPE_SETTINGS"][
"group"] ===
"Y")
85 if (isset($arProperty[
"USER_TYPE_SETTINGS"][
"multiple"]) && $arProperty[
"USER_TYPE_SETTINGS"][
"multiple"] ===
"Y")
88 if (isset($arProperty[
"USER_TYPE_SETTINGS"][
"TABLE_NAME"]))
89 $directoryTableName = (string)$arProperty[
"USER_TYPE_SETTINGS"][
'TABLE_NAME'];
92 $extendedSettings =
false;
97 'multiple' => $multiple,
98 'TABLE_NAME' => $directoryTableName,
101 if ($directoryTableName !==
'')
103 $hlblock = static::resolveHighloadblockByTableName($directoryTableName);
109 $extendedSettings =
true;
117 if (!$extendedSettings)
122 $arProperty[
'USER_TYPE_SETTINGS'] =
$result;
136 public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields): string
139 if (isset($arProperty[
'IBLOCK_ID']))
140 $iblockID = (int)$arProperty[
'IBLOCK_ID'];
142 $settings = static::PrepareSettings($arProperty);
143 if (isset(
$settings[
'USER_TYPE_SETTINGS']))
145 $arPropertyFields =
array(
146 'HIDE' => [
'ROW_COUNT',
'COL_COUNT',
'MULTIPLE_CNT',
'DEFAULT_VALUE',
'WITH_DESCRIPTION'],
147 'SET' => [
'DEFAULT_VALUE' =>
''],
151 $cellOption =
'<option value="-1"'.(
'' ==
$settings[
"TABLE_NAME"] ?
' selected' :
'').
'>'.Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_NEW_DIRECTORY').
'</option>';
154 'select' =>
array(
'*',
'NAME_LANG' =>
'LANG.NAME'),
155 'order' =>
array(
'NAME_LANG' =>
'ASC',
'NAME' =>
'ASC'),
157 while($arData =
$rsData->fetch())
159 if (
$settings[
'TABLE_NAME'] == $arData[
'TABLE_NAME'])
161 $directory = $arData;
162 unset($directory[
'NAME_LANG']);
164 $arData[
'NAME_LANG'] = (string)$arData[
'NAME_LANG'];
165 $hlblockTitle = ($arData[
'NAME_LANG'] !=
'' ? $arData[
'NAME_LANG'] : $arData[
'NAME']).
' ('.$arData[
"TABLE_NAME"].
')';
166 $selected = (
$settings[
"TABLE_NAME"] == $arData[
'TABLE_NAME']) ?
' selected' :
'';
168 unset($hlblockTitle);
172 if (!empty($directory))
181 $multiple = $arProperty[
'MULTIPLE'];
183 $tablePrefix = self::TABLE_PREFIX;
184 $selectDir = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_SELECT_DIR");
185 $headingXmlId = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_XML_ID");
186 $headingName = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_NAME");
187 $headingSort = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_SORT");
188 $headingDef = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_DEF");
189 $headingLink = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_LINK");
190 $headingFile = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_FILE");
191 $headingDescription = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_DECSRIPTION");
192 $headingFullDescription = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_FULL_DESCRIPTION");
193 $directoryName = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_NEW_NAME");
194 $directoryMore = Loc::getMessage(
"HIBLOCK_PROP_DIRECTORY_MORE");
196 $emptyDefaultValue =
'';
197 if ($multiple ==
'N')
199 $emptyDefaultValue =
'<tr id="hlbl_property_tr_empty">'.
200 '<td colspan="6" style="text-align: center;">'.Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_EMPTY_DEFAULT_VALUE').
'</td>'.
201 '<td style="text-align:center;">'.
202 '<input type="radio" name="PROPERTY_VALUES_DEF" id="PROPERTY_VALUES_DEF_EMPTY" value="-1" checked="checked">'.
203 '<td colspan="2"> </td>'.
207 return <<<
"HIBSELECT"
209function getTableHead()
211 BX(
'hlb_directory_table').innerHTML =
'<tr class="heading"><td></td><td>$headingName</td><td>$headingSort</td><td>$headingXmlId</td><td>$headingFile</td><td>$headingLink</td><td>$headingDef</td><td>$headingDescription</td><td>$headingFullDescription</td></tr>$emptyDefaultValue';
214function getDirectoryTableRow(addNew)
216 addNew = (addNew ===
'row' ?
'row' :
'full');
217 var obSelectHLBlock = BX(
'hlb_directory_table_id');
218 if (!!obSelectHLBlock)
220 var rowNumber = parseInt(BX(
'hlb_directory_row_number').value, 10);
221 if (BX(
'IB_MAX_ROWS_COUNT'))
222 rowNumber = parseInt(BX(
'IB_MAX_ROWS_COUNT').value, 10);
223 if (isNaN(rowNumber))
225 var hlBlock = (-1 < obSelectHLBlock.selectedIndex ? obSelectHLBlock.options[obSelectHLBlock.selectedIndex].value :
'');
226 var selectHLBlockValue = hlBlock;
228 if (addNew ===
'full')
230 if (selectHLBlockValue ==
'-1')
233 BX(
'hlb_directory_table_tr').style.display =
'table-row';
234 BX(
'hlb_directory_title_tr').style.display =
'table-row';
235 BX(
'hlb_directory_table_name').style.display =
'table-row';
236 BX(
'hlb_directory_table_name').disabled =
false;
243 BX(
'hlb_directory_table_name').disabled =
true;
244 BX(
'hlb_directory_title_tr').style.display =
'none';
247 'highloadblock_directory_ajax.php',
249 lang: BX.message(
'LANGUAGE_ID'),
250 sessid: BX.bitrix_sessid(),
252 rowNumber: rowNumber,
254 IBLOCK_ID:
'{$iblockID}',
255 multiple:
'{$multiple}'
257 BX.delegate(
function(result) {
258 BX(
'hlb_directory_table').innerHTML = result;
264 if (addNew ===
'row')
267 'highloadblock_directory_ajax.php',
269 lang: BX.message(
'LANGUAGE_ID'),
270 sessid: BX.bitrix_sessid(),
272 rowNumber: rowNumber,
274 IBLOCK_ID:
'{$iblockID}',
275 multiple:
'{$multiple}'
277 BX.delegate(
function(result) {
279 obTable = BX(
'hlb_directory_table'),
284 if (!!obTable &&
'object' === typeof result)
286 rowNumber = parseInt(BX(
'hlb_directory_row_number').value, 10);
287 if (!!BX(
'IB_MAX_ROWS_COUNT'))
288 rowNumber = parseInt(BX(
'IB_MAX_ROWS_COUNT').value, 10);
289 if (isNaN(rowNumber))
291 obRow = obTable.insertRow(obTable.rows.length);
292 obRow.id =
'hlbl_property_tr_'+rowNumber;
295 obCell = obRow.insertCell(-1);
296 BX.adjust(obCell, {
style: result[i].style, html: result[i].html });
298 BX(
'hlb_directory_row_number').value = rowNumber + 1;
299 if(BX(
'IB_MAX_ROWS_COUNT'))
300 BX(
'IB_MAX_ROWS_COUNT').value = rowNumber + 1;
307function getDirectoryTableHead(e)
309 e.value = BX.translit(e.value, {
311 'replace_space' :
'',
312 'delete_repeat_replace' : true
315 var obSelectHLBlock = BX(
'hlb_directory_table_id');
316 if (!!obSelectHLBlock)
318 if (-1 < obSelectHLBlock.selectedIndex &&
'-1' == obSelectHLBlock.options[obSelectHLBlock.selectedIndex].value)
320 BX(
'hlb_directory_table_id_hidden').disabled =
false;
321 BX(
'hlb_directory_table_id_hidden').value =
'{$tablePrefix}'+BX(
'hlb_directory_table_name').value;
322 BX(
'hlb_directory_table_id_hidden').value = BX(
'hlb_directory_table_id_hidden').value.substr(0, 30);
329 <td>{$selectDir}:</td>
331 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[TABLE_NAME]" disabled id=
"hlb_directory_table_id_hidden">
332 <
select name=
"{$strHTMLControlName["NAME
"]}[TABLE_NAME]" id=
"hlb_directory_table_id" onchange=
"getDirectoryTableRow('full');"/>
337<tr
id=
"hlb_directory_title_tr" class=
"adm-detail-required-field">
338 <td>$directoryName</td>
340 <input type=
"hidden" value=
"0" id=
"hlb_directory_row_number">
341 <input type=
"text" name=
"HLB_NEW_TITLE" size=
"30" id=
"hlb_directory_table_name" onchange=
"getDirectoryTableHead(this);">
344<tr
id=
"hlb_directory_table_tr">
345 <td colspan=
"2" style=
"text-align: center;">
346 <table
class=
"internal" id=
"hlb_directory_table" style=
"margin: 0 auto;">
347 <script>getDirectoryTableRow(
'full');</script>
352 <td colspan=
"2" style=
"text-align: center;">
353 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_NAME]" value=
"{$headingName}">
354 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_SORT]" value=
"{$headingSort}">
355 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_XML_ID]" value=
"{$headingXmlId}">
356 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_FILE]" value=
"{$headingFile}">
357 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_LINK]" value=
"{$headingLink}">
358 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_DEF]" value=
"{$headingDef}">
359 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_DESCRIPTION]" value=
"{$headingDescription}">
360 <input type=
"hidden" name=
"{$strHTMLControlName["NAME
"]}[LANG][UF_FULL_DESCRIPTION]" value=
"{$headingFullDescription}">
361 <div
style=
"width: 100%; text-align: center; margin: 10px 0;">
362 <input type=
"button" value=
"{$directoryMore}" onclick=
"getDirectoryTableRow('row');" id=
"hlb_directory_table_button" class=
"adm-btn-big">
380 $size = (
$settings[
"size"] > 1 ?
' size="'.$settings[
"size"].
'"' :
'');
381 $width = (
$settings[
"width"] > 0 ?
' style="width:'.$settings[
"width"].
'px"' :
'');
384 $html =
'<select name="'.$strHTMLControlName[
"VALUE"].
'"'.$size.$width.
'>';
386 $html .=
'</select>';
400 $multi = (isset($property[
'MULTIPLE']) && $property[
'MULTIPLE'] ==
'Y');
403 $size = (
$settings[
'size'] > 1 ?
' size="'.$settings[
'size'].
'"' :
'');
404 $width = (
$settings[
'width'] > 0 ?
' style="width:'.$settings[
'width'].
'px"' :
' style="margin-bottom:3px"');
406 $html =
'<select '.($multi ?
'multiple' :
'').
' name="'.
$control[
'VALUE'].($multi ?
'[]' :
'').
'"'.$size.$width.
'>';
408 $html .=
'</select>';
426 $width = (
$settings[
'width'] > 0 ?
' style="width:'.$settings[
'width'].
'px"' :
' style="margin-bottom:3px"');
428 $html =
'<select multiple name="'.$control[
'VALUE'].
'[]" size="'.
$settings[
'size'].
'"'.
$width.
'>';
430 $html .=
'</select>';
444 $selectedValue =
false;
447 $highLoadIBTableName = ($arProperty[
"USER_TYPE_SETTINGS"][
"TABLE_NAME"] ??
'');
448 if($highLoadIBTableName !=
'')
450 if (empty(self::$arFullCache[$highLoadIBTableName]))
452 self::$arFullCache[$highLoadIBTableName] = self::getEntityFieldsByFilter(
453 $highLoadIBTableName,
455 'select' =>
array(
'UF_XML_ID',
'UF_NAME',
'ID'),
459 foreach(self::$arFullCache[$highLoadIBTableName] as
$data)
462 if(in_array(
$data[
"UF_XML_ID"], $values))
465 $selectedValue =
true;
469 $defaultOption =
'<option value=""'.($selectedValue ?
'' :
' selected').
'>'.Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_EMPTY_VALUE').
'</option>';
473 $cellOption =
'<option value="" selected>'.Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_EMPTY_VALUE').
'</option>';
475 return $defaultOption.$cellOption;
488 if(isset($arProperty[
"USER_TYPE_SETTINGS"][
"TABLE_NAME"]))
490 $highLoadIBTableName = $arProperty[
"USER_TYPE_SETTINGS"][
"TABLE_NAME"];
491 if (empty(self::$arFullCache[$highLoadIBTableName]))
493 self::$arFullCache[$highLoadIBTableName] = self::getEntityFieldsByFilter(
494 $highLoadIBTableName,
495 array(
"select" =>
array(
"UF_XML_ID",
"UF_NAME",
"ID"))
498 foreach(self::$arFullCache[$highLoadIBTableName] as
$data)
516 if (!isset($value[
'VALUE']))
519 if (is_array($value[
'VALUE']) &&
count($value[
'VALUE']) == 0)
522 if (empty($arProperty[
'USER_TYPE_SETTINGS'][
'TABLE_NAME']))
525 $tableName = $arProperty[
'USER_TYPE_SETTINGS'][
'TABLE_NAME'];
526 if (!isset(self::$arItemCache[$tableName]))
527 self::$arItemCache[$tableName] =
array();
529 if (is_array($value[
'VALUE']) || !isset(self::$arItemCache[$tableName][$value[
'VALUE']]))
531 $data = self::getEntityFieldsByFilter(
532 $arProperty[
'USER_TYPE_SETTINGS'][
'TABLE_NAME'],
534 'select' =>
array(
'UF_XML_ID',
'UF_NAME'),
535 'filter' =>
array(
'=UF_XML_ID' => $value[
'VALUE']),
541 foreach (
$data as $item)
543 if (isset($item[
'UF_XML_ID']))
545 $item[
'VALUE'] = $item[
'UF_NAME'];
546 if (isset($item[
'UF_FILE']))
548 $item[
'FILE_ID'] = $item[
'UF_FILE'];
550 self::$arItemCache[$tableName][$item[
'UF_XML_ID']] = $item;
556 if (is_array($value[
'VALUE']))
559 foreach ($value[
'VALUE'] as $prop)
561 if (isset(self::$arItemCache[$tableName][$prop]))
563 $result[$prop] = self::$arItemCache[$tableName][$prop];
574 if (isset(self::$arItemCache[$tableName][$value[
'VALUE']]))
576 return self::$arItemCache[$tableName][$value[
'VALUE']];
592 $dataValue = self::GetExtendedValue($arProperty, $value);
610 $dataValue = self::GetExtendedValue($arProperty, $value);
613 if (isset($strHTMLControlName[
'MODE']) &&
'CSV_EXPORT' == $strHTMLControlName[
'MODE'])
614 return $dataValue[
'UF_XML_ID'];
615 elseif (isset($strHTMLControlName[
'MODE']) && (
'SIMPLE_TEXT' == $strHTMLControlName[
'MODE'] ||
'ELEMENT_TEMPLATE' == $strHTMLControlName[
'MODE']))
616 return $dataValue[
'UF_NAME'];
633 $lAdmin->InitFilter(
array($strHTMLControlName[
"VALUE"]));
634 $filterValue =
$GLOBALS[$strHTMLControlName[
"VALUE"]];
636 if(isset($filterValue) && is_array($filterValue))
637 $values = $filterValue;
642 $size = (
$settings[
"size"] > 1 ?
' size="'.$settings[
"size"].
'"' :
'');
643 $width = (
$settings[
"width"] > 0 ?
' style="width:'.$settings[
"width"].
'px"' :
'');
646 $html =
'<select name="'.$strHTMLControlName[
"VALUE"].
'[]"'.$size.$width.
' multiple>';
648 $html .=
'</select>';
662 if (!isset($value[
'VALUE']))
665 if (is_array($value[
'VALUE']) && empty($value[
'VALUE']))
668 $dataValue = self::GetExtendedValue($arProperty, $value);
669 if (!empty($dataValue) && is_array($dataValue))
672 if (is_array($value[
'VALUE']))
674 foreach ($value[
'VALUE'] as $item)
676 if (empty($dataValue[$item]) && !is_array($dataValue[$item]))
680 $result[] = $dataValue[$item][
'UF_NAME'] ?? $dataValue[$item][
'UF_XML_ID'];
685 $result[] = $dataValue[
'UF_NAME'] ?? $dataValue[
'UF_XML_ID'];
688 return implode(
' / ',
$result);
708 if (isset(
$_REQUEST[$strHTMLControlName[
"VALUE"]]))
711 $values = (is_array(
$GLOBALS[$strHTMLControlName[
"VALUE"]]) ?
$GLOBALS[$strHTMLControlName[
"VALUE"]] :
array(
$GLOBALS[$strHTMLControlName[
"VALUE"]]));
715 $clearValues =
array();
716 foreach ($values as $oneValue)
718 $oneValue = (string)$oneValue;
720 $clearValues[] = $oneValue;
722 $values = $clearValues;
723 unset($oneValue, $clearValues);
728 $arFilter[
'=PROPERTY_'.$arProperty[
'ID']] = $values;
743 $name = mb_substr(self::TABLE_PREFIX.
$name, 0, 30);
755 $tableName = (string)($property[
'USER_TYPE_SETTINGS'][
'TABLE_NAME'] ??
'');
756 if ($tableName ===
'')
761 unset($field[
'value']);
763 $hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getRow([
765 'filter' => [
'=TABLE_NAME' => $tableName],
769 $field[
'type'] =
'entity_selector';
775 'id' => ElementProvider::ENTITY_ID,
776 'dynamicLoad' =>
true,
777 'dynamicSearch' =>
true,
779 'highloadblockId' => $hlblock[
'ID'],
784 'allowCreateItem' =>
false,
798 private static function getEntityFieldsByFilter($tableName, $listDescr =
array()):
array
801 $tableName = (string)$tableName;
802 if (!is_array($listDescr))
803 $listDescr =
array();
804 if (!empty($tableName))
806 $hlblock = static::resolveHighloadblockByTableName($tableName);
809 if (!isset(self::$directoryMap[$tableName]))
811 $entity = HL\HighloadBlockTable::compileEntity($hlblock);
812 self::$hlblockClassNameCache[$tableName] =
$entity->getDataClass();
813 self::$directoryMap[$tableName] =
$entity->getFields();
816 if (!isset(self::$directoryMap[$tableName][
'UF_XML_ID']))
818 $entityDataClass = self::$hlblockClassNameCache[$tableName];
820 $nameExist = isset(self::$directoryMap[$tableName][
'UF_NAME']);
822 $listDescr[
'select'] =
array(
'UF_XML_ID',
'ID');
823 $fileExists = isset(self::$directoryMap[$tableName][
'UF_FILE']);
825 $listDescr[
'select'][] =
'UF_FILE';
827 $sortExist = isset(self::$directoryMap[$tableName][
'UF_SORT']);
828 $listDescr[
'order'] =
array();
831 $listDescr[
'order'][
'UF_SORT'] =
'ASC';
832 $listDescr[
'select'][] =
'UF_SORT';
835 $listDescr[
'order'][
'UF_NAME'] =
'ASC';
837 $listDescr[
'order'][
'UF_XML_ID'] =
'ASC';
838 $listDescr[
'order'][
'ID'] =
'ASC';
839 $rsData = $entityDataClass::getList($listDescr);
840 while($arData =
$rsData->fetch())
843 $arData[
'UF_NAME'] = $arData[
'UF_XML_ID'];
844 $arData[
'SORT'] = ($sortExist ? $arData[
'UF_SORT'] : $arData[
'ID']);
854 private static function normalizeValue($value):
array
857 if (!is_array($value))
867 if (isset($value[
'VALUE']) && is_array($value[
'VALUE']))
871 foreach ($value as $row)
876 if (isset($row[
'VALUE']))
877 $oneValue = (string)$row[
'VALUE'];
881 $oneValue = (string)$row;
883 if ($oneValue !==
'')
886 unset($oneValue, $row);
899 private static function getDefaultXmlId($identifier): ?string
902 $entity = HL\HighloadBlockTable::compileEntity($identifier);
906 $entityClassName =
$entity->getDataClass();
913 $order[
'UF_SORT'] =
'ASC';
918 $order[
'UF_NAME'] =
'ASC';
924 'filter' => [
'=UF_DEF' => 1],
932 unset($entityClassName);
939 private static function getEntityFieldsForTable($hlTableName)
941 if (!isset(self::$arFullCache[$hlTableName]))
943 self::$arFullCache[$hlTableName] = static::getEntityFieldsByFilter($hlTableName, [
944 'select' => [
'UF_XML_ID',
'UF_NAME',
'ID'],
948 return self::$arFullCache[$hlTableName];
953 $hlTableName = (string)(
$settings[
'USER_TYPE_SETTINGS'][
'TABLE_NAME'] ??
'');
955 if ($hlTableName ===
'')
962 $gridMode = (
$settings[
'GRID_MODE'] ??
false) ===
true;
966 foreach (static::getEntityFieldsForTable($hlTableName) as
$data)
969 'NAME' =>
$data[
'UF_NAME'] ??
'',
970 'TEXT' =>
$data[
'UF_NAME'] ??
'',
971 'VALUE' =>
$data[
'UF_XML_ID'],
972 'DESCRIPTION' =>
$data[
'UF_DESCRIPTION'] ??
'',
975 if (isset(
$data[
'UF_FILE']) && (
int)
$data[
'UF_FILE'] >= 0)
978 $item[
'IMAGE'] =
$data[
'UF_FILE'];
983 $image = \CFile::GetFileArray(
$data[
'UF_FILE']) ?:
null;
984 $item[
'IMAGE_SRC'] = $image[
'SRC'];
989 $item[
'HTML'] =
"<span class=\"catalog-multi-list-dictionary-select-icon\" style=\"background-image:url('{$image['SRC']}');\"></span> ".htmlspecialcharsbx($item[
'NAME']);
993 $item[
'NAME'] =
"<span class=\"catalog-list-dictionary-select-icon\" style=\"background-image:url('{$image['SRC']}');\"></span> ".htmlspecialcharsbx($item[
'NAME']);
1010 $type =
'multilist';
1012 elseif ($hasImages && $gridMode)
1024 'userType' =>
'directory',
1025 'isHtml' => $hasImages,
1027 'enableEmptyItem' =>
$settings[
'IS_REQUIRED'] ===
'N',
1035 $hlTableName = (string)(
$settings[
'USER_TYPE_SETTINGS'][
'TABLE_NAME'] ??
'');
1037 if ($hlTableName ===
'')
1043 $popupId =
'directory_popup_'.CUtil::JSEscape($propertyId);
1049 $entityFields = static::getEntityFieldsForTable($hlTableName);
1053 array_unshift($entityFields, [
1055 'UF_NAME' => Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_EMPTY_GRID_VALUE'),
1059 $checkedXmlId =
null;
1061 foreach ($entityFields as $field)
1063 if ($field[
'UF_XML_ID'] ===
$params[
'VALUE'])
1065 $checkedXmlId = $field[
'UF_XML_ID'];
1070 if (!$checkedXmlId && !empty($entityFields))
1072 $checkedXmlId = reset($entityFields)[
'UF_XML_ID'];
1075 foreach ($entityFields as $field)
1077 $checked = $field[
'UF_XML_ID'] === $checkedXmlId;
1078 $name = HtmlFilter::encode($field[
'UF_NAME']);
1079 $xmlId = HtmlFilter::encode($field[
'UF_XML_ID']);
1082 if (!empty($field[
'UF_FILE']))
1084 $image = \CFile::GetFileArray($field[
'UF_FILE']) ?:
null;
1089 if (!empty($image[
'SRC']))
1091 $selectedHtml .=
"<span class=\"catalog-productcard-select-btn-color-icon\" style=\"background-image:url('{$image['SRC']}');\"></span>";
1094 $selectedHtml .=
" <span class=\"catalog-productcard-select-param-text\">{$name}</span>";
1098 $inputId =
$params[
'FIELD_NAME'].
'_'.$xmlId.
'_'.
$params[
'ELEMENT_ID'];
1099 $checkedValue = $checked ?
'checked="checked"' :
'';
1100 $inputHtml .=
"<input style=\"display: none;\" type=\"radio\" name=\"$inputName\" id=\"$inputId\" value=\"$xmlId\" $checkedValue />";
1102 $class = $checked ?
' selected' :
'';
1105 if (!empty($image[
'SRC']))
1107 $imageHtml .=
"<span class=\"catalog-productcard-select-btn-color-icon\" style=\"background-image:url('{$image['SRC']}');\"></span>";
1111<li
class=
"catalog-productcard-popup-select-item$class">
1112 <label
for=
"$inputId" data-role=
"label_$xmlId" class=
"catalog-productcard-popup-select-label"
1113 onclick=
"selectDropDownItem(event, this, '$popupId')">
1114 $imageHtml <span
class=
"catalog-productcard-popup-select-text">
$name</span>
1118 $labelHtml .= $html;
1121 if ($selectedHtml ===
'')
1123 $selectedHtml = Loc::getMessage(
'HIBLOCK_PROP_DIRECTORY_EMPTY_GRID_VALUE');
1127<div
class=
"catalog-productcard-select">
1128 <div
class=
"catalog-productcard-select-container">
1129 <div
class=
"catalog-productcard-select-block" onclick=
"showDropDownPopup(event, this, '$popupId')">
1130 <div
class=
"catalog-productcard-select-text fix" data-role=
"currentOption">
1133 <div
class=
"catalog-productcard-select-arrow"></div>
1135 <div
class=
"catalog-productcard-popup-select" data-role=
"dropdownContent" style=
"display: none">
1136 <ul
class=
"catalog-productcard-popup-select-inner" data-propertyId=
"$propertyId">$labelHtml</ul>
1142 if (!window.showDropDownPopup)
1144 window.showDropDownPopup =
function(event, element, popupId)
1146 var popup = BX.Main.PopupManager.getPopupById(
"prop_directory_" + popupId);
1153 var contentNode = BX.clone(element.querySelector(
'[data-role="dropdownContent"]'));
1154 var items = contentNode.querySelectorAll(
'label');
1155 for (var i in items)
1157 if (items.hasOwnProperty(i))
1159 var input = document.getElementById(items[i].getAttribute(
'for'));
1160 if (BX.type.isDomNode(input) && input.checked)
1162 BX.addClass(items[i].parentNode,
'selected');
1166 BX.removeClass(items[i].parentNode,
'selected');
1171 popup = BX.Main.PopupManager.create(
1172 "prop_directory_" + popupId,
1182 draggable: {restrict:
true},
1184 content: contentNode
1191 if (!window.selectDropDownItem)
1193 window.selectDropDownItem =
function(event, element, popupId)
1195 var popup = BX.Main.PopupManager.getPopupById(
"prop_directory_" + popupId);
1198 var currentOption = popup.bindElement.querySelector(
'[data-role="currentOption"]');
1199 currentOption.innerHTML = element.innerHTML;
1210 $value = [
'VALUE' =>
$params[
'VALUE'] ??
''];
1214 $dataValue = static::getExtendedValue(
$settings, $value);
1215 if (isset($dataValue[
'UF_NAME']))
1217 $viewHtml .=
'<div class="brandblock-block-wrapper">';
1219 if (!empty($dataValue[
'UF_FILE']))
1221 $image = \CFile::GetFileArray($dataValue[
'UF_FILE']);
1224 $viewHtml .=
'<span class="brandblock-block" style="background-image:url(\'';
1225 $viewHtml .= $image[
'SRC'];
1226 $viewHtml .=
'\');
"></span>';
1230 $viewHtml .= htmlspecialcharsbx($dataValue['UF_NAME']);
1231 $viewHtml .= '</div>';
1237 protected static function resolveHighloadblockByTableName(string $tableName): ?array
1239 if ($tableName === '')
1243 if (!isset(self::$hlblockCache[$tableName]))
1245 $row = HL\HighloadBlockTable::getRow([
1252 '=TABLE_NAME' => $tableName,
1258 self::$hlblockCache[$tableName] = $row ?? false;
1261 return self::$hlblockCache[$tableName] ?: null;
1264 public static function cleanCache(): void
1266 self::$arFullCache = [];
1267 self::$arItemCache = [];
1268 self::$directoryMap = [];
1269 self::$hlblockCache = [];
1270 self::$hlblockClassNameCache = [];
if($_SERVER $defaultValue['REQUEST_METHOD']==="GET" &&!empty($RestoreDefaults) && $bizprocPerms==="W" &&check_bitrix_sessid())
static GetUIEntityEditorPropertyEditHtml(array $params=[])
static GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
static GetSearchContent($arProperty, $value, $strHTMLControlName)
static PrepareSettings($arProperty)
static GetPublicEditHTML($property, $value, $control)
static array $hlblockClassNameCache
static GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
static array $hlblockCache
static GetExtendedValue($arProperty, $value)
static array $arFullCache
static GetOptionsData($arProperty)
static AddFilterFields($arProperty, $strHTMLControlName, &$arFilter, &$filtered)
static GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
static GetUserTypeDescription()
static GetUIEntityEditorPropertyViewHtml(array $params=[])
static array $arItemCache
static GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
static createHighloadTableName($name)
static GetUIEntityEditorProperty($settings, $value)
static GetPublicEditHTMLMulty($property, $value, $control)
static array $directoryMap
static GetUIFilterProperty($property, $strHTMLControlName, &$field)
static GetAdminFilterHTML($arProperty, $strHTMLControlName)
static GetOptionsHtml($arProperty, $values)
static Init($arExt=array(), $bReturn=false)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Form FILTER_ACTION disabled
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
$GLOBALS['_____370096793']
if(file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log") &&is_file($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log") &&is_readable($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/updater.log")) $rsData