From a172b75377ed05e669b20785b26aa4251e9887d5 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 14 Apr 2008 10:49:05 -0400
Subject: [PATCH] Finished language editor.
---
interface/web/admin/language_export.php | 123 ++++++++++++++++++++
interface/web/admin/lib/lang/en_language_export.lng | 6 +
interface/web/admin/templates/language_export.htm | 12 ++
install/tpl/config.inc.php.master | 4
interface/lib/config.inc.php | 2
interface/web/admin/lib/lang/en_language_import.lng | 7 +
interface/web/admin/templates/language_import.htm | 13 ++
interface/lib/lang/de.lng | 2
interface/web/admin/language_import.php | 108 ++++++++++++++++++
interface/web/js/scrigo.js | 40 ++++++
10 files changed, 313 insertions(+), 4 deletions(-)
diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master
index 33469bd..2350f41 100644
--- a/install/tpl/config.inc.php.master
+++ b/install/tpl/config.inc.php.master
@@ -1,6 +1,6 @@
<?php
/*
-Copyright (c) 2007, Till Brehm, Falko Timme, projektfarm Gmbh
+Copyright (c) 2008, Till Brehm, Falko Timme, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -55,7 +55,7 @@
define('ISPC_WEB_PATH', ISPC_ROOT_PATH.'/web');
define('ISPC_THEMES_PATH', ISPC_ROOT_PATH.'/web/themes');
-define('ISPC_TEMP_PATH', ISPC_ROOT_PATH.'/temp');
+define('ISPC_WEB_TEMP_PATH', ISPC_WEB_PATH.'/temp'); // Path for downloads, accessible via browser
define('ISPC_CACHE_PATH', ISPC_ROOT_PATH.'/cache');
//** Interface settings
diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php
index 9ed79df..0d54ddd 100644
--- a/interface/lib/config.inc.php
+++ b/interface/lib/config.inc.php
@@ -48,7 +48,7 @@
define('ISPC_WEB_PATH', ISPC_ROOT_PATH.'/web');
define('ISPC_THEMES_PATH', ISPC_ROOT_PATH.'/web/themes');
-define('ISPC_TEMP_PATH', ISPC_ROOT_PATH.'/temp');
+define('ISPC_WEB_TEMP_PATH', ISPC_WEB_PATH.'/temp'); // Path for downloads, accessible via browser
define('ISPC_CACHE_PATH', ISPC_ROOT_PATH.'/cache');
define('ISPC_INTERFACE_MODULES_ENABLED', 'mail,sites,dns');
diff --git a/interface/lib/lang/de.lng b/interface/lib/lang/de.lng
index b4aba43..d07898a 100644
--- a/interface/lib/lang/de.lng
+++ b/interface/lib/lang/de.lng
@@ -1,6 +1,6 @@
<?php
$wb['301'] = 'Modul für User nicht erlaubt.';
-$wb['302'] = 'Modul ung�ltig.';
+$wb['302'] = 'Modul ungültig.';
$wb['303'] = ' ';
$wb['304'] = ' Dieses Formular dient zum Anlegen eines englischsprachigen Eintrags zus�tzlich zu Ihrem deutschen Eintrag. Bitte vervollst�ndigen Sie die Daten, soweit erforderlich, in Englisch - die Inhalte aus den Drop-Down-Men�s werden automatisch �bersetzt:';
$wb['1001'] = 'Der Benutzername und das Passwort d�rfen nicht leer sein!';
diff --git a/interface/web/admin/language_export.php b/interface/web/admin/language_export.php
new file mode 100644
index 0000000..c2c6343
--- /dev/null
+++ b/interface/web/admin/language_export.php
@@ -0,0 +1,123 @@
+<?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');
+
+// Checking permissions for the module
+if(!stristr($_SESSION['s']['user']['modules'],'admin')) {
+ header('Location: ../index.php');
+ exit;
+}
+
+//* 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_export.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 !='') {
+ $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 == '') {
+ //$lng_select = $_POST['lng_select'];
+ //if(!preg_match("/^[a-z]{2}$/i", $lng_select)) die('unallowed characters in language name.');
+
+ // This variable contains the content of the language files
+ $content = '';
+ $content .= "---|ISPConfig Language File|".$conf["app_version"]."|".$selected_language."\n";
+
+ //* get the global language file
+ $content .= "--|global|".$selected_language."|".$selected_language.".lng\n";
+ $content .= file_get_contents(ISPC_LIB_PATH."/lang/".$selected_language.".lng")."\n";
+
+ //* Get the global file of the module
+ //$content .= "---|$module|$selected_language|\n";
+ //copy(ISPC_WEB_PATH."/$module/lib/lang/$selected_language.lng",ISPC_WEB_PATH."/$module/lib/lang/$lng_new.lng");
+ $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) == $selected_language) {
+ $content .= "--|".$file."|".$selected_language."|".$lang_file."\n";
+ $content .= file_get_contents(ISPC_WEB_PATH.'/'.$file.'/lib/lang/'.$lang_file)."\n";
+ $msg .= 'Exported language file '.$lang_file.'<br />';
+ }
+ }
+ }
+ }
+ }
+
+ $content .= '---|EOF';
+
+ // Write the language file
+ file_put_contents(ISPC_WEB_TEMP_PATH.'/'.$selected_language.'.lng', $content);
+
+ $msg = "Exported language file to: <a href='temp/$selected_language.lng' target='_blank'>/temp/".$selected_language.'.lng</a>';
+
+ //$msg = nl2br($content);
+}
+
+$app->tpl->setVar('msg',$msg);
+
+//* load language file
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_language_export.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/language_import.php b/interface/web/admin/language_import.php
new file mode 100644
index 0000000..130fbc1
--- /dev/null
+++ b/interface/web/admin/language_import.php
@@ -0,0 +1,108 @@
+<?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');
+
+// Checking permissions for the module
+if(!stristr($_SESSION['s']['user']['modules'],'admin')) {
+ header('Location: ../index.php');
+ exit;
+}
+
+//* 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_import.htm');
+$msg = '';
+$error = '';
+
+// Export the language file
+if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'])) {
+ $lines = file($_FILES['file']['tmp_name']);
+ // initial check
+ $parts = explode('|',$lines[0]);
+ if($parts[0] == '---' && $parts[1] == 'ISPConfig Language File') {
+ if($parts[2] != $conf["app_version"]) {
+ $error .= 'Application version does not match. Appversion: '.$conf["app_version"].' Lanfile version: '.$parts[2];
+ } else {
+ unset($lines[0]);
+
+ $buffer = '';
+ $langfile_path = '';
+ // all other lines
+ foreach($lines as $line) {
+ $parts = explode('|',$line);
+ if(is_array($parts) && count($parts) > 0 && $parts[0] == '--') {
+ // Write language file, if its not the first file
+ if($buffer != '' && $langfile_path != '') {
+ if(@$_REQUEST['overwrite'] != 1 && @is_file($langfile_path)) {
+ $error .= "File exists, not written: $langfile_path<br />";
+ } else {
+ $msg .= "File written: $langfile_path<br />";
+ // file_put_contents($langfile_path,$buffer);
+ }
+ }
+ // empty buffer and set variables
+ $buffer = '';
+ $module_name = $parts[1];
+ $selected_language = $parts[2];
+ $file_name = $parts[3];
+ if(!preg_match("/^[a-z]{2}$/i", $selected_language)) die('unallowed characters in selected language name.');
+ if(!preg_match("/^[a-z_]+$/i", $module_name)) die('unallowed characters in module name.');
+ if(!preg_match("/^[a-z\._]+$/i", $file_name) || stristr($file_name,'..')) die('unallowed characters in language file name.');
+ if($module_name == 'global') {
+ $langfile_path = trim(ISPC_LIB_PATH."/lang/".$selected_language.".lng");
+ } else {
+ $langfile_path = trim(ISPC_WEB_PATH.'/'.$module_name.'/lib/lang/'.$file_name);
+ }
+ } else {
+ $buffer .= $line;
+ }
+ }
+ }
+ }
+}
+
+$app->tpl->setVar('msg',$msg);
+$app->tpl->setVar('error',$error);
+
+//* load language file
+$lng_file = 'lib/lang/'.$_SESSION['s']['language'].'_language_import.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_export.lng b/interface/web/admin/lib/lang/en_language_export.lng
new file mode 100644
index 0000000..791fc89
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_language_export.lng
@@ -0,0 +1,6 @@
+<?php
+$wb["list_head_txt"] = 'Export language files';
+$wb["language_select_txt"] = 'Select language';
+$wb['btn_save_txt'] = 'Export the selected language file set';
+$wb['btn_cancel_txt'] = 'Back';
+?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_language_import.lng b/interface/web/admin/lib/lang/en_language_import.lng
new file mode 100644
index 0000000..7e51388
--- /dev/null
+++ b/interface/web/admin/lib/lang/en_language_import.lng
@@ -0,0 +1,7 @@
+<?php
+$wb["list_head_txt"] = 'Import language file';
+$wb["language_import_txt"] = 'Select language file';
+$wb['btn_save_txt'] = 'Import the selected language file';
+$wb["language_overwrite_txt"] = 'Overwrite file, if exists.';
+$wb['btn_cancel_txt'] = 'Back';
+?>
\ No newline at end of file
diff --git a/interface/web/admin/templates/language_export.htm b/interface/web/admin/templates/language_export.htm
new file mode 100644
index 0000000..732e9e4
--- /dev/null
+++ b/interface/web/admin/templates/language_export.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_export.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
diff --git a/interface/web/admin/templates/language_import.htm b/interface/web/admin/templates/language_import.htm
new file mode 100644
index 0000000..7dbce70
--- /dev/null
+++ b/interface/web/admin/templates/language_import.htm
@@ -0,0 +1,13 @@
+<div class="frmTextHead"><tmpl_var name="list_head_txt"></div><br />
+<p class="frmText11">
+ <tmpl_var name="language_import_txt">: <input type="file" name="file" id="file" /><br />
+ <tmpl_var name="language_overwrite_txt"> <input type="checkbox" name="overwrite" value="1" id="overwrite" />
+</p>
+<input name="btn_save" type="button" class="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitUploadForm('pageForm','admin/language_import.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>
+<tmpl_if name="error">
+ <p class="error" ><tmpl_var name="error"></p>
+</tmpl_if>
+<tmpl_if name="msg">
+ <p class="msg" ><tmpl_var name="msg"></p>
+</tmpl_if>
\ No newline at end of file
diff --git a/interface/web/js/scrigo.js b/interface/web/js/scrigo.js
index 703c626..f3ba6dc 100644
--- a/interface/web/js/scrigo.js
+++ b/interface/web/js/scrigo.js
@@ -107,6 +107,46 @@
*/
}
+function submitUploadForm(formname,target) {
+
+ var submitFormCallback = {
+ success: function(o) {
+ if(o.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+ var parts = o.responseText.split(':');
+ //alert(parts[1]);
+ loadContent(parts[1]);
+ //redirect = parts[1];
+ //window.setTimeout('loadContent(redirect)', 1000);
+ } else {
+ document.getElementById('pageContent').innerHTML = o.responseText;
+ }
+ },
+ upload: function(o) {
+ if(o.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+ var parts = o.responseText.split(':');
+ //alert(parts[1]);
+ loadContent(parts[1]);
+ //redirect = parts[1];
+ //window.setTimeout('loadContent(redirect)', 1000);
+ } else {
+ document.getElementById('pageContent').innerHTML = o.responseText;
+ }
+ },
+ failure: function(o) {
+ alert('Ajax Request was not successful. 1');
+ }
+ }
+
+ YAHOO.util.Connect.setForm(formname,true);
+ var submitFormObj = YAHOO.util.Connect.asyncRequest('POST', target, submitFormCallback);
+ /*
+ if(redirect != '') {
+ loadContent(redirect);
+ redirect = '';
+ }
+ */
+}
+
function loadContent(pagename) {
var pageContentCallback2 = {
success: function(o) {
--
Gitblit v1.9.1