/**
  * Set the search class to use for the Forum search. Must implement the
  * {@link ForumSearch} interface
  *
  * @param String
  *
  * @return The result of load() on the engine
  */
 public static function set_search_engine($engine)
 {
     if (!$engine) {
         $engine = 'ForumDatabaseSearch';
     }
     $search = new $engine();
     if ($search instanceof ForumSearchProvider) {
         self::$search_engine = $engine;
         return $search->load();
     } else {
         user_error("{$engine} must implement the ForumSearchProvider interface");
     }
 }
Example #2
0
 /**
  * The search action
  *
  * @return array Returns an array to render the search results.
  */
 function search()
 {
     $keywords = isset($_REQUEST['Search']) ? Convert::raw2xml($_REQUEST['Search']) : null;
     $order = isset($_REQUEST['order']) ? Convert::raw2xml($_REQUEST['order']) : null;
     $start = isset($_REQUEST['start']) ? (int) $_REQUEST['start'] : 0;
     $abstract = $keywords ? "<p>" . sprintf(_t('ForumHolder.SEARCHEDFOR', "You searched for '%s'."), $keywords) . "</p>" : null;
     // get the results of the query from the current search engine
     $search = ForumSearch::get_search_engine();
     if ($search) {
         $engine = new $search();
         $results = $engine->getResults($this->ID, $keywords, $order, $start);
     } else {
         $results = false;
     }
     // if the user has requested this search as an RSS feed then output the contents as xml
     // rather than passing it to the template
     if (isset($_REQUEST['rss'])) {
         $rss = new RSSFeed($results, $this->Link(), _t('ForumHolder.SEARCHRESULTS', 'Search results'), "", "Title", "RSSContent", "RSSAuthor");
         return $rss->outputToBrowser();
     }
     // attach a link to a RSS feed version of the search results
     $rssLink = $this->Link() . "search/?Search=" . urlencode($keywords) . "&amp;order=" . urlencode($order) . "&amp;rss";
     RSSFeed::linkToFeed($rssLink, _t('ForumHolder.SEARCHRESULTS', 'Search results'));
     return array("Subtitle" => DBField::create('Text', _t('ForumHolder.SEARCHRESULTS', 'Search results')), "Abstract" => DBField::create('HTMLText', $abstract), "Query" => DBField::create('Text', $_REQUEST['Search']), "Order" => DBField::create('Text', $order ? $order : "relevance"), "RSSLink" => DBField::create('HTMLText', $rssLink), "SearchResults" => $results);
 }