Iblock\PropertyTable::TYPE_ELEMENT, "USER_TYPE" => self::USER_TYPE, "DESCRIPTION" => Loc::getMessage("IBLOCK_PROP_ELIST_DESC"), "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"), "GetPropertyFieldHtmlMulty" => array(__CLASS__, "GetPropertyFieldHtmlMulty"), "GetPublicEditHTML" => array(__CLASS__, "GetPropertyFieldHtml"), "GetPublicEditHTMLMulty" => array(__CLASS__, "GetPropertyFieldHtmlMulty"), "GetPublicViewHTML" => array(__CLASS__, "GetPublicViewHTML"), "GetUIFilterProperty" => array(__CLASS__, "GetUIFilterProperty"), "GetAdminFilterHTML" => array(__CLASS__, "GetAdminFilterHTML"), "PrepareSettings" =>array(__CLASS__, "PrepareSettings"), "GetSettingsHTML" =>array(__CLASS__, "GetSettingsHTML"), "GetExtendedValue" => array(__CLASS__, "GetExtendedValue"), 'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'), ); } public static function PrepareSettings($arProperty) { $size = 0; if(is_array($arProperty["USER_TYPE_SETTINGS"])) $size = intval($arProperty["USER_TYPE_SETTINGS"]["size"]); if($size <= 0) $size = 1; $width = 0; if(is_array($arProperty["USER_TYPE_SETTINGS"])) $width = intval($arProperty["USER_TYPE_SETTINGS"]["width"]); if($width <= 0) $width = 0; if(is_array($arProperty["USER_TYPE_SETTINGS"]) && $arProperty["USER_TYPE_SETTINGS"]["group"] === "Y") $group = "Y"; else $group = "N"; if(is_array($arProperty["USER_TYPE_SETTINGS"]) && $arProperty["USER_TYPE_SETTINGS"]["multiple"] === "Y") $multiple = "Y"; else $multiple = "N"; return array( "size" => $size, "width" => $width, "group" => $group, "multiple" => $multiple, ); } public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields) { $settings = CIBlockPropertyElementList::PrepareSettings($arProperty); $arPropertyFields = array( "HIDE" => array("ROW_COUNT", "COL_COUNT", "MULTIPLE_CNT"), ); return ' '.Loc::getMessage("IBLOCK_PROP_ELEMENT_LIST_SETTING_SIZE").': '.Loc::getMessage("IBLOCK_PROP_ELEMENT_LIST_SETTING_WIDTH").': px '.Loc::getMessage("IBLOCK_PROP_ELEMENT_LIST_SETTING_SECTION_GROUP").': '.Loc::getMessage("IBLOCK_PROP_ELEMENT_LIST_SETTING_MULTIPLE").': '; } //PARAMETERS: //$arProperty - b_iblock_property.* //$value - array("VALUE","DESCRIPTION") -- here comes HTML form value //strHTMLControlName - array("VALUE","DESCRIPTION") //return: //safe html public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { $settings = CIBlockPropertyElementList::PrepareSettings($arProperty); if($settings["size"] > 1) $size = ' size="'.$settings["size"].'"'; else $size = ''; if($settings["width"] > 0) $width = ' style="width:'.$settings["width"].'px"'; else $width = ''; $bWasSelect = false; $options = CIBlockPropertyElementList::GetOptionsHtml($arProperty, array($value["VALUE"]), $bWasSelect); $html = ''; return $html; } public static function GetPropertyFieldHtmlMulty($arProperty, $value, $strHTMLControlName) { $max_n = 0; $values = array(); if(is_array($value)) { foreach($value as $property_value_id => $arValue) { if (is_array($arValue)) $values[$property_value_id] = $arValue["VALUE"]; else $values[$property_value_id] = $arValue; if(preg_match("/^n(\\d+)$/", $property_value_id, $match)) { if($match[1] > $max_n) $max_n = intval($match[1]); } } } $settings = CIBlockPropertyElementList::PrepareSettings($arProperty); if($settings["size"] > 1) $size = ' size="'.$settings["size"].'"'; else $size = ''; if($settings["width"] > 0) $width = ' style="width:'.$settings["width"].'px"'; else $width = ''; if($settings["multiple"]=="Y") { $bWasSelect = false; $options = CIBlockPropertyElementList::GetOptionsHtml($arProperty, $values, $bWasSelect); $html = ''; $html .= ''; } else { if(end($values) != "" || mb_substr(key($values), 0, 1) != "n") $values["n".($max_n+1)] = ""; $name = $strHTMLControlName["VALUE"]."VALUE"; $html = ''; foreach($values as $property_value_id=>$value) { $html .= ''; } $html .= '
'; $bWasSelect = false; $options = CIBlockPropertyElementList::GetOptionsHtml($arProperty, array($value), $bWasSelect); $html .= ''; $html .= '
'; $html .= ''; } return $html; } public static function GetAdminFilterHTML($arProperty, $strHTMLControlName) { $lAdmin = new CAdminList($strHTMLControlName["TABLE_ID"]); $lAdmin->InitFilter(array($strHTMLControlName["VALUE"])); $filterValue = $GLOBALS[$strHTMLControlName["VALUE"]]; if(isset($filterValue) && is_array($filterValue)) $values = $filterValue; else $values = array(); $settings = CIBlockPropertyElementList::PrepareSettings($arProperty); if($settings["size"] > 1) $size = ' size="'.$settings["size"].'"'; else $size = ''; if($settings["width"] > 0) $width = ' style="width:'.$settings["width"].'px"'; else $width = ''; $bWasSelect = false; $options = CIBlockPropertyElementList::GetOptionsHtml($arProperty, $values, $bWasSelect); $html = ''; return $html; } public static function GetUIFilterProperty($arProperty, $strHTMLControlName, &$fields) { $fields["type"] = "list"; $fields["items"] = self::getItemsForUiFilter($arProperty); $fields["operators"] = array( "default" => "=", "enum" => "@" ); } private static function getItemsForUiFilter($arProperty) { $items = array(); $settings = CIBlockPropertyElementList::PrepareSettings($arProperty); if ($settings["group"] === "Y") { $arElements = CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID"]); $arTree = CIBlockPropertyElementList::GetSections($arProperty["LINK_IBLOCK_ID"]); foreach ($arElements as $i => $arElement) { if( $arElement["IN_SECTIONS"] == "Y" && array_key_exists($arElement["IBLOCK_SECTION_ID"], $arTree) ) { $arTree[$arElement["IBLOCK_SECTION_ID"]]["E"][] = $arElement; unset($arElements[$i]); } } // todo add for ui filter foreach ($arTree as $arSection) { if (isset($arSection["E"])) { foreach ($arSection["E"] as $arItem) { $items[$arItem["ID"]] = $arItem["NAME"]; } } } foreach ($arElements as $arItem) { $items[$arItem["ID"]] = $arItem["NAME"]; } } else { foreach (CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID"]) as $arItem) { $items[$arItem["ID"]] = $arItem["NAME"]; } } return $items; } public static function GetPublicViewHTML($arProperty, $arValue, $strHTMLControlName) { static $cache = array(); $strResult = ''; $arValue['VALUE'] = intval($arValue['VALUE']); if (0 < $arValue['VALUE']) { $viewMode = ''; $resultKey = ''; if (!empty($strHTMLControlName['MODE'])) { switch ($strHTMLControlName['MODE']) { case 'CSV_EXPORT': $viewMode = 'CSV_EXPORT'; $resultKey = 'ID'; break; case 'EXTERNAL_ID': $viewMode = 'EXTERNAL_ID'; $resultKey = '~XML_ID'; break; case 'SIMPLE_TEXT': $viewMode = 'SIMPLE_TEXT'; $resultKey = '~NAME'; break; case 'ELEMENT_TEMPLATE': $viewMode = 'ELEMENT_TEMPLATE'; $resultKey = '~NAME'; break; } } if (!isset($cache[$arValue['VALUE']])) { $arFilter = []; $intIBlockID = (int)$arProperty['LINK_IBLOCK_ID']; if ($intIBlockID > 0) $arFilter['IBLOCK_ID'] = $intIBlockID; $arFilter['ID'] = $arValue['VALUE']; if ($viewMode === '') { $arFilter['ACTIVE'] = 'Y'; $arFilter['ACTIVE_DATE'] = 'Y'; $arFilter['CHECK_PERMISSIONS'] = 'Y'; $arFilter['MIN_PERMISSION'] = 'R'; } $rsElements = CIBlockElement::GetList( array(), $arFilter, false, false, array("ID","IBLOCK_ID","NAME","DETAIL_PAGE_URL") ); if (isset($strHTMLControlName['DETAIL_URL'])) { $rsElements->SetUrlTemplates($strHTMLControlName['DETAIL_URL']); } $cache[$arValue['VALUE']] = $rsElements->GetNext(true, true); unset($rsElements); } if (!empty($cache[$arValue['VALUE']]) && is_array($cache[$arValue['VALUE']])) { if ($viewMode !== '' && $resultKey !== '') { $strResult = $cache[$arValue['VALUE']][$resultKey]; } else { $strResult = ''.$cache[$arValue['VALUE']]['NAME'].''; } } } return $strResult; } public static function GetOptionsHtml($arProperty, $values, &$bWasSelect) { $options = ""; $settings = CIBlockPropertyElementList::PrepareSettings($arProperty); $bWasSelect = false; if($settings["group"] === "Y") { $arElements = CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID"]); $arTree = CIBlockPropertyElementList::GetSections($arProperty["LINK_IBLOCK_ID"]); foreach($arElements as $i => $arElement) { if( $arElement["IN_SECTIONS"] == "Y" && array_key_exists($arElement["IBLOCK_SECTION_ID"], $arTree) ) { $arTree[$arElement["IBLOCK_SECTION_ID"]]["E"][] = $arElement; unset($arElements[$i]); } } foreach($arTree as $arSection) { $options .= ''; if(isset($arSection["E"])) { foreach($arSection["E"] as $arItem) { $options .= ''; } foreach($arElements as $arItem) { $options .= '