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() {
88 // Specific search engines
89 $this->addSearchEngine(
90 SEARCH__TYPE_IS_ARTIFACT,
91 new ArtifactSearchEngine()
93 $this->addSearchEngine(
94 SEARCH__TYPE_IS_FORUM,
95 new ForumSearchEngine()
98 // Project search engines
99 $this->addSearchEngine(
100 SEARCH__TYPE_IS_FULL_PROJECT,
101 new GroupSearchEngine(SEARCH__TYPE_IS_FULL_PROJECT, 'FullProjectHtmlSearchRenderer', _('Search the entire project'))
103 $this->addSearchEngine(
104 SEARCH__TYPE_IS_TRACKERS,
105 new TrackersGroupSearchEngine()
107 $this->addSearchEngine(
108 SEARCH__TYPE_IS_FORUMS,
109 new ForumsGroupSearchEngine()
111 $this->addSearchEngine(
112 SEARCH__TYPE_IS_TASKS,
113 new TasksGroupSearchEngine()
115 $this->addSearchEngine(
117 new FrsGroupSearchEngine()
119 $this->addSearchEngine(
120 SEARCH__TYPE_IS_DOCS,
121 new DocsGroupSearchEngine()
123 $this->addSearchEngine(
124 SEARCH__TYPE_IS_NEWS,
125 new NewsGroupSearchEngine()
128 // Global search engine
129 $this->addSearchEngine(
130 SEARCH__TYPE_IS_SOFTWARE,
131 new SearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectHtmlSearchRenderer', _('Software/Group'))
133 $this->addSearchEngine(
134 SEARCH__TYPE_IS_PEOPLE,
135 new SearchEngine(SEARCH__TYPE_IS_PEOPLE, 'PeopleHtmlSearchRenderer', _('People'))
137 if ($GLOBALS['sys_use_people']) {
138 $this->addSearchEngine(
139 SEARCH__TYPE_IS_SKILL,
140 new SearchEngine(SEARCH__TYPE_IS_SKILL, 'SkillHtmlSearchRenderer', _('Skill'))
144 // Rss search engines
145 $this->addSearchEngine(
146 SEARCH__TYPE_IS_SOFTWARE,
147 new SearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectRssSearchRenderer', _('Software/Group')),
151 plugin_hook_by_reference('search_engines', $this);
154 function loadParameters() {
155 $this->parameters = array(
156 SEARCH__PARAMETER_GROUP_ID,
157 SEARCH__PARAMETER_ARTIFACT_ID,
158 SEARCH__PARAMETER_FORUM_ID,
159 SEARCH__PARAMETER_GROUP_PROJECT_ID