Your IP : 13.58.254.160


Current Path : /home/bitrix/ext_www/ballu.in.ua/bitrix/modules/search/classes/general/
Upload File :
Current File : /home/bitrix/ext_www/ballu.in.ua/bitrix/modules/search/classes/general/comp_parameters.php

<?php
IncludeModuleLangFile(__FILE__);

class CSearchParameters
{
	public static function ConvertParamsToFilter($arParams, $strFilterParamName)
	{
		$exFILTER = array();

		if (!is_array($arParams[$strFilterParamName]) && strlen($arParams[$strFilterParamName]) > 0)
			$arParams[$strFilterParamName] = array($arParams[$strFilterParamName]);

		if (is_array($arParams[$strFilterParamName]))
		{
			foreach ($arParams[$strFilterParamName] as $strFILTER)
			{
				switch ($strFILTER)
				{
				case "main":
					$exFILTER[] = CSearchParameters::_main($arParams[$strFilterParamName."_main"]);
					break;
				case "forum":
					if (IsModuleInstalled("forum"))
						$exFILTER[] = CSearchParameters::_forum($arParams[$strFilterParamName."_forum"]);
					break;
				case "blog":
					$exFILTER[] = CSearchParameters::_blog($arParams[$strFilterParamName."_blog"]);
					break;
				case "microblog":
					$exFILTER[] = array(
						"=MODULE_ID" => "blog",
						"PARAM1" => "MICROBLOG",
					);
					break;
				case "socialnetwork":
					$exFILTER[] = CSearchParameters::_socialnetwork($arParams[$strFilterParamName."_socialnetwork"]);
					break;
				case "socialnetwork_user":
					$exFILTER[] = CSearchParameters::_socialnetwork_user($arParams[$strFilterParamName."_socialnetwork_user"]);
					break;
				case "intranet":
					$exFILTER[] = array(
						"=MODULE_ID" => "intranet",
					);
					break;
				case "crm":
					$exFILTER[] = array(
						"=MODULE_ID" => "crm",
					);
					break;
				case "disk":
					$exFILTER[] = array(
						"=MODULE_ID" => "disk",
					);
					break;
				case "no":
					break;
				default:
					if (strpos($strFILTER, "iblock_") === 0)
						$exFILTER[] = CSearchParameters::_iblock($arParams[$strFilterParamName."_".$strFILTER], $strFILTER);
					else
						$exFILTER[] = array(
							"=MODULE_ID" => $strFILTER,
						);
					break;
				}
			}
		}

		return $exFILTER;
	}

	public static function GetFilterDropDown($bFilter = false)
	{
		if ($bFilter)
			$arrDropdown = array(
				"no" => GetMessage("SEARCH_CP_NO_LIMIT"),
				"main" => "[main] ".GetMessage("SEARCH_CP_STATIC"),
			);
		else
			$arrDropdown = array();

		if (IsModuleInstalled("forum"))
			$arrDropdown["forum"] = "[forum] ".GetMessage("SEARCH_CP_FORUM");

		if (CModule::IncludeModule("iblock"))
		{
			$rsType = CIBlockType::GetList(array("sort" => "asc"), array("ACTIVE" => "Y"));
			while ($arr = $rsType->Fetch())
			{
				if ($ar = CIBlockType::GetByIDLang($arr["ID"], LANGUAGE_ID))
					$arrDropdown["iblock_".$arr["ID"]] = "[iblock_".$arr["ID"]."] ".$ar["~NAME"];
			}
		}

		if (IsModuleInstalled("blog"))
		{
			$arrDropdown["blog"] = "[blog] ".GetMessage("SEARCH_CP_BLOG");
			if ($bFilter)
				$arrDropdown["microblog"] = "[microblog] ".GetMessage("SEARCH_CP_MICROBLOG");
		}

		if (IsModuleInstalled("socialnetwork"))
		{
			$arrDropdown["socialnetwork"] = "[socialnetwork] ".GetMessage("SEARCH_CP_SOCNET");
			$arrDropdown["socialnetwork_user"] = "[socialnetwork_user] ".GetMessage("SEARCH_CP_SOCNET_USER");
		}

		if (IsModuleInstalled("intranet"))
		{
			$arrDropdown["intranet"] = "[intranet] ".GetMessage("SEARCH_CP_INTRANET_USERS");
		}

		if (IsModuleInstalled("crm"))
		{
			$arrDropdown["crm"] = "[crm] ".GetMessage("SEARCH_CP_CRM");
		}

		if (IsModuleInstalled("disk"))
		{
			$arrDropdown["disk"] = "[disk] ".GetMessage("SEARCH_CP_DISK");
		}

		return $arrDropdown;
	}

