20 'DESCRIPTION' => Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_DESCR'),
21 'GetPropertyFieldHtml' => [__CLASS__,
'GetPropertyFieldHtml'],
22 'GetPropertyFieldHtmlMulty' => [__CLASS__,
'GetPropertyFieldHtmlMulty'],
23 'GetAdminListViewHTML' => [__CLASS__,
'GetAdminListViewHTML'],
24 'GetPublicViewHTML' => [__CLASS__,
'GetPublicViewHTML'],
25 'GetPublicEditHTML' => [__CLASS__,
'GetPublicEditHTML'],
26 'GetPublicEditHTMLMulty' => [__CLASS__,
'GetPublicEditHTML'],
27 'GetAdminFilterHTML' => [__CLASS__,
'GetAdminFilterHTML'],
28 'GetSettingsHTML' => [__CLASS__,
'GetSettingsHTML'],
29 'PrepareSettings' => [__CLASS__,
'PrepareSettings'],
30 'AddFilterFields' => [__CLASS__,
'AddFilterFields'],
31 'GetPublicFilterHTML' => [__CLASS__,
'GetPublicFilterHTML'],
32 'GetUIFilterProperty' => [__CLASS__,
'GetUIFilterProperty'],
33 'GetUIEntityEditorProperty' => [__CLASS__,
'GetUIEntityEditorProperty'],
34 'GetUIEntityEditorPropertyEditHtml' => [__CLASS__,
'GetUIEntityEditorPropertyEditHtml'],
35 'GetUIEntityEditorPropertyViewHtml' => [__CLASS__,
'GetUIEntityEditorPropertyViewHtml'],
42 $mxResult = static::GetPropertyValue($arProperty,$arValue);
43 if (is_array($mxResult))
45 $strResult =
htmlspecialcharsbx(str_replace($arBanSym,$arRepSym,$mxResult[
'~NAME'])).
' ['.$mxResult[
'ID'].
']';
68 foreach (
$arValues as $intPropertyValueID => $arOneValue)
70 if (!is_array($arOneValue))
72 $strTmp = $arOneValue;
77 $mxResult = static::GetPropertyValue($arProperty,$arOneValue);
78 if (is_array($mxResult))
97 $arSettings = static::PrepareSettings($arProperty);
98 if (isset($arSettings[
'USER_TYPE_SETTINGS']))
100 $arSettings = $arSettings[
'USER_TYPE_SETTINGS'];
102 $arSymbols = static::GetSymbols($arSettings);
104 $arProperty[
'LINK_IBLOCK_ID'] = (int)$arProperty[
'LINK_IBLOCK_ID'];
105 $fixIBlock = $arProperty[
'LINK_IBLOCK_ID'] > 0;
106 $windowTableId =
'iblockprop-'.Iblock\PropertyTable::TYPE_ELEMENT.
'-'.$arProperty[
'ID'].
'-'.$arProperty[
'LINK_IBLOCK_ID'];
108 if (isset($strHTMLControlName[
'MODE']) && $strHTMLControlName[
'MODE'] ==
'iblock_element_admin')
110 $searchUrl = static::getSearchUrl().
'?lang='.LANGUAGE_ID.
111 '&IBLOCK_ID='.$arProperty[
'LINK_IBLOCK_ID'].
112 '&n='.urlencode($strHTMLControlName[
'VALUE']).
113 ($fixIBlock ?
'&iblockfix=y' :
'').
114 '&tableId='.$windowTableId;
115 $mxElement = static::GetPropertyValue($arProperty,$arValue);
116 if (!is_array($mxElement))
118 $strResult =
'<input type="text" name="'.htmlspecialcharsbx($strHTMLControlName[
"VALUE"]).
'" id="'.$strHTMLControlName[
"VALUE"].
'" value="" size="5">'.
119 '<input type="button" value="..." onClick="jsUtils.OpenWindow(\''.$searchUrl.
'\', 900, 700);
">'.
120 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'" ></span>';
124 $strResult = '<input type="text
" name="'.$strHTMLControlName["VALUE"].'" id="'.$strHTMLControlName["VALUE"].'" value="'.$arValue['VALUE
'].'" size="5
">'.
125 '<input type="button
" value="...
" onClick="jsUtils.OpenWindow(\
''.$searchUrl.
'\', 900, 700);
">'.
126 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'" >'.$mxElement['NAME'].'</span>';
133 ?><input type="hidden
" name="<?=$strHTMLControlName[
"VALUE"]?>
" value="" /><?
134 $control_id = $APPLICATION->IncludeComponent(
135 "bitrix:main.lookup.input
",
138 "CONTROL_ID
" => preg_replace(
141 $strHTMLControlName["VALUE
"].'_'.mt_rand(0, 10000)
143 "INPUT_NAME
" => $strHTMLControlName["VALUE
"],
144 "INPUT_NAME_STRING
" => "inp_
".$strHTMLControlName["VALUE
"],
145 "INPUT_VALUE_STRING
" => htmlspecialcharsback(static::GetValueForAutoComplete(
148 $arSymbols['BAN_SYM'],
149 $arSymbols['REP_SYM']
151 "START_TEXT
" => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_INVITE'),
152 "MULTIPLE
" => $arProperty["MULTIPLE
"],
153 "MAX_WIDTH
" => $arSettings['MAX_WIDTH'],
154 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
155 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
156 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
157 'REP_SYM' => $arSymbols['REP_SYM_STRING'],
159 ), null, array("HIDE_ICONS
" => "Y
")
162 if ($arSettings['VIEW'] == 'T')
164 $APPLICATION->IncludeComponent(
165 'bitrix:main.tree.selector',
168 "INPUT_NAME
" => $strHTMLControlName["VALUE
"],
169 'ONSELECT' => 'jsMLI_'.$control_id.'.SetValue',
170 'MULTIPLE' => $arProperty["MULTIPLE
"],
172 'SHOW_BUTTON' => 'Y',
173 'GET_FULL_INFO' => 'Y',
174 "START_TEXT
" => Loc::getMessage("BT_UT_EAUTOCOMPLETE_MESS_LIST_INVITE
"),
175 'BUTTON_CAPTION' => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_CHOOSE_ELEMENT'),
176 'BUTTON_TITLE' => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_CHOOSE_ELEMENT_DESCR'),
177 "NO_SEARCH_RESULT_TEXT
" => Loc::getMessage("BT_UT_EAUTOCOMPLETE_MESS_NO_SEARCH_RESULT_TEXT
"),
178 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
179 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
180 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
181 'REP_SYM' => $arSymbols['REP_SYM_STRING']
182 ), null, array("HIDE_ICONS
" => "Y
")
186 elseif ($arSettings['VIEW'] == 'E')
188 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
189 '&IBLOCK_ID='.$arProperty['LINK_IBLOCK_ID'].
190 '&n=&k=&lookup=jsMLI_'.$control_id.
191 ($fixIBlock ? '&iblockfix=y' : '').
192 '&tableId='.$windowTableId;
193 ?><input style="float:
left; margin-
right: 10px; margin-
top: 5px;
"
194 type="button
" value="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_SEARCH_ELEMENT'); ?>
"
195 title="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_SEARCH_ELEMENT_DESCR'); ?>
"
196 onclick="jsUtils.OpenWindow(
'<?=$searchUrl; ?>', 900, 700);
"><?
198 if ($arSettings['SHOW_ADD'] == 'Y' && $fixIBlock)
200 $strButtonCaption = '';
201 if ($arSettings['IBLOCK_MESS'] == 'Y')
203 $arLangMess = CIBlock::GetMessages($arProperty["LINK_IBLOCK_ID
"]);
204 $strButtonCaption = $arLangMess['ELEMENT_ADD'];
207 if ($strButtonCaption == '')
208 $strButtonCaption = Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_NEW_ELEMENT');
209 ?><input type="button
" style="margin-
top: 5px;
" value="<? echo
htmlspecialcharsbx($strButtonCaption); ?>
"
210 title="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_NEW_ELEMENT_DESCR'); ?>
"
211 onclick="jsUtils.OpenWindow(
'<? echo '/bitrix/admin/
'.CIBlock::GetAdminElementEditLink(
212 $arProperty["LINK_IBLOCK_ID"],
216 'IBLOCK_SECTION_ID
' => -1,
217 'find_section_section
' => -1,
218 'lookup
' => 'jsMLI_
'.$control_id,
219 'tableId
' => $windowTableId
221 ($fixIBlock ? '&iblockfix=y
' : '')
224 unset($strButtonCaption);
226 $strResult = ob_get_contents();
233 public static function GetPropertyFieldHtmlMulty($arProperty, $arValues, $strHTMLControlName)
237 $arSettings = static::PrepareSettings($arProperty);
238 if (isset($arSettings['USER_TYPE_SETTINGS']))
240 $arSettings = $arSettings['USER_TYPE_SETTINGS'];
242 $arSymbols = static::GetSymbols($arSettings);
244 $arProperty['LINK_IBLOCK_ID'] = (int)$arProperty['LINK_IBLOCK_ID'];
245 $fixIBlock = $arProperty['LINK_IBLOCK_ID'] > 0;
246 $windowTableId = 'iblockprop-'.Iblock\PropertyTable::TYPE_ELEMENT.'-'.$arProperty['ID'].'-'.$arProperty['LINK_IBLOCK_ID'];
248 if (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'iblock_element_admin')
251 foreach ($arValues as $intPropertyValueID => $arOneValue)
253 $mxElement = static::GetPropertyValue($arProperty,$arOneValue);
254 if (is_array($mxElement))
256 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
257 '&IBLOCK_ID='.$arProperty['LINK_IBLOCK_ID'].
258 '&n='.urlencode($strHTMLControlName["VALUE
"].'['.$intPropertyValueID.']').
259 ($fixIBlock ? '&iblockfix=y' : '').
260 '&tableId='.$windowTableId;
261 $arResult[] = '<input type="text
" name="'.$strHTMLControlName["VALUE"].'[
'.$intPropertyValueID.']
" id="'.$strHTMLControlName["VALUE"].'[
'.$intPropertyValueID.']
" value="'.$arOneValue['VALUE
'].'" size="5
">'.
262 '<input type="button
" value="...
" onClick="jsUtils.OpenWindow(\
''.$searchUrl.
'\', 900, 700);
">'.
263 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'[
'.$intPropertyValueID.']
" >'.$mxElement['NAME'].'</span>';
268 if ((int)$arProperty['MULTIPLE_CNT'] > 0)
270 for ($i = 0; $i < $arProperty['MULTIPLE_CNT']; $i++)
272 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
273 '&IBLOCK_ID='.$arProperty['LINK_IBLOCK_ID'].
274 '&n='.urlencode($strHTMLControlName["VALUE
"].'[n'.$i.']').
275 ($fixIBlock ? '&iblockfix=y' : '').
276 '&tableId='.$windowTableId;
277 $arResult[] = '<input type="text
" name="'.$strHTMLControlName["VALUE"].'[n
'.$i.']
" id="'.$strHTMLControlName["VALUE"].'[n
'.$i.']
" value="" size="5
">'.
278 '<input type="button
" value="...
" onClick="jsUtils.OpenWindow(\
''.$searchUrl.
'\', 900, 700);
">'.
279 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'[n
'.$i.']
" ></span>';
284 $strResult = implode('<br />',$arResult);
288 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
289 $strResultValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n
",$mxResultValue)) : '');
292 ?><input type="hidden
" name="<?=$strHTMLControlName[
"VALUE"]?>
" value="" /><?
293 $control_id = $APPLICATION->IncludeComponent(
294 "bitrix:main.lookup.input
",
297 "CONTROL_ID
" => preg_replace(
300 $strHTMLControlName["VALUE
"].'_'.mt_rand(0, 10000)
302 "INPUT_NAME
" => $strHTMLControlName['VALUE'].'[]',
303 "INPUT_NAME_STRING
" => "inp_
".$strHTMLControlName['VALUE'],
304 "INPUT_VALUE_STRING
" => $strResultValue,
305 "START_TEXT
" => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_INVITE'),
306 "MULTIPLE
" => $arProperty["MULTIPLE
"],
307 "MAX_WIDTH
" => $arSettings['MAX_WIDTH'],
308 "MIN_HEIGHT
" => $arSettings['MIN_HEIGHT'],
309 "MAX_HEIGHT
" => $arSettings['MAX_HEIGHT'],
310 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
311 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
312 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
313 'REP_SYM' => $arSymbols['REP_SYM_STRING'],
315 ), null, array("HIDE_ICONS
" => "Y
")
318 if ($arSettings['VIEW'] == 'T')
320 $APPLICATION->IncludeComponent(
321 'bitrix:main.tree.selector',
324 "INPUT_NAME
" => $strHTMLControlName['VALUE'],
325 'ONSELECT' => 'jsMLI_'.$control_id.'.SetValue',
326 'MULTIPLE' => $arProperty["MULTIPLE
"],
328 'SHOW_BUTTON' => 'Y',
329 'GET_FULL_INFO' => 'Y',
330 "START_TEXT
" => Loc::getMessage("BT_UT_EAUTOCOMPLETE_MESS_LIST_INVITE
"),
331 'BUTTON_CAPTION' => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_CHOOSE_ELEMENT'),
332 'BUTTON_TITLE' => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_CHOOSE_ELEMENT_MULTI_DESCR'),
333 "NO_SEARCH_RESULT_TEXT
" => Loc::getMessage("BT_UT_EAUTOCOMPLETE_MESS_NO_SEARCH_RESULT_TEXT
"),
334 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
335 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
336 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
337 'REP_SYM' => $arSymbols['REP_SYM_STRING']
338 ), null, array("HIDE_ICONS
" => "Y
")
342 elseif ($arSettings['VIEW'] == 'E')
344 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
345 '&IBLOCK_ID='.$arProperty["LINK_IBLOCK_ID
"].
346 '&n=&k=&m=y&lookup=jsMLI_'.$control_id.
347 ($fixIBlock ? '&iblockfix=y' : '').
348 '&tableId='.$windowTableId;
350 ?><input style="float:
left; margin-
right: 10px; margin-
top: 5px;
" type="button
" value="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_SEARCH_ELEMENT'); ?>
"
351 title="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_SEARCH_ELEMENT_MULTI_DESCR'); ?>
"
352 onclick="jsUtils.OpenWindow(
'<?=$searchUrl; ?>', 900, 700);
"><?
355 if ($arSettings['SHOW_ADD'] == 'Y' && $fixIBlock)
357 $strButtonCaption = '';
358 if ($arSettings['IBLOCK_MESS'] == 'Y')
360 $arLangMess = CIBlock::GetMessages($arProperty["LINK_IBLOCK_ID
"]);
361 $strButtonCaption = $arLangMess['ELEMENT_ADD'];
364 if ('' == $strButtonCaption)
365 $strButtonCaption = Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_NEW_ELEMENT');
366 ?><input type="button
" style="margin-
top: 5px;
" value="<? echo
htmlspecialcharsbx($strButtonCaption); ?>
"
367 title="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_NEW_ELEMENT_DESCR'); ?>
"
368 onclick="jsUtils.OpenWindow(
'<? echo '/bitrix/admin/
'.CIBlock::GetAdminElementEditLink(
369 $arProperty["LINK_IBLOCK_ID"],
373 'IBLOCK_SECTION_ID
' => -1,
374 'find_section_section
' => -1,
375 'lookup
' => 'jsMLI_
'.$control_id,
376 'tableId
' => $windowTableId
378 ($fixIBlock ? '&iblockfix=y
' : '')
381 unset($strButtonCaption);
383 $strResult = ob_get_contents();
390 public static function GetAdminListViewHTML($arProperty, $arValue, $strHTMLControlName)
393 $mxResult = static::GetPropertyValue($arProperty,$arValue);
394 if (is_array($mxResult))
396 $strResult = $mxResult['NAME'].' [<a href="/bitrix/admin/
'.
397 CIBlock::GetAdminElementEditLink(
398 $mxResult['IBLOCK_ID
'],
403 ).'" title="'.Loc::getMessage("BT_UT_EAUTOCOMPLETE_MESS_ELEMENT_EDIT").'">'.$mxResult['ID'].'</a>]';
409 public static function GetPublicViewHTML($arProperty, $arValue, $strHTMLControlName)
411 static $cache = array();
414 $arValue['VALUE'] = (int)($arValue['VALUE'] ?? 0);
415 if ($arValue['VALUE'] > 0)
419 if (!empty($strHTMLControlName['MODE']))
421 switch ($strHTMLControlName['MODE'])
424 $viewMode = 'CSV_EXPORT';
428 $viewMode = 'EXTERNAL_ID';
429 $resultKey = '~XML_ID';
432 $viewMode = 'SIMPLE_TEXT';
433 $resultKey = '~NAME';
435 case 'ELEMENT_TEMPLATE':
436 $viewMode = 'ELEMENT_TEMPLATE';
437 $resultKey = '~NAME';
440 $viewMode = 'BIZPROC';
444 if (!isset($cache[$arValue['VALUE']]))
447 $intIBlockID = (int)$arProperty['LINK_IBLOCK_ID'];
448 if ($intIBlockID > 0)
450 $arFilter['IBLOCK_ID'] = $intIBlockID;
452 $arFilter['ID'] = $arValue['VALUE'];
453 if ($viewMode === '')
455 $arFilter['ACTIVE'] = 'Y';
456 $arFilter['ACTIVE_DATE'] = 'Y';
457 $arFilter['CHECK_PERMISSIONS'] = 'Y';
458 $arFilter['MIN_PERMISSION'] = 'R';
460 $rsElements = CIBlockElement::GetList(
465 array('ID', 'XML_ID', 'IBLOCK_ID', 'NAME', 'DETAIL_PAGE_URL')
467 if (isset($strHTMLControlName['DETAIL_URL']))
469 $rsElements->SetUrlTemplates($strHTMLControlName['DETAIL_URL']);
471 $cache[$arValue['VALUE']] = $rsElements->GetNext(true, true);
474 if (!empty($cache[$arValue['VALUE']]) && is_array($cache[$arValue['VALUE']]))
476 if ($viewMode !== '' && $resultKey !== '')
478 $strResult = $cache[$arValue['VALUE']][$resultKey];
482 $strResult = '<a href="'.$cache[$arValue['VALUE
']]['DETAIL_PAGE_URL
'].'">'.$cache[$arValue['VALUE']]['NAME'].'</a>';
490 public static function GetPublicEditHTML($property, $value, $control)
494 $multi = (isset($property['MULTIPLE']) && $property['MULTIPLE'] == 'Y');
495 $settings = static::PrepareSettings($property);
496 if (isset($settings['USER_TYPE_SETTINGS']))
498 $settings = $settings['USER_TYPE_SETTINGS'];
500 $symbols = static::GetSymbols($settings);
501 $fixIBlock = $property["LINK_IBLOCK_ID
"] > 0;
507 $resultValue = static::GetValueForAutoCompleteMulti(
513 $resultValue = (is_array($resultValue) ? htmlspecialcharsback(implode("\n
",$resultValue)) : '');
517 $resultValue = htmlspecialcharsback(static::GetValueForAutoComplete(
525 $APPLICATION->IncludeComponent(
526 'bitrix:main.lookup.input',
529 'CONTROL_ID' => preg_replace(
532 $control['VALUE'].'_'.mt_rand(0, 10000)
534 'INPUT_NAME' => $control['VALUE'].($multi ? '[]' : ''),
535 'INPUT_NAME_STRING' => 'inp_'.$control['VALUE'],
536 'INPUT_VALUE_STRING' => $resultValue,
537 'START_TEXT' => Loc::getMessage('BT_UT_EAUTOCOMPLETE_MESS_INVITE'),
538 'MULTIPLE' => $property['MULTIPLE'],
539 'IBLOCK_ID' => $property['LINK_IBLOCK_ID'],
540 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
541 'BAN_SYM' => $symbols['BAN_SYM_STRING'],
542 'REP_SYM' => $symbols['REP_SYM_STRING'],
543 'MAX_WIDTH' => $settings['MAX_WIDTH'],
544 'MIN_HEIGHT' => $settings['MIN_HEIGHT'],
545 'MAX_HEIGHT' => $settings['MAX_HEIGHT'],
548 ($control['PARENT_COMPONENT'] ?? null),
549 array('HIDE_ICONS' => 'Y')
552 $result = ob_get_contents();
558 public static function PrepareSettings($arFields)
562 * SHOW_ADD - show button for add new values in linked iblock
563 * MAX_WIDTH - max width textarea and input in pixels
564 * MIN_HEIGHT - min height textarea in pixels
565 * MAX_HEIGHT - max height textarea in pixels
566 * BAN_SYM - banned symbols string
567 * REP_SYM - replace symbol
568 * OTHER_REP_SYM - non standart replace symbol
569 * IBLOCK_MESS - get lang mess from linked iblock
571 $arViewsList = static::GetPropertyViewsList(false);
572 $strView = (isset($arFields['USER_TYPE_SETTINGS']['VIEW']) && in_array($arFields['USER_TYPE_SETTINGS']['VIEW'],$arViewsList) ? $arFields['USER_TYPE_SETTINGS']['VIEW'] : current($arViewsList));
574 $strShowAdd = ($arFields['USER_TYPE_SETTINGS']['SHOW_ADD'] ?? '');
575 $strShowAdd = ($strShowAdd == 'Y' ? 'Y' : 'N');
576 if ((int)($arFields['LINK_IBLOCK_ID'] ?? 0) <= 0)
579 $intMaxWidth = (int)($arFields['USER_TYPE_SETTINGS']['MAX_WIDTH'] ?? 0);
580 if ($intMaxWidth <= 0) $intMaxWidth = 0;
582 $intMinHeight = (int)($arFields['USER_TYPE_SETTINGS']['MIN_HEIGHT'] ?? 0);
583 if ($intMinHeight <= 0) $intMinHeight = 24;
585 $intMaxHeight = (int)($arFields['USER_TYPE_SETTINGS']['MAX_HEIGHT'] ?? 0);
586 if ($intMaxHeight <= 0) $intMaxHeight = 1000;
588 $strBannedSymbols = trim((string)($arFields['USER_TYPE_SETTINGS']['BAN_SYM'] ?? ',;'));
589 $strBannedSymbols = str_replace(' ', '', $strBannedSymbols);
590 if (mb_strpos($strBannedSymbols, ',') === false)
591 $strBannedSymbols .= ',';
592 if (mb_strpos($strBannedSymbols, ';') === false)
593 $strBannedSymbols .= ';';
595 $strOtherReplaceSymbol = '';
596 $strReplaceSymbol = ($arFields['USER_TYPE_SETTINGS']['REP_SYM'] ?? ' ');
597 if ($strReplaceSymbol == BT_UT_AUTOCOMPLETE_REP_SYM_OTHER)
599 $strOtherReplaceSymbol = (isset($arFields['USER_TYPE_SETTINGS']['OTHER_REP_SYM'])? mb_substr($arFields['USER_TYPE_SETTINGS']['OTHER_REP_SYM'], 0, 1) : '');
600 if ((',' == $strOtherReplaceSymbol) || (';' == $strOtherReplaceSymbol))
601 $strOtherReplaceSymbol = '';
602 if (('' == $strOtherReplaceSymbol) || in_array($strOtherReplaceSymbol, static::GetReplaceSymList()))
604 $strReplaceSymbol = $strOtherReplaceSymbol;
605 $strOtherReplaceSymbol = '';
608 if ('' == $strReplaceSymbol)
610 $strReplaceSymbol = ' ';
611 $strOtherReplaceSymbol = '';
614 $strIBlockMess = ($arFields['USER_TYPE_SETTINGS']['IBLOCK_MESS'] ?? '');
615 if ('Y' != $strIBlockMess) $strIBlockMess = 'N';
619 'SHOW_ADD' => $strShowAdd,
620 'MAX_WIDTH' => $intMaxWidth,
621 'MIN_HEIGHT' => $intMinHeight,
622 'MAX_HEIGHT' => $intMaxHeight,
623 'BAN_SYM' => $strBannedSymbols,
624 'REP_SYM' => $strReplaceSymbol,
625 'OTHER_REP_SYM' => $strOtherReplaceSymbol,
626 'IBLOCK_MESS' => $strIBlockMess,
630 public static function GetSettingsHTML($arFields,$strHTMLControlName, &$arPropertyFields)
632 $arPropertyFields = [
633 "HIDE
" => ["ROW_COUNT
", "COL_COUNT
","MULTIPLE_CNT
"],
634 'USER_TYPE_SETTINGS_TITLE' => Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_TITLE'),
637 $arSettings = static::PrepareSettings($arFields);
638 if (isset($arSettings['USER_TYPE_SETTINGS']))
640 $arSettings = $arSettings['USER_TYPE_SETTINGS'];
644 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_VIEW').'</td>
645 <td>'.SelectBoxFromArray($strHTMLControlName["NAME
"].'[VIEW]', static::GetPropertyViewsList(true),htmlspecialcharsbx($arSettings['VIEW'])).'</td>
648 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_SHOW_ADD').'</td>
649 <td>'.InputType('checkbox',$strHTMLControlName["NAME
"].'[SHOW_ADD]','Y',htmlspecialcharsbx($arSettings["SHOW_ADD
"])).'</td>
652 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_IBLOCK_MESS').'</td>
653 <td>'.InputType('checkbox',$strHTMLControlName["NAME
"].'[IBLOCK_MESS]','Y',htmlspecialcharsbx($arSettings["IBLOCK_MESS
"])).'</td>
656 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_MAX_WIDTH').'</td>
657 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[MAX_WIDTH]
" value="'.(int)$arSettings['MAX_WIDTH
'].'"> '.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_COMMENT_MAX_WIDTH').'</td>
660 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_MIN_HEIGHT').'</td>
661 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[MIN_HEIGHT]
" value="'.(int)$arSettings['MIN_HEIGHT
'].'"> '.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_COMMENT_MIN_HEIGHT').'</td>
664 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_MAX_HEIGHT').'</td>
665 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[MAX_HEIGHT]
" value="'.(int)$arSettings['MAX_HEIGHT
'].'"> '.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_COMMENT_MAX_HEIGHT').'</td>
668 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_BAN_SYMBOLS').'</td>
669 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[BAN_SYM]
" value="'.htmlspecialcharsbx($arSettings['BAN_SYM
']).'"></td>
672 <td>'.Loc::getMessage('BT_UT_EAUTOCOMPLETE_SETTING_REP_SYMBOL').'</td>
673 <td>'.SelectBoxFromArray($strHTMLControlName["NAME
"].'[REP_SYM]', static::GetReplaceSymList(true),htmlspecialcharsbx($arSettings['REP_SYM'])).' <input type="text
" name="'.$strHTMLControlName["NAME"].'[OTHER_REP_SYM]
" size="1
" maxlength="1
" value="'.htmlspecialcharsbx($arSettings['OTHER_REP_SYM
']).'"></td>
678 public static function GetAdminFilterHTML($arProperty, $strHTMLControlName)
682 $arSettings = static::PrepareSettings($arProperty);
683 if (isset($arSettings['USER_TYPE_SETTINGS']))
685 $arSettings = $arSettings['USER_TYPE_SETTINGS'];
687 $arSymbols = static::GetSymbols($arSettings);
689 $selfFolderUrl = (defined("SELF_FOLDER_URL
") ? SELF_FOLDER_URL : "/bitrix/admin/
");
691 $isMainUiFilter = ($strHTMLControlName["FORM_NAME
"] ?? '') === "main-ui-filter
";
692 $inputName = $strHTMLControlName['VALUE'].'[]';
695 $inputName = $strHTMLControlName['VALUE'];
700 $fixIBlock = $arProperty["LINK_IBLOCK_ID
"] > 0;
701 $windowTableId = 'iblockprop-'.Iblock\PropertyTable::TYPE_ELEMENT.'-'.$arProperty['ID'].'-'.$arProperty['LINK_IBLOCK_ID'];
703 if (isset($_REQUEST[$strHTMLControlName["VALUE
"]]) && (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) || (0 < (int)$_REQUEST[$strHTMLControlName["VALUE
"]])))
705 $arFilterValues = (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) ? $_REQUEST[$strHTMLControlName["VALUE
"]] : array($_REQUEST[$strHTMLControlName["VALUE
"]]));
706 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arFilterValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
707 $strValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n
",$mxResultValue)) : '');
709 elseif (isset($GLOBALS[$strHTMLControlName["VALUE
"]]) && (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) || (0 < (int)$GLOBALS[$strHTMLControlName["VALUE
"]])))
711 $arFilterValues = (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) ? $GLOBALS[$strHTMLControlName["VALUE
"]] : array($GLOBALS[$strHTMLControlName["VALUE
"]]));
712 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arFilterValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
713 $strValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n
",$mxResultValue)) : '');
717 $control_id = $APPLICATION->IncludeComponent(
718 "bitrix:main.lookup.input
",
721 "INPUT_NAME
" => $inputName,
722 "INPUT_NAME_STRING
" => "inp_
".$strHTMLControlName['VALUE'],
723 "INPUT_VALUE_STRING
" => $strValue,
725 "MULTIPLE
" => $isMainUiFilter ? 'N' : 'Y', // TODO
726 'MAX_WIDTH' => '200',
727 'MIN_HEIGHT' => '24',
728 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
729 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
730 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
731 'REP_SYM' => $arSymbols['REP_SYM_STRING'],
733 'MAIN_UI_FILTER' => ($isMainUiFilter ? 'Y' : 'N'),
734 ), null, array("HIDE_ICONS
" => "Y
")
736 $inputStyle = 'float: left; margin-right: 10px;';
739 $inputStyle = 'float: left; margin-right: 4px; margin-top: 7px; margin-left: 10px;';
741 ?><input style="<?=$inputStyle?>
" type="button
"
742 value="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_SEARCH_ELEMENT'); ?>
"
743 title="<? echo Loc::getMessage(
'BT_UT_EAUTOCOMPLETE_MESS_SEARCH_ELEMENT_MULTI_DESCR'); ?>
"
744 onclick="jsUtils.OpenWindow(
'<?=$selfFolderUrl?>iblock_element_search.php?lang=<? echo LANGUAGE_ID; ?>&IBLOCK_ID=<? echo $arProperty["LINK_IBLOCK_ID"]; ?>&n=&k=&m=y&lookup=<? echo 'jsMLI_
'.$control_id; ?><?=($fixIBlock ? '&iblockfix=y
' : '').'&tableId=
'.$windowTableId; ?>', 900, 700);
">
746 var arClearHiddenFields = arClearHiddenFields;
747 if (!!arClearHiddenFields)
749 indClearHiddenFields = arClearHiddenFields.length;
750 arClearHiddenFields[indClearHiddenFields] = 'jsMLI_<? echo $control_id; ?>';
753 $strResult = ob_get_contents();
759 public static function AddFilterFields($arProperty, $strHTMLControlName, &$arFilter, &$filtered)
762 $arFilterValues = array();
764 if (isset($strHTMLControlName["FILTER_ID
"]))
766 $filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID
"]);
767 $filterData = $filterOption->getFilter();
768 if (!empty($filterData[$strHTMLControlName["VALUE
"]]))
770 $arFilterValues = (is_array($filterData[$strHTMLControlName["VALUE
"]]) ?
771 $filterData[$strHTMLControlName["VALUE
"]] : array($filterData[$strHTMLControlName["VALUE
"]]));
776 if (isset($_REQUEST[$strHTMLControlName["VALUE
"]]) && (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) ||
777 (0 < (int)$_REQUEST[$strHTMLControlName["VALUE
"]])))
779 $arFilterValues = (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) ?
780 $_REQUEST[$strHTMLControlName["VALUE
"]] : array($_REQUEST[$strHTMLControlName["VALUE
"]]));
782 elseif (isset($GLOBALS[$strHTMLControlName["VALUE
"]]) && (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) ||
783 (0 < (int)$GLOBALS[$strHTMLControlName["VALUE
"]])))
785 $arFilterValues = (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) ?
786 $GLOBALS[$strHTMLControlName["VALUE
"]] : array($GLOBALS[$strHTMLControlName["VALUE
"]]));
790 Main\Type\Collection::normalizeArrayValuesByInt($arFilterValues, false);
792 if (!empty($arFilterValues))
794 $arFilter["=PROPERTY_
".$arProperty["ID
"]] = $arFilterValues;
805 public static function GetUIFilterProperty($property, $strHTMLControlName, &$fields)
807 unset($fields['value'], $fields['filterable']);
808 $fields['type'] = 'entity_selector';
809 $fields['params'] = [
814 'id' => IblockPropertyElementProvider::ENTITY_ID,
815 'dynamicLoad' => true,
816 'dynamicSearch' => true,
818 'iblockId' => (int)($property['LINK_IBLOCK_ID'] ?? 0),
823 'allowCreateItem' => false,
829 protected static function GetLinkElement($elementId, $iblockId)
833 $iblockId = (int)$iblockId;
836 $elementId = (int)$elementId;
839 if (!isset($cache[$elementId]))
843 $arFilter['IBLOCK_ID'] = $iblockId;
844 $arFilter['ID'] = $elementId;
845 $arFilter['SHOW_HISTORY'] = 'Y';
846 $rsElements = CIBlockElement::GetList([], $arFilter, false, false, ['IBLOCK_ID','ID','NAME']);
847 if ($arElement = $rsElements->GetNext())
850 'ID' => $arElement['ID'],
851 'NAME' => $arElement['NAME'],
852 '~NAME' => $arElement['~NAME'],
853 'IBLOCK_ID' => $arElement['IBLOCK_ID'],
855 $cache[$elementId] = $arResult;
859 $cache[$elementId] = false;
863 return $cache[$elementId];
866 protected static function GetPropertyValue($arProperty, $arValue)
869 if ((int)($arValue['VALUE'] ?? 0) > 0)
871 $mxResult = static::GetLinkElement((int)$arValue['VALUE'], (int)$arProperty['LINK_IBLOCK_ID']);
872 if (is_array($mxResult))
874 $mxResult['PROPERTY_ID'] = $arProperty['ID'];
875 if (isset($arProperty['PROPERTY_VALUE_ID']))
877 $mxResult['PROPERTY_VALUE_ID'] = $arProperty['PROPERTY_VALUE_ID'];
881 $mxResult['PROPERTY_VALUE_ID'] = false;
889 protected static function GetPropertyViewsList($boolFull)
891 $boolFull = ($boolFull === true);
895 'REFERENCE' => array(
896 Loc::getMessage('BT_UT_EAUTOCOMPLETE_VIEW_AUTO'),
897 Loc::getMessage('BT_UT_EAUTOCOMPLETE_VIEW_TREE'),
898 Loc::getMessage('BT_UT_EAUTOCOMPLETE_VIEW_ELEMENT'),
900 'REFERENCE_ID' => array(
905 return array('A','T','E');
908 protected static function GetReplaceSymList($boolFull = false)
910 $boolFull = ($boolFull === true);
914 'REFERENCE' => array(
915 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_SPACE'),
916 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_GRID'),
917 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_STAR'),
918 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_UNDERLINE'),
919 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_OTHER'),
922 'REFERENCE_ID' => array(
927 BT_UT_AUTOCOMPLETE_REP_SYM_OTHER,
931 return array(' ', '#', '*','_');
934 protected static function GetSymbols($arSettings)
936 $strBanSym = $arSettings['BAN_SYM'] ?? '';
937 $repSym = $arSettings['REP_SYM'] ?? '';
938 $otherRepSym = $arSettings['OTHER_REP_SYM'] ?? '';
939 $strRepSym = (BT_UT_AUTOCOMPLETE_REP_SYM_OTHER == $repSym ? $otherRepSym : $repSym);
940 $arBanSym = str_split($strBanSym,1);
943 'BAN_SYM' => $arBanSym,
944 'REP_SYM' => array_fill(0,sizeof($arBanSym),$strRepSym),
945 'BAN_SYM_STRING' => $strBanSym,
946 'REP_SYM_STRING' => $strRepSym,
955 protected static function getSearchUrl()
957 //TODO: need use \CAdminPage::getSelfFolderUrl, but in general it is impossible now
958 return (defined('SELF_FOLDER_URL') ? SELF_FOLDER_URL : '/bitrix/admin/').'iblock_element_search.php';
961 public static function GetUIEntityEditorProperty($settings, $value)
968 public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string
971 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_ELEMENT,
972 'USER_TYPE' => Iblock\PropertyTable::USER_TYPE_ELEMENT_AUTOCOMPLETE,
973 'LINK_IBLOCK_ID' => (int)($params['SETTINGS']['LINK_IBLOCK_ID'] ?? 0),
974 'MULTIPLE' => ($params['SETTINGS']['MULTIPLE'] ?? 'N') === 'Y' ? 'Y' : 'N',
978 'FIELD_NAME' => $params['FIELD_NAME'],
980 'onChangeIblockElement',
982 'ENTITY_ID' => IblockPropertyElementProvider::ENTITY_ID,
985 return Iblock\UI\Input\Element::renderSelector(
987 $params['VALUE'] ?? null,
992 public static function GetUIEntityEditorPropertyViewHtml(array $params = []): string
996 if (empty($params['VALUE']))
1001 if (!is_array($params['VALUE']))
1003 $params['VALUE'] = [$params['VALUE']];
1007 'CHECK_PERMISSIONS' => 'Y',
1008 'MIN_PERMISSION' => 'R',
1009 'ID' => $params['VALUE'],
1011 $elementsResult = CIBlockElement::GetList(
1016 ['ID', 'IBLOCK_ID', 'NAME']
1019 while ($element = $elementsResult->Fetch())
1021 $result .= htmlspecialcharsbx($element['NAME']) . '<br>';
1029const BT_UT_AUTOCOMPLETE_CODE = Iblock\PropertyTable::USER_TYPE_ELEMENT_AUTOCOMPLETE;
const USER_TYPE_ELEMENT_AUTOCOMPLETE
static GetPropertyFieldHtml($arProperty, $arValue, $strHTMLControlName)
static GetValueForAutoComplete($arProperty, $arValue, $arBanSym='', $arRepSym='')
static GetUserTypeDescription()
static GetValueForAutoCompleteMulti($arProperty, $arValues, $arBanSym='', $arRepSym='')
static GetAdminFilterHTML($arProperty, $strHTMLControlName)
static GetPublicFilterHTML($arProperty, $strHTMLControlName)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
bx_acc_lim_group_list limitGroupList[] multiple<?=$group[ 'ID']?> ID selected margin top
hidden mSiteList<?=htmlspecialcharsbx(serialize( $siteList))?><?=htmlspecialcharsbx( $siteList[ $j]["ID"])?> _Propery<? if(((COption::GetOptionString( $module_id, "different_set", "N")=="Y") &&( $j !=0))||(COption::GetOptionString( $module_id, "different_set", "N")=="N")) echo "display: none;"?> top adm detail content cell l top adm detail content cell r heading center center ID left
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
const BT_UT_AUTOCOMPLETE_REP_SYM_OTHER