/** * Show the edit screen */ function viewObject() { global $tpl; // get the view table $table_gui = $this->getViewTable(); // get the remarks in database $comments = $this->object->getAllRemarks(); // set the language to compare with // get the default values if the compare language is the same $compare = $table_gui->getFilterItemByPostVar('compare')->getValue(); if ($compare == $this->object->key) { $compare_object = $this->object->getGlobalLanguageFile(); $compare_content = $compare_object->getAllValues(); $compare_comments = $compare_object->getAllComments(); } // page translation mode: // - the table is filtered by a list of modules and topics if (ilObjLanguageAccess::_isPageTranslation()) { // get the selection of modules and topics from request or session $modules = ilObjLanguageAccess::_getSavedModules(); $topics = ilObjLanguageAccess::_getSavedTopics(); // first call for translation if ($_GET['reset_offset']) { $table_gui->resetOffset(); } if (!isset($compare_content)) { $compare_content = ilObjLanguageExt::_getValues($compare, $modules, $topics); $compare_comments = ilObjLanguageExt::_getRemarks($compare); } $translations = ilObjLanguageExt::_getValues($this->object->key, $modules, $topics); // enable adding new entries $db_found = array(); foreach ($translations as $name => $translation) { $keys = explode($this->lng->separator, $name); $db_found[] = $keys[1]; } $missing_entries = array_diff($topics, $db_found); } else { $filter_mode = $table_gui->getFilterItemByPostVar('mode')->getValue(); $filter_pattern = $table_gui->getFilterItemByPostVar('pattern')->getValue(); $filter_module = $table_gui->getFilterItemByPostVar('module')->getValue(); $filter_module = $filter_module == 'all' ? '' : $filter_module; $filter_modules = $filter_module ? array($filter_module) : array(); if (!isset($compare_content)) { $compare_content = ilObjLanguageExt::_getValues($compare, $filter_modules); $compare_comments = ilObjLanguageExt::_getRemarks($compare); } switch ($filter_mode) { case "changed": $translations = $this->object->getChangedValues($filter_modules, $filter_pattern); break; case "added": //langmode only $translations = $this->object->getAddedValues($filter_modules, $filter_pattern); break; case "unchanged": $translations = $this->object->getUnchangedValues($filter_modules, $filter_pattern); break; case "commented": $translations = $this->object->getCommentedValues($filter_modules, $filter_pattern); break; case "dbremarks": $translations = $this->object->getAllValues($filter_modules, $filter_pattern); $translations = array_intersect_key($translations, $remarks); break; case "equal": $translations = $this->object->getAllValues($filter_modules, $filter_pattern); $translations = array_intersect_assoc($translations, $compare_content); break; case "different": $translations = $this->object->getAllValues($filter_modules, $filter_pattern); $translations = array_diff_assoc($translations, $compare_content); break; case "conflicts": $former_file = $this->object->getCustLangPath() . '/ilias_' . $this->object->key . '.lang'; if (!is_readable($former_file)) { ilUtil::sendFailure(sprintf($this->lng->txt("language_former_file_missing"), $former_file) . '<br />' . $this->lng->txt("language_former_file_description"), false); $translations = array(); break; } $global_file_obj = $this->object->getGlobalLanguageFile(); $former_file_obj = new ilLanguageFile($former_file); $former_file_obj->read(); $global_changes = array_diff_assoc($global_file_obj->getAllValues(), $former_file_obj->getAllValues()); if (!count($global_changes)) { ilUtil::sendInfo(sprintf($this->lng->txt("language_former_file_equal"), $former_file) . '<br />' . $this->lng->txt("language_former_file_description"), false); $translations = array(); break; } $translations = $this->object->getChangedValues($filter_modules, $filter_pattern); $translations = array_intersect_key($translations, $global_changes); break; case "all": default: $translations = $this->object->getAllValues($filter_modules, $filter_pattern); } } // prepare the the data for the table $data = array(); foreach ($translations as $name => $translation) { $keys = explode($this->lng->separator, $name); $row = array(); $row["module"] = $keys[0]; $row["topic"] = $keys[1]; $row["name"] = $name; $row["translation"] = $translation; $row["comment"] = $comments[$name]; $row["default"] = $compare_content[$name]; $row["default_comment"] = $compare_comments[$name]; $data[] = $row; } // render and show the table $table_gui->setData($data); $tpl->setContent($table_gui->getHTML() . $this->buildMissingEntries($missing_entries)); }
/** * Import a language file into the ilias database * * @param string handling of existing values * ('keepall','keepnew','replace','delete') */ public function importLanguageFile($a_file, $a_mode_existing = 'keepnew') { global $ilDB, $ilErr; // read the new language file require_once "./Services/Language/classes/class.ilLanguageFile.php"; $import_file_obj = new ilLanguageFile($a_file); if (!$import_file_obj->read()) { $ilErr->raiseError($import_file_obj->getErrorMessage(), $ilErr->MESSAGE); } switch ($a_mode_existing) { // keep all existing entries case 'keepall': $to_keep = $this->getAllValues(); break; // keep existing online changes // keep existing online changes case 'keepnew': $to_keep = $this->getChangedValues(); break; // replace all existing definitions // replace all existing definitions case 'replace': $to_keep = array(); break; // delete all existing entries // delete all existing entries case 'delete': ilObjLanguage::_deleteLangData($this->key, false); $ilDB->manipulate("DELETE FROM lng_modules WHERE lang_key = " . $ilDB->quote($this->key, "text")); $to_keep = array(); break; default: return; } // process the values of the import file $to_save = array(); foreach ($import_file_obj->getAllValues() as $key => $value) { if (!isset($to_keep[$key])) { $to_save[$key] = $value; } } self::_saveValues($this->key, $to_save, $import_file_obj->getAllComments()); }
/** * Show the edit screen */ function viewObject() { global $ilUser; $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.lang_edit_items.html", "Services/Language"); // set the language to compare with $compare = $this->getPar('compare', $this->lng->getDefaultLanguage()); // get the default values if the compare language is the same if ($compare == $this->object->key) { $compare_object = $this->object->getGlobalLanguageFile(); $compare_content = $compare_object->getAllValues(); $compare_comments = $compare_object->getAllComments(); $compare_note = " " . $this->lng->txt("language_default_entries"); } // get the remarks in database $remarks = $this->object->getAllRemarks(); // page translation mode: // - the table is filtered by a list of modules and topics // - all found entries are shown on the same page if ($this->_isPageTranslation()) { $offset = 0; $limit = 0; $modules = $this->getPar("page_modules", array()); $topics = $this->getPar("page_topics", array()); if (!isset($compare_content)) { $compare_content = ilObjLanguageExt::_getValues($compare, $modules, $topics); $compare_comments = ilObjLanguageExt::_getRemarks($compare); } $translations = ilObjLanguageExt::_getValues($this->object->key, $modules, $topics); } else { $offset = $this->getPar('offset', '0'); $limit = $ilUser->getPref("hits_per_page"); $filter_mode = $this->getPar('filter_mode', 'all'); $filter_pattern = $this->getPar('filter_pattern', ''); $filter_module = $this->getPar('filter_module', 'administration'); $filter_modules = $filter_module ? array($filter_module) : array(); if (!isset($compare_content)) { $compare_content = ilObjLanguageExt::_getValues($compare, $filter_modules); $compare_comments = ilObjLanguageExt::_getRemarks($compare); } switch ($filter_mode) { case "changed": $translations = $this->object->getChangedValues($filter_modules, $filter_pattern); break; case "added": //langmode only $translations = $this->object->getAddedValues($filter_modules, $filter_pattern); break; case "unchanged": $translations = $this->object->getUnchangedValues($filter_modules, $filter_pattern); break; case "commented": $translations = $this->object->getCommentedValues($filter_modules, $filter_pattern); break; case "dbremarks": $translations = $this->object->getAllValues($filter_modules, $filter_pattern); $translations = array_intersect_key($translations, $remarks); break; case "equal": $translations = $this->object->getAllValues($filter_modules, $filter_pattern); $translations = array_intersect_assoc($translations, $compare_content); break; case "different": $translations = $this->object->getAllValues($filter_modules, $filter_pattern); $translations = array_diff_assoc($translations, $compare_content); break; case "conflicts": $former_file = $this->object->getCustLangPath() . '/ilias_' . $this->object->key . '.lang'; if (!is_readable($former_file)) { ilUtil::sendFailure(sprintf($this->lng->txt("language_former_file_missing"), $former_file) . '<br />' . $this->lng->txt("language_former_file_description"), false); $translations = array(); break; } $global_file_obj = $this->object->getGlobalLanguageFile(); $former_file_obj = new ilLanguageFile($former_file); $former_file_obj->read(); $global_changes = array_diff_assoc($global_file_obj->getAllValues(), $former_file_obj->getAllValues()); if (!count($global_changes)) { ilUtil::sendInfo(sprintf($this->lng->txt("language_former_file_equal"), $former_file) . '<br />' . $this->lng->txt("language_former_file_description"), false); $translations = array(); break; } $translations = $this->object->getChangedValues($filter_modules, $filter_pattern); $translations = array_intersect_key($translations, $global_changes); break; case "all": default: $translations = $this->object->getAllValues($filter_modules, $filter_pattern); } // show the filter section $this->tpl->setCurrentBlock("filter"); // filter by language module $options = array(); $options[""] = $this->lng->txt("language_all_modules"); $modules = ilObjLanguageExt::_getModules($this->object->key); foreach ($modules as $mod) { $options[$mod] = $mod; } $this->tpl->setVariable("SELECT_MODULE", ilUtil::formSelect($filter_module, "filter_module", $options, false, true)); // filter by mode $options = array(); $options["all"] = $this->lng->txt("language_scope_global"); $options["changed"] = $this->lng->txt("language_scope_local"); if ($this->langmode) { $options["added"] = $this->lng->txt("language_scope_added"); } $options["unchanged"] = $this->lng->txt("language_scope_unchanged"); $options["equal"] = $this->lng->txt("language_scope_equal"); $options["different"] = $this->lng->txt("language_scope_different"); $options["commented"] = $this->lng->txt("language_scope_commented"); if ($this->langmode) { $options["dbremarks"] = $this->lng->txt("language_scope_dbremarks"); } $options["conflicts"] = $this->lng->txt("language_scope_conflicts"); $this->tpl->setVariable("SELECT_MODE", ilUtil::formSelect($filter_mode, "filter_mode", $options, false, true)); // filter by pattern $this->tpl->setVariable("PATTERN_NAME", "filter_pattern"); $this->tpl->setVariable("PATTERN_VALUE", ilUtil::prepareFormOutput($filter_pattern)); // and general filter variables $this->tpl->setVariable("FILTER_ACTION", $this->ctrl->getFormAction($this)); $this->tpl->setVariable("TXT_FILTER", $this->lng->txt("filter")); $this->tpl->setVariable("OFFSET_NAME", "offset"); $this->tpl->setVariable("OFFSET_VALUE", "0"); $this->tpl->setVariable("TXT_APPLY_FILTER", $this->lng->txt("apply_filter")); $this->tpl->setVariable("CMD_FILTER", "view"); $this->tpl->parseCurrentBlock(); } // show the compare section $this->tpl->setCurrentBlock("compare"); $this->tpl->setVariable("COMPARE_ACTION", $this->ctrl->getFormAction($this)); $this->tpl->setVariable("TXT_COMPARE", $this->lng->txt("language_compare")); $this->tpl->setVariable("TXT_CHANGE", $this->lng->txt("change")); $options = array(); $langlist = $this->lng->getInstalledLanguages(); foreach ($langlist as $lang_key) { $options[$lang_key] = $this->lng->txt("meta_l_" . $lang_key); } $this->tpl->setVariable("SELECT_COMPARE", ilUtil::formSelect($compare, "compare", $options, false, true, 1)); $this->tpl->setVariable("CMD_COMPARE", "view"); $this->tpl->parseCurrentBlock(); // prepare the dataset for the output table $sort_by = $this->getPar('sort_by', 'translation'); $sort_order = $this->getPar('sort_order', 'asc'); $list = array(); foreach ($translations as $name => $translation) { $keys = explode($this->lng->separator, $name); $data = array(); $data["module"] = $keys[0]; $data["topic"] = $keys[1]; $data["name"] = $name; $data["translation"] = $translation; $data["default"] = $compare_content[$name]; $data["default_comment"] = $compare_comments[$name]; $list[] = $data; } $list = ilUtil::sortArray($list, $sort_by, $sort_order); if ($limit > 0) { $list = array_slice($list, $offset, $limit); } // create and configure the table object include_once 'Services/Table/classes/class.ilTableGUI.php'; $tbl = new ilTableGUI(); $tbl->disable('title'); $tbl->setHeaderNames(array($this->lng->txt("module"), $this->lng->txt("identifier"), $this->lng->txt("meta_l_" . $this->object->key), $this->lng->txt("meta_l_" . $compare) . $compare_note)); $tbl->setHeaderVars(array("module", "topic", "translation", "default"), $this->ctrl->getParameterArray($this)); $tbl->setColumnWidth(array("10%", "20%", "40%", "30%")); $tbl->setOrderColumn($sort_by); $tbl->setOrderDirection($sort_order); $tbl->setLimit($limit); $tbl->setOffset($offset); $tbl->setMaxCount(count($translations)); // prepare the table template $tpl =& new ilTemplate("tpl.table.html", true, true); $tpl->setCurrentBlock("tbl_form_header"); $tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this)); $tpl->parseCurrentBlock(); $tpl->setCurrentBlock("tbl_action_btn"); $tpl->setVariable("BTN_NAME", 'save'); $tpl->setVariable("BTN_VALUE", $this->lng->txt('save')); $tpl->parseCurrentBlock(); $tpl->setCurrentBlock("tbl_action_row"); $tpl->setVariable("COLUMN_COUNTS", "4"); $tpl->parseCurrentBlock(); // render the table rows $tpl->addBlockfile("TBL_CONTENT", "tbl_content", "tpl.lang_items_row.html", "Services/Language"); foreach ($list as $data) { if ($this->langmode) { $tpl->setCurrentBlock('comment'); $tpl->setVariable("COM_ID", ilUtil::prepareFormOutput($data["name"] . $this->lng->separator . "comment")); $tpl->setVariable("COM_NAME", ilUtil::prepareFormOutput($data["name"] . $this->lng->separator . "comment")); $tpl->setVariable("COM_VALUE", ilUtil::prepareFormOutput($remarks[$data["name"]])); $tpl->setVariable("COM_SIZE", $this->commentsize); $tpl->setVariable("COM_MAX", 250); $tpl->setVariable("TXT_COMMENT", $this->lng->txt('comment')); $tpl->parseCurrentBlock(); } else { $tpl->setCurrentBlock('hidden_comment'); $tpl->setVariable("COM_NAME", ilUtil::prepareFormOutput($data["name"] . $this->lng->separator . "comment")); $tpl->setVariable("COM_VALUE", ilUtil::prepareFormOutput($remarks[$data["name"]])); $tpl->parseCurrentBlock(); } $tpl->setCurrentBlock("row"); $tpl->setVariable("T_ROWS", ceil(strlen($data["translation"]) / $this->inputsize)); $tpl->setVariable("T_SIZE", $this->inputsize); $tpl->setVariable("T_NAME", ilUtil::prepareFormOutput($data["name"])); $tpl->setVariable("T_USER_VALUE", ilUtil::prepareFormOutput($data["translation"])); $tpl->setVariable("MODULE", ilUtil::prepareFormOutput($data["module"])); $tpl->setVariable("TOPIC", ilUtil::prepareFormOutput($data["topic"])); $tpl->setVariable("DEFAULT_VALUE", ilUtil::prepareFormOutput($data["default"])); $tpl->setVariable("COMMENT", ilUtil::prepareFormOutput($data["default_comment"])); $tpl->parseCurrentBlock(); } // render and show the table $tbl->setTemplate($tpl); $tbl->render(); $this->tpl->setVariable("TRANSLATION_TABLE", $tpl->get()); // $this->tpl->show(); }
/** * Read and get a global language file as a singleton object * @param string language key * @return object language file object (with contents) */ public static function _getGlobalLanguageFile($a_lang_key) { global $lng; if (!isset(self::$global_file_objects[$a_lang_key])) { $file_object = new ilLanguageFile($lng->lang_path . "/ilias_" . $a_lang_key . ".lang", $a_lang_key, 'global'); $file_object->read(); self::$global_file_objects[$a_lang_key] = $file_object; } return self::$global_file_objects[$a_lang_key]; }