Your IP : 18.118.134.54


Current Path : /var/www/www-root/data/webdav/www/monolith-realty.ru/bitrix/modules/main/classes/general/
Upload File :
Current File : /var/www/www-root/data/webdav/www/monolith-realty.ru/bitrix/modules/main/classes/general/gadget.php

<?php

IncludeModuleLangFile(__FILE__);

class BXGadget
{
	public static function GetGadgetContent(&$arGadget, $arParams)
	{
		global $APPLICATION, $USER;

		CComponentUtil::__IncludeLang($arGadget["PATH_SITEROOT"], "/index.php");

		$arGadgetParams = $arGadget["SETTINGS"];
		$id = $arGadget["ID"];

		ob_start();
		include($arGadget["PATH"]."/index.php");
		return ob_get_clean();
	}

	public static function GetList($bWithParameters = false, $arAllCurrentValues = false)
	{
		$arGadgets = [];

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

		foreach ($folders as $folder)
		{
			// Find all namespaces of gadgets
			$arGdNS = static::getNamespaces($_SERVER["DOCUMENT_ROOT"] . $folder);

			// Find all gadgets
			foreach ($arGdNS as $NS)
			{
				$gdDir = $_SERVER["DOCUMENT_ROOT"].$folder."/".$NS;
				if (is_dir($gdDir) && ($handle = opendir($gdDir)))
				{
					while (false !== ($file = readdir($handle)))
					{
						if ($file=="." || $file=="..")
							continue;
						$arGadgetParams = BXGadget::GetById($NS."/".$file, $bWithParameters, $arAllCurrentValues);
						if ($arGadgetParams)
							$arGadgets[$file] = $arGadgetParams;
						else
							unset($arGadgets[$file]);
					}
					closedir($handle);
				}
			}
		}

		uasort($arGadgets, ["BXGadget", "_sort"]);

		return $arGadgets;
	}

	protected static function getNamespaces($gdDir)
	{
		$arGdNS = ["bitrix"];
		if (is_dir($gdDir) && ($handle = opendir($gdDir)))
		{
			while (($item = readdir($handle)) !== false)
			{
				if (is_dir($gdDir . "/" . $item) && $item != "." && $item != ".." && $item != "bitrix")
				{
					$arGdNS[] = $item;
				}
			}
			closedir($handle);
		}
		return $arGdNS;
	}

	public static function _sort($ar1, $ar2)
	{
		return strcmp($ar1["NAME"], $ar2["NAME"]);
	}

	public 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;
	}

	public static function SavePositions($arParams, $positions)
	{
		$allOptions = static::readSettings($arParams);

		$arUserOptions = ($arParams["MULTIPLE"] == "Y" ? $allOptions[$arParams["DESKTOP_PAGE"]] : $allOptions);

		$arNewUserOptions = ["GADGETS" => []];

		if (isset($arUserOptions["COLS"]))
		{
			$arNewUserOptions["COLS"] = $arUserOptions["COLS"];
		}
		if (isset($arUserOptions["arCOLUMN_WIDTH"]))
		{
			$arNewUserOptions["arCOLUMN_WIDTH"] = $arUserOptions["arCOLUMN_WIDTH"];
		}
		if (isset($arUserOptions["NAME"]))
		{
			$arNewUserOptions["NAME"] = $arUserOptions["NAME"];
		}

		foreach ($positions as $col => $items)
		{
			foreach ($items as $row => $gdId)
			{
				if(mb_substr($gdId, -2, 2) == "*H")
				{
					$gdId = mb_substr($gdId, 0, -2);
					$hidden = true;
				}
				else
				{
					$hidden = false;
				}

				$arNewUserOptions["GADGETS"][$gdId] = $arUserOptions["GADGETS"][$gdId] ?? [];
				$arNewUserOptions["GADGETS"][$gdId]["COLUMN"] = $col;
				$arNewUserOptions["GADGETS"][$gdId]["ROW"] = $row;
				$arNewUserOptions["GADGETS"][$gdId]["HIDE"] = ($hidden? "Y" : "N");
			}
		}

		if ($arParams["MULTIPLE"] == "Y")
		{
			$allOptions[$arParams["DESKTOP_PAGE"]] = $arNewUserOptions;
		}
		else
		{
			$allOptions = $arNewUserOptions;
		}

		static::writeSettings($allOptions, $arParams);
	}

	public static function writeSettings(array $options, array $arParams): void
	{
		$userId = ($arParams["DEFAULT_ID"] ? 0 : false);

		CUserOptions::SetOption("intranet", "~gadgets_".$arParams["ID"], $options, false, $userId);
	}

	public static function readSettings(array $arParams): array
	{
		global $APPLICATION;

		if ($arParams["DEFAULT_ID"])
		{
			$user_option_id = 0;
			$arUserOptionsDefault = CUserOptions::GetOption("intranet", "~gadgets_".$arParams["DEFAULT_ID"], false, $user_option_id);
		}
		else
		{
			$user_option_id = false;
			$arUserOptionsDefault = false;
		}

		$arUserOptions = CUserOptions::GetOption("intranet", "~gadgets_".$arParams["ID"], $arUserOptionsDefault, $user_option_id);

		if (!$arUserOptions)
		{
			$desktopId = false;
			$page = $APPLICATION->GetCurPage();
			if (in_array($page, array(SITE_DIR."index.php", SITE_DIR, "/")))
			{
				$desktopId = "mainpage";
			}
			elseif (in_array($page, array(SITE_DIR."desktop.php", "/desktop.php")))
			{
				$desktopId = "dashboard";
			}

			if ($desktopId !== false)
			{
				$arUserOptions = CUserOptions::GetOption("intranet", "~gadgets_".$desktopId);
			}
		}

		if (!is_array($arUserOptions))
		{
			$arUserOptions = [];
		}

		return $arUserOptions;
	}

	public static function getGadgetSettings($id, $arParams)
	{
		$arUserOptions = static::readSettings($arParams);

		if ($arParams["MULTIPLE"] == "Y")
		{
			$arUserOptions = $arUserOptions[$arParams["DESKTOP_PAGE"]];
		}

		return $arUserOptions["GADGETS"][$id]["SETTINGS"] ?? [];
	}

	public static function getDesktopParams($arParams)
	{
		return [
			"DEFAULT_ID" => ($arParams["DEFAULT_ID"] ?: ''),
			"ID" => $arParams["ID"],
			"MULTIPLE" => $arParams["MULTIPLE"],
			"DESKTOP_PAGE" => (int)$arParams["DESKTOP_PAGE"],
		];
	}
}