ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilObjLanguageFolderGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
23 
35 {
41 
45  public function __construct(?array $a_data, int $a_id, bool $a_call_by_reference)
46  {
47  $this->type = "lngf";
48  parent::__construct($a_data, $a_id, $a_call_by_reference, false);
49  $this->lng->loadLanguageModule("lng");
50  $this->df = new ILIAS\Data\Factory();
51 
52  $here_uri = $this->df->uri($this->request->getUri()->__toString());
53  $url_builder = new URLBuilder($here_uri);
54  $query_params_namespace = ['language_folder'];
55  [$url_builder, $action_parameter_token, $row_id_token] =
56  $url_builder->acquireParameters(
57  $query_params_namespace,
58  "table_action", //this is the actions's parameter name
59  "obj_ids" //this is the parameter name to be used for row-ids
60  );
61 
62  $this->url_builder = $url_builder;
63  $this->action_token = $action_parameter_token;
64  $this->id_token = $row_id_token;
65 
67  $folder = $this->object;
68  $this->languageFolderTable = new ilLanguageFolderTable($folder, $url_builder, $action_parameter_token, $row_id_token);
69  }
70 
74  public function viewObject(): void
75  {
76  global $DIC;
77 
78  $table = $this->languageFolderTable->getTable();
79 
80  if ($this->checkPermissionBool("write")) {
81  // refresh
82  $ids = $this->confirmRefreshObject();
83  $modal = $this->buildConfirmModal(
84  $ids,
85  'refresh_languages',
86  'confirmRefresh',
87  'lang_refresh_confirm_selected',
88  "lang_refresh_confirm_info"
89  );
90  $refresh = $this->ui_factory->button()->standard(
91  $this->lng->txt("refresh_languages"),
92  ''
93  )->withOnClick($modal->getShowSignal());
94 
95  $this->toolbar->addComponent($modal);
96  $this->toolbar->addComponent($refresh);
97 
98  // check languages
99  $check = $this->ui_factory->button()->standard(
100  $this->lng->txt("check_languages"),
101  $this->getUrl("checkLanguage")
102  );
103  $this->toolbar->addComponent($check);
104  }
105 
106  $ilClientIniFile = $DIC["ilClientIniFile"];
107  if ($ilClientIniFile->variableExists("system", "LANGUAGE_LOG")) {
108  $download = $this->ui_factory->button()->standard(
109  $this->lng->txt("lng_download_deprecated"),
110  $this->ctrl->getLinkTarget($this, "listDeprecated")
111  );
112  $this->toolbar->addComponent($download);
113  }
114 
115  if ($this->checkPermissionBool("write")) {
116  $modal_on = $this->ui_factory->modal()->interruptive(
117  'ON',
118  $this->lng->txt("lng_enable_language_detection"),
119  $this->ctrl->getFormActionByClass(self::class, "enableLanguageDetection")
120  )
121  ->withActionButtonLabel($this->lng->txt('ok'));
122  $modal_off = $this->ui_factory->modal()->interruptive(
123  'OFF',
124  $this->lng->txt("lng_disable_language_detection"),
125  $this->ctrl->getFormActionByClass(self::class, "disableLanguageDetection")
126  )
127  ->withActionButtonLabel($this->lng->txt('ok'));
128  $toggleButton = $this->ui_factory->button()->toggle(
129  $this->lng->txt("language_detection"),
130  $modal_on->getShowSignal(),
131  $modal_off->getShowSignal(),
132  (bool) ($this->settings->get("lang_detection"))
133  )
134  ->withAriaLabel($this->lng->txt("lng_switch_language_detection"));
135  $this->toolbar->addComponent($modal_on);
136  $this->toolbar->addComponent($modal_off);
137  $this->toolbar->addComponent($toggleButton);
138  }
139 
140  $this->tpl->setContent($this->ui_renderer->render($table->withRequest($this->request)));
141  }
142 
143  protected function buildConfirmModal(array $ids, string $title, string $action, string $text, string $add_text = ''): ILIAS\UI\Implementation\Component\Modal\Interruptive
144  {
146  $title = $this->lng->txt($title);
147  $items = [];
148 
149  if (!empty($ids)) {
150  $message = $this->lng->txt($text);
151 
152  $some_changed = false;
153  foreach ($ids as $id) {
154  $lang_key = ilObject::_lookupTitle((int) $id);
155  $lang_title = $this->lng->txt("meta_l_" . $lang_key);
156  $last_change = ilObjLanguage::_getLastLocalChange($lang_key);
157  if (!empty($last_change)) {
158  $some_changed = true;
159  $lang_title .= " (" . $this->lng->txt("last_change") . " "
161  $last_change,
163  'UTC'
164  )) . ")";
165  }
166  $items[] = $f->modal()->interruptiveItem()->standard($id, $lang_title);
167  }
168  $form_action = $this->getUrl($action, $ids);
169 
170  if ($some_changed) {
171  $message .= "<br />" . $this->lng->txt($add_text);
172  }
173  } else {
174  $message = $this->lng->txt("no_checkbox");
175  $form_action = '';
176  }
177  $modal = $f->modal()->interruptive(
178  $title,
179  $message,
181  );
182  if (!empty($items)) {
183  $modal = $modal->withAffectedItems($items)
184  ->withActionButtonLabel($title);
185  } else {
186  $modal = $modal->withActionButtonLabel($this->lng->txt('ok'));
187  }
188  return $modal;
189  }
190 
194  public function installObject(array $ids): void
195  {
196  $this->checkPermission("write");
197  $this->lng->loadLanguageModule("meta");
198 
199  foreach ($ids as $obj_id) {
200  $langObj = new ilObjLanguage((int) $obj_id);
201  $key = $langObj->install();
202 
203  if ($key !== "") {
204  $lang_installed[] = $key;
205  }
206 
207  unset($langObj);
208  }
209 
210  if (isset($lang_installed)) {
211  if (count($lang_installed) === 1) {
212  $this->data = $this->lng->txt("meta_l_" . $lang_installed[0]) . " " . strtolower($this->lng->txt("installed")) . ".";
213  } else {
214  $langnames = [];
215  foreach ($lang_installed as $lang_key) {
216  $langnames[] = $this->lng->txt("meta_l_" . $lang_key);
217  }
218  $this->data = implode(", ", $langnames) . " " . strtolower($this->lng->txt("installed")) . ".";
219  }
220  } else {
221  $this->data = $this->lng->txt("languages_already_installed");
222  }
223 
224  $this->out();
225  }
226 
227 
231  public function installLocalObject(array $ids): void
232  {
233  $this->checkPermission("write");
234  $this->lng->loadLanguageModule("meta");
235 
236  foreach ($ids as $obj_id) {
237  $langObj = new ilObjLanguage((int) $obj_id);
238  $key = $langObj->install();
239 
240  if ($key !== "") {
241  $lang_installed[] = $key;
242  }
243 
244  unset($langObj);
245 
246  $langObj = new ilObjLanguage((int) $obj_id);
247  $key = $langObj->install("local");
248 
249  if ($key !== "") {
250  $local_installed[] = $key;
251  }
252 
253  unset($langObj);
254  }
255 
256  if (isset($lang_installed)) {
257  if (count($lang_installed) === 1) {
258  $this->data = $this->lng->txt("meta_l_" . $lang_installed[0]) . " " . strtolower($this->lng->txt("installed")) . ".";
259  } else {
260  $langnames = [];
261  foreach ($lang_installed as $lang_key) {
262  $langnames[] = $this->lng->txt("meta_l_" . $lang_key);
263  }
264  $this->data = implode(", ", $langnames) . " " . strtolower($this->lng->txt("installed")) . ".";
265  }
266  }
267 
268  if (isset($local_installed)) {
269  if (count($local_installed) === 1) {
270  $this->data .= " " . $this->lng->txt("meta_l_" . $local_installed[0]) . " " . $this->lng->txt("local_language_file") . " " . strtolower($this->lng->txt("installed")) . ".";
271  } else {
272  $langnames = [];
273  foreach ($local_installed as $lang_key) {
274  $langnames[] = $this->lng->txt("meta_l_" . $lang_key);
275  }
276  $this->data .= " " . implode(", ", $langnames) . " " . $this->lng->txt("local_language_files") . " " . strtolower($this->lng->txt("installed")) . ".";
277  }
278  } else {
279  $this->data .= " " . $this->lng->txt("local_languages_already_installed");
280  }
281 
282  $this->out();
283  }
284 
285 
289  public function uninstallObject(array $ids): void
290  {
291  $this->checkPermission('write');
292  $this->lng->loadLanguageModule("meta");
293 
294  $sys_lang = false;
295  $usr_lang = false;
296 
297  // uninstall all selected languages
298  foreach ($ids as $obj_id) {
299  $langObj = new ilObjLanguage((int) $obj_id);
300  if (!($sys_lang = $langObj->isSystemLanguage()) && !($usr_lang = $langObj->isUserLanguage())) {
301  $key = $langObj->uninstall();
302  if ($key !== "") {
303  $lang_uninstalled[] = $key;
304  }
305  }
306  unset($langObj);
307  }
308 
309  // generate output message
310  if (isset($lang_uninstalled)) {
311  if (count($lang_uninstalled) === 1) {
312  $this->data = $this->lng->txt("meta_l_" . $lang_uninstalled[0]) . " " . $this->lng->txt("uninstalled");
313  } else {
314  $langnames = [];
315  foreach ($lang_uninstalled as $lang_key) {
316  $langnames[] = $this->lng->txt("meta_l_" . $lang_key);
317  }
318 
319  $this->data = implode(", ", $langnames) . " " . $this->lng->txt("uninstalled");
320  }
321  } elseif ($sys_lang) {
322  $this->data = $this->lng->txt("cannot_uninstall_systemlanguage");
323  } elseif ($usr_lang) {
324  $this->data = $this->lng->txt("cannot_uninstall_language_in_use");
325  } else {
326  $this->data = $this->lng->txt("languages_already_uninstalled");
327  }
328 
329  $this->out();
330  }
331 
332 
336  public function uninstallChangesObject(array $ids): void
337  {
338  $this->checkPermission("write");
339 
340  $this->data = $this->lng->txt("selected_languages_updated");
341  $this->lng->loadLanguageModule("meta");
342  $refreshed = [];
343 
344  foreach ($ids as $id) {
345  $langObj = new ilObjLanguage((int) $id, false);
346 
347  if ($langObj->isInstalled()) {
348  if ($langObj->check()) {
349  $langObj->flush("all");
350  $langObj->insert();
351  $langObj->setTitle($langObj->getKey());
352  $langObj->setDescription("installed");
353  $langObj->update();
354  $refreshed[] = $langObj->getKey();
355  }
356  $this->data .= "<br />" . $this->lng->txt("meta_l_" . $langObj->getKey());
357  }
358 
359  unset($langObj);
360  }
361  ilObjLanguage::refreshPlugins($refreshed);
362  $this->out();
363  }
364 
368  public function refreshObject(): void
369  {
370  $this->checkPermission("write");
371 
373  $this->data = $this->lng->txt("languages_updated");
374  $this->out();
375  }
376 
380  public function refreshSelectedObject(array $ids): void
381  {
382  $this->checkPermission("write");
383  $this->data = $this->lng->txt("selected_languages_updated");
384  $this->lng->loadLanguageModule("meta");
385 
386  $refreshed = [];
387  foreach ($ids as $id) {
388  $langObj = new ilObjLanguage((int) $id, false);
389  if ($langObj->refresh()) {
390  $refreshed[] = $langObj->getKey();
391  $this->data .= "<br />" . $this->lng->txt("meta_l_" . $langObj->getKey());
392  }
393  unset($langObj);
394  }
395 
396  ilObjLanguage::refreshPlugins($refreshed);
397  $this->out();
398  }
399 
403  public function setUserLanguageObject(array $ids): void
404  {
405  global $DIC;
406  $ilUser = $DIC->user();
407 
408  $this->checkPermission("write");
409  $this->lng->loadLanguageModule("meta");
410 
411  #require_once "./Services/User/classes/class.ilObjUser.php";
412 
413 
414  if (count($ids) !== 1) {
415  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("choose_only_one_language") . "<br/>" . $this->lng->txt("action_aborted"), true);
416  $this->ctrl->redirect($this, "view");
417  }
418 
419  $obj_id = current($ids);
420 
421  $newUserLangObj = new ilObjLanguage((int) $obj_id);
422 
423  if ($newUserLangObj->isUserLanguage()) {
424  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("meta_l_" . $newUserLangObj->getKey()) . " " . $this->lng->txt("is_already_your") . " " . $this->lng->txt("user_language") . "<br/>" . $this->lng->txt("action_aborted"), true);
425  $this->ctrl->redirect($this, "view");
426  }
427 
428  if (!$newUserLangObj->isInstalled()) {
429  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("meta_l_" . $newUserLangObj->getKey()) . " " . $this->lng->txt("language_not_installed") . "<br/>" . $this->lng->txt("action_aborted"), true);
430  $this->ctrl->redirect($this, "view");
431  }
432 
433  $curUser = new ilObjUser($ilUser->getId());
434  $curUser->setLanguage($newUserLangObj->getKey());
435  $curUser->update();
436 
437  $this->data = $this->lng->txt("user_language") . " " . $this->lng->txt("changed_to") . " " . $this->lng->txt("meta_l_" . $newUserLangObj->getKey()) . ".";
438 
439  $this->out();
440  }
441 
442 
446  public function setSystemLanguageObject(array $ids): void
447  {
448  $this->checkPermission("write");
449  $this->lng->loadLanguageModule("meta");
450 
451 
452  if (count($ids) !== 1) {
453  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("choose_only_one_language") . "<br/>" . $this->lng->txt("action_aborted"), true);
454  $this->ctrl->redirect($this, "view");
455  }
456 
457  $obj_id = current($ids);
458 
459  $newSysLangObj = new ilObjLanguage((int) $obj_id);
460 
461  if ($newSysLangObj->isSystemLanguage()) {
462  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("meta_l_" . $newSysLangObj->getKey()) . " " . $this->lng->txt("is_already_your") . " " . $this->lng->txt("system_language") . "<br/>" . $this->lng->txt("action_aborted"), true);
463  $this->ctrl->redirect($this, "view");
464  }
465 
466  if (!$newSysLangObj->isInstalled()) {
467  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("meta_l_" . $newSysLangObj->getKey()) . " " . $this->lng->txt("language_not_installed") . "<br/>" . $this->lng->txt("action_aborted"), true);
468  $this->ctrl->redirect($this, "view");
469  }
470 
471  $this->ilias->setSetting("language", $newSysLangObj->getKey());
472 
473  // update ini-file
474  $this->ilias->ini->setVariable("language", "default", $newSysLangObj->getKey());
475  $this->ilias->ini->write();
476 
477  $this->data = $this->lng->txt("system_language") . " " . $this->lng->txt("changed_to") . " " . $this->lng->txt("meta_l_" . $newSysLangObj->getKey()) . ".";
478 
479  $this->out();
480  }
481 
485  public function checkLanguageObject(): void
486  {
487  $this->checkPermission("write");
488  $this->data = $this->object->checkAllLanguages();
489  $this->out();
490  }
491 
492  public function out(): void
493  {
494  $this->tpl->setOnScreenMessage('info', $this->data, true);
495  $this->ctrl->redirect($this, "view");
496  }
497 
498  public function getAdminTabs(): void
499  {
500  $this->getTabs();
501  }
502 
506  protected function getTabs(): void
507  {
508  if ($this->checkPermissionBool("read")) {
509  $this->tabs_gui->addTab("settings", $this->lng->txt("settings"), $this->ctrl->getLinkTarget($this, "view"));
510  }
511 
512  if ($this->checkPermissionBool("edit_permission")) {
513  $this->tabs_gui->addTab("perm_settings", $this->lng->txt("perm_settings"), $this->ctrl->getLinkTargetByClass(array(self::class,"ilpermissiongui"), "perm"));
514  }
515  }
516 
517  public function executeCommand(): void
518  {
519  // always check read permission, needed write permissions are checked in the *Object functions
520  $this->checkPermission("read", "", $this->type, $this->ref_id);
521 
522  $next_class = $this->ctrl->getNextClass($this);
523  $cmd = $this->ctrl->getCmd();
524  $this->prepareOutput();
525 
526  switch ($next_class) {
527  case "ilpermissiongui":
528  include_once "Services/AccessControl/classes/class.ilPermissionGUI.php";
529  $perm_gui = new ilPermissionGUI($this);
530  $this->tabs_gui->activateTab("perm_settings");
531  $this->ctrl->forwardCommand($perm_gui);
532  break;
533 
534  default:
535  $this->tabs_gui->activateTab("settings");
536 
537  if ($action = $this->getCommandFromQueryToken($this->action_token->getName())) {
538  $this->checkPermission("write");
539  $this->lng->loadLanguageModule("meta");
542  switch ($action) {
543  case 'confirmRefresh':
544  $ids = $this->confirmRefreshObject();
545  $this->refreshSelectedObject($ids);
546  break;
547  case 'checkLanguage':
548  $this->checkLanguageObject();
549  break;
550  case 'refresh':
551  $ids = $this->getIdsFromQueryToken();
552  if (current($ids) === 'ALL_OBJECTS') {
553  array_shift($ids);
554  $languages = ilObject::_getObjectsByType("lng");
555  foreach ($languages as $lang) {
556  $langObj = new ilObjLanguage((int) $lang["obj_id"], false);
557  if ($langObj->isInstalled()) {
558  $ids[] = (string) $lang["obj_id"];
559  }
560  }
561  }
562  $modal = $this->buildConfirmModal(
563  $ids,
564  $action,
565  'refreshConfirmed',
566  'lang_refresh_confirm_selected',
567  "lang_refresh_confirm_info"
568  );
569  echo($r->renderAsync([$modal]));
570  exit();
571  case 'refreshConfirmed':
572  $ids = $this->getIdsFromQueryToken();
573  $this->refreshSelectedObject($ids);
574  break;
575  case 'uninstall':
576  $ids = $this->getIdsFromQueryToken();
577  if (current($ids) === 'ALL_OBJECTS') {
578  array_shift($ids);
579  $languages = ilObject::_getObjectsByType("lng");
580  foreach ($languages as $lang) {
581  $langObj = new ilObjLanguage((int) $lang["obj_id"], false);
582  if ($langObj->isInstalled()) {
583  $ids[] = (string) $lang["obj_id"];
584  }
585  }
586  }
587  $modal = $this->buildConfirmModal(
588  $ids,
589  $action,
590  'uninstallConfirmed',
591  'lang_uninstall_confirm'
592  );
593  echo($r->renderAsync([$modal]));
594  exit();
595  case 'uninstallConfirmed':
596  $ids = $this->getIdsFromQueryToken();
597  $this->uninstallObject($ids);
598  break;
599  case 'install':
600  $ids = $this->getIdsFromQueryToken();
601  if (current($ids) === 'ALL_OBJECTS') {
602  array_shift($ids);
603  $languages = ilObject::_getObjectsByType("lng");
604  foreach ($languages as $lang) {
605  $langObj = new ilObjLanguage((int) $lang["obj_id"], false);
606  if (!$langObj->isInstalled()) {
607  $ids[] = (string) $lang["obj_id"];
608  }
609  }
610  }
611  $this->installObject($ids);
612  break;
613  case 'install_local':
614  $ids = $this->getIdsFromQueryToken();
615  if (current($ids) === 'ALL_OBJECTS') {
616  array_shift($ids);
617  $languages = ilObject::_getObjectsByType("lng");
618  foreach ($languages as $lang) {
619  $ids[] = (string) $lang["obj_id"];
620  }
621  }
622  $this->installLocalObject($ids);
623  break;
624  case 'lang_uninstall_changes':
625  $ids = $this->getIdsFromQueryToken();
626  if (current($ids) === 'ALL_OBJECTS') {
627  array_shift($ids);
628  $languages = ilObject::_getObjectsByType("lng");
629  foreach ($languages as $lang) {
630  $langObj = new ilObjLanguage((int) $lang["obj_id"], false);
631  if ($langObj->isInstalled()) {
632  $ids[] = (string) $lang["obj_id"];
633  }
634  }
635  }
636  $modal = $this->buildConfirmModal(
637  $ids,
638  $action,
639  'uninstallChanges',
640  'lang_uninstall_changes_confirm'
641  );
642  echo($r->renderAsync([$modal]));
643  exit();
644  case 'uninstallChanges':
645  $ids = $this->getIdsFromQueryToken();
646  $this->uninstallChangesObject($ids);
647  break;
648  case 'setSystemLanguage':
649  $ids = $this->getIdsFromQueryToken();
650  $this->setSystemLanguageObject($ids);
651  break;
652  case 'setUserLanguage':
653  $ids = $this->getIdsFromQueryToken();
654  $this->setUserLanguageObject($ids);
655  break;
656  case 'edit':
657  $ids = $this->getIdsFromQueryToken();
658  $this->editFolderObject($ids);
659  break;
660  }
661  }
662  if (!$cmd) {
663  $cmd = "view";
664  }
665  $cmd .= "Object";
666  $this->$cmd();
667 
668  break;
669  }
670  }
671 
672  protected function getCommandFromQueryToken(string $param): ?string
673  {
674  if (!$this->request_wrapper->has($param)) {
675  return null;
676  }
677  $trafo = $this->refinery->byTrying([
678  $this->refinery->kindlyTo()->null(),
679  $this->refinery->kindlyTo()->string()
680  ]);
681  return $this->request_wrapper->retrieve($param, $trafo);
682  }
683 
684  public function confirmRefreshObject(): array
685  {
686  $this->checkPermission("write");
687 
688  $languages = ilObject::_getObjectsByType("lng");
689 
690  $ids = [];
691  foreach ($languages as $lang) {
692  $langObj = new ilObjLanguage((int) $lang["obj_id"], false);
693  if ($langObj->isInstalled()) {
694  $ids[] = (string) $lang["obj_id"];
695  }
696  }
697  return $ids;
698  }
699 
700  public function confirmRefreshSelectedObject(array $a_ids = []): void
701  {
702  $this->checkPermission("write");
703  $this->lng->loadLanguageModule("meta");
704 
705  $header = '';
706  $ids = [];
707  if (!empty($a_ids)) {
708  $ids = $a_ids;
709  $header = $this->lng->txt("lang_refresh_confirm");
710  } elseif (!empty($post_id = $this->getIdsFromQueryToken())) {
711  $ids = $post_id;
712  $header = $this->lng->txt("lang_refresh_confirm_selected");
713  } else {
714  $this->tpl->setOnScreenMessage('failure', $this->lng->txt("no_checkbox"), true);
715  $this->ctrl->redirect($this, "view");
716  }
717 
718  $conf_screen = new ilConfirmationGUI();
719  $some_changed = false;
720  foreach ($ids as $id) {
721  $lang_key = ilObject::_lookupTitle((int) $id);
722  $lang_title = $this->lng->txt("meta_l_" . $lang_key);
723  $last_change = ilObjLanguage::_getLastLocalChange($lang_key);
724  if (!empty($last_change)) {
725  $some_changed = true;
726  $lang_title .= " (" . $this->lng->txt("last_change") . " "
727  . ilDatePresentation::formatDate(new ilDateTime($last_change, IL_CAL_DATETIME)) . ")";
728  }
729  $conf_screen->addItem("id[]", (string) $id, $lang_title);
730  }
731 
732  $conf_screen->setFormAction($this->ctrl->getFormAction($this));
733  if ($some_changed) {
734  $header .= "<br />" . $this->lng->txt("lang_refresh_confirm_info");
735  }
736  $conf_screen->setHeaderText($header);
737  $conf_screen->setCancel($this->lng->txt("cancel"), "view");
738  $conf_screen->setConfirm($this->lng->txt("ok"), "refreshSelected");
739  $this->tpl->setContent($conf_screen->getHTML());
740  }
741 
742  public function confirmUninstallObject(): void
743  {
744  $this->checkPermission("write");
745 
746  $this->lng->loadLanguageModule("meta");
747  $conf_screen = new ilConfirmationGUI();
748  $conf_screen->setFormAction($this->ctrl->getFormAction($this));
749  $conf_screen->setHeaderText($this->lng->txt("lang_uninstall_confirm"));
750  foreach ($this->getIdsFromQueryToken() as $id) {
751  $lang_title = ilObject::_lookupTitle((int) $id);
752  $conf_screen->addItem("id[]", $id, $this->lng->txt("meta_l_" . $lang_title));
753  }
754  $conf_screen->setCancel($this->lng->txt("cancel"), "view");
755  $conf_screen->setConfirm($this->lng->txt("ok"), "uninstall");
756  $this->tpl->setContent($conf_screen->getHTML());
757  }
758 
759  public function confirmUninstallChangesObject(): void
760  {
761  $this->checkPermission('write');
762 
763  $this->lng->loadLanguageModule("meta");
764  $conf_screen = new ilConfirmationGUI();
765  $conf_screen->setFormAction($this->ctrl->getFormAction($this));
766  $conf_screen->setHeaderText($this->lng->txt("lang_uninstall_changes_confirm"));
767  foreach ($this->getIdsFromQueryToken() as $id) {
768  $lang_title = ilObject::_lookupTitle($id);
769  $conf_screen->addItem("id[]", (string) $id, $this->lng->txt("meta_l_" . $lang_title));
770  }
771  $conf_screen->setCancel($this->lng->txt("cancel"), "view");
772  $conf_screen->setConfirm($this->lng->txt("ok"), "uninstallChanges");
773  $this->tpl->setContent($conf_screen->getHTML());
774  }
775 
779  public function getActions(): array
780  {
782  return [
783  'confirmRefreshSelected' => $f->table()->action()->standard(
784  $this->lng->txt("refresh"),
785  $this->url_builder->withParameter($this->action_token, "confirmRefreshSelected"),
787  )->withAsync(),
788  'install' => $f->table()->action()->standard(
789  $this->lng->txt("install"),
790  $this->url_builder->withParameter($this->action_token, "install"),
792  ),
793  'installLocal' => $f->table()->action()->standard(
794  $this->lng->txt("install_local"),
795  $this->url_builder->withParameter($this->action_token, "installLocal"),
797  ),
798  'confirmUninstall' => $f->table()->action()->standard(
799  $this->lng->txt("uninstall"),
800  $this->url_builder->withParameter($this->action_token, "confirmUninstall"),
802  ),
803  'confirmUninstallChanges' => $f->table()->action()->standard(
804  $this->lng->txt("lang_uninstall_changes"),
805  $this->url_builder->withParameter($this->action_token, "confirmUninstallChanges"),
807  ),
808  'setSystemLanguage' => $f->table()->action()->single(
809  $this->lng->txt("setSystemLanguage"),
810  $this->url_builder->withParameter($this->action_token, "setSystemLanguage"),
812  ),
813  'setUserLanguage' => $f->table()->action()->single(
814  $this->lng->txt("setUserLanguage"),
815  $this->url_builder->withParameter($this->action_token, "setUserLanguage"),
817  ),
818  'editFolder' => $f->table()->action()->single(
819  $this->lng->txt("edit"),
820  $this->url_builder->withParameter($this->action_token, "editFolder"),
822  ),
823  ];
824  }
825 
826  protected function editFolderObject(array $ids): void
827  {
828  $this->ctrl->setParameterByClass("ilobjlanguageextgui", "obj_id", current($ids));
829  $this->ctrl->redirectByClass("ilobjlanguageextgui");
830  }
831 
835  protected function disableLanguageDetectionObject(): void
836  {
837  $this->settings->set("lang_detection", '0');
838  $this->tpl->setOnScreenMessage('success', $this->lng->txt("saved_successfully"));
839  $this->viewObject();
840  }
841 
845  protected function enableLanguageDetectionObject(): void
846  {
847  $this->settings->set("lang_detection", '1');
848  $this->tpl->setOnScreenMessage('success', $this->lng->txt("saved_successfully"));
849  $this->viewObject();
850  }
851 
855  public function listDeprecatedObject(): void
856  {
857  $button = $this->ui_factory->button()->standard(
858  $this->lng->txt("download"),
859  $this->ctrl->getLinkTarget($this, "downloadDeprecated")
860  );
861  $this->toolbar->addComponent($button);
862 
863  include_once "./Services/Language/classes/class.ilLangDeprecated.php";
864 
865  $d = new ilLangDeprecated();
866  $res = "";
867  foreach ($d->getDeprecatedLangVars() as $key => $mod) {
868  $res .= $mod . "," . $key . "\n";
869  }
870 
871  $this->tpl->setContent("<pre>" . $res . "</pre>");
872  }
873 
877  public function downloadDeprecatedObject(): void
878  {
879  include_once "./Services/Language/classes/class.ilLangDeprecated.php";
880  $d = new ilLangDeprecated();
881  $res = "";
882  foreach ($d->getDeprecatedLangVars() as $key => $mod) {
883  $res .= $mod . "," . $key . "\n";
884  }
885 
886  ilUtil::deliverData($res, "lang_deprecated.csv");
887  }
888 
889  protected function getUrl(string $action, ?array $lang_ids = null): string
890  {
891  $url_builder = $this->url_builder->withParameter($this->action_token, $action);
892  if($lang_ids) {
893  $url_builder = $url_builder->withParameter($this->id_token, $lang_ids);
894  }
895  return $url_builder->buildURI()->__toString();
896  }
897 
898  private function getIdsFromQueryToken(): array
899  {
900  $ids = [];
901  if ($this->request_wrapper->has($this->id_token->getName())) {
902  $ids = $this->request_wrapper->retrieve(
903  $this->id_token->getName(),
904  $this->refinery->custom()->transformation(fn($v) => $v)
905  );
906  }
907  return $ids;
908  }
909 } // END class.ilObjLanguageFolderGUI
string $title
$res
Definition: ltiservices.php:66
const IL_CAL_DATETIME
getTabs()
Retrieves and adds tabs based on user permissions.
static _getObjectsByType(string $obj_type="", ?int $owner=null)
buildURI()
Get a URI representation of the full URL including query string and fragment/hash.
Definition: URLBuilder.php:214
prepareOutput(bool $show_sub_objects=true)
refreshObject()
update all installed languages
refreshSelectedObject(array $ids)
update selected languages
Interface Observer Contains several chained tasks and infos about them.
installLocalObject(array $ids)
Install local language modifications.
acquireParameters(array $namespace, string ... $names)
Definition: URLBuilder.php:138
listDeprecatedObject()
Download deprecated lang entries.
static deliverData(string $a_data, string $a_filename, string $mime="application/octet-stream")
getUrl(string $action, ?array $lang_ids=null)
uninstallChangesObject(array $ids)
Uninstall local changes in the database.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Search for deprecated lang vars.
UIFactory $ui_factory
static _lookupTitle(int $obj_id)
static refreshPlugins(?array $a_lang_keys=null)
Refresh languages of activated plugins $a_lang_keys keys of languages to be refreshed (not yet suppor...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilObjectGUI Basic methods of all Output classes.
$param
Definition: xapitoken.php:46
global $DIC
Definition: shib_login.php:26
Class ilObjForumAdministration.
ilLanguageFolderTable $languageFolderTable
downloadDeprecatedObject()
Download deprecated lang entries.
exit
checkPermissionBool(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
enableLanguageDetectionObject()
Enable language detection.
viewObject()
show installed languages
$lang
Definition: xapiexit.php:25
withParameter(URLBuilderToken $token, string|array $value)
Change an acquired parameter&#39;s value if the supplied token is valid.
Definition: URLBuilder.php:166
__construct(Container $dic, ilPlugin $plugin)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
buildConfirmModal(array $ids, string $title, string $action, string $text, string $add_text='')
installObject(array $ids)
install languages
disableLanguageDetectionObject()
Disable language detection.
static refreshAll()
Refresh all installed languages.
$check
Definition: buildRTE.php:81
$message
Definition: xapiexit.php:31
uninstallObject(array $ids)
uninstall language
static _getLastLocalChange(string $a_key)
get the date of the last local change $a_key language key Return change_date "yyyy-mm-dd hh:mm:ss" ...
URLBuilder.
Definition: URLBuilder.php:40
UIRenderer $ui_renderer
checkPermission(string $perm, string $cmd="", string $type="", ?int $ref_id=null)
setSystemLanguageObject(array $ids)
set the system language
checkLanguageObject()
check all languages
Class ilObjLanguageFolderGUI.
setUserLanguageObject(array $ids)
set user language
$r