From 8dd29e227f44e2379a0a72a4f60130b24e54a14b Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Sun, 21 Sep 2008 17:12:41 +0000 Subject: [PATCH] Added a function to merge language files. --- .../web/admin/form/software_repo.tform.php | 153 ++++++++++++++++++ interface/web/admin/language_complete.php | 146 +++++++++++++++++ .../admin/lib/lang/en_language_complete.lng | 6 + interface/web/admin/lib/module.conf.php | 4 + .../web/admin/templates/language_complete.htm | 12 ++ 5 files changed, 321 insertions(+) create mode 100644 interface/web/admin/form/software_repo.tform.php create mode 100644 interface/web/admin/language_complete.php create mode 100644 interface/web/admin/lib/lang/en_language_complete.lng create mode 100644 interface/web/admin/templates/language_complete.htm diff --git a/interface/web/admin/form/software_repo.tform.php b/interface/web/admin/form/software_repo.tform.php new file mode 100644 index 0000000000..cffcd0137a --- /dev/null +++ b/interface/web/admin/form/software_repo.tform.php @@ -0,0 +1,153 @@ +<?php + +/* +Copyright (c) 2008, Till Brehm, projektfarm Gmbh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + Form Definition + + Tabellendefinition + + Datentypen: + - INTEGER (Wandelt Ausdrücke in Int um) + - DOUBLE + - CURRENCY (Formatiert Zahlen nach Währungsnotation) + - VARCHAR (kein weiterer Format Check) + - TEXT (kein weiterer Format Check) + - DATE (Datumsformat, Timestamp Umwandlung) + + Formtype: + - TEXT (normales Textfeld) + - TEXTAREA (normales Textfeld) + - PASSWORD (Feldinhalt wird nicht angezeigt) + - SELECT (Gibt Werte als option Feld aus) + - RADIO + - CHECKBOX + - FILE + + VALUE: + - Wert oder Array + + Hinweis: + Das ID-Feld ist nicht bei den Table Values einzufügen. + + +*/ + +$form["title"] = "Software Repository"; +$form["description"] = "Software Repositoy which may contain addons or updates"; +$form["name"] = "software_repo"; +$form["action"] = "software_repo_edit.php"; +$form["db_table"] = "software_repo"; +$form["db_table_idx"] = "software_repo_id"; +$form["db_history"] = "no"; +$form["tab_default"] = "software_repo"; +$form["list_default"] = "software_repo_list.php"; +$form["auth"] = 'yes'; + +$form["auth_preset"]["userid"] = 0; // 0 = id of the user, > 0 id must match with id of current user +$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user +$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete +$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete + +$form["tabs"]['software_repo'] = array ( + 'title' => "Repository", + 'width' => 80, + 'template' => "templates/software_repo_edit.htm", + 'fields' => array ( + ################################## + # Beginn Datenbankfelder + ################################## + 'repo_name' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'repo_name_empty'), + 1 => array ( 'type' => 'UNIQUE', + 'errmsg'=> 'repo_name_unique'), + ), + 'default' => '', + 'value' => '', + 'separator' => '', + 'width' => '40', + 'maxlength' => '40', + 'rows' => '', + 'cols' => '' + ), + 'repo_url' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'validators' => array ( 0 => array ( 'type' => 'NOTEMPTY', + 'errmsg'=> 'repo_name_empty'), + 1 => array ( 'type' => 'UNIQUE', + 'errmsg'=> 'repo_name_unique'), + ), + 'default' => '', + 'value' => '', + 'separator' => '', + 'width' => '40', + 'maxlength' => '40', + 'rows' => '', + 'cols' => '' + ), + 'repo_username' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'value' => '', + 'separator' => '', + 'width' => '30', + 'maxlength' => '30', + 'rows' => '', + 'cols' => '' + ), + 'repo_password' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'PASSWORD', + 'encryption' => 'CLEARTEXT', + 'default' => '', + 'value' => '', + 'separator' => '', + 'width' => '30', + 'maxlength' => '30', + 'rows' => '', + 'cols' => '' + ), + 'active' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'y', + 'value' => array(0 => 'n',1 => 'y') + ), + ################################## + # ENDE Datenbankfelder + ################################## + ) +); +?> \ No newline at end of file diff --git a/interface/web/admin/language_complete.php b/interface/web/admin/language_complete.php new file mode 100644 index 0000000000..4f45724cc2 --- /dev/null +++ b/interface/web/admin/language_complete.php @@ -0,0 +1,146 @@ +<?php +/* +Copyright (c) 2008, Till Brehm, projektfarm Gmbh +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of ISPConfig nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +require_once('../../lib/config.inc.php'); +require_once('../../lib/app.inc.php'); + +//* Check permissions for module +$app->auth->check_module_permissions('admin'); + +//* This is only allowed for administrators +if(!$app->auth->is_admin()) die('only allowed for administrators.'); + +$app->uses('tpl'); + +$app->tpl->newTemplate('form.tpl.htm'); +$app->tpl->setInclude('content_tpl', 'templates/language_complete.htm'); + +//* reading languages +$language_option = ''; +$error = ''; +$msg = ''; +$selected_language = (isset($_REQUEST['lng_select']))?substr($_REQUEST['lng_select'],0,2):'en'; +if(!preg_match("/^[a-z]{2}$/i", $selected_language)) die('unallowed characters in selected language name.'); + +$handle = opendir(ISPC_ROOT_PATH.'/lib/lang/'); +while ($file = readdir ($handle)) { + if ($file != '.' && $file != '..') { + $tmp_lng = substr($file,0,-4); + if($tmp_lng !='' && $tmp_lng != 'en') { + $selected = ($tmp_lng == $selected_language)?'SELECTED':''; + $language_option .= "<option value='$tmp_lng' $selected>$tmp_lng</option>"; + //if(isset($_POST['lng_new']) && $_POST['lng_new'] == $tmp_lng) $error = 'Language exists already.'; + } + } +} +$app->tpl->setVar('language_option',$language_option); +$app->tpl->setVar('error',$error); + +// Export the language file +if(isset($_POST['lng_select']) && $error == '') { + + // complete the global langauge file + merge_langfile(ISPC_LIB_PATH."/lang/".$selected_language.".lng",ISPC_LIB_PATH."/lang/en.lng"); + + // Go trough all language files + $bgcolor = '#FFFFFF'; + $language_files_list = array(); + $handle = @opendir(ISPC_WEB_PATH); + while ($file = @readdir ($handle)) { + if ($file != '.' && $file != '..') { + if(@is_dir(ISPC_WEB_PATH.'/'.$file.'/lib/lang')) { + $handle2 = opendir(ISPC_WEB_PATH.'/'.$file.'/lib/lang'); + while ($lang_file = @readdir ($handle2)) { + if ($lang_file != '.' && $lang_file != '..' && substr($lang_file,0,2) == 'en') { + $target_lang_file = $selected_language.substr($lang_file,2); + merge_langfile(ISPC_WEB_PATH.'/'.$file.'/lib/lang/'.$target_lang_file,ISPC_WEB_PATH.'/'.$file.'/lib/lang/'.$lang_file); + } + } + } + } + } +} + +function merge_langfile($langfile,$masterfile) { + global $msg; + + if(is_file($langfile)) { + + // Load the english language file + include($masterfile); + if(isset($wb) && is_array($wb)) { + $wb_master = $wb; + unset($wb); + } else { + $wb_master = array(); + } + + // Load the incomplete language file + $wb = array(); + include($langfile); + + $n = 0; + foreach($wb_master as $key => $val) { + if(!isset($wb[$key])) { + $wb[$key] = $val; + $n++; + } + } + + $file_content = "<?php\n"; + foreach($wb as $key => $val) { + $val = str_replace("'",'',$val); + $val = str_replace('"','',$val); + $file_content .= '$wb['."'$key'".'] = '."'$val';\n"; + } + $file_content .= "?>\n"; + + $msg .= "Added $n lines to the file $langfile<br />"; + file_put_contents($langfile ,$file_content); + } else { + $msg .= "File does not exist yet. Copied file $masterfile to $langfile<br />"; + copy($masterfile,$langfile); + } +} + + + + +$app->tpl->setVar('msg',$msg); + +//* load language file +$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_language_complete.lng'; +include($lng_file); +$app->tpl->setVar($wb); + +$app->tpl_defaults(); +$app->tpl->pparse(); + + +?> \ No newline at end of file diff --git a/interface/web/admin/lib/lang/en_language_complete.lng b/interface/web/admin/lib/lang/en_language_complete.lng new file mode 100644 index 0000000000..734e75c5fa --- /dev/null +++ b/interface/web/admin/lib/lang/en_language_complete.lng @@ -0,0 +1,6 @@ +<?php +$wb["list_head_txt"] = 'Merge the selected language file with the english master language file. <br />This adds missing strings from the english master language files to the selected language.'; +$wb["language_select_txt"] = 'Select language'; +$wb['btn_save_txt'] = 'Merge files now'; +$wb['btn_cancel_txt'] = 'Back'; +?> \ No newline at end of file diff --git a/interface/web/admin/lib/module.conf.php b/interface/web/admin/lib/module.conf.php index a37dd96969..5b631553f2 100644 --- a/interface/web/admin/lib/module.conf.php +++ b/interface/web/admin/lib/module.conf.php @@ -136,6 +136,10 @@ $items[] = array( 'title' => 'New Language', 'target' => 'content', 'link' => 'admin/language_add.php'); +$items[] = array( 'title' => 'Merge', + 'target' => 'content', + 'link' => 'admin/language_complete.php'); + $items[] = array( 'title' => 'Export', 'target' => 'content', 'link' => 'admin/language_export.php'); diff --git a/interface/web/admin/templates/language_complete.htm b/interface/web/admin/templates/language_complete.htm new file mode 100644 index 0000000000..144e9ebcc1 --- /dev/null +++ b/interface/web/admin/templates/language_complete.htm @@ -0,0 +1,12 @@ +<div class="frmTextHead"><tmpl_var name="list_head_txt"></div><br /> +<p class="frmText11"> + <tmpl_var name="language_select_txt">: <select name="lng_select">{tmpl_var name='language_option'}</select> +</p> +<tmpl_if name="msg"> + <p class="msg" ><tmpl_var name="msg"></p> +</tmpl_if> +<tmpl_if name="error"> + <p class="error" ><tmpl_var name="error"></p> +</tmpl_if> +<input name="btn_save" type="button" class="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_complete.php');"><div class="buttonEnding"></div> + <input name="btn_cancel" type="button" class="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><div class="buttonEnding"></div> \ No newline at end of file -- GitLab