#!/usr/local/bin/perl
####################################################################################
# mysqlwdb Version 1.3.0
#
# This is a CGI script written in Perl5, easy to configure and to install,
# intended to manage MySQL database tables through a web interface.
# Just edit and configure THIS UNIQUE file.
#
####################################################################################
####################################################################################
#
# Copyright (C) 2000,2002 Andrea Maestrutti aka Dree Mistrut in friulian language
# http://www.solution4web.com/mysqlwdb --- mysqlwdb@solution4web.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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
#
# You may also find the license at http://www.gnu.org/copyleft/gpl.html
#
####################################################################################
#use strict; # to avoid scope variables errors: useful for developers
$|=1; # to avoid output buffering
close STDERR; # to avoid DBI error output on html with some web servers
#==================================================================================
#
# VARIABLE CONFIGURATION SECTION
#
# PLEASE READ THE INSTALLATION DOCUMENT AND CHANGE UNDER THIS COMMENT THE
# VARIABLES YOU NEED, TO REFLECT TO YOUR PURPOSES
#
#==================================================================================
#=========================================================
# Name of this CGI script
#=========================================================
my $thiscgi= 'mysqlwdb.pl';
#=========================================================
# Database(s) & user(s) variables
#=========================================================
#
# It is possible to manage more than 1 database.
# If you put data for only 1 database, you will not prompt for databases choice.
# If you put data for more than 1 database, a menu of choice will appear.
#
my %DATABASES= (
1 => {
host => "your server name",
port => "3306", # 3306 is the standard MySQL port
database => "builds",
user => "admin",
password => "",
db_description => "CABIE Database"
},
#
# Example for Database2.
#
# If you need to manage a second database, please remove all # from 2 to },
# If you need to manage others databases, please copy & paste the example and change the order number
#
#
# 2 => {
#
# host => "host for Database2",
# port => "port for Database2, usually 3306",
# database => "Database2",
# user => "User for Database2",
# password => "Password for Database2",
# db_description => "Description for Database 2"
#
# },
);
#=========================================================
# Login variables
#=========================================================
# It is possible to prompt user for login.
#
# If you WANT to manage user(s), please:
# a) remove the # before user(s) id and password that you need
# b) change the user(s) id and password according to your needs
# c) set $login_prompt variable to 1
my %LOGIN=(
"build" => "password",
# "user2" => "pwd2",
);
my $login_prompt= 1; # 1 means YES, 0 means NO
#=========================================================
# DBI driver variable
#=========================================================
my $DBI_driver= 'mysql';
#=========================================================
# DBD::mysql version variables
#=========================================================
#
# 1 means YES, 0 means NO
my $recent_DBD_is_pri_key= 1; # 'recent' means Msql-Mysql-modules version 1.21_07 or greater (1998-11-08)
# default value 1
my $recent_DBD_dsn_syntax= 1; # 'recent' means Msql-Mysql-modules version 1.19_03 or greater (1998-02-06)
# default value 1
my $obsolete_DBD_ListTables= 0; # 'obsolete' means Msql-Mysql-modules version prior to 1.21_07 (1998-11-08)
# default value 0 (as a precaution due to a problem of $dbh->tables()
# with empty databases in old drivers)
#=========================================================
# MySQL specific variable
#=========================================================
my $mysql_specific= 1; # 1 means YES, 0 means NO
#=========================================================
# Delimiters
#=========================================================
my $delimiter= '@@';
my $pri_key_delimiter= '&&';
#=========================================================
# Configurable actions
#=========================================================
#=======DBMS actions
#
# 1 means YES, 0 means NO
my $drop_enabled= 0; # to be able to drop table(s)
my $drop_check= 0; # to be prompted before drop table(s)
my $delete_enabled= 0; # to be able to delete field(s)
my $prepare_create_enabled=0; # to be able to define a new table
my $create_enabled= 0; # to be able to definitevely create a table
my $create_check= 0; # to be prompted before definitevely create a table
my $delete_check= 0; # to be prompted before delete field(s)
my $select_enabled= 1; # to be able to select field(s)
my $edititem_enabled= 1; # to be able to edit field(s) for update
my $new_enabled= 1; # to be able to edit fields for create new record(s)
my $prepare_enabled= 1; # to be able to prepare select on checked field(s)
my $describe_enabled= 0; # to be able to describe table(s)
my $selectfields_enabled= 1; # to be able to select checked field(s)
my $insertrecord_enabled= 1; # to be able to insert records(s)
my $insertrecord_check= 1; # to be prompted before insert record(s)
my $updaterecord_enabled= 1; # to be able to update field(s)
my $updaterecord_check= 1; # to be prompted before update table(s)
my $fquery_enabled= 0; # to be able to make free query
my $fquery_check= 0; # to be prompted before make free query
my $refresh_enabled= 1; # to be able to refresh table(s) list
my $max_selected_rows= 500; # to provide an overall limit to the number of ALL selected records
#=======Warnings '0 rows affected' happened
#
# 1 means YES, 0 means NO
my $wrng_enabled_4_crate= 0; # to be warned if '0 rows affected' happened for create table action
my $wrng_enabled_4_drop= 0; # to be warned if '0 rows affected' happened for drop table action
my $wrng_enabled_4_delete= 1; # to be warned if '0 rows affected' happened for delete action
my $wrng_enabled_4_update= 1; # to be warned if '0 rows affected' happened for update action
my $wrng_enabled_4_insert= 1; # to be warned if '0 rows affected' happened for insert action
#======Upper box
#
# 1 means YES, 0 means NO
my $upper_box_enabled= 1; # 1 means that the upper box will appear
#=======javascript check
#
# 1 means YES, 0 means NO
my $javascript_enabled= 1; # 1 means that javascript code will (0 means NOT) appear to check whether
# tables/records/fields have been correctly checked or not
#=========================================================
# Create table specific
#=========================================================
#
# NOTE: For configure types & specifiers please go to the end of this file
#
#=======create table specifiers order
#
# Specifiers order from left to right. Numbers are the positions.
# It is possible to remove some specifiers (i.e. a line) but 'field_name' and 'field_type' are required.
# Please do not change names, but only the numbers. See "create table specifiers messages" section to change names.
my %SPECIFIERS_ORDER= (
"field_name" => "1",
"field_type" => "2",
"length" => "3",
"decimals" => "4",
"unsigned" => "5",
"zerofill" => "6",
"binary" => "7",
"not_null" => "8",
"default" => "9",
"auto_increment"=> "10",
"index" => "11",
"unique" => "12",
"primary_key" => "13"
);
#=======characters not allowed for create table names
#
# _SOME_ characters not allowed for table and fields names
# This is for names check purpose. Space is already included.
my @characters_not_allowed=qw(
"
'
@
.
&
%
!
?
/
\
);
#=========================================================
# Messages
#=========================================================
#
# NOTE: if you want to add a " in a message, please write it as \"
#=======buttons & interface_messages
my $button_discard= "Discard";
my $button_proceed= "Proceed";
my $button_drop= "Drop table(s)";
my $button_prepare_create= "Create table";
my $button_create= "Create";
my $button_describe= "Describe table(s)";
my $button_refresh= "Refresh table(s) list";
my $button_edit= "Edit record(s)";
my $button_delete= "Delete record(s)";
my $button_update= "Update record(s)";
my $button_insert= "Insert record(s)";
my $button_new= "New record(s)";
my $button_prepare= "Prepare select";
my $button_select_all= "Select all fields";
my $button_select_chk= "Select checked field(s)";
my $button_js_check_tab= "Check all table(s)";
my $button_js_unchk_tab= "Uncheck all table(s)";
my $button_js_check_fld= "Check all field(s)";
my $button_js_unchk_fld= "Uncheck all field(s)";
my $button_js_check_rec= "Check all record(s)";
my $button_js_unchk_rec= "Uncheck all record(s)";
my $button_db_choice= "Go to";
my $button_go_to_db_choice="Databases choice";
my $button_fquery= "Submit";
my $databases_choice= "Databases choice";
my $user_login= "CABIE Admin login";
my $user_login_failed= "CABIE login failed";
my $user_login_fail_prompt="Please check your id or password";
my $button_user_login= "Submit";
my $button_user_logout= "Logout";
my $user_id= "Id:";
my $user_pwd= "Pwd:";
my $current_user_msg= "";
my $number_of_fields= "number of field(s)";
my $query_limit= "limit";
my $query_offset= "offset";
my $query_where= "where";
my $query_order_by= "order by";
my $fquery_no_output= "No output from free query";
#=======operations
my $operation_on_user= "Current user";
my $operation_on_dbs= "Operation(s) on database(s)";
my $operation_on_tables= "Operation(s) on table(s)";
my $operation_on_fields= "Operation(s) on field(s)";
my $operation_on_records= "Operation(s) on record(s)";
my $operations_on_query= "Query(ies)";
my $fquery= "Free query";
#=======questions
my $ask_drop_tables= "Do you really want to drop";
my $ask_create_table= "Do you really want to create table?";
my $ask_delete_records= "Do you really want to delete selected record(s)?";
my $ask_insert_records= "Do you really want to insert record(s)?";
my $ask_update_records= "Do you really want to update record(s)?";
my $ask_fquery= "Do you really want to submit the free query?";
#=======javascript alerts
my $js_no_checked_tables= "No checked table(s)";
my $js_no_checked_fields= "No checked field(s)";
my $js_tab_check_wo_exist= "Table(s) checked without existing record(s) or field(s)";
my $js_tab_check_wo_check= "Table(s) checked without checked record(s) or field(s)";
my $js_tab_no_check_with= "Table(s) no checked with checked record(s) or field(s)";
my $js_no_field_name= "No field name";
my $js_no_table_name= "No table name";
my $js_in_table_name= "in table name";
my $js_in_field_name= "in field name";
my $js_ai_must_be_pkey= "field must be a";
my $js_pk_must_be_nn= "must be";
my $js_space_character= "'space'";
my $js_for_type= "for type";
my $js_not_allowed= "is not allowed";
my $js_required= "is required";
my $js_with= "with";
my $js_same_name_fields= "Same name for fields";
my $js_name_not_number= "Name can not consist only of numbers";
#=======DBMS operations messages
my $ok_insert= "Insert operation successfully completed";
my $ko_insert= "insert operation NOT completed";
my $ok_create= "Create operation successfully completed";
my $ko_create= "create operation NOT completed";
my $ok_update= "Update operation successfully completed";
my $ko_update= "update operation NOT completed";
my $ok_delete= "Delete record(s) operation successfully completed";
my $ko_delete= "delete record(s) operation NOT completed";
my $ok_drop= "Drop operation successfully completed";
my $ko_drop= "drop operation NOT completed";
my $ok_fquery= "Free query successfully completed";
my $ko_fquery= "free query operation NOT completed";
#=======create table specifiers messages
#
# It is possible to remove some specifiers (i.e. a line) but 'field_name' and 'field_type' are required.
# Please do not change names on the left, but only messages on the right.
# See "create table specifiers messages" section to change names on the left.
my %SPECIFIERS_MESSAGES= (
"table_name" => "Table name",
"field_name" => "Field name",
"field_type" => "Field type",
"length" => "Length",
"decimals" => "Decimals",
"unsigned" => "Unsigned",
"zerofill" => "Zerofill",
"binary" => "Binary",
"not_null" => "Not null",
"default" => "Default",
"auto_increment"=> "Auto increment",
"index" => "Index",
"unique" => "Unique",
"primary_key" => "Primary key"
);
#=======interface errors and warnings
my $err_error_word= "ERROR";
my $err_warning_word= "WARNING";
my $err_details_word= "details";
my $err_connect_db= "Can not connect to the database";
my $err_db_empty= "Database empty";
my $err_not_present= "NOT PRESENT";
my $err_no_prikey= "PRIMARY KEY IS NOT PRESENT";
my $err_0_rows_happened= "'0 rows affected' happened";
my $err_0_new_records= "0 new records";
my $err_0_fields= "0 fields";
my $err_no_checked_tables= "No checked table(s)";
my $err_no_check_rec_tab= "No checked record(s) or table(s)";
my $err_tab_no_check_with= "table(s) no checked with checked record(s) or field(s)";
my $err_tab_check_wo_exist="table(s) checked without existing record(s) or field(s)";
my $err_tab_check_wo_check="table(s) checked without checked record(s) or field(s)";
my $err_no_table_name= "No table name";
my $err_no_field_name= "No field name";
my $err_name_not_number= "Name can not consist only of numbers";
my $err_no_checked_fields= "No checked field(s)";
my $err_same_name_fields= "Same name for fields";
my $err_in_table_name= "in table name";
my $err_in_field_name= "in field name";
my $err_required= "is required";
my $err_not_allowed= "is not allowed";
my $err_with= "with";
my $err_for_type= "for type";
my $err_space_character= "'space'";
#=========================================================
# HTML layout
#=========================================================
#=======upper box
my $upper_box_perc= "40%";
#=======font face
my $font_face= 'Verdana, Arial, Helvetica, sans-serif'; # font for general text
my $button_font_face= 'Verdana, Arial, Helvetica, sans-serif'; # font for buttons
my $numb_table_checkb_ff= 'Verdana, Arial, Helvetica, sans-serif'; # font for numbers before the checkbox of tables
my $numb_rec_checkb_ff= 'Verdana, Arial, Helvetica, sans-serif'; # font for numbers before the checkbox of records
my $tablename_font_face= 'Verdana, Arial, Helvetica, sans-serif'; # font for tables names
my $box_font_face= 'Verdana, Arial, Helvetica, sans-serif'; # font for text in upper box
#=======font size
my $font_size= '2'; # font size for general text
my $button_font_size= '2'; # font size for buttons
my $numb_table_checkb_fs= '2'; # font size for numbers before the checkbox of tables
my $numb_rec_checkb_fs= '2'; # font size for numbers before the checkbox of records
my $tablename_font_size= '2'; # font size for tables names
my $box_font_size= '3'; # font size for text in upper box
#=======colors
my $body_bgcolor= '#ffffff'; # color for page background
my $font_color= '#000000'; # color font for general text
my $font_color_log_fail= 'red'; # color font for user login fail text
my $button_font_color= '#000000'; # color for buttons
my $table_color= '#f0f0f0'; # color for tables background
my $table_td_color= '#a0b8c8'; # color for tables columns
my $tablename_font_color= '#000000'; # color font for tables names
my $table_checkb_td_color= '#a0b8c8'; # color for columns with the checkbox of tables
my $numb_table_checkb_col= '#000000'; # color font for numbers before the checkbox of tables
my $numb_rec_checkb_col= '#000000'; # color font for numbers before the checkbox of records
my $rec_checkb_td_color= '#a0b8c8'; # color for columns with the checkbox of records
my $pri_key_color= '#ea6467'; # color for columns with primary key field
my $field_color= '#00b8c8'; # color for columns with records fields
my $label_color= '#ea6467'; # color for labels
my $box_bg_color= '#f0f0f0'; # color for upper box background
my $box_font_color= '#000000'; # color font for text in upper box
#=======form
my $input_text_size= 15; # text size of the input control for insert & update fields
my $text_size_4_create= 15; # text size of the input control for table and field names
my $maxlength_4_create= 64; # maxlength of the input control for table and field names (would be 64 characters in MySQL)
my $text_size_4_specif= 5; # text size of the input control for type specifiers
my $textarea_enabled= 1; # 1 means YES, 0 means NO
my $max_length4text= 40; # if the number of characters of the field is higher than $max_length4text,
# a textarea appears (if enabled) instead of the text input control when update
my $cols_textarea= 35; # number of columns of the textarea
my $rows_textarea= 4; # number of rows of the textarea
my $cols_fquery_textarea= 45; # number of columns of the textarea for the free query
my $rows_fquery_textarea= 4; # number of rows of the textarea for the free query
my $cols_fquery_texta_out= 55; # number of columns of the textarea for the free query output
my $rows_fquery_texta_out= 7; # number of rows of the textarea for the free query output
my $new_textarea_enabled= 0; # 1 means YES, 0 means NO
# if 1 a textarea appears instead of the text input control when create a new record
my $cols_new_textarea= 25; # number of columns of the textarea
my $rows_new_textarea= 3; # number of rows of the textarea
my $where_text_size= 10; # text size of input control for the SQL where
my $limit_values= q{
<option>5
<option>10
<option>25
<option>50
<option>2000
};
my $limit_offset_values= q{
<option>5
<option>10
<option>15
<option>20
};
my $select_params= q{
<option>like
<option>>
<option>>=
<option><
<option><=
};
my $orderby_params= q{
<option>ASC
<option>DESC
};
my $new_values= q{
<option>1
<option>2
<option>3
<option>4
<option>5
<option>10
<option>20
};
my $new_fields= q{
<option>1
<option>2
<option>3
<option>4
<option>5
<option>10
<option>20
};
#================================================================================
# VARIABLE CONFIGURATION SECTION END
#================================================================================
#================================================================================
#
# PAY ATTENTION!
#
# PLEASE DO NOT EDIT ANYTHING UNDER THIS COMMENT
# IF YOU ARE NOT SURE WHAT ARE YOU DOING
#
#================================================================================
use vars qw/ %CGI_INPUT %CHECKED_ITEMS %FIELD_VALUES %HASH_pri_keys @ARRAY_pri_keys
%FIELD_NAMES %internal_SPECIFIERS_ORDER %SPECIFIERS_PROPERTIES $dbh
%FIELDS_TYPES %NO_SYNC_INPUT_HASH1 %CHECKED_TABLES %NO_SYNC_INPUT_HASH2
%DUP_HASH %SELECT_PARAMS %PREPARE_NAMES @tables_names $global_err
@javascript_objects $flag_ok $database_prompt $empty_db $descarray
$fquery_output $relevant_js_obj $warning_flag $current_db $current_user
$current_pwd $descarray_describe $elem_describe $elem_select/;
#===============================================#
# #
# main #
# #
#===============================================#
&input_from_CGI;
&put_HTTP_header;
my $verify_state=&verify_user;
if ($verify_state == -1) {
&put_HTML_header('user_login_failed');
&prompt_user_login('failed');
} elsif ($verify_state == 0) {
&put_HTML_header('user_login');
&prompt_user_login('normal');
} else {
if (&get_current_db) {
&put_HTML_header('normal');
&DBI_initialization;
&get_action_info;
&perform_action;
} else {
&put_HTML_header('db_prompt');
&prompt_db_choice;
}
}
&put_HTML_footer;
exit;
#===============================================#
# #
# subroutines #
# #
#===============================================#
#===============================================
# HTTP , CGI , DBI , USER subroutines
#===============================================
sub put_HTTP_header {
print "Content-Type: text/html\n\n";
}
sub put_HTML_footer {
print q{</body></html>};
}
sub put_HTML_header {
my $state=$_[0];
my $message;
if ($state eq 'normal') {
$message=$DATABASES{$current_db}{'db_description'};
} elsif ($state eq 'db_prompt') {
$message=$databases_choice;
} elsif ($state eq 'user_login_failed') {
$message=$user_login_failed;
} else {
$message=$user_login;
}
print qq{<html>
<head>
<title>$message</title>
</head>
<body bgcolor="$body_bgcolor">
};
if ($upper_box_enabled) {
print qq{
<br>
<div align="center">
<table border=0 cellpadding=1 cellspacing=0 width = "$upper_box_perc">
<tr><td bgcolor="#000000">
<table border=0 cellpadding=5 cellspacing=0 width = "100%">
<tr><td bgcolor = "$box_bg_color" width="100%" align="center">
<font face="$box_font_face" size="$box_font_size" color="$box_font_color">
<b>$message</b>
</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<br>
};
}
}
sub input_from_CGI {
my ($name,
$value,
$elem,
@pair,
$request
);
if ($ENV{REQUEST_METHOD} eq "GET") {
$request=$ENV{QUERY_STRING};
} else {
read( STDIN, $request, $ENV{CONTENT_LENGTH} );
}
@pair = split( '&', $request );
foreach $elem ( @pair ) {
( $name, $value ) = split( '=', $elem );
$value =~ tr/+/ /;
$name =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c',hex($1))/ge;
$value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c',hex($1))/ge;
$CGI_INPUT{$name} = $value;
}
}
sub DBI_initialization {
my $host=$DATABASES{$current_db}{'host'};
my $port=$DATABASES{$current_db}{'port'};
my $database=$DATABASES{$current_db}{'database'};
my $user=$DATABASES{$current_db}{'user'};
my $password=$DATABASES{$current_db}{'password'};
my $dsn;
use DBI;
if ($recent_DBD_dsn_syntax) {
$dsn="DBI:$DBI_driver:database=$database;host=$host;port=$port";
} else {
$dsn="DBI:$DBI_driver:$database:$host:$port";
}
if (!($dbh=DBI->connect($dsn,$user,$password))) {
print qq{
<br>
<div align="center">
<table border=0 cellpadding=1 cellspacing=0>
<tr>
<td bgcolor="#000000">
<table border="0" cellspacing="0" cellpadding="5" BGCOLOR="$table_color">
<tr>
<td>
<table border="0" cellspacing="2" cellpadding="2" BGCOLOR="$table_color">
};
my $err="<b>$err_error_word:</b> $err_connect_db<br><b>$err_details_word:</b> $DBI::errstr";
&write_labeled_message($err);
if ($database_prompt) {
$refresh_enabled=0;
print qq{
<form name="the_script" method="POST" action="$thiscgi">
};
&put_database_related_buttons;
print q{
</form>
};
}
print q{
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
};
exit;
}
}
sub get_current_db {
my ($db_position,$dbs,$last_db);
if ($CGI_INPUT{'go_to_db_choice'}) {
$database_prompt=1;
return 0;
}
$current_db=$CGI_INPUT{'current_db'};
foreach $db_position (sort numerically keys %DATABASES) {
$last_db=$db_position;
$dbs++;
}
if ($dbs > 1) {
$database_prompt=1;
if (!$current_db) {
return 0;
} else {
return 1;
}
} else {
$database_prompt=0;
if (!$current_db) {
$current_db=$last_db;
}
return 1;
}
}
sub verify_user {
if ($login_prompt) {
if (($CGI_INPUT{'current_user'}) and ($CGI_INPUT{'current_pwd'})) {
my $salt=substr $CGI_INPUT{'current_pwd'},0,2;
my $encrypted_pwd=crypt($LOGIN{$CGI_INPUT{'current_user'}},$salt);
if ($encrypted_pwd eq $CGI_INPUT{'current_pwd'}) {
$current_user=$CGI_INPUT{'current_user'};
$current_pwd=$CGI_INPUT{'current_pwd'};
return 1
} else {
return -1
}
} elsif (($CGI_INPUT{'user_id'}) or ($CGI_INPUT{'user_pwd'})) {
if ((scalar(keys %LOGIN)) and ($LOGIN{$CGI_INPUT{'user_id'}} eq $CGI_INPUT{'user_pwd'})) {
my @list_of_chars=(0..9,'a'..'z','A'..'Z');
my $first_salt=rand 64;
srand;
my $secont_salt=rand 64;
my $salt=$list_of_chars[$first_salt].$list_of_chars[$secont_salt];
my $encrypted_pwd=crypt($LOGIN{$CGI_INPUT{'user_id'}},$salt);
$current_user=$CGI_INPUT{'user_id'};
$current_pwd=$encrypted_pwd;
return 1
} else {
return -1
}
} else {
return 0
}
} else {
return 1;
}
}
#===============================================
# Misc. subroutines
#===============================================
sub write_labeled_message {
print qq{
<br>
<div align="center">
<table border="0" cellspacing="1" cellpadding="3" width="300">
<tr bgcolor="$label_color" align="center">
<td>
<font face="$font_face" size="$font_size">
$_[0]
</font>
</td>
</tr>
</table>
</div>
<br>
};
}
sub numerically { $a <=> $b; }
sub html2txt {
my $html_input=$_[0];
my $param=$_[1];
$html_input =~ s/&/&/g;
$html_input =~ s/</</g;
$html_input =~ s/>/>/g;
$html_input =~ s/"/"/g;
if ($param eq 'br') {
$html_input =~ s/\n/<br>/g;
}
return $html_input;
}
sub txt2html {
my $html_input=$_[0];
my $param=$_[1];
if ($param eq 'br') {
$html_input =~ s/<br>/\n/g;
}
$html_input =~ s/"/"/g;
$html_input =~ s/>/>/g;
$html_input =~ s/</</g;
$html_input =~ s/&/&/g;
return $html_input;
}
#===============================================
# DBMS actions subroutines
#===============================================
sub create {
my ($type,
$checked_type,
$create_string,
$err_message,
$appear,
$order,
$pair_done,
$property,
$required_specifier,
$pri_key_create_string,
$index_create_string,
$unique_create_string,
$output_specifier
);
$create_string="CREATE TABLE $CGI_INPUT{'table_name'}(";
foreach my $checked (sort numerically keys %{$FIELD_NAMES{'checked_item'}}) {
$pair_done=0;
$create_string.="$FIELD_NAMES{'field_name'}{$checked} $FIELD_NAMES{'field_type'}{$checked}";
foreach my $specifier (sort { $internal_SPECIFIERS_ORDER{$a} <=> $internal_SPECIFIERS_ORDER{$b} } keys %internal_SPECIFIERS_ORDER) {
if (!$FIELD_NAMES{$specifier}{$checked}) {next;}
($appear,$order)=split /\+/ , $SPECIFIERS_PROPERTIES{$specifier}{'appear'};
if ($appear) {
if ($specifier eq 'primary_key') {$pri_key_create_string.="$FIELD_NAMES{'field_name'}{$checked},";next;}
if ($specifier eq 'index') {
$FIELD_NAMES{$specifier}{$checked}=~/([^\(]+)\(([^\)]+)\)/;
my $index_name=$1;
my $index_length=$2;
if ($index_length) {
$index_create_string.="KEY $index_name ($FIELD_NAMES{'field_name'}{$checked}($index_length)),";
} else {
$index_create_string.="KEY $FIELD_NAMES{$specifier}{$checked} ($FIELD_NAMES{'field_name'}{$checked}),";
}
next;
}
if ($specifier eq 'unique') {
$unique_create_string.="UNIQUE $FIELD_NAMES{$specifier}{$checked} ($FIELD_NAMES{'field_name'}{$checked}),";
next;
}
($output_specifier=$specifier) =~ s/_/ /;
if ($SPECIFIERS_PROPERTIES{$specifier}{'html'} eq 'text') {
$create_string.=" $output_specifier $FIELD_NAMES{$specifier}{$checked} ";
} else {
$create_string.=" $output_specifier ";
}
} else {
$checked_type=$FIELD_NAMES{'field_type'}{$checked};
($property,$required_specifier)=split /\+/ , $FIELDS_TYPES{$checked_type}{$specifier};
if ($required_specifier) {
if (!$pair_done) {
if ($order eq '1') {
$create_string.="($FIELD_NAMES{$specifier}{$checked},$FIELD_NAMES{$required_specifier}{$checked}) ";
} else {
$create_string.="($FIELD_NAMES{$required_specifier}{$checked},$FIELD_NAMES{$specifier}{$checked}) ";
}
$pair_done=1;
}
} else {
$create_string.="($FIELD_NAMES{$specifier}{$checked}) ";
}
}
}
if (exists $FIELD_NAMES{'auto_increment'}{0}) {
if ($FIELD_NAMES{'auto_increment'}{0} == $checked) {
$create_string.=" auto_increment ";
}
}
$create_string.=",";
}
chop $create_string;
if ($pri_key_create_string) {
chop $pri_key_create_string;
$pri_key_create_string=',PRIMARY KEY ('.$pri_key_create_string.')';
$create_string.=$pri_key_create_string;
}
if ($index_create_string) {
chop $index_create_string;
$create_string.=','.$index_create_string;
}
if ($unique_create_string) {
chop $unique_create_string;
$create_string.=','.$unique_create_string;
}
$create_string.=')';
my $sth = $dbh->do($create_string);
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
} elsif ($sth eq "0E0") {
$warning_flag=1;
}
if ($wrng_enabled_4_crate and $warning_flag) {
$err_message=qq{<b>$err_warning_word</b>: $err_0_rows_happened};
&write_labeled_message($err_message);
}
return 1;
}
sub drop {
my ($table_name,
$warning_flag,
$err_message
);
foreach $table_name (keys %CHECKED_TABLES) {
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
} elsif ($sth eq "0E0") {
$warning_flag=1;
}
}
if ($wrng_enabled_4_drop and $warning_flag) {
$err_message=qq{<b>$err_warning_word</b>: $err_0_rows_happened};
&write_labeled_message($err_message);
}
return 1;
}
sub delete {
my ($where_string,
$table_name,
$key_name,
$delete_string,
$number,
$warning_flag,
$err_message
);
if (!&lock_tables) {return 0;}
foreach $table_name (keys %CHECKED_ITEMS) {
foreach $key_name (keys %{$CHECKED_ITEMS{$table_name}}) {
foreach $number (keys %{$CHECKED_ITEMS{$table_name}{$key_name}}) {
$where_string='';
my $tmp_pri_key_delimiter=quotemeta($pri_key_delimiter);
my @pri_keys=split /$tmp_pri_key_delimiter/,$key_name;
my @pri_keys_values=split /$tmp_pri_key_delimiter/,$CHECKED_ITEMS{$table_name}{$key_name}{$number};
foreach (0..$#pri_keys) {
my $quoted_value=$pri_keys_values[$_];
if ($quoted_value eq '') {
$quoted_value="''";
} else {
$quoted_value=$dbh->quote($quoted_value);
$quoted_value=~s/%/\\%/g;
$quoted_value=~s/_/\\_/g;
}
$where_string.="($pri_keys[$_] like $quoted_value) and ";
}
substr($where_string,-5)='';
$where_string=' where ('.$where_string.')';
$delete_string=qq{delete from $table_name $where_string};
my $sth = $dbh->do("$delete_string");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
} elsif ($sth eq "0E0") {
$warning_flag=1;
}
}
}
}
if (!&unlock_tables) {
return 0;
} else {
if ($wrng_enabled_4_delete and $warning_flag) {
$err_message=qq{<b>$err_warning_word</b>: $err_0_rows_happened};
&write_labeled_message($err_message);
}
return 1;
}
}
sub describe {
my $table_name;
$table_name=$_[0];
my $sth = $dbh->prepare("describe $table_name");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
}
$sth->execute;
$descarray_describe=$sth->{NAME};
$elem_describe=$sth->fetchall_arrayref;
$sth->finish;
return 1;
}
sub select {
my $select_string;
$select_string=$_[0];
my $sth = $dbh->prepare( "$select_string");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
}
$sth->execute;
$descarray=$sth->{NAME};
$elem_select=$sth->fetchall_arrayref;
$sth->finish;
return 1;
}
sub get_pri_key {
my ($table_name,
$key_index,
$refbool,
$pri_key_string
);
%HASH_pri_keys=();
@ARRAY_pri_keys=();
$table_name=$_[0];
if ($mysql_specific) {
my $sth = $dbh->prepare("LISTFIELDS $table_name");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
}
$sth->execute;
$descarray=$sth->{'NAME'};
if ($recent_DBD_is_pri_key) {
$refbool=$sth->{'mysql_is_pri_key'};
} else {
$refbool=$sth->{'is_pri_key'};
}
$sth->finish;
foreach $key_index (0..$#{$refbool}) {
if ($refbool->[$key_index] eq 1) {
$HASH_pri_keys{$descarray->[$key_index]}=$key_index;
$ARRAY_pri_keys[++$#ARRAY_pri_keys]=$descarray->[$key_index];
$pri_key_string.=$descarray->[$key_index].$pri_key_delimiter;
}
}
} else {
#I don't know how to implement this feature
}
substr($pri_key_string,-length($pri_key_delimiter))='' if ($pri_key_string);
return $pri_key_string;
}
sub prepare {
my $table_name;
$table_name=$_[0];
if ($mysql_specific) {
my $sth = $dbh->prepare("LISTFIELDS $table_name");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
}
$sth->execute;
$descarray=$sth->{'NAME'};
$sth->finish;
} else {
my $sth = $dbh->prepare("select * from $table_name");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
}
$sth->execute;
$descarray=$sth->{NAME};
$sth->finish;
}
@{$PREPARE_NAMES{$table_name}}=@{$descarray};
return 1;
}
sub update_records {
my ($set_string,
$where_string,
$update_string,
$table_name,
$key_name,
$number,
$field_name,
$field_value,
$warning_flag
);
if (!&lock_tables) {return 0;}
foreach $table_name (keys %CHECKED_ITEMS) {
foreach $key_name (keys %{$CHECKED_ITEMS{$table_name}}) {
foreach $number (keys %{$CHECKED_ITEMS{$table_name}{$key_name}}) {
$where_string='';
my $tmp_pri_key_delimiter=quotemeta($pri_key_delimiter);
my @pri_keys=split /$tmp_pri_key_delimiter/,$key_name;
my @pri_keys_values=split /$tmp_pri_key_delimiter/,$CHECKED_ITEMS{$table_name}{$key_name}{$number};
foreach (0..$#pri_keys) {
my $quoted_value=$pri_keys_values[$_];
if ($quoted_value eq '') {
$quoted_value="''";
} else {
$quoted_value=$dbh->quote($quoted_value);
$quoted_value=~s/%/\\%/g;
$quoted_value=~s/_/\\_/g;
}
$where_string.="($pri_keys[$_] like $quoted_value) and ";
}
substr($where_string,-5)='';
$where_string=' where ('.$where_string.')';
$set_string='';
foreach $field_name (keys %{$FIELD_VALUES{$table_name}{$number}}) {
$field_value=$FIELD_VALUES{$table_name}{$number}{$field_name};
if ($updaterecord_check) {
&txt2html($field_value,'nobr');
}
$field_value=$dbh->quote($field_value);
$set_string.=$field_name.'='.$field_value.',';
}
chop($set_string);
$update_string='update '.$table_name.' set '.$set_string.' '.$where_string;
my $sth = $dbh->do("$update_string");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
} elsif ($sth eq "0E0") {
$warning_flag=1;
}
}
}
}
if (!&unlock_tables) {
return 0;
} else {
if ($wrng_enabled_4_update and $warning_flag) {
my $err_message=qq{<b>$err_warning_word</b>: $err_0_rows_happened};
&write_labeled_message($err_message);
}
return 1;
}
}
sub insert_records {
my ($table_name,
$field_name,
$field_value,
$number,
$names_string,
$values_string,
$insert_string,
$warning_flag,
$err_message
);
if (!&lock_tables) {return 0;}
foreach $table_name (keys %FIELD_VALUES) {
foreach $number (sort numerically keys %{$FIELD_VALUES{$table_name}}) {
$names_string='';
$values_string='';
foreach $field_name (keys %{$FIELD_VALUES{$table_name}{$number}}) {
$field_value=$FIELD_VALUES{$table_name}{$number}{$field_name};
if ($insertrecord_check) {
&txt2html($field_value,'nobr');
}
$field_value=$dbh->quote($field_value);
$names_string.=$field_name.',';
$values_string.=$field_value.',';
}
chop($names_string);
chop($values_string);
$insert_string='insert into '.$table_name.' ('.$names_string.') VALUES ('.$values_string.')';
my $sth = $dbh->do("$insert_string");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
} elsif ($sth eq "0E0") {
$warning_flag=1;
}
}
}
if (!&unlock_tables) {
return 0;
} else {
if ($wrng_enabled_4_insert and $warning_flag) {
$err_message=qq{<b>$err_warning_word</b>: $err_0_rows_happened};
&write_labeled_message($err_message);
}
return 1;
}
}
sub lock_tables {
my ($table_name_list,
$table_name,
$lock_string
);
$table_name_list='';
foreach $table_name (keys %CHECKED_TABLES) {
$table_name_list.=$table_name.' WRITE ,';
}
chop ($table_name_list);
$lock_string='LOCK TABLES '.$table_name_list;
if (!defined $dbh->do("$lock_string")) {
$global_err="$DBI::errstr";
return 0;
} else {
return 1;
}
}
sub unlock_tables {
if (!defined $dbh->do("UNLOCK TABLES")) {
$global_err="$DBI::errstr";
return 0;
} else {
return 1;
}
}
sub list_tables {
if ($mysql_specific) {
if ($obsolete_DBD_ListTables) {
@tables_names = $dbh->tables();
} else {
@tables_names = $dbh->func("_ListTables");
}
} else {
@tables_names = $dbh->tables();
}
return @tables_names+0;
}
sub perform_fquery {
$CGI_INPUT{'fquery_textarea'}=~s/\n//g;
$CGI_INPUT{'fquery_textarea'}=~s/\r//g;
$CGI_INPUT{'fquery_textarea'}=&txt2html($CGI_INPUT{'fquery_textarea'},'nobr');
my $sth = $dbh->prepare("$CGI_INPUT{'fquery_textarea'}");
if ( !defined $sth ) {
$global_err="$DBI::errstr";
return 0;
}
my $rv=$sth->execute;
if ( !defined $rv ) {
$global_err="$DBI::errstr";
return 0;
} else { #also with $rv eq "0E0"
$fquery_output='';
while (my @row = $sth->fetchrow_array) {
$fquery_output.="@row"."\n";
}
}
$sth->finish;
return 1;
}
#===============================================
# get_action_info subroutines
#===============================================
sub get_action_info {
$flag_ok=1;
if ($create_enabled and $CGI_INPUT{create} and !$CGI_INPUT{'new_fields'}) {
&write_labeled_message("<b>$err_error_word:</b> $err_0_fields");
$CGI_INPUT{create}=0;
$flag_ok=0;
}
if ($create_enabled and $CGI_INPUT{createok}) {
if (&verify_create_checks) {
if ($create_check) {
print qq{
<div align="center"><form action="$thiscgi" method="post">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
};
&write_labeled_message("$ask_create_table");
&put_hidden_values_4_create;
print qq{
<font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="refresh" value="$button_discard"><input type="submit" name="createcheck" value="$button_proceed">
</font>
</form></div>
};
$flag_ok=0;
} else {
$CGI_INPUT{createcheck}=1;
$flag_ok=1;
}
}
}
if ($drop_enabled and $CGI_INPUT{drop}) {
if (&get_checked_tables) {
if ($drop_check) {
print qq{
<div align="center"><form action="$thiscgi" method="post">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
};
my $message="$ask_drop_tables:";
foreach my $table_name (keys %CHECKED_TABLES) {
$message.="<LI>$table_name";
my $tmp_name='checked_table'.$delimiter.$table_name;
my $tmp_value=$table_name;
print qq{<input type="hidden" name="$tmp_name" value="$tmp_value">\n};
}
&write_labeled_message($message);
print qq{
<font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="refresh" value="$button_discard"><input type="submit" name="dropok" value="$button_proceed">
</font>
</form></div>
};
} else {
$CGI_INPUT{dropok}=1;
$flag_ok=1;
}
} else {
&write_labeled_message("<b>$err_error_word:</b> $err_no_checked_tables");
$flag_ok=0;
}
}
if ($delete_enabled and $CGI_INPUT{delete}) {
if (&verify_checks) {
if ($delete_check) {
print qq{
<div align="center"><form action="$thiscgi" method="post">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
};
&write_labeled_message("$ask_delete_records");
&put_hidden_values;
print qq{
<font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="refresh" value="$button_discard"><input type="submit" name="deleteok" value="$button_proceed">
</font>
</form></div>
};
$flag_ok=0;
} else {
$CGI_INPUT{deleteok}=1;
$flag_ok=1;
}
}
}
if ($describe_enabled and $CGI_INPUT{describe}) {
if (!(&get_checked_tables)) {
&write_labeled_message("<b>$err_error_word:</b> $err_no_checked_tables");
$flag_ok=0;
}
}
if ($select_enabled and $CGI_INPUT{select}) {
&get_field_names;
&get_select_params;
if (!(&get_checked_tables)) {
&write_labeled_message("<b>$err_error_word:</b> $err_no_checked_tables");
$flag_ok=0;
}
if ($selectfields_enabled and $CGI_INPUT{withselectfields}) {
if (!&verify_checks_lite) {
$flag_ok=0;
}
}
}
if ($new_enabled and $CGI_INPUT{new}) {
if (!$CGI_INPUT{'new_elem'}) {
&write_labeled_message("<b>$err_error_word:</b> $err_0_new_records");
$flag_ok=0;
}
if (!(&get_checked_tables)) {
&write_labeled_message("<b>$err_error_word:</b> $err_no_checked_tables");
$flag_ok=0;
}
}
if ($prepare_enabled and $CGI_INPUT{prepare}) {
if (!(&get_checked_tables)) {
&write_labeled_message("<b>$err_error_word:</b> $err_no_checked_tables");
$flag_ok=0;
}
}
if ($selectfields_enabled and $CGI_INPUT{selectfields}) {
if (&verify_checks) {
&get_select_params;
} else {
$flag_ok=0;
}
}
if ($edititem_enabled and $CGI_INPUT{edititem}) {
if (!&verify_checks) {
$flag_ok=0;
}
}
if ($insertrecord_enabled and $CGI_INPUT{insertrecord}) {
if (&verify_checks) {
&get_field_values;
if ($insertrecord_check) {
print qq{
<div align="center"><form action="$thiscgi" method="post">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
};
&write_labeled_message("$ask_insert_records");
&put_hidden_values;
print qq{
<font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="refresh" value="$button_discard"><input type="submit" name="insertok" value="$button_proceed">
</font>
</form></div>
};
$flag_ok=0;
} else {
$CGI_INPUT{insertok}=1;
$flag_ok=1;
}
}
}
if ($fquery_enabled and $CGI_INPUT{fquery}) {
if ($fquery_check) {
print qq{
<div align="center"><form action="$thiscgi" method="post">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
};
$CGI_INPUT{'fquery_textarea'}=&html2txt($CGI_INPUT{'fquery_textarea'},'nobr');
print qq{
<input type="hidden" name="fquery_textarea" value="$CGI_INPUT{'fquery_textarea'}">
};
&write_labeled_message("$ask_fquery");
print qq{
<font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="refresh" value="$button_discard"><input type="submit" name="fqueryok" value="$button_proceed">
</font>
</form></div>
};
$flag_ok=0;
} else {
$CGI_INPUT{fqueryok}=1;
$flag_ok=1;
}
}
if ($updaterecord_enabled and $CGI_INPUT{updaterecord}) {
if (&verify_checks) {
&get_field_values;
if ($updaterecord_check) {
print qq{
<div align="center"><form action="$thiscgi" method="post">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
};
&write_labeled_message("$ask_update_records");
&put_hidden_values;
print qq{
<font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="refresh" value="$button_discard"><input type="submit" name="updateok" value="$button_proceed">
</font>
</form></div>
};
$flag_ok=0;
} else {
$CGI_INPUT{updateok}=1;
$flag_ok=1;
}
}
}
}
sub put_hidden_values {
my ($table_name,
$num,
$prim_key,
$tmp_name,
$tmp_value,
$field_name
);
foreach $table_name (keys %CHECKED_ITEMS) {
$tmp_name='checked_table'.$delimiter.$table_name;
$tmp_value=$table_name;
print qq{
<input type="hidden" name="$tmp_name" value="$tmp_value">
};
foreach $prim_key (keys %{$CHECKED_ITEMS{$table_name}}) {
foreach $num (sort numerically keys %{$CHECKED_ITEMS{$table_name}{$prim_key}}) {
$tmp_value=$CHECKED_ITEMS{$table_name}{$prim_key}{$num};
$tmp_name='checked_item'.$delimiter.$table_name.$delimiter.$prim_key.$delimiter.$num;
print qq{
<input type="hidden" name="$tmp_name" value="$tmp_value">
};
foreach $field_name (keys %{$FIELD_VALUES{$table_name}{$num}}) {
$tmp_value=$FIELD_VALUES{$table_name}{$num}{$field_name};
$tmp_value=&html2txt($tmp_value,'nobr');
$tmp_name='field_value'.$delimiter.$num.$delimiter.$table_name.$delimiter.$field_name;
print qq{
<input type="hidden" name="$tmp_name" value="$tmp_value">
};
}
}
}
}
}
sub put_hidden_values_4_create {
my ($tmp_name,
$tmp_value,
$type,
$checked
);
$tmp_name='table_name';
$tmp_value=$CGI_INPUT{'table_name'};
print qq{
<input type="hidden" name="$tmp_name" value="$tmp_value">
};
foreach $type (keys %FIELD_NAMES) {
foreach $checked (keys %{$FIELD_NAMES{$type}}) {
$tmp_name='field_name'.$delimiter.$type.$delimiter.$checked;
$tmp_value=$FIELD_NAMES{$type}{$checked};
print qq{
<input type="hidden" name="$tmp_name" value="$tmp_value">
};
}
}
}
sub verify_create_names {
my $name=$_[0];
my ($err_string,
$character,
$metacharacter
);
if ($name =~ / /) {
$err_string="$err_space_character $err_not_allowed";
return $err_string;
}
foreach $character (@characters_not_allowed) {
$metacharacter=quotemeta($character);
if ($name =~ /$metacharacter/) {
$err_string="$character $err_not_allowed";
return $err_string;
}
}
if ($name !~ /[^\d]/) {
$err_string="$err_name_not_number";
return $err_string;
}
return '';
}
sub verify_create_checks {
my ($flag_err,
$err_string,
$err_string_name,
$extrn,
$intrn,
$message,
$message_required_specifier,
@create_checked_items,
$checked,
$property,
$required_specifier
);
$flag_err=0;
&get_field_names;
if (!$CGI_INPUT{'table_name'}) {
$err_string.='<br>'.$err_no_table_name;
$flag_err=1;
}
if (!$flag_err) {
$err_string_name=&verify_create_names($CGI_INPUT{'table_name'});
if ($err_string_name) {
$err_string.='<br>'."$err_string_name $err_in_table_name";
$flag_err=1;
}
}
&get_fields_types;
foreach $checked (sort numerically keys %{$FIELD_NAMES{'checked_item'}}) {
$create_checked_items[++$#create_checked_items]=$checked;
if ($FIELD_NAMES{'field_name'}{$checked} eq '') {
$err_string.='<br>'."$err_no_field_name : $checked";
$flag_err=1;
} else {
$err_string_name=&verify_create_names($FIELD_NAMES{'field_name'}{$checked});
if ($err_string_name) {
$err_string.='<br>'."$err_string_name $err_in_field_name : $checked";
$flag_err=1;
}
}
my $type=$FIELD_NAMES{'field_type'}{$checked};
foreach my $specifier (keys %SPECIFIERS_ORDER) {
if ($FIELD_NAMES{$specifier}{$checked} ne '') {
($property,$required_specifier)=split /\+/ , $FIELDS_TYPES{$type}{$specifier};
if ($required_specifier) {
$message_required_specifier=$SPECIFIERS_MESSAGES{$required_specifier};
$message=$SPECIFIERS_MESSAGES{$specifier};
if ($FIELD_NAMES{$required_specifier}{$checked} eq '') {
$err_string.='<br>'."$message_required_specifier $err_required $err_with $message $err_for_type $type : $checked";
$flag_err=1;
}
}
if ($FIELDS_TYPES{$type}{$specifier} eq '-1') {
$message=$SPECIFIERS_MESSAGES{$specifier};
$err_string.='<br>'."$message $err_not_allowed $err_for_type $type : $checked";
$flag_err=1;
}
} else {
if ($FIELDS_TYPES{$type}{$specifier} eq '1') {
$message=$SPECIFIERS_MESSAGES{$specifier};
$err_string.='<br>'."$message $err_required $err_for_type $type : $checked";
$flag_err=1;
} elsif ($FIELD_NAMES{$specifier}{0} eq $checked) {
if ($FIELDS_TYPES{$type}{$specifier} eq '-1') {
$message=$SPECIFIERS_MESSAGES{$specifier};
$err_string.='<br>'."$message $err_not_allowed $err_for_type $type : $checked";
$flag_err=1;
}
}
}
}
}
if ($#create_checked_items == -1) {
$err_string.='<br>'.$err_no_checked_fields;
$flag_err=1;
}
for ($extrn=1;$extrn<$#create_checked_items+1;$extrn++) {
for ($intrn=$extrn+1;$intrn<=$#create_checked_items+1;$intrn++) {
if ($FIELD_NAMES{'field_name'}{$create_checked_items[$extrn-1]} eq $FIELD_NAMES{'field_name'}{$create_checked_items[$intrn-1]}) {
$err_string.='<br>'."$err_same_name_fields $extrn , $intrn";
$flag_err=1;
}
}
}
if ((exists $FIELD_NAMES{'checked_item'}{$FIELD_NAMES{'auto_increment'}{0}}) and $FIELD_NAMES{'auto_increment'}{0}) {
my $local_err=1;
foreach my $key (keys %{$FIELD_NAMES{'primary_key'}}) {
if ($key eq $FIELD_NAMES{'auto_increment'}{0}) {
$local_err=0;
last;
}
}
if ($local_err) {
$err_string.='<br>'."$SPECIFIERS_MESSAGES{'auto_increment'} $js_ai_must_be_pkey $SPECIFIERS_MESSAGES{'primary_key'} : $FIELD_NAMES{'auto_increment'}{0}";
$flag_err=1;
}
}
foreach my $key (keys %{$FIELD_NAMES{'primary_key'}}) {
if (!exists $FIELD_NAMES{'checked_item'}{$FIELD_NAMES{'not_null'}{$key}}) {
$err_string.='<br>'."$SPECIFIERS_MESSAGES{'primary_key'} $js_pk_must_be_nn $SPECIFIERS_MESSAGES{'not_null'} : $key";
$flag_err=1;
last;
}
}
if ($flag_err) {
$err_string="<b>$err_error_word:</b> ".$err_string;
&write_labeled_message($err_string);
return 0;
} else {
return 1;
}
}
sub verify_checks_lite {
my ($flag_err,
$dim_hash_tabs,
$dim_hash_items,
$tabcheck_but,
$tabno_with_checked,
$dim_hash1,
$dim_hash2,
$norec_exist,
$norec_check,
@recerr_noex,
@recerr_nocheck,
@taberr_no,
$tab_string,
$err_string
);
$flag_err=0;
($dim_hash_tabs,$dim_hash_items,$norec_exist,$norec_check)=&sync_checked_items(\%CHECKED_TABLES,\%FIELD_NAMES);
if ($norec_exist) {
@recerr_noex=keys %NO_SYNC_INPUT_HASH1;
}
if (@recerr_noex) {
$tab_string="@recerr_noex";
$tab_string='<li>'.$tab_string;
$tab_string =~ s/ /<li>/g;
$err_string.="<br><b>$err_error_word:</b> $err_tab_check_wo_exist:<br>$tab_string<br>";
$flag_err=1;
}
if ($flag_err) {
&write_labeled_message($err_string);
return 0;
} else {
return 1;
}
}
sub verify_checks {
my ($flag_err,
$dim_hash_tabs,
$dim_hash_items,
$tabcheck_but,
$tabno_with_checked,
$dim_hash1,
$dim_hash2,
$norec_exist,
$norec_check,
@recerr_noex,
@recerr_nocheck,
@taberr_no,
$tab_string,
$err_string
);
$flag_err=0;
&get_checked_tables;
&get_checked_items;
($dim_hash_tabs,$dim_hash_items,$tabcheck_but,$tabno_with_checked)=&sync_checked_items(\%CHECKED_TABLES,\%CHECKED_ITEMS);
&get_field_names;
if ($tabno_with_checked) {
@taberr_no=keys %NO_SYNC_INPUT_HASH2;
$flag_err=1;
}
if ($tabcheck_but) {
foreach my $key (%NO_SYNC_INPUT_HASH1) {
$DUP_HASH{$key}=$NO_SYNC_INPUT_HASH1{$key};
}
($dim_hash1,$dim_hash2,$norec_exist,$norec_check)=&sync_checked_items(\%DUP_HASH,\%FIELD_NAMES);
if ($norec_exist) {
@recerr_noex=keys %NO_SYNC_INPUT_HASH1;
}
@recerr_nocheck=keys %FIELD_NAMES;
$flag_err=1;
}
if (@taberr_no) {
$tab_string="@taberr_no";
$tab_string='<li>'.$tab_string;
$tab_string =~ s/ /<li>/g;
$err_string="<br><b>$err_error_word:</b> $err_tab_no_check_with:<br>$tab_string<br>";
}
if (@recerr_noex) {
$tab_string="@recerr_noex";
$tab_string='<li>'.$tab_string;
$tab_string =~ s/ /<li>/g;
$err_string.="<br><b>$err_error_word:</b> $err_tab_check_wo_exist:<br>$tab_string<br>";
}
if (@recerr_nocheck) {
$tab_string="@recerr_nocheck";
$tab_string='<li>'.$tab_string;
$tab_string =~ s/ /<li>/g;
$err_string.="<br><b>$err_error_word:</b> $err_tab_check_wo_check:<br>$tab_string<br>";
}
if (!$flag_err and !$dim_hash_tabs) {
$err_string.="<b>$err_error_word:</b> $err_no_check_rec_tab";
$flag_err=1;
}
if ($flag_err) {
&write_labeled_message($err_string);
return 0;
} else {
return 1;
}
}
sub get_checked_tables {
my ($key,
$checked_table,
$table_name
);
my $tmp_delimiter=quotemeta($delimiter);
foreach $key (keys %CGI_INPUT) {
($checked_table,$table_name)=split /$tmp_delimiter/, $key;
if ($checked_table eq 'checked_table') {
$CHECKED_TABLES{$CGI_INPUT{$key}}=$table_name;
delete $CGI_INPUT{$key};
}
}
return %CHECKED_TABLES+0;
}
sub get_checked_items {
my ($num_of_items ,
$checked_item ,
$table_name ,
$relevant_name,
$id_number ,
$key
);
$num_of_items=0;
my $tmp_delimiter=quotemeta($delimiter);
foreach $key (keys %CGI_INPUT) {
($checked_item,$table_name,$relevant_name,$id_number)=split /$tmp_delimiter/, $key;
if ($checked_item eq "checked_item") {
$CHECKED_ITEMS{$table_name}{$relevant_name}{$id_number}=$CGI_INPUT{$key};
delete $CGI_INPUT{$key};
$num_of_items++;
}
}
return $num_of_items;
}
sub get_field_names {
my ($num_of_fields,
$field_name ,
$table_name ,
$id_number ,
$key
);
$num_of_fields=0;
my $tmp_delimiter=quotemeta($delimiter);
foreach $key (keys %CGI_INPUT) {
($field_name,$table_name,$id_number)=split /$tmp_delimiter/, $key;
if ($field_name eq "field_name") {
$FIELD_NAMES{$table_name}{$id_number}=$CGI_INPUT{$key};
delete $CGI_INPUT{$key};
$num_of_fields++;
}
}
return $num_of_fields;
}
sub get_fields_types {
my ($line,
@properties,
@specifiers,
$property_index,
$specifier,
$html_form_tag,
$js_property,
$appear,
$option
);
$line=<DATA>;
@properties=split /,/,$line;
foreach $property_index (1 .. $#properties) {
($specifier,$html_form_tag,$js_property,$appear)=split /\*/,$properties[$property_index];
$internal_SPECIFIERS_ORDER{$specifier}=$property_index;
$SPECIFIERS_PROPERTIES{$specifier}{'html'}=$html_form_tag;
$SPECIFIERS_PROPERTIES{$specifier}{'js'}=$js_property;
$SPECIFIERS_PROPERTIES{$specifier}{'appear'}=$appear;
}
while ($line=<DATA>) {
@specifiers=split /,/ , $line;
foreach $specifier (keys %internal_SPECIFIERS_ORDER) {
$FIELDS_TYPES{$specifiers[0]}{$specifier}=$specifiers[$internal_SPECIFIERS_ORDER{$specifier}];
}
$option.=qq{
<option>$specifiers[0]
};
}
return $option;
}
sub get_select_params {
my ($num_of_fields,
$select_param ,
$table_name ,
$action_name ,
$key
);
$num_of_fields=0;
my $tmp_delimiter=quotemeta($delimiter);
foreach $key (keys %CGI_INPUT) {
($select_param,$action_name,$table_name)=split /$tmp_delimiter/, $key;
if ($select_param eq "select_param") {
if ($table_name) {
$SELECT_PARAMS{$action_name}{$table_name}=$CGI_INPUT{$key};
} else {
$SELECT_PARAMS{$action_name}{'all_checked'}=$CGI_INPUT{$key};
}
delete $CGI_INPUT{$key};
$num_of_fields++;
}
}
return $num_of_fields;
}
sub get_field_values {
my ($num_of_value_fields,
$field_value ,
$table_name ,
$id_number ,
$field_name ,
$key_field ,
$key
);
$num_of_value_fields=0;
my $tmp_delimiter=quotemeta($delimiter);
foreach $key (keys %CGI_INPUT) {
($field_value,$id_number,$table_name,$field_name)=split /$tmp_delimiter/, $key;
if ($field_value eq 'field_value') {
if (exists $CHECKED_ITEMS{$table_name}) {
foreach $key_field (keys %{$CHECKED_ITEMS{$table_name}}) {
if (exists $CHECKED_ITEMS{$table_name}{$key_field}{$id_number}) {
$FIELD_VALUES{$table_name}{$id_number}{$field_name}=$CGI_INPUT{$key};
delete $CGI_INPUT{$key};
$num_of_value_fields++;
}
}
}
}
}
return $num_of_value_fields;
}
sub sync_checked_items {
my ($input_hash_ref1 ,
$input_hash_ref2 ,
$keys_equals ,
$index_input_keys1 ,
$index_input_keys2 ,
$lower_limit ,
$not_synced_end ,
$index_synced ,
$key ,
@input_keys1 ,
@input_keys2 ,
@synced_items ,
);
$input_hash_ref1=$_[0];
$input_hash_ref2=$_[1];
@input_keys1 =sort keys %{$input_hash_ref1};
@input_keys2 =sort keys %{$input_hash_ref2};
@synced_items =();
$lower_limit=0;
$keys_equals=0;
foreach $index_input_keys1 (0 .. $#input_keys1) {
if ($keys_equals) {$lower_limit++; $keys_equals=0;}
foreach $index_input_keys2 ($lower_limit .. $#input_keys2) {
if ($input_keys1[$index_input_keys1] eq $input_keys2[$index_input_keys2]) {
$synced_items[++$#synced_items]=$input_keys1[$index_input_keys1];
$keys_equals=1;
last;
}
}
}
undef %NO_SYNC_INPUT_HASH1;
undef %NO_SYNC_INPUT_HASH2;
$index_synced=0;
$not_synced_end=1;
foreach $key (sort keys %{$input_hash_ref1}) {
if ($not_synced_end) {
if ($synced_items[$index_synced] ne $key) {
$NO_SYNC_INPUT_HASH1{$key}=$key;
delete ${$input_hash_ref1}{$key};
} else {
if ($index_synced == $#synced_items) {$not_synced_end=0;} else {$index_synced++;}
}
} else {
$NO_SYNC_INPUT_HASH1{$key}=$key;
delete ${$input_hash_ref1}{$key};
}
}
$index_synced=0;
$not_synced_end=1;
foreach $key (sort keys %{$input_hash_ref2}) {
if ($not_synced_end) {
if ($synced_items[$index_synced] ne $key) {
$NO_SYNC_INPUT_HASH2{$key}=1;
delete ${$input_hash_ref2}{$key};
} else {
if ($index_synced == $#synced_items) {$not_synced_end=0;} else {$index_synced++;}
}
} else {
$NO_SYNC_INPUT_HASH2{$key}=1;
delete ${$input_hash_ref2}{$key};
}
}
return %{$input_hash_ref1}+0,%{$input_hash_ref2}+0,%NO_SYNC_INPUT_HASH1+0,%NO_SYNC_INPUT_HASH2+0;
}
sub get_current_select_params {
my ($table_name,
$limit,
$offset_value,
$where_field,
$where_value,
$where_method,
$orderby_field,
$orderby_method
);
$table_name=$_[0];
if (exists $SELECT_PARAMS{'where'}{$table_name}) {
$where_field=$SELECT_PARAMS{'where_field'}{$table_name};
$where_value=$dbh->quote($SELECT_PARAMS{'where_value'}{$table_name});
$where_method=$SELECT_PARAMS{'where_method'}{$table_name};
}
if (exists $SELECT_PARAMS{'orderby'}{$table_name}) {
$orderby_field=$SELECT_PARAMS{'orderby_field'}{$table_name};
$orderby_method=$SELECT_PARAMS{'orderby_method'}{$table_name};
}
if (exists $SELECT_PARAMS{'limit'}{$table_name}) {
$limit=$SELECT_PARAMS{'limit'}{$table_name};
} else {
$limit=$SELECT_PARAMS{'limit'}{'all_checked'};
}
if (exists $SELECT_PARAMS{'offset'}{$table_name}) {
$offset_value=$SELECT_PARAMS{'offset_value'}{$table_name};
} elsif (exists $SELECT_PARAMS{'offset'}{'all_checked'}) {
$offset_value=$SELECT_PARAMS{'offset_value'}{'all_checked'};
}
return $limit,$offset_value,$where_field,$where_value,$where_method,$orderby_field,$orderby_method;
}
#===============================================
# perform_action subroutines
#===============================================
sub perform_action {
my ($message,$error_message);
if ($create_enabled and $flag_ok and $CGI_INPUT{createcheck}) {
&get_fields_types;
&get_field_names;
if (&create) {
$message=$ok_create;
&write_labeled_message($message);
} else {
$error_message="<b>$err_error_word:</b> $ko_create<br><b>$err_details_word:</b> $global_err";
&write_labeled_message($error_message);
}
$flag_ok=0;
}
if ($insertrecord_enabled and $flag_ok and $CGI_INPUT{insertok}) {
&get_checked_tables;
&get_checked_items;
&get_field_values;
if (&insert_records) {
$message=$ok_insert;
&write_labeled_message($message);
} else {
$error_message="<b>$err_error_word:</b> $ko_insert<br><b>$err_details_word:</b> $global_err";
&write_labeled_message($error_message);
}
$flag_ok=0;
}
if ($updaterecord_enabled and $flag_ok and $CGI_INPUT{updateok}) {
&get_checked_tables;
&get_checked_items;
&get_field_values;
if (&update_records) {
$message=$ok_update;
&write_labeled_message($message);
} else {
$error_message="<b>$err_error_word:</b> $ko_update<br><b>$err_details_word:</b> $global_err";
&write_labeled_message($error_message);
}
$flag_ok=0;
}
if ($delete_enabled and $flag_ok and $CGI_INPUT{deleteok}) {
&get_checked_tables;
&get_checked_items;
if (&delete) {
$message=$ok_delete;
&write_labeled_message($message);
} else {
$error_message="<b>$err_error_word:</b> $ko_delete<br><b>$err_details_word:</b> $global_err";
&write_labeled_message($error_message);
}
$flag_ok=0;
}
if ($drop_enabled and $flag_ok and $CGI_INPUT{dropok}) {
&get_checked_tables;
if (&drop) {
$message=$ok_drop;
&write_labeled_message($message);
} else {
$error_message="<b>$err_error_word:</b> $ko_drop<br><b>$err_details_word:</b> $global_err";
&write_labeled_message($error_message);
}
$flag_ok=0;
}
if ($fquery_enabled and $flag_ok and $CGI_INPUT{fqueryok}) {
#&get_fquery;
if (&perform_fquery) {
$message=$ok_fquery;
&write_labeled_message($message);
if (!$fquery_output) {$fquery_output=$fquery_no_output}
print qq{
<div align="center"><form name="dummy">
<textarea cols="$cols_fquery_texta_out" rows="$rows_fquery_texta_out">$fquery_output</textarea>
</form></div>
};
} else {
$error_message="<b>$err_error_word:</b> $ko_fquery<br><b>$err_details_word:</b> $global_err";
&write_labeled_message($error_message);
}
$flag_ok=0;
}
print qq{
<br>
<form name="the_script" method="POST" action="$thiscgi">
<input type="hidden" name="current_db" value="$current_db">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
<div align="center">
<table border="0" cellpadding="1" cellspacing="0">
<tr>
<td bgcolor="#000000" align="center">
<table border="0" cellspacing="0" cellpadding="5" BGCOLOR="$table_color" width="100%">
<tr>
<td>
<table border="0" cellspacing="2" cellpadding="2" BGCOLOR="$table_color">
};
my $current_table_number=1;
$relevant_js_obj=3;
if (!($prepare_create_enabled and $CGI_INPUT{create})) {
if (!&list_tables) {
$empty_db=1;
print q{
<tr>
<td align=center>
};
&write_labeled_message("$err_db_empty");
print q{
</td>
</tr>
};
}
} else {
&main_create;
}
foreach my $current_table (@tables_names) {
if ($current_table =~ /configuration/ ) {
print qq{
<tr>
<td align="center" bgcolor="$table_checkb_td_color">
<FONT FACE="$numb_table_checkb_ff" SIZE="$numb_table_checkb_fs" COLOR="$numb_table_checkb_col">
$current_table_number
</font>
};
if ($drop_enabled or $describe_enabled or $new_enabled or $select_enabled or $prepare_enabled) {
my $tmp_name='checked_table'.$delimiter.$current_table;
if ($flag_ok and exists $CHECKED_TABLES{$current_table}) {
print qq{
<input type="checkbox" checked name="$tmp_name" value="$current_table">
};
} else {
print qq{
<input type="checkbox" name="$tmp_name" value="$current_table">
};
}
}
print qq{
</td>
<td><FONT FACE="$tablename_font_face" SIZE="$tablename_font_size" COLOR="$tablename_font_color">
$current_table
</font>
</td>
</tr>
};
$javascript_objects[$current_table_number]->{'object_number'}=$relevant_js_obj;
$javascript_objects[$current_table_number]->{'dim_array_obj_num'}=0;
$relevant_js_obj++;
if ($describe_enabled and $flag_ok and $CGI_INPUT{describe}) {
if (exists $CHECKED_TABLES{$current_table}) {
&main_describe($current_table);
}
}
if ($select_enabled and $flag_ok and $CGI_INPUT{select}) {
if (exists $CHECKED_TABLES{$current_table}) {
&main_select($current_table,$current_table_number);
}
}
if ($prepare_enabled and $flag_ok and $CGI_INPUT{prepare}) {
if (exists $CHECKED_TABLES{$current_table}) {
&main_prepare($current_table,$current_table_number);
}
}
if ($new_enabled and $flag_ok and $CGI_INPUT{new}) {
if (exists $CHECKED_TABLES{$current_table}) {
&main_new($current_table,$current_table_number);
}
}
if ($selectfields_enabled and $flag_ok and $CGI_INPUT{selectfields}) {
if (exists $CHECKED_TABLES{$current_table}) {
&main_selectfields($current_table,$current_table_number);
}
}
if ($edititem_enabled and $flag_ok and $CGI_INPUT{edititem}) {
if (exists $CHECKED_TABLES{$current_table}) {
&main_edititem($current_table,$current_table_number);
}
}
$current_table_number++;
}
}
print q{
</table>
</td>
</tr>
};
if (!$empty_db) {
if (((($drop_enabled or $describe_enabled or ($javascript_enabled and $new_enabled) or ($javascript_enabled and $select_enabled) or ($javascript_enabled and $prepare_enabled))) or ($new_enabled or ($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled)) or ($flag_ok and ($edititem_enabled and $CGI_INPUT{edititem} and $updaterecord_enabled)) or ($flag_ok and ($new_enabled and $CGI_INPUT{new} and $insertrecord_enabled))) or ($select_enabled or ($selectfields_enabled and $CGI_INPUT{selectfields}) or $prepare_enabled)) and (!$CGI_INPUT{create})) {
print q{
<tr>
<td>
};
&put_buttons;
print q{
</td>
</tr>
};
} elsif ($CGI_INPUT{create} and $prepare_create_enabled) {
#print q{<tr><td>};
&put_create_related_buttons;
#print q{</td></tr>};
}
} else {
&put_database_related_buttons;
if ($create_enabled) {
&put_create_button;
}
}
print q{
</table>
</td>
</tr>
</table>
</div>
</form>
};
if (!$empty_db and $javascript_enabled and !$CGI_INPUT{create}) {&put_javascript;}
if ($CGI_INPUT{create} and $prepare_create_enabled and $javascript_enabled) {&put_javascript_for_create;}
$dbh->disconnect;
}
sub put_create_button {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_tables</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="submit" name="create" value="$button_prepare_create">
$number_of_fields
<select name="new_fields">
$new_fields
</select>
</font>
</td>
</tr>
</table>
</td>
</tr>
};
}
sub prompt_db_choice {
my $db_position;
print qq{
<br>
<div align="center">
<table border=0 cellpadding=1 cellspacing=0>
<tr>
<td bgcolor="#000000">
<table border="0" cellspacing="0" cellpadding="5" BGCOLOR="$table_color">
<tr>
<td>
<table border="0" cellspacing="2" cellpadding="2" BGCOLOR="$table_color">
};
foreach $db_position (sort numerically keys %DATABASES) {
print qq{
<form name="the_script" method="POST" action="$thiscgi">
<tr>
<td><font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="db_choice" value="$button_db_choice">
<input type="hidden" name="current_db" value="$db_position">
<input type="hidden" name="current_user" value="$current_user">
<input type="hidden" name="current_pwd" value="$current_pwd">
</font>
</td>
<td><font face="$button_font_face" size="$button_font_size" color="$button_font_color">
$DATABASES{$db_position}{'db_description'}
</font>
</td>
</tr>
</form>
};
}
if ($login_prompt) {
print q{
<tr>
<td colspan=2 align=center><table border=0>
};
&put_user_related_buttons;
print q{
</td>
</tr></table>
};
}
print q{
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
};
}
sub prompt_user_login {
my $state=$_[0];
print qq{
<br>
<div align="center">
<table border=0 cellpadding=1 cellspacing=0>
<tr>
<td bgcolor="#000000">
<table border="0" cellspacing="0" cellpadding="5" BGCOLOR="$table_color">
<tr>
<td>
<table border="0" cellspacing="2" cellpadding="2" BGCOLOR="$table_color">
};
if ($state eq 'failed') {
print qq{<tr><td colspan=2 align=center>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color_log_fail">
<b>$user_login_fail_prompt</b>
</font>
</td></tr>
};
}
print qq{
<form name="the_script" method="POST" action="$thiscgi">
<tr>
<td><FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$user_id</b>
</font>
</td>
<td><FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<input type="text" name="user_id" value="">
</font>
</td>
</tr>
<tr>
<td><FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$user_pwd</b>
</font>
</td>
<td><FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<input type="password" name="user_pwd" value="">
</font>
</td>
</tr>
<tr>
<td colspan=2 align=center><font face="$button_font_face" size="$button_font_size" color="$button_font_color">
<input type="submit" name="user_login" value="$button_user_login">
</font>
</td>
</tr>
</form>
};
print q{
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
};
}
sub put_user_related_buttons {
if ($login_prompt) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_user</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
$current_user_msg <b>$current_user</b>
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
print qq{
<a href="$thiscgi">$button_user_logout</a>
};
print q{
</font>
</td>
</tr>
</table>
</td>
</tr>
};
}
}
sub put_database_related_buttons {
if ($database_prompt or $refresh_enabled) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_dbs</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
if ($database_prompt) {
print qq{
<input type="submit" name="go_to_db_choice" value="$button_go_to_db_choice">
};
}
if ($refresh_enabled) {
print qq{
<input type="submit" name="refresh" value="$button_refresh">
};
}
print q{
</font>
</td>
</tr>
</table>
</td>
</tr>
};
}
}
sub put_create_related_buttons {
&put_user_related_buttons;
&put_database_related_buttons;
if ($create_enabled) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_tables</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
print qq{
<input type="submit" name="createok" value="$button_create"};
if ($javascript_enabled) {
print qq{ onClick="return (verify_table_name() && verify_checked_fields() && verify_fields_names() && verify_equal_fields_names() && verify_create_specifiers());">};
} else {
print q{>};
}
if ($prepare_create_enabled) {
print q{
<br>
};
print qq{
<input type="submit" name="create" value="$button_prepare_create">
$number_of_fields
<select name="new_fields">
$new_fields
</select>
};
}
print q{
</font>
</td>
</tr>
</table>
};
}
if ($javascript_enabled) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_fields</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="button" value="$button_js_check_fld" onClick="check_fields();">
<input type="button" value="$button_js_unchk_fld" onClick="uncheck_fields();">
</font>
</td>
</tr>
</table>
</td>
</tr>
};
}
if ($fquery_enabled) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$fquery</b>
</font>
<table border=1>
<tr>
<td>
};
print qq{
<textarea cols="$cols_fquery_textarea" rows="$rows_fquery_textarea" name="fquery_textarea"></textarea>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="submit" name="fquery" value="$button_fquery">
</font>
};
print q{
</td>
</tr>
</table>
</td>
</tr>
};
}
if ($create_enabled or $javascript_enabled or $fquery_enabled) {
print q{
</td>
</tr>
</table>
};
}
}
sub put_buttons {
my (
$tmp_name1,
$tmp_name2,
$tmp_name3
);
my $br_for_new_enabled=0;
print qq{
<table border="0" cellspacing="1" cellpadding="1" BGCOLOR="$table_color">
};
&put_user_related_buttons;
&put_database_related_buttons;
if ($drop_enabled or $describe_enabled or $prepare_create_enabled or ($javascript_enabled and $new_enabled) or ($javascript_enabled and $select_enabled) or ($javascript_enabled and $prepare_enabled)) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_tables</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
if ($drop_enabled) {
print qq{
<input type="submit" name="drop" value="$button_drop"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return verify_checked_tables();">};
} else {
print q{>};
}
}
if ($describe_enabled) {
print qq{
<input type="submit" name="describe" value="$button_describe"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return verify_checked_tables();">};
} else {
print q{>};
}
}
if ($prepare_create_enabled) {
if ($drop_enabled or $describe_enabled) {
print q{
<br>
};
}
print qq{
<input type="submit" name="create" value="$button_prepare_create">
$number_of_fields
<select name="new_fields">
$new_fields
</select>
};
}
if (!$empty_db and $javascript_enabled) {
if ($drop_enabled or $describe_enabled) {
print qq{
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
}
print qq{
<input type="button" value="$button_js_check_tab" onClick="check_tables();"><br>
<input type="button" value="$button_js_unchk_tab" onClick="uncheck_tables();">
};
}
print q{
</font>
</td>
</tr>
</table>
</td>
</tr>
};
}
if ($new_enabled or ($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled)) or ($flag_ok and ($edititem_enabled and $CGI_INPUT{edititem} and $updaterecord_enabled)) or ($flag_ok and ($new_enabled and $CGI_INPUT{new} and $insertrecord_enabled))) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operation_on_records</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
if ($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields}))) {
if ($edititem_enabled) {
$br_for_new_enabled=1;
print qq{
<input type="submit" name="edititem" value="$button_edit"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return (verify_checked_records() && verify_checked_tables());">};
} else {
print q{>};
}
}
if ($delete_enabled) {
$br_for_new_enabled=1;
print qq{
<input type="submit" name="delete" value="$button_delete"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return (verify_checked_records() && verify_checked_tables());">};
} else {
print q{>};
}
}
}
if ($flag_ok and ($edititem_enabled and $CGI_INPUT{edititem} and $updaterecord_enabled)) {
$br_for_new_enabled=1;
print qq{
<input type="submit" name="updaterecord" value="$button_update"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return (verify_checked_records() && verify_checked_tables());">};
} else {
print q{>};
}
}
if ($flag_ok and ($new_enabled and $CGI_INPUT{new} and $insertrecord_enabled)) {
$br_for_new_enabled=1;
print qq{
<input type="submit" name="insertrecord" value="$button_insert"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return (verify_checked_records() && verify_checked_tables());">};
} else {
print q{>};
}
}
if ($new_enabled) {
if ($br_for_new_enabled) {
print q{
<br>
};
}
print qq{
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="submit" name="new" value="$button_new"
};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return verify_checked_tables();">};
} else {
print q{>};
}
print qq{
</font>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<select name="new_elem">
$new_values
</select>
</font>
};
}
print q{
</font>
</td>
</tr>
</table>
</td>
</tr>
};
}
if ($select_enabled or ($selectfields_enabled and $CGI_INPUT{selectfields}) or $prepare_enabled) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$operations_on_query</b>
</font>
<table border=1>
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
if ($prepare_enabled) {
print qq{
<input type="submit" name="prepare" value="$button_prepare"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return verify_checked_tables();">};
} else {
print q{>};
}
print q{
<br>
};
}
if ($select_enabled) {
if ($selectfields_enabled and ($prepare_enabled and $CGI_INPUT{prepare})) {
print qq{
<input type="hidden" name="withselectfields" value="1">
<input type="submit" name="select" value="$button_select_all"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return (verify_existing_fields() && verify_checked_tables());">};
} else {
print q{>};
}
} else {
print qq{
<input type="submit" name="select" value="$button_select_all"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return verify_checked_tables();">};
} else {
print q{>};
}
}
}
if ($flag_ok and $selectfields_enabled and ($prepare_enabled and $CGI_INPUT{prepare})) {
print qq{
<br>
<input type="submit" name="selectfields" value="$button_select_chk"};
if (!$empty_db and $javascript_enabled) {
print q{ onClick="return (verify_checked_records() && verify_checked_tables());">};
} else {
print q{>};
}
}
if ($select_enabled or $selectfields_enabled) {
if ($flag_ok and ($prepare_enabled and $CGI_INPUT{prepare}) and $selectfields_enabled) {
print q{
</font>
</td>
<td align="right">
<table border="0">
};
foreach my $table_name (sort keys %PREPARE_NAMES) {
print qq{
<tr>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color"> from <b>$table_name</b>
</font>
</td>
};
$tmp_name1='select_param'.$delimiter.'where'.$delimiter.$table_name;
print qq{
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="checkbox" name="$tmp_name1" value=on> $query_where
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
};
$tmp_name1='select_param'.$delimiter.'where_field'.$delimiter.$table_name;
print qq{
<select name="$tmp_name1">
};
my $tmp_fields_names='';
foreach my $field_name (@{$PREPARE_NAMES{$table_name}}) {
$tmp_fields_names.=qq{
<option>$field_name
};
}
print qq{
$tmp_fields_names
</select>
</font>
</td>
};
$tmp_name1='select_param'.$delimiter.'where_method'.$delimiter.$table_name;
$tmp_name2='select_param'.$delimiter.'where_value'.$delimiter.$table_name;
print qq{
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<select name="$tmp_name1">
$select_params
</select>
<input type="text" name="$tmp_name2" size="$where_text_size">
</font>
</td>
};
$tmp_name1='select_param'.$delimiter.'orderby'.$delimiter.$table_name;
$tmp_name2='select_param'.$delimiter.'orderby_field'.$delimiter.$table_name;
$tmp_name3='select_param'.$delimiter.'orderby_method'.$delimiter.$table_name;
print qq{
</tr>
<tr>
<td> </td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="checkbox" name="$tmp_name1" value=on> $query_order_by
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<select name="$tmp_name2">
$tmp_fields_names
</select>
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<select name="$tmp_name3">
$orderby_params
</select>
</font>
</td>
};
$tmp_name1='select_param'.$delimiter.'limit'.$delimiter.$table_name;
$tmp_name2='select_param'.$delimiter.'offset'.$delimiter.$table_name;
$tmp_name3='select_param'.$delimiter.'offset_value'.$delimiter.$table_name;
print qq{
</tr>
<tr>
<td> </td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
$query_limit
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<select name="$tmp_name1">
$limit_values
</select>
</font>
</td>
<td>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="checkbox" name="$tmp_name2" value=on> $query_offset
<select name="$tmp_name3">
$limit_offset_values
</select>
</font>
</td>
</tr>
};
}
print q{
</table>
</td>
</tr>
};
} elsif ($select_enabled) {
print q{
</font>
};
$tmp_name1='select_param'.$delimiter.'limit'.$delimiter;
$tmp_name2='select_param'.$delimiter.'offset'.$delimiter;
$tmp_name3='select_param'.$delimiter.'offset_value'.$delimiter;
print qq{
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
$query_limit
<select name="$tmp_name1">
$limit_values
</select>
<input type="checkbox" name="$tmp_name2" value=on> $query_offset
<select name="$tmp_name3">
$limit_offset_values
</select>
</font>
</td>
</tr>
};
}
}
print q{
</table>
</td>
</tr>
};
}
if ($fquery_enabled) {
print qq{
<tr>
<td>
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<b>$fquery</b>
</font>
<table border=1>
<tr>
<td>
};
print qq{
<textarea cols="$cols_fquery_textarea" rows="$rows_fquery_textarea" name="fquery_textarea"></textarea>
<FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="submit" name="fquery" value="$button_fquery">
</font>
};
print q{
</td>
</tr>
</table>
</td>
</tr>
};
}
print q{
</table>
};
}
sub main_create {
my ($new_fields,$fields_types,$specifier,$check_name,$check_value,$message,$specifier_bgcolor);
$check_name='table_name';
my $create_table_name_colspan=keys(%SPECIFIERS_ORDER)+1;
print qq{
<tr>
<td bgcolor="$table_td_color" colspan="$create_table_name_colspan">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
$SPECIFIERS_MESSAGES{'table_name'}
<input type="text" name="$check_name" value="" size="$text_size_4_create" maxlength="$maxlength_4_create">
</font>
</td>
</tr>
<tr>
<td bgcolor="$table_td_color"> </td>
};
foreach $specifier (sort { $SPECIFIERS_ORDER{$a} <=> $SPECIFIERS_ORDER{$b} } keys %SPECIFIERS_ORDER) {
$message=$SPECIFIERS_MESSAGES{$specifier};
if ($specifier eq 'primary_key') {
$specifier_bgcolor=$pri_key_color;
} else {
$specifier_bgcolor=$field_color;
}
print qq{
<td bgcolor="$specifier_bgcolor" align="center">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
$message
</font>
</td>
};
}
print q{
</tr>
};
$fields_types=&get_fields_types;
foreach my $new_field (1 .. $CGI_INPUT{new_fields}) {
$check_name='field_name'.$delimiter.'checked_item'.$delimiter.$new_field;
$check_value='';
print qq{
<tr>
<td bgcolor="$rec_checkb_td_color" align="left">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
$new_field
<input type="checkbox" name="$check_name" value="$check_value">
</font>
</td>
};
foreach $specifier (sort { $SPECIFIERS_ORDER{$a} <=> $SPECIFIERS_ORDER{$b} } keys %SPECIFIERS_ORDER) {
if ($specifier eq 'field_name') {
$check_name='field_name'.$delimiter.'field_name'.$delimiter.$new_field;
print qq{
<td bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
<input type="text" name="$check_name" value="" size="$text_size_4_create" maxlength="$maxlength_4_create">
</font>
</td>
};
} elsif ($specifier eq 'field_type') {
$check_name='field_name'.$delimiter.'field_type'.$delimiter.$new_field;
print qq{
<td bgcolor="$rec_checkb_td_color" align="center">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
<select name="$check_name">
$fields_types
</select>
</font>
</td>
};
} else {
if (($specifier eq 'auto_increment')) {
$check_name='field_name'.$delimiter.$specifier.$delimiter.'0';
$check_value=$new_field;
} else {
$check_name='field_name'.$delimiter.$specifier.$delimiter.$new_field;
$check_value=1;
}
print qq{
<td bgcolor="$rec_checkb_td_color" align="center">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
};
if ($SPECIFIERS_PROPERTIES{$specifier}{'html'} eq 'text') {
print qq{
<input type="text" name="$check_name" value="" size="$text_size_4_specif">
};
} else {
print qq{
<input type="$SPECIFIERS_PROPERTIES{$specifier}{'html'}" name="$check_name" value="$check_value">
};
}
print q{
</font>
</td>
};
}
}
print q{
</tr>
};
}
}
sub main_prepare {
my $current_table=$_[0];
my $current_table_number=$_[1];
my $current_bgcolor;
print q{<tr>
<td> </td>
<td><table><tr>
};
&get_pri_key($current_table);
my $pri_key;
foreach (@ARRAY_pri_keys) {
$pri_key.=$_.$pri_key_delimiter
}
substr($pri_key,-length($pri_key_delimiter))='';
&prepare($current_table);
my $num=0;
foreach my $elem (0..$#{$descarray}) {
if (exists $HASH_pri_keys{${$descarray}[$elem]}) {$current_bgcolor=$pri_key_color;} else {$current_bgcolor=$field_color;}
my $item_name='checked_item'.$delimiter.$current_table.$delimiter.$pri_key.$delimiter.$num;
my $item_value=${$descarray}[$elem];
my $field_name='field_name'.$delimiter.$current_table.$delimiter.$num;
my $field_value=${$descarray}[$elem];
if ($selectfields_enabled) {
print qq{
<input type="hidden" name="$field_name" value="$field_value">
<td bgcolor="$current_bgcolor">
<input type="checkbox" name="$item_name" value="$item_value">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
} else {
print qq{
<td bgcolor="$current_bgcolor">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
}
print ${$descarray}[$elem];
print q{
</font>
</td>
};
$javascript_objects[$current_table_number]->{'array_obj_num'}[++$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}]=$relevant_js_obj+1;
$num++;
if ($selectfields_enabled) {
$relevant_js_obj+=2;
}
}
$javascript_objects[$current_table_number]->{'dim_array_obj_num'}=$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}+1;
print q{
</tr>
};
print q{
</table>
</td>
</tr>
};
}
sub main_new {
my $current_table=$_[0];
my $current_table_number=$_[1];
my $current_bgcolor;
my $elem;
print q{<tr>
<td> </td>
<td><table border="0"><tr><td> </td>
};
&get_pri_key($current_table);
&prepare($current_table);
foreach $elem (0 .. $#{$descarray}) {
if (exists $HASH_pri_keys{${$descarray}[$elem]}) {$current_bgcolor=$pri_key_color;} else {$current_bgcolor=$field_color;}
my $field_name='field_name'.$delimiter.$current_table.$delimiter.$elem;
my $field_value=${$descarray}[$elem];
print qq{
<input type="hidden" name="$field_name" value="$field_value">
<td bgcolor="$current_bgcolor">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
if (${$descarray}[$elem] ne '') {
print ${$descarray}[$elem];
} else {
print q{
};
}
print q{
</font>
</td>
};
}
$relevant_js_obj+=@{$descarray};
my $num=0;
print q{
</tr>
};
foreach my $new_elem (1 .. $CGI_INPUT{new_elem}) {
print qq{
<tr><td bgcolor="$rec_checkb_td_color">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
};
print $new_elem;
my $pri_key;
foreach (@ARRAY_pri_keys) {
$pri_key.=$_.$pri_key_delimiter
}
substr($pri_key,-length($pri_key_delimiter))='';
my $check_name='checked_item'.$delimiter.$current_table.$delimiter.$pri_key.$delimiter.$num;
my $check_value=${$descarray}[$elem];
if ($flag_ok and ($new_enabled and $CGI_INPUT{new} and $insertrecord_enabled)) {
print qq{
<input type="checkbox" name="$check_name" value="$check_value">
};
}
print q{
</font>
</td>
};
$javascript_objects[$current_table_number]->{'array_obj_num'}[++$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}]=$relevant_js_obj;
foreach my $elem (@{$descarray}) {
print qq{
<td bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
my $name='field_value'.$delimiter.$num.$delimiter.$current_table.$delimiter.$elem;
if ($new_textarea_enabled) {
print qq{\n<textarea wrap="off" cols="$cols_new_textarea" rows="$rows_new_textarea" name="$name"></textarea>};
} else {
print qq{
<input type="text" name="$name" value="" size="$input_text_size">
};
}
print q{
</font>
</td>
};
}
if ($flag_ok and ($new_enabled and $CGI_INPUT{new} and $insertrecord_enabled)) {
$relevant_js_obj+=@{$descarray}+1;
} else {
$relevant_js_obj+=@{$descarray};
}
$num++;
print q{
</tr>
};
}
if ($javascript_enabled) {
if ($flag_ok and ($new_enabled and $CGI_INPUT{new} and $insertrecord_enabled and $CGI_INPUT{new_elem})) {
$num=$#{$descarray}+2;
print qq{
<tr>
<td align="left" colspan="$num"><FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="button" value="$button_js_check_rec" onClick="check_records($current_table_number);">
<input type="button" value="$button_js_unchk_rec" onClick="uncheck_records($current_table_number);">
</font>
</td>
</tr>
};
$relevant_js_obj+=2;
}
}
print q{
</table>
</td>
</tr>
};
$javascript_objects[$current_table_number]->{'dim_array_obj_num'}=$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}+1;
}
sub main_selectfields {
my $current_table=$_[0];
my $current_table_number=$_[1];
my $num=0;
my $items_string;
my $current_bgcolor;
my $name;
my $value;
print q{
<tr>
<td> </td>
<td><table border="0"><tr><td> </td>
};
my $pri_key_string=&get_pri_key($current_table);
foreach (@ARRAY_pri_keys) {
$items_string.=$_.','
}
foreach my $relevant_name (keys %{$CHECKED_ITEMS{$current_table}}) {
foreach my $number (sort numerically keys %{$CHECKED_ITEMS{$current_table}{$relevant_name}}) {
$items_string.=$CHECKED_ITEMS{$current_table}{$relevant_name}{$number}.',';
}
}
chop($items_string);
my $select_string='select '.$items_string.' from '.$current_table;
my ($limit,$offset_value,$where_field,$where_value,$where_method,$orderby_field,$orderby_method)=&get_current_select_params($current_table);
if ($where_field) {
$select_string.=' where ('.$where_field.' '.$where_method.' '.$where_value.')';
}
if ($orderby_field) {
$select_string.=' order by '.$orderby_field.' '.$orderby_method;
}
if ($offset_value) {
$select_string.=' limit '.$offset_value.','.$limit;
} else {
$select_string.=' limit '.$limit;
}
&select($select_string);
foreach my $elem ($#ARRAY_pri_keys+1..$#{$descarray}) {
if (exists $HASH_pri_keys{${$descarray}[$elem]}) {$current_bgcolor=$pri_key_color;} else {$current_bgcolor=$field_color;}
$name='field_name'.$delimiter.$current_table.$delimiter.$num;
$value=${$descarray}[$elem];
print qq{
<input type=hidden name="$name" value="$value">
<td bgcolor="$current_bgcolor">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
${$descarray}[$elem]
</font>
</td>
};
$num++;
}
print q{
</tr>
};
$relevant_js_obj+=$#{$descarray}-$#ARRAY_pri_keys;
$num=0;
my $countrows=1;
foreach my $elem (@{$elem_select}) {
$name='checked_item'.$delimiter.$current_table.$delimiter.$pri_key_string.$delimiter.$num;
my $pri_key;
foreach (@ARRAY_pri_keys) {
$pri_key.=${$elem}[$HASH_pri_keys{$_}].$pri_key_delimiter
}
substr($pri_key,-length($pri_key_delimiter))='';
$value=$pri_key;
print qq{
<tr><td bgcolor="$rec_checkb_td_color">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
};
print $countrows;
if (($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled))) {
print qq{ <input type="checkbox" name="$name" value="$value">};
}
print q{
</font>
</td>
};
$countrows++;
foreach my $row_elem_index ($#ARRAY_pri_keys+1..$#{$elem}) {
print qq{
<td bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
if (${$elem}[$row_elem_index] ne '') {
${$elem}[$row_elem_index]=&html2txt(${$elem}[$row_elem_index],'br');
print ${$elem}[$row_elem_index];
} else {
print q{
};
}
print q{
</font>
</td>
};
}
print q{
</tr>
};
$javascript_objects[$current_table_number]->{'array_obj_num'}[++$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}]=$relevant_js_obj;
$num++;
if (($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled))) {
$relevant_js_obj++;
}
}
if ($#{$elem_select} == -1) {
$num=$#{$descarray};
print qq{
<tr><td> </td><td align="center" colspan="$num" bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">$err_not_present</font></td>
};
} elsif ($javascript_enabled) {
if (($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled))) {
$num=$#{$descarray}+1;
print qq{
<tr>
<td align="left" colspan="$num"><FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="button" value="$button_js_check_rec" onClick="check_records($current_table_number);">
<input type="button" value="$button_js_unchk_rec" onClick="uncheck_records($current_table_number);">
</font>
</td>
</tr>
};
$relevant_js_obj+=2;
}
}
$javascript_objects[$current_table_number]->{'dim_array_obj_num'}=$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}+1;
print q{
</table>
</td>
</tr>
};
}
sub main_describe {
my $current_table=$_[0];
my $current_bgcolor;
&get_pri_key($current_table);
&describe($current_table);
print q{
<tr>
<td> </td>
<td><table>
};
foreach my $elem (@{$descarray_describe}) {
if (exists $HASH_pri_keys{$elem}) {$current_bgcolor=$pri_key_color;} else {$current_bgcolor=$field_color;}
print qq{
<td bgcolor="$current_bgcolor">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
$elem
</font>
</td>
};
}
print q{
</tr>
};
foreach my $elem (@{$elem_describe}) {
print q{
<tr>
};
foreach my $row_elem (@{$elem}) {
print qq{
<td bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
if ($row_elem ne '') {
print $row_elem;
} else {
print q{
};
}
print q{
</font>
</td>
};
}
print q{
</tr>
};
}
print q{
</table>
</td>
</tr>
};
}
sub main_edititem {
my $current_table=$_[0];
my $current_table_number=$_[1];
my $num=0;
my $items_string='';
my $colspan_no_prikey=0;
my $current_bgcolor;
my $value;
my $name;
my $elem;
print q{
<tr>
<td> </td>
<td><table><tr><td> </td>
};
my $pri_key_string=&get_pri_key($current_table);
foreach (@ARRAY_pri_keys) {
$items_string.=$_.','
}
foreach my $id_num (sort numerically keys %{$FIELD_NAMES{$current_table}}) {
if (exists $HASH_pri_keys{$FIELD_NAMES{$current_table}{$id_num}}) {$current_bgcolor=$pri_key_color;} else {$current_bgcolor=$field_color;}
my $field_name='field_name'.$delimiter.$current_table.$delimiter.$num;
my $field_value=${$descarray}[$num];
print qq{
<input type="hidden" name="$field_name" value="$field_value">
<td bgcolor="$current_bgcolor">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
$items_string.=$FIELD_NAMES{$current_table}{$id_num}.',';
print $FIELD_NAMES{$current_table}{$id_num};
print q{
</font>
</td>
};
$num++;
}
$colspan_no_prikey=$num;
chop($items_string);
$relevant_js_obj+=$num;
$num=0;
my $countrows=1;
foreach my $number (sort numerically keys %{$CHECKED_ITEMS{$current_table}{$pri_key_string}}) {
if (!$pri_key_string) {
print qq{
<tr><td> </td>
<td bgcolor="$rec_checkb_td_color" colspan="$colspan_no_prikey" align="center">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
$err_no_prikey
</font>
</td>
</tr>
};
last;
}
my $where_string_pri_keys;
my $tmp_pri_key_delimiter=quotemeta($pri_key_delimiter);
my @pri_keys=split /$tmp_pri_key_delimiter/,$pri_key_string;
my @pri_keys_values=split /$tmp_pri_key_delimiter/,$CHECKED_ITEMS{$current_table}{$pri_key_string}{$number};
foreach (0..$#pri_keys) {
my $quoted_value=$pri_keys_values[$_];
if ($quoted_value eq '') {
$quoted_value="''";
} else {
$quoted_value=$dbh->quote($quoted_value);
$quoted_value=~s/%/\\%/g;
$quoted_value=~s/_/\\_/g;
}
$where_string_pri_keys.="($pri_keys[$_] like $quoted_value) and ";
}
substr($where_string_pri_keys,-5)='';
my $select_string='select '.$items_string.' from '.$current_table." where ($where_string_pri_keys)";
if ($where_string_pri_keys) {&select($select_string);}
$elem=${$elem_select}[0];
$name='checked_item'.$delimiter.$current_table.$delimiter.$pri_key_string.$delimiter.$num;
my $pri_key;
foreach (@ARRAY_pri_keys) {
$pri_key.=${$elem}[$HASH_pri_keys{$_}].$pri_key_delimiter
}
substr($pri_key,-length($pri_key_delimiter))='';
$value=$pri_key;
print qq{
<tr><td bgcolor="$rec_checkb_td_color">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
};
print $countrows;
if ($flag_ok and ($edititem_enabled and $CGI_INPUT{edititem} and $updaterecord_enabled) and $pri_key_string) {
print qq{
<input type="checkbox" name="$name" value="$value">
};
}
print q{
</font>
</td>
};
$countrows++;
foreach my $row_elem_index ($#ARRAY_pri_keys+1 .. $#{$elem}) {
print qq{
<td bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
$name='field_value'.$delimiter.$num.$delimiter.$current_table.$delimiter.${$descarray}[$row_elem_index];
$value=${$elem}[$row_elem_index];
if ($textarea_enabled and (length($value) >= $max_length4text)) {
$value=&html2txt($value,'nobr');
print qq{\n<textarea wrap="off" cols="$cols_textarea" rows="$rows_textarea" name="$name">$value</textarea>};
} else {
$value=&html2txt($value,'nobr');
print qq{
<input type=text name="$name" value="$value" size="$input_text_size">
};
}
print q{
</font>
</td>
};
}
print q{
</tr>
};
$javascript_objects[$current_table_number]->{'array_obj_num'}[++$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}]=$relevant_js_obj;
$num++;
if ($flag_ok and ($edititem_enabled and $CGI_INPUT{edititem} and $updaterecord_enabled)) {
$relevant_js_obj=$relevant_js_obj+$#{$elem}-$#ARRAY_pri_keys+1;
} else {
$relevant_js_obj=$relevant_js_obj+$#{$elem}-$#ARRAY_pri_keys;
}
}
if ($javascript_enabled) {
if ($flag_ok and ($edititem_enabled and $CGI_INPUT{edititem} and $updaterecord_enabled) and $pri_key_string) {
$num=$#{$elem}-$#ARRAY_pri_keys+1;
print qq{
<tr>
<td align="left" colspan="$num"><FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="button" value="$button_js_check_rec" onClick="check_records($current_table_number);">
<input type="button" value="$button_js_unchk_rec" onClick="uncheck_records($current_table_number);">
</font>
</td>
</tr>
};
$relevant_js_obj+=2;
}
}
$javascript_objects[$current_table_number]->{'dim_array_obj_num'}=$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}+1;
print q{
</table>
</td>
</tr>
};
}
sub main_select {
my $current_table=$_[0];
my $current_table_number=$_[1];
my $num=0;
my $current_bgcolor;
my $name;
my $value;
my $field;
print q{
<tr>
<td> </td>
<td><table><tr><td> </td>
};
my $pri_key_string=&get_pri_key($current_table);
foreach my $elem (@{$descarray}) {
if (exists $HASH_pri_keys{$elem}) {$current_bgcolor=$pri_key_color;} else {$current_bgcolor=$field_color;}
$name='field_name'.$delimiter.$current_table.$delimiter.$num;
$value=$elem;
print qq{
<input type="hidden" name="$name" value="$value">
<td bgcolor="$current_bgcolor">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
$elem
</font>
</td>
};
$num++;
}
print q{</tr>};
$relevant_js_obj+=($#{$descarray}+1);
$num=0;
my $select_string='select * from '.$current_table;
my ($limit,$offset_value,$where_field,$where_value,$where_method,$orderby_field,$orderby_method)=&get_current_select_params($current_table);
if ($where_field) {
$select_string.=' where ('.$where_field.' '.$where_method.' '.$where_value.')';
}
if ($orderby_field) {
$select_string.=' order by '.$orderby_field.' '.$orderby_method;
}
if ($offset_value) {
$select_string.=' limit '.$offset_value.','.$limit;
} else {
$select_string.=' limit '.$limit;
}
&select($select_string);
my $countrows=1;
foreach my $elem (@{$elem_select}) {
$name='checked_item'.$delimiter.$current_table.$delimiter.$pri_key_string.$delimiter.$num;
my $pri_key;
foreach (@ARRAY_pri_keys) {
$pri_key.=${$elem}[$HASH_pri_keys{$_}].$pri_key_delimiter
}
substr($pri_key,-length($pri_key_delimiter))='';
$value=$pri_key;
print qq{
<tr><td bgcolor="$rec_checkb_td_color">
<FONT FACE="$numb_rec_checkb_ff" SIZE="$numb_rec_checkb_fs" COLOR="$numb_rec_checkb_col">
};
print $countrows;
if (($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled))) {
print qq{
<input type="checkbox" name="$name" value="$value">
};
}
print q{
</font>
</td>
};
$countrows++;
foreach my $row_elem (@{$elem}) {
print qq{
<td bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">
};
if ($row_elem ne '') {
$row_elem=&html2txt($row_elem,'br');
print $row_elem;
} else {
print q{
};
}
print q{
</font>
</td>
};
}
print q{
</tr>
};
$javascript_objects[$current_table_number]->{'array_obj_num'}[++$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}]=$relevant_js_obj;
$num++;
if (($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled))) {
$relevant_js_obj++;
}
if ($relevant_js_obj > $max_selected_rows) {last;}
}
if ($#{$elem_select} == -1) {
$num=$#{$descarray}+1;
print qq{
<tr><td> </td><td align="center" colspan="$num" bgcolor="$table_td_color">
<FONT FACE="$font_face" SIZE="$font_size" COLOR="$font_color">$err_not_present</font></td>
};
} elsif ($javascript_enabled) {
if (($flag_ok and (($select_enabled and $CGI_INPUT{select}) or ($selectfields_enabled and $CGI_INPUT{selectfields})) and ($edititem_enabled or $delete_enabled))) {
$num=$#{$descarray}+2;
print qq{
<tr>
<td align="left" colspan="$num"><FONT FACE="$button_font_face" SIZE="$button_font_size" COLOR="$button_font_color">
<input type="button" value="$button_js_check_rec" onClick="check_records($current_table_number);">
<input type="button" value="$button_js_unchk_rec" onClick="uncheck_records($current_table_number);">
</font>
</td>
</tr>
};
$relevant_js_obj+=2;
}
}
$javascript_objects[$current_table_number]->{'dim_array_obj_num'}=$#{$javascript_objects[$current_table_number]->{'array_obj_num'}}+1;
print q{
</table>
</td>
</tr>
};
}
sub put_javascript_for_create {
my ($first_field,$type,$specifier,$message,$message_required_specifier,$maxspecifiers,$character);
$first_field=4;
$maxspecifiers=(keys %SPECIFIERS_ORDER)+0;
print qq[
<script language="JavaScript">
<!--
function check_fields () {
var item=$first_field;
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
document.the_script.elements[item].checked=true;
item=item+$maxspecifiers+1;
}
}
function uncheck_fields () {
var item=$first_field;
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
document.the_script.elements[item].checked=false;
item=item+$maxspecifiers+1;
}
}
function verify_table_name () {
var message='';
var item=$first_field-1;
if (document.the_script.elements[item].value == '') {
alert("$js_no_table_name");
return false;
}
message=check_name(document.the_script.elements[item].value);
if (message != '') {
alert(message+" $js_in_table_name");
return false;
}
return true;
}
function verify_fields_names () {
var message='';
var item=$first_field;
var pos;
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
pos=item+$SPECIFIERS_ORDER{'field_name'};
if (document.the_script.elements[item].checked) {
if (document.the_script.elements[pos].value == '') {
alert("$js_no_field_name : "+counter);
return false;
}
message=check_name(document.the_script.elements[pos].value);
if (message != '') {
alert(message+" $js_in_field_name: "+counter);
return false;
}
}
item=item+$maxspecifiers+1;
}
return true;
}
function check_name (name) {
if (name.indexOf(" ",0) != -1) {
return "$js_space_character $js_not_allowed";
}
];
foreach $character (@characters_not_allowed) {
if ($character eq '\\') {
$character='\\\\';
}
if ($character eq '"') {
$character='\"';
}
print qq{
if (name.indexOf("$character",0) != -1) {
return "$character $js_not_allowed";
}
};
}
print qq[
var not_digit=false;
for (var counter=0;counter<name.length;counter++) {
if ((name.charAt(counter) != "0") && (name.charAt(counter) != "1") && (name.charAt(counter) != "2") && (name.charAt(counter) != "3") && (name.charAt(counter) != "4") && (name.charAt(counter) != "5") && (name.charAt(counter) != "6") && (name.charAt(counter) != "7") && (name.charAt(counter) != "8") && (name.charAt(counter) != "9")) {
not_digit=true;
break;
}
}
if (!not_digit) {
return("$js_name_not_number");
}
return '';
}
function verify_checked_fields () {
var item=$first_field;
var flag_no_check=true;
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
if (document.the_script.elements[item].checked) {
flag_no_check=false;
}
item=item+$maxspecifiers+1;
}
if (flag_no_check) {
alert("$js_no_checked_fields");
return false;
}
return true;
}
function verify_equal_fields_names () {
var pos_ext=$first_field;
var pos_int;
for (var extrn=1;extrn<$CGI_INPUT{new_fields};extrn++) {
pos_int=pos_ext+$maxspecifiers+1;
for (var intrn=extrn+1;intrn<=$CGI_INPUT{new_fields};intrn++) {
if (document.the_script.elements[pos_ext].checked && document.the_script.elements[pos_int].checked && (document.the_script.elements[pos_ext+$SPECIFIERS_ORDER{'field_name'}].value==document.the_script.elements[pos_int+$SPECIFIERS_ORDER{'field_name'}].value)) {
alert("$js_same_name_fields : "+extrn+" , "+intrn);
return false;
}
pos_int=pos_int+$maxspecifiers+1;
}
pos_ext=pos_ext+$maxspecifiers+1;
}
return true;
}
function verify_create_specifiers () {
var item=$first_field;
var ind;
var val;
];
if (exists $SPECIFIERS_ORDER{'primary_key'}) {
if (exists $SPECIFIERS_ORDER{'auto_increment'}) {
if (exists $SPECIFIERS_ORDER{'not_null'}) {
print q[
var item_ai;
var item_pk;
var item_nn;
];
} else {
print q[
var item_ai;
var item_pk;
];
}
} else {
if (exists $SPECIFIERS_ORDER{'not_null'}) {
print qq[
var item_pk;
var item_nn;
];
}
}
}
print qq[
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
ind=document.the_script.elements[item+$SPECIFIERS_ORDER{'field_type'}].selectedIndex;
val=document.the_script.elements[item+$SPECIFIERS_ORDER{'field_type'}].options[ind].text;
];
foreach $type (keys %FIELDS_TYPES) {
print qq[
if (val == "$type") {
];
foreach $specifier (keys %SPECIFIERS_ORDER) {
$message=$SPECIFIERS_MESSAGES{$specifier};
my ($property,$required_specifier)=split /\+/ , $FIELDS_TYPES{$type}{$specifier};
if ($required_specifier) {
$message_required_specifier=$SPECIFIERS_MESSAGES{$required_specifier};
print qq[
if (document.the_script.elements[item].checked && document.the_script.elements[item+$SPECIFIERS_ORDER{$specifier}].$SPECIFIERS_PROPERTIES{$specifier}{'js'} && !document.the_script.elements[item+$SPECIFIERS_ORDER{$required_specifier}].$SPECIFIERS_PROPERTIES{$required_specifier}{'js'}) {
alert("$message_required_specifier $js_required $js_with $message $js_for_type $type : "+counter);
return false;
}
];
}
if ($property eq '-1') {
print qq[
if (document.the_script.elements[item].checked && document.the_script.elements[item+$SPECIFIERS_ORDER{$specifier}].$SPECIFIERS_PROPERTIES{$specifier}{'js'}) {
alert("$message $js_not_allowed $js_for_type $type : "+counter);
return false;
}
];
} elsif ($property eq '1') {
print qq[
if (document.the_script.elements[item].checked && !document.the_script.elements[item+$SPECIFIERS_ORDER{$specifier}].$SPECIFIERS_PROPERTIES{$specifier}{'js'}) {
alert("$message $js_required $js_for_type $type : "+counter);
return false;
}
];
}
}
print q[
}
];
}
print qq[
item=item+$maxspecifiers+1;
}
];
if ((exists $SPECIFIERS_ORDER{'auto_increment'}) and (exists $SPECIFIERS_ORDER{'primary_key'})) {
print qq[
item=$first_field;
item_ai=item+$SPECIFIERS_ORDER{'auto_increment'};
item_pk=item+$SPECIFIERS_ORDER{'primary_key'};
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
if (document.the_script.elements[item].checked && document.the_script.elements[item_ai].checked) {
if (!document.the_script.elements[item_pk].checked) {
alert("$SPECIFIERS_MESSAGES{'auto_increment'} $js_ai_must_be_pkey $SPECIFIERS_MESSAGES{'primary_key'}: "+counter);
return false;
}
break;
}
item=item+$maxspecifiers+1;
item_ai=item+$SPECIFIERS_ORDER{'auto_increment'};
item_pk=item+$SPECIFIERS_ORDER{'primary_key'};
}
];
}
if ((exists $SPECIFIERS_ORDER{'not_null'}) and (exists $SPECIFIERS_ORDER{'primary_key'})) {
print qq[
item=$first_field;
item_nn=item+$SPECIFIERS_ORDER{'not_null'};
item_pk=item+$SPECIFIERS_ORDER{'primary_key'};
for (var counter=1;counter<=$CGI_INPUT{new_fields};counter++) {
if (document.the_script.elements[item].checked && document.the_script.elements[item_pk].checked) {
if (!document.the_script.elements[item_nn].checked) {
alert("$SPECIFIERS_MESSAGES{'primary_key'} $js_pk_must_be_nn $SPECIFIERS_MESSAGES{'not_null'}: "+counter);
return false;
}
}
item=item+$maxspecifiers+1;
item_nn=item+$SPECIFIERS_ORDER{'not_null'};
item_pk=item+$SPECIFIERS_ORDER{'primary_key'};
}
];
}
print q[
return true;
}
//-->
</script>
];
}
sub put_javascript {
print qq[
<script language="JavaScript">
<!--
js_tables= new Array($#javascript_objects);
];
foreach my $i (1 .. $#javascript_objects) {
print qq{js_tables[$i]=$javascript_objects[$i]->{'object_number'};\n};
}
print qq[
function check_tables () {
for (var counter=1;counter<=$#javascript_objects;counter++) {
document.the_script.elements[js_tables[counter]].checked=true;
}
}
function uncheck_tables () {
for (var counter=1;counter<=$#javascript_objects;counter++) {
document.the_script.elements[js_tables[counter]].checked=false;
}
}
function verify_checked_tables () {
var flag_no_check=true;
for (var counter=1;counter<=$#javascript_objects;counter++) {
if (document.the_script.elements[js_tables[counter]].checked) {
flag_no_check=false;
}
}
if (flag_no_check) {
alert("$js_no_checked_tables");
return false;
}
return true;
}
];
if ($flag_ok and ( $CGI_INPUT{select} or $CGI_INPUT{prepare} or $CGI_INPUT{edititem} or $CGI_INPUT{new} or $CGI_INPUT{selectfields}) ) {
print qq[
function Info_Table(num,dim) {
this.object_number=num;
this.dim_array_obj_num=dim;
this.array_obj_num=new Array(dim);
}
records=new Array($#javascript_objects);
];
foreach my $i (1 .. $#javascript_objects) {
print qq{records[$i]=new Info_Table($javascript_objects[$i]->{'object_number'},$javascript_objects[$i]->{'dim_array_obj_num'});\n};
foreach my $y (0 .. $#{$javascript_objects[$i]->{'array_obj_num'}}) {
print qq{records[$i].array_obj_num[$y]=$javascript_objects[$i]->{'array_obj_num'}[$y];\n};
}
}
print qq[
function check_records (table_num) {
for (var counter=0;counter<records[table_num].dim_array_obj_num;counter++) {
document.the_script.elements[records[table_num].array_obj_num[counter]].checked=true;
}
}
function uncheck_records (table_num) {
for (var counter=0;counter<records[table_num].dim_array_obj_num;counter++) {
document.the_script.elements[records[table_num].array_obj_num[counter]].checked=false;
}
}
function verify_existing_fields () {
var tab_check_rec_nopresent=new Array($#javascript_objects+1);
var counter_tab_check_rec_nopresent=0;
var flag_total_err_tab=false;
for (var counter=1;counter<=$#javascript_objects;counter++) {
if (document.the_script.elements[records[counter].object_number].checked) {
if (records[counter].dim_array_obj_num == 0) {
tab_check_rec_nopresent[counter_tab_check_rec_nopresent]=counter;
counter_tab_check_rec_nopresent++;
flag_total_err_tab=true;
}
}
}
if (flag_total_err_tab) {
if (counter_tab_check_rec_nopresent > 0) {
string_tab_check_rec_nopresent=new String;
for (counter=0;counter<counter_tab_check_rec_nopresent;counter++) {
string_tab_check_rec_nopresent+=tab_check_rec_nopresent[counter]+" ";
}
alert("$js_tab_check_wo_exist : "+string_tab_check_rec_nopresent);
}
return false;
} else {
return true;
}
}
function verify_checked_records () {
var tab_check_rec_nopresent=new Array($#javascript_objects+1);
var tab_check_rec_nocheck=new Array($#javascript_objects+1);
var tab_nocheck_rec_check=new Array($#javascript_objects+1);
var counter_tab_check_rec_nopresent=0;
var counter_tab_check_rec_nocheck=0;
var counter_tab_nocheck_rec_check=0;
var flag_total_err_tab=false;
for (var counter=1;counter<=$#javascript_objects;counter++) {
if (document.the_script.elements[records[counter].object_number].checked) {
if (records[counter].dim_array_obj_num == 0) {
tab_check_rec_nopresent[counter_tab_check_rec_nopresent]=counter;
counter_tab_check_rec_nopresent++;
flag_total_err_tab=true;
} else {
flag_rec_nocheck=true;
for (internal_counter=0;internal_counter<records[counter].dim_array_obj_num;internal_counter++) {
if (document.the_script.elements[records[counter].array_obj_num[internal_counter]].checked) {
flag_rec_nocheck=false;
break;
}
}
if (flag_rec_nocheck) {
tab_check_rec_nocheck[counter_tab_check_rec_nocheck]=counter;
counter_tab_check_rec_nocheck++;
flag_total_err_tab=true;
}
}
} else {
if (records[counter].dim_array_obj_num != 0) {
flag_rec_check=false;
for (internal_counter=0;internal_counter<records[counter].dim_array_obj_num;internal_counter++) {
if (document.the_script.elements[records[counter].array_obj_num[internal_counter]].checked) {
flag_rec_check=true;
break;
}
}
if (flag_rec_check) {
tab_nocheck_rec_check[counter_tab_nocheck_rec_check]=counter;
counter_tab_nocheck_rec_check++;
flag_total_err_tab=true;
}
}
}
}
if (flag_total_err_tab) {
if (counter_tab_check_rec_nopresent > 0) {
var string_tab_check_rec_nopresent=new String;
for (var counter=0;counter<counter_tab_check_rec_nopresent;counter++) {
string_tab_check_rec_nopresent+=tab_check_rec_nopresent[counter]+" ";
}
alert("$js_tab_check_wo_exist : "+string_tab_check_rec_nopresent);
}
if (counter_tab_check_rec_nocheck > 0) {
var string_tab_check_rec_nocheck=new String;
for (var counter=0;counter<counter_tab_check_rec_nocheck;counter++) {
string_tab_check_rec_nocheck+=tab_check_rec_nocheck[counter]+" ";
}
alert("$js_tab_check_wo_check : "+string_tab_check_rec_nocheck);
}
if (counter_tab_nocheck_rec_check > 0) {
var string_tab_nocheck_rec_check=new String;
for (var counter=0;counter<counter_tab_nocheck_rec_check;counter++) {
string_tab_nocheck_rec_check+=tab_nocheck_rec_check[counter]+" ";
}
alert("$js_tab_no_check_with : "+string_tab_nocheck_rec_check);
}
return false;
} else {
return true;
}
}
];
} #if
print q[
//-->
</script>
];
}
#================================================================================
# CODE SECTION END
#================================================================================
#================================================================================
# CREATE TABLE TYPES & SPECIFIERS CONFIGURATION SECTION
#===============================================================================
# specifiers line (1st line):
#
# specifier*HTML form tag*javascript property*appear (0 means NO, 1 means YES) +order (if required in a pair of specifiers)
#
# 'appear' means that the specifier has to appear in the create table syntax
#
#
# fields types lines:
#
# type,length,decimals,unsigned,zerofill,binary,not_null,default,auto_increment,index,unique,primary_key
#
# 0 = optional 1 = required -1 = not allowed +specifier (if required in a pair of specifiers)
__END__
type,length*text*value*0+1,decimals*text*value*0+2,unsigned*checkbox*checked*1,zerofill*checkbox*checked*1,binary*checkbox*checked*1,not_null*checkbox*checked*1,default*text*value*1,auto_increment*radio*checked*1,index*text*value*1,unique*text*value*1,primary_key*checkbox*checked*1
TINYINT,0,-1,0,0,-1,0,0,0,0,0,0
SMALLINT,0,-1,0,0,-1,0,0,0,0,0,0
MEDIUMINT,0,-1,0,0,-1,0,0,0,0,0,0
INT,0,-1,0,0,-1,0,0,0,0,0,0
INTEGER,0,-1,0,0,-1,0,0,0,0,0,0
BIGINT,0,-1,0,0,-1,0,0,0,0,0,0
REAL,0+decimals,0+length,0,0,-1,0,0,-1,0,0,0
DOUBLE,0+decimals,0+length,0,0,-1,0,0,-1,0,0,0
FLOAT,0+decimals,0+length,0,0,-1,0,0,-1,0,0,0
DECIMAL,1+decimals,1+length,0,0,-1,0,0,-1,0,0,0
NUMERIC,1+decimals,1+length,0,0,-1,0,0,-1,0,0,0
CHAR,1,-1,-1,-1,0,0,0,-1,0,0,0
VARCHAR,1,-1,-1,-1,0,0,0,-1,0,0,0
DATE,-1,-1,-1,-1,-1,0,0,-1,0,0,0
TIME,-1,-1,-1,-1,-1,0,0,-1,0,0,0
YEAR,-1,-1,-1,-1,-1,0,0,-1,0,0,0
TIMESTAMP,0,-1,-1,-1,-1,0,0,-1,0,0,0
DATETIME,-1,-1,-1,-1,-1,0,0,-1,0,0,0
TINYBLOB,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
BLOB,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
MEDIUMBLOB,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
LONGBLOB,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
TINYTEXT,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
TEXT,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
MEDIUMTEXT,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
LONGTEXT,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1
ENUM,1,-1,-1,-1,-1,0,0,-1,0,0,-1
SET,1,-1,-1,-1,-1,0,0,-1,0,0,-1