1#!/usr/local/bin/perl
2# exec_form.cgi
3# Display a form for executing SQL in some database
4
5require './mysql-lib.pl';
6&ReadParse();
7&can_edit_db($in{'db'}) || &error($text{'dbase_ecannot'});
8$access{'edonly'} && &error($text{'dbase_ecannot'});
9&ui_print_header(undef, $text{'exec_title'}, "", "exec_form");
10
11# Generate tabs for sections
12$prog = "exec_form.cgi?db=".&urlize($in{'db'})."&mode=";
13@tabs = ( [ "exec", $text{'exec_tabexec'}, $prog."exec" ],
14	  [ "file", $text{'exec_tabfile'}, $prog."file" ],
15	  [ "import", $text{'exec_tabimport'}, $prog."import" ] );
16print &ui_tabs_start(\@tabs, "mode", $in{'mode'} || "exec", 1);
17
18# Get recently run commands
19open(OLD, "<$commands_file.$in{'db'}");
20while(<OLD>) {
21	s/\r|\n//g;
22	push(@old, $_);
23	}
24close(OLD);
25
26# Build charset selector
27@css = &list_character_sets($in{'db'});
28$csel = &ui_select("charset", $sql_charset,
29		   [ [ "", "&lt;".$text{'default'}."&gt;" ],
30		     (map { [ $_->[0], $_->[1]." (".$_->[0].")" ] } @css) ]);
31
32# Form for executing an SQL command
33print &ui_tabs_start_tab("mode", "exec");
34print &text('exec_header', "<tt>$in{'db'}</tt>"),"<p>\n";
35print &ui_form_start("exec.cgi", "form-data");
36print &ui_hidden("db", $in{'db'});
37print &ui_textarea("cmd", undef, 10, 70),"<br>\n";
38if (@old) {
39	print $text{'exec_old'}," ",
40	      &ui_select("old", undef,
41		[ map { [ $_, &html_escape(length($_) > 80 ?
42				substr($_, 0, 80).".." : $_) ] } @old ]),"\n",
43	      &ui_button($text{'exec_edit'}, "movecmd", undef,
44		"onClick='cmd.value = old.options[old.selectedIndex].value'"),
45	      " ",&ui_submit($text{'exec_clear'}, "clear"),"<br>\n";
46	}
47print "<b>$text{'exec_cs'}</b> ",$csel,"<br>\n";
48print &ui_form_end([ [ undef, $text{'exec_exec'} ] ]);
49print &ui_tabs_end_tab();
50
51# Form for executing commands from a file
52print &ui_tabs_start_tab("mode", "file");
53print &text('exec_header2', "<tt>$in{'db'}</tt>"),"<br>\n";
54print $text{'exec_header2a'},"<p>\n";
55print &ui_form_start("exec_file.cgi", "form-data");
56print &ui_hidden("db", $in{'db'});
57print &ui_radio_table("mode", 0, [
58	[ 0, $text{'exec_file'}, &ui_textbox("file", undef, 50)." ".
59				 &file_chooser_button("file", 0, 1) ],
60	[ 1, $text{'exec_upload'}, &ui_upload("upload", 50) ] ]);
61print "<b>$text{'exec_cs'}</b> ",$csel,"<br>\n";
62print &ui_form_end([ [ undef, $text{'exec_exec'} ] ]);
63print &ui_tabs_end_tab();
64
65# Form for loading a CSV or tab-separated file
66print &ui_tabs_start_tab("mode", "import");
67print &text('exec_header3', "<tt>$in{'db'}</tt>"),"<br>",
68      $text{'exec_header4'},"<p>\n";
69
70print &ui_form_start("import.cgi", "form-data");
71print &ui_hidden("db", $in{'db'});
72print &ui_table_start($text{'exec_iheader'}, undef, 2);
73
74# Data source
75print &ui_table_row($text{'exec_isource'},
76	&ui_radio_table("mode", 0, [
77		[ 0, $text{'exec_file'}, &ui_textbox("file", undef, 50)." ".
78					 &file_chooser_button("file", 0, 1) ],
79		[ 1, $text{'exec_upload'}, &ui_upload("upload", 50) ] ]));
80
81print &ui_table_row($text{'exec_import'},
82	&ui_select("table", undef,
83		   [ [ undef, "&lt;$text{'exec_filename'}&gt;" ],
84		     &list_tables($in{'db'}) ]));
85
86print &ui_table_row($text{'exec_delete'},
87	&ui_yesno_radio("delete", 0));
88
89print &ui_table_row($text{'exec_ignore'},
90	&ui_yesno_radio("ignore", 0));
91
92print &ui_table_row($text{'exec_format'},
93	&ui_radio("format", 2, [ [ 0, $text{'csv_format0'} ],
94				 [ 1, $text{'csv_format1'} ],
95				 [ 2, $text{'csv_format2'} ] ]));
96
97print &ui_table_row($text{'exec_cs'}, $csel);
98
99print &ui_table_end();
100print &ui_form_end([ [ undef, $text{'exec_exec'} ] ]);
101print &ui_tabs_end_tab();
102
103print &ui_tabs_end(1);
104
105&ui_print_footer("edit_dbase.cgi?db=$in{'db'}", $text{'dbase_return'},
106		 &get_databases_return_link($in{'db'}), $text{'index_return'});
107
108
109