35 $controlSettings = !empty($field[
'CONTROL_SETTINGS']) ? $field[
'CONTROL_SETTINGS'] :
array();
37 if(!empty($field[
'DEFAULT']))
39 $field[
'VALUE'] = $field[
'DEFAULT_VALUE'];
40 if(in_array($field[
'TYPE'],
array(
'S:DiskFile')))
42 $renderMethod =
'renderCustomDefaultValue'.$field[
'PROPERTY_USER_TYPE'][
'USER_TYPE'];
43 return self::$renderMethod($field);
47 if(!empty($field[
'SEPARATOR']))
49 self::$separator = $field[
'SEPARATOR'];
52 if(self::$renderForForm && isset($field[
'CURRENT_VALUE']))
54 $field[
'VALUE'] = $field[
'CURRENT_VALUE'];
57 if(isset($field[
'PROPERTY_USER_TYPE'][
'USER_TYPE'])
58 && method_exists(__CLASS__,
'renderFieldByUserType'.$field[
'PROPERTY_USER_TYPE'][
'USER_TYPE']))
60 $renderMethod =
'renderFieldByUserType'.$field[
'PROPERTY_USER_TYPE'][
'USER_TYPE'];
61 $result = self::$renderMethod($field);
63 elseif(isset($field[
'PROPERTY_USER_TYPE'][
'GetPublicViewHTMLMulty']))
66 $field[
'PROPERTY_USER_TYPE'][
'GetPublicViewHTMLMulty'],
array($field, $field, $controlSettings));
68 elseif(isset($field[
'PROPERTY_USER_TYPE'][
'GetPublicViewHTML']))
70 if($field[
'MULTIPLE'] ===
'Y' && is_array($field[
'VALUE']))
73 if(\CLists::isAssociativeArray($field[
'VALUE']))
76 $field[
'PROPERTY_USER_TYPE'][
'GetPublicViewHTML'],
array($field, $field, $controlSettings));
80 foreach($field[
'VALUE'] as $value)
82 $fieldParam =
array(
'VALUE' => $value);
83 $results[] = call_user_func_array($field[
'PROPERTY_USER_TYPE'][
'GetPublicViewHTML'],
84 array($field, $fieldParam, $controlSettings));
86 $result = implode(self::$separator, $results);
92 $field[
'PROPERTY_USER_TYPE'][
'GetPublicViewHTML'],
array($field, $field, $controlSettings));
95 if ($field[
'TYPE'] ==
'S:DiskFile' && ($field[
'READ'] ??
'') ==
'Y')
97 $field[
'VALUE'] = array_filter((is_array($field[
'VALUE']) ? $field[
'VALUE'] :
array($field[
'VALUE'])));
98 foreach ($field[
'VALUE'] as
$key => $value)
100 $result .=
'<input type="hidden" name="'.$field[
'FIELD_ID'].
'[n'.
$key.
'][VALUE][]" value="'.HtmlFilter::encode($value).
'">';
104 elseif($field[
'PROPERTY_TYPE'] !=
'')
106 $renderMethod =
'renderFieldByType'.$field[
'PROPERTY_TYPE'];
107 if(method_exists(__CLASS__, $renderMethod))
109 $result = self::$renderMethod($field);
112 elseif($field[
'TYPE'] !=
'')
114 $renderMethod =
'renderFieldByField'.str_replace(
'_',
'', $field[
'TYPE']);
115 if(method_exists(__CLASS__, $renderMethod))
117 $result = self::$renderMethod($field);
121 $result = self::renderDefaultField($field);
369 public static function prepareFieldDataForFilter(array $field)
371 $customEntityType = array('employee');
372 if($field['TYPE'] == 'SORT' || $field['TYPE'] == 'N')
375 'id' => $field['FIELD_ID'],
376 'name' => $field['NAME'],
381 elseif($field['TYPE'] == 'ACTIVE_FROM' || $field['TYPE'] == 'ACTIVE_TO')
384 'id' => 'DATE_'.$field['FIELD_ID'],
385 'name' => $field['NAME'],
391 elseif($field['TYPE'] == 'DATE_CREATE' || $field['TYPE'] == 'TIMESTAMP_X')
394 'id' => $field['FIELD_ID'],
395 'name' => $field['NAME'],
401 elseif($field['TYPE'] == 'CREATED_BY' || $field['TYPE'] == 'MODIFIED_BY')
404 'id' => $field['FIELD_ID'],
405 'name' => $field['NAME'],
406 'type' => 'custom_entity',
410 elseif($field['TYPE'] == 'L')
413 $queryObject = \CIBlockProperty::getPropertyEnum($field['ID'], array('SORT' => 'ASC', 'NAME' => 'ASC'));
414 while($queryResult = $queryObject->fetch())
415 $items[$queryResult['ID']] = $queryResult['VALUE'];
418 'id' => $field['FIELD_ID'],
419 'name' => $field['NAME'],
422 'params' => array('multiple' => 'Y'),
426 elseif($field['TYPE'] == 'E')
429 'id' => $field['FIELD_ID'],
430 'name' => $field['NAME'],
431 'type' => 'custom_entity',
433 'customFilter' => array('Bitrix\Iblock\Helpers\Filter\Property', 'addFilter')
436 elseif($field['TYPE'] == 'E:EList')
439 if (!empty($field['LINK_IBLOCK_ID']))
441 $queryObject = \CIBlockElement::getList(
442 array('SORT' => 'ASC'),
443 array('IBLOCK_ID' => $field['LINK_IBLOCK_ID']),
446 array('ID', 'NAME', 'SORT')
448 while ($queryResult = $queryObject->fetch())
450 $items[$queryResult['ID']] = $queryResult['NAME'];
455 'id' => $field['FIELD_ID'],
456 'name' => $field['NAME'],
459 'params' => array('multiple' => 'Y'),
463 elseif($field['TYPE'] == 'G')
466 if (!empty($field['LINK_IBLOCK_ID']))
468 $queryObject = \CIBlockSection::getList(
469 array('LEFT_MARGIN' => 'ASC'),
470 array('IBLOCK_ID' => $field['LINK_IBLOCK_ID']),
472 array('ID', 'IBLOCK_ID', 'NAME', 'DEPTH_LEVEL', 'LEFT_MARGIN')
474 while ($queryResult = $queryObject->fetch())
476 $items[$queryResult['ID']] = str_repeat('. ', $queryResult['DEPTH_LEVEL'] - 1) . $queryResult['NAME'];
481 'id' => $field['FIELD_ID'],
482 'name' => $field['NAME'],
485 'params' => array('multiple' => 'Y'),
489 elseif(is_array($field['PROPERTY_USER_TYPE']) && !empty($field['PROPERTY_USER_TYPE']['USER_TYPE']))
491 $type = $field['PROPERTY_USER_TYPE']['USER_TYPE'];
495 'id' => $field['FIELD_ID'],
496 'name' => $field['NAME'],
502 elseif($type == 'DateTime')
505 'id' => $field['FIELD_ID'],
506 'name' => $field['NAME'],
513 elseif($type == 'Sequence')
516 'id' => $field['FIELD_ID'],
517 'name' => $field['NAME'],
522 elseif($type === 'ECrm')
525 'id' => $field['FIELD_ID'],
526 'name' => $field['NAME'],
527 'type' => 'dest_selector',
528 'params' => ElementType::getDestSelectorParametersForFilter(
529 $field['USER_TYPE_SETTINGS'],
530 $isMultiple = (isset($field['MULTIPLE']) && $field['MULTIPLE'] === 'Y')
535 elseif(in_array($type, $customEntityType))
538 'id' => $field['FIELD_ID'],
539 'name' => $field['NAME'],
540 'type' => 'custom_entity',
546 if(array_key_exists('GetPublicFilterHTML', $field['PROPERTY_USER_TYPE']))
549 'id' => $field['FIELD_ID'],
550 'name' => $field['NAME'],
552 'enable_settings' => false,
553 'value' => call_user_func_array(
554 $field['PROPERTY_USER_TYPE']['GetPublicFilterHTML'],
558 'VALUE' => $field['FIELD_ID'],
559 'FORM_NAME'=>'filter_'.$field['GRID_ID'],
560 'GRID_ID' => $field['GRID_ID']
569 $listLikeProperty = array('S:HTML');
571 'id' => $field['FIELD_ID'],
572 'name' => $field['NAME'],
573 'filterable' => in_array($field['TYPE'], $listLikeProperty) ? '?' : ''
577 if(array_key_exists('AddFilterFields', $field['PROPERTY_USER_TYPE']))
578 $result['customFilter'] = $field['PROPERTY_USER_TYPE']['AddFilterFields'];
582 $listLikeField = array('NAME', 'DETAIL_TEXT', 'PREVIEW_TEXT', 'S');
584 'id' => $field['FIELD_ID'],
585 'name' => $field['NAME'],
586 'filterable' => in_array($field['TYPE'], $listLikeField) ? '?' : ''
588 if($field['FIELD_ID'] == 'NAME')
590 $result['default'] = true;
636 protected static function renderFieldByTypeL(array $field)
638 if(!empty(self::$cache[$field['ID']]))
640 $items = self::$cache[$field['ID']];
645 if(empty($field['DEFAULT']))
646 $items[] = Loc::getMessage('LISTS_FIELD_NO_VALUE');
647 $listElements = \CIBlockProperty::getPropertyEnum($field['ID']);
648 while($listElement = $listElements->fetch())
650 if(!empty($field['DEFAULT']))
652 if($listElement['DEF'] == 'Y')
654 $items[$listElement['ID']] = HtmlFilter::encode($listElement['VALUE']);
659 $items[$listElement['ID']] = HtmlFilter::encode($listElement['VALUE']);
661 if ($listElement['DEF'] == 'Y')
663 $field['DEFAULT_VALUE'] = HtmlFilter::encode($listElement['VALUE']);
667 self::$cache[$field['ID']] = $items;
670 if (is_array($field['VALUE']) && empty($field['VALUE']))
672 $result = $items[0] ?? null;
674 elseif (is_array($field['VALUE']))
676 foreach ($items as $itemKey => $itemValue)
678 if (!in_array($itemKey, $field['VALUE']))
680 unset($items[$itemKey]);
683 $result = implode(self::$separator, $items);
687 $result = $items[$field['VALUE']] ?? null;
690 return ($result ?: $field['DEFAULT_VALUE']);
693 protected static function renderFieldByTypeF(array $field)
695 if((empty($field['VALUE']) || !empty($field['DEFAULT'])) && !self::$renderForForm)
698 $iblockId = !empty($field['IBLOCK_ID']) ? intval($field['IBLOCK_ID']) : 0;
699 $sectionId = !empty($field['SECTION_ID']) ? intval($field['SECTION_ID']) : 0;
700 $elementId = !empty($field['ELEMENT_ID']) ? intval($field['ELEMENT_ID']) : 0;
701 $fieldId = !empty($field['FIELD_ID']) ? $field['FIELD_ID'] : '';
702 $socnetGroupId = !empty($field['SOCNET_GROUP_ID']) ? intval($field['SOCNET_GROUP_ID']) : 0;
703 $urlTemplate = !empty($field['LIST_FILE_URL']) ? $field['LIST_FILE_URL'] : '';
704 $downloadUrl = !empty($field['DOWNLOAD_FILE_URL']) ? $field['DOWNLOAD_FILE_URL'] : '';
707 'max_size' => 2024000,
710 'url_template' => $urlTemplate,
711 'download_url' => $downloadUrl,
712 'download_text' => Loc::getMessage('LISTS_FIELD_FILE_DOWNLOAD'),
713 'show_input' => false
715 if(!empty($field['READ']) && $field['READ'] == 'N')
716 $params['show_input'] = true;
718 if($field['MULTIPLE'] == 'Y' && is_array($field['VALUE']))
721 foreach($field['VALUE'] as $key => $value)
723 $file = new \CListFile($iblockId, $sectionId, $elementId, $fieldId,
724 is_array($value) && isset($value['VALUE']) ? $value['VALUE'] : $value);
725 $file->setSocnetGroup($socnetGroupId);
726 $fieldControlId = $field['TYPE'] == 'F' && self::$renderForForm ?
727 $fieldId.'['.$key.'][VALUE]' : $fieldId;
728 $fileControl = new \CListFileControl($file, $fieldControlId);
729 $results[] = $fileControl->getHTML($params);
731 $result = implode(self::$separator, $results);
735 if(is_array($field['VALUE']))
738 foreach($field['VALUE'] as $key => $value)
740 $file = new \CListFile($iblockId, $sectionId, $elementId, $fieldId,
741 is_array($value) && isset($value['VALUE']) ? $value['VALUE'] : $value);
742 $file->setSocnetGroup($socnetGroupId);
743 $fieldControlId = $field['TYPE'] == 'F' && self::$renderForForm ?
744 $fieldId.'['.$key.'][VALUE]' : $fieldId;
745 $fileControl = new \CListFileControl($file, $fieldControlId);
746 $results[] = $fileControl->getHTML($params);
748 $result = implode(self::$separator, $results);
752 $file = new \CListFile($iblockId, $sectionId, $elementId, $fieldId, $field['VALUE']);
753 $file->setSocnetGroup($socnetGroupId);
754 $fileControl = new \CListFileControl($file, $fieldId);
755 $result = $fileControl->getHTML($params);
767 protected static function renderFieldByTypeG(array $field)
769 if(empty($field['VALUE']))
770 return Loc::getMessage('LISTS_FIELD_NOT_DATA');
772 if(!is_array($field['VALUE']))
773 $field['VALUE'] = array($field['VALUE']);
775 $urlTemplate = !empty($field['LIST_URL']) ? $field['LIST_URL'] : '';
776 $socnetGroupId = !empty($field['SOCNET_GROUP_ID']) ? intval($field['SOCNET_GROUP_ID']) : 0;
780 foreach($field['VALUE'] as $value)
782 if(!empty(self::$cache[$field['TYPE']][$value]))
783 $result[] = self::$cache[$field['TYPE']][$value];
785 $filter['ID'][] = $value;
788 if(!empty($result) && (count($result) == count($field['VALUE'])))
789 return implode(self::$separator, $result);
793 $queryObject = \CIBlockSection::getList(array(),
794 array('=ID' => $field['VALUE']), false, array('ID', 'IBLOCK_ID', 'NAME'));
795 while($section = $queryObject->getNext())
799 $sectionUrl = \CHTTP::URN2URI(\CHTTP::urlAddParams(
800 str_replace(array("#list_id#
", "#section_id#
", "#group_id#
"),
801 array($section['IBLOCK_ID'], 0, $socnetGroupId),
802 $urlTemplate), array('list_section_id' => $section['ID'])));
804 $html = '<a href="'.HtmlFilter::encode($sectionUrl).'" target="_blank
">'.
805 HtmlFilter::encode($section['~NAME']).'</a>';
809 $html = HtmlFilter::encode($section['~NAME']);
813 self::$cache[$field['TYPE']][$section['ID']] = $html;
816 return implode(self::$separator, $result);