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