zentaopms/www/checktable.php
2023-05-16 10:47:08 +08:00

166 lines
5.4 KiB
PHP

<?php
error_reporting(E_ALL);
date_default_timezone_set('Asia/Shanghai');
$config = new stdclass();
include '../framework/helper.class.php';
include '../config/config.php';
define('DS', DIRECTORY_SEPARATOR);
session_start();
/* Set Client lang. */
if(isset($_SESSION['lang']))
{
$clientLang = $_SESSION['lang'];
}
elseif(isset($_COOKIE['lang']))
{
$clientLang = $_COOKIE['lang'];
}
elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
if(strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], ',') === false)
{
$clientLang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
else
{
$clientLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], ','));
}
/* Fix clientLang for ie >= 10. https://www.drupal.org/node/365615. */
if(stripos($clientLang, 'hans')) $clientLang = 'zh-cn';
if(stripos($clientLang, 'hant')) $clientLang = 'zh-tw';
}
if(!empty($clientLang))
{
$clientLang = strtolower($clientLang);
if(!isset($config->langs[$clientLang])) $clientLang = $config->default->lang;
}
else
{
$clientLang = $config->default->lang;
}
?>
<?php
$webRoot = $config->webRoot;
$themeRoot = $webRoot . "theme/";
$type = !isset($_GET['type']) ? 'check' : $_GET['type'];
if($type != 'check' and $type != 'repair') die();
if(!isset($_SESSION['checkFileName']))
{
$checkFileName = dirname(__FILE__) . DS . uniqid('repair_') . '.txt';
$_SESSION['checkFileName'] = $checkFileName;
}
$checkFileName = $_SESSION['checkFileName'];
$status = '';
if(!file_exists($checkFileName) or (time() - filemtime($checkFileName)) > 60 * 10) $status = 'createFile';
$lang = new stdclass();
$lang->misc = new stdclass();
$lang->storyCommon = '';
$lang->productCommon = '';
$lang->executionCommon = '';
$lang->URCommon = '';
$lang->SRCommon = '';
$lang->productURCommon = '';
$lang->productSRCommon = '';
$lang->projectSRCommon = '';
$lang->projectURCommon = '';
include "../module/common/lang/{$clientLang}.php";
include "../module/misc/lang/{$clientLang}.php";
if($status == 'createFile')
{
$lang->user = new stdclass();
include "../module/user/lang/{$clientLang}.php";
}
else
{
$error = '';
try
{
$dsn = "mysql:host={$config->db->host}; port={$config->db->port}; dbname={$config->db->name}";
$dbh = new PDO($dsn, $config->db->user, $config->db->password, array(PDO::ATTR_PERSISTENT => $config->db->persistant));
$dbh->exec("SET NAMES {$config->db->encoding}");
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tables = array();
$stmt = $dbh->query("show full tables");
while($table = $stmt->fetch(PDO::FETCH_ASSOC))
{
$tableName = $table["Tables_in_{$config->db->name}"];
$tableType = strtolower($table['Table_type']);
if($tableType == 'base table')
{
$tableStatus = $dbh->query("$type table $tableName")->fetch();
$tables[$tableName] = strtolower($tableStatus->Msg_text);
}
}
$status = 'check';
}
catch(PDOException $exception)
{
$error = sprintf($lang->misc->connectFail, $exception->getMessage());
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name="renderer" content="webkit">
<link rel='stylesheet' href='<?php echo $themeRoot . 'zui/css/min.css'?>' type='text/css' media='screen' />
</head>
<body>
<div class='alert alert-info' style='margin-bottom:0px;'><strong><?php echo $lang->misc->repairTable;?></strong></div>
<div class='container mw-700px'>
<div class='panel'>
<?php if(!empty($error)):?>
<?php echo $error;?>
<?php elseif($status == 'createFile'):?>
<div class='panel-body'>
<?php
$checkFileName = $_SESSION['checkFileName'];
$checkFileName = str_replace(dirname(dirname(__FILE__)) . DS, '', $checkFileName);
printf($lang->misc->noticeRepair, $checkFileName);
?>
<p><a href='<?php echo $config->webRoot . 'checktable.php';?>' class='btn btn-sm'><i class='icon-refresh'></i> <?php echo $lang->refresh;?></a></p>
</div>
<?php elseif($status == 'check'):?>
<table class='table table-form'>
<thead>
<tr>
<th><?php echo $lang->misc->tableName?></th>
<th><?php echo $lang->misc->tableStatus?></th>
<th></th>
</tr>
</thead>
<tbody>
<?php $needRepair = false;?>
<?php foreach($tables as $tableName => $tableStatus):?>
<?php if($tableStatus != 'ok') $needRepair = true;?>
<tr>
<td><?php echo $tableName;?></td>
<td><span style='color:<?php echo $tableStatus == 'ok' ? 'green' : 'red'?>'><?php echo $tableStatus;?></span></td>
<td><?php if($type == 'repair' and $tableStatus != 'ok') printf($lang->misc->repairFail, $tableName)?></td>
</tr>
</tbody>
<?php endforeach;?>
<?php if($needRepair):?>
<tfoot>
<tr><td class='text-center' colspan='3'><a href='<?php echo $config->webRoot . 'checktable.php?type=repair'?>' class='btn btn-primary'><?php echo $lang->misc->needRepair?></a></td></tr>
</tfoot>
<?php endif;?>
</table>
<?php endif;?>
</div>
</div>
</body>
</html>