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