use Bitrix\Main\Localization\Loc, Bitrix\Iblock; Loc::loadMessages(__FILE__); class CIBlockPropertySequence { const USER_TYPE = 'Sequence'; public static function GetUserTypeDescription() { return array( "PROPERTY_TYPE" => Iblock\PropertyTable::TYPE_NUMBER, "USER_TYPE" => self::USER_TYPE, "DESCRIPTION" => Loc::getMessage("IBLOCK_PROP_SEQUENCE_DESC"), "GetPropertyFieldHtml" => array(__CLASS__, "GetPropertyFieldHtml"), "GetPublicEditHTML" => array(__CLASS__, "GetPropertyFieldHtml"), "PrepareSettings" =>array(__CLASS__, "PrepareSettings"), "GetSettingsHTML" =>array(__CLASS__, "GetSettingsHTML"), "GetAdminFilterHTML" => array(__CLASS__, "GetPublicFilterHTML"), "GetPublicFilterHTML" => array(__CLASS__, "GetPublicFilterHTML"), "AddFilterFields" => array(__CLASS__, "AddFilterFields"), "GetUIFilterProperty" => array(__CLASS__, "GetUIFilterProperty"), 'GetUIEntityEditorProperty' => array(__CLASS__, 'GetUIEntityEditorProperty'), 'GetUIEntityEditorPropertyEditHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyEditHtml'), 'GetUIEntityEditorPropertyViewHtml' => array(__CLASS__, 'GetUIEntityEditorPropertyViewHtml'), ); } public static function AddFilterFields($arProperty, $strHTMLControlName, &$arFilter, &$filtered) { $from_name = $strHTMLControlName["VALUE"].'_from'; $from = isset($_REQUEST[$from_name])? $_REQUEST[$from_name]: ""; if (isset($strHTMLControlName["FILTER_ID"])) { $filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID"]); $filterData = $filterOption->getFilter(); $from = (!empty($filterData[$from_name]) ? $filterData[$from_name] : ""); if ($from) { $arFilter[">=PROPERTY_".$arProperty["ID"]] = $from; $filtered = true; } } elseif ($from) { $arFilter[">=PROPERTY_".$arProperty["ID"]] = $from; $filtered = true; } $to_name = $strHTMLControlName["VALUE"].'_to'; $to = isset($_REQUEST[$to_name])? $_REQUEST[$to_name]: ""; if (isset($strHTMLControlName["FILTER_ID"])) { $filterOption = new \Bitrix\Main\UI\Filter\Options($strHTMLControlName["FILTER_ID"]); $filterData = $filterOption->getFilter(); $to = (!empty($filterData[$to_name]) ? $filterData[$to_name] : ""); if ($to) { $arFilter["<=PROPERTY_".$arProperty["ID"]] = $to; $filtered = true; } } elseif ($to) { $arFilter["<=PROPERTY_".$arProperty["ID"]] = $to; $filtered = true; } } public static function GetPublicFilterHTML($arProperty, $strHTMLControlName) { $from_name = $strHTMLControlName["VALUE"].'_from'; $to_name = $strHTMLControlName["VALUE"].'_to'; $from = isset($_REQUEST[$from_name])? $_REQUEST[$from_name]: ""; $to = isset($_REQUEST[$to_name])? $_REQUEST[$to_name]: ""; return ' ... '; } public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { if($value["VALUE"] > 0 && !$strHTMLControlName["COPY"]) { $current_value = intval($value["VALUE"]); } else { $seq = new CIBlockSequence($arProperty["IBLOCK_ID"], $arProperty["ID"]); $current_value = $seq->GetNext(); } if(is_array($arProperty["USER_TYPE_SETTINGS"]) && $arProperty["USER_TYPE_SETTINGS"]["write"]==="Y") return ''; else return ''. ''; } public static function PrepareSettings($arProperty) { //This method not for storing sequence value in the database //but it just sets starting value for it if( is_array($arProperty["USER_TYPE_SETTINGS"]) && isset($arProperty["USER_TYPE_SETTINGS"]["current_value"]) && intval($arProperty["USER_TYPE_SETTINGS"]["current_value"]) > 0 ) { $seq = new CIBlockSequence($arProperty["IBLOCK_ID"], $arProperty["ID"]); $seq->SetNext($arProperty["USER_TYPE_SETTINGS"]["current_value"]); } if(is_array($arProperty["USER_TYPE_SETTINGS"]) && $arProperty["USER_TYPE_SETTINGS"]["write"]==="Y") $strWritable = "Y"; else $strWritable = "N"; $arProperty['USER_TYPE_SETTINGS'] = array( "write" => $strWritable, ); return $arProperty; } public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields) { $arPropertyFields = array( "HIDE" => array("SEARCHABLE", "WITH_DESCRIPTION", "ROW_COUNT", "COL_COUNT", "DEFAULT_VALUE") ); if(is_array($arProperty["USER_TYPE_SETTINGS"]) && $arProperty["USER_TYPE_SETTINGS"]["write"]==="Y") $bWritable = true; else $bWritable = false; $html = '