- Модуль: 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;
}