	public static function GetModulesList()
	{
		$result = array();
		foreach (GetModuleEvents("search", "OnReindex", true) as $arEvent)
		{
			if (!array_key_exists($arEvent["TO_MODULE_ID"], $result))
			{
				$module = $arEvent["TO_MODULE_ID"];

				if (IsModuleInstalled($module))
				{
					$obModule = CModule::CreateModuleObject($module);
					if ($obModule)
					{
						$result[$module] = "[".$module."] ".$obModule->MODULE_NAME;
					}
				}
			}
		}

		ksort($result);
		return $result;
	}

	public static function AddFilterParams(&$arComponentParameters, $arCurrentValues, $name, $parent, $MULTIPLE = "Y")
	{
		$arComponentParameters["PARAMETERS"][$name] = array(
			"PARENT" => $parent,
			"NAME" => GetMessage("SEARCH_CP_WHERE_FILTER"),
			"TYPE" => "LIST",
			"MULTIPLE" => $MULTIPLE,
			"VALUES" => CSearchParameters::GetFilterDropDown(true),
			"DEFAULT" => "all",
			"REFRESH" => "Y",
		);

		if (!is_array($arCurrentValues[$name]) && strlen($arCurrentValues[$name]) > 0)
		{
			$arCurrentValues[$name] = array($arCurrentValues[$name]);
		}

		if (is_array($arCurrentValues[$name]))
		{
			foreach ($arCurrentValues[$name] as $strFILTER)
			{
				if ($strFILTER == "main")
				{
					$arComponentParameters["PARAMETERS"][$name."_".$strFILTER] = array(
						"PARENT" => $parent,
						"NAME" => GetMessage("SEARCH_CP_URL"),
						"TYPE" => "STRING",
						"MULTIPLE" => $MULTIPLE,
						"ADDITIONAL_VALUES" => "Y",
						"DEFAULT" => "",
					);
				}
				elseif ($strFILTER == "forum")
				{
					$arrFILTER = array();
					if (CModule::IncludeModule("forum"))
					{
						$arrFILTER["all"] = GetMessage("SEARCH_CP_ALL");
						$rsForum = CForumNew::GetList();
						while ($arForum = $rsForum->Fetch())
							$arrFILTER[$arForum["ID"]] = $arForum["NAME"];
					}

					$arComponentParameters["PARAMETERS"][$name."_".$strFILTER] = array(
						"PARENT" => $parent,
						"NAME" => GetMessage("SEARCH_CP_FORUM"),
						"TYPE" => "LIST",
						"MULTIPLE" => $MULTIPLE,
						"VALUES" => $arrFILTER,
						"ADDITIONAL_VALUES" => "N",
						"DEFAULT" => "all",
					);
				}
				elseif (strpos($strFILTER, "iblock_") === 0)
				{
					$arrFILTER = array();
					if (CModule::IncludeModule("iblock"))
					{
						$arrFILTER["all"] = GetMessage("SEARCH_CP_ALL");
						$rsIBlock = CIBlock::GetList(array("SORT" => "ASC"), array("TYPE" => substr($strFILTER, 7)));
						while ($arIBlock = $rsIBlock->Fetch())
							$arrFILTER[$arIBlock["ID"]] = $arIBlock["NAME"];
					}

					$arComponentParameters["PARAMETERS"][$name."_".$strFILTER] = array(
						"PARENT" => $parent,
						"NAME" => GetMessage("SEARCH_CP_IBLOCK_TYPE", array("#TYPE_ID#" => $strFILTER)),
						"TYPE" => "LIST",
						"MULTIPLE" => $MULTIPLE,
						"VALUES" => $arrFILTER,
						"ADDITIONAL_VALUES" => "N",
						"DEFAULT" => "all",
					);
				}
				elseif ($strFILTER == "blog")
				{
					$arrFILTER = array();
					if (CModule::IncludeModule("blog"))
					{
						$arrFILTER["all"] = GetMessage("SEARCH_CP_ALL");
						$rsBlog = CBlog::GetList();
						while ($arBlog = $rsBlog->Fetch())
							$arrFILTER[$arBlog["ID"]] = $arBlog["NAME"];
					}

					$arComponentParameters["PARAMETERS"][$name."_".$strFILTER] = array(
						"PARENT" => $parent,
						"NAME" => GetMessage("SEARCH_CP_BLOG"),
						"TYPE" => "LIST",
						"MULTIPLE" => $MULTIPLE,
						"VALUES" => $arrFILTER,
						"ADDITIONAL_VALUES" => "N",
						"DEFAULT" => "all",
					);
				}
				elseif ($strFILTER == "socialnetwork")
				{
					$arrFILTER = array();
					if (CModule::IncludeModule("socialnetwork"))
					{
						$arrFILTER["all"] = GetMessage("SEARCH_CP_ALL");
						$rsGroup = CSocNetGroup::GetList(array("ID" => "DESC"), array(), false, false, array("ID", "NAME"));
						while ($arGroup = $rsGroup->Fetch())
							$arrFILTER[$arGroup["ID"]] = $arGroup["NAME"];
					}

					$arComponentParameters["PARAMETERS"][$name."_".$strFILTER] = array(
						"PARENT" => $parent,
						"NAME" => GetMessage("SEARCH_CP_SOCIALNETWORK_GROUPS"),
						"TYPE" => "LIST",
						"MULTIPLE" => $MULTIPLE,
						"VALUES" => $arrFILTER,
						"ADDITIONAL_VALUES" => "N",
						"DEFAULT" => "all",
					);
				}
				elseif ($strFILTER == "socialnetwork_user")
				{
					$arComponentParameters["PARAMETERS"][$name."_".$strFILTER] = array(
						"PARENT" => "DATA_SOURCE",
						"NAME" => GetMessage("SEARCH_CP_SOCIALNETWORK_USER"),
						"TYPE" => "STRING",
						"DEFAULT" => "",
					);
				}
			}
		}
	}

