17 'DESCRIPTION' => Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_DESCR'),
18 'GetPropertyFieldHtml' => [__CLASS__,
'GetPropertyFieldHtml'],
19 'GetPropertyFieldHtmlMulty' => [__CLASS__,
'GetPropertyFieldHtmlMulty'],
20 'GetAdminListViewHTML' => [__CLASS__,
'GetAdminListViewHTML'],
21 'GetPublicViewHTML' => [__CLASS__,
'GetPublicViewHTML'],
22 'GetPublicEditHTML' => [__CLASS__,
'GetPublicEditHTML'],
23 'GetPublicEditHTMLMulty' => [__CLASS__,
'GetPublicEditHTML'],
24 'GetAdminFilterHTML' => [__CLASS__,
'GetAdminFilterHTML'],
25 'GetSettingsHTML' => [__CLASS__,
'GetSettingsHTML'],
26 'PrepareSettings' => [__CLASS__,
'PrepareSettings'],
27 'AddFilterFields' => [__CLASS__,
'AddFilterFields'],
28 'GetPublicFilterHTML' => [__CLASS__,
'GetPublicFilterHTML'],
29 'GetUIFilterProperty' => [__CLASS__,
'GetUIFilterProperty'],
30 'GetUIEntityEditorProperty' => [__CLASS__,
'GetUIEntityEditorProperty'],
31 'GetUIEntityEditorPropertyEditHtml' => [__CLASS__,
'GetUIEntityEditorPropertyEditHtml'],
32 'GetUIEntityEditorPropertyViewHtml' => [__CLASS__,
'GetUIEntityEditorPropertyViewHtml'],
39 $mxResult = static::GetPropertyValue($arProperty,$arValue);
40 if (is_array($mxResult))
42 $strResult =
htmlspecialcharsbx(str_replace($arBanSym,$arRepSym,$mxResult[
'~NAME'])).
' ['.$mxResult[
'ID'].
']';
65 foreach (
$arValues as $intPropertyValueID => $arOneValue)
67 if (!is_array($arOneValue))
69 $strTmp = $arOneValue;
74 $mxResult = static::GetPropertyValue($arProperty,$arOneValue);
75 if (is_array($mxResult))
94 $arSettings = static::PrepareSettings($arProperty);
95 $arSymbols = static::GetSymbols($arSettings);
97 $arProperty[
'LINK_IBLOCK_ID'] = (int)$arProperty[
'LINK_IBLOCK_ID'];
98 $fixIBlock = $arProperty[
"LINK_IBLOCK_ID"] > 0;
99 $windowTableId =
'iblockprop-'.Iblock\PropertyTable::TYPE_SECTION.
'-'.$arProperty[
'ID'].
'-'.$arProperty[
'LINK_IBLOCK_ID'];
101 if (isset($strHTMLControlName[
'MODE']) && $strHTMLControlName[
'MODE'] ==
'iblock_element_admin')
103 $searchUrl = static::getSearchUrl().
'?lang='.LANGUAGE_ID.
104 '&IBLOCK_ID='.$arProperty[
'LINK_IBLOCK_ID'].
105 '&n='.urlencode($strHTMLControlName[
"VALUE"]).
106 '&hideiblock='.$arProperty[
'IBLOCK_ID'].
107 ($fixIBlock ?
'&iblockfix=y' :
'').
108 '&tableId='.$windowTableId;
109 $mxElement = static::GetPropertyValue($arProperty,$arValue);
110 if (!is_array($mxElement))
112 $strResult =
'<input type="text" name="'.htmlspecialcharsbx($strHTMLControlName[
"VALUE"]).
'" id="'.$strHTMLControlName[
"VALUE"].
'" value="" size="5">'.
113 '<input type="button" value="..." onClick="jsUtils.OpenWindow(\''.$searchUrl.
'\', 900, 700);
">'.
114 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'" ></span>';
118 $strResult = '<input type="text
" name="'.$strHTMLControlName["VALUE"].'" id="'.$strHTMLControlName["VALUE"].'" value="'.$arValue['VALUE
'].'" size="5
">'.
119 '<input type="button
" value="...
" onClick="jsUtils.OpenWindow(\
''.$searchUrl.
'\', 900, 700);
">'.
120 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'" >'.$mxElement['NAME'].'</span>';
127 ?><input type="hidden
" name="<?=$strHTMLControlName[
"VALUE"]?>
" value="" /><?
128 $control_id = $APPLICATION->IncludeComponent(
129 "bitrix:main.lookup.input
",
132 "CONTROL_ID
" => preg_replace(
135 $strHTMLControlName["VALUE
"].'_'.mt_rand(0, 10000)
137 "INPUT_NAME
" => $strHTMLControlName["VALUE
"],
138 "INPUT_NAME_STRING
" => "inp_
".$strHTMLControlName["VALUE
"],
139 "INPUT_VALUE_STRING
" => htmlspecialcharsback(static::GetValueForAutoComplete(
142 $arSymbols['BAN_SYM'],
143 $arSymbols['REP_SYM']
145 "START_TEXT
" => Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_INVITE'),
146 "MULTIPLE
" => $arProperty["MULTIPLE
"],
147 "MAX_WIDTH
" => $arSettings['MAX_WIDTH'],
148 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
149 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
150 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
151 'REP_SYM' => $arSymbols['REP_SYM_STRING'],
154 ), null, array("HIDE_ICONS
" => "Y
")
157 if ($arSettings['VIEW'] == 'E')
159 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
160 '&IBLOCK_ID='.$arProperty['LINK_IBLOCK_ID'].
161 '&n=&k=&lookup=jsMLI_'.$control_id.
162 '&hideiblock='.$arProperty['IBLOCK_ID'].
163 ($fixIBlock ? '&iblockfix=y' : '').
164 '&tableId='.$windowTableId;
166 style="float:
left; margin-
right: 10px; margin-
top: 5px;
"
167 type="button
" value="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_SEARCH_ELEMENT'); ?>
"
168 title="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_SEARCH_ELEMENT_DESCR'); ?>
"
169 onclick="jsUtils.OpenWindow(
'<?=$searchUrl; ?>', 900, 700);
"><?
172 if ($arSettings['SHOW_ADD'] == 'Y' && $fixIBlock)
174 $strButtonCaption = '';
175 if ($arSettings['IBLOCK_MESS'] == 'Y')
177 $arLangMess = CIBlock::GetMessages($arProperty["LINK_IBLOCK_ID
"]);
178 $strButtonCaption = $arLangMess['SECTION_ADD'];
181 if ($strButtonCaption == '')
182 $strButtonCaption = Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_NEW_ELEMENT');
185 style="margin-
top: 5px;
"
187 title="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_NEW_ELEMENT_DESCR'); ?>
"
188 onclick="jsUtils.OpenWindow(
'<? echo '/bitrix/admin/
'.CIBlock::GetAdminSectionEditLink(
189 $arProperty["LINK_IBLOCK_ID"],
193 'IBLOCK_SECTION_ID
' => -1,
194 'find_section_section
' => -1,
195 'lookup
' => 'jsMLI_
'.$control_id,
196 'tableId
' => $windowTableId
198 ($fixIBlock ? '&iblockfix=y
' : '')
202 $strResult = ob_get_contents();
209 public static function GetPropertyFieldHtmlMulty($arProperty, $arValues, $strHTMLControlName)
213 $arSettings = static::PrepareSettings($arProperty);
214 $arSymbols = static::GetSymbols($arSettings);
216 $arProperty['LINK_IBLOCK_ID'] = (int)$arProperty['LINK_IBLOCK_ID'];
217 $fixIBlock = $arProperty["LINK_IBLOCK_ID
"] > 0;
218 $windowTableId = 'iblockprop-'.Iblock\PropertyTable::TYPE_SECTION.'-'.$arProperty['ID'].'-'.$arProperty['LINK_IBLOCK_ID'];
220 if (isset($strHTMLControlName['MODE']) && ('iblock_element_admin' == $strHTMLControlName['MODE']))
223 foreach ($arValues as $intPropertyValueID => $arOneValue)
225 $mxElement = static::GetPropertyValue($arProperty,$arOneValue);
226 if (is_array($mxElement))
228 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
229 '&IBLOCK_ID='.$arProperty["LINK_IBLOCK_ID
"].
230 '&n='.urlencode($strHTMLControlName["VALUE
"].'['.$intPropertyValueID.']').
231 '&hideiblock='.$arProperty['IBLOCK_ID'].
232 ($fixIBlock ? '&iblockfix=y' : '').
233 '&tableId='.$windowTableId;
234 $arResult[] = '<input type="text
" name="'.$strHTMLControlName["VALUE"].'[
'.$intPropertyValueID.']
" id="'.$strHTMLControlName["VALUE"].'[
'.$intPropertyValueID.']
" value="'.$arOneValue['VALUE
'].'" size="5
">'.
235 '<input type="button
" value="...
" onClick="jsUtils.OpenWindow(\
''.$searchUrl.
'\', 900, 700);
">'.
236 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'[
'.$intPropertyValueID.']
" >'.$mxElement['NAME'].'</span>';
241 if (0 < intval($arProperty['MULTIPLE_CNT']))
243 for ($i = 0; $i < $arProperty['MULTIPLE_CNT']; $i++)
245 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
246 '&IBLOCK_ID='.$arProperty["LINK_IBLOCK_ID
"].
247 '&n='.urlencode($strHTMLControlName["VALUE
"].'[n'.$i.']').
248 '&hideiblock='.$arProperty['IBLOCK_ID'].
249 ($fixIBlock ? '&iblockfix=y' : '').
250 '&tableId='.$windowTableId;
251 $arResult[] = '<input type="text
" name="'.$strHTMLControlName["VALUE"].'[n
'.$i.']
" id="'.$strHTMLControlName["VALUE"].'[n
'.$i.']
" value="" size="5
">'.
252 '<input type="button
" value="...
" onClick="jsUtils.OpenWindow(\
''.$searchUrl.
'\', 900, 700);
">'.
253 ' <span id="sp_
'.$strHTMLControlName["VALUE"].'[n
'.$i.']
" ></span>';
258 $strResult = implode('<br />',$arResult);
262 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
263 $strResultValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n
",$mxResultValue)) : '');
266 ?><input type="hidden
" name="<?=$strHTMLControlName[
"VALUE"]?>
" value="" /><?
267 $control_id = $APPLICATION->IncludeComponent(
268 "bitrix:main.lookup.input
",
271 "CONTROL_ID
" => preg_replace(
274 $strHTMLControlName["VALUE
"].'_'.mt_rand(0, 10000)
276 "INPUT_NAME
" => $strHTMLControlName['VALUE'].'[]',
277 "INPUT_NAME_STRING
" => "inp_
".$strHTMLControlName['VALUE'],
278 "INPUT_VALUE_STRING
" => $strResultValue,
279 "START_TEXT
" => Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_INVITE'),
280 "MULTIPLE
" => $arProperty["MULTIPLE
"],
281 "MAX_WIDTH
" => $arSettings['MAX_WIDTH'],
282 "MIN_HEIGHT
" => $arSettings['MIN_HEIGHT'],
283 "MAX_HEIGHT
" => $arSettings['MAX_HEIGHT'],
284 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
285 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
286 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
287 'REP_SYM' => $arSymbols['REP_SYM_STRING'],
290 ), null, array("HIDE_ICONS
" => "Y
")
293 if ($arSettings['VIEW'] == 'E')
295 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
296 '&IBLOCK_ID='.$arProperty["LINK_IBLOCK_ID
"].
297 '&m=y&n=&k=&lookup=jsMLI_'.$control_id.
298 '&hideiblock='.$arProperty['IBLOCK_ID'].
299 ($fixIBlock ? '&iblockfix=y' : '').
300 '&tableId='.$windowTableId;
302 style="float:
left; margin-
right: 10px; margin-
top: 5px;
"
303 type="button
" value="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_SEARCH_ELEMENT'); ?>
"
304 title="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_SEARCH_ELEMENT_MULTI_DESCR'); ?>
"
305 onclick="jsUtils.OpenWindow(
'<?=$searchUrl; ?>', 900, 700);
"><?
308 if ($arSettings['SHOW_ADD'] == 'Y' && $fixIBlock)
310 $strButtonCaption = '';
311 if ($arSettings['IBLOCK_MESS'] == 'Y')
313 $arLangMess = CIBlock::GetMessages($arProperty["LINK_IBLOCK_ID
"]);
314 $strButtonCaption = $arLangMess['SECTION_ADD'];
317 if ($strButtonCaption == '')
318 $strButtonCaption = Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_NEW_ELEMENT');
321 style="margin-
top: 5px;
"
323 title="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_NEW_ELEMENT_DESCR'); ?>
"
324 onclick="jsUtils.OpenWindow(
'<? echo '/bitrix/admin/
'.CIBlock::GetAdminSectionEditLink(
325 $arProperty["LINK_IBLOCK_ID"],
329 'IBLOCK_SECTION_ID
' => -1,
330 'find_section_section
' => -1,
331 'lookup
' => 'jsMLI_
'.$control_id,
332 'tableId
' => $windowTableId
334 ($fixIBlock ? '&iblockfix=y
' : '')
337 unset($strButtonCaption);
339 $strResult = ob_get_contents();
346 public static function GetAdminListViewHTML($arProperty, $arValue, $strHTMLControlName)
349 $mxResult = static::GetPropertyValue($arProperty,$arValue);
350 if (is_array($mxResult))
352 $strResult = $mxResult['NAME'].' [<a href="/bitrix/admin/
'.
353 CIBlock::GetAdminSectionEditLink(
354 $mxResult['IBLOCK_ID
'],
359 ).'" title="'.Loc::getMessage("BT_UT_SAUTOCOMPLETE_MESS_ELEMENT_EDIT").'">'.$mxResult['ID'].'</a>]';
365 public static function GetPublicViewHTML($arProperty, $arValue, $strHTMLControlName)
367 static $cache = array();
370 $arValue['VALUE'] = (int)($arValue['VALUE'] ?? 0);
371 if ($arValue['VALUE'] > 0)
373 if (!isset($cache[$arValue['VALUE']]))
376 $intIBlockID = intval($arProperty['LINK_IBLOCK_ID']);
377 if (0 < $intIBlockID) $arFilter['IBLOCK_ID'] = $intIBlockID;
378 $arFilter['ID'] = $arValue['VALUE'];
379 $arFilter["ACTIVE
"] = "Y
";
380 $arFilter["CHECK_PERMISSIONS
"] = "Y
";
381 $arFilter["MIN_PERMISSION
"] = "R
";
382 $rsElements = CIBlockSection::GetList(
386 array("ID
","IBLOCK_ID
","NAME
","SECTION_PAGE_URL
")
388 if (isset($strHTMLControlName['SECTION_URL']))
390 $rsElements->SetUrlTemplates('', $strHTMLControlName['SECTION_URL']);
392 $cache[$arValue['VALUE']] = $rsElements->GetNext(true,true);
394 if (is_array($cache[$arValue['VALUE']]))
396 if (isset($strHTMLControlName['MODE']) && 'CSV_EXPORT' == $strHTMLControlName['MODE'])
398 $strResult = $cache[$arValue['VALUE']]['ID'];
400 elseif (isset($strHTMLControlName['MODE']) && ('SIMPLE_TEXT' == $strHTMLControlName['MODE'] || 'ELEMENT_TEMPLATE' == $strHTMLControlName['MODE']))
402 $strResult = $cache[$arValue['VALUE']]["~NAME
"];
406 $strResult = '<a href="'.$cache[$arValue['VALUE
']]["SECTION_PAGE_URL"].'">'.$cache[$arValue['VALUE']]["NAME
"].'</a>';
414 public static function GetPublicEditHTML($property, $value, $control)
418 $multi = (isset($property['MULTIPLE']) && $property['MULTIPLE'] == 'Y');
419 $settings = static::PrepareSettings($property);
420 $symbols = static::GetSymbols($settings);
421 $fixIBlock = $property["LINK_IBLOCK_ID
"] > 0;
427 $resultValue = static::GetValueForAutoCompleteMulti(
433 $resultValue = (is_array($resultValue) ? htmlspecialcharsback(implode("\n
",$resultValue)) : '');
437 $resultValue = htmlspecialcharsback(static::GetValueForAutoComplete(
445 $APPLICATION->IncludeComponent(
446 'bitrix:main.lookup.input',
449 'CONTROL_ID' => preg_replace(
452 $control['VALUE'].'_'.mt_rand(0, 10000)
454 'INPUT_NAME' => $control['VALUE'].($multi ? '[]' : ''),
455 'INPUT_NAME_STRING' => 'inp_'.$control['VALUE'],
456 'INPUT_VALUE_STRING' => $resultValue,
457 'START_TEXT' => Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_INVITE'),
458 'MULTIPLE' => $property['MULTIPLE'],
459 'IBLOCK_ID' => $property['LINK_IBLOCK_ID'],
460 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
461 'BAN_SYM' => $symbols['BAN_SYM_STRING'],
462 'REP_SYM' => $symbols['REP_SYM_STRING'],
463 'MAX_WIDTH' => $settings['MAX_WIDTH'],
464 'MIN_HEIGHT' => $settings['MIN_HEIGHT'],
465 'MAX_HEIGHT' => $settings['MAX_HEIGHT'],
469 ($control['PARENT_COMPONENT'] ?? null),
470 array('HIDE_ICONS' => 'Y')
473 $result = ob_get_contents();
479 public static function PrepareSettings($arFields)
483 * SHOW_ADD - show button for add new values in linked iblock
484 * MAX_WIDTH - max width textarea and input in pixels
485 * MIN_HEIGHT - min height textarea in pixels
486 * MAX_HEIGHT - max height textarea in pixels
487 * BAN_SYM - banned symbols string
488 * REP_SYM - replace symbol
489 * OTHER_REP_SYM - non standart replace symbol
490 * IBLOCK_MESS - get lang mess from linked iblock
492 $arViewsList = static::GetPropertyViewsList(false);
493 $strView = (isset($arFields['USER_TYPE_SETTINGS']['VIEW']) && in_array($arFields['USER_TYPE_SETTINGS']['VIEW'],$arViewsList) ? $arFields['USER_TYPE_SETTINGS']['VIEW'] : current($arViewsList));
495 $strShowAdd = ($arFields['USER_TYPE_SETTINGS']['SHOW_ADD'] ?? '');
496 $strShowAdd = ('Y' == $strShowAdd ? 'Y' : 'N');
497 if ((int)($arFields['LINK_IBLOCK_ID'] ?? 0) <= 0)
500 $intMaxWidth = intval($arFields['USER_TYPE_SETTINGS']['MAX_WIDTH'] ?? 0);
501 if (0 >= $intMaxWidth) $intMaxWidth = 0;
503 $intMinHeight = intval($arFields['USER_TYPE_SETTINGS']['MIN_HEIGHT'] ?? 0);
504 if (0 >= $intMinHeight) $intMinHeight = 24;
506 $intMaxHeight = intval($arFields['USER_TYPE_SETTINGS']['MAX_HEIGHT'] ?? 0);
507 if (0 >= $intMaxHeight) $intMaxHeight = 1000;
509 $strBannedSymbols = trim((string)($arFields['USER_TYPE_SETTINGS']['BAN_SYM'] ?? ',;'));
510 $strBannedSymbols = str_replace(' ','',$strBannedSymbols);
511 if (false === mb_strpos($strBannedSymbols, ','))
512 $strBannedSymbols .= ',';
513 if (false === mb_strpos($strBannedSymbols, ';'))
514 $strBannedSymbols .= ';';
516 $strOtherReplaceSymbol = '';
517 $strReplaceSymbol = ($arFields['USER_TYPE_SETTINGS']['REP_SYM'] ?? ' ');
518 if (BT_UT_AUTOCOMPLETE_REP_SYM_OTHER == $strReplaceSymbol)
520 $strOtherReplaceSymbol = (isset($arFields['USER_TYPE_SETTINGS']['OTHER_REP_SYM'])? mb_substr($arFields['USER_TYPE_SETTINGS']['OTHER_REP_SYM'], 0, 1) : '');
521 if ((',' == $strOtherReplaceSymbol) || (';' == $strOtherReplaceSymbol))
522 $strOtherReplaceSymbol = '';
523 if (('' == $strOtherReplaceSymbol) || in_array($strOtherReplaceSymbol,static::GetReplaceSymList()))
525 $strReplaceSymbol = $strOtherReplaceSymbol;
526 $strOtherReplaceSymbol = '';
529 if ('' == $strReplaceSymbol)
531 $strReplaceSymbol = ' ';
532 $strOtherReplaceSymbol = '';
535 $strIBlockMess = ($arFields['USER_TYPE_SETTINGS']['IBLOCK_MESS'] ?? '');
536 if ('Y' != $strIBlockMess) $strIBlockMess = 'N';
540 'SHOW_ADD' => $strShowAdd,
541 'MAX_WIDTH' => $intMaxWidth,
542 'MIN_HEIGHT' => $intMinHeight,
543 'MAX_HEIGHT' => $intMaxHeight,
544 'BAN_SYM' => $strBannedSymbols,
545 'REP_SYM' => $strReplaceSymbol,
546 'OTHER_REP_SYM' => $strOtherReplaceSymbol,
547 'IBLOCK_MESS' => $strIBlockMess,
551 public static function GetSettingsHTML($arFields,$strHTMLControlName, &$arPropertyFields)
553 $arPropertyFields = [
554 "HIDE
" => ["ROW_COUNT
", "COL_COUNT
","MULTIPLE_CNT
"],
555 'USER_TYPE_SETTINGS_TITLE' => Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_TITLE'),
558 $arSettings = static::PrepareSettings($arFields);
561 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_VIEW').'</td>
562 <td>'.SelectBoxFromArray($strHTMLControlName["NAME
"].'[VIEW]',static::GetPropertyViewsList(true),htmlspecialcharsbx($arSettings['VIEW'])).'</td>
565 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_SHOW_ADD').'</td>
566 <td>'.InputType('checkbox',$strHTMLControlName["NAME
"].'[SHOW_ADD]','Y',htmlspecialcharsbx($arSettings["SHOW_ADD
"])).'</td>
569 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_IBLOCK_MESS').'</td>
570 <td>'.InputType('checkbox',$strHTMLControlName["NAME
"].'[IBLOCK_MESS]','Y',htmlspecialcharsbx($arSettings["IBLOCK_MESS
"])).'</td>
573 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_MAX_WIDTH').'</td>
574 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[MAX_WIDTH]
" value="'.intval($arSettings['MAX_WIDTH
']).'"> '.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_COMMENT_MAX_WIDTH').'</td>
577 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_MIN_HEIGHT').'</td>
578 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[MIN_HEIGHT]
" value="'.intval($arSettings['MIN_HEIGHT
']).'"> '.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_COMMENT_MIN_HEIGHT').'</td>
581 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_MAX_HEIGHT').'</td>
582 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[MAX_HEIGHT]
" value="'.intval($arSettings['MAX_HEIGHT
']).'"> '.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_COMMENT_MAX_HEIGHT').'</td>
585 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_BAN_SYMBOLS').'</td>
586 <td><input type="text
" name="'.$strHTMLControlName["NAME"].'[BAN_SYM]
" value="'.htmlspecialcharsbx($arSettings['BAN_SYM
']).'"></td>
589 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_REP_SYMBOL').'</td>
590 <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>
595 public static function GetAdminFilterHTML($arProperty, $strHTMLControlName)
599 $arSettings = static::PrepareSettings($arProperty);
600 $arSymbols = static::GetSymbols($arSettings);
601 $fixIBlock = $arProperty["LINK_IBLOCK_ID
"] > 0;
602 $windowTableId = 'iblockprop-'.Iblock\PropertyTable::TYPE_SECTION.'-'.$arProperty['ID'].'-'.$arProperty['LINK_IBLOCK_ID'];
604 $isMainUiFilter = ($strHTMLControlName["FORM_NAME
"] ?? '') === 'main-ui-filter';
605 $inputName = $strHTMLControlName['VALUE'].'[]';
608 $inputName = $strHTMLControlName['VALUE'];
613 if (isset($_REQUEST[$strHTMLControlName["VALUE
"]]) && (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) || (0 < intval($_REQUEST[$strHTMLControlName["VALUE
"]]))))
615 $arFilterValues = (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) ? $_REQUEST[$strHTMLControlName["VALUE
"]] : array($_REQUEST[$strHTMLControlName["VALUE
"]]));
616 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arFilterValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
617 $strValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n
",$mxResultValue)) : '');
619 elseif (isset($GLOBALS[$strHTMLControlName["VALUE
"]]) && (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) || (0 < intval($GLOBALS[$strHTMLControlName["VALUE
"]]))))
621 $arFilterValues = (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) ? $GLOBALS[$strHTMLControlName["VALUE
"]] : array($GLOBALS[$strHTMLControlName["VALUE
"]]));
622 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arFilterValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
623 $strValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n
",$mxResultValue)) : '');
627 $control_id = $APPLICATION->IncludeComponent(
628 "bitrix:main.lookup.input
",
631 "INPUT_NAME
" => $inputName,
632 "INPUT_NAME_STRING
" => "inp_
".$strHTMLControlName['VALUE'],
633 "INPUT_VALUE_STRING
" => $strValue,
635 "MULTIPLE
" => $isMainUiFilter ? 'N' : 'Y', // TODO
636 'MAX_WIDTH' => '200',
637 'MIN_HEIGHT' => '24',
638 "IBLOCK_ID
" => $arProperty["LINK_IBLOCK_ID
"],
639 'WITHOUT_IBLOCK' => (!$fixIBlock ? 'Y' : 'N'),
640 'BAN_SYM' => $arSymbols['BAN_SYM_STRING'],
641 'REP_SYM' => $arSymbols['REP_SYM_STRING'],
643 'MAIN_UI_FILTER' => ($isMainUiFilter ? 'Y' : 'N'),
645 ), null, array("HIDE_ICONS
" => "Y
")
647 $inputStyle = 'float: left; margin-right: 10px;';
650 $inputStyle = 'float: left; margin-right: 4px; margin-top: 7px; margin-left: 10px;';
652 ?><input style="<?=$inputStyle?>
" type="button
" value="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_SEARCH_ELEMENT'); ?>
"
653 title="<? echo Loc::getMessage(
'BT_UT_SAUTOCOMPLETE_MESS_SEARCH_ELEMENT_MULTI_DESCR'); ?>
"
654 onclick="jsUtils.OpenWindow(
'/bitrix/admin/iblock_section_search.php?lang=<? echo LANGUAGE_ID; ?>&IBLOCK_ID=<? echo $arProperty["LINK_IBLOCK_ID"]; ?>&m=Y&n=&k=&lookup=<? echo 'jsMLI_
'.$control_id; ?><?=($fixIBlock ? '&iblockfix=y
' : '').'&tableId=
'.$windowTableId; ?>', 900, 700);
"
657 var arClearHiddenFields = arClearHiddenFields;
658 if (!!arClearHiddenFields)
660 indClearHiddenFields = arClearHiddenFields.length;
661 arClearHiddenFields[indClearHiddenFields] = 'jsMLI_<? echo $control_id; ?>';
664 $strResult = ob_get_contents();
670 public static function AddFilterFields($arProperty, $strHTMLControlName, &$arFilter, &$filtered)
674 $arFilterValues = array();
676 if (isset($strHTMLControlName["FILTER_ID
"]))
678 $filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID
"]);
679 $filterData = $filterOption->getFilter();
680 if (!empty($filterData[$strHTMLControlName["VALUE
"]]))
682 $arFilterValues = (is_array($filterData[$strHTMLControlName["VALUE
"]]) ?
683 $filterData[$strHTMLControlName["VALUE
"]] : array($filterData[$strHTMLControlName["VALUE
"]]));
688 if (isset($_REQUEST[$strHTMLControlName["VALUE
"]]) && (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) ||
689 (0 < intval($_REQUEST[$strHTMLControlName["VALUE
"]]))))
691 $arFilterValues = (is_array($_REQUEST[$strHTMLControlName["VALUE
"]]) ?
692 $_REQUEST[$strHTMLControlName["VALUE
"]] : array($_REQUEST[$strHTMLControlName["VALUE
"]]));
694 elseif (isset($GLOBALS[$strHTMLControlName["VALUE
"]]) && (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) ||
695 (0 < intval($GLOBALS[$strHTMLControlName["VALUE
"]]))))
697 $arFilterValues = (is_array($GLOBALS[$strHTMLControlName["VALUE
"]]) ?
698 $GLOBALS[$strHTMLControlName["VALUE
"]] : array($GLOBALS[$strHTMLControlName["VALUE
"]]));
702 foreach ($arFilterValues as $key => $value)
704 if (0 >= intval($value))
705 unset($arFilterValues[$key]);
708 if (!empty($arFilterValues))
710 $arFilter["=PROPERTY_
".$arProperty["ID
"]] = $arFilterValues;
715 protected static function GetLinkElement($elementId, $iblockId)
719 $iblockId = (int)$iblockId;
722 $elementId = (int)$elementId;
725 if (!isset($cache[$elementId]))
729 $arFilter['IBLOCK_ID'] = $iblockId;
730 $arFilter['ID'] = $elementId;
731 $sectionRes = CIBlockSection::GetList([], $arFilter, false, ['IBLOCK_ID','ID','NAME']);
732 if ($section = $sectionRes->GetNext(true,true))
735 'ID' => $section['ID'],
736 'NAME' => $section['NAME'],
737 '~NAME' => $section['~NAME'],
738 'IBLOCK_ID' => $section['IBLOCK_ID'],
740 $cache[$elementId] = $result;
744 $cache[$elementId] = false;
748 return $cache[$elementId];
751 protected static function GetPropertyValue($arProperty,$arValue)
755 if ((int)($arValue['VALUE'] ?? 0) > 0)
757 $mxResult = static::GetLinkElement((int)$arValue['VALUE'], (int)$arProperty['LINK_IBLOCK_ID']);
758 if (is_array($mxResult))
760 $mxResult['PROPERTY_ID'] = $arProperty['ID'];
761 if (isset($arProperty['PROPERTY_VALUE_ID']))
763 $mxResult['PROPERTY_VALUE_ID'] = $arProperty['PROPERTY_VALUE_ID'];
767 $mxResult['PROPERTY_VALUE_ID'] = false;
774 protected static function GetPropertyViewsList($boolFull)
776 $boolFull = (true == $boolFull);
780 'REFERENCE' => array(
781 Loc::getMessage('BT_UT_SAUTOCOMPLETE_VIEW_AUTO'),
782 Loc::getMessage('BT_UT_SAUTOCOMPLETE_VIEW_ELEMENT'),
784 'REFERENCE_ID' => array(
789 return array('A','E');
792 protected static function GetReplaceSymList($boolFull = false)
794 $boolFull = (true == $boolFull);
798 'REFERENCE' => array(
799 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_SPACE'),
800 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_GRID'),
801 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_STAR'),
802 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_UNDERLINE'),
803 Loc::getMessage('BT_UT_AUTOCOMPLETE_SYM_OTHER'),
806 'REFERENCE_ID' => array(
811 BT_UT_AUTOCOMPLETE_REP_SYM_OTHER,
815 return array(' ', '#', '*','_');
818 protected static function GetSymbols($arSettings)
820 $strBanSym = $arSettings['BAN_SYM'];
821 $strRepSym = (BT_UT_AUTOCOMPLETE_REP_SYM_OTHER == $arSettings['REP_SYM'] ? $arSettings['OTHER_REP_SYM'] : $arSettings['REP_SYM']);
822 $arBanSym = str_split($strBanSym,1);
824 'BAN_SYM' => $arBanSym,
825 'REP_SYM' => array_fill(0,sizeof($arBanSym),$strRepSym),
826 'BAN_SYM_STRING' => $strBanSym,
827 'REP_SYM_STRING' => $strRepSym,
837 protected static function getSearchUrl()
839 //TODO: need use \CAdminPage::getSelfFolderUrl, but in general it is impossible now
840 return (defined('SELF_FOLDER_URL') ? SELF_FOLDER_URL : '/bitrix/admin/').'iblock_section_search.php';
849 public static function GetUIFilterProperty($property, $strHTMLControlName, &$fields)
851 unset($fields['value'], $fields['filterable']);
852 $fields['type'] = 'entity_selector';
853 $fields['params'] = [
858 'id' => IblockPropertySectionProvider::ENTITY_ID,
859 'dynamicLoad' => true,
860 'dynamicSearch' => true,
862 'iblockId' => (int)($property['LINK_IBLOCK_ID'] ?? 0),
867 'allowCreateItem' => false,
873 public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string
876 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_SECTION,
877 'USER_TYPE' => Iblock\PropertyTable::USER_TYPE_SECTION_AUTOCOMPLETE,
878 'LINK_IBLOCK_ID' => (int)($params['SETTINGS']['LINK_IBLOCK_ID'] ?? 0),
879 'MULTIPLE' => ($params['SETTINGS']['MULTIPLE'] ?? 'N') === 'Y' ? 'Y' : 'N',
883 'FIELD_NAME' => $params['FIELD_NAME'],
885 'onChangeIblockElement',
887 'ENTITY_ID' => 'iblock-property-section',
890 return Iblock\UI\Input\Section::renderSelector(
892 $params['VALUE'] ?? null,
897 public static function GetUIEntityEditorPropertyViewHtml(array $params = []): string
901 if (empty($params['VALUE']))
906 if (!is_array($params['VALUE']))
908 $params['VALUE'] = [$params['VALUE']];
912 'CHECK_PERMISSIONS' => 'Y',
913 'MIN_PERMISSION' => 'R',
914 'ID' => $params['VALUE'],
916 $elementsResult = CIBlockSection::GetList(
920 ['ID', 'IBLOCK_ID', 'NAME']
923 while ($element = $elementsResult->Fetch())
925 $result .= htmlspecialcharsbx($element['NAME']) . '<br>';
927 unset($elementsResult);
934const BT_UT_SECTION_AUTOCOMPLETE_CODE = Iblock\PropertyTable::USER_TYPE_SECTION_AUTOCOMPLETE;
const USER_TYPE_SECTION_AUTOCOMPLETE
static GetPropertyFieldHtml($arProperty, $arValue, $strHTMLControlName)
static GetValueForAutoComplete($arProperty, $arValue, $arBanSym="", $arRepSym="")
static GetValueForAutoCompleteMulti($arProperty, $arValues, $arBanSym="", $arRepSym="")
static GetUserTypeDescription()
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)