• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/gadget.php
  • Класс: BXGadget
  • Вызов: BXGadget::GetById
static function GetById($id, $bWithParameters = false, $arAllCurrentValues = false)
{
	$id = _normalizePath(mb_strtolower($id));

	$folders = [
		"/bitrix/gadgets",
		"/local/gadgets",
	];

	$namespace = '';
	if (($p = mb_strpos($id, "/")) > 0)
	{
		//specific namespace
		$namespace = mb_substr($id, 0, $p);
		$id = mb_substr($id, $p + 1);
	}

	// Find all gadgets
	$arGadget = false;
	foreach ($folders as $folder)
	{
		// Find all namespaces of gadgets
		if ($namespace != '')
		{
			$arGdNS = [$namespace];
		}
		else
		{
			$arGdNS = static::getNamespaces($_SERVER["DOCUMENT_ROOT"] . $folder);
		}

		foreach ($arGdNS as $NS)
		{
			$gdDir = $_SERVER["DOCUMENT_ROOT"].$folder."/".$NS;
			$gdDirSiteRoot = $folder."/".$NS;
			if (is_dir($gdDir."/".$id))
			{
				$arDescription = [];

				CComponentUtil::__IncludeLang($gdDirSiteRoot."/".$id, "/.description.php");

				if (!file_exists($gdDir."/".$id."/.description.php"))
					continue;

				if (!@include($gdDir."/".$id."/.description.php"))
				{
					$arGadget = false;
					continue;
				}

				if (isset($arDescription["LANG_ONLY"]) && $arDescription["LANG_ONLY"]!=LANGUAGE_ID)
				{
					$arGadget = false;
					continue;
				}

				if ($bWithParameters)
				{
					$arCurrentValues = [];
					if (is_array($arAllCurrentValues))
					{
						foreach ($arAllCurrentValues as $k => $v)
						{
							$pref = "G_".mb_strtoupper($id)."_";
							if(mb_substr($k, 0, mb_strlen($pref)) == $pref)
								$arCurrentValues[mb_substr($k, mb_strlen($pref))] = $v;
							else
							{
								$pref = "GU_".mb_strtoupper($id)."_";
								if(mb_substr($k, 0, mb_strlen($pref)) == $pref)
									$arCurrentValues[mb_substr($k, mb_strlen($pref))] = $v;
							}
						}
					}

					CComponentUtil::__IncludeLang($gdDirSiteRoot."/".$id, "/.parameters.php");

					$arParameters = [];

					if (file_exists($gdDir."/".$id."/.parameters.php"))
					{
						include($gdDir."/".$id."/.parameters.php");
					}
					$arDescription["PARAMETERS"] = $arParameters["PARAMETERS"];
					$arDescription["USER_PARAMETERS"] = array(
						"TITLE_STD" => array(
							"NAME" => GetMessage("CMDESKTOP_UP_TITLE_STD"),
							"TYPE" => "STRING",
							"DEFAULT" => ""
						)
					);
					if (isset($arParameters["USER_PARAMETERS"]) && is_array($arParameters["USER_PARAMETERS"]))
					{
						$arDescription["USER_PARAMETERS"] = array_merge($arDescription["USER_PARAMETERS"], $arParameters["USER_PARAMETERS"]);
					}
				}
				$arDescription["PATH"] = $gdDir."/".$id;
				$arDescription["PATH_SITEROOT"] = $gdDirSiteRoot."/".$id;

				$arDescription["ID"] = mb_strtoupper($id);
				if ($arDescription["ICON"] && mb_substr($arDescription["ICON"], 0, 1) != "/")
					$arDescription["ICON"] = "/bitrix/gadgets/".$NS."/".$id."/".$arDescription["ICON"];

				unset($arDescription["NOPARAMS"]);

				$arGadget = $arDescription;
			}
		}
	}
	return $arGadget;
}