5 * Copyright 2004 (c) Guillaume Smet
6 * Copyright 2011, Franck Villaume - Capgemini
7 * Copyright 2019, Franck Villaume - TrivialDev
8 * http://fusionforge.org
10 * This file is part of FusionForge. FusionForge is free software;
11 * you can redistribute it and/or modify it under the terms of the
12 * GNU General Public License as published by the Free Software
13 * Foundation; either version 2 of the Licence, or (at your option)
16 * FusionForge is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License along
22 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 require_once $gfwww.'search/include/engines/GroupSearchEngine.class.php';
27 require_once $gfwww.'search/include/engines/DocsGroupSearchEngine.class.php';
28 require_once $gfwww.'search/include/engines/ForumsGroupSearchEngine.class.php';
29 require_once $gfwww.'search/include/engines/FrsGroupSearchEngine.class.php';
30 require_once $gfwww.'search/include/engines/NewsGroupSearchEngine.class.php';
31 require_once $gfwww.'search/include/engines/TasksGroupSearchEngine.class.php';
32 require_once $gfwww.'search/include/engines/TrackersGroupSearchEngine.class.php';
34 require_once $gfwww.'search/include/engines/ArtifactSearchEngine.class.php';
35 require_once $gfwww.'search/include/engines/ForumSearchEngine.class.php';
37 function & getSearchManager() {
38 if(!isset($GLOBALS['OBJ_SEARCH_MANAGER'])) {
39 $GLOBALS['OBJ_SEARCH_MANAGER'] = new SearchManager();
41 return $GLOBALS['OBJ_SEARCH_MANAGER'];
45 var $searchEngines = array();
46 var $parameters = array();
47 var $parametersValues = array();
49 function __construct() {
50 $this->loadSearchEngines();
51 $this->loadParameters();
54 function setParametersValues($parametersValues) {
55 for($i = 0, $max = count($this->parameters); $i < $max; $i++) {
56 if(isset($parametersValues[$this->parameters[$i]])) {
57 $this->parametersValues[$this->parameters[$i]] = (int) $parametersValues[$this->parameters[$i]];
62 function getParameters() {
63 return $this->parametersValues;
66 function addSearchEngine($type, $searchEngine, $format = SEARCH__OUTPUT_HTML) {
67 $this->searchEngines[$format][$type] = $searchEngine;
70 function addParameter($parameterName) {
71 if(!in_array($parameterName, $this->parameters)) {
72 $this->parameters[] = $parameterName;
76 function & getAvailableSearchEngines($format = SEARCH__OUTPUT_HTML) {
77 $availableSearchEngines = array();
78 if (isset($this->searchEngines[$format])) {
79 foreach ($this->searchEngines[$format] AS $type => $searchEngine) {
80 if ($searchEngine->isAvailable($this->parametersValues)) {
81 $availableSearchEngines[] = $searchEngine;
85 return $availableSearchEngines;
88 function getSearchRenderer($typeOfSearch, $words, $offset, $exact, $format = SEARCH__OUTPUT_HTML) {
89 if(isset($this->searchEngines[$format]) && isset($this->searchEngines[$format][$typeOfSearch])) {
90 $searchEngine =& $this->searchEngines[$format][$typeOfSearch];
91 if($searchEngine->isAvailable($this->parametersValues)) {
92 return $searchEngine->getSearchRenderer($words, $offset, $exact, $this->parametersValues);
98 function loadSearchEngines() {
99 // Specific search engines
100 $artifactSE = new ArtifactSearchEngine();
101 $this->addSearchEngine(
102 SEARCH__TYPE_IS_ARTIFACT,
105 $forumSE = new ForumSearchEngine();
106 $this->addSearchEngine(
107 SEARCH__TYPE_IS_FORUM,
111 // Project search engines
112 $groupSE = new GroupSearchEngine(SEARCH__TYPE_IS_FULL_PROJECT, 'FullProjectHtmlSearchRenderer', _('Search the entire project'));
113 $this->addSearchEngine(
114 SEARCH__TYPE_IS_FULL_PROJECT,
117 $groupTrackerSE = new TrackersGroupSearchEngine();
118 $this->addSearchEngine(
119 SEARCH__TYPE_IS_TRACKERS,
122 $groupForumSE = new ForumsGroupSearchEngine();
123 $this->addSearchEngine(
124 SEARCH__TYPE_IS_FORUMS,
127 $groupTaskSE = new TasksGroupSearchEngine();
128 $this->addSearchEngine(
129 SEARCH__TYPE_IS_TASKS,
132 $groupFRSSE = new FrsGroupSearchEngine();
133 $this->addSearchEngine(
137 $groupDocsSE = new DocsGroupSearchEngine();
138 $this->addSearchEngine(
139 SEARCH__TYPE_IS_DOCS,
142 $groupNewsSE = new NewsGroupSearchEngine();
143 $this->addSearchEngine(
144 SEARCH__TYPE_IS_NEWS,
148 # Hook to be able to load new search engine
149 plugin_hook_by_reference('group_search_engines', $this);
151 // Global search engine
152 $ffSESoft = new GFSearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectHtmlSearchRenderer', _('Projects'));
153 $this->addSearchEngine(
154 SEARCH__TYPE_IS_SOFTWARE,
157 $ffSEPeople = new GFSearchEngine(SEARCH__TYPE_IS_PEOPLE, 'PeopleHtmlSearchRenderer', _('People'));
158 $this->addSearchEngine(
159 SEARCH__TYPE_IS_PEOPLE,
162 $ffSEAllDocs = new GFSearchEngine(SEARCH__TYPE_IS_ALLDOCS, 'DocsAllHtmlSearchRenderer', _('Documents'));
163 $this->addSearchEngine(
164 SEARCH__TYPE_IS_ALLDOCS,
168 if (forge_get_config('use_people')) {
169 $ffSESkills = new GFSearchEngine(SEARCH__TYPE_IS_SKILL, 'SkillHtmlSearchRenderer', _('Skills'));
170 $this->addSearchEngine(
171 SEARCH__TYPE_IS_SKILL,
176 // Rss search engines
177 $ffSESoftRss = new GFSearchEngine(SEARCH__TYPE_IS_SOFTWARE, 'ProjectRssSearchRenderer', _('Projects'));
178 $this->addSearchEngine(
179 SEARCH__TYPE_IS_SOFTWARE,
184 plugin_hook('search_engines', array('object' => $this));
187 function loadParameters() {
188 $this->parameters = array(
189 SEARCH__PARAMETER_GROUP_ID,
190 SEARCH__PARAMETER_ARTIFACT_ID,
191 SEARCH__PARAMETER_FORUM_ID,
192 SEARCH__PARAMETER_GROUP_PROJECT_ID
200 // c-file-style: "bsd"