UniversalSearch.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. require_once('../application/application.inc.php');
  3. require_once('../application/itopwebpage.class.inc.php');
  4. require_once('../application/applicationcontext.class.inc.php');
  5. require_once('../application/startup.inc.php');
  6. require_once('../application/loginwebpage.class.inc.php');
  7. LoginWebPage::DoLogin(); // Check user rights and prompt if needed
  8. $oContext = new UserContext();
  9. $oAppContext = new ApplicationContext();
  10. $iActiveNodeId = utils::ReadParam('menu', -1);
  11. $currentOrganization = utils::ReadParam('org_id', '');
  12. $oP = new iTopWebPage(Dict::S('UI:UniversalSearchTitle'), $currentOrganization);
  13. // From now on the context is limited to the the selected organization ??
  14. // Now render the content of the page
  15. $sBaseClass = utils::ReadParam('baseClass', 'bizOrganization');
  16. $sClass = utils::ReadParam('class', $sBaseClass);
  17. $sOQLClause = utils::ReadParam('oql_clause', '');
  18. $sFilter = utils::ReadParam('filter', '');
  19. $sOperation = utils::ReadParam('operation', '');
  20. // First part: select the class to search for
  21. $oP->add("<form>");
  22. $oP->add("<input type=\"hidden\" name=\"org_id\" value=\"$currentOrganization\" />");
  23. $oP->add(Dict::S('UI:UniversalSearch:LabelSelectTheClass')."<select style=\"width: 150px;\" id=\"select_class\" name=\"baseClass\" onChange=\"this.form.submit();\">");
  24. $aClassLabels = array();
  25. foreach(MetaModel::GetClasses('bizmodel') as $sCurrentClass)
  26. {
  27. $aClassLabels[$sCurrentClass] = MetaModel::GetName($sCurrentClass);
  28. }
  29. asort($aClassLabels);
  30. foreach($aClassLabels as $sCurrentClass => $sLabel)
  31. {
  32. $sDescription = MetaModel::GetClassDescription($sCurrentClass);
  33. $sSelected = ($sCurrentClass == $sBaseClass) ? " SELECTED" : "";
  34. $oP->add("<option value=\"$sCurrentClass\" title=\"$sDescription\"$sSelected>$sLabel</option>");
  35. }
  36. $oP->add("</select></form>");
  37. try
  38. {
  39. if ($sOperation == 'search_form')
  40. {
  41. $sOQL = "SELECT $sClass $sOQLClause";
  42. $oFilter = DBObjectSearch::FromOQL($sOQL);
  43. }
  44. else
  45. {
  46. // Second part: advanced search form:
  47. if (!empty($sFilter))
  48. {
  49. $oFilter = CMDBSearchFilter::unserialize($sFilter);
  50. }
  51. else if (!empty($sClass))
  52. {
  53. $oFilter = new CMDBSearchFilter($sClass);
  54. }
  55. }
  56. }
  57. catch (CoreException $e)
  58. {
  59. $oFilter = new CMDBSearchFilter($sClass);
  60. $oP->P("<b>".Dict::Format('UI:UniversalSearch:Error', $e->getHtmlDesc())."</b>");
  61. }
  62. if ($oFilter != null)
  63. {
  64. $oSet = new CMDBObjectSet($oFilter);
  65. $oBlock = new DisplayBlock($oFilter, 'search', false);
  66. $aExtraParams = $oAppContext->GetAsHash();
  67. $aExtraParams['open'] = true;
  68. $aExtraParams['baseClass'] = $sBaseClass;
  69. //$aExtraParams['class'] = $sClassName;
  70. $oBlock->Display($oP, 0, $aExtraParams);
  71. // Search results
  72. $oResultBlock = new DisplayBlock($oFilter, 'list', false);
  73. $oResultBlock->Display($oP, 1);
  74. // Menu node
  75. $sFilter = $oFilter->ToOQL();
  76. $oP->add("\n<!-- $sFilter -->\n");
  77. }
  78. $oP->add("</div>\n");
  79. $oP->output();
  80. ?>