5 * Copyright 2004 (c) Guillaume Smet
12 require_once('www/search/include/engines/GroupSearchEngine.class.php');
13 require_once('www/search/include/engines/DocsGroupSearchEngine.class.php');
14 require_once('www/search/include/engines/ForumsGroupSearchEngine.class.php');
15 require_once('www/search/include/engines/FrsGroupSearchEngine.class.php');
16 require_once('www/search/include/engines/NewsGroupSearchEngine.class.php');
17 require_once('www/search/include/engines/TasksGroupSearchEngine.class.php');
18 require_once('www/search/include/engines/TrackersGroupSearchEngine.class.php');
20 require_once('www/search/include/engines/ArtifactSearchEngine.class.php');
21 require_once('www/search/include/engines/ForumSearchEngine.class.php');
23 function & getSearchManager() {
24 if(!isset($GLOBALS['OBJ_SEARCH_MANAGER'])) {
25 $GLOBALS['OBJ_SEARCH_MANAGER'] =& new SearchManager();
27 return $GLOBALS['OBJ_SEARCH_MANAGER'];
31 var $searchEngines = array();
32 var $parameters = array();
33 var $parametersValues = array();
35 function SearchManager() {
36 $this->loadSearchEngines();
37 $this->loadParameters();
40 function setParametersValues($parametersValues) {
41 for($i = 0, $max = count($this->parameters); $i < $max; $i++) {
42 if(isset($parametersValues[$this->parameters[$i]])) {
43 $this->parametersValues[$this->parameters[$i]] = (int) $parametersValues[$this->parameters[$i]];
48 function getParameters() {
49 return $this->parametersValues;
52 function addSearchEngine($type, &$searchEngine, $format = SEARCH__OUTPUT_HTML) {
53 $this->searchEngines[$format][$type] =& $searchEngine;
56 function addParameter($parameterName) {
57 if(!in_array($parameterName, $this->parameters)) {
58 $this->parameters[] = $parameterName;
62 function & getAvailableSearchEngines($format = SEARCH__OUTPUT_HTML) {
63 $availableSearchEngines = array();
64 if(isset($this->searchEngines[$format])) {
65 $searchEngines = $this->searchEngines[$format];
66 foreach($this->searchEngines[$format] AS $type => $searchEngine) {
67 if($searchEngine->isAvailable($this->parametersValues)) {
68 $availableSearchEngines[] = $searchEngine;
72 return $availableSearchEngines;
75 function getSearchRenderer($typeOfSearch, $words, $offset, $exact, $format = SEARCH__OUTPUT_HTML) {
76 if(isset($this->searchEngines[$format]) && isset($this->searchEngines[$format][$typeOfSearch])) {
77 $searchEngine =& $this->searchEngines[$format][$typeOfSearch];
78 if($searchEngine->isAvailable($this->parametersValues)) {
79 return $searchEngine->getSearchRenderer($words, $offset, $exact, $this->parametersValues);
85 function loadSearchEngines() {
86 // Specific search engines
87 $this->addSearchEngine(
88 SEARCH__TYPE_IS_ARTIFACT,
89 new ArtifactSearchEngine()
91 $this->addSearchEngine(
92 SEARCH__TYPE_IS_FORUM,
93 new ForumSearchEngine()
96 // Project search engines
97 $this->addSearchEngine(
98 SEARCH__TYPE_IS_FULL_PROJECT,
99 new GroupSearchEngine(SEARCH__TYPE_IS_FULL_PROJECT, 'FullProjectHtmlSearchRenderer', _('Search the entire project'))
101 $this->addSearchEngine(
102 SEARCH__TYPE_IS_TRACKERS,
103 new TrackersGroupSearchEngine()
105 $this->addSearchEngine(
106 SEARCH__TYPE_IS_FORUMS,
107 new ForumsGroupSearchEngine()
109 $this->addSearchEngine(
110 SEARCH__TYPE_IS_TASKS,
111 new TasksGroupSearchEngine()
113 $this->addSearchEngine(
115 new FrsGroupSearchEngine()
117 $this->addSearchEngine(
118 SEARCH__TYPE_IS_DOCS,
119 new DocsGroupSearchEngine()
121 $this->addSearchEngine(
122 SEARCH__TYPE_IS_NEWS,
123 new NewsGroupSearchEngine()
126 // Global search engine
127 $this->addSearchEngine(
128 SEARCH__TYPE_IS_SOFTWARE,
129 new SearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectHtmlSearchRenderer', _('Software/Group'))
131 $this->addSearchEngine(
132 SEARCH__TYPE_IS_PEOPLE,
133 new SearchEngine(SEARCH__TYPE_IS_PEOPLE, 'PeopleHtmlSearchRenderer', _('People'))
135 if ($GLOBALS['sys_use_people']) {
136 $this->addSearchEngine(
137 SEARCH__TYPE_IS_SKILL,
138 new SearchEngine(SEARCH__TYPE_IS_SKILL, 'SkillHtmlSearchRenderer', _('Skill'))
142 // Rss search engines
143 $this->addSearchEngine(
144 SEARCH__TYPE_IS_SOFTWARE,
145 new SearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectRssSearchRenderer', _('Software/Group')),
149 plugin_hook_by_reference('search_engines', $this);
152 function loadParameters() {
153 $this->parameters = array(
154 SEARCH__PARAMETER_GROUP_ID,
155 SEARCH__PARAMETER_ARTIFACT_ID,
156 SEARCH__PARAMETER_FORUM_ID,
157 SEARCH__PARAMETER_GROUP_PROJECT_ID
166 // c-file-style: "bsd"