/** * Calls the single search-functions, sorts the results and creates the output. * Method for portal-searches. * * @param class_module_search_search $objSearch * * @return class_search_result[] */ public function doPortalSearch($objSearch) { $objSearch->setStrQuery(trim(uniStrReplace("%", "", $objSearch->getStrQuery()))); if (uniStrlen($objSearch->getStrQuery()) == 0) { return array(); } //create a search object $objSearch->setBitPortalObjectFilter(true); $arrHits = $this->doIndexedSearch($objSearch); $arrReturn = array(); foreach ($arrHits as $objOneResult) { $objInstance = $objOneResult->getObjObject(); if ($objInstance instanceof class_module_pages_pageelement) { $objInstance = $objInstance->getConcreteAdminInstance(); if ($objInstance != null) { $objInstance->loadElementData(); } else { continue; } } $arrUpdatedResults = $objInstance->updateSearchResult($objOneResult); if (is_array($arrUpdatedResults)) { $arrReturn = array_merge($arrReturn, $arrUpdatedResults); } else { if ($objOneResult != null && $objOneResult instanceof class_search_result) { $arrReturn[] = $objOneResult; } } } //log the query class_module_search_log::generateLogEntry($objSearch->getStrQuery()); $arrReturn = $this->mergeDuplicates($arrReturn); return $arrReturn; }
/** * 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; }
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; }