From 8dd29e227f44e2379a0a72a4f60130b24e54a14b Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Sun, 21 Sep 2008 13:12:41 -0400
Subject: [PATCH] Added a function to merge language files.
---
interface/web/admin/templates/language_complete.htm | 12 ++
interface/web/admin/lib/lang/en_language_complete.lng | 6 +
interface/web/admin/language_complete.php | 146 ++++++++++++++++++++++++
interface/web/admin/form/software_repo.tform.php | 153 +++++++++++++++++++++++++
interface/web/admin/lib/module.conf.php | 4
5 files changed, 321 insertions(+), 0 deletions(-)
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 0000000..cffcd01
--- /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 0000000..4f45724
--- /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 0000000..734e75c
--- /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 a37dd96..5b63155 100644
--- a/interface/web/admin/lib/module.conf.php
+++ b/interface/web/admin/lib/module.conf.php
@@ -136,6 +136,10 @@
'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 0000000..144e9eb
--- /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
--
Gitblit v1.9.1