%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/search/classes/general/ |
Current File : //home/bitrix/www/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", ); } }