/**
  * Searches for a passed string
  *
  * @return string
  * @permissions view
  */
 protected function actionDoSearch()
 {
     $strReturn = "";
     $objSearch = new class_module_search_search();
     $objSearch->setStrPortalLangFilter($this->getStrPortalLanguage());
     if ($this->getParam("searchterm") != "") {
         $objSearch->setStrQuery(htmlToString(urldecode($this->getParam("searchterm")), true));
     }
     $arrResult = array();
     $objSearchCommons = new class_module_search_commons();
     if ($objSearch->getStrQuery() != "") {
         $arrResult = $objSearchCommons->doPortalSearch($objSearch);
     }
     $strReturn .= $this->createSearchXML($objSearch->getStrQuery(), $arrResult);
     return $strReturn;
 }
 /**
  * Calls the single search-functions, sorts the results an creates the output
  *
  * @return string
  * @permissions view
  */
 protected function actionSearch()
 {
     $strReturn = "";
     //Read the config
     $arrTemplate = array();
     $arrTemplate["hitlist"] = "";
     $strReturn .= $this->actionList();
     $objSearchCommons = new class_module_search_commons();
     $this->objSearchSearch->setBitPortalObjectFilter(true);
     $this->objSearchSearch->setStrPortalLangFilter($this->getStrPortalLanguage());
     /** @var $arrHitsSorted class_search_result[] */
     $arrHitsSorted = $objSearchCommons->doPortalSearch($this->objSearchSearch);
     //Resize Array to wanted size
     $arrHitsFilter = $this->objToolkit->pager($this->arrElementData["search_amount"], $this->getParam("pv") != "" ? (int) $this->getParam("pv") : 1, $this->getLang("commons_next"), $this->getLang("commons_back"), "search", $this->arrElementData["search_page"] != "" ? $this->arrElementData["search_page"] : $this->getPagename(), $arrHitsSorted, "&searchterm=" . urlencode(html_entity_decode($this->objSearchSearch->getStrQuery(), ENT_COMPAT, "UTF-8")));
     $strRowTemplateID = $this->objTemplate->readTemplate("/module_search/" . $this->arrElementData["search_template"], "search_hitlist_hit");
     /** @var $objHit class_search_result */
     foreach ($arrHitsFilter["arrData"] as $objHit) {
         if ($objHit->getStrPagename() == "master") {
             continue;
         }
         $objPage = class_module_pages_page::getPageByName($objHit->getStrPagename());
         if ($objPage === null || !$objPage->rightView() || $objPage->getIntRecordStatus() != 1) {
             continue;
         }
         $arrRow = array();
         if ($objHit->getStrPagelink() == "") {
             $arrRow["page_link"] = getLinkPortal($objHit->getStrPagename(), "", "_self", $objHit->getStrPagename(), "", "&highlight=" . urlencode(html_entity_decode($this->objSearchSearch->getStrQuery(), ENT_QUOTES, "UTF-8")) . "#" . uniStrtolower(urlencode(html_entity_decode($this->objSearchSearch->getStrQuery(), ENT_QUOTES, "UTF-8"))));
         } else {
             $arrRow["page_link"] = $objHit->getStrPagelink();
         }
         $arrRow["page_description"] = uniStrTrim($objHit->getStrDescription(), 200);
         $arrTemplate["hitlist"] .= $this->objTemplate->fillTemplate($arrRow, $strRowTemplateID, false);
     }
     //Collect global data
     $arrTemplate["search_term"] = $this->objSearchSearch->getStrQuery();
     $arrTemplate["search_nrresults"] = count($arrHitsSorted);
     $arrTemplate["link_forward"] = $arrHitsFilter["strForward"];
     $arrTemplate["link_back"] = $arrHitsFilter["strBack"];
     $arrTemplate["link_overview"] = $arrHitsFilter["strPages"];
     $strTemplateID = $this->objTemplate->readTemplate("/module_search/" . $this->arrElementData["search_template"], "search_hitlist");
     return $strReturn . $this->fillTemplate($arrTemplate, $strTemplateID);
 }
 public function testIndexEvent()
 {
     if (class_module_system_module::getModuleByName("tags") == null || class_module_system_module::getModuleByName("system") == null) {
         return;
     }
     $strSearchKey1 = generateSystemid();
     $objAspect = new class_module_system_aspect();
     $objAspect->setStrName($strSearchKey1);
     $objAspect->updateObjectToDb();
     $objSearchCommons = new class_module_search_commons();
     $objSearchParams = new class_module_search_search();
     $objSearchParams->setStrQuery($strSearchKey1);
     $arrResult = $objSearchCommons->doIndexedSearch($objSearchParams, null);
     $this->assertEquals(count($arrResult), 1);
     $this->assertEquals($arrResult[0]->getObjObject()->getStrSystemid(), $objAspect->getStrSystemid());
     $strSearchKey2 = generateSystemid();
     $objTag = new class_module_tags_tag();
     $objTag->setStrName($strSearchKey2);
     $objTag->updateObjectToDb();
     $objSearchParams = new class_module_search_search();
     $objSearchParams->setStrQuery($strSearchKey2);
     $arrResult = $objSearchCommons->doIndexedSearch($objSearchParams, null);
     $this->assertEquals(count($arrResult), 1);
     $this->assertEquals($arrResult[0]->getObjObject()->getStrSystemid(), $objTag->getStrSystemid());
     $objTag->assignToSystemrecord($objAspect->getStrSystemid());
     $arrResult = $objSearchCommons->doIndexedSearch($objSearchParams, null);
     $this->assertEquals(count($arrResult), 2);
     $objSearchParams->setStrInternalFilterModules(_system_modul_id_);
     $arrResult = $objSearchCommons->doIndexedSearch($objSearchParams, null);
     $this->assertEquals(count($arrResult), 1);
     $this->assertEquals($arrResult[0]->getObjObject()->getStrSystemid(), $objAspect->getStrSystemid());
     $objTag->removeFromSystemrecord($objAspect->getStrSystemid());
     //the aspect itself should not be found any more
     $objSearchParams = new class_module_search_search();
     $objSearchParams->setStrQuery($strSearchKey2);
     $arrResult = $objSearchCommons->doIndexedSearch($objSearchParams, null);
     $this->assertEquals(count($arrResult), 1);
     $this->assertEquals($arrResult[0]->getObjObject()->getStrSystemid(), $objTag->getStrSystemid());
     $objAspect->deleteObjectFromDatabase();
     $objTag->deleteObjectFromDatabase();
 }
 /**
  * Searches for a passed string
  *
  * @return string
  * @permissions view
  * @xml
  */
 protected function actionSearchXml()
 {
     $strReturn = "";
     $strSearchterm = "";
     if ($this->getParam("search_query") != "") {
         $strSearchterm = htmlToString(urldecode($this->getParam("search_query")), false);
     }
     $objSearch = new class_module_search_search();
     $objSearch->setStrQuery($strSearchterm);
     $arrResult = array();
     $objSearchCommons = new class_module_search_commons();
     if ($strSearchterm != "") {
         $arrResult = $objSearchCommons->doAdminSearch($objSearch, 0, self::INT_MAX_NR_OF_RESULTS);
     }
     $objSearchFunc = function (class_search_result $objA, class_search_result $objB) {
         //first by module, second by score
         if ($objA->getObjObject() instanceof class_model && $objB->getObjObject() instanceof class_model) {
             $intCmp = strcmp($objA->getObjObject()->getArrModule("modul"), $objB->getObjObject()->getArrModule("modul"));
             if ($intCmp != 0) {
                 return $intCmp;
             } else {
                 return $objA->getIntScore() < $objB->getIntScore();
             }
         }
         //fallback: score only
         return $objA->getIntScore() < $objB->getIntScore();
     };
     uasort($arrResult, $objSearchFunc);
     if ($this->getParam("asJson") != "") {
         $strReturn .= $this->createSearchJson($strSearchterm, $arrResult);
     } else {
         $strReturn .= $this->createSearchXML($strSearchterm, $arrResult);
     }
     return $strReturn;
 }