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 
4 require_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 
183  $settings = new ilSearchSettings();
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 
376  protected function luceneSettingsObject(ilPropertyFormGUI $form = null)
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  {
496  global $ilBench,$ilLog,$ilSetting;
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 
576  protected function saveAdvancedLuceneSettingsObject()
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
advancedLuceneSettingsObject()
show advanced settings
This class represents an option in a radio group.
settingsObject()
Show settings public.
static getLuceneItemFilterDefinitions()
Get lucene item filter definitions.
$_SESSION["AccountId"]
This class represents a selection list property in a property form.
This class represents a property form user interface.
saveLuceneSettingsObject()
Save Lucene settings.
$type
global $DIC
Definition: saml.php:7
static factory($a_package, $a_timeout=0)
Creates an ilRpcClient instance to our ilServer.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
initFormSettings()
Init settings form.
This class represents a checkbox property in a property form.
$index
Definition: metadata.php:60
This class represents a date/time property in a property form.
setInfo($a_info)
Set Information Text.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
initFormLuceneSettings()
Show lucene settings form.
setChecked($a_checked)
Set Checked.
prepareOutput($a_show_subobjects=true)
prepare output
This class represents a property in a property form.
static getLuceneMimeFilterDefinitions()
if(isset($_POST['submit'])) $form
setValue($a_value)
Set Value.
This class represents a number property in a property form.
Class ilObjectGUI Basic methods of all Output classes.
setValue($a_value)
Set Value.
redirection script todo: (a better solution should control the processing via a xml file) ...
Create styles array
The data for the language used.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
settings()
Definition: settings.php:2
__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output=true)
Constructor public.
Create new PHPExcel object
obj_idprivate
luceneSettingsObject(ilPropertyFormGUI $form=null)
Lucene settings.
global $ilSetting
Definition: privfeed.php:17
global $ilBench
Definition: ilias.php:18
global $ilDB
$ret
Definition: parser.php:6
static getFields()
Return an array of all meta data fields.
$def
Definition: croninfo.php:21
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
static getLogger($a_component_id)
Get component logger.
refreshLuceneSettings()
Refresh lucene server settings.
if(empty($password)) $table
Definition: pwgen.php:24
setOptionTitle($a_optiontitle)
Set Option Title (optional).
$_POST["username"]
saveSettingsObject()
Save settings public.
setRequired($a_required)
Set Required.
if(!isset($_REQUEST['ReturnTo'])) if(!isset($_REQUEST['AuthId'])) $options
Definition: as_login.php:20
saveAdvancedLuceneSettingsObject()
Save advanced settings.
static getInstance()
Get singelton instance.