/** * Do the search itself. * Only the items with readAccess are returned. * * @param string $words Some words separated by space * @param integer $count Limit query. * * @uses * $search = Phprojekt_Loader::getLibraryClass('Phprojekt_Search'); * $search->search('text1 text2 text3', 10); * * @return array Array with results. */ public function search($words, $count = null) { if (strstr($words, " ")) { $wordOperator = 'equal'; $wordCount = 0; $relationOperator = 'AND'; } else { $wordOperator = 'like'; $wordCount = $count; $relationOperator = 'OR'; } $result = $this->_words->searchWords($words, $wordOperator, $wordCount); $tmpFoundResults = $this->_wordModule->searchModuleByWordId($result, $relationOperator, $count); $dataForDisplay = array(); // Limit the number of ocurrences per module to 3 if ($count > 0) { $results = array(); foreach ($tmpFoundResults as $moduleData) { if (!isset($results[$moduleData['module_id']])) { $results[$moduleData['module_id']] = 0; } $results[$moduleData['module_id']]++; if ($results[$moduleData['module_id']] <= 3) { $dataForDisplay[$moduleData['module_id']][] = $moduleData['item_id']; } } } else { // Convert result to array and add the display data foreach ($tmpFoundResults as $moduleData) { $dataForDisplay[$moduleData['module_id']][] = $moduleData['item_id']; } } return $this->_display->getDisplay($dataForDisplay); }
public function search($words, $limit = 0) { if ($words != "") { $rights = new Phprojekt_Item_Rights(); $display = new Phprojekt_Search_Display(); $results = $this->_tagsTableMapper->searchForProjectsWithTags(explode(" ", $words), $limit); $allowedModules = array(); foreach ($results as $moduleId => $itemIds) { $allowedIds = array(); $moduleName = Phprojekt_Module::getModuleName($moduleId); foreach ($itemIds as $itemId) { $model = Phprojekt_Loader::getModel($moduleName, $moduleName); if ($model) { $model = $model->find($itemId); if (!empty($model)) { $allowedIds[] = $itemId; } } } if (count($allowedIds) > 0) { $allowedModules[$moduleId] = $allowedIds; } } return $display->getDisplay($allowedModules); } else { return array(); } }