3 # Show database tables and indexes
5 require './mysql-lib.pl';
7 &can_edit_db($in{'db'}) || &error($text{'dbase_ecannot'});
8 @titles = grep { &can_edit_db($_) } &list_databases();
9 $desc = "<tt>$in{'db'}</tt>";
10 if (@titles == 1 && $module_info{'usermin'}) {
12 &ui_print_header($desc, $text{'dbase_title'}, "", "edit_dbase", 1, 1);
16 &ui_print_header($desc, $text{'dbase_title'}, "", "edit_dbase");
18 @titles = &list_tables($in{'db'});
19 if ($access{'indexes'}) {
20 @indexes = &list_indexes($in{'db'});
22 if (&supports_views() && $access{'views'}) {
23 @views = &list_views($in{'db'});
27 # Limit to those matching search
28 @titles = grep { /\Q$in{'search'}\E/i } @titles;
29 @indexes = grep { /\Q$in{'search'}\E/i } @indexes;
30 @views = grep { /\Q$in{'search'}\E/i } @views;
31 print "<table width=100%><tr>\n";
32 print "<td> <b>",&text('dbase_showing',
33 "<tt>$in{'search'}</tt>"),"</b></td>\n";
34 print "<td align=right><a href='edit_dbase.cgi?db=$in{'db'}'>",
35 "$text{'view_searchreset'}</a></td>\n";
36 print "</tr></table>\n";
39 if (@titles+@indexes+@views > $max_dbs && !$in{'search'}) {
40 # Too many tables to show .. display search and jump forms
41 print &ui_form_start("edit_dbase.cgi");
42 print &ui_hidden("db", $in{'db'}),"\n";
43 print $text{'dbase_toomany'},"\n";
44 print &ui_textbox("search", undef, 20),"\n";
45 print &ui_submit($text{'index_search'}),"<br>\n";
49 print &ui_form_start("edit_table.cgi");
50 print $text{'dbase_jump'},"\n";
51 print &ui_hidden("db", $in{'db'}),"\n";
52 print &ui_select("table", undef, [ map { [ $_ ] } @titles ],
53 1, 0, 0, 0, "onChange='form.submit()'"),"\n";
54 print &ui_submit($text{'index_jumpok'}),"<br>\n";
57 # View selector (if any)
59 print &ui_form_start("edit_view.cgi");
60 print $text{'dbase_vjump'},"\n";
61 print &ui_hidden("db", $in{'db'}),"\n";
62 print &ui_select("view", undef, [ map { [ $_ ] } @views ],
63 1, 0, 0, 0, "onChange='form.submit()'"),"\n";
64 print &ui_submit($text{'index_jumpok'}),"<br>\n";
68 # Index selector (if any)
70 print &ui_form_start("edit_index.cgi");
71 print $text{'dbase_ijump'},"\n";
72 print &ui_hidden("db", $in{'db'}),"\n";
73 print &ui_select("index", undef, [ map { [ $_ ] } @indexes ],
74 1, 0, 0, 0, "onChange='form.submit()'"),"\n";
75 print &ui_submit($text{'index_jumpok'}),"<br>\n";
79 elsif (@titles || @indexes) {
80 @icons = ( ( map { "images/table.gif" } @titles ),
81 ( map { "images/index.gif" } @indexes ),
82 ( map { "images/view.gif" } @views ),
84 @links = ( ( map { "edit_table.cgi?db=$in{'db'}&table=".&urlize($_) }
86 ( map { "edit_index.cgi?db=$in{'db'}&index=".&urlize($_) }
88 ( map { "edit_view.cgi?db=$in{'db'}&view=".&urlize($_) }
91 @descs = ( ( map { "" } @titles ),
92 ( map { " ($text{'dbase_index'})" } @indexes),
93 ( map { " ($text{'dbase_view'})" } @views),
96 print &ui_form_start("drop_tables.cgi");
97 print &ui_hidden("db", $in{'db'});
98 @rowlinks = ( &select_all_link("d", $form),
99 &select_invert_link("d", $form) );
100 print &ui_links_row(\@rowlinks);
101 @checks = ( ( @titles ),
102 ( map { "!".$_ } @indexes ),
103 ( map { "*".$_ } @views ),
105 if ($displayconfig{'style'} == 1) {
106 # Show table names, fields and row counts
107 foreach $t (@titles) {
108 local $c = &execute_sql($in{'db'},
109 "select count(*) from ".quotestr($t));
110 push(@rows, $c->{'data'}->[0]->[0]);
111 local @str = &table_structure($in{'db'}, $t);
112 push(@fields, scalar(@str));
114 foreach $t (@indexes) {
115 $str = &index_structure($in{'db'}, $t);
116 push(@rows, "<i>$text{'dbase_index'}</i>");
117 push(@fields, scalar(@{$str->{'cols'}}));
119 foreach $v (@indexes) {
120 push(@rows, "<i>$text{'dbase_view'}</i>");
121 push(@fields, undef);
123 @dtitles = map { &html_escape($_) }
124 ( @titles, @indexes, @views );
125 &split_table([ "", $text{'dbase_table'}, $text{'dbase_rows'},
126 $text{'dbase_cols'} ],
127 \@checks, \@links, \@dtitles,
128 \@rows, \@fields) if (@titles);
130 elsif ($displayconfig{'style'} == 2) {
131 # Just show table names
133 @all = ( @titles, @indexes, @views );
134 for(my $i=0; $i<@links; $i++) {
135 push(@grid, &ui_checkbox("d", $checks[$i]).
136 " <a href='$links[$i]'>".
137 &html_escape($all[$i])." ".$descs[$i]."</a>");
139 print &ui_grid_table(\@grid, 4, 100, undef, undef,
140 $text{'dbase_header'});
144 @checks = map { &ui_checkbox("d", $_) } @checks;
145 @titles = map { &html_escape($_) } ( @titles, @indexes, @views);
146 &icons_table(\@links, \@titles, \@icons, 5, undef, undef, undef,
149 print &ui_links_row(\@rowlinks);
150 if (!$access{'edonly'}) {
151 print &ui_form_end([ [ "delete", @indexes ? $text{'dbase_delete2'} : $text{'dbase_delete'} ] ]);
154 print &ui_form_end();
159 print "<b>$text{'dbase_none2'}</b> <p>\n";
162 print "<b>$text{'dbase_none'}</b> <p>\n";
167 # Check if the user is from Virtualmin, and if so link back to his DB list
168 if (&foreign_check("virtual-server")) {
169 $virtual_server::no_virtualmin_plugins = 1;
170 &foreign_require("virtual-server", "virtual-server-lib.pl");
171 if (!&virtual_server::master_admin() &&
172 !&virtual_server::reseller_admin()) {
173 # Is a domain owner .. which domain is this DB in?
174 foreach my $d (grep { &virtual_server::can_edit_domain($_) }
175 &virtual_server::list_domains()) {
176 @dbs = &virtual_server::domain_databases($d);
177 ($got) = grep { $_->{'name'} eq $in{'db'} &&
178 $_->{'type'} eq 'mysql' } @dbs;
180 $virtualmin = $d->{'id'};
187 &ui_print_footer("../virtual-server/list_databases.cgi?dom=$virtualmin",
188 $text{'index_return'});
191 &ui_print_footer("/", $text{'index'});
194 &ui_print_footer("", $text{'index_return'});
199 if (!$access{'edonly'}) {
200 print &ui_form_start("table_form.cgi");
201 print &ui_hidden("db", $in{'db'});
204 print &ui_submit($text{'dbase_add'})." ".$text{'dbase_fields'}.
205 " ".&ui_textbox("fields", 4, 4);
209 if (&supports_views() && $access{'views'}) {
210 print &ui_submit($text{'dbase_addview'}, 'addview');
214 # Delete this database
215 if ($access{'delete'}) {
216 print &ui_submit($text{'dbase_drop'}, 'dropdb');
221 if ($access{'buser'}) {
222 print &ui_submit($text{'dbase_backup'}, 'backupdb');
227 print &ui_submit($text{'dbase_exec'}, 'exec');
230 print &ui_form_end();