5 * Copyright 2004 (c) Guillaume Smet
11 require_once $gfwww.'search/include/engines/GroupSearchEngine.class.php';
12 require_once $gfwww.'search/include/engines/DocsGroupSearchEngine.class.php';
13 require_once $gfwww.'search/include/engines/ForumsGroupSearchEngine.class.php';
14 require_once $gfwww.'search/include/engines/FrsGroupSearchEngine.class.php';
15 require_once $gfwww.'search/include/engines/NewsGroupSearchEngine.class.php';
16 require_once $gfwww.'search/include/engines/TasksGroupSearchEngine.class.php';
17 require_once $gfwww.'search/include/engines/TrackersGroupSearchEngine.class.php';
19 require_once $gfwww.'search/include/engines/ArtifactSearchEngine.class.php';
20 require_once $gfwww.'search/include/engines/ForumSearchEngine.class.php';
22 function & getSearchManager() {
23 if(!isset($GLOBALS['OBJ_SEARCH_MANAGER'])) {
24 $GLOBALS['OBJ_SEARCH_MANAGER'] =& new SearchManager();
26 return $GLOBALS['OBJ_SEARCH_MANAGER'];
30 var $searchEngines = array();
31 var $parameters = array();
32 var $parametersValues = array();
34 function SearchManager() {
35 $this->loadSearchEngines();
36 $this->loadParameters();
39 function setParametersValues($parametersValues) {
40 for($i = 0, $max = count($this->parameters); $i < $max; $i++) {
41 if(isset($parametersValues[$this->parameters[$i]])) {
42 $this->parametersValues[$this->parameters[$i]] = (int) $parametersValues[$this->parameters[$i]];
47 function getParameters() {
48 return $this->parametersValues;
51 function addSearchEngine($type, &$searchEngine, $format = SEARCH__OUTPUT_HTML) {
52 $this->searchEngines[$format][$type] =& $searchEngine;
55 function addParameter($parameterName) {
56 if(!in_array($parameterName, $this->parameters)) {
57 $this->parameters[] = $parameterName;
61 function & getAvailableSearchEngines($format = SEARCH__OUTPUT_HTML) {
62 $availableSearchEngines = array();
63 if(isset($this->searchEngines[$format])) {
64 $searchEngines = $this->searchEngines[$format];
65 foreach($this->searchEngines[$format] AS $type => $searchEngine) {
66 if($searchEngine->isAvailable($this->parametersValues)) {
67 $availableSearchEngines[] = $searchEngine;
71 return $availableSearchEngines;
74 function getSearchRenderer($typeOfSearch, $words, $offset, $exact, $format = SEARCH__OUTPUT_HTML) {
75 if(isset($this->searchEngines[$format]) && isset($this->searchEngines[$format][$typeOfSearch])) {
76 $searchEngine =& $this->searchEngines[$format][$typeOfSearch];
77 if($searchEngine->isAvailable($this->parametersValues)) {
78 return $searchEngine->getSearchRenderer($words, $offset, $exact, $this->parametersValues);
84 function loadSearchEngines() {
85 // Specific search engines
86 $this->addSearchEngine(
87 SEARCH__TYPE_IS_ARTIFACT,
88 new ArtifactSearchEngine()
90 $this->addSearchEngine(
91 SEARCH__TYPE_IS_FORUM,
92 new ForumSearchEngine()
95 // Project search engines
96 $this->addSearchEngine(
97 SEARCH__TYPE_IS_FULL_PROJECT,
98 new GroupSearchEngine(SEARCH__TYPE_IS_FULL_PROJECT, 'FullProjectHtmlSearchRenderer', _('Search the entire project'))
100 $this->addSearchEngine(
101 SEARCH__TYPE_IS_TRACKERS,
102 new TrackersGroupSearchEngine()
104 $this->addSearchEngine(
105 SEARCH__TYPE_IS_FORUMS,
106 new ForumsGroupSearchEngine()
108 $this->addSearchEngine(
109 SEARCH__TYPE_IS_TASKS,
110 new TasksGroupSearchEngine()
112 $this->addSearchEngine(
114 new FrsGroupSearchEngine()
116 $this->addSearchEngine(
117 SEARCH__TYPE_IS_DOCS,
118 new DocsGroupSearchEngine()
120 $this->addSearchEngine(
121 SEARCH__TYPE_IS_NEWS,
122 new NewsGroupSearchEngine()
125 # Hook to be able to load new search engine
126 plugin_hook_by_reference('group_search_engines', $this);
128 // Global search engine
129 $this->addSearchEngine(
130 SEARCH__TYPE_IS_SOFTWARE,
131 new GFSearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectHtmlSearchRenderer', _('Project'))
133 $this->addSearchEngine(
134 SEARCH__TYPE_IS_PEOPLE,
135 new GFSearchEngine(SEARCH__TYPE_IS_PEOPLE, 'PeopleHtmlSearchRenderer', _('People'))
137 if (forge_get_config('use_people')) {
138 $this->addSearchEngine(
139 SEARCH__TYPE_IS_SKILL,
140 new GFSearchEngine(SEARCH__TYPE_IS_SKILL, 'SkillHtmlSearchRenderer', _('Skill'))
144 // Rss search engines
145 $this->addSearchEngine(
146 SEARCH__TYPE_IS_SOFTWARE,
147 new GFSearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectRssSearchRenderer', _('Project')),
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
168 // c-file-style: "bsd"