	protected static function _main($arParam)
	{
		if (is_array($arParam))
		{
			$arURL = array();
			foreach ($arParam as $strURL)
			{
				$strURL = trim($strURL);
				if ($strURL)
					$arURL[] = $strURL."%";
			}

			if (count($arURL) > 0)
				return array(
					"=MODULE_ID" => "main",
					"URL" => $arURL,
				);
		}
		elseif (strlen($arParam))
		{
			return array(
				"=MODULE_ID" => "main",
				"URL" => $arParam."%",
			);
		}

		return array(
			"=MODULE_ID" => "main",
			"URL" => array("/%"),
		);
	}

	protected static function _forum($arParam)
	{
		if (is_array($arParam))
		{
			$arForum = array();
			foreach ($arParam as $strForum)
				if ($strForum != "all")
					$arForum[] = intval($strForum);

			if (count($arForum) > 0)
			{
				return array(
					"=MODULE_ID" => "forum",
					"PARAM1" => $arForum,
				);
			}
		}
		elseif ($arParam > 0)
		{
			return array(
				"=MODULE_ID" => "forum",
				"PARAM1" => intval($arParam),
			);
		}

		return array(
			"=MODULE_ID" => "forum",
		);
	}

	protected static function _iblock($arParam, $strFILTER)
	{
		if (is_array($arParam))
		{
			$arIBlock = array();
			foreach ($arParam as $strIBlock)
				if ($strIBlock != "all")
					$arIBlock[] = intval($strIBlock);

			if (count($arIBlock) > 0)
			{
				return array(
					"=MODULE_ID" => "iblock",
					"PARAM1" => substr($strFILTER, 7),
					"PARAM2" => $arIBlock,
				);
			}
		}
		elseif ($arParam > 0)
		{
			return array(
				"=MODULE_ID" => "iblock",
				"PARAM1" => substr($strFILTER, 7),
				"PARAM2" => intval($arParam),
			);
		}

		return array(
			"=MODULE_ID" => "iblock",
			"PARAM1" => substr($strFILTER, 7),
		);
	}

	protected static function _blog($arParam)
	{
		if (is_array($arParam))
		{
			$arBlog = array();
			foreach ($arParam as $strBlog)
				if ($strBlog != "all")
					$arBlog[] = intval($strBlog);

			if (count($arBlog) > 0)
			{
				return array(
					"=MODULE_ID" => "blog",
					"PARAM1" => "POST",
					"PARAM2" => $arBlog,
				);
			}
		}
		elseif ($arParam > 0)
		{
			return array(
				"=MODULE_ID" => "blog",
				"PARAM1" => "POST",
				"PARAM2" => intval($arParam),
			);
		}

		return array(
			"=MODULE_ID" => "blog",
			"!=PARAM1" => "MICROBLOG",
		);
	}

	protected static function _socialnetwork($arParam)
	{
		if (is_array($arParam))
		{
			$arSCGroups = array();
			foreach ($arParam as $strSCGroup)
				if ($strSCGroup != "all")
					$arSCGroups[] = intval($strSCGroup);

			if (count($arSCGroups) > 0)
			{
				return array(
					"PARAMS" => array("socnet_group" => $arSCGroups),
					"USE_TF_FILTER" => false,
				);
			}
		}
		elseif ($arParam > 0)
		{
			return array(
				"PARAMS" => array("socnet_group" => intval($arParam)),
			);
		}

		return array(
			"=MODULE_ID" => "socialnetwork",
			"PARAMS" => array("entity" => "socnet_group"),
		);
	}

	protected static function _socialnetwork_user($arParam)
	{
		$intSCUser = intval($arParam);
		if ($intSCUser > 0)
			return array(
				"PARAMS" => array("socnet_user" => $intSCUser),
				"USE_TF_FILTER" => false,
			);
		else
			return array(
				"=MODULE_ID" => "socialnetwork",
			);
	}
}