• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/component_util.php
  • Класс: CComponentUtil
  • Вызов: CComponentUtil::GetComponentProps
static function GetComponentProps($componentName, $arCurrentValues = array(), $templateProperties = array())
{
	$arComponentParameters = array();
	$componentName = trim($componentName);
	if ($componentName == '')
		return false;

	$path2Comp = CComponentEngine::MakeComponentPath($componentName);
	if ($path2Comp == '')
		return false;

	$componentPath = getLocalPath("components".$path2Comp);
	if(!CComponentUtil::isComponent($componentPath))
	{
		return false;
	}

	if (file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/.parameters.php"))
	{
		CComponentUtil::__IncludeLang($componentPath, ".parameters.php");

		include($_SERVER["DOCUMENT_ROOT"].$componentPath."/.parameters.php");
	}

	if ($templateProperties && is_array($templateProperties))
	{
		if(is_array($arComponentParameters["PARAMETERS"]))
			$arComponentParameters["PARAMETERS"] = array_merge ($arComponentParameters["PARAMETERS"], $templateProperties);
		else
			$arComponentParameters["PARAMETERS"] = $templateProperties;
	}

	if (!array_key_exists("PARAMETERS", $arComponentParameters) || !is_array($arComponentParameters["PARAMETERS"]))
	{
		$arComponentParameters["PARAMETERS"] = array();
	}

	if (!array_key_exists("GROUPS", $arComponentParameters) || !is_array($arComponentParameters["GROUPS"]))
		$arComponentParameters["GROUPS"] = array();

	$arParamKeys = array_keys($arComponentParameters["GROUPS"]);
	for ($i = 0, $cnt = count($arParamKeys); $i < $cnt; $i++)
	{
		if (!IsSet($arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"]))
			$arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] = 1000+$i;
		$arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] = intval($arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"]);
		if ($arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] <= 0)
			$arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] = 1000+$i;
	}

	$arVariableAliasesSettings = null;
	$arParamKeys = array_keys($arComponentParameters["PARAMETERS"]);
	for ($i = 0, $cnt = count($arParamKeys); $i < $cnt; $i++)
	{
		if ($arParamKeys[$i] == "SET_TITLE")
		{
			$arComponentParameters["GROUPS"]["ADDITIONAL_SETTINGS"] = array(
				"NAME" => GetMessage("COMP_GROUP_ADDITIONAL_SETTINGS"),
				"SORT" => 700
			);

			$arComponentParameters["PARAMETERS"]["SET_TITLE"] = array(
				"PARENT" => "ADDITIONAL_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_SET_TITLE"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "Y",
				"ADDITIONAL_VALUES" => "N",
				"REFRESH" => "Y"
			);
		}
		elseif ($arParamKeys[$i] == "CACHE_TIME")
		{
			$arComponentParameters["GROUPS"]["CACHE_SETTINGS"] = array(
				"NAME" => GetMessage("COMP_GROUP_CACHE_SETTINGS"),
				"SORT" => 600
			);

			$arSavedParams = $arComponentParameters["PARAMETERS"];
			$arComponentParameters["PARAMETERS"] = array();
			foreach ($arSavedParams as $keyTmp => $valueTmp)
			{
				if ($keyTmp == "CACHE_TIME")
				{
					$arComponentParameters["PARAMETERS"]["CACHE_TYPE"] = array(
						"PARENT" => "CACHE_SETTINGS",
						"NAME" => GetMessage("COMP_PROP_CACHE_TYPE"),
						"TYPE" => "LIST",
						"VALUES" => array("A" => GetMessage("COMP_PROP_CACHE_TYPE_AUTO")." ".GetMessage("COMP_PARAM_CACHE_MAN"), "Y" => GetMessage("COMP_PROP_CACHE_TYPE_YES"), "N" => GetMessage("COMP_PROP_CACHE_TYPE_NO")),
						"DEFAULT" => "A",
						"ADDITIONAL_VALUES" => "N"
					);
					$arComponentParameters["PARAMETERS"]["CACHE_TIME"] = array(
						"PARENT" => "CACHE_SETTINGS",
						"NAME" => GetMessage("COMP_PROP_CACHE_TIME"),
						"TYPE" => "STRING",
						"MULTIPLE" => "N",
						"DEFAULT" => intval($arSavedParams["CACHE_TIME"]["DEFAULT"]),
						"COLS" => 5
					);
					$arComponentParameters["PARAMETERS"]["CACHE_NOTES"] = array(
						"PARENT" => "CACHE_SETTINGS",
						"TYPE" => "CUSTOM",
						"JS_FILE" => "/bitrix/js/main/comp_props.js",
						"JS_EVENT" => "BxShowComponentNotes",
						"JS_DATA" => GetMessage("COMP_PROP_CACHE_NOTE", array(
							"#LANG#" => LANGUAGE_ID,
							"#AUTO_MODE#" => (COption::GetOptionString("main", "component_cache_on", "Y") == "Y"? GetMessage("COMP_PARAM_CACHE_AUTO_ON"):GetMessage("COMP_PARAM_CACHE_AUTO_OFF")),
							"#MANAGED_MODE#" =>(defined("BX_COMP_MANAGED_CACHE")? GetMessage("COMP_PARAM_CACHE_MANAGED_ON"):GetMessage("COMP_PARAM_CACHE_MANAGED_OFF")),
						)),
					);
				}
				else
				{
					$arComponentParameters["PARAMETERS"][$keyTmp] = $valueTmp;
				}
			}
		}
		elseif ($arParamKeys[$i] == "SEF_MODE" && isset($arComponentParameters["PARAMETERS"]["SEF_RULE"]))
		{
			$arComponentParameters["GROUPS"]["SEF_MODE"] = array(
				"NAME" => GetMessage("COMP_GROUP_SEF_MODE"),
				"SORT" => 500
			);
			$arComponentParameters["PARAMETERS"]["SEF_MODE"] = array(
				"PARENT" => "SEF_MODE",
				"NAME" => GetMessage("COMP_PROP_SEF_MODE"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "N",
			);
			$arComponentParameters["PARAMETERS"]["SEF_RULE"]["PARENT"] = "SEF_MODE";
		}
		elseif ($arParamKeys[$i] == "SEF_RULE")
		{
			$arComponentParameters["PARAMETERS"]["SEF_RULE"]["TYPE"] = "TEMPLATES";
			$arComponentParameters["PARAMETERS"]["SEF_RULE"]["NAME"] = GetMessage("COMP_PARAM_SEF_RULE");
			if (isset($arCurrentValues["SEF_MODE"]) && $arCurrentValues["SEF_MODE"] === "Y")
			{
				if (is_array($arComponentParameters["PARAMETERS"]["SEF_RULE"]["VALUES"]))
				{
					foreach ($arComponentParameters["PARAMETERS"]["SEF_RULE"]["VALUES"] as $sefRuleValue)
					{
						if (
							is_array($sefRuleValue)
							&& isset($sefRuleValue["PARAMETER_LINK"])
							&& isset($arComponentParameters["PARAMETERS"][$sefRuleValue["PARAMETER_LINK"]])
						)
						{
							$arComponentParameters["PARAMETERS"][$sefRuleValue["PARAMETER_LINK"]]["PARENT"] = "SEF_MODE";
						}
					}
				}
			}
		}
		elseif ($arParamKeys[$i] == "SEF_MODE")
		{
			$arComponentParameters["GROUPS"]["SEF_MODE"] = array(
				"NAME" => GetMessage("COMP_GROUP_SEF_MODE"),
				"SORT" => 500
			);

			$arSEFModeSettings = $arComponentParameters["PARAMETERS"]["SEF_MODE"];

			$arComponentParameters["PARAMETERS"]["SEF_MODE"] = array(
				"PARENT" => "SEF_MODE",
				"NAME" => GetMessage("COMP_PROP_SEF_MODE"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "N",
			);
			$arComponentParameters["PARAMETERS"]["SEF_FOLDER"] = array(
				"PARENT" => "SEF_MODE",
				"NAME" => GetMessage("COMP_PROP_SEF_FOLDER"),
				"TYPE" => "STRING",
				"MULTIPLE" => "N",
				"DEFAULT" => "",
				"COLS" => 30
			);

			if (is_array($arSEFModeSettings) && !empty($arSEFModeSettings))
			{
				if (!isset($arVariableAliasesSettings))
					$arVariableAliasesSettings = $arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES"];

				foreach ($arSEFModeSettings as $templateKey => $arTemplateValue)
				{
					$arComponentParameters["PARAMETERS"]["SEF_URL_TEMPLATES_".$templateKey] = array(
						"PARENT" => "SEF_MODE",
						"NAME" => $arTemplateValue["NAME"],
						"TYPE" => "STRING",
						"MULTIPLE" => "N",
						"DEFAULT" => $arTemplateValue["DEFAULT"],
						"HIDDEN" => $arTemplateValue["HIDDEN"],
						"COLS" => 50,
						"VARIABLES" => array(),
					);

					if (is_array($arVariableAliasesSettings) && !empty($arVariableAliasesSettings))
					{
						foreach ($arTemplateValue["VARIABLES"] as $variable)
						{
							if ($arVariableAliasesSettings[$variable]["TEMPLATE"])
							{
								$arComponentParameters["PARAMETERS"]["SEF_URL_TEMPLATES_".$templateKey]["TYPE"] = "TEMPLATES";
								$arComponentParameters["PARAMETERS"]["SEF_URL_TEMPLATES_".$templateKey]["VALUES"][$variable] = array(
									"TEXT" => $arVariableAliasesSettings[$variable]["NAME"],
									"TEMPLATE" => $arVariableAliasesSettings[$variable]["TEMPLATE"],
								);
							}
							$arComponentParameters["PARAMETERS"]["SEF_URL_TEMPLATES_".$templateKey]["VARIABLES"]["#".$variable."#"] = $arVariableAliasesSettings[$variable]["NAME"];
						}
					}
				}
			}
		}
		elseif ($arParamKeys[$i] == "VARIABLE_ALIASES")
		{
			$arComponentParameters["GROUPS"]["SEF_MODE"] = array(
				"NAME" => GetMessage("COMP_GROUP_SEF_MODE"),
				"SORT" => 500
			);

			$arVariableAliasesSettings = $arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES"];

			unset($arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES"]);

			foreach ($arVariableAliasesSettings as $aliaseKey => $arAliaseValue)
			{
				$arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES_".$aliaseKey] = array(
					"PARENT" => "SEF_MODE",
					"NAME" => $arAliaseValue["NAME"],
					"TYPE" => "STRING",
					"MULTIPLE" => "N",
					"DEFAULT" => $aliaseKey,
					"COLS" => 20,
				);
			}
		}
		elseif (IsSet($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"]) && $arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] <> '')
		{
			if ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "URL_TEMPLATES")
			{
				$arComponentParameters["GROUPS"]["URL_TEMPLATES"] = array(
					"NAME" => GetMessage("COMP_GROUP_URL_TEMPLATES"),
					"SORT" => 400
				);
			}
			elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "VISUAL")
			{
				$arComponentParameters["GROUPS"]["VISUAL"] = array(
					"NAME" => GetMessage("COMP_GROUP_VISUAL"),
					"SORT" => 300
				);
			}
			elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "DATA_SOURCE")
			{
				$arComponentParameters["GROUPS"]["DATA_SOURCE"] = array(
					"NAME" => GetMessage("COMP_GROUP_DATA_SOURCE"),
					"SORT" => 200
				);
			}
			elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "BASE")
			{
				$arComponentParameters["GROUPS"]["BASE"] = array(
					"NAME" => GetMessage("COMP_GROUP_BASE"),
					"SORT" => 100
				);
			}
			elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "ADDITIONAL_SETTINGS")
			{
				$arComponentParameters["GROUPS"]["ADDITIONAL_SETTINGS"] = array(
					"NAME" => GetMessage("COMP_GROUP_ADDITIONAL_SETTINGS"),
					"SORT" => 700
				);
			}
		}
		elseif ($arParamKeys[$i] == "AJAX_MODE")
		{
			$arComponentParameters["GROUPS"]["AJAX_SETTINGS"] = array(
				"NAME" => GetMessage("COMP_GROUP_AJAX_SETTINGS"),
				"SORT" => 550
			);

			$arComponentParameters["PARAMETERS"]["AJAX_MODE"] = array(
				"PARENT" => "AJAX_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_AJAX_MODE"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "N",
				"ADDITIONAL_VALUES" => "N"
			);

			// $arComponentParameters["PARAMETERS"]["AJAX_OPTION_SHADOW"] = array(
				// "PARENT" => "AJAX_SETTINGS",
				// "NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_SHADOW"),
				// "TYPE" => "CHECKBOX",
				// "MULTIPLE" => "N",
				// "DEFAULT" => "Y",
				// "ADDITIONAL_VALUES" => "N"
			// );

			$arComponentParameters["PARAMETERS"]["AJAX_OPTION_JUMP"] = array(
				"PARENT" => "AJAX_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_JUMP"),
				"TYPE" => "CHECKBOX",
				"MULTIPLE" => "N",
				"DEFAULT" => "N",
				"ADDITIONAL_VALUES" => "N"
			);

			$arComponentParameters["PARAMETERS"]["AJAX_OPTION_STYLE"] = array(
				"PARENT" => "AJAX_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_STYLE"),
				"TYPE" => "CHECKBOX",
				"MULTIPLE" => "N",
				"DEFAULT" => "Y",
				"ADDITIONAL_VALUES" => "N"
			);

			$arComponentParameters["PARAMETERS"]["AJAX_OPTION_HISTORY"] = array(
				"PARENT" => "AJAX_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_HISTORY"),
				"TYPE" => "CHECKBOX",
				"MULTIPLE" => "N",
				"DEFAULT" => "N",
				"ADDITIONAL_VALUES" => "N"
			);

			$arComponentParameters["PARAMETERS"]["AJAX_OPTION_ADDITIONAL"] = array(
				"PARENT" => "AJAX_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_ADDITIONAL"),
				"TYPE" => "STRING",
				"HIDDEN" => "Y",
				"MULTIPLE" => "N",
				"DEFAULT" => "",
				"ADDITIONAL_VALUES" => "N"
			);
		}
		elseif ($arParamKeys[$i] == "USER_CONSENT")
		{
			$arComponentParameters["GROUPS"]["USER_CONSENT"] = array(
				"NAME" => GetMessage("COMP_GROUP_USER_CONSENT"),
				"SORT" => 350
			);

			$arComponentParameters["PARAMETERS"]["USER_CONSENT"] = array(
				"PARENT" => "USER_CONSENT",
				"NAME" => GetMessage("COMP_PROP_USER_CONSENT_USE"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "N",
				"ADDITIONAL_VALUES" => "N"
			);

			$arComponentParameters["PARAMETERS"]["USER_CONSENT_ID"] = array(
				"PARENT" => "USER_CONSENT",
				"NAME" => GetMessage("COMP_PROP_USER_CONSENT_ID"),
				"TYPE" => "LIST",
				"VALUES" => array(GetMessage("COMP_PROP_USER_CONSENT_ID_DEF")) + BitrixMainUserConsentAgreement::getActiveList(),
				"MULTIPLE" => "N",
				"DEFAULT" => "",
			);

			$arComponentParameters["PARAMETERS"]["USER_CONSENT_IS_CHECKED"] = array(
				"PARENT" => "USER_CONSENT",
				"NAME" => GetMessage("COMP_PROP_USER_CONSENT_IS_CHECKED"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "Y",
				"ADDITIONAL_VALUES" => "N"
			);

			$arComponentParameters["PARAMETERS"]["USER_CONSENT_IS_LOADED"] = array(
				"PARENT" => "USER_CONSENT",
				"NAME" => GetMessage("COMP_PROP_USER_CONSENT_IS_LOADED"),
				"TYPE" => "CHECKBOX",
				"DEFAULT" => "N",
				"ADDITIONAL_VALUES" => "N"
			);
		}
		else
		{
			$parent = $arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] ?? null;
			if (!isset($parent) || !isset($arComponentParameters["GROUPS"][$parent]))
			{
				$arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] = "ADDITIONAL_SETTINGS";
				if (!isset($arComponentParameters["GROUPS"]["ADDITIONAL_SETTINGS"]))
				{
					$arComponentParameters["GROUPS"]["ADDITIONAL_SETTINGS"] = array(
						"NAME" => GetMessage("COMP_GROUP_ADDITIONAL_SETTINGS"),
						"SORT" => 700
					);
				}
			}
		}
	}

	if (BitrixMainCompositeHelper::isOn())
	{
		$arComponentParameters["GROUPS"]["COMPOSITE_SETTINGS"] = array(
			"NAME" => GetMessage("COMP_GROUP_COMPOSITE_SETTINGS"),
			"SORT" => 800
		);

		$arComponentParameters["PARAMETERS"]["COMPOSITE_FRAME_MODE"] = array(
			"PARENT" => "COMPOSITE_SETTINGS",
			"NAME" => GetMessage("COMP_PROP_COMPOSITE_FRAME_MODE"),
			"TYPE" => "LIST",
			"VALUES" => array(
				"A" => GetMessage("COMP_PROP_COMPOSITE_FRAME_MODE_AUTO"),
				"Y" => GetMessage("COMP_PROP_COMPOSITE_FRAME_MODE_PRO"),
				"N" => GetMessage("COMP_PROP_COMPOSITE_FRAME_MODE_CONTRA")
			),
			"DEFAULT" => "A",
			"REFRESH" => "Y",
			"ADDITIONAL_VALUES" => "N"
		);

		if (
			!isset($arCurrentValues["COMPOSITE_FRAME_MODE"]) ||
			in_array($arCurrentValues["COMPOSITE_FRAME_MODE"], array("A", "Y")))
		{
			$arComponentParameters["PARAMETERS"]["COMPOSITE_FRAME_TYPE"] = array(
				"PARENT" => "COMPOSITE_SETTINGS",
				"NAME" => GetMessage("COMP_PROP_COMPOSITE_FRAME_TYPE"),
				"TYPE" => "LIST",
				"VALUES" => array(
					"AUTO" => GetMessage("COMP_PROP_COMPOSITE_FRAME_TYPE_AUTO"),
					"STATIC" => GetMessage("COMP_PROP_COMPOSITE_FRAME_TYPE_STATIC"),
					"DYNAMIC_WITH_STUB" => GetMessage("COMP_PROP_COMPOSITE_FRAME_TYPE_DYNAMIC_WITH_STUB"),
					"DYNAMIC_WITHOUT_STUB" => GetMessage("COMP_PROP_COMPOSITE_FRAME_TYPE_DYNAMIC_WITHOUT_STUB"),
					"DYNAMIC_WITH_STUB_LOADING" => GetMessage("COMP_PROP_COMPOSITE_FRAME_TYPE_DYNAMIC_WITH_STUB_LOADING")
				),
				"DEFAULT" => "A",
				"ADDITIONAL_VALUES" => "N"
			);
		}

	}

	if(
		(CPageOption::GetOptionString("main","tips_creation","no")=="allowed")
		&& (strpos($componentPath, "/forum") !== false)
	)
	{
		//Create directories
		$help_lang_path = $_SERVER["DOCUMENT_ROOT"].$componentPath."/lang";
		if(!file_exists($help_lang_path))
			mkdir($help_lang_path);
		$help_lang_path .= "/ru";
		if(!file_exists($help_lang_path))
			mkdir($help_lang_path);
		$help_lang_path .= "/help";
		if(!file_exists($help_lang_path))
			mkdir($help_lang_path);
		if(is_dir($help_lang_path))
		{
			//Create files if none exists
			$lang_filename = $help_lang_path."/.tooltips.php";
			if(!file_exists($lang_filename))
			{
				$handle=fopen($lang_filename, "w");
				fwrite($handle, "");
				fclose($handle);
			}
			$handle=fopen($lang_filename, "r");
			$lang_contents = fread($handle, filesize($lang_filename));
			fclose($handle);
			$lang_file_modified = false;
			//Bug fix
			if(strpos($lang_contents, "$MESS['") !== false)
			{
				$lang_contents = str_replace("$MESS['", "$MESS ['", $lang_contents);
				$lang_file_modified = true;
			}
			//Check out parameters
			foreach($arComponentParameters["PARAMETERS"] as $strName=>$arParameter)
			{
				if(strpos($lang_contents, "$MESS ['${strName}_TIP'] = ") === false)
				{
					$lang_contents = str_replace("?>", "$MESS ['${strName}_TIP'] = "".str_replace("$", "\$", str_replace('"','\"',$arParameter["NAME"]))."";n?>", $lang_contents);
					$lang_file_modified = true;
				}
			}
			//Save the result of the work
			if($lang_file_modified)
			{
				$handle=fopen($lang_filename, "w");
				fwrite($handle, $lang_contents);
				fclose($handle);
			}
		}
		reset($arComponentParameters["PARAMETERS"]);
	}
	uasort($arComponentParameters["GROUPS"], array("CComponentUtil", "__GroupParamsCompare"));


	return $arComponentParameters;
}