ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilSearchSettings.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
15{
16 const LIKE_SEARCH = 0;
17 const INDEX_SEARCH = 1;
18 const LUCENE_SEARCH = 2;
19
20 const OPERATOR_AND = 1;
21 const OPERATOR_OR = 2;
22
23 protected static $instance = null;
24
26 protected $fragmentSize = 30;
27 protected $fragmentCount = 3;
28 protected $numSubitems = 5;
29 protected $showRelevance = true;
30 protected $last_index_date = null;
31 protected $lucene_item_filter_enabled = false;
32 protected $lucene_item_filter = array();
33 protected $lucene_offline_filter = true;
34 protected $auto_complete_length = 10;
35
36 protected $lucene_mime_filter_enabled = false;
37 protected $lucene_mime_filter = array();
38 protected $showSubRelevance = false;
39 protected $prefix_wildcard = false;
40
41 protected $user_search = false;
42
43 var $ilias = null;
44 var $max_hits = null;
45 var $index = null;
46
48 {
49 global $ilias;
50
51 $this->ilias =& $ilias;
52 $this->__read();
53 }
54
61 public static function getInstance()
62 {
63 if(self::$instance == null)
64 {
65 return self::$instance = new ilSearchSettings();
66 }
67 return self::$instance;
68 }
69
75 public static function getLuceneItemFilterDefinitions()
76 {
77 return array(
78 'crs' => array('filter' => 'type:crs','trans' => 'objs_crs'),
79 'grp' => array('filter' => 'type:grp', 'trans' => 'objs_grp'),
80 'lms' => array('filter' => 'type:lm OR type:htlm OR type:sahs OR type:dbk','trans' => 'learning_resource'),
81 'glo' => array('filter' => 'type:glo','trans' => 'objs_glo'),
82 'mep' => array('filter' => 'type:mep', 'trans' => 'objs_mep'),
83 'tst' => array('filter' => 'type:tst OR type:svy OR type:qpl OR type:spl','trans' => 'search_tst_svy'),
84 'frm' => array('filter' => 'type:frm','trans' => 'objs_frm'),
85 'exc' => array('filter' => 'type:exc','trans' => 'objs_exc'),
86 'file' => array('filter' => 'type:file','trans' => 'objs_file'),
87 'mcst' => array('filter' => 'type:mcst','trans' => 'objs_mcst'),
88 'wiki' => array('filter' => 'type:wiki','trans' => 'objs_wiki')
89 );
90 }
91
92 public static function getLuceneMimeFilterDefinitions()
93 {
94 return array(
95 'pdf' => array('filter' => 'mimeType:pdf','trans' => 'search_mime_pdf'),
96 'word' => array('filter' => 'mimeType:word','trans' => 'search_mime_word'),
97 'excel' => array('filter' => 'mimeType:excel','trans' => 'search_mime_excel'),
98 'powerpoint' => array('filter' => 'mimeType:powerpoint','trans' => 'search_mime_powerpoint'),
99 'image' => array('filter' => 'mimeType:image','trans' => 'search_mime_image')
100 );
101 }
102
109 {
110 if(!$this->isLuceneItemFilterEnabled())
111 {
112 return array();
113 }
114
115 $filter = $this->getLuceneItemFilter();
116 $enabled = array();
117 foreach(self::getLuceneItemFilterDefinitions() as $obj => $def)
118 {
119 if(isset($filter[$obj]) and $filter[$obj])
120 {
121 $enabled[$obj] = $def;
122 }
123 }
124 return $enabled;
125 }
126
127 // begin-patch mime_filter
129 {
130 if(!$this->isLuceneItemFilterEnabled())
131 {
132 return array();
133 }
134
135 $filter = $this->getLuceneMimeFilter();
136 $enabled = array();
137 foreach(self::getLuceneMimeFilterDefinitions() as $mime => $def)
138 {
139 if(isset($filter[$mime]) and $filter[$mime])
140 {
141 $enabled[$mime] = $def;
142 }
143 }
144 return $enabled;
145 }
146
147 public function enablePrefixWildcardQuery($a_stat)
148 {
149 $this->prefix_wildcard = $a_stat;
150 }
151
153 {
155 }
156
157 // end-patch mime_filter
158
165 {
166 global $ilDB;
167
168 static $seas_ref_id = 0;
169
170 if($seas_ref_id)
171 {
172 return $seas_ref_id;
173 }
174 $query = "SELECT object_reference.ref_id as ref_id FROM object_reference,tree,object_data ".
175 "WHERE tree.parent = ".$ilDB->quote(SYSTEM_FOLDER_ID,'integer')." ".
176 "AND object_data.type = 'seas' ".
177 "AND object_reference.ref_id = tree.child ".
178 "AND object_reference.obj_id = object_data.obj_id";
179
180 $res = $ilDB->query($query);
181 $row = $res->fetchRow(DB_FETCHMODE_OBJECT);
182
183 return $seas_ref_id = $row->ref_id;
184 }
185
186 function enabledIndex()
187 {
188 global $ilDB;
189
190 if($ilDB->getDBType() == 'oracle')
191 {
192 return false;
193 }
194 return $this->index ? true : false;
195 }
196 function enableIndex($a_status)
197 {
198 $this->index = $a_status;
199 }
200 function enabledLucene()
201 {
202 return $this->lucene ? true : false;
203 }
204 function enableLucene($a_status)
205 {
206 $this->lucene = $a_status ? true : false;
207 }
208
209 function getMaxHits()
210 {
211 return $this->max_hits;
212 }
213 function setMaxHits($a_max_hits)
214 {
215 $this->max_hits = $a_max_hits;
216 }
217
218 public function getDefaultOperator()
219 {
221 }
222
223 public function setDefaultOperator($a_op)
224 {
225 $this->default_operator = $a_op;
226 }
227
228 public function setFragmentSize($a_size)
229 {
230 $this->fragmentSize = $a_size;
231 }
232
233 public function getFragmentSize()
234 {
235 return $this->fragmentSize;
236 }
237
238 public function setFragmentCount($a_count)
239 {
240 $this->fragmentCount = $a_count;
241 }
242
243 public function getHideAdvancedSearch()
244 {
245 return $this->hide_adv_search ? true : false;
246 }
247 public function setHideAdvancedSearch($a_status)
248 {
249 $this->hide_adv_search = $a_status;
250 }
251 public function getAutoCompleteLength()
252 {
254 }
256 {
257 $this->auto_complete_length = $auto_complete_length;
258 }
259
260 public function getFragmentCount()
261 {
263 }
264
265 public function setMaxSubitems($a_max)
266 {
267 $this->numSubitems = $a_max;
268 }
269
270 public function getMaxSubitems()
271 {
272 return $this->numSubitems;
273 }
274
275 public function isRelevanceVisible()
276 {
278 }
279
280 public function showRelevance($a_status)
281 {
282 $this->showRelevance = (bool) $a_status;
283 }
284
285 public function getLastIndexTime()
286 {
287 return $this->last_index_date instanceof ilDateTime ?
288 $this->last_index_date :
289 new ilDateTime('2009-01-01 12:00:00',IL_CAL_DATETIME);
290 }
291
292 public function enableLuceneItemFilter($a_status)
293 {
294 $this->lucene_item_filter_enabled = $a_status;
295 }
296
298 {
300 }
301
302 public function getLuceneItemFilter()
303 {
305 }
306
307
308 public function setLuceneItemFilter($a_filter)
309 {
310 $this->lucene_item_filter = $a_filter;
311 }
312
313 public function enableLuceneOfflineFilter($a_stat)
314 {
315 $this->lucene_offline_filter = $a_stat;
316 }
317
319 {
321 }
322
323 public function showSubRelevance($a_stat)
324 {
325 $this->showSubRelevance = $a_stat;
326 }
327
328 public function isSubRelevanceVisible()
329 {
331 }
332
333
334 public function setLuceneMimeFilter($a_filter)
335 {
336 $this->lucene_mime_filter = $a_filter;
337 }
338
339 public function getLuceneMimeFilter()
340 {
342 }
343
348 {
350 }
351
356 public function enableLuceneMimeFilter($a_stat)
357 {
358 $this->lucene_mime_filter_enabled = $a_stat;
359 }
360
361
365 public function setLastIndexTime($time)
366 {
367 $this->last_index_date = $time;
368 }
369
375 {
376 return $this->user_search;
377 }
378
383 public function enableLuceneUserSearch($a_status)
384 {
385 $this->user_search = $a_status;
386 }
387
388 function update()
389 {
390 global $ilSetting;
391
392 $this->ilias->setSetting('search_max_hits',$this->getMaxHits());
393 $this->ilias->setSetting('search_index',(int) $this->enabledIndex());
394 $this->ilias->setSetting('search_lucene',(int) $this->enabledLucene());
395
396 $this->ilias->setSetting('lucene_default_operator',$this->getDefaultOperator());
397 $this->ilias->setSetting('lucene_fragment_size',$this->getFragmentSize());
398 $this->ilias->setSetting('lucene_fragment_count',$this->getFragmentCount());
399 $this->ilias->setSetting('lucene_max_subitems',$this->getMaxSubitems());
400 $this->ilias->setSetting('lucene_show_relevance',$this->isRelevanceVisible());
401 $this->ilias->setSetting('lucene_last_index_time',$this->getLastIndexTime()->get(IL_CAL_UNIX));
402 $this->ilias->setSetting('hide_adv_search',(int) $this->getHideAdvancedSearch());
403 $this->ilias->setSetting('auto_complete_length',(int) $this->getAutoCompleteLength());
404 $this->ilias->setSetting('lucene_item_filter_enabled',(int) $this->isLuceneItemFilterEnabled());
405 $this->ilias->setSetting('lucene_item_filter',serialize($this->getLuceneItemFilter()));
406 $this->ilias->setSetting('lucene_offline_filter',(int) $this->isLuceneOfflineFilterEnabled());
407 $this->ilias->setSetting('lucene_mime_filter',serialize($this->getLuceneMimeFilter()));
408 $this->ilias->setSetting('lucene_sub_relevance',$this->isSubRelevanceVisible());
409 $ilSetting->set('lucene_mime_filter_enabled',$this->isLuceneMimeFilterEnabled());
410 $this->ilias->setSetting('lucene_prefix_wildcard',$this->isPrefixWildcardQueryEnabled());
411 $ilSetting->set('lucene_user_search',$this->isLuceneUserSearchEnabled());
412
413 return true;
414 }
415
416 // PRIVATE
417 function __read()
418 {
419 global $ilSetting;
420
421 $this->setMaxHits($this->ilias->getSetting('search_max_hits',10));
422 $this->enableIndex($this->ilias->getSetting('search_index',0));
423 $this->enableLucene($this->ilias->getSetting('search_lucene',0));
424
425 $this->setDefaultOperator($this->ilias->getSetting('lucene_default_operator',self::OPERATOR_AND));
426 $this->setFragmentSize($this->ilias->getSetting('lucene_fragment_size',50));
427 $this->setFragmentCount($this->ilias->getSetting('lucene_fragment_count',3));
428 $this->setMaxSubitems($this->ilias->getSetting('lucene_max_subitems',5));
429 $this->showRelevance($this->ilias->getSetting('lucene_show_relevance',true));
430
431 if($time = $this->ilias->getSetting('lucene_last_index_time',false))
432 {
433 $this->setLastIndexTime(new ilDateTime($time,IL_CAL_UNIX));
434 }
435 else
436 {
437 $this->setLastIndexTime(null);
438 }
439
440 $this->setHideAdvancedSearch($this->ilias->getSetting('hide_adv_search',0));
441 $this->setAutoCompleteLength($this->ilias->getSetting('auto_complete_length',$this->getAutoCompleteLength()));
442
443 $this->enableLuceneItemFilter($this->ilias->getSetting('lucene_item_filter_enabled',(int) $this->isLuceneItemFilterEnabled()));
444
445 $filter = $this->ilias->getSetting('lucene_item_filter',serialize($this->getLuceneItemFilter()));
446 $this->setLuceneItemFilter(unserialize($filter));
447 $this->enableLuceneOfflineFilter($this->ilias->getSetting('lucene_offline_filter'), $this->isLuceneOfflineFilterEnabled());
448
449 $this->enableLuceneMimeFilter($ilSetting->get('lucene_mime_filter_enabled',$this->lucene_item_filter_enabled));
450 $filter = $this->ilias->getSetting('lucene_mime_filter',serialize($this->getLuceneMimeFilter()));
451 $this->setLuceneMimeFilter(unserialize($filter));
452 $this->showSubRelevance($this->ilias->getSetting('lucene_sub_relevance',$this->showSubRelevance));
453 $this->enablePrefixWildcardQuery($this->ilias->getSetting('lucene_prefix_wildcard',$this->prefix_wildcard));
454 $this->enableLuceneUserSearch($ilSetting->get('lucene_user_search',$this->user_search));
455
456 }
457}
458?>
const DB_FETCHMODE_OBJECT
Definition: class.ilDB.php:11
const IL_CAL_UNIX
const IL_CAL_DATETIME
@classDescription Date and time handling
static getLuceneItemFilterDefinitions()
Get lucene item filter definitions.
isLuceneMimeFilterEnabled()
Check if lucene mime filter is enabled.
_getSearchSettingRefId()
Read the ref_id of Search Settings object.
enableLuceneMimeFilter($a_stat)
Enable lucene mime filter.
setAutoCompleteLength($auto_complete_length)
enableLuceneUserSearch($a_status)
Enable lucene user search.
getEnabledLuceneItemFilterDefinitions()
Get lucene item filter definitions.
isLuceneUserSearchEnabled()
Check if user search is enabled.
static getLuceneMimeFilterDefinitions()
redirection script todo: (a better solution should control the processing via a xml file)
global $ilSetting
Definition: privfeed.php:40
global $ilDB