Пример #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);
 }