ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
class.ilObjSystemFolderGUI.php
Go to the documentation of this file.
1 <?php
2 
24 
34 {
35  protected \ILIAS\Repository\InternalGUIService $gui;
37  protected \ILIAS\Style\Content\Object\ObjectFacade $content_style_domain;
38  protected ilTabsGUI $tabs;
42  protected ilDBInterface $db;
44  protected ilHelpGUI $help;
46  protected ilBenchmark $bench;
47  public string $type;
48  protected \ILIAS\HTTP\Wrapper\WrapperFactory $wrapper;
49  protected \ILIAS\Refinery\Factory $refinery;
50 
55  public function __construct($a_data, $a_id, $a_call_by_reference)
56  {
57  global $DIC;
58 
59  $this->tabs = $DIC->tabs();
60  $this->access = $DIC->access();
61  $this->ctrl = $DIC->ctrl();
62  $this->rbacsystem = $DIC->rbac()->system();
63  $this->user = $DIC->user();
64  $this->obj_definition = $DIC["objDefinition"];
65  $this->settings = $DIC->settings();
66  $this->error = $DIC["ilErr"];
67  $this->db = $DIC->database();
68  $this->style_definition = $DIC["styleDefinition"];
69  $this->lng = $DIC->language();
70  $this->tpl = $DIC["tpl"];
71  $this->help = $DIC["ilHelp"];
72  $this->toolbar = $DIC->toolbar();
73  $this->client_ini = $DIC["ilClientIniFile"];
74  $this->type = "adm";
75  $this->bench = $DIC["ilBench"];
76  $this->wrapper = $DIC->http()->wrapper();
77  $this->refinery = $DIC->refinery();
78  parent::__construct($a_data, $a_id, $a_call_by_reference, false);
79 
80  $this->lng->loadLanguageModule("administration");
81  $this->lng->loadLanguageModule("adm");
82  $this->content_style_domain = $DIC->contentStyle()
83  ->domain()
84  ->styleForRefId($this->object->getRefId());
85  $this->gui = $DIC->repository()->internal()->gui();
86  }
87 
88  public function executeCommand(): void
89  {
90  $ilTabs = $this->tabs;
91 
92  $next_class = $this->ctrl->getNextClass($this);
93  $this->prepareOutput();
94 
95  switch ($next_class) {
96  case 'ilpermissiongui':
97  $perm_gui = new ilPermissionGUI($this);
98  $this->ctrl->forwardCommand($perm_gui);
99  break;
100 
101  case "ilobjectownershipmanagementgui":
102  $this->setSystemCheckSubTabs("no_owner");
103  $gui = new ilObjectOwnershipManagementGUI(0);
104  $this->ctrl->forwardCommand($gui);
105  break;
106 
107  case "ilcronmanagergui":
108  $ilTabs->activateTab("cron_jobs");
109  $gui = new ilCronManagerGUI();
110  $this->ctrl->forwardCommand($gui);
111  break;
112 
113  default:
114  //var_dump($_POST);
115  $cmd = $this->ctrl->getCmd("view");
116 
117  $cmd .= "Object";
118  $this->$cmd();
119 
120  break;
121  }
122  }
123 
129  public function viewObject(): void
130  {
131  $ilAccess = $this->access;
132 
133  if ($ilAccess->checkAccess("read", "", $this->object->getRefId())) {
134  $this->showBasicSettingsObject();
135  return;
136  }
137  $this->showServerInfoObject();
138  }
139 
140  public function viewScanLogObject(): void
141  {
142  $this->viewScanLog();
143  }
144 
148  public function setSystemCheckSubTabs($a_activate): void
149  {
150  $ilTabs = $this->tabs;
151  $ilCtrl = $this->ctrl;
152 
153  $ilTabs->addSubTab(
154  "system_check_sub",
155  $this->lng->txt("system_check"),
156  $ilCtrl->getLinkTarget($this, "check")
157  );
158  $ilTabs->addSubTab(
159  "no_owner",
160  $this->lng->txt("system_check_no_owner"),
161  $ilCtrl->getLinkTargetByClass("ilObjectOwnershipManagementGUI")
162  );
163 
164  $ilTabs->setSubTabActive($a_activate);
165  $ilTabs->setTabActive("system_check");
166  }
167 
173  public function checkObject(): void
174  {
175  $rbacsystem = $this->rbacsystem;
176  $ilUser = $this->user;
177  $objDefinition = $this->obj_definition;
180 
181  $this->setSystemCheckSubTabs("system_check_sub");
182 
183  if (!$rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
184  $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
185  }
186 
187  if ($_POST['count_limit'] !== null || $_POST['age_limit'] !== null || $_POST['type_limit'] !== null) {
188  $ilUser->writePref(
189  'systemcheck_count_limit',
190  (is_numeric($_POST['count_limit']) && $_POST['count_limit'] > 0) ? $_POST['count_limit'] : ''
191  );
192  $ilUser->writePref(
193  'systemcheck_age_limit',
194  (is_numeric($_POST['age_limit']) && $_POST['age_limit'] > 0) ? $_POST['age_limit'] : ''
195  );
196  $ilUser->writePref('systemcheck_type_limit', trim($_POST['type_limit']));
197  }
198 
199  if ($_POST["mode"]) {
200  $this->writeCheckParams();
201  $this->startValidator($_POST["mode"], $_POST["log_scan"]);
202  } else {
203  $validator = new ilValidator();
204  $hasScanLog = $validator->hasScanLog();
205 
206  $this->tpl->addBlockFile(
207  "ADM_CONTENT",
208  "adm_content",
209  "tpl.adm_check.html",
210  "Modules/SystemFolder"
211  );
212 
213  if ($hasScanLog) {
214  $this->tpl->setVariable("TXT_VIEW_LOG", $this->lng->txt("view_last_log"));
215  }
216 
217  $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
218  $this->tpl->setVariable("TXT_TITLE", $this->lng->txt("systemcheck"));
219  $this->tpl->setVariable("COLSPAN", 3);
220  $this->tpl->setVariable("TXT_ANALYZE_TITLE", $this->lng->txt("analyze_data"));
221  $this->tpl->setVariable("TXT_ANALYSIS_OPTIONS", $this->lng->txt("analysis_options"));
222  $this->tpl->setVariable("TXT_REPAIR_OPTIONS", $this->lng->txt("repair_options"));
223  $this->tpl->setVariable("TXT_OUTPUT_OPTIONS", $this->lng->txt("output_options"));
224  $this->tpl->setVariable("TXT_SCAN", $this->lng->txt("scan"));
225  $this->tpl->setVariable("TXT_SCAN_DESC", $this->lng->txt("scan_desc"));
226  $this->tpl->setVariable("TXT_DUMP_TREE", $this->lng->txt("dump_tree"));
227  $this->tpl->setVariable("TXT_DUMP_TREE_DESC", $this->lng->txt("dump_tree_desc"));
228  $this->tpl->setVariable("TXT_CLEAN", $this->lng->txt("clean"));
229  $this->tpl->setVariable("TXT_CLEAN_DESC", $this->lng->txt("clean_desc"));
230  $this->tpl->setVariable("TXT_RESTORE", $this->lng->txt("restore_missing"));
231  $this->tpl->setVariable("TXT_RESTORE_DESC", $this->lng->txt("restore_missing_desc"));
232  $this->tpl->setVariable("TXT_PURGE", $this->lng->txt("purge_missing"));
233  $this->tpl->setVariable("TXT_PURGE_DESC", $this->lng->txt("purge_missing_desc"));
234  $this->tpl->setVariable("TXT_RESTORE_TRASH", $this->lng->txt("restore_trash"));
235  $this->tpl->setVariable("TXT_RESTORE_TRASH_DESC", $this->lng->txt("restore_trash_desc"));
236  $this->tpl->setVariable("TXT_PURGE_TRASH", $this->lng->txt("purge_trash"));
237  $this->tpl->setVariable("TXT_PURGE_TRASH_DESC", $this->lng->txt("purge_trash_desc"));
238  $this->tpl->setVariable("TXT_COUNT_LIMIT", $this->lng->txt("purge_count_limit"));
239  $this->tpl->setVariable("TXT_COUNT_LIMIT_DESC", $this->lng->txt("purge_count_limit_desc"));
240  $this->tpl->setVariable("COUNT_LIMIT_VALUE", $ilUser->getPref("systemcheck_count_limit"));
241  $this->tpl->setVariable("TXT_AGE_LIMIT", $this->lng->txt("purge_age_limit"));
242  $this->tpl->setVariable("TXT_AGE_LIMIT_DESC", $this->lng->txt("purge_age_limit_desc"));
243  $this->tpl->setVariable("AGE_LIMIT_VALUE", $ilUser->getPref("systemcheck_age_limit"));
244  $this->tpl->setVariable("TXT_TYPE_LIMIT", $this->lng->txt("purge_type_limit"));
245  $this->tpl->setVariable("TXT_TYPE_LIMIT_DESC", $this->lng->txt("purge_type_limit_desc"));
246 
247  if ($ilUser->getPref('systemcheck_mode_scan')) {
248  $this->tpl->touchBlock('mode_scan_checked');
249  }
250  if ($ilUser->getPref('systemcheck_mode_dump_tree')) {
251  $this->tpl->touchBlock('mode_dump_tree_checked');
252  }
253  if ($ilUser->getPref('systemcheck_mode_clean')) {
254  $this->tpl->touchBlock('mode_clean_checked');
255  }
256  if ($ilUser->getPref('systemcheck_mode_restore')) {
257  $this->tpl->touchBlock('mode_restore_checked');
258  $this->tpl->touchBlock('mode_purge_disabled');
259  } elseif ($ilUser->getPref('systemcheck_mode_purge')) {
260  $this->tpl->touchBlock('mode_purge_checked');
261  $this->tpl->touchBlock('mode_restore_disabled');
262  }
263  if ($ilUser->getPref('systemcheck_mode_restore_trash')) {
264  $this->tpl->touchBlock('mode_restore_trash_checked');
265  $this->tpl->touchBlock('mode_purge_trash_disabled');
266  } elseif ($ilUser->getPref('systemcheck_mode_purge_trash')) {
267  $this->tpl->touchBlock('mode_purge_trash_checked');
268  $this->tpl->touchBlock('mode_restore_trash_disabled');
269  }
270  if ($ilUser->getPref('systemcheck_log_scan')) {
271  $this->tpl->touchBlock('log_scan_checked');
272  }
273 
274 
275  // #9520 - restrict to types which can be found in tree
276 
277  $obj_types_in_tree = [];
278 
279  $ilDB = $this->db;
280  $set = $ilDB->query('SELECT type FROM object_data od' .
281  ' JOIN object_reference ref ON (od.obj_id = ref.obj_id)' .
282  ' JOIN tree ON (tree.child = ref.ref_id)' .
283  ' WHERE tree.tree < 1' .
284  ' GROUP BY type');
285  while ($row = $ilDB->fetchAssoc($set)) {
286  $obj_types_in_tree[] = $row['type'];
287  }
288 
289  $types = $objDefinition->getAllObjects();
290  $ts = ["" => ""];
291  foreach ($types as $t) {
292  if ($t != "" && !$objDefinition->isSystemObject($t) && $t != "root" &&
293  in_array($t, $obj_types_in_tree)) {
294  if ($objDefinition->isPlugin($t)) {
296  $ts[$t] = $pl->txt("obj_" . $t);
297  } else {
298  $ts[$t] = $this->lng->txt("obj_" . $t);
299  }
300  }
301  }
302  asort($ts);
303  $this->tpl->setVariable(
304  "TYPE_LIMIT_CHOICE",
306  $ilUser->getPref("systemcheck_type_limit"),
307  'type_limit',
308  $ts,
309  false,
310  true
311  )
312  );
313  $this->tpl->setVariable("TXT_LOG_SCAN", $this->lng->txt("log_scan"));
314  $this->tpl->setVariable("TXT_LOG_SCAN_DESC", $this->lng->txt("log_scan_desc"));
315  $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("start_scan"));
316 
317  $this->tpl->setVariable("TXT_SAVE", $this->lng->txt("save_params_for_cron"));
318 
319  $cron_form = new ilPropertyFormGUI();
320  $cron_form->setFormAction($this->ctrl->getFormAction($this));
321  $cron_form->setTitle($this->lng->txt('systemcheck_cronform'));
322 
323  $radio_group = new ilRadioGroupInputGUI($this->lng->txt('systemcheck_cron'), 'cronjob');
324  $radio_group->setValue($ilSetting->get('systemcheck_cron'));
325 
326  $radio_opt = new ilRadioOption($this->lng->txt('disabled'), 0);
327  $radio_group->addOption($radio_opt);
328 
329  $radio_opt = new ilRadioOption($this->lng->txt('enabled'), 1);
330  $radio_group->addOption($radio_opt);
331 
332  $cron_form->addItem($radio_group);
333 
334  $cron_form->addCommandButton('saveCheckCron', $this->lng->txt('save'));
335 
336  $this->tpl->setVariable('CRON_FORM', $cron_form->getHTML());
337  }
338  }
339 
340  private function saveCheckParamsObject(): void
341  {
342  $this->writeCheckParams();
343  unset($_POST['mode']);
344  $this->checkObject();
345  }
346 
347  private function writeCheckParams(): void
348  {
349  $validator = new ilValidator();
350  $modes = $validator->getPossibleModes();
351 
352  $prefs = array();
353  foreach ($modes as $mode) {
354  if (isset($_POST['mode'][$mode])) {
355  $value = (int) $_POST['mode'][$mode];
356  } else {
357  $value = 0;
358  }
359  $prefs[ 'systemcheck_mode_' . $mode ] = $value;
360  }
361 
362  if (isset($_POST['log_scan'])) {
363  $value = (int) $_POST['log_scan'];
364  } else {
365  $value = 0;
366  }
367  $prefs['systemcheck_log_scan'] = $value;
368 
369  $ilUser = $this->user;
370  foreach ($prefs as $key => $val) {
371  $ilUser->writePref($key, $val);
372  }
373  }
374 
375  private function saveCheckCronObject(): void
376  {
378 
379  $systemcheck_cron = ($_POST['cronjob'] ? 1 : 0);
380  $ilSetting->set('systemcheck_cron', $systemcheck_cron);
381 
382  unset($_POST['mode']);
383  $this->checkObject();
384  }
385 
391  public function changeHeaderTitleObject(): void
392  {
393  $rbacsystem = $this->rbacsystem;
394  $styleDefinition = $this->style_definition;
395 
396  $this->tpl->addBlockFile(
397  "ADM_CONTENT",
398  "adm_content",
399  "tpl.header_title_edit.html",
400  "Modules/SystemFolder"
401  );
402 
403  $array_push = true;
404 
405  if ($_SESSION["error_post_vars"]) {
406  $_SESSION["translation_post"] = $_SESSION["error_post_vars"];
407  $_GET["mode"] = "session";
408  $array_push = false;
409  }
410 
411  // load from db if edit category is called the first time
412  if (($_GET["mode"] != "session")) {
413  $data = $this->object->getHeaderTitleTranslations();
414  $_SESSION["translation_post"] = $data;
415  $array_push = false;
416  } // remove a translation from session
417  elseif ($_GET["entry"] != 0) {
418  array_splice($_SESSION["translation_post"]["Fobject"], $_GET["entry"], 1, array());
419 
420  if ($_GET["entry"] == $_SESSION["translation_post"]["default_language"]) {
421  $_SESSION["translation_post"]["default_language"] = "";
422  }
423  }
424 
425  $data = $_SESSION["translation_post"];
426 
427  // add additional translation form
428  if (!$_GET["entry"] and $array_push) {
429  $count = array_push($data["Fobject"], array("title" => "","desc" => ""));
430  } else {
431  $count = count($data["Fobject"]);
432  }
433 
434  // stripslashes in form?
435  $strip = isset($_SESSION["translation_post"]) ? true : false;
436 
437  foreach ($data["Fobject"] as $key => $val) {
438  // add translation button
439  if ($key == $count - 1) {
440  $this->tpl->setCurrentBlock("addTranslation");
441  $this->tpl->setVariable("TXT_ADD_TRANSLATION", $this->lng->txt("add_translation") . " >>");
442  $this->tpl->parseCurrentBlock();
443  }
444 
445  // remove translation button
446  if ($key != 0) {
447  $this->tpl->setCurrentBlock("removeTranslation");
448  $this->tpl->setVariable("TXT_REMOVE_TRANSLATION", $this->lng->txt("remove_translation"));
449  $this->ctrl->setParameter($this, "entry", $key);
450  $this->ctrl->setParameter($this, "mode", "edit");
451  $this->tpl->setVariable(
452  "LINK_REMOVE_TRANSLATION",
453  $this->ctrl->getLinkTarget($this, "removeTranslation")
454  );
455  $this->tpl->parseCurrentBlock();
456  }
457 
458  // lang selection
459  $this->tpl->addBlockFile(
460  "SEL_LANGUAGE",
461  "sel_language",
462  "tpl.lang_selection.html",
463  "Services/MetaData"
464  );
465  $this->tpl->setVariable("SEL_NAME", "Fobject[" . $key . "][lang]");
466 
467  $languages = ilMDLanguageItem::_getLanguages();
468 
469  foreach ($languages as $code => $language) {
470  $this->tpl->setCurrentBlock("lg_option");
471  $this->tpl->setVariable("VAL_LG", $code);
472  $this->tpl->setVariable("TXT_LG", $language);
473 
474  if ($code == $val["lang"]) {
475  $this->tpl->setVariable("SELECTED", "selected=\"selected\"");
476  }
477 
478  $this->tpl->parseCurrentBlock();
479  }
480 
481  // object data
482  $this->tpl->setCurrentBlock("obj_form");
483 
484  if ($key == 0) {
485  $this->tpl->setVariable("TXT_HEADER", $this->lng->txt("change_header_title"));
486  } else {
487  $this->tpl->setVariable("TXT_HEADER", $this->lng->txt("translation") . " " . $key);
488  }
489 
490  if ($key == $data["default_language"]) {
491  $this->tpl->setVariable("CHECKED", "checked=\"checked\"");
492  }
493 
494  $this->tpl->setVariable("TXT_TITLE", $this->lng->txt("title"));
495  $this->tpl->setVariable("TXT_DESC", $this->lng->txt("desc"));
496  $this->tpl->setVariable("TXT_DEFAULT", $this->lng->txt("default"));
497  $this->tpl->setVariable("TXT_LANGUAGE", $this->lng->txt("language"));
498  $this->tpl->setVariable("TITLE", ilLegacyFormElementsUtil::prepareFormOutput($val["title"], $strip));
499  $this->tpl->setVariable("DESC", ilUtil::stripSlashes($val["desc"]));
500  $this->tpl->setVariable("NUM", $key);
501  $this->tpl->parseCurrentBlock();
502  }
503 
504  // global
505  $this->tpl->setCurrentBlock("adm_content");
506 
507  $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
508  $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
509  $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save"));
510  $this->tpl->setVariable("CMD_SUBMIT", "saveHeaderTitle");
511  $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
512  }
513 
517  public function saveHeaderTitleObject(): void
518  {
519  $langs = [];
521 
522  $data = $_POST;
523 
524  // default language set?
525  if (!isset($data["default_language"])) {
526  $ilErr->raiseError($this->lng->txt("msg_no_default_language"), $ilErr->MESSAGE);
527  }
528 
529  // prepare array fro further checks
530  foreach ($data["Fobject"] as $key => $val) {
531  $langs[$key] = $val["lang"];
532  }
533 
534  $langs = array_count_values($langs);
535 
536  // all languages set?
537  if (array_key_exists("", $langs)) {
538  $ilErr->raiseError($this->lng->txt("msg_no_language_selected"), $ilErr->MESSAGE);
539  }
540 
541  // no single language is selected more than once?
542  if (array_sum($langs) > count($langs)) {
543  $ilErr->raiseError($this->lng->txt("msg_multi_language_selected"), $ilErr->MESSAGE);
544  }
545 
546  // copy default translation to variable for object data entry
547  $_POST["Fobject"]["title"] = $_POST["Fobject"][$_POST["default_language"]]["title"];
548  $_POST["Fobject"]["desc"] = $_POST["Fobject"][$_POST["default_language"]]["desc"];
549 
550  // first delete all translation entries...
551  $this->object->removeHeaderTitleTranslations();
552 
553  // ...and write new translations to object_translation
554  foreach ($data["Fobject"] as $key => $val) {
555  if ($key == $data["default_language"]) {
556  $default = 1;
557  } else {
558  $default = 0;
559  }
560 
561  $this->object->addHeaderTitleTranslation(ilUtil::stripSlashes($val["title"]), ilUtil::stripSlashes($val["desc"]), $val["lang"], $default);
562  }
563 
564  $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_obj_modified"), true);
565 
566  $this->ctrl->redirect($this);
567  }
568 
569  public function cancelObject(): void
570  {
571  $this->ctrl->redirect($this, "view");
572  }
573 
579  public function addHeaderTitleTranslationObject(): void
580  {
581  $_SESSION["translation_post"] = $_POST;
582 
583  $this->ctrl->setParameter($this, "mode", "session");
584  $this->ctrl->setParameter($this, "entry", "0");
585  $this->ctrl->redirect($this, "changeHeaderTitle");
586  }
587 
593  public function removeTranslationObject(): void
594  {
595  $this->ctrl->setParameter($this, "entry", $_GET["entry"]);
596  $this->ctrl->setParameter($this, "mode", "session");
597  $this->ctrl->redirect($this, "changeHeaderTitle");
598  }
599 
600 
601  public function startValidator($a_mode, $a_log): void
602  {
603  $rbacsystem = $this->rbacsystem;
605 
606  if (!$rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
607  $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
608  }
609 
610  $logging = ($a_log) ? true : false;
611  $validator = new ilValidator($logging);
612  $validator->setMode("all", false);
613 
614  $modes = array();
615  foreach ($a_mode as $mode => $value) {
616  $validator->setMode($mode, (bool) $value);
617  $modes[] = $mode . '=' . $value;
618  }
619 
620  $scan_log = $validator->validate();
621 
622  $mode = $this->lng->txt("scan_modes") . ": " . implode(', ', $modes);
623 
624  // output
625  $this->tpl->addBlockFile(
626  "ADM_CONTENT",
627  "adm_content",
628  "tpl.adm_scan.html",
629  "Modules/SystemFolder"
630  );
631 
632  $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
633  $this->tpl->setVariable("TXT_TITLE", $this->lng->txt("scanning_system"));
634  $this->tpl->setVariable("COLSPAN", 3);
635  $this->tpl->setVariable("TXT_SCAN_LOG", $scan_log);
636  $this->tpl->setVariable("TXT_MODE", $mode);
637 
638  if ($logging === true) {
639  $this->tpl->setVariable("TXT_VIEW_LOG", $this->lng->txt("view_log"));
640  }
641 
642  $this->tpl->setVariable("TXT_DONE", $this->lng->txt("done"));
643 
644  $validator->writeScanLogLine($mode);
645  }
646 
647  public function viewScanLog(): void
648  {
649  $validator = new ilValidator();
650  $scan_log = $validator->readScanLog();
651 
652  if (is_array($scan_log)) {
653  $scan_log = '<pre>' . implode("", $scan_log) . '</pre>';
654  $this->tpl->setVariable("ADM_CONTENT", $scan_log);
655  } else {
656  $scan_log = "no scanlog found.";
657  }
658 
659  // output
660  $this->tpl->addBlockFile(
661  "ADM_CONTENT",
662  "adm_content",
663  "tpl.adm_scan.html",
664  "Modules/SystemFolder"
665  );
666  $this->tpl->setVariable("TXT_TITLE", $this->lng->txt("scan_details"));
667  $this->tpl->setVariable("COLSPAN", 3);
668  $this->tpl->setVariable("TXT_SCAN_LOG", $scan_log);
669  $this->tpl->setVariable("TXT_DONE", $this->lng->txt("done"));
670  }
671 
672 
676  public function benchmarkObject(): void
677  {
678  if (!$this->rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
679  $this->error->raiseError($this->lng->txt("permission_denied"), $this->error->MESSAGE);
680  }
681 
682  $write_access = $this->rbacsystem->checkAccess("write", $this->object->getRefId());
683 
684  $this->benchmarkSubTabs("settings");
685 
686  $this->form = new ilPropertyFormGUI();
687 
688  // Activate DB Benchmark
689  $cb = new ilCheckboxInputGUI($this->lng->txt("adm_activate_db_benchmark"), ilBenchmark::ENABLE_DB_BENCH);
690  $cb->setChecked((bool) $this->settings->get(ilBenchmark::ENABLE_DB_BENCH));
691  $cb->setInfo($this->lng->txt("adm_activate_db_benchmark_desc"));
692  $cb->setDisabled(!$write_access);
693  $this->form->addItem($cb);
694 
695  // DB Benchmark User
696  $ti = new ilTextInputGUI($this->lng->txt("adm_db_benchmark_user"), ilBenchmark::DB_BENCH_USER);
697  $user_id = ($this->settings->get(ilBenchmark::DB_BENCH_USER)) ?? null;
698  if ($user_id !== null && ilObjUser::_lookupLogin((int) $user_id) !== '') {
699  $ti->setValue(ilObjUser::_lookupLogin($user_id));
700  } else {
701  $ti->setValue('');
702  }
703  $ti->setInfo($this->lng->txt("adm_db_benchmark_user_desc"));
704  $ti->setDisabled(!$write_access);
705  $this->form->addItem($ti);
706 
707  if ($write_access) {
708  $this->form->addCommandButton("saveBenchSettings", $this->lng->txt("save"));
709  }
710 
711  $this->form->setTitle($this->lng->txt("adm_db_benchmark"));
712  $this->form->setFormAction($this->ctrl->getFormAction($this));
713 
714  $this->tpl->setContent($this->form->getHTML());
715  }
716 
720  public function showDbBenchChronologicalObject(): void
721  {
722  $this->benchmarkSubTabs("chronological");
723  $this->showDbBenchResults("chronological");
724  }
725 
729  public function showDbBenchSlowestFirstObject(): void
730  {
731  $this->benchmarkSubTabs("slowest_first");
732  $this->showDbBenchResults("slowest_first");
733  }
734 
738  public function showDbBenchSortedBySqlObject(): void
739  {
740  $this->benchmarkSubTabs("sorted_by_sql");
741  $this->showDbBenchResults("sorted_by_sql");
742  }
743 
747  public function showDbBenchByFirstTableObject(): void
748  {
749  $this->benchmarkSubTabs("by_first_table");
750  $this->showDbBenchResults("by_first_table");
751  }
752 
758  public function showDbBenchResults($a_mode): void
759  {
760  $tpl = $this->tpl;
761 
762  $ilBench = $this->bench;
763  $rec = $ilBench->getDbBenchRecords();
764 
765  $table = new ilBenchmarkTableGUI($this, "benchmark", $rec, $a_mode);
766  $tpl->setContent($table->getHTML());
767  }
768 
775  public function benchmarkSubTabs($a_current): void
776  {
777  $ilTabs = $this->tabs;
778  $lng = $this->lng;
779  $ilCtrl = $this->ctrl;
780 
781  $ilBench = $this->bench;
782  $ilTabs->activateTab("benchmarks"); // #18083
783 
784  $ilTabs->addSubtab(
785  "settings",
786  $lng->txt("settings"),
787  $ilCtrl->getLinkTarget($this, "benchmark")
788  );
789 
790  $rec = $ilBench->getDbBenchRecords();
791  if ($rec !== []) {
792  $ilTabs->addSubtab(
793  "chronological",
794  $lng->txt("adm_db_bench_chronological"),
795  $ilCtrl->getLinkTarget($this, "showDbBenchChronological")
796  );
797  $ilTabs->addSubtab(
798  "slowest_first",
799  $lng->txt("adm_db_bench_slowest_first"),
800  $ilCtrl->getLinkTarget($this, "showDbBenchSlowestFirst")
801  );
802  $ilTabs->addSubtab(
803  "sorted_by_sql",
804  $lng->txt("adm_db_bench_sorted_by_sql"),
805  $ilCtrl->getLinkTarget($this, "showDbBenchSortedBySql")
806  );
807  $ilTabs->addSubtab(
808  "by_first_table",
809  $lng->txt("adm_db_bench_by_first_table"),
810  $ilCtrl->getLinkTarget($this, "showDbBenchByFirstTable")
811  );
812  }
813 
814  $ilTabs->activateSubTab($a_current);
815  }
816 
817 
821  public function saveBenchSettingsObject(): void
822  {
823  $write_access = $this->rbacsystem->checkAccess("write", $this->object->getRefId());
824  if (!$write_access) {
825  $this->error->raiseError($this->lng->txt("permission_denied"), $this->error->MESSAGE);
826  return;
827  }
828 
829  if ($this->wrapper->post()->has(ilBenchmark::ENABLE_DB_BENCH)
830  && $this->wrapper->post()->has(ilBenchmark::DB_BENCH_USER)) {
831  $activate = $this->wrapper->post()->retrieve(ilBenchmark::ENABLE_DB_BENCH, $this->refinery->kindlyTo()->bool());
832  if ($activate) {
833  $user_name = $this->wrapper->post()->retrieve(ilBenchmark::DB_BENCH_USER, $this->refinery->kindlyTo()->string());
834  $this->bench->enableDbBenchmarkForUserName($user_name);
835  }
836  } else {
837  $this->bench->disableDbBenchmark();
838  }
839 
840  $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_obj_modified"), true);
841 
842  $this->ctrl->redirect($this, "benchmark");
843  }
844 
845 
849  public function switchBenchModuleObject(): void
850  {
851  $this->ctrl->setParameter($this, 'cur_mod', $_POST['module']);
852  $this->ctrl->redirect($this, "benchmark");
853  }
854 
855 
859  public function clearBenchObject(): void
860  {
861  $ilBench = $this->bench;
862  $ilBench->clearData();
863  $this->saveBenchSettingsObject();
864  }
865 
866  // get tabs
867  public function getAdminTabs(): void
868  {
869  $rbacsystem = $this->rbacsystem;
870  $ilHelp = $this->help;
871 
872  // $ilHelp->setScreenIdComponent($this->object->getType());
873 
874  $this->ctrl->setParameter($this, "ref_id", $this->object->getRefId());
875 
876  // general settings
877  if ($rbacsystem->checkAccess("read", $this->object->getRefId())) {
878  $this->tabs_gui->addTarget(
879  "general_settings",
880  $this->ctrl->getLinkTarget($this, "showBasicSettings"),
881  ["showBasicSettings", "saveBasicSettings"],
882  get_class($this)
883  );
884  }
885 
886  // server info
887  if ($rbacsystem->checkAccess("visible,read", $this->object->getRefId())) {
888  $this->tabs_gui->addTarget(
889  "server",
890  $this->ctrl->getLinkTarget($this, "showServerInfo"),
891  ["showServerInfo", "view"],
892  get_class($this)
893  );
894  }
895 
896  if ($rbacsystem->checkAccess('visible,read', $this->object->getRefId())) {
897  $this->tabs_gui->addTarget(
898  'cron_jobs',
899  $this->ctrl->getLinkTargetByClass('ilCronManagerGUI', ''),
900  '',
901  get_class($this)
902  );
903 
904  $this->tabs_gui->addTarget(
905  'benchmarks',
906  $this->ctrl->getLinkTarget($this, 'benchmark'),
907  'benchmark',
908  get_class($this)
909  );
910  }
911 
912  if ($rbacsystem->checkAccess('edit_permission', $this->object->getRefId())) {
913  $this->tabs_gui->addTarget(
914  "perm_settings",
915  $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
916  array("perm","info","owner"),
917  'ilpermissiongui'
918  );
919  }
920  }
921 
926  public function showPHPInfoObject(): void
927  {
928  $rbacsystem = $this->rbacsystem;
929  if ($rbacsystem->checkAccess("read", $this->object->getRefId())) {
930  phpinfo();
931  exit;
932  }
933  }
934 
935  //
936  //
937  // Server Info
938  //
939  //
940 
941  // TODO: remove this subtabs
945  public function setServerInfoSubTabs($a_activate): void
946  {
947  $ilTabs = $this->tabs;
948  $ilCtrl = $this->ctrl;
949  $rbacsystem = $this->rbacsystem;
950 
951  if ($rbacsystem->checkAccess("read", $this->object->getRefId())) {
952  $ilTabs->addSubTabTarget("installation_status", $ilCtrl->getLinkTarget($this, "showServerInstallationStatus"));
953 
954  $ilTabs->addSubTabTarget("server_data", $ilCtrl->getLinkTarget($this, "showServerInfo"));
955  }
956 
957 
958  if ($rbacsystem->checkAccess("write", $this->object->getRefId())) {
959  $ilTabs->addSubTabTarget("java_server", $ilCtrl->getLinkTarget($this, "showJavaServer"));
960  }
961 
962  $ilTabs->setSubTabActive($a_activate);
963  $ilTabs->setTabActive("server");
964  }
965 
969  public function showServerInfoObject(): void
970  {
977  $tpl = $this->tpl;
978  $ilCtrl = $this->ctrl;
979  $ilToolbar = $this->toolbar;
980 
981  $rbacsystem = $this->rbacsystem;
982  if ($rbacsystem->checkAccess("read", $this->object->getRefId())) {
983 
984  $this->gui->link(
985  $this->lng->txt("vc_information"),
986  $this->ctrl->getLinkTarget($this, 'showVcsInformation')
987  )->toToolbar();
988 
989  $this->initServerInfoForm();
990  // TODO: remove sub tabs
991  // $this->tabs->setTabActive("server");
992  $this->setServerInfoSubTabs("server_data");
993 
994  $btpl = new ilTemplate("tpl.server_data.html", true, true, "Modules/SystemFolder");
995  $btpl->setVariable("FORM", $this->form->getHTML());
996  $btpl->setVariable("PHP_INFO_TARGET", $ilCtrl->getLinkTarget($this, "showPHPInfo"));
997  $tpl->setContent($btpl->get());
998  }
999  }
1000 
1006  public function initServerInfoForm(): void
1007  {
1008  $lng = $this->lng;
1009  $ilClientIniFile = $this->client_ini;
1011 
1012  $this->form = new ilPropertyFormGUI();
1013 
1014  // installation name
1015  $ne = new ilNonEditableValueGUI($lng->txt("inst_name"), "");
1016  $ne->setValue($ilClientIniFile->readVariable("client", "name"));
1017  $ne->setInfo($ilClientIniFile->readVariable("client", "description"));
1018  $this->form->addItem($ne);
1019 
1020  // client id
1021  $ne = new ilNonEditableValueGUI($lng->txt("client_id"), "");
1022  $ne->setValue(CLIENT_ID);
1023  $this->form->addItem($ne);
1024 
1025  // installation id
1026  $ne = new ilNonEditableValueGUI($lng->txt("inst_id"), "");
1027  $ne->setValue($ilSetting->get("inst_id"));
1028  $this->form->addItem($ne);
1029 
1030  // database version
1031  $ne = new ilNonEditableValueGUI($lng->txt("db_version"), "");
1032  $ne->setValue($ilSetting->get("db_version"));
1033 
1034  $this->form->addItem($ne);
1035 
1036  // ilias version
1037  $ne = new ilNonEditableValueGUI($lng->txt("ilias_version"), "");
1038  $ne->setValue(ILIAS_VERSION);
1039  $this->form->addItem($ne);
1040 
1041  // host
1042  $ne = new ilNonEditableValueGUI($lng->txt("host"), "");
1043  $ne->setValue($_SERVER["SERVER_NAME"]);
1044  $this->form->addItem($ne);
1045 
1046  // ip & port
1047  $ne = new ilNonEditableValueGUI($lng->txt("ip_address") . " & " . $this->lng->txt("port"), "");
1048  $ne->setValue($_SERVER["SERVER_ADDR"] . ":" . $_SERVER["SERVER_PORT"]);
1049  $this->form->addItem($ne);
1050 
1051  // server
1052  $ne = new ilNonEditableValueGUI($lng->txt("server_software"), "");
1053  $ne->setValue($_SERVER["SERVER_SOFTWARE"]);
1054  $this->form->addItem($ne);
1055 
1056  // http path
1057  $ne = new ilNonEditableValueGUI($lng->txt("http_path"), "");
1058  $ne->setValue(ILIAS_HTTP_PATH);
1059  $this->form->addItem($ne);
1060 
1061  // absolute path
1062  $ne = new ilNonEditableValueGUI($lng->txt("absolute_path"), "");
1063  $ne->setValue(ILIAS_ABSOLUTE_PATH);
1064  $this->form->addItem($ne);
1065 
1066  $not_set = $lng->txt("path_not_set");
1067 
1068  // convert
1069  $ne = new ilNonEditableValueGUI($lng->txt("path_to_convert"), "");
1070  $ne->setValue(PATH_TO_CONVERT ?: $not_set);
1071  $this->form->addItem($ne);
1072 
1073  // zip
1074  $ne = new ilNonEditableValueGUI($lng->txt("path_to_zip"), "");
1075  $ne->setValue(PATH_TO_ZIP ?: $not_set);
1076  $this->form->addItem($ne);
1077 
1078  // unzip
1079  $ne = new ilNonEditableValueGUI($lng->txt("path_to_unzip"), "");
1080  $ne->setValue(PATH_TO_UNZIP ?: $not_set);
1081  $this->form->addItem($ne);
1082 
1083  // java
1084  $ne = new ilNonEditableValueGUI($lng->txt("path_to_java"), "");
1085  $ne->setValue(PATH_TO_JAVA ?: $not_set);
1086  $this->form->addItem($ne);
1087 
1088  // mkisofs
1089  $ne = new ilNonEditableValueGUI($lng->txt("path_to_mkisofs"), "");
1090  $ne->setValue(PATH_TO_MKISOFS ?: $not_set);
1091  $this->form->addItem($ne);
1092 
1093  // latex
1094  $ne = new ilNonEditableValueGUI($lng->txt("url_to_latex"), "");
1095  $ne->setValue(URL_TO_LATEX ?: $not_set);
1096  $this->form->addItem($ne);
1097 
1098 
1099  $this->form->setTitle($lng->txt("server_data"));
1100  $this->form->setFormAction($this->ctrl->getFormAction($this));
1101  }
1102 
1103  protected function showServerInstallationStatusObject(): void
1104  {
1105  $rbacsystem = $this->rbacsystem;
1106  if ($rbacsystem->checkAccess("read", $this->object->getRefId())) {
1107  $this->setServerInfoSubTabs("installation_status");
1108  $this->renderServerStatus();
1109  }
1110  }
1111 
1112  protected function renderServerStatus(): void
1113  {
1114  global $DIC;
1115  $f = $DIC->ui()->factory();
1116  $r = $DIC->ui()->renderer();
1117  $refinery = $DIC->refinery();
1118 
1119  $metric = $this->getServerStatusInfo($refinery);
1120  $report = $metric->toUIReport($f, $this->lng->txt("installation_status"));
1121 
1122  $this->tpl->setContent($r->render($report));
1123  }
1124 
1125  protected function getServerStatusInfo(ILIAS\Refinery\Factory $refinery): ILIAS\Setup\Metrics\Metric
1126  {
1127  $data = new Factory();
1128  $lng = new ilSetupLanguage('en');
1129  $interface_finder = new ImplementationOfInterfaceFinder();
1130 
1131  $agent_finder = new ImplementationOfAgentFinder(
1132  $refinery,
1133  $data,
1134  $lng,
1135  $interface_finder,
1136  []
1137  );
1138 
1139  $st = new StatusCommand($agent_finder);
1140 
1141  return $st->getMetrics($agent_finder->getAgents());
1142  }
1143 
1144  //
1145  //
1146  // General Settings
1147  //
1148  //
1149 
1153  public function setGeneralSettingsSubTabs($a_activate): void
1154  {
1155  $ilTabs = $this->tabs;
1156  $ilCtrl = $this->ctrl;
1157 
1158  $ilTabs->addSubTabTarget("basic_settings", $ilCtrl->getLinkTarget($this, "showBasicSettings"));
1159  $ilTabs->addSubTabTarget("header_title", $ilCtrl->getLinkTarget($this, "showHeaderTitle"));
1160  $ilTabs->addSubTabTarget("contact_data", $ilCtrl->getLinkTarget($this, "showContactInformation"));
1161 
1162  $ilTabs->setSubTabActive($a_activate);
1163  $ilTabs->setTabActive("general_settings");
1164  }
1165 
1166  //
1167  //
1168  // Basic Settings
1169  //
1170  //
1171 
1175  public function showBasicSettingsObject(): void
1176  {
1177  $tpl = $this->tpl;
1178 
1179  $this->initBasicSettingsForm();
1180  $this->setGeneralSettingsSubTabs("basic_settings");
1181 
1182  $tpl->setContent($this->form->getHTML());
1183  }
1184 
1185 
1189  public function initBasicSettingsForm(): void
1190  {
1195  $lng = $this->lng;
1197 
1198  $this->form = new ilPropertyFormGUI();
1199  $lng->loadLanguageModule("pd");
1200 
1201  // installation short title
1202  $ti = new ilTextInputGUI($this->lng->txt("short_inst_name"), "short_inst_name");
1203  $ti->setMaxLength(200);
1204  $ti->setSize(40);
1205  $ti->setValue($ilSetting->get("short_inst_name"));
1206  $ti->setInfo($this->lng->txt("short_inst_name_info"));
1207  $this->form->addItem($ti);
1208 
1209 
1210  $cb = new ilCheckboxInputGUI($this->lng->txt("pub_section"), "pub_section");
1211  $cb->setInfo($lng->txt("pub_section_info"));
1212  if (ilPublicSectionSettings::getInstance()->isEnabled()) {
1213  $cb->setChecked(true);
1214  }
1215  $this->form->addItem($cb);
1216 
1217  $this->lng->loadLanguageModule('administration');
1218  $domains = new ilTextInputGUI($this->lng->txt('adm_pub_section_domain_filter'), 'public_section_domains');
1219  $domains->setInfo($this->lng->txt('adm_pub_section_domain_filter_info'));
1220  $domains->setMulti(true);
1221  $domains->setValue(current(ilPublicSectionSettings::getInstance()->getDomains()));
1222  $domains->setMultiValues(ilPublicSectionSettings::getInstance()->getDomains());
1223 
1224  $cb->addSubItem($domains);
1225 
1226 
1227  // Enable Global Profiles
1228  $cb_prop = new ilCheckboxInputGUI($lng->txt('pd_enable_user_publish'), 'enable_global_profiles');
1229  $cb_prop->setInfo($lng->txt('pd_enable_user_publish_info'));
1230  $cb_prop->setChecked((bool) $ilSetting->get('enable_global_profiles'));
1231  $cb->addSubItem($cb_prop);
1232 
1233  // search engine
1234  $robot_settings = ilRobotSettings::getInstance();
1235  $cb2 = new ilCheckboxInputGUI($this->lng->txt("search_engine"), "open_google");
1236  $cb2->setInfo($this->lng->txt("enable_search_engine"));
1237  $this->form->addItem($cb2);
1238 
1239  if (!$robot_settings->checkRewrite()) {
1240  $cb2->setAlert($lng->txt("allow_override_alert"));
1241  $cb2->setChecked(false);
1242  $cb2->setDisabled(true);
1243  } elseif ($ilSetting->get("open_google")) {
1244  $cb2->setChecked(true);
1245  }
1246 
1247  // locale
1248  $ti = new ilTextInputGUI($this->lng->txt("adm_locale"), "locale");
1249  $ti->setMaxLength(80);
1250  $ti->setSize(40);
1251  $ti->setInfo($this->lng->txt("adm_locale_info"));
1252  $ti->setValue($ilSetting->get("locale"));
1253  $this->form->addItem($ti);
1254 
1255  // save and cancel commands
1256  $this->form->addCommandButton("saveBasicSettings", $lng->txt("save"));
1257 
1258  $this->form->setTitle($lng->txt("basic_settings"));
1259  $this->form->setFormAction($this->ctrl->getFormAction($this));
1260  }
1261 
1266  public function saveBasicSettingsObject(): void
1267  {
1268  $tpl = $this->tpl;
1269  $lng = $this->lng;
1270  $ilCtrl = $this->ctrl;
1272  $rbacsystem = $this->rbacsystem;
1273  $ilErr = $this->error;
1274 
1275  if (!$rbacsystem->checkAccess("write", $this->object->getRefId())) {
1276  $this->tpl->setOnScreenMessage("failure", $this->lng->txt("permission_denied"), true);
1277  $this->ctrl->redirectByClass(self::class);
1278  //$ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
1279  }
1280 
1281  $this->initBasicSettingsForm();
1282  if ($this->form->checkInput()) {
1283  $ilSetting->set("short_inst_name", $this->form->getInput("short_inst_name"));
1284 
1285  $public_section = ilPublicSectionSettings::getInstance();
1286  $public_section->setEnabled($this->form->getInput('pub_section'));
1287 
1288  $domains = [];
1289  foreach ((array) $this->form->getInput('public_section_domains') as $domain) {
1290  if (strlen(trim($domain)) !== 0) {
1291  $domains[] = $domain;
1292  }
1293  }
1294  $public_section->setDomains($domains);
1295  $public_section->save();
1296 
1297  $global_profiles = ($this->form->getInput("pub_section"))
1298  ? (int) $this->form->getInput('enable_global_profiles')
1299  : 0;
1300  $ilSetting->set('enable_global_profiles', $global_profiles);
1301 
1302  $ilSetting->set("open_google", $this->form->getInput("open_google"));
1303  $ilSetting->set("locale", $this->form->getInput("locale"));
1304 
1305  $this->tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
1306  $ilCtrl->redirect($this, "showBasicSettings");
1307  }
1308  $this->setGeneralSettingsSubTabs("basic_settings");
1309  $this->form->setValuesByPost();
1310  $tpl->setContent($this->form->getHtml());
1311  }
1312 
1313  //
1314  //
1315  // Header title
1316  //
1317  //
1318 
1322  public function showHeaderTitleObject(
1323  $a_get_post_values = false,
1324  bool $add_entry = false
1325  ): void {
1326  $tpl = $this->tpl;
1327 
1328  $this->setGeneralSettingsSubTabs("header_title");
1329  $table = new ilObjectTranslationTableGUI($this, "showHeaderTitle", false);
1330  if ($a_get_post_values) {
1331  $vals = array();
1332  foreach (($_POST["title"] ?? []) as $k => $v) {
1333  $def = $_POST["default"] ?? "";
1334  $vals[] = array("title" => $v,
1335  "desc" => ($_POST["desc"][$k] ?? ""),
1336  "lang" => ($_POST["lang"][$k] ?? ""),
1337  "default" => ($def == $k));
1338  }
1339  if ($add_entry) {
1340  $vals[] = array("title" => "",
1341  "desc" => "",
1342  "lang" => "",
1343  "default" => false);
1344  }
1345  $table->setData($vals);
1346  } else {
1347  $data = $this->object->getHeaderTitleTranslations();
1348  if (isset($data["Fobject"]) && is_array($data["Fobject"])) {
1349  foreach ($data["Fobject"] as $k => $v) {
1350  if ($k == $data["default_language"]) {
1351  $data["Fobject"][$k]["default"] = true;
1352  } else {
1353  $data["Fobject"][$k]["default"] = false;
1354  }
1355  }
1356  } else {
1357  $data["Fobject"] = array();
1358  }
1359  $table->setData($data["Fobject"]);
1360  }
1361  $tpl->setContent($table->getHTML());
1362  }
1363 
1367  public function saveHeaderTitlesObject(bool $delete = false)
1368  {
1369  global $DIC;
1370 
1371  $ilCtrl = $this->ctrl;
1372  $lng = $this->lng;
1373  $rbacsystem = $this->rbacsystem;
1374  $ilErr = $this->error;
1375 
1376  if (!$rbacsystem->checkAccess("write", $this->object->getRefId())) {
1377  $this->tpl->setOnScreenMessage("failure", $this->lng->txt("permission_denied"), true);
1378  $this->ctrl->redirectByClass(self::class, "showHeaderTitle");
1379  }
1380 
1381  // var_dump($_POST);
1382 
1383  $post = $DIC->http()->request()->getParsedBody();
1384  foreach ($post["title"] as $k => $v) {
1385  if ($delete && ($post["check"][$k] ?? false)) {
1386  unset($post["title"][$k]);
1387  unset($post["desc"][$k]);
1388  unset($post["lang"][$k]);
1389  if ($k == $post["default"]) {
1390  unset($post["default"]);
1391  }
1392  }
1393  }
1394 
1395 
1396 
1397  // default language set?
1398  if (!isset($post["default"]) && count($post["lang"]) > 0) {
1399  $this->tpl->setOnScreenMessage('failure', $lng->txt("msg_no_default_language"));
1400  $this->showHeaderTitleObject(true);
1401  return;
1402  }
1403 
1404  // all languages set?
1405  if (array_key_exists("", $post["lang"])) {
1406  $this->tpl->setOnScreenMessage('failure', $lng->txt("msg_no_language_selected"));
1407  $this->showHeaderTitleObject(true);
1408  return;
1409  }
1410 
1411  // no single language is selected more than once?
1412  if (count(array_unique($post["lang"])) < count($post["lang"])) {
1413  $this->tpl->setOnScreenMessage('failure', $lng->txt("msg_multi_language_selected"));
1414  $this->showHeaderTitleObject(true);
1415  return;
1416  }
1417 
1418  // save the stuff
1419  $this->object->removeHeaderTitleTranslations();
1420  foreach ($post["title"] as $k => $v) {
1421  $desc = $post["desc"][$k] ?? "";
1422  $this->object->addHeaderTitleTranslation(
1424  ilUtil::stripSlashes($desc),
1425  ilUtil::stripSlashes($post["lang"][$k]),
1426  ($post["default"] == $k)
1427  );
1428  }
1429 
1430  $this->tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
1431  $ilCtrl->redirect($this, "showHeaderTitle");
1432  }
1433 
1437  public function addHeaderTitleObject(): void
1438  {
1439  $k = 1;
1440  $this->showHeaderTitleObject(true, true);
1441  }
1442 
1446  public function deleteHeaderTitlesObject(): void
1447  {
1448  $ilCtrl = $this->ctrl;
1449  $lng = $this->lng;
1450  $this->saveHeaderTitlesObject(true);
1451  }
1452 
1453 
1454  //
1455  //
1456  // Cron Jobs
1457  //
1458  //
1459 
1460  /*
1461  * OLD GLOBAL CRON JOB SWITCHES (ilSetting)
1462  *
1463  * cron_user_check => obsolete
1464  * cron_inactive_user_delete => obsolete
1465  * cron_inactivated_user_delete => obsolete
1466  * cron_link_check => obsolete
1467  * cron_web_resource_check => migrated
1468  * cron_lucene_index => obsolete
1469  * forum_notification => migrated
1470  * mail_notification => migrated
1471  * crsgrp_ntf => migrated
1472  * cron_upd_adrbook => migrated
1473  */
1474 
1475  public function jumpToCronJobsObject(): void
1476  {
1477  // #13010 - this is used for external settings
1478  $this->ctrl->redirectByClass("ilCronManagerGUI", "render");
1479  }
1480 
1481 
1482  //
1483  //
1484  // Contact Information
1485  //
1486  //
1487 
1491  public function showContactInformationObject(): void
1492  {
1493  $tpl = $this->tpl;
1494 
1495  $this->initContactInformationForm();
1496  $this->setGeneralSettingsSubTabs("contact_data");
1497  $tpl->setContent($this->form->getHTML());
1498  }
1499 
1503  public function initContactInformationForm(): void
1504  {
1505  $lng = $this->lng;
1507 
1508  $this->form = new ilPropertyFormGUI();
1509 
1510  // first name
1511  $ti = new ilTextInputGUI($this->lng->txt("firstname"), "admin_firstname");
1512  $ti->setMaxLength(64);
1513  $ti->setSize(40);
1514  $ti->setRequired(true);
1515  $ti->setValue($ilSetting->get("admin_firstname"));
1516  $this->form->addItem($ti);
1517 
1518  // last name
1519  $ti = new ilTextInputGUI($this->lng->txt("lastname"), "admin_lastname");
1520  $ti->setMaxLength(64);
1521  $ti->setSize(40);
1522  $ti->setRequired(true);
1523  $ti->setValue($ilSetting->get("admin_lastname"));
1524  $this->form->addItem($ti);
1525 
1526  // title
1527  $ti = new ilTextInputGUI($this->lng->txt("title"), "admin_title");
1528  $ti->setMaxLength(64);
1529  $ti->setSize(40);
1530  $ti->setValue($ilSetting->get("admin_title"));
1531  $this->form->addItem($ti);
1532 
1533  // position
1534  $ti = new ilTextInputGUI($this->lng->txt("position"), "admin_position");
1535  $ti->setMaxLength(64);
1536  $ti->setSize(40);
1537  $ti->setValue($ilSetting->get("admin_position"));
1538  $this->form->addItem($ti);
1539 
1540  // institution
1541  $ti = new ilTextInputGUI($this->lng->txt("institution"), "admin_institution");
1542  $ti->setMaxLength(200);
1543  $ti->setSize(40);
1544  $ti->setValue($ilSetting->get("admin_institution"));
1545  $this->form->addItem($ti);
1546 
1547  // street
1548  $ti = new ilTextInputGUI($this->lng->txt("street"), "admin_street");
1549  $ti->setMaxLength(64);
1550  $ti->setSize(40);
1551  //$ti->setRequired(true);
1552  $ti->setValue($ilSetting->get("admin_street"));
1553  $this->form->addItem($ti);
1554 
1555  // zip code
1556  $ti = new ilTextInputGUI($this->lng->txt("zipcode"), "admin_zipcode");
1557  $ti->setMaxLength(10);
1558  $ti->setSize(5);
1559  //$ti->setRequired(true);
1560  $ti->setValue($ilSetting->get("admin_zipcode"));
1561  $this->form->addItem($ti);
1562 
1563  // city
1564  $ti = new ilTextInputGUI($this->lng->txt("city"), "admin_city");
1565  $ti->setMaxLength(64);
1566  $ti->setSize(40);
1567  //$ti->setRequired(true);
1568  $ti->setValue($ilSetting->get("admin_city"));
1569  $this->form->addItem($ti);
1570 
1571  // country
1572  $ti = new ilTextInputGUI($this->lng->txt("country"), "admin_country");
1573  $ti->setMaxLength(64);
1574  $ti->setSize(40);
1575  //$ti->setRequired(true);
1576  $ti->setValue($ilSetting->get("admin_country"));
1577  $this->form->addItem($ti);
1578 
1579  // phone
1580  $ti = new ilTextInputGUI($this->lng->txt("phone"), "admin_phone");
1581  $ti->setMaxLength(64);
1582  $ti->setSize(40);
1583  //$ti->setRequired(true);
1584  $ti->setValue($ilSetting->get("admin_phone"));
1585  $this->form->addItem($ti);
1586 
1587  // email
1588  $ti = new ilEMailInputGUI($this->lng->txt("email"), "admin_email");
1589  $ti->setMaxLength(64);
1590  $ti->setSize(40);
1591  $ti->setRequired(true);
1592  $ti->allowRFC822(true);
1593  $ti->setValue($ilSetting->get("admin_email"));
1594  $this->form->addItem($ti);
1595 
1596  // System support contacts
1597  $ti = new ilTextInputGUI($this->lng->txt("adm_support_contacts"), "adm_support_contacts");
1598  $ti->setMaxLength(500);
1599  $ti->setValue(ilSystemSupportContacts::getList());
1600  //$ti->setSize();
1601  $ti->setInfo($this->lng->txt("adm_support_contacts_info"));
1602  $this->form->addItem($ti);
1603 
1604  // Accessibility support contacts
1605  $ti = new ilTextInputGUI($this->lng->txt("adm_accessibility_contacts"), "accessibility_support_contacts");
1606  $ti->setMaxLength(500);
1607  $ti->setValue(ilAccessibilitySupportContacts::getList());
1608  //$ti->setSize();
1609  $ti->setInfo($this->lng->txt("adm_accessibility_contacts_info"));
1610  $this->form->addItem($ti);
1611 
1612  $this->form->addCommandButton("saveContactInformation", $lng->txt("save"));
1613 
1614  $this->form->setTitle($lng->txt("contact_data"));
1615  $this->form->setFormAction($this->ctrl->getFormAction($this));
1616  }
1617 
1622  public function saveContactInformationObject(): void
1623  {
1624  $tpl = $this->tpl;
1625  $lng = $this->lng;
1626  $ilCtrl = $this->ctrl;
1628  $rbacsystem = $this->rbacsystem;
1629  $ilErr = $this->error;
1630 
1631  if (!$rbacsystem->checkAccess("write", $this->object->getRefId())) {
1632  $this->tpl->setOnScreenMessage("failure", $this->lng->txt("permission_denied"), true);
1633  $this->ctrl->redirectByClass(self::class, "showContactInformation");
1634  }
1635 
1636  $this->initContactInformationForm();
1637  if ($this->form->checkInput()) {
1638  $fs = array("admin_firstname", "admin_lastname", "admin_title", "admin_position",
1639  "admin_institution", "admin_street", "admin_zipcode", "admin_city",
1640  "admin_country", "admin_phone", "admin_email");
1641  foreach ($fs as $f) {
1642  $ilSetting->set($f, $_POST[$f]);
1643  }
1644 
1645  // System support contacts
1646  ilSystemSupportContacts::setList($_POST["adm_support_contacts"]);
1647 
1648  // Accessibility support contacts
1649  ilAccessibilitySupportContacts::setList($_POST["accessibility_support_contacts"]);
1650 
1651  $this->tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
1652  $ilCtrl->redirect($this, "showContactInformation");
1653  } else {
1654  $this->setGeneralSettingsSubTabs("contact_data");
1655  $this->form->setValuesByPost();
1656  $tpl->setContent($this->form->getHtml());
1657  }
1658  }
1659 
1660  //
1661  //
1662  // Java Server
1663  //
1664  //
1665 
1669  public function showJavaServerObject(): void
1670  {
1671  $tpl = $this->tpl;
1672 
1673  $tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.java_settings.html', 'Modules/SystemFolder');
1674 
1675  $GLOBALS['lng']->loadLanguageModule('search');
1676 
1677  $this->initJavaServerForm();
1678  $this->setServerInfoSubTabs("java_server");
1679  $tpl->setVariable('SETTINGS_TABLE', $this->form->getHTML());
1680  }
1681 
1686  public function createJavaServerIniObject(): void
1687  {
1688  $this->setGeneralSettingsSubTabs('java_server');
1689  $this->tpl->setContent($this->form->getHTML());
1690  }
1691 
1695  public function initJavaServerForm(): void
1696  {
1697  $lng = $this->lng;
1699 
1700  $this->form = new ilPropertyFormGUI();
1701  $this->form->setFormAction($this->ctrl->getFormAction($this, 'saveJavaServer'));
1702 
1703  // pdf fonts
1704  $pdf = new ilFormSectionHeaderGUI();
1705  $pdf->setTitle($this->lng->txt('rpc_pdf_generation'));
1706  $this->form->addItem($pdf);
1707 
1708  $pdf_font = new ilTextInputGUI($this->lng->txt('rpc_pdf_font'), 'rpc_pdf_font');
1709  $pdf_font->setInfo($this->lng->txt('rpc_pdf_font_info'));
1710  $pdf_font->setSize(64);
1711  $pdf_font->setMaxLength(1024);
1712  $pdf_font->setRequired(true);
1713  $pdf_font->setValue(
1714  $ilSetting->get('rpc_pdf_font', 'Helvetica, unifont')
1715  );
1716  $this->form->addItem($pdf_font);
1717 
1718  // save and cancel commands
1719  $this->form->addCommandButton("saveJavaServer", $lng->txt("save"));
1720  }
1721 
1726  public function saveJavaServerObject(): void
1727  {
1728  $tpl = $this->tpl;
1729  $lng = $this->lng;
1730  $ilCtrl = $this->ctrl;
1732  $rbacsystem = $this->rbacsystem;
1733  $ilErr = $this->error;
1734 
1735  if (!$rbacsystem->checkAccess("write", $this->object->getRefId())) {
1736  $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
1737  }
1738 
1739  $this->initJavaServerForm();
1740  if ($this->form->checkInput()) {
1741  $ilSetting->set('rpc_pdf_font', ilUtil::stripSlashes($_POST['rpc_pdf_font']));
1742  $this->tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true);
1743  $ilCtrl->redirect($this, "showJavaServer");
1744 
1745  // TODO check settings, ping server
1746  } else {
1747  $this->setGeneralSettingsSubTabs("java_server");
1748  $this->form->setValuesByPost();
1749  $tpl->setContent($this->form->getHtml());
1750  }
1751  }
1752 
1756  public static function _goto(): void
1757  {
1758  global $DIC;
1759  $main_tpl = $DIC->ui()->mainTemplate();
1760 
1761  $ilAccess = $DIC->access();
1762  $ilErr = $DIC["ilErr"];
1763  $lng = $DIC->language();
1764 
1765  $a_target = SYSTEM_FOLDER_ID;
1766 
1767  if ($ilAccess->checkAccess("read", "", $a_target)) {
1768  ilUtil::redirect("ilias.php?baseClass=ilAdministrationGUI");
1769  exit;
1770  } else {
1771  if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID)) {
1772  $main_tpl->setOnScreenMessage('failure', sprintf(
1773  $lng->txt("msg_no_perm_read_item"),
1775  ), true);
1777  }
1778  }
1779  $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
1780  }
1781 
1785  protected function showVcsInformationObject(): void
1786  {
1787  $vcInfo = [];
1788  $rbacsystem = $this->rbacsystem;
1789  if ($rbacsystem->checkAccess("read", $this->object->getRefId())) {
1790  foreach ([new ilGitInformation()] as $vc) {
1791  $html = $vc->getInformationAsHtml();
1792  if ($html) {
1793  $vcInfo[] = $html;
1794  }
1795  }
1796 
1797  if ($vcInfo !== []) {
1798  $this->tpl->setOnScreenMessage('info', implode("<br />", $vcInfo));
1799  } else {
1800  $this->tpl->setOnScreenMessage('info', $this->lng->txt('vc_information_not_determined'));
1801  }
1802 
1803  $this->showServerInfoObject();
1804  }
1805  }
1806 }
saveJavaServerObject()
Save java server form.
addHeaderTitleTranslationObject()
adds a translation form & save post vars to session
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
switchBenchModuleObject()
save benchmark settings
addBlockFile(string $var, string $block, string $template_name, string $in_module=null)
overwrites ITX::addBlockFile
showPHPInfoObject()
Show PHP Information.
$_GET["client_id"]
Definition: webdav.php:30
exit
Definition: login.php:29
benchmarkSubTabs($a_current)
Benchmark sub tabs.
const ILIAS_VERSION
ILIAS Refinery Factory $refinery
showContactInformationObject()
Show contact information.
writePref(string $a_keyword, string $a_value)
initJavaServerForm()
Init java server form.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const ROOT_FOLDER_ID
Definition: constants.php:32
saveBasicSettingsObject()
Save basic settings form.
prepareOutput(bool $show_sub_objects=true)
static setList($a_list)
Set list.
Class ChatMainBarProvider .
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Help GUI class.
ILIAS Repository InternalGUIService $gui
ILIAS HTTP Wrapper WrapperFactory $wrapper
benchmarkObject()
Benchmark settings.
changeHeaderTitleObject()
edit header title form
static formSelect( $selected, string $varname, array $options, bool $multiple=false, bool $direct_text=false, int $size=0, string $style_class="", array $attribs=[], bool $disabled=false)
Builds a select form field with options and shows the selected option first.
getServerStatusInfo(ILIAS\Refinery\Factory $refinery)
loadLanguageModule(string $a_module)
Load language module.
deleteHeaderTitlesObject()
Remove header titles.
clearBenchObject()
delete all benchmark records
setMaxLength(int $max_length)
Command to output status information about the installation.
setVariable(string $variable, $value='')
Sets the given variable to the given value.
removeTranslationObject()
removes a translation form & save post vars to session
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static prepareFormOutput($a_str, bool $a_strip=false)
Class ilObjectOwnershipManagementGUI.
saveContactInformationObject()
Save contact information form.
language handling for setup
const SYSTEM_FOLDER_ID
Definition: constants.php:35
$ilErr
Definition: raiseError.php:17
Class ilObjSystemFolderGUI.
static _lookupObjId(int $ref_id)
showDbBenchResults($a_mode)
Show Db Benchmark Results.
A metric is something we can measure about the system.
Definition: Metric.php:33
global $DIC
Definition: feed.php:28
ILIAS Style Content Object ObjectFacade $content_style_domain
checkAccess(string $a_operations, int $a_ref_id, string $a_type="")
checkAccess represents the main method of the RBAC-system in ILIAS3 developers want to use With this ...
showDbBenchByFirstTableObject()
Show db benchmark results.
ilLanguage $lng
parses the objects.xml it handles the xml-description of all ilias objects
checkObject()
displays system check menu
showDbBenchSortedBySqlObject()
Show db benchmark results.
This class represents a property in a property form.
__construct(VocabulariesInterface $vocabularies)
ilGlobalTemplateInterface $tpl
static _lookupTitle(int $obj_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setContent(string $a_html)
Sets content for standard template.
$GLOBALS["DIC"]
Definition: wac.php:31
showDbBenchChronologicalObject()
Show db benchmark results.
static getInstance()
get singleton instance
$_SERVER['HTTP_HOST']
Definition: raiseError.php:10
Class ilObjectGUI Basic methods of all Output classes.
const CLIENT_ID
Definition: constants.php:41
string $key
Consumer key/client ID value.
Definition: System.php:193
ilToolbarGUI $toolbar
saveHeaderTitlesObject(bool $delete=false)
Save header titles.
clearData()
delete all measurement data
addHeaderTitleObject()
Add a header title.
setSystemCheckSubTabs($a_activate)
Set sub tabs for general settings.
static redirect(string $a_script)
static getPluginObjectByType(string $type)
Return either a repoObject plugin or a orgunit extension plugin or null if the type is not a plugin...
showDbBenchSlowestFirstObject()
Show db benchmark results.
static _goto()
goto target group
setServerInfoSubTabs($a_activate)
Set sub tabs for server info.
saveHeaderTitleObject()
save header title
form( $class_path, string $cmd, string $submit_caption="")
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Error Handling & global info handling.
initContactInformationForm()
Init contact information form.
global $ilSetting
Definition: privfeed.php:18
initServerInfoForm()
Init server info form.
ilAccessHandler $access
ilStyleDefinition acts as a wrapper of style related actions.
Class ilBenchmark.
Class ilCronManagerGUI.
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
showJavaServerObject()
Show Java Server Settings.
showHeaderTitleObject( $a_get_post_values=false, bool $add_entry=false)
Show header title.
setGeneralSettingsSubTabs($a_activate)
Set sub tabs for general settings.
__construct($a_data, $a_id, $a_call_by_reference)
Constructor public.
createJavaServerIniObject()
Create a server ini file.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
viewObject()
show admin subpanels and basic settings form
$post
Definition: ltitoken.php:49
ilSetting $settings
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
saveBenchSettingsObject()
Save benchmark settings.
static _gotoRepositoryRoot(bool $raise_error=false)
Goto repository root.
showBasicSettingsObject()
Show basic settings.
ilObjectDefinition $obj_definition
$r
static _lookupLogin(int $a_user_id)