$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
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; }