示例#1
0
                     $search_results_pmsgs[] = array('message_subject' => EfrontSearch::highlightText($res1[0]['title'], $cr, 'resultsTitleBold'), 'message_id' => $res1[0]['id'], 'folder_name' => $res1[0]['name'], 'folder_id' => $res1[0]['folder_id'], 'body' => EfrontSearch::highlightText($res1[0]['body'], $cr, 'resultsTitleBold'), 'recipient' => $res1[0]['recipient'], 'sender' => $res1[0]['sender'], 'position' => $position_str);
                 }
             } elseif ($results[$i]['table_name'] == 'files') {
                 $pos1 = strpos($res1[0]['path'], '/content/lessons/');
                 //echo $pos1;
                 if ($pos1 !== false) {
                     $pos2 = strpos($res1[0]['path'], '/', $pos1 + mb_strlen('/content/lessons/'));
                     //echo $pos2;
                     $lessonID = mb_substr($res1[0]['path'], $pos1 + mb_strlen('/content/lessons/'), $pos2 - $pos1 - mb_strlen('/content/lessons/'));
                     //echo $lessonID;
                 } else {
                     $lessonID = 0;
                 }
                 try {
                     $file = new EfrontFile($res1[0]['id']);
                     $fileIcon = $file->getTypeImage();
                     if ($_SESSION['s_type'] == 'student' && in_array($lessonID, $lessons_have) && $res1[0]['shared'] != 0) {
                         $search_results_files[] = array('id' => $res1[0]['id'], 'path' => $res1[0]['path'], 'login' => $res1[0]['users_LOGIN'], 'date' => formatTimestamp($res1[0]['timestamp'], 'time_nosec'), 'name' => $file['name'], 'extension' => $file['extension'], 'icon' => $fileIcon);
                     } elseif ($_SESSION['s_type'] == 'professor' && in_array($lessonID, $lessons_have)) {
                         $search_results_files[] = array('id' => $res1[0]['id'], 'path' => $res1[0]['path'], 'login' => $res1[0]['users_LOGIN'], 'date' => formatTimestamp($res1[0]['timestamp'], 'time_nosec'), 'name' => $file['name'], 'extension' => $file['extension'], 'icon' => $fileIcon);
                     } elseif ($_SESSION['s_type'] == 'administrator') {
                         $search_results_files[] = array('id' => $res1[0]['id'], 'path' => $res1[0]['path'], 'login' => $res1[0]['users_LOGIN'], 'date' => formatTimestamp($res1[0]['timestamp'], 'time_nosec'), 'name' => $file['name'], 'extension' => $file['extension'], 'icon' => ${$fileIcon});
                     }
                 } catch (Exception $e) {
                     /*Do nothing, just skip the file*/
                 }
             }
         }
     }
 }
 //sort results by score
示例#2
0
 public function search($query_string)
 {
     $database = new XapianDatabase(self::$_database_path);
     // Start an enquire session.
     $enquire = new XapianEnquire($database);
     $qp = new XapianQueryParser();
     $stemmer = new XapianStem("english");
     $qp->set_stemmer($stemmer);
     $qp->set_database($database);
     $qp->set_stemming_strategy(XapianQueryParser::STEM_SOME);
     $query = $qp->parse_query($query_string);
     // Find the top 10 results for the query.
     $enquire->set_query($query);
     $enquire->set_collapse_key(0, 1);
     //index '0' holds the file path, so we're collapsing on that value in order for a single value to be returned by the system
     $matches = $enquire->get_mset(0, $database->get_doccount());
     $i = $matches->begin();
     $results = array();
     while (!$i->equals($matches->end())) {
         $n = $i->get_rank() + 1;
         try {
             $fileobj = new EfrontFile($i->get_document()->get_value('file'));
             $results[] = array('id' => $fileobj['id'], 'path' => str_replace(G_ROOTPATH, '', $fileobj['path']), 'login' => $fileobj['users_LOGIN'] ? $fileobj['users_LOGIN'] : '', 'date' => formatTimestamp(filemtime($fileobj['path']), 'time_nosec'), 'name' => $fileobj['name'], 'extension' => $fileobj['extension'], 'score' => $i->get_percent(), 'content' => $i->get_document()->get_data(), 'icon' => $fileobj->getTypeImage());
         } catch (Exception $e) {
             //don't halt for missing files
         }
         $i->next();
     }
     return $results;
 }