PageRenderTime 45ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/main/interface/get_search.php

https://gitlab.com/alexprowars/bitrix
PHP | 160 lines | 132 code | 24 blank | 4 comment | 26 complexity | e07d9e7e7deeec2cdfc9c8f39b0e4882 MD5 | raw file
  1. <?
  2. define("NO_KEEP_STATISTIC", true);
  3. define("NO_AGENT_STATISTIC", true);
  4. define("NOT_CHECK_PERMISSIONS", true);
  5. define("BX_SEARCH_ADMIN", true);
  6. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
  7. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
  8. $start = getmicrotime();
  9. $query = ltrim($_POST["q"]);
  10. if(
  11. !empty($query)
  12. && $_REQUEST["ajax_call"] === "y"
  13. && CModule::IncludeModule("search")
  14. ):
  15. CUtil::decodeURIComponent($query);
  16. /**
  17. * @var CAdminPage $adminPage
  18. * @var CAdminMenu $adminMenu
  19. */
  20. $adminPage->Init();
  21. $adminMenu->Init($adminPage->aModules);
  22. $arResult = array(
  23. "CATEGORIES"=>array(
  24. "global_menu_content"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_content')),
  25. "global_menu_services"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_services')),
  26. "global_menu_store"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_store')),
  27. "global_menu_statistics"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_stat')),
  28. "global_menu_settings"=>array("ITEMS"=>array(), "TITLE"=>GetMessage('admin_lib_menu_settings')),
  29. )
  30. );
  31. $arStemFunc = stemming_init(LANGUAGE_ID);
  32. $arPhrase = stemming_split($query, LANGUAGE_ID);
  33. $preg_template = "/(^|[^".$arStemFunc["pcre_letters"]."])(".str_replace("/", "\\/", implode("|", array_map('preg_quote', array_keys($arPhrase)))).")/i".BX_UTF_PCRE_MODIFIER;
  34. $bFound = false;
  35. function GetStrings(&$item, $key, $p)
  36. {
  37. global $arStemFunc, $arPhrase, $preg_template, $arResult, $bFound;
  38. $category = $p[0];
  39. $icon = $p[1];
  40. $arRes = null;
  41. if($item["url"] <> '')
  42. {
  43. $searchstring = '';
  44. if($item["text"])
  45. {
  46. if(preg_match_all($preg_template, mb_strtoupper($item["text"]), $arMatches, PREG_OFFSET_CAPTURE))
  47. {
  48. $c = count($arMatches[2]);
  49. if(defined("BX_UTF"))
  50. {
  51. for($j = $c-1; $j >= 0; $j--)
  52. {
  53. $prefix = mb_substr($item["text"], 0, $arMatches[2][$j][1], 'latin1');
  54. $instr = mb_substr($item["text"], $arMatches[2][$j][1], mb_strlen($arMatches[2][$j][0], 'latin1'), 'latin1');
  55. $suffix = mb_substr($item["text"], $arMatches[2][$j][1] + mb_strlen($arMatches[2][$j][0], 'latin1'), mb_strlen($item["text"], 'latin1'), 'latin1');
  56. $item["text"] = $prefix."<b>".$instr."</b>".$suffix;
  57. }
  58. }
  59. else
  60. {
  61. for($j = $c-1; $j >= 0; $j--)
  62. {
  63. $prefix = mb_substr($item["text"], 0, $arMatches[2][$j][1]);
  64. $instr = mb_substr($item["text"], $arMatches[2][$j][1], mb_strlen($arMatches[2][$j][0]));
  65. $suffix = mb_substr($item["text"], $arMatches[2][$j][1] + mb_strlen($arMatches[2][$j][0]));
  66. $item["text"] = $prefix."<b>".$instr."</b>".$suffix;
  67. }
  68. }
  69. }
  70. $searchstring .= $item["text"];
  71. }
  72. if($item["title"])
  73. $searchstring .= " ".$item["title"];
  74. if($item["keywords"])
  75. $searchstring .= " ".$item["keywords"];
  76. if($item["icon"]=='')
  77. $item["icon"] = $icon;
  78. if(preg_match_all($preg_template, mb_strtoupper($searchstring), $arMatches, PREG_OFFSET_CAPTURE))
  79. {
  80. $ar = Array();
  81. foreach($arMatches[0] as $m)
  82. $ar[] = trim($m[0], " ,;>");
  83. if(count(array_unique($ar)) == count($arPhrase))
  84. {
  85. $arRes = array("NAME"=>$item["text"], "URL"=>$item["url"], "TITLE"=>$item["title"], "ICON"=>$item['icon']);
  86. }
  87. }
  88. }
  89. if(is_array($arRes))
  90. {
  91. if($item['category'] == '')
  92. $item['category'] = $category;
  93. if(!is_array($arResult["CATEGORIES"][$item['category']]))
  94. {
  95. $arResult["CATEGORIES"][$item['category']] = Array('TITLE'=>'', 'ITEMS'=>Array());
  96. if($item['category_name']!='')
  97. $arResult["CATEGORIES"][$item['category']]['TITLE'] = $item['category_name'];
  98. }
  99. $arResult["CATEGORIES"][$item['category']]["ITEMS"][] = $arRes;
  100. $bFound = true;
  101. }
  102. if(is_array($item["items"]))
  103. array_walk($item['items'], 'GetStrings', array($category, $item["icon"]));
  104. }
  105. foreach($adminMenu->aGlobalMenu as $menu_id => $menu)
  106. array_walk($menu['items'], 'GetStrings', array($menu_id, ''));
  107. if($bFound)
  108. {
  109. ?>
  110. <table class="adm-search-result">
  111. <?foreach($arResult["CATEGORIES"] as $category_id => $arCategory):
  112. if(count($arCategory["ITEMS"])==0)
  113. continue;
  114. ?>
  115. <?foreach($arCategory["ITEMS"] as $i => $arItem):
  116. if($i>9)
  117. break;
  118. ?>
  119. <tr onclick="window.location='<?=CUtil::JSEscape($arItem["URL"]);?>';">
  120. <?if($i == 0):?>
  121. <th>&nbsp;<?=$arCategory["TITLE"]?></th>
  122. <?else:?>
  123. <th>&nbsp;</th>
  124. <?endif?>
  125. <td class="adm-search-item" <?if($arItem["TITLE"]!='' && $arItem["TITLE"]!=$arItem["NAME"]):?>title="<?=$arItem["TITLE"]?>"<?endif?>>
  126. <a href="<?=$arItem["URL"]?>"><?if($arItem["ICON"]!=''):?><span class="adm-submenu-item-link-icon <?=$arItem["ICON"]?>"></span><?endif?><span class="adm-submenu-item-name-link-text"><?=$arItem["NAME"]?></span></a>
  127. </td>
  128. </tr>
  129. <?endforeach;?>
  130. <?endforeach;?>
  131. </table>
  132. <?
  133. }
  134. endif;
  135. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");
  136. ?>