#!/usr/local/bin/perl -T

use lib './module/';
use strict;
use Tie;
use CGI; my $q=new CGI;
use CGI::Carp qw(fatalsToBrowser);

#############################################

my( $tab,%TAB,%UP )=( 0 );

open OP, './dbm/tables' or die 'no file /dbm/tables\n';
while( <OP> ){
	s/\s*\#+.*$//;
	next if !$_ || /^\r?\n$/;

	if( /^\>(.*)/ ){ $UP{$tab}.=" $1"; next }

	0=~/(.)/; /^\=+\s?([^\s\=]+)/;
	if( $1 ){ $tab=lc $1; next }
	if( $tab ){ $TAB{$tab}.=$_ }
}
close OP;

#############################################

print $q->header( -type=>'text/html', -charset=>'WINDOWS-1251' );
print $q->start_html( -title=>'Создание, удаление таблиц', -style=>$STYLE, "leftmargin=0 topmargin=0 marginwidth=0 marginheight=0" );
print "<div align=center><div style='border:1px solid #BBB;width:550px;color:#006;background-color:#FFF;font-size:14;padding:2'>";

my $h= defined $q->param('h') ? $q->param('h') : '';
my $del= defined $q->param('del') ? $q->param('del') : 0;
my $hN= $h eq'remote' ? "Таблицы на удалённом хосте" : "Таблицы на локальном хосте";
my $table= defined $q->param('table') ? $q->param('table') : '';

print "<a href=create.cgi?3 title='В начало'>Создание, удаление таблиц (в начало)</a>";
print "</ul><hr size=1 width=100%>
<a href=create.cgi?h=local>Таблицы на локальном хосте</a> |
<a href=create.cgi?h=remote>Таблицы на удалённом хосте</a>";

my $view= defined $q->param('view') ? $q->param('view') : '';
viewTable( $view ) if $view;

##################### Delete

if( $table && $del==1 && $h eq'local' ){

	$dbSQL->do("DROP TABLE $table");
	print "<p>На локальном хосте удалена таблица $table";
	$table='';
}
elsif( $table && $del==1 && $h eq'remote' ){

	$Q->param(Q=>"DROP TABLE $table");
	Tie();
	print "<p>На удалённом хосте удалена таблица $table";
	$table='';
}

#####################

if( !$h ){
	print "<hr size=1 width=100%>В реестре следующие таблицы:<ul style='text-align:left'>";

	for( sort{ $a cmp $b } keys %TAB ){
		print "<li><a href=create.cgi?view=$_ title='Посмотреть'>$_</a><sup>";
		print " &nbsp;<a href=create.cgi?h=local&table=$_ title='Создать таблицу $_ на локальном хосте'>«local»</a>";
		print " &nbsp;<a href=create.cgi?h=remote&table=$_ title='Создать таблицу $_ на удалённом хосте'>«remote»</a>";
	}
}
else{ print "<hr size=1 width=100%>" }

if( !$table && $h eq'local' ){
	my $db= $dbSQL->selectrow_array("SELECT DATABASE()") or die 'Не могу получить имя БД на локальном хосте!\n';
	print "$hN. БД <u>$db</u><ul>";
	for( @{$dbSQL->selectcol_arrayref("SHOW TABLES FROM $db")} ){
		print "<li><a href=create.cgi?h=local&view=$_ title='Посмотреть таблицу'>$_</a>";
		print " &nbsp; <sup><a href=create.cgi?del=1&h=local&table=$_ ".
		"title='Удалить таблицу $_' onClick=\"return confirm('Удалить таблицу $_?')\">«delete»</a></sup>";
	}
}
elsif( !$table && $h eq'remote' ){
	$Q->param(Q=>"SELECT DATABASE()");
	Tie();
	my $db= $A->param('A') or die 'Не могу получить имя БД на удалённом хосте!\n'; $db=~ s/[^\w\-]//g;

	print "$hN. БД <u>$db</u><ul>";

	$Q->param(Q=>"SHOW TABLES FROM $db");
	Tie();
	for( $A->param('A') ){
		print "<li><a href=create.cgi?h=remote&view=$_ title='Посмотреть таблицу'>$_</a>";
		print " &nbsp; <sup><a href=create.cgi?del=1&h=remote&table=$_ ".
		"title='Удалить таблицу $_' onClick=\"return confirm('Удалить таблицу $_?')\">«delete»</a></sup>";
	}
}

print "</ul>";

##################### Create Table

if( $table && $h eq'local' ){
	die "Таблица $table не внесена в реестр!" unless exists $TAB{$table};

	if( $dbSQL->do("CREATE TABLE $table ($TAB{$table})") ){

		print "<br>На локальном хосте создана таблица <u>$table</u> <ul style='text-align:left'>";
		for( split/\,\r?\n/,$TAB{$table} ){ print "<li>$_" }
		print "</ul>";
	}
	else{ print "Таблица $table на локальном хосте не создана!<br>" }
}

elsif( $table && $h eq'remote' ){
	die "Таблица $table не внесена в реестр!\n" unless exists $TAB{$table};

	$Q->param(Q=>"CREATE TABLE $table ($TAB{$table})");
	Tie();

	print "<br>На удалённом хосте создана таблица <u>$table</u> <ul style='text-align:left'>";
	for( split/\,\r?\n/,$TAB{$table} ){ print "<li> $_" }
	print "</ul>";
}

print "</div></div></body></html>";

exit(0);

#############################################

sub viewTable{

	my $table= shift;

	print "<hr size=1 width=100%>";
	print "<br> Просмотр таблицы <u>$view</u> <ul style='text-align:left'>";

	my( $tab,@tab )=();
	if( $h eq'local' ){
		$tab= ($dbSQL->selectrow_array("SHOW CREATE TABLE $table"))[1];
	}
	elsif( $h eq'remote' ){
		$Q->param(Q=>"SHOW CREATE TABLE $table");
		Tie();
		$tab= ( $A->param('A') )[1];
	}
	else{ $tab= $TAB{$table} }

	for( split/\,\r?\n/,$tab ){ print "<li> $_" }
	print "</ul>";

	if( $UP{$table} ){
		my $UPDATE=( map{ /COMMENT=.(\d\d\d\d-\d\d?-\d\d?)/ } $dbSQL->selectrow_array("SHOW CREATE TABLE $table") )[0] || "1968-03-14";
		$UP{$table}=~s/\$UPDATE/\'$UPDATE\'/;

		print "<span style='font-size:12'>Обновление таблицы производится по запросу:<br><code>$UP{$table}</code></span>" unless $h;
	}
}
