Example #1
0
 /**
  * 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);
 }
Example #2
0
 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();
     }
 }