a:9:{s:7:"version";s:3:"0.1";s:6:"author";s:13:"Johan Nilsson";s:10:"author_uri";s:25:"http://johan.galaxen.net/";s:11:"description";s:28:"Check for errors in database";s:4:"type";i:1;s:4:"name";s:19:"glx_admin_db_tables";s:4:"help";s:379:"
	<h1>glx_admin_db_tables</h1>

	<p>glx_db_table will check all the tables in the database that is set in the config.php file.</p>

	<p>If glx_db_table find a error the tablename of the currupted table will be colored red and you are able to rapair the table.</p>

	<p>Once installed you find glx_db_tables in the extension tab and then under the tab named Check tables.</p>



 ";s:4:"code";s:1711:"
if (@txpinterface == 'admin') {
	register_tab("extensions", "glx_db_tables", "Check tables");
	register_callback("glx_db_tables", "glx_db_tables");
}

function glx_repair_table($table) {
	$query = "REPAIR TABLE $table";
	mysql_query($query);
	return mysql_errno();
}

function glx_db_tables($event, $step) {
    global $txpcfg;
	$database = $txpcfg['db'];

	$repairTable = gps("repair_table");

	if (!empty($repairTable)) {
		$checkTableErrno = glx_repair_table($repairTable);
		if ($checkTableErrno == 0) {
			pagetop("Check tables", "Table: $repairTable is now repaired");
		} else {
			pagetop("Check tables", "Table: $repairTable returned errno $checkTableErrno when trying to repair");
		}
	} else {
		pagetop("Check tables", "");
	}

	echo '<h2 align="center">Tables in '.$database.'</h2>';


	$rs = getRows("SHOW TABLES");
	$key = "Tables_in_".$database;

	echo '<table cellpadding="0" cellspacing="0" border="0" id="list" align="center">' .
			'<tr><th>Tablenamn</th><th>Errno</th><th>Action</th></tr>';

	foreach ($rs as $table) {
		$query = "SHOW KEYS FROM ".$table[$key];
		mysql_query($query);
		$mysqlErrno = mysql_errno();

		if ($mysqlErrno != 0) {
			$color = "#D10000";
		} else {
			$color = "#4B9F00";
		}
		echo '<tr>' .
				'<td><span style="color: '.$color.'">'.$table[$key].'</span></td>' .
				'<td> '.$mysqlErrno.'</td>' .
				'<td> <a href="?event=glx_db_tables&amp;repair_table='.$table[$key].'">Repair table</a></td>' .
				'</tr>';

	}
	echo '</table>' .
			'<h2 align="center">Documentation</h2>' .
			'<div align="center">' .
			'<ul align="center">' .
			'<li><a href="http://dev.mysql.com/doc/mysql/en/error-handling.html">MySQL Errors</a></li>' .
			'</ul>' .
			'</div>';

}
";s:3:"md5";s:32:"33b1b02d805cf561f4b254a19970789a";}