ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilObjSearchSettingsGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once "./Services/Object/classes/class.ilObjectGUI.php";
5
18{
23 public function __construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output = true)
24 {
25 $this->type = "seas";
26 parent::__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output);
27
28 $this->lng->loadLanguageModule('search');
29 }
30
31 public function executeCommand()
32 {
33 $next_class = $this->ctrl->getNextClass($this);
34 $cmd = $this->ctrl->getCmd();
35 $this->prepareOutput();
36
37 switch ($next_class) {
38 case 'ilpermissiongui':
39 $this->tabs_gui->setTabActive('perm_settings');
40 include_once("Services/AccessControl/classes/class.ilPermissionGUI.php");
41 $perm_gui = new ilPermissionGUI($this);
42 $ret =&$this->ctrl->forwardCommand($perm_gui);
43 break;
44
45 default:
46 if ($cmd == "" || $cmd == "view") {
47 $cmd = "settings";
48 }
49 $cmd .= "Object";
50 $this->$cmd();
51
52 break;
53 }
54 return true;
55 }
56
57 public function cancelObject()
58 {
59 ilUtil::sendInfo($this->lng->txt("msg_cancel"), true);
60 $this->ctrl->redirect($this, "settings");
61 }
62
67 public function settingsObject()
68 {
69 global $ilAccess,$ilErr;
70
71 if (!$ilAccess->checkAccess('read', '', $this->object->getRefId())) {
72 $ilErr->raiseError($this->lng->txt('permission_denied'), $ilErr->MESSAGE);
73 }
74 $this->tabs_gui->setTabActive('settings');
75 $this->initFormSettings();
76 $this->tpl->setContent($this->form->getHTML());
77 return true;
78 }
79
84 public function saveSettingsObject()
85 {
86 include_once 'Services/WebServices/RPC/classes/class.ilRPCServerSettings.php';
87
88 global $rbacsystem;
89
90 if (!$rbacsystem->checkAccess('write', $this->object->getRefId())) {
91 $this->ilias->raiseError($this->lng->txt("permission_denied"), $this->ilias->error_obj->MESSAGE);
92 }
93
94 $this->object->initSettingsObject();
95 $this->object->settings_obj->setMaxHits((int) $_POST['max_hits']);
96 $this->object->settings_obj->enableIndex($_POST['search_index']);
97 $this->object->settings_obj->enableLucene($_POST['search_lucene']);
98 $this->object->settings_obj->setHideAdvancedSearch($_POST['hide_adv_search']);
99 $this->object->settings_obj->setAutoCompleteLength($_POST['auto_complete_length']);
100 $this->object->settings_obj->setDefaultOperator((int) $_POST['operator']);
101 $this->object->settings_obj->enableLuceneItemFilter((int) $_POST['if']);
102 $this->object->settings_obj->setLuceneItemFilter((array) $_POST['filter']);
103
104
105 $rpc_settings = ilRPCServerSettings::getInstance();
106 if ($this->object->settings_obj->enabledLucene() and !$rpc_settings->pingServer()) {
107 ilUtil::sendInfo($this->lng->txt('search_no_connection_lucene'), true);
108 $this->ctrl->redirect($this, 'settings');
109
110 return false;
111 }
112
113 $this->object->settings_obj->update();
114
115 ilUtil::sendInfo($this->lng->txt('settings_saved'), true);
116 $this->ctrl->redirect($this, 'settings');
117
118 return true;
119 }
120
121 public function getAdminTabs()
122 {
123 $this->getTabs();
124 }
125
131 public function getTabs()
132 {
133 global $rbacsystem;
134
135 if ($rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
136 $this->tabs_gui->addTarget(
137 "settings",
138 $this->ctrl->getLinkTarget($this, "settings"),
139 array("settings","", "view"),
140 "",
141 ""
142 );
143 }
144
145 if ($rbacsystem->checkAccess('read', $this->object->getRefId())) {
146 $this->tabs_gui->addTarget(
147 'lucene_advanced_settings',
148 $this->ctrl->getLinkTarget($this, 'advancedLuceneSettings')
149 );
150 }
151
152 if ($rbacsystem->checkAccess('read', $this->object->getRefId())) {
153 $this->tabs_gui->addTarget(
154 'lucene_settings_tab',
155 $this->ctrl->getLinkTarget($this, 'luceneSettings')
156 );
157 }
158
159
160 if ($rbacsystem->checkAccess('edit_permission', $this->object->getRefId())) {
161 $this->tabs_gui->addTarget(
162 "perm_settings",
163 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
164 array("perm","info","owner"),
165 'ilpermissiongui'
166 );
167 }
168 }
169
174 protected function initFormSettings()
175 {
176 global $lng,$ilDB,$DIC;
177
178 $access = $GLOBALS['DIC']->access();
179
180 include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
181 include_once './Services/Search/classes/class.ilSearchSettings.php';
182
184
185 $this->form = new ilPropertyFormGUI();
186 $this->form->setFormAction($this->ctrl->getFormAction($this, 'updateSettings'));
187
188 if ($access->checkAccess('write', '', $this->object->getRefId())) {
189 $this->form->addCommandButton('updateSettings', $this->lng->txt('save'));
190 }
191 $this->form->setTitle($this->lng->txt('seas_settings'));
192
193 // Max hits
194 $hits = new ilSelectInputGUI($this->lng->txt('seas_max_hits'), 'max_hits');
195 $hits->setValue($settings->getMaxHits());
196 $hits->setRequired(true);
197 for ($value = 5; $value <= 50; $value += 5) {
198 $values[$value] = $value;
199 }
200 $hits->setOptions($values);
201 $hits->setInfo($this->lng->txt('seas_max_hits_info'));
202 $this->form->addItem($hits);
203
204
205 // Search type
206 $type = new ilRadioGroupInputGUI($this->lng->txt('search_type'), 'search_type');
207
208 if ($settings->enabledLucene()) {
210 } elseif ($settings->enabledIndex()) {
212 } else {
214 }
215 $type->setRequired(true);
216 $this->form->addItem($type);
217
218 // Default operator
219 $operator = new ilRadioGroupInputGUI($this->lng->txt('lucene_default_operator'), 'operator');
220 $operator->setRequired(true);
221 $operator->setInfo($this->lng->txt('lucene_default_operator_info'));
222 $operator->setValue($settings->getDefaultOperator());
223
224 $and = new ilRadioOption($this->lng->txt('lucene_and'), ilSearchSettings::OPERATOR_AND);
225 $operator->addOption($and);
226
227 $or = new ilRadioOption($this->lng->txt('lucene_or'), ilSearchSettings::OPERATOR_OR);
228 $operator->addOption($or);
229 $this->form->addItem($operator);
230
231 // user search
232 $us = new ilCheckboxInputGUI($this->lng->txt('search_user_search_form'), 'user_search_enabled');
233 $us->setInfo($this->lng->txt('search_user_search_info_form'));
234 $us->setValue(1);
235 $us->setChecked($settings->isLuceneUserSearchEnabled());
236 $this->form->addItem($us);
237
238
239 // Item filter
240 $if = new ilCheckboxInputGUI($this->lng->txt('search_item_filter_form'), 'if');
241 $if->setValue(1);
242 $if->setChecked($settings->isLuceneItemFilterEnabled());
243 $if->setInfo($this->lng->txt('search_item_filter_form_info'));
244 $this->form->addItem($if);
245
246 $filter = $settings->getLuceneItemFilter();
248 $ch = new ilCheckboxInputGUI($this->lng->txt($def['trans']), 'filter[' . $obj . ']');
249 if (isset($filter[$obj]) and $filter[$obj]) {
250 $ch->setChecked(true);
251 }
252 $ch->setValue(1);
253 $if->addSubItem($ch);
254 }
255
256 $cdate = new ilCheckboxInputGUI($this->lng->txt('search_cdate_filter'), 'cdate');
257 $cdate->setInfo($this->lng->txt('search_cdate_filter_info'));
258 $cdate->setChecked($settings->isDateFilterEnabled());
259 $cdate->setValue(1);
260 $this->form->addItem($cdate);
261
262 // hide advanced search
263 $cb = new ilCheckboxInputGUI($lng->txt("search_hide_adv_search"), "hide_adv_search");
264 $cb->setChecked($settings->getHideAdvancedSearch());
265 $this->form->addItem($cb);
266
267
268
269 $direct = new ilRadioOption($this->lng->txt('search_direct'), ilSearchSettings::LIKE_SEARCH, $this->lng->txt('search_like_info'));
270 $type->addOption($direct);
271
272 if ($ilDB->supportsFulltext()) {
273 $index = new ilRadioOption($this->lng->txt('search_index'), ilSearchSettings::INDEX_SEARCH, $this->lng->txt('search_full_info'));
274 $type->addOption($index);
275 }
276
277 $lucene = new ilRadioOption($this->lng->txt('search_lucene'), ilSearchSettings::LUCENE_SEARCH, $this->lng->txt('java_server_info'));
278 $type->addOption($lucene);
279
280
281 // number of auto complete entries
282 $options = array(
283 5 => 5,
284 10 => 10,
285 20 => 20,
286 30 => 30
287 );
288 $si = new ilSelectInputGUI($lng->txt("search_auto_complete_length"), "auto_complete_length");
289 $si->setOptions($options);
290 $val = ($settings->getAutoCompleteLength() > 0)
291 ? $settings->getAutoCompleteLength()
292 : 10;
293 $si->setValue($val);
294 $this->form->addItem($si);
295
296 $inactive_user = new ilCheckboxInputGUI($this->lng->txt('search_show_inactive_user'), 'inactive_user');
297 $inactive_user->setInfo($this->lng->txt('search_show_inactive_user_info'));
298 $inactive_user->setChecked($settings->isInactiveUserVisible());
299 $this->form->addItem($inactive_user);
300
301 $limited_user = new ilCheckboxInputGUI($this->lng->txt('search_show_limited_user'), 'limited_user');
302 $limited_user->setInfo($this->lng->txt('search_show_limited_user_info'));
303 $limited_user->setChecked($settings->isLimitedUserVisible());
304 $this->form->addItem($limited_user);
305 }
306
307
312 protected function updateSettingsObject()
313 {
314 global $ilAccess;
315
316 $this->initFormSettings();
317 $this->form->checkInput();
318
319 if (!$ilAccess->checkAccess('write', '', $this->object->getRefId())) {
320 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
321 $GLOBALS['DIC']->ctrl()->redirect($this, 'settings');
322 }
323
324 include_once './Services/Search/classes/class.ilSearchSettings.php';
326 $settings->setMaxHits((int) $_POST['max_hits']);
327
328 switch ((int) $_POST['search_type']) {
330 $settings->enableIndex(false);
331 $settings->enableLucene(false);
332 break;
334 $settings->enableIndex(true);
335 $settings->enableLucene(false);
336 break;
338 $settings->enableIndex(false);
339 $settings->enableLucene(true);
340 break;
341 }
342
343 $settings->setDefaultOperator((int) $_POST['operator']);
344 $settings->enableLuceneItemFilter((int) $_POST['if']);
345 $settings->setLuceneItemFilter((array) $_POST['filter']);
346
347 $settings->setHideAdvancedSearch($_POST['hide_adv_search']);
348 $settings->setAutoCompleteLength($_POST['auto_complete_length']);
349 $settings->showInactiveUser($_POST["inactive_user"]);
350 $settings->showLimitedUser($_POST["limited_user"]);
351 $settings->enableDateFilter($_POST['cdate']);
352 $settings->enableLuceneUserSearch((int) $_POST['user_search_enabled']);
353 $settings->update();
354
355
356 // refresh lucene server
357 try {
358 $this->refreshLuceneSettings();
359 ilUtil::sendInfo($this->lng->txt('settings_saved'));
360 $this->settingsObject();
361 return true;
362 } catch (Exception $exception) {
363 ilUtil::sendFailure($exception->getMessage());
364 $this->settingsObject();
365 return false;
366 }
367
368 unset($_SESSION['search_last_class']);
369 }
370
377 {
378 $this->initSubTabs('lucene');
379 $this->tabs_gui->setTabActive('lucene_settings_tab');
380
381 if (!$form instanceof ilPropertyFormGUI) {
382 $this->initFormLuceneSettings();
383 }
384 $this->tpl->setContent($this->form->getHTML());
385 }
386
392 protected function initFormLuceneSettings()
393 {
394 include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
395 include_once './Services/Search/classes/class.ilSearchSettings.php';
396
398
399 $this->form = new ilPropertyFormGUI();
400 $this->form->setFormAction($this->ctrl->getFormAction($this, 'cancel'));
401
402 $this->form->setTitle($this->lng->txt('lucene_settings_title'));
403
404 $access = $GLOBALS['DIC']->access();
405 if ($access->checkAccess('write', '', $this->object->getRefId())) {
406 $this->form->addCommandButton('saveLuceneSettings', $this->lng->txt('save'));
407 }
408
409
410
411 // Item filter
412 $if = new ilCheckboxInputGUI($this->lng->txt('search_mime_filter_form'), 'mime_enabled');
413 $if->setValue(1);
414 $if->setChecked($this->settings->isLuceneMimeFilterEnabled());
415 $if->setInfo($this->lng->txt('search_item_filter_form_info'));
416 $this->form->addItem($if);
417
418 $mimes = $this->settings->getLuceneMimeFilter();
420 $ch = new ilCheckboxInputGUI($this->lng->txt($def['trans']), 'mime[' . $mime . ']');
421 if (isset($mimes[$mime]) and $mimes[$mime]) {
422 $ch->setChecked(true);
423 }
424 $ch->setValue(1);
425 $if->addSubItem($ch);
426 }
427
428 $prefix = new ilCheckboxInputGUI($this->lng->txt('lucene_prefix_wildcard'), 'prefix');
429 $prefix->setValue(1);
430 $prefix->setInfo($this->lng->txt('lucene_prefix_wildcard_info'));
431 $prefix->setChecked($this->settings->isPrefixWildcardQueryEnabled());
432 $this->form->addItem($prefix);
433
434
435 $numFrag = new ilNumberInputGUI($this->lng->txt('lucene_num_fragments'), 'fragmentCount');
436 $numFrag->setRequired(true);
437 $numFrag->setSize(2);
438 $numFrag->setMaxLength(2);
439 $numFrag->setMinValue(1);
440 $numFrag->setMaxValue(10);
441 $numFrag->setInfo($this->lng->txt('lucene_num_frag_info'));
442 $numFrag->setValue($this->settings->getFragmentCount());
443 $this->form->addItem($numFrag);
444
445 $sizeFrag = new ilNumberInputGUI($this->lng->txt('lucene_size_fragments'), 'fragmentSize');
446 $sizeFrag->setRequired(true);
447 $sizeFrag->setSize(2);
448 $sizeFrag->setMaxLength(4);
449 $sizeFrag->setMinValue(10);
450 $sizeFrag->setMaxValue(1000);
451 $sizeFrag->setInfo($this->lng->txt('lucene_size_frag_info'));
452 $sizeFrag->setValue($this->settings->getFragmentSize());
453 $this->form->addItem($sizeFrag);
454
455 $maxSub = new ilNumberInputGUI($this->lng->txt('lucene_max_sub'), 'maxSubitems');
456 $maxSub->setRequired(true);
457 $maxSub->setSize(2);
458 $maxSub->setMaxLength(2);
459 $maxSub->setMinValue(1);
460 $maxSub->setMaxValue(10);
461 $maxSub->setInfo($this->lng->txt('lucene_max_sub_info'));
462 $maxSub->setValue($this->settings->getMaxSubitems());
463 $this->form->addItem($maxSub);
464
465 $relevance = new ilCheckboxInputGUI($this->lng->txt('lucene_relevance'), 'relevance');
466 $relevance->setOptionTitle($this->lng->txt('lucene_show_relevance'));
467 $relevance->setInfo($this->lng->txt('lucene_show_relevance_info'));
468 $relevance->setValue(1);
469 $relevance->setChecked($this->settings->isRelevanceVisible());
470 $this->form->addItem($relevance);
471
472 // begin-patch mime_filter
473 $subrel = new ilCheckboxInputGUI('', 'subrelevance');
474 $subrel->setOptionTitle($this->lng->txt('lucene_show_sub_relevance'));
475 $subrel->setValue(1);
476 $subrel->setChecked($this->settings->isSubRelevanceVisible());
477 $relevance->addSubItem($subrel);
478 // end-patch mime_filter
479
480 $last_index = new ilDateTimeInputGUI($this->lng->txt('lucene_last_index_time'), 'last_index');
481 $last_index->setRequired(true);
482 $last_index->setShowTime(true);
483 $last_index->setDate($this->settings->getLastIndexTime());
484 $last_index->setInfo($this->lng->txt('lucene_last_index_time_info'));
485 $this->form->addItem($last_index);
486
487 return true;
488 }
489
494 protected function saveLuceneSettingsObject()
495 {
497
498 $this->initFormLuceneSettings();
499
501 $settings->setFragmentCount((int) $_POST['fragmentCount']);
502 $settings->setFragmentSize((int) $_POST['fragmentSize']);
503 $settings->setMaxSubitems((int) $_POST['maxSubitems']);
504 $settings->showRelevance((int) $_POST['relevance']);
505 $settings->enableLuceneOfflineFilter((int) $_POST['offline_filter']);
506 $settings->enableLuceneMimeFilter((int) $_POST['mime_enabled']);
507 $settings->setLuceneMimeFilter((array) $_POST['mime']);
508 $settings->showSubRelevance((int) $_POST['subrelevance']);
509 $settings->enablePrefixWildcardQuery((int) $_POST['prefix']);
510
511 if ($this->form->checkInput()) {
512 $settings->setLastIndexTime($this->form->getItemByPostVar('last_index')->getDate());
513 $settings->update();
514
515 // refresh lucene server
516 try {
517 $this->refreshLuceneSettings();
518 ilUtil::sendInfo($this->lng->txt('settings_saved'));
519 $this->luceneSettingsObject();
520 return true;
521 } catch (Exception $exception) {
522 ilUtil::sendFailure($exception->getMessage());
523 $this->luceneSettingsObject();
524 return false;
525 }
526 }
527
528 ilUtil::sendInfo($this->lng->txt('err_check_input'));
529 $this->form->setValuesByPost();
530 $this->luceneSettingsObject($this->form);
531 return false;
532 }
533
538 protected function refreshLuceneSettings()
539 {
540 global $ilSetting;
541
542 if (!ilSearchSettings::getInstance()->enabledLucene()) {
543 return true;
544 }
545
546 try {
547 include_once './Services/WebServices/RPC/classes/class.ilRpcClientFactory.php';
548 ilRpcClientFactory::factory('RPCAdministration')->refreshSettings(CLIENT_ID . '_' . $ilSetting->get('inst_id', 0));
549 } catch (Exception $exception) {
550 ilLoggerFactory::getLogger('src')->error('Refresh of lucene server settings failed with message: ' . $exception->getMessage());
551 throw $exception;
552 }
553 }
554
558 protected function advancedLuceneSettingsObject()
559 {
560 $this->initSubTabs('lucene');
561 $this->tabs_gui->setTabActive('lucene_advanced_settings');
562
563 include_once './Services/Search/classes/Lucene/class.ilLuceneAdvancedSearchActivationTableGUI.php';
564 include_once './Services/Search/classes/Lucene/class.ilLuceneAdvancedSearchSettings.php';
565
566 $table = new ilLuceneAdvancedSearchActivationTableGUI($this, 'advancedLuceneSettings');
567 $table->setTitle($this->lng->txt('lucene_advanced_settings_table'));
569
570 $this->tpl->setContent($table->getHTML());
571 }
572
577 {
578 $access = $GLOBALS['DIC']->access();
579
580 if (!$access->checkAccess('write', '', $this->object->getRefId())) {
581 ilUtil::sendFailure($this->lng->txt('permission_denied'), true);
582 $GLOBALS['DIC']->ctrl()->redirect($this, 'settings');
583 }
584
585
587 foreach (ilLuceneAdvancedSearchFields::getFields() as $field => $translation) {
588 $settings->setActive($field, in_array($field, (array) $_POST['fid']) ? true : false);
589 }
590 $settings->save();
591 ilUtil::sendInfo($this->lng->txt('settings_saved'));
593 }
594
598 protected function initSubTabs($a_section)
599 {
600 switch ($a_section) {
601 case 'lucene':
602 $this->tabs_gui->addSubTabTarget(
603 'lucene_general_settings',
604 $this->ctrl->getLinkTarget($this, 'luceneSettings')
605 );
606
607 break;
608 }
609 }
610} // END class.ilObjSearchSettingsGUI
if(!isset( $_REQUEST[ 'ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
This class represents a checkbox property in a property form.
This class represents a date/time property in a property form.
static getLogger($a_component_id)
Get component logger.
static getFields()
Return an array of all meta data fields.
This class represents a number property in a property form.
luceneSettingsObject(ilPropertyFormGUI $form=null)
Lucene settings.
refreshLuceneSettings()
Refresh lucene server settings.
__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output=true)
Constructor @access public.
advancedLuceneSettingsObject()
show advanced settings
saveAdvancedLuceneSettingsObject()
Save advanced settings.
cancelObject()
cancel action and go back to previous page @access public
saveLuceneSettingsObject()
Save Lucene settings.
getAdminTabs()
administration tabs show only permissions and trash folder
settingsObject()
Show settings @access public.
initFormLuceneSettings()
Show lucene settings form.
getTabs()
get tabs @access public
saveSettingsObject()
Save settings @access public.
Class ilObjectGUI Basic methods of all Output classes.
prepareOutput($a_show_subobjects=true)
prepare output
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
This class represents a property form user interface.
static getInstance()
Get singelton instance.
This class represents a property in a property form.
This class represents an option in a radio group.
static factory($a_package, $a_timeout=0)
Creates an ilRpcClient instance to our ilServer.
static getLuceneItemFilterDefinitions()
Get lucene item filter definitions.
static getLuceneMimeFilterDefinitions()
This class represents a selection list property in a property form.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
$def
Definition: croninfo.php:21
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
global $ilBench
Definition: ilias.php:18
$index
Definition: metadata.php:60
redirection script todo: (a better solution should control the processing via a xml file)
$ret
Definition: parser.php:6
global $ilSetting
Definition: privfeed.php:17
$type
if(empty($password)) $table
Definition: pwgen.php:24
if(isset($_POST['submit'])) $form
global $DIC
Definition: saml.php:7
settings()
Definition: settings.php:2
global $ilDB