1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
prop_section_auto.php
См. документацию.
1<?php
2
6
8{
11
12 public static function GetUserTypeDescription()
13 {
14 return [
15 'PROPERTY_TYPE' => Iblock\PropertyTable::TYPE_SECTION,
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'],
33 ];
34 }
35
36 public static function GetValueForAutoComplete($arProperty,$arValue,$arBanSym="",$arRepSym="")
37 {
38 $strResult = '';
39 $mxResult = static::GetPropertyValue($arProperty,$arValue);
40 if (is_array($mxResult))
41 {
42 $strResult = htmlspecialcharsbx(str_replace($arBanSym,$arRepSym,$mxResult['~NAME'])).' ['.$mxResult['ID'].']';
43 }
44
45 return $strResult;
46 }
47
48 public static function GetValueForAutoCompleteMulti($arProperty,$arValues,$arBanSym="",$arRepSym="")
49 {
50 $arResult = [];
51
52 if (is_array($arValues))
53 {
54 if (array_key_exists('VALUE', $arValues))
55 {
56 if (is_array($arValues['VALUE']))
57 {
58 $arValues = $arValues['VALUE'];
59 }
60 else
61 {
62 $arValues = [$arValues['VALUE']];
63 }
64 }
65 foreach ($arValues as $intPropertyValueID => $arOneValue)
66 {
67 if (!is_array($arOneValue))
68 {
69 $strTmp = $arOneValue;
70 $arOneValue = array(
71 'VALUE' => $strTmp,
72 );
73 }
74 $mxResult = static::GetPropertyValue($arProperty,$arOneValue);
75 if (is_array($mxResult))
76 {
77 $arResult[$intPropertyValueID] = htmlspecialcharsbx(str_replace($arBanSym,$arRepSym,$mxResult['~NAME'])).' ['.$mxResult['ID'].']';
78 }
79 }
80 }
81
82 return !empty($arResult) ? $arResult : false;
83 }
84
85 public static function GetPublicFilterHTML($arProperty, $strHTMLControlName)
86 {
87 return self::GetAdminFilterHTML($arProperty, $strHTMLControlName);
88 }
89
90 public static function GetPropertyFieldHtml($arProperty, $arValue, $strHTMLControlName)
91 {
92 global $APPLICATION;
93
94 $arSettings = static::PrepareSettings($arProperty);
95 $arSymbols = static::GetSymbols($arSettings);
96
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'];
100
101 if (isset($strHTMLControlName['MODE']) && $strHTMLControlName['MODE'] == 'iblock_element_admin')
102 {
103 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
104 '&amp;IBLOCK_ID='.$arProperty['LINK_IBLOCK_ID'].
105 '&amp;n='.urlencode($strHTMLControlName["VALUE"]).
106 '&amp;hideiblock='.$arProperty['IBLOCK_ID'].
107 ($fixIBlock ? '&amp;iblockfix=y' : '').
108 '&amp;tableId='.$windowTableId;
109 $mxElement = static::GetPropertyValue($arProperty,$arValue);
110 if (!is_array($mxElement))
111 {
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 '&nbsp;<span id="sp_'.$strHTMLControlName["VALUE"].'" ></span>';
115 }
116 else
117 {
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 '&nbsp;<span id="sp_'.$strHTMLControlName["VALUE"].'" >'.$mxElement['NAME'].'</span>';
121 }
122 unset($searchUrl);
123 }
124 else
125 {
126 ob_start();
127 ?><input type="hidden" name="<?=$strHTMLControlName["VALUE"]?>" value="" /><?
128 $control_id = $APPLICATION->IncludeComponent(
129 "bitrix:main.lookup.input",
130 "iblockedit",
131 array(
132 "CONTROL_ID" => preg_replace(
133 "/[^a-zA-Z0-9_]/i",
134 "x",
135 $strHTMLControlName["VALUE"].'_'.mt_rand(0, 10000)
136 ),
137 "INPUT_NAME" => $strHTMLControlName["VALUE"],
138 "INPUT_NAME_STRING" => "inp_".$strHTMLControlName["VALUE"],
139 "INPUT_VALUE_STRING" => htmlspecialcharsback(static::GetValueForAutoComplete(
140 $arProperty,
141 $arValue,
142 $arSymbols['BAN_SYM'],
143 $arSymbols['REP_SYM']
144 )),
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'],
152 'FILTER' => 'Y',
153 'TYPE' => 'SECTION'
154 ), null, array("HIDE_ICONS" => "Y")
155 );
156 ?><?
157 if ($arSettings['VIEW'] == 'E')
158 {
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;
165 ?><input
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);"><?
170 unset($searchUrl);
171 }
172 if ($arSettings['SHOW_ADD'] == 'Y' && $fixIBlock)
173 {
174 $strButtonCaption = '';
175 if ($arSettings['IBLOCK_MESS'] == 'Y')
176 {
177 $arLangMess = CIBlock::GetMessages($arProperty["LINK_IBLOCK_ID"]);
178 $strButtonCaption = $arLangMess['SECTION_ADD'];
179 unset($arLangMess);
180 }
181 if ($strButtonCaption == '')
182 $strButtonCaption = Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_NEW_ELEMENT');
183 ?><input
184 type="button"
185 style="margin-top: 5px;"
186 value="<? echo htmlspecialcharsbx($strButtonCaption); ?>"
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"],
190 null,
191 array(
192 'menu' => null,
193 'IBLOCK_SECTION_ID' => -1,
194 'find_section_section' => -1,
195 'lookup' => 'jsMLI_'.$control_id,
196 'tableId' => $windowTableId
197 ),
198 ($fixIBlock ? '&iblockfix=y' : '')
199 ); ?>', 900, 700);"
200 ><?
201 }
202 $strResult = ob_get_contents();
203 ob_end_clean();
204 }
205
206 return $strResult;
207 }
208
209 public static function GetPropertyFieldHtmlMulty($arProperty, $arValues, $strHTMLControlName)
210 {
211 global $APPLICATION;
212
213 $arSettings = static::PrepareSettings($arProperty);
214 $arSymbols = static::GetSymbols($arSettings);
215
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'];
219
220 if (isset($strHTMLControlName['MODE']) && ('iblock_element_admin' == $strHTMLControlName['MODE']))
221 {
222 $arResult = [];
223 foreach ($arValues as $intPropertyValueID => $arOneValue)
224 {
225 $mxElement = static::GetPropertyValue($arProperty,$arOneValue);
226 if (is_array($mxElement))
227 {
228 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
229 '&amp;IBLOCK_ID='.$arProperty["LINK_IBLOCK_ID"].
230 '&amp;n='.urlencode($strHTMLControlName["VALUE"].'['.$intPropertyValueID.']').
231 '&amp;hideiblock='.$arProperty['IBLOCK_ID'].
232 ($fixIBlock ? '&amp;iblockfix=y' : '').
233 '&amp;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 '&nbsp;<span id="sp_'.$strHTMLControlName["VALUE"].'['.$intPropertyValueID.']" >'.$mxElement['NAME'].'</span>';
237 unset($searchUrl);
238 }
239 }
240
241 if (0 < intval($arProperty['MULTIPLE_CNT']))
242 {
243 for ($i = 0; $i < $arProperty['MULTIPLE_CNT']; $i++)
244 {
245 $searchUrl = static::getSearchUrl().'?lang='.LANGUAGE_ID.
246 '&amp;IBLOCK_ID='.$arProperty["LINK_IBLOCK_ID"].
247 '&amp;n='.urlencode($strHTMLControlName["VALUE"].'[n'.$i.']').
248 '&amp;hideiblock='.$arProperty['IBLOCK_ID'].
249 ($fixIBlock ? '&amp;iblockfix=y' : '').
250 '&amp;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 '&nbsp;<span id="sp_'.$strHTMLControlName["VALUE"].'[n'.$i.']" ></span>';
254 }
255 unset($searchUrl);
256 }
257
258 $strResult = implode('<br />',$arResult);
259 }
260 else
261 {
262 $mxResultValue = static::GetValueForAutoCompleteMulti($arProperty,$arValues,$arSymbols['BAN_SYM'],$arSymbols['REP_SYM']);
263 $strResultValue = (is_array($mxResultValue) ? htmlspecialcharsback(implode("\n",$mxResultValue)) : '');
264
265 ob_start();
266 ?><input type="hidden" name="<?=$strHTMLControlName["VALUE"]?>" value="" /><?
267 $control_id = $APPLICATION->IncludeComponent(
268 "bitrix:main.lookup.input",
269 "iblockedit",
270 array(
271 "CONTROL_ID" => preg_replace(
272 "/[^a-zA-Z0-9_]/i",
273 "x",
274 $strHTMLControlName["VALUE"].'_'.mt_rand(0, 10000)
275 ),
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'],
288 'FILTER' => 'Y',
289 'TYPE' => 'SECTION'
290 ), null, array("HIDE_ICONS" => "Y")
291 );
292 ?><?
293 if ($arSettings['VIEW'] == 'E')
294 {
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;
301 ?><input
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);"><?
306 unset($searchUrl);
307 }
308 if ($arSettings['SHOW_ADD'] == 'Y' && $fixIBlock)
309 {
310 $strButtonCaption = '';
311 if ($arSettings['IBLOCK_MESS'] == 'Y')
312 {
313 $arLangMess = CIBlock::GetMessages($arProperty["LINK_IBLOCK_ID"]);
314 $strButtonCaption = $arLangMess['SECTION_ADD'];
315 unset($arLangMess);
316 }
317 if ($strButtonCaption == '')
318 $strButtonCaption = Loc::getMessage('BT_UT_SAUTOCOMPLETE_MESS_NEW_ELEMENT');
319 ?><input
320 type="button"
321 style="margin-top: 5px;"
322 value="<? echo htmlspecialcharsbx($strButtonCaption); ?>"
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"],
326 null,
327 array(
328 'menu' => null,
329 'IBLOCK_SECTION_ID' => -1,
330 'find_section_section' => -1,
331 'lookup' => 'jsMLI_'.$control_id,
332 'tableId' => $windowTableId
333 ),
334 ($fixIBlock ? '&iblockfix=y' : '')
335 ); ?>', 900, 700);"
336 ><?
337 unset($strButtonCaption);
338 }
339 $strResult = ob_get_contents();
340 ob_end_clean();
341 }
342
343 return $strResult;
344 }
345
346 public static function GetAdminListViewHTML($arProperty, $arValue, $strHTMLControlName)
347 {
348 $strResult = '';
349 $mxResult = static::GetPropertyValue($arProperty,$arValue);
350 if (is_array($mxResult))
351 {
352 $strResult = $mxResult['NAME'].' [<a href="/bitrix/admin/'.
353 CIBlock::GetAdminSectionEditLink(
354 $mxResult['IBLOCK_ID'],
355 $mxResult['ID'],
356 array(
357 'WF' => 'Y'
358 )
359 ).'" title="'.Loc::getMessage("BT_UT_SAUTOCOMPLETE_MESS_ELEMENT_EDIT").'">'.$mxResult['ID'].'</a>]';
360 }
361
362 return $strResult;
363 }
364
365 public static function GetPublicViewHTML($arProperty, $arValue, $strHTMLControlName)
366 {
367 static $cache = array();
368
369 $strResult = '';
370 $arValue['VALUE'] = (int)($arValue['VALUE'] ?? 0);
371 if ($arValue['VALUE'] > 0)
372 {
373 if (!isset($cache[$arValue['VALUE']]))
374 {
375 $arFilter = array();
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(
383 array(),
384 $arFilter,
385 false,
386 array("ID","IBLOCK_ID","NAME","SECTION_PAGE_URL")
387 );
388 if (isset($strHTMLControlName['SECTION_URL']))
389 {
390 $rsElements->SetUrlTemplates('', $strHTMLControlName['SECTION_URL']);
391 }
392 $cache[$arValue['VALUE']] = $rsElements->GetNext(true,true);
393 }
394 if (is_array($cache[$arValue['VALUE']]))
395 {
396 if (isset($strHTMLControlName['MODE']) && 'CSV_EXPORT' == $strHTMLControlName['MODE'])
397 {
398 $strResult = $cache[$arValue['VALUE']]['ID'];
399 }
400 elseif (isset($strHTMLControlName['MODE']) && ('SIMPLE_TEXT' == $strHTMLControlName['MODE'] || 'ELEMENT_TEMPLATE' == $strHTMLControlName['MODE']))
401 {
402 $strResult = $cache[$arValue['VALUE']]["~NAME"];
403 }
404 else
405 {
406 $strResult = '<a href="'.$cache[$arValue['VALUE']]["SECTION_PAGE_URL"].'">'.$cache[$arValue['VALUE']]["NAME"].'</a>';
407 }
408 }
409 }
410
411 return $strResult;
412 }
413
414 public static function GetPublicEditHTML($property, $value, $control)
415 {
416 global $APPLICATION;
417
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;
422
423 ob_start();
424
425 if ($multi)
426 {
427 $resultValue = static::GetValueForAutoCompleteMulti(
428 $property,
429 $value,
430 $symbols['BAN_SYM'],
431 $symbols['REP_SYM']
432 );
433 $resultValue = (is_array($resultValue) ? htmlspecialcharsback(implode("\n",$resultValue)) : '');
434 }
435 else
436 {
437 $resultValue = htmlspecialcharsback(static::GetValueForAutoComplete(
438 $property,
439 $value,
440 $symbols['BAN_SYM'],
441 $symbols['REP_SYM']
442 ));
443 }
444
445 $APPLICATION->IncludeComponent(
446 'bitrix:main.lookup.input',
447 'iblockedit',
448 array(
449 'CONTROL_ID' => preg_replace(
450 "/[^a-zA-Z0-9_]/i",
451 "x",
452 $control['VALUE'].'_'.mt_rand(0, 10000)
453 ),
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'],
466 'FILTER' => 'Y',
467 'TYPE' => 'SECTION'
468 ),
469 ($control['PARENT_COMPONENT'] ?? null),
470 array('HIDE_ICONS' => 'Y')
471 );
472
473 $result = ob_get_contents();
474 ob_end_clean();
475
476 return $result;
477 }
478
479 public static function PrepareSettings($arFields)
480 {
481 /*
482 * VIEW - view type
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
491 */
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));
494
495 $strShowAdd = ($arFields['USER_TYPE_SETTINGS']['SHOW_ADD'] ?? '');
496 $strShowAdd = ('Y' == $strShowAdd ? 'Y' : 'N');
497 if ((int)($arFields['LINK_IBLOCK_ID'] ?? 0) <= 0)
498 $strShowAdd = 'N';
499
500 $intMaxWidth = intval($arFields['USER_TYPE_SETTINGS']['MAX_WIDTH'] ?? 0);
501 if (0 >= $intMaxWidth) $intMaxWidth = 0;
502
503 $intMinHeight = intval($arFields['USER_TYPE_SETTINGS']['MIN_HEIGHT'] ?? 0);
504 if (0 >= $intMinHeight) $intMinHeight = 24;
505
506 $intMaxHeight = intval($arFields['USER_TYPE_SETTINGS']['MAX_HEIGHT'] ?? 0);
507 if (0 >= $intMaxHeight) $intMaxHeight = 1000;
508
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 .= ';';
515
516 $strOtherReplaceSymbol = '';
517 $strReplaceSymbol = ($arFields['USER_TYPE_SETTINGS']['REP_SYM'] ?? ' ');
518 if (BT_UT_AUTOCOMPLETE_REP_SYM_OTHER == $strReplaceSymbol)
519 {
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()))
524 {
525 $strReplaceSymbol = $strOtherReplaceSymbol;
526 $strOtherReplaceSymbol = '';
527 }
528 }
529 if ('' == $strReplaceSymbol)
530 {
531 $strReplaceSymbol = ' ';
532 $strOtherReplaceSymbol = '';
533 }
534
535 $strIBlockMess = ($arFields['USER_TYPE_SETTINGS']['IBLOCK_MESS'] ?? '');
536 if ('Y' != $strIBlockMess) $strIBlockMess = 'N';
537
538 return [
539 'VIEW' => $strView,
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,
548 ];
549 }
550
551 public static function GetSettingsHTML($arFields,$strHTMLControlName, &$arPropertyFields)
552 {
553 $arPropertyFields = [
554 "HIDE" => ["ROW_COUNT", "COL_COUNT","MULTIPLE_CNT"],
555 'USER_TYPE_SETTINGS_TITLE' => Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_TITLE'),
556 ];
557
558 $arSettings = static::PrepareSettings($arFields);
559
560 return '<tr>
561 <td>'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_VIEW').'</td>
562 <td>'.SelectBoxFromArray($strHTMLControlName["NAME"].'[VIEW]',static::GetPropertyViewsList(true),htmlspecialcharsbx($arSettings['VIEW'])).'</td>
563 </tr>
564 <tr>
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>
567 </tr>
568 <tr>
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>
571 </tr>
572 <tr>
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']).'">&nbsp;'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_COMMENT_MAX_WIDTH').'</td>
575 </tr>
576 <tr>
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']).'">&nbsp;'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_COMMENT_MIN_HEIGHT').'</td>
579 </tr>
580 <tr>
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']).'">&nbsp;'.Loc::getMessage('BT_UT_SAUTOCOMPLETE_SETTING_COMMENT_MAX_HEIGHT').'</td>
583 </tr>
584 <tr>
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>
587 </tr>
588 <tr>
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'])).'&nbsp;<input type="text" name="'.$strHTMLControlName["NAME"].'[OTHER_REP_SYM]" size="1" maxlength="1" value="'.htmlspecialcharsbx($arSettings['OTHER_REP_SYM']).'"></td>
591 </tr>
592 ';
593 }
594
595 public static function GetAdminFilterHTML($arProperty, $strHTMLControlName)
596 {
597 global $APPLICATION;
598
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'];
603
604 $isMainUiFilter = ($strHTMLControlName["FORM_NAME"] ?? '') === 'main-ui-filter';
605 $inputName = $strHTMLControlName['VALUE'].'[]';
606 if ($isMainUiFilter)
607 {
608 $inputName = $strHTMLControlName['VALUE'];
609 }
610
611 $strValue = '';
612
613 if (isset($_REQUEST[$strHTMLControlName["VALUE"]]) && (is_array($_REQUEST[$strHTMLControlName["VALUE"]]) || (0 < intval($_REQUEST[$strHTMLControlName["VALUE"]]))))
614 {
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)) : '');
618 }
619 elseif (isset($GLOBALS[$strHTMLControlName["VALUE"]]) && (is_array($GLOBALS[$strHTMLControlName["VALUE"]]) || (0 < intval($GLOBALS[$strHTMLControlName["VALUE"]]))))
620 {
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)) : '');
624 }
625 ob_start();
626 ?><?
627 $control_id = $APPLICATION->IncludeComponent(
628 "bitrix:main.lookup.input",
629 "iblockedit",
630 array(
631 "INPUT_NAME" => $inputName,
632 "INPUT_NAME_STRING" => "inp_".$strHTMLControlName['VALUE'],
633 "INPUT_VALUE_STRING" => $strValue,
634 "START_TEXT" => '',
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'],
642 'FILTER' => 'Y',
643 'MAIN_UI_FILTER' => ($isMainUiFilter ? 'Y' : 'N'),
644 'TYPE' => 'SECTION',
645 ), null, array("HIDE_ICONS" => "Y")
646 );
647 $inputStyle = 'float: left; margin-right: 10px;';
648 if ($isMainUiFilter)
649 {
650 $inputStyle = 'float: left; margin-right: 4px; margin-top: 7px; margin-left: 10px;';
651 }
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);"
655 >
656 <script>
657 var arClearHiddenFields = arClearHiddenFields;
658 if (!!arClearHiddenFields)
659 {
660 indClearHiddenFields = arClearHiddenFields.length;
661 arClearHiddenFields[indClearHiddenFields] = 'jsMLI_<? echo $control_id; ?>';
662 }
663 </script><?
664 $strResult = ob_get_contents();
665 ob_end_clean();
666
667 return $strResult;
668 }
669
670 public static function AddFilterFields($arProperty, $strHTMLControlName, &$arFilter, &$filtered)
671 {
672 $filtered = false;
673
674 $arFilterValues = array();
675
676 if (isset($strHTMLControlName["FILTER_ID"]))
677 {
678 $filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID"]);
679 $filterData = $filterOption->getFilter();
680 if (!empty($filterData[$strHTMLControlName["VALUE"]]))
681 {
682 $arFilterValues = (is_array($filterData[$strHTMLControlName["VALUE"]]) ?
683 $filterData[$strHTMLControlName["VALUE"]] : array($filterData[$strHTMLControlName["VALUE"]]));
684 }
685 }
686 else
687 {
688 if (isset($_REQUEST[$strHTMLControlName["VALUE"]]) && (is_array($_REQUEST[$strHTMLControlName["VALUE"]]) ||
689 (0 < intval($_REQUEST[$strHTMLControlName["VALUE"]]))))
690 {
691 $arFilterValues = (is_array($_REQUEST[$strHTMLControlName["VALUE"]]) ?
692 $_REQUEST[$strHTMLControlName["VALUE"]] : array($_REQUEST[$strHTMLControlName["VALUE"]]));
693 }
694 elseif (isset($GLOBALS[$strHTMLControlName["VALUE"]]) && (is_array($GLOBALS[$strHTMLControlName["VALUE"]]) ||
695 (0 < intval($GLOBALS[$strHTMLControlName["VALUE"]]))))
696 {
697 $arFilterValues = (is_array($GLOBALS[$strHTMLControlName["VALUE"]]) ?
698 $GLOBALS[$strHTMLControlName["VALUE"]] : array($GLOBALS[$strHTMLControlName["VALUE"]]));
699 }
700 }
701
702 foreach ($arFilterValues as $key => $value)
703 {
704 if (0 >= intval($value))
705 unset($arFilterValues[$key]);
706 }
707
708 if (!empty($arFilterValues))
709 {
710 $arFilter["=PROPERTY_".$arProperty["ID"]] = $arFilterValues;
711 $filtered = true;
712 }
713 }
714
715 protected static function GetLinkElement($elementId, $iblockId)
716 {
717 static $cache = [];
718
719 $iblockId = (int)$iblockId;
720 if ($iblockId <= 0)
721 $iblockId = 0;
722 $elementId = (int)$elementId;
723 if ($elementId <= 0)
724 return false;
725 if (!isset($cache[$elementId]))
726 {
727 $arFilter = [];
728 if (0 < $iblockId)
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))
733 {
734 $result = [
735 'ID' => $section['ID'],
736 'NAME' => $section['NAME'],
737 '~NAME' => $section['~NAME'],
738 'IBLOCK_ID' => $section['IBLOCK_ID'],
739 ];
740 $cache[$elementId] = $result;
741 }
742 else
743 {
744 $cache[$elementId] = false;
745 }
746 }
747
748 return $cache[$elementId];
749 }
750
751 protected static function GetPropertyValue($arProperty,$arValue)
752 {
753 $mxResult = false;
754
755 if ((int)($arValue['VALUE'] ?? 0) > 0)
756 {
757 $mxResult = static::GetLinkElement((int)$arValue['VALUE'], (int)$arProperty['LINK_IBLOCK_ID']);
758 if (is_array($mxResult))
759 {
760 $mxResult['PROPERTY_ID'] = $arProperty['ID'];
761 if (isset($arProperty['PROPERTY_VALUE_ID']))
762 {
763 $mxResult['PROPERTY_VALUE_ID'] = $arProperty['PROPERTY_VALUE_ID'];
764 }
765 else
766 {
767 $mxResult['PROPERTY_VALUE_ID'] = false;
768 }
769 }
770 }
771 return $mxResult;
772 }
773
774 protected static function GetPropertyViewsList($boolFull)
775 {
776 $boolFull = (true == $boolFull);
777 if ($boolFull)
778 {
779 return array(
780 'REFERENCE' => array(
781 Loc::getMessage('BT_UT_SAUTOCOMPLETE_VIEW_AUTO'),
782 Loc::getMessage('BT_UT_SAUTOCOMPLETE_VIEW_ELEMENT'),
783 ),
784 'REFERENCE_ID' => array(
785 'A','E'
786 ),
787 );
788 }
789 return array('A','E');
790 }
791
792 protected static function GetReplaceSymList($boolFull = false)
793 {
794 $boolFull = (true == $boolFull);
795 if ($boolFull)
796 {
797 return array(
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'),
804
805 ),
806 'REFERENCE_ID' => array(
807 ' ',
808 '#',
809 '*',
810 '_',
811 BT_UT_AUTOCOMPLETE_REP_SYM_OTHER,
812 ),
813 );
814 }
815 return array(' ', '#', '*','_');
816 }
817
818 protected static function GetSymbols($arSettings)
819 {
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);
823 $arResult = array(
824 'BAN_SYM' => $arBanSym,
825 'REP_SYM' => array_fill(0,sizeof($arBanSym),$strRepSym),
826 'BAN_SYM_STRING' => $strBanSym,
827 'REP_SYM_STRING' => $strRepSym,
828 );
829 return $arResult;
830 }
831
837 protected static function getSearchUrl()
838 {
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';
841 }
842
849 public static function GetUIFilterProperty($property, $strHTMLControlName, &$fields)
850 {
851 unset($fields['value'], $fields['filterable']);
852 $fields['type'] = 'entity_selector';
853 $fields['params'] = [
854 'multiple' => 'Y',
855 'dialogOptions' => [
856 'entities' => [
857 [
858 'id' => IblockPropertySectionProvider::ENTITY_ID,
859 'dynamicLoad' => true,
860 'dynamicSearch' => true,
861 'options' => [
862 'iblockId' => (int)($property['LINK_IBLOCK_ID'] ?? 0),
863 ],
864 ],
865 ],
866 'searchOptions' => [
867 'allowCreateItem' => false,
868 ],
869 ],
870 ];
871 }
872
873 public static function GetUIEntityEditorPropertyEditHtml(array $params = []) : string
874 {
875 $property = [
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',
880 ];
881
882 $config = [
883 'FIELD_NAME' => $params['FIELD_NAME'],
884 'CHANGE_EVENTS' => [
885 'onChangeIblockElement',
886 ],
887 'ENTITY_ID' => 'iblock-property-section',
888 ];
889
890 return Iblock\UI\Input\Section::renderSelector(
891 $property,
892 $params['VALUE'] ?? null,
893 $config
894 );
895 }
896
897 public static function GetUIEntityEditorPropertyViewHtml(array $params = []): string
898 {
899 $result = '';
900
901 if (empty($params['VALUE']))
902 {
903 return '';
904 }
905
906 if (!is_array($params['VALUE']))
907 {
908 $params['VALUE'] = [$params['VALUE']];
909 }
910
911 $filter = [
912 'CHECK_PERMISSIONS' => 'Y',
913 'MIN_PERMISSION' => 'R',
914 'ID' => $params['VALUE'],
915 ];
916 $elementsResult = CIBlockSection::GetList(
917 [],
918 $filter,
919 false,
920 ['ID', 'IBLOCK_ID', 'NAME']
921 );
922
923 while ($element = $elementsResult->Fetch())
924 {
925 $result .= htmlspecialcharsbx($element['NAME']) . '<br>';
926 }
927 unset($elementsResult);
928
929 return $result;
930 }
931}
932
934const BT_UT_SECTION_AUTOCOMPLETE_CODE = Iblock\PropertyTable::USER_TYPE_SECTION_AUTOCOMPLETE;
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
const TYPE_SECTION
Определения propertytable.php:69
const USER_TYPE_SECTION_AUTOCOMPLETE
Определения propertytable.php:84
static GetPropertyFieldHtml($arProperty, $arValue, $strHTMLControlName)
Определения prop_section_auto.php:90
static GetValueForAutoComplete($arProperty, $arValue, $arBanSym="", $arRepSym="")
Определения prop_section_auto.php:36
static GetValueForAutoCompleteMulti($arProperty, $arValues, $arBanSym="", $arRepSym="")
Определения prop_section_auto.php:48
static GetUserTypeDescription()
Определения prop_section_auto.php:12
static GetAdminFilterHTML($arProperty, $strHTMLControlName)
Определения prop_section_auto.php:595
static GetPublicFilterHTML($arProperty, $strHTMLControlName)
Определения prop_section_auto.php:85
$arValues
Определения component_props.php:25
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
bx_acc_lim_group_list limitGroupList[] multiple<?=$group[ 'ID']?> ID selected margin top
Определения file_new.php:657
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
Определения options.php:768
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
margin right
Определения options_user_settings.php:273