Panel/ControlPanel/lang/lang-check2.php

263 lines
6.4 KiB
PHP
Executable file

<?php
/*
*
* OGP - Open Game Panel
* Copyright (C) 2008 - 2018 The OGP Development Team
*
* http://www.opengamepanel.org/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
error_reporting(E_ERROR);
chdir("..");
require_once("includes/helpers.php");
require_once("includes/config.inc.php");
require_once("includes/lang.php");
require_once("includes/functions.php");
function curPageURL() {
$pageURL = ( isset($_SERVER['HTTPS']) and get_true_boolean($_SERVER['HTTPS']) ) ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80")
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
else
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
return $pageURL;
}
if(isset($_GET['file']))
{
$file = urldecode($_GET['file']);
include($file);
$constants = get_defined_constants(true);
echo base64_encode(serialize($constants['user']));
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>OGP Lang Check</title>
<style type='text/css'>
.missing_lang {
float: left;
width: 100%;
}
.extra_lang {
float: left;
margin-left: 2em;
}
div h4 {
padding: 0;
margin: 0;
}
.clear {
clear: both;
}
.file_vars {
padding: 0;
margin: 0;
}
.file_var h3 {
margin: 0;
padding: 0;
}
.lang {
border: 1px dashed black;
margin: 1em;
padding: 1em;
}
.success {
color: green;
}
.failure {
color: red;
}
textarea {
width: 80%;
}
</style>
</head>
<body>
<h1>Open Game Panel - Language check</h1>
<p>This page can be used to check what variables there are missing or there is extra compared to the
default language (English).</p>
<?php
$db = createDatabaseConnection($db_type, $db_host, $db_user, $db_pass, $db_name, $table_prefix);
$error_text = "";
if (get_db_error_text($db,$error_text))
{
print_failure($error_text);
return;
}
chdir("lang");
$COMPARISON_LANG = "English";
$global_comparison_lang_files = array();
$gclf_tmp = glob($COMPARISON_LANG."/*.php");
// Remove the directory from filename.
foreach ( $gclf_tmp as $tmp )
{
$array_tmp = explode("/",$tmp);
array_push($global_comparison_lang_files,$array_tmp[1]);
}
$gclf_tmp = glob($COMPARISON_LANG."/modules/*.php");
foreach ( $gclf_tmp as $tmp )
{
$array_tmp = explode("/",$tmp);
array_push($global_comparison_lang_files,"modules/".$array_tmp[2]);
}
$locale_files = makefilelist("./", ".|..|.svn", true, "folders");
echo "<ul id='lang_list'>";
foreach ($locale_files as $lang_name)
{
echo "<li><a href='#$lang_name'>$lang_name</a></li>\n";
}
echo "</ul>";
startSession();
if ( isset($_SESSION['users_login']) )
{
$userInfo = $db->getUser($_SESSION['users_login']);
if( $db->isAdmin($_SESSION['user_id']) AND isset($_SESSION['users_passwd']) AND !empty($_SESSION['users_passwd']) AND $_SESSION['users_passwd'] == $userInfo['users_passwd'])
{
if( !empty( $_POST ) )
{
foreach ($locale_files as $lang_name)
{
if ( $lang_name == $COMPARISON_LANG ) continue;
$lang_ok = true;
foreach ( $global_comparison_lang_files as $glf )
{
$file = $lang_name."/".$glf;
if( isset( $_POST[str_replace(".", "_", $file)] ) )
{
echo "<h2>".$lang_name."</h2>\n";
echo $file."\n Values Added.";
$add_values = '<?php '."\n";
foreach ( $_POST as $var => $value )
{
if( $var != str_replace(".", "_", $file) )
$add_values .= 'define(\''.$var.'\', "'.$value.'");'."\n";
}
$add_values .= '?>';
$fh = fopen($file, 'a') or die("can't open file");
fwrite($fh, $add_values);
fclose($fh);
}
}
}
}
}
}
$current_url = curPageURL();
foreach ($global_comparison_lang_files as $glf)
{
$file = $COMPARISON_LANG."/".$glf;
$contents = file_get_contents($current_url.'?file='.$file);
$lang[$glf] = unserialize(base64_decode($contents));
}
// Check every lang.
foreach ($locale_files as $lang_name)
{
if ( $lang_name == $COMPARISON_LANG ) continue;
echo "<div id='$lang_name' class='lang'><h2>".$lang_name."</h2>\n";
$lang_ok = true;
foreach ( $global_comparison_lang_files as $glf )
{
$file = $lang_name."/".$glf;
if ( !is_file($file) )
{
echo "<h3>File $file is missing</h3>\n";
$lang_ok = false;
continue;
}
$compare_lang = array();
$contents = file_get_contents("$current_url?file=$file");
$compare_lang = unserialize(base64_decode($contents));
if(!is_array($compare_lang))
echo "Errors where found at $file";
$extra_lang_vars = @array_diff_key($compare_lang,$lang[$glf]);
$missing_lang_vars = @array_diff_key($lang[$glf],$compare_lang);
if(isset($extra_lang_vars['']))
unset($extra_lang_vars['']);
// If there is nothign wrong with the file lest skip it.
if ( empty($missing_lang_vars) && empty($extra_lang_vars) )
continue;
echo "<div class='file_vars'>\n";
echo "<h3>File: $file</h3>
<form action='' method='POST' name='".str_replace(".", "_", $file)."' >\n";
if ( !empty($missing_lang_vars) )
{
echo "<div class='missing_lang'><h4>Missing lang vars:</h4>\n";
echo "<br>";
foreach ( $missing_lang_vars as $var => $value )
{
echo "<label for='$var' >$var</label><br><textarea id='$var' name='$var'>".$lang[$glf][$var]."</textarea><br>\n";
}
echo "<input name='".str_replace(".", "_", $file)."' type='submit' />
</form>
</div>\n";
$lang_ok = false;
}
if ( !empty($extra_lang_vars) )
{
echo "<div class='extra_lang'><h4>Extra lang vars:</h4>\n";
echo "<ul>";
foreach ( $extra_lang_vars as $var => $value )
{
echo "<li>$var</li>";
}
echo "</ul></div>";
$lang_ok = false;
}
echo "</div><div class='clear'></div>\n";
}
if ( $lang_ok )
{
echo "<p class='success'>Lang is $lang_name is OK.</p>\n";
}
else
{
echo "<p class='failure'>Errors found from lang $lang_name.</p>\n";
}
echo "<div class='clear'></div> </div>\n";
}
?>
</html>