20 declare(strict_types=1);
    27 require_once(
"./Services/Object/classes/class.ilObjectGUI.php");
    28 require_once(
"Services/Language/classes/class.ilObjLanguageAccess.php");
    62     public function __construct($a_data, 
int $a_id = 0, 
bool $a_call_by_reference = 
false)
    65         $ilClientIniFile = $DIC->clientIni();
    66         $ilCtrl = $DIC->ctrl();
    67         $lng = $DIC->language();
    68         $this->
http = $DIC->http();
    76         $ilCtrl->saveParameter($this, 
"view_mode");
    81         if ($this->
http->wrapper()->query()->has(
"obj_id")) {
    82             $obj_id_get = $this->
http->wrapper()->query()->retrieve(
"obj_id", $this->
refinery->kindlyTo()->int());
    84         if (!$this->
id = $obj_id_get) {
    98         $this->langmode = $ilClientIniFile->readVariable(
"system", 
"LANGMODE");
   109         require_once(
"Services/Language/classes/class.ilObjLanguageExt.php");
   128         $ilHelp = $DIC->help();
   131             $this->error->raiseError($this->
lng->txt(
"permission_denied"), $this->error->MESSAGE);
   135         $cmd = $this->
ctrl->getCmd(
"view") . 
"Object";
   138         $ilHelp->setScreenIdComponent(
"lng");
   155         include_once 
"./Services/Language/classes/class.ilLanguageExtTableGUI.php";
   157             "langmode" => $this->langmode,
   158             "lang_key" => $this->
object->key,
   167     public function viewObject(
int $changesSuccessBool = 0): void
   176         $comments = $this->
object->getAllRemarks();
   178         $compare_comments = [];
   179         $missing_entries = [];
   183         $compare = $table_gui->getFilterItemByPostVar(
"compare")->getValue();
   184         if ($compare == $this->
object->key) {
   185             $compare_object = $this->
object->getGlobalLanguageFile();
   186             $compare_content = $compare_object->getAllValues();
   187             $compare_comments = $compare_object->getAllComments();
   197             $reset_offset_get = 
false;
   198             if ($this->
http->wrapper()->query()->has(
"reset_offset")) {
   199                 $reset_offset_get = $this->
http->wrapper()->query()->retrieve(
   206             if ($reset_offset_get) {
   207                 $table_gui->resetOffset();
   210             if (!isset($compare_content)) {
   228             foreach ($translations as $name => $translation) {
   229                 $keys = explode($this->
lng->separator, $name);
   230                 $db_found[] = $keys[1];
   232             $missing_entries = array_diff($topics, $db_found);
   235             $filter_mode = $table_gui->getFilterItemByPostVar(
"mode")->getValue();
   236             $filter_pattern = $table_gui->getFilterItemByPostVar(
"pattern")->getValue();
   237             $filter_module = $table_gui->getFilterItemByPostVar(
"module")->getValue();
   238             $filter_module = $filter_module === 
"all" ? 
"" : $filter_module;
   239             $filter_modules = $filter_module ? array($filter_module) : array();
   240             $filter_identifier = $table_gui->getFilterItemByPostVar(
"identifier")->getValue();
   241             $filter_topics = $filter_identifier ? array($filter_identifier) : array();
   243             if (!isset($compare_content)) {
   253             switch ($filter_mode) {
   255                     $translations = $this->
object->getChangedValues(
   263                     $translations = $this->
object->getAddedValues(
   271                     $translations = $this->
object->getUnchangedValues(
   279                     $translations = $this->
object->getCommentedValues(
   287                     $translations = $this->
object->getAllValues(
   293                     $translations = array_intersect_key($translations, 
$comments);
   297                     $translations = $this->
object->getAllValues(
   303                     $translations = array_intersect_assoc($translations, $compare_content);
   307                     $translations = $this->
object->getAllValues(
   313                     $translations = array_diff_assoc($translations, $compare_content);
   317                     $former_file = $this->
object->getDataPath() . 
"/ilias_" . $this->
object->key . 
".lang";
   318                     if (!is_readable($former_file)) {
   319                         $this->tpl->setOnScreenMessage(
'failure', sprintf($this->
lng->txt(
"language_former_file_missing"), $former_file)
   320                                         . 
'<br />' . $this->
lng->txt(
"language_former_file_description"), 
false);
   321                         $translations = array();
   324                     $global_file_obj = $this->
object->getGlobalLanguageFile();
   326                     $former_file_obj->read();
   327                     $global_changes = array_diff_assoc(
   328                         $global_file_obj->getAllValues(),
   329                         $former_file_obj->getAllValues()
   331                     if (!count($global_changes)) {
   332                         $this->tpl->setOnScreenMessage(
'info', sprintf($this->
lng->txt(
"language_former_file_equal"), $former_file)
   333                                         . 
'<br />' . $this->
lng->txt(
"language_former_file_description"), 
false);
   334                         $translations = array();
   337                     $translations = $this->
object->getChangedValues(
   343                     $translations = array_intersect_key($translations, $global_changes);
   348                     $translations = $this->
object->getAllValues(
   358         foreach ($translations as $name => $translation) {
   359             $keys = explode($this->
lng->separator, $name);
   362             $row[
"module"] = $keys[0];
   363             $row[
"topic"] = $keys[1];
   364             $row[
"name"] = $name;
   365             $row[
"translation"] = $translation;
   366             $row[
"comment"] = 
$comments[$name] ?? 
"";
   367             $row[
"default"] = $compare_content[$name] ?? 
"";
   368             $row[
"default_comment"] = $compare_comments[$name] ?? 
"";
   373         if ($changesSuccessBool) {
   378         $table_gui->setData(
$data);
   388         $table_gui->writeFilterToSession();    
   389         $table_gui->resetOffset();             
   399         $table_gui->resetOffset();                
   400         $table_gui->resetFilter();                
   410         $changesSuccessBool = 0;
   412         $save_array = array();
   413         $remarks_array = array();
   414         $post = (array) ($this->
http->request()->getParsedBody() ?? []);
   419             $key = str_replace([
"_POSTDOT_", 
"_POSTSPACE_"], [
".", 
" "], 
$key);
   425             if (count($keys) === 2) {
   427                 $value = preg_replace(
"/(\015\012)|(\015)|(\012)/", 
"<br />", $value);
   428                 $value = str_replace(
"<<", 
"«", $value);
   429                 $value = 
ilUtil::stripSlashes($value, 
true, 
"<strong><em><u><strike><ol><li><ul><p><div><i><b><code><sup><pre><gap><a><img><bdo><br><span>");
   430                 $save_array[
$key] = $value;
   433                 $remarks_array[
$key] = 
$post[$orginal_key . $this->
lng->separator . 
"comment"];
   441         $changesSuccessBool = 1;
   453         $this->tpl->setContent($form->getHTML());
   458         require_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
   460         $form->setFormAction($this->
ctrl->getFormAction($this));
   461         $form->setTitle($this->
lng->txt(
"language_import_file"));
   462         $form->addCommandButton(
"upload", $this->
lng->txt(
"upload"));
   469         $ro = 
new ilRadioOption($this->
lng->txt(
"language_mode_existing_keepall"), 
"keepall");
   470         $ro->
setInfo($this->
lng->txt(
"language_mode_existing_keepall_info"));
   472         $ro = 
new ilRadioOption($this->
lng->txt(
"language_mode_existing_keepnew"), 
"keepnew");
   473         $ro->
setInfo($this->
lng->txt(
"language_mode_existing_keepnew_info"));
   475         $ro = 
new ilRadioOption($this->
lng->txt(
"language_mode_existing_replace"), 
"replace");
   476         $ro->
setInfo($this->
lng->txt(
"language_mode_existing_replace_info"));
   478         $ro = 
new ilRadioOption($this->
lng->txt(
"language_mode_existing_delete"), 
"delete");
   479         $ro->
setInfo($this->
lng->txt(
"language_mode_existing_delete_info"));
   481         $rg->setValue($this->
getSession()[
"import"][
"mode_existing"] ?? 
"keepall");
   495         if ($form->checkInput()) {
   496             $post_mode_existing = $this->
http->request()->getParsedBody()[
'mode_existing'] ?? 
"";
   501                 $upload = $DIC->upload();
   503                 if (!$upload->hasBeenProcessed()) {
   508                 if (!$upload->hasUploads()) {
   509                     throw new ilException($DIC->language()->txt(
"upload_error_file_not_found"));
   511                 $UploadResult = $upload->getResults()[$_FILES[
"userfile"][
"tmp_name"]];
   513                 $ProcessingStatus = $UploadResult->getStatus();
   514                 if ($ProcessingStatus->getCode() === ProcessingStatus::REJECTED) {
   515                     throw new ilException($ProcessingStatus->getMessage());
   520                 $upload->moveOneFileTo($UploadResult, 
'', Location::TEMPORARY, basename($tempfile), 
true);
   521                 $this->
object->importLanguageFile($tempfile, $post_mode_existing);
   523                 $tempfs = $DIC->filesystem()->temp();
   524                 $tempfs->delete(basename($tempfile));
   526                 $this->tpl->setOnScreenMessage(
'failure', $e->getMessage(), 
true);
   527                 $this->
ctrl->redirect($this, 
'import');
   530             $this->tpl->setOnScreenMessage(
   532                 sprintf($this->
lng->txt(
"language_file_imported"), $_FILES[
"userfile"][
"name"]),
   535             $this->
ctrl->redirect($this, 
"import");
   538         $form->setValuesByPost();
   539         $this->tpl->setContent($form->getHTML());
   547         require_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
   549         $form->setFormAction($this->
ctrl->getFormAction($this));
   550         $form->setTitle($this->
lng->txt(
"language_export_file"));
   551         $form->setPreventDoubleSubmission(
false);
   552         $form->addCommandButton(
"download", $this->
lng->txt(
"download"));
   555         $ro = 
new ilRadioOption($this->
lng->txt(
"language_scope_global"), 
"global");
   556         $ro->
setInfo($this->
lng->txt(
"language_scope_global_info"));
   559         $ro->
setInfo($this->
lng->txt(
"language_scope_local_info"));
   561         if ($this->langmode) {
   563             $ro->
setInfo($this->
lng->txt(
"language_scope_added_info"));
   566         $ro = 
new ilRadioOption($this->
lng->txt(
"language_scope_unchanged"), 
"unchanged");
   567         $ro->
setInfo($this->
lng->txt(
"language_scope_unchanged_info"));
   569         if ($this->langmode) {
   570             $ro = 
new ilRadioOption($this->
lng->txt(
"language_scope_merged"), 
"merged");
   571             $ro->
setInfo($this->
lng->txt(
"language_scope_merged_info"));
   575         $rg->setValue($this->
getSession()[
"export"][
"scope"] ?? 
"global");
   578         $this->tpl->setContent($form->getHTML());
   586         $post_scope = $this->
http->request()->getParsedBody()[
'scope'] ?? 
"";
   591         $filename = 
"ilias_" . $this->
object->key . 
'_'   593         . 
"-" . date(
"Y-m-d")
   594         . 
".lang." . $this->
getSession()[
"export"][
"scope"];
   596         $global_file_obj = $this->
object->getGlobalLanguageFile();
   599         if ($post_scope === 
"global") {
   600             $local_file_obj->setParam(
"author", $global_file_obj->getParam(
"author"));
   601             $local_file_obj->setParam(
"version", $global_file_obj->getParam(
"version"));
   602             $local_file_obj->setAllValues($this->
object->getAllValues());
   603             if ($this->langmode) {
   604                 $local_file_obj->setAllComments($this->
object->getAllRemarks());
   606         } elseif ($post_scope === 
"local") {
   607             $local_file_obj->setParam(
"based_on", $global_file_obj->getParam(
"version"));
   608             $local_file_obj->setAllValues($this->
object->getChangedValues());
   609             if ($this->langmode) {
   610                 $local_file_obj->setAllComments($this->
object->getAllRemarks());
   612         } elseif ($post_scope === 
"added") { 
   613             $local_file_obj->setParam(
"author", $global_file_obj->getParam(
"author"));
   614             $local_file_obj->setParam(
"version", $global_file_obj->getParam(
"version"));
   615             $local_file_obj->setAllValues($this->
object->getAddedValues());
   616             $local_file_obj->setAllComments($this->
object->getAllRemarks());
   617         } elseif ($post_scope === 
"unchanged") {
   618             $local_file_obj->setParam(
"author", $global_file_obj->getParam(
"author"));
   619             $local_file_obj->setParam(
"version", $global_file_obj->getParam(
"version"));
   620             $local_file_obj->setAllValues($this->
object->getUnchangedValues());
   621             if ($this->langmode) {
   622                 $local_file_obj->setAllComments($this->
object->getAllRemarks());
   624         } elseif ($post_scope === 
"merged") { 
   625             $local_file_obj->setParam(
"author", $global_file_obj->getParam(
"author"));
   626             $local_file_obj->setParam(
"version", $global_file_obj->getParam(
"version"));
   627             $local_file_obj->setAllValues($this->
object->getMergedValues());
   628             $local_file_obj->setAllComments($this->
object->getMergedRemarks());
   639         require_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
   641         $form->setFormAction($this->
ctrl->getFormAction($this));
   642         $form->setTitle($this->
lng->txt(
"language_maintenance"));
   643         $form->setPreventDoubleSubmission(
false);
   644         $form->addCommandButton(
"maintainExecute", $this->
lng->txt(
"language_process_maintenance"));
   647         $ro = 
new ilRadioOption($this->
lng->txt(
"language_load_local_changes"), 
"load");
   648         $ro->
setInfo(sprintf($this->
lng->txt(
"language_load_local_changes_info"), $this->
object->key));
   650         $ro = 
new ilRadioOption($this->
lng->txt(
"language_clear_local_changes"), 
"clear");
   651         $ro->
setInfo(sprintf($this->
lng->txt(
"language_clear_local_changes_info"), $this->
object->key));
   653         if ($this->langmode) {
   654             $ro = 
new ilRadioOption($this->
lng->txt(
"language_delete_local_additions"), 
"delete_added");
   655             $ro->
setInfo(sprintf($this->
lng->txt(
"language_delete_local_additions_info"), $this->
object->key));
   657             $ro = 
new ilRadioOption($this->
lng->txt(
"language_remove_local_file"), 
"remove_local_file");
   658             $ro->
setInfo(sprintf($this->
lng->txt(
"language_remove_local_file_info"), $this->
object->key));
   660             $ro = 
new ilRadioOption($this->
lng->txt(
"language_merge_local_changes"), 
"merge");
   661             $ro->
setInfo(sprintf($this->
lng->txt(
"language_merge_local_changes_info"), $this->
object->key));
   664         $ro = 
new ilRadioOption($this->
lng->txt(
"language_save_dist"), 
"save_dist");
   665         $ro->
setInfo(sprintf($this->
lng->txt(
"language_save_dist_info"), $this->
object->key));
   667         $rg->setValue($this->
getSession()[
"maintain"] ?? 
"load");
   670         $this->tpl->setContent($form->getHTML());
   675         $post_maintain = $this->
http->request()->getParsedBody()[
'maintain'] ?? 
"";
   676         if (isset($post_maintain)) {
   681         switch ($post_maintain) {
   685                 $orig_file = $this->
object->getLangPath() . 
"/ilias_" . $this->
object->key . 
".lang";
   686                 $copy_file = $this->
object->getDataPath() . 
"/ilias_" . $this->
object->key . 
".lang";
   687                 if (@copy($orig_file, $copy_file)) {
   688                     $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"language_saved_dist"), 
true);
   690                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"language_save_dist_failed"), 
true);
   696                 $lang_file = $this->
object->getCustLangPath() . 
"/ilias_" . $this->
object->key . 
".lang.local";
   697                 if (is_file($lang_file) and is_readable($lang_file)) {
   698                     $this->
object->importLanguageFile($lang_file, 
"replace");
   699                     $this->
object->setLocal(
true);
   700                     $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"language_loaded_local"), 
true);
   702                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"language_error_read_local"), 
true);
   708                 $lang_file = $this->
object->getLangPath() . 
"/ilias_" . $this->
object->key . 
".lang";
   709                 if (is_file($lang_file) and is_readable($lang_file)) {
   710                     $this->
object->importLanguageFile($lang_file, 
"replace");
   711                     $this->
object->setLocal(
false);
   712                     $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"language_cleared_local"), 
true);
   714                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"language_error_clear_local"), 
true);
   725                 $orig_file = $this->
object->getLangPath() . 
"/ilias_" . $this->
object->key . 
".lang";
   726                 $copy_file = $this->
object->getCustLangPath() . 
"/ilias_" . $this->
object->key . 
".lang";
   728                 if (is_file($orig_file) and is_writable($orig_file)) {
   730                     @copy($orig_file, $copy_file);
   733                     $global_file_obj = $this->
object->getGlobalLanguageFile();
   734                     $global_file_obj->setAllValues($this->
object->getMergedValues());
   735                     $global_file_obj->setAllComments($this->
object->getMergedRemarks());
   736                     $global_file_obj->write();
   737                     $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"language_merged_global"), 
true);
   739                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"language_error_write_global"), 
true);
   744             case "remove_local_file":
   745                 $lang_file = $this->
object->getCustLangPath() . 
"/ilias_" . $this->
object->key . 
".lang.local";
   747                 if (!is_file($lang_file)) {
   748                     $this->
object->setLocal(
false);
   749                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"language_error_local_missed"), 
true);
   750                 } elseif (@unlink($lang_file)) {
   751                     $this->
object->setLocal(
false);
   752                     $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"language_local_file_deleted"), 
true);
   754                     $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"language_error_delete_local"), 
true);
   759         $this->
ctrl->redirect($this, 
"maintain");
   768         $this->tpl->setContent($form->getHTML());
   779         $translate_key = 
"lang_translate_" . $this->
object->key;
   781         $post_translation = $this->
http->request()->getParsedBody()[
'translation'] ?? 
"";
   783         $translate = 
$ilSetting->get($translate_key, 
'0');
   784         if (!is_null($post_translation) && $post_translation != $translate) {
   785             $ilSetting->set($translate_key, $post_translation);
   786             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"));
   790         $this->tpl->setContent($form->getHTML());
   797         $translate_key = 
"lang_translate_" . $this->
object->key;
   798         $translate = (bool) 
$ilSetting->get($translate_key, 
'0');
   800         require_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
   802         $form->setFormAction($this->
ctrl->getFormAction($this));
   803         $form->setTitle($this->
lng->txt(
"language_settings"));
   804         $form->setPreventDoubleSubmission(
false);
   805         $form->addCommandButton(
'saveSettings', $this->
lng->txt(
"language_change_settings"));
   808         $ci->setChecked($translate);
   809         $ci->setInfo($this->
lng->txt(
"language_note_translation"));
   824         foreach ($modules as $module) {
   826             $row[
"module"] = $module;
   827             $row[
"all"] = count($this->
object->getAllValues(array($module)));
   828             $row[
"changed"] = count($this->
object->getChangedValues(array($module)));
   829             $row[
"unchanged"] = $row[
"all"] - $row[
"changed"];
   830             isset($total[
"all"]) ? $total[
"all"] += $row[
"all"] : $total[
"all"] = $row[
"all"];
   831             isset($total[
"changed"]) ? $total[
"changed"] += $row[
"changed"] : $total[
"changed"] = $row[
"changed"];
   832             isset($total[
"unchanged"]) ? $total[
"unchanged"] += $row[
"unchanged"] : $total[
"unchanged"] = $row[
"unchanged"];
   835         $total[
"module"] = 
"<b>" . $this->
lng->txt(
"language_all_modules") . 
"</b>";
   836         $total[
"all"] = 
"<b>" . $total[
"all"] . 
"</b>";
   837         $total[
"changed"] = 
"<b>" . $total[
"changed"] . 
"</b>";
   838         $total[
"unchanged"] = 
"<b>" . $total[
"unchanged"] . 
"</b>";
   842         include_once 
"Services/Table/classes/class.ilTable2GUI.php";
   844         $table_gui->setRowTemplate(
"tpl.lang_statistics_row.html", 
"Services/Language");
   845         $table_gui->setEnableTitle(
false);
   846         $table_gui->setEnableNumInfo(
false);
   847         $table_gui->setLimit(count(
$data));
   850         $table_gui->addColumn(ucfirst($this->
lng->txt(
"module")), 
"", 
"25%");
   851         $table_gui->addColumn($this->
lng->txt(
"language_scope_global"), 
"", 
"25%");
   852         $table_gui->addColumn($this->
lng->txt(
"language_scope_local"), 
"", 
"25%");
   853         $table_gui->addColumn($this->
lng->txt(
"language_scope_unchanged"), 
"", 
"25%");
   855         $table_gui->setData(
$data);
   857         $this->tpl->setContent($table_gui->getHTML());
   867         $ilCtrl = $DIC->ctrl();
   868         $cmd = $ilCtrl->getCmd();
   871             $this->tabs_gui->setBackTarget(
   872                 $this->
lng->txt(
"back"),
   873                 $this->
ctrl->getLinkTargetByClass(
"ilObjLanguageFolderGUI")
   876             $this->tabs_gui->addTab(
   878                 $this->
lng->txt(
"edit"),
   879                 $this->
ctrl->getLinkTarget($this, 
"view")
   882             $this->tabs_gui->addTab(
   884                 $this->
lng->txt(
'export'),
   885                 $this->
ctrl->getLinkTarget($this, 
"export")
   888             $this->tabs_gui->addTab(
   890                 $this->
lng->txt(
"import"),
   891                 $this->
ctrl->getLinkTarget($this, 
"import")
   894             $this->tabs_gui->addTab(
   896                 $this->
lng->txt(
"language_maintain"),
   897                 $this->
ctrl->getLinkTarget($this, 
"maintain")
   900             $this->tabs_gui->addTab(
   902                 $this->
lng->txt(
"settings"),
   903                 $this->
ctrl->getLinkTarget($this, 
"settings")
   906             $this->tabs_gui->addTab(
   908                 $this->
lng->txt(
"language_statistics"),
   909                 $this->
ctrl->getLinkTarget($this, 
"statistics")
   918                     $this->tabs_gui->activateTab(
"edit");
   921                     $this->tabs_gui->activateTab($cmd);
   933         $ilLocator = $DIC[
"ilLocator"];
   936             parent::addAdminLocatorItems(
true); 
   939                 $this->
lng->txt(
"languages"),
   940                 $this->
ctrl->getLinkTargetByClass(
"ilobjlanguagefoldergui", 
"")
   944                 $this->
lng->txt(
"meta_l_" . $this->object->getTitle()),
   945                 $this->
ctrl->getLinkTarget($this, 
"view")
   957             $this->tpl->setHeaderPageTitle($this->
lng->txt(
"translation"));
   958             $this->tpl->setTitle($this->
lng->txt(
"translation") . 
" " . $this->
lng->txt(
"meta_l_" . $this->
object->key));
   960             $this->tpl->setTitle($this->
lng->txt(
"meta_l_" . $this->object->key));
   962         $this->tpl->setTitleIcon(
ilUtil::getImagePath(
"standard/icon_lngf.svg"), $this->
lng->txt(
"obj_" . $this->object->getType()));
   973         $ilCtrl = $DIC->ctrl();
   975         if (!count($a_missing)) {
   979         $res = array(
"<h3>" . $this->
lng->txt(
"adm_missing_entries") . 
"</h3>", 
"<ul>");
   981         foreach ($a_missing as $entry) {
   982             $ilCtrl->setParameter($this, 
"eid", $entry);
   983             $res[] = 
'<li>' . $entry .
   984                 ' <a href="' . $ilCtrl->getLinkTarget($this, 
"addNewEntry") .
   985                 '">' . $this->
lng->txt(
"adm_missing_entry_add_action") . 
'</a></li>';
   986             $ilCtrl->setParameter($this, 
"eid", 
"");
   991         return implode(
"\n", 
$res);
  1000         if ($this->
http->wrapper()->query()->has(
"eid")) {
  1001             $id = trim($this->
http->wrapper()->query()->retrieve(
"eid", $this->
refinery->kindlyTo()->string()));
  1013         $ilCtrl = $DIC->ctrl();
  1016             $a_id = $this->
http->request()->getParsedBody()[
'id'] ?? 
"";
  1021             $ilCtrl->redirect($this, 
"view");
  1024         include_once 
"Services/Form/classes/class.ilPropertyFormGUI.php";
  1026         $form->setFormAction($ilCtrl->getFormAction($this, 
"saveNewEntry"));
  1027         $form->setTitle($this->
lng->txt(
"adm_missing_entry_add"));
  1030         $options = array_combine($mods, $mods);
  1033         $mod->setOptions(array(
"" => $this->
lng->txt(
"please_select")) + $options);
  1034         $mod->setRequired(
true);
  1035         $form->addItem($mod);
  1038         $id->setValue($a_id);
  1039         $id->setDisabled(
true);
  1040         $form->addItem(
$id);
  1042         foreach ($this->
lng->getInstalledLanguages() as $lang_key) {
  1043             $trans = 
new ilTextInputGUI($this->
lng->txt(
"meta_l_" . $lang_key), 
"trans_" . $lang_key);
  1044             if (in_array($lang_key, array(
"de", 
"en"))) {
  1045                 $trans->setRequired(
true);
  1047             $form->addItem($trans);
  1050         $form->addCommandButton(
"saveNewEntry", $this->
lng->txt(
"save"));
  1051         $form->addCommandButton(
"view", $this->
lng->txt(
"cancel"));
  1059         $ilDB = $DIC->database();
  1060         $ilCtrl = $DIC->ctrl();
  1061         $ilUser = $DIC->user();
  1064         if ($form->checkInput()) {
  1065             $mod = $form->getInput(
"mod");
  1066             $id = $form->getInput(
"id");
  1069             foreach ($this->
lng->getInstalledLanguages() as $lang_key) {
  1070                 $trans = trim($form->getInput(
"trans_" . $lang_key));
  1078                         date(
"Y-m-d H:i:s"),
  1083                     $set = 
$ilDB->query(
"SELECT lang_array FROM lng_modules" .
  1084                         " WHERE lang_key = " . 
$ilDB->quote($lang_key, 
"text") .
  1085                         " AND module = " . 
$ilDB->quote($mod, 
"text"));
  1086                     $row = 
$ilDB->fetchAssoc($set);
  1087                     $entries = unserialize($row[
"lang_array"], [
"allowed_classes" => 
false]);
  1088                     if (is_array($entries)) {
  1089                         $entries[
$id] = $trans;
  1090                         ilObjLanguage::replaceLangModule($lang_key, $mod, $entries);
  1095             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"), 
true);
  1096             $ilCtrl->redirect($this, 
"view");
  1099         $form->setValuesByPost();
  1109         $f = $DIC->ui()->factory();
  1110         $renderer = $DIC->ui()->renderer();
  1112         return $renderer->render(
$f->messageBox()->success($this->
lng->txt(
"language_variables_saved")));
 downloadObject()
Download a language file. 
 
static get(string $a_var)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
executeCommand()
execute command 
 
assignObject()
Assign the extended language object. 
 
getSuccessMessage()
Get success message after variables were saved. 
 
uploadObject()
Process an uploaded language file. 
 
applyFilterObject()
Apply filter. 
 
getUserLanguage()
Return language of user. 
 
static _isPageTranslation()
Check if the current request is a page translation. 
 
static _getSavedModules()
Get the stored modules from the user session. 
 
initAddNewEntryForm(string $a_id=null)
 
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
 
getViewTable()
Get the table to view language entries. 
 
static _lookupId(string $a_key)
Lookup the object ID for a language key. 
 
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory) 
 
cancelObject()
Cancel the current action. 
 
loadLanguageModule(string $a_module)
Load language module. 
 
viewObject()
viewObject container presentation for "administration -> repository, trash, permissions" ...
 
setVariable(string $variable, $value='')
Sets the given variable to the given value. 
 
Class ilObjLanguageExtGUI. 
 
resetFilterObject()
Reset filter. 
 
static deliverData(string $a_data, string $a_filename, string $mime="application/octet-stream")
 
exportObject()
Show the screen to export a language file. 
 
static _checkMaintenance()
Permission check for language maintenance (import/export) 
 
const ILIAS_LANGUAGE_MODULE
 
saveSettingsObject()
Set the language settings. 
 
addAdminLocatorItems(bool $do_not_add_object=false)
Set the locator for admin mode (Overwritten from ilObjectGUI, called by prepareOutput) ...
 
importObject()
Show the screen to import a language file. 
 
static _getValues(string $a_lang_key, array $a_modules=array(), array $a_topics=array(), string $a_pattern='', string $a_state='')
Get the translations of specified topics. 
 
static http()
Fetches the global http state from ILIAS. 
 
ilGlobalTemplateInterface $tpl
 
__construct($a_data, int $a_id=0, bool $a_call_by_reference=false)
Constructor. 
 
setContent(string $a_html)
Sets content for standard template. 
 
Class ilObjectGUI Basic methods of all Output classes. 
 
getAdminTabs()
Get tabs for admin mode (Overwritten from ilObjectGUI, called by prepareOutput) 
 
static _getModules(string $a_lang_key)
Get all modules of a language. 
 
static _deleteValues(string $a_lang_key, array $a_values=array())
Delete a set of translation in the database. 
 
buildMissingEntries(array $a_missing=null)
 
statisticsObject()
Print out statistics about the language. 
 
settingsObject()
View the language settings. 
 
setTitleAndDescription()
Set the Title and the description (Overwritten from ilObjectGUI, called by prepareOutput) ...
 
static _getSavedTopics()
Get the stored topics from the user session. 
 
saveObject()
Save the changed translations. 
 
static replaceLangEntry(string $a_module, string $a_identifier, string $a_lang_key, string $a_value, string $a_local_change=null, string $a_remarks=null)
Replace lang entry. 
 
static ilTempnam(?string $a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory. 
 
static _getRemarks(string $a_lang_key, bool $a_all_changed=false)
Get all remarks of a language. 
 
addNewEntryObject(ilPropertyFormGUI $a_form=null)
 
viewObject(int $changesSuccessBool=0)
Show the edit screen. 
 
maintainObject()
Process the language maintenance. 
 
getId()
get the language object id (needed for filter serialization) Return language object id ...
 
static set(string $a_var, $a_val)
Set a value. 
 
static _saveValues(string $a_lang_key, array $a_values=array(), array $a_remarks=array())
Save a set of translation in the database.