/** * 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"); } }
/** * 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) . "&order=" . urlencode($order) . "&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); }