Completed ui-lib conversion
authorJamie Cameron <jcameron@webmin.com>
Fri, 9 Jan 2009 00:07:43 +0000 (00:07 +0000)
committerJamie Cameron <jcameron@webmin.com>
Fri, 9 Jan 2009 00:07:43 +0000 (00:07 +0000)
postgresql/delete_fields.cgi [new file with mode: 0644]
postgresql/drop_field.cgi [deleted file]
postgresql/edit_field.cgi
postgresql/edit_table.cgi
postgresql/lang/en
postgresql/list_locals.cgi [deleted file]
postgresql/log_parser.pl

diff --git a/postgresql/delete_fields.cgi b/postgresql/delete_fields.cgi
new file mode 100644 (file)
index 0000000..e7ee173
--- /dev/null
@@ -0,0 +1,22 @@
+#!/usr/local/bin/perl
+# Drop several fields from a table
+
+require './postgresql-lib.pl';
+&ReadParse();
+&error_setup($text{'fdrop_err'});
+&can_edit_db($in{'db'}) || &error($text{'dbase_ecannot'});
+
+# Validate inputs
+@d = split(/\0/, $in{'d'});
+@d || &error($text{'fdrop_enone'});
+@desc = &table_structure($in{'db'}, $in{'table'});
+@d < @desc || &error($text{'fdrop_eall'});
+
+# Do the deed
+foreach $d (@d) {
+       &execute_sql_logged($in{'db'},
+           "alter table ".&quote_table($in{'table'})." drop column \"$d\"");
+       }
+&webmin_log("delete", "fields", scalar(@d), \%in);
+&redirect("edit_table.cgi?db=$in{'db'}&table=".&urlize($in{'table'}));
+
diff --git a/postgresql/drop_field.cgi b/postgresql/drop_field.cgi
deleted file mode 100755 (executable)
index 3bdcd34..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/local/bin/perl
-# drop_field.cgi
-# Drop a field from some table
-
-sub mytext($);
-
-require './postgresql-lib.pl';
-&ReadParse();
-&can_edit_db($in{'db'}) || &error(mytext('dbase_ecannot'));
-
-$desc = &text('table_header', "<tt>$in{'table'}</tt>", "<tt>$in{'db'}</tt>");
-&ui_print_header($desc, mytext('fdrop_title'), "", "field_drop");
-
-@desc = &table_structure($in{'db'}, $in{'table'});
-
-local $table_shuffle;
-# If a field drop has been specified using this script
-if ( $in{'dropfld'} && $in{'dropfldok'} ) {
-
-       # Drop the field by copying the other fields through a temp table
-       &error_setup(mytext('fdrop_err'));
-
-       local $i;
-       local $fld_list = "";
-
-       if( @desc > 1 ) {
-               for($i=0; $i<scalar(@desc); $i++) {
-                       local $r = $desc[$i];
-                       if( $in{'dropfld'} ne &html_escape($r->{'field'}) ) {
-                               # Note PostgreSQL requires quotes for uppercase
-                               if( $fld_list eq "" ) {
-                                       $fld_list = '"'.$r->{'field'}.'"';
-                               } else {
-                                       $fld_list = $fld_list . ', "' .$r->{'field'}.'"';
-                               }
-                       }
-               }
-       }
-       
-       if( $fld_list ne "" ) {
-               local $tmp_tbl = "webmin_tmp_table".$PROCESS_ID;
-               local $qt = &quote_table($in{'table'});
-               $table_shuffle = join '',
-                       "LOCK TABLE $qt;",
-                       "CREATE TABLE $tmp_tbl AS SELECT $fld_list FROM $qt;",
-                       "DROP TABLE $qt;",
-                       "ALTER TABLE $tmp_tbl RENAME TO $qt;";
-                       
-               &execute_sql_logged($in{'db'}, $table_shuffle);
-
-               &webmin_log("delete", "table+field", $in{'table'}."+".$in{'dropfld'}, \%in);
-       }
-
-       @desc = &table_structure($in{'db'}, $in{'table'});
-
-}  # if a field drop has been specified
-
-# Display field selection screen
-
-$mid = int((@desc / 2)+0.5);
-print "<form action=drop_field.cgi>\n";
-print "<input type=hidden name=db value='$in{'db'}'>\n";
-print "<input type=hidden name=table value='$in{'table'}'>\n";
-print "<table border=0 width=100%> <tr><td valign=top width=50%>\n";
-&type_table(0, $mid);
-print "</td><td valign=top width=50%>\n";
-&type_table($mid, scalar(@desc)) if (@desc > 1);
-print "</td></tr> </table>\n";
-
-print "<table width=100%><tr>\n";
-
-print "<td>\n";
-print "<input type=checkbox name=dropfldok",
-       " value=dropit>",
-       &html_escape(mytext('fdrop_lose_data')),
-       "</option>",
-       "</td>\n";
-print "<td align=right width=33%>\n";
-print '<input type=submit name="drop_a_fld" value="',
-       mytext('fdrop_perform').'"></td>'."\n";
-
-print "</tr></table>\n";
-print "</form>\n";
-
-&ui_print_footer("edit_table.cgi?db=$in{'db'}&table=$in{'table'}",mytext('table_return'),
-       "edit_dbase.cgi?db=$in{'db'}", mytext('dbase_return'),
-       "", mytext('index_return'));
-
-sub type_table
-{
-print "<table border width=100%>\n";
-print "<tr $tb> <td><b>".mytext('table_field')."</b></td> ",
-      "<td><b>".mytext('table_type')."</b></td> ",
-      "<td><b>".mytext('table_arr')."</b></td> ",
-      "<td><b>".mytext('fdrop_header')."</b></td> </tr>\n";
-local $i;
-for($i=$_[0]; $i<$_[1]; $i++) {
-       local $r = $desc[$i];
-       print "<tr $cb>\n";
-       print "<td><a href='edit_field.cgi?db=$in{'db'}&table=$in{'table'}&",
-             "idx=$i'>",&html_escape($r->{'field'}),"</a></td>\n";
-       print "<td>",&html_escape($r->{'type'}),"</td>\n";
-       print "<td>",$r->{'arr'} eq 'YES' ? mytext('yes')
-                                         : mytext('no'),"</td>\n";
-       print "<td>","<input type=radio name=dropfld value='",
-               &html_escape($r->{'field'}),"' ></td>\n";
-       print "</tr>\n";
-       }
-print "</table>\n";
-}
-
-sub mytext($)
-{
-       my ($x) = @_;
-       my $rv = $text{"$x"};
-       if( ! $rv ) {
-               $rv = "$x";     # if unknown text, use the label
-       }
-       return $rv;
-}
index dbfe80a..1bfb77e 100755 (executable)
@@ -19,72 +19,68 @@ else {
        $type = $f->{'type'};
        }
 
-print "<form action=save_field.cgi>\n";
-print "<input type=hidden name=db value='$in{'db'}'>\n";
-print "<input type=hidden name=table value='$in{'table'}'>\n";
-print "<input type=hidden name=new value='$in{'type'}'>\n";
-print "<table border>\n";
-print "<tr $tb> <td><b>$text{'field_header'}</b></td> </tr>\n";
-print "<tr $cb> <td><table>\n";
+# Start of form block
+print &ui_form_start("save_field.cgi", "post");
+print &ui_hidden("db", $in{'db'});
+print &ui_hidden("table", $in{'table'});
+print &ui_hidden("new", $in{'type'});
+print &ui_table_start($text{'field_header'}, undef, 2);
 
-print "<tr> <td><b>$text{'field_name'}</b></td>\n";
-print "<td><input name=field size=20 value='$f->{'field'}'></td> </tr>\n";
-print "<input type=hidden name=old value='$f->{'field'}'>\n" if (!$in{'type'});
+# Field name
+print &ui_table_row($text{'field_name'},
+       &ui_textbox("field", $f->{'field'}, 40));
+print &ui_hidden("old", $f->{'field'}) if (!$in{'type'});
 
+# Field type
 if ($type =~ /^(\S+)\((.*)\)/) {
        $type = $1;
        $size = $2;
        }
-print "<input type=hidden name=type value='$type'>\n";
-print "<tr> <td><b>$text{'field_type'}</b></td>\n";
-print "<td>$type</td> </tr>\n";
+print &ui_table_row($text{'field_type'}, $type);
+print &ui_hidden("type", $type);
 
 if ($type eq 'char' || $type eq 'varchar' || $type eq 'numeric' ||
     $type eq 'bit') {
        if ($in{'type'}) {
                # Type has a size
-               print "<tr> <td><b>$text{'field_size'}</b></td>\n";
-               print "<td><input name=size size=10 value='$size'></td></tr>\n";
+               print &ui_table_row($text{'field_size'},
+                       &ui_textbox("size", $size, 15));
                }
        else {
                # Type cannot be edited
-               print "<tr> <td><b>$text{'field_size'}</b></td>\n";
-               print "<td>$size</td> </tr>\n";
+               print &ui_table_row($text{'field_size'}, $size);
                }
        }
 
-print "<tr> <td><b>$text{'field_arr'}</b></td> <td>\n";
 if ($in{'type'}) {
        # Ask if this is an array
-       print "<input name=arr type=radio value=1> $text{'yes'}\n";
-       print "<input name=arr type=radio value=0 checked> $text{'no'}\n";
+       print &ui_table_row($text{'field_arr'},
+               &ui_yesno_radio("arr", 0));
        }
 else {
        # Display if array or not
-       print $f->{'arr'} eq 'YES' ? $text{'yes'} : $text{'no'};
+       print &ui_table_row($text{'field_arr'},
+               $f->{'arr'} eq 'YES' ? $text{'yes'} : $text{'no'});
        }
-print "</td> </tr>\n";
 
 if (!$in{'type'}) {
        # Display nulls
-       print "<tr> <td><b>$text{'field_null'}</b></td>\n";
-       print "<td>",$f->{'null'} eq 'YES' ? $text{'yes'}
-                                          : $text{'no'},"</td> </tr>\n";
+       print &ui_table_row($text{'field_null'},
+               $f->{'null'} eq 'YES' ? $text{'yes'} : $text{'no'});
        }
 
-print "</table></td></tr></table>\n";
+print &ui_table_end();
 if ($in{'type'}) {
-       print "<input type=submit value='$text{'create'}'>\n";
+       print &ui_form_end([ [ undef, $text{'create'} ] ]);
        }
 else {
-       print "<input type=submit value='$text{'save'}'>\n";
-       if (&can_drop_fields() && @desc > 1) {
-               print "<input type=submit name=delete value='$text{'delete'}'>\n";
-               }
+       print &ui_form_end([ [ undef, $text{'save'} ],
+               &can_drop_fields() && @desc > 1 ?
+                       ( [ 'delete', $text{'delete'} ] ) : ( ) ]);
        }
-print "</form>\n";
 
-&ui_print_footer("edit_table.cgi?db=$in{'db'}&table=$in{'table'}",$text{'table_return'},
-       "edit_dbase.cgi?db=$in{'db'}", $text{'dbase_return'},
-       "", $text{'index_return'});
+&ui_print_footer("edit_table.cgi?db=$in{'db'}&table=$in{'table'}",
+                 $text{'table_return'},
+                "edit_dbase.cgi?db=$in{'db'}", $text{'dbase_return'},
+                "", $text{'index_return'});
 
index ef39c64..6f0bf6f 100755 (executable)
@@ -8,91 +8,78 @@ require './postgresql-lib.pl';
 $desc = &text('table_header', "<tt>$in{'table'}</tt>", "<tt>$in{'db'}</tt>");
 &ui_print_header($desc, $text{'table_title'}, "", "edit_table");
 
+# Table of fields
+print &ui_form_start("delete_fields.cgi", "post");
+print &ui_hidden("db", $in{'db'}),"\n";
+print &ui_hidden("table", $in{'table'}),"\n"; 
 @desc = &table_structure($in{'db'}, $in{'table'});
-print "<form action=edit_field.cgi>\n";
-print "<input type=hidden name=db value='$in{'db'}'>\n";
-print "<input type=hidden name=table value='$in{'table'}'>\n";
-
-$mid = int((@desc / 2)+0.5);
-print "<table border=0 width=100%> <tr><td valign=top width=50%>\n";
-&type_table(0, $mid);
-print "</td><td valign=top width=50%>\n";
-&type_table($mid, scalar(@desc)) if (@desc > 1);
-print "</td></tr> </table>\n";
-
-print "<table width=100%><tr>\n";
-print "<td width=33% nowrap><input type=submit value='$text{'table_add'}'>\n";
-print "<select name=type>\n";
-foreach $t (&list_types()) {
-       print "<option>$t\n";
+$candrop = &can_drop_fields() && @desc > 1;
+@tds = $candrop ? ( "width=5" ) : ( );
+@rowlinks = ( &select_all_link("d"), &select_invert_link("d") );
+print &ui_links_row(\@rowlinks);
+print &ui_columns_start([ $candrop ? ( "" ) : ( ),
+                         $text{'table_field'},
+                          $text{'table_type'},
+                          $text{'table_arr'},
+                          $text{'table_null'} ], 100, 0, \@tds);
+$i = 0;
+foreach $r (@desc) {
+       @cols = ( "<a href='edit_field.cgi?db=$in{'db'}&table=$in{'table'}&".
+                  "idx=$i'>".&html_escape($r->{'field'})."</a>",
+                  &html_escape($r->{'type'}),
+                  $r->{'arr'} eq 'YES' ? $text{'yes'} : $text{'no'},
+                  $r->{'null'} eq 'YES' ? $text{'yes'} : $text{'no'},
+               );
+       if ($candrop) {
+               print &ui_checked_columns_row(\@cols, \@tds, "d",$r->{'field'});
+               }
+       else {
+               print &ui_columns_row(\@cols, \@tds);
+               }
+       $i++;
        }
-print "</select></td></form>\n";
+print &ui_columns_end();
+print &ui_links_row(\@rowlinks);
+print &ui_form_end($candrop ? [ [ "delete", $text{'table_delete'} ] ] : [ ]);
 
-print "<form action=view_table.cgi>\n";
-print "<input type=hidden name=db value='$in{'db'}'>\n";
-print "<input type=hidden name=table value='$in{'table'}'>\n";
-print "<td align=middle width=22%>\n";
-print "<input type=submit value='$text{'table_data'}'></td>\n";
-print "</form>\n";
+$hiddens = &ui_hidden("db", $in{'db'}).&ui_hidden("table", $in{'table'});
+print "<table><tr>\n";
 
-print "<form action=csv_form.cgi>\n";
-print "<input type=hidden name=db value='$in{'db'}'>\n";
-print "<input type=hidden name=table value='$in{'table'}'>\n";
-print "<td align=middle width=22%>\n";
-print "<input type=submit value='$text{'table_csv'}'></td>\n";
-print "</form>\n";
+# Add a field
+print &ui_form_start("edit_field.cgi");
+print $hiddens;
+print "<td nowrap>",&ui_submit($text{'table_add'});
+print &ui_select("type", undef, [ &list_types() ]);
+print "</td>",&ui_form_end();
 
-if (!&can_drop_fields()) {
-       print "<form action=drop_field.cgi>\n";
-       print "<input type=hidden name=db value='$in{'db'}'>\n";
-       print "<input type=hidden name=table value='$in{'table'}'>\n";
-       print "<td align=right width=22%>\n";
-       print "<input type=submit name=drop_a_fld value='$text{'table_fielddrop'}'></td>\n";
-       print "</form>\n";
-       }
+# View and edit data button
+print &ui_form_start("view_table.cgi", "form-data");
+print $hiddens;
+print "<td>",&ui_submit($text{'table_data'});
+print "</td>",&ui_form_end();
+
+# CSV export button
+print &ui_form_start("csv_form.cgi");
+print $hiddens;
+print "<td>",&ui_submit($text{'table_csv'});
+print "</td>",&ui_form_end();
 
 # Create index button
 if (&supports_indexes() && $access{'indexes'}) {
-       print "<form action=edit_index.cgi>\n";
-       print "<input type=hidden name=db value='$in{'db'}'>\n";
-       print "<input type=hidden name=table value='$in{'table'}'>\n";
-       print "<td align=center width=25%>\n";
-       print "<input type=submit value='$text{'table_index'}'></td>\n";
-       print "</form>\n";
+       print &ui_form_start("edit_index.cgi");
+       print $hiddens;
+       print "<td>",&ui_submit($text{'table_index'});
+       print "</td>",&ui_form_end();
        }
 
-print "<form action=drop_table.cgi>\n";
-print "<input type=hidden name=db value='$in{'db'}'>\n";
-print "<input type=hidden name=table value='$in{'table'}'>\n";
-print "<td align=right width=22%>\n";
-print "<input type=submit value='$text{'table_drop'}'></td>\n";
-print "</form>\n";
+# Drop table button
+print &ui_form_start("drop_table.cgi");
+print $hiddens;
+print "<td>",&ui_submit($text{'table_drop'});
+print "</td>",&ui_form_end();
 
 print "</tr></table>\n";
 
 &ui_print_footer("edit_dbase.cgi?db=$in{'db'}", $text{'dbase_return'},
        "", $text{'index_return'});
 
-sub type_table
-{
-print "<table border width=100%>\n";
-print "<tr $tb> <td><b>$text{'table_field'}</b></td> ",
-      "<td><b>$text{'table_type'}</b></td> ",
-      "<td><b>$text{'table_arr'}</b></td> ",
-      "<td><b>$text{'table_null'}</b></td> </tr>\n";
-local $i;
-for($i=$_[0]; $i<$_[1]; $i++) {
-       local $r = $desc[$i];
-       print "<tr $cb>\n";
-       print "<td><a href='edit_field.cgi?db=$in{'db'}&table=$in{'table'}&",
-             "idx=$i'>",&html_escape($r->{'field'}),"</a></td>\n";
-       print "<td>",&html_escape($r->{'type'}),"</td>\n";
-       print "<td>",$r->{'arr'} eq 'YES' ? $text{'yes'}
-                                         : $text{'no'},"</td>\n";
-       print "<td>",$r->{'null'} eq 'YES' ? $text{'yes'}
-                                          : $text{'no'},"</td>\n";
-       print "</tr>\n";
-       }
-print "</table>\n";
-}
-
index 82db181..5937fd4 100644 (file)
@@ -102,6 +102,7 @@ table_fielddrop=Drop Field
 table_eblob=No size is needed for BLOB field $1
 table_csv=Export as CSV
 table_index=Create Index
+table_delete=Delete Selected Fields
 
 field_title1=Add Field
 field_title2=Modify Field
@@ -366,6 +367,7 @@ log_tables_delete=Dropped $1 objects from database $2
 log_field_create=Added field $1 $4 to $2 in database $3
 log_field_modify=Modified field $1 $4 in $2 in database $3
 log_field_delete=Deleted field $1 from $2 in database $3
+log_fields_delete=Deleted $1 fields from $1 in database $2
 log_data_create=Added row to table $2 in database $3
 log_data_modify=Modified $1 rows in table $2 in database $3
 log_data_delete=Deleted $1 rows from table $2 in database $3
@@ -418,11 +420,9 @@ acl_views=Can view and manage views?
 acl_indexes=Can view and manage indexes?
 acl_seqs=Can view and manage sequences?
 
-fdrop_err=Error during field drop
-fdrop_header=Drop This One
-fdrop_lose_data=Select box to confirm that you understand that definitions, such as indexes and default values, on all fields may be lost.
-fdrop_perform=Drop Field
-fdrop_title=Drop Field
+fdrop_err=Failed to delete fields
+fdrop_enone=None selected
+fdrop_eall=You cannot delete all fields from a table! 
 
 setup_err=Failed to initialize database
 setup_ecannot=You are not allowed to initialize the database
diff --git a/postgresql/list_locals.cgi b/postgresql/list_locals.cgi
deleted file mode 100755 (executable)
index c53f9b6..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/local/bin/perl
-# list_locals.cgi
-# Display local access records
-
-require './postgresql-lib.pl';
-$access{'users'} || &error($text{'local_ecannot'});
-&ui_print_header(undef, $text{'local_title'}, "");
-
-@locals = grep { $_->{'type'} eq 'local' } &get_hba_config();
-print "<table border width=100%>\n";
-print "<tr $tb> <td><b>$text{'host_db'}</b></td> ",
-      "<td><b>$text{'host_auth'}</b></td> </tr>\n";
-foreach $l (@locals) {
-       print "<tr $cb>\n";
-       print "<td>",$l->{'db'} eq 'all' ? $text{'host_all'} :
-                    $l->{'db'} eq 'sameuser' ? $text{'host_same'} :
-                                               $l->{'db'},"</td>\n";
-       print "<td>",$text{"host_$l->{'auth'}"},"</td>\n";
-       print "</tr>\n";
-       }
-print "</table>\n";
-print "<a href='edit_local.cgi?new=1'>$text{'local_add'}</a><p>\n";
-
-&ui_print_footer("", $text{'index'});
-
index 83ac779..7772c18 100644 (file)
@@ -36,6 +36,10 @@ elsif ($type eq 'field') {
                     "<tt>$p->{'table'}</tt>", "<tt>$p->{'db'}</tt>",
                     "<tt>$p->{'type'}$p->{'size'}</tt>");
        }
+elsif ($type eq 'fields') {
+        return &text("log_${type}_${action}", $object,
+                     "<tt>$p->{'table'}</tt>", "<tt>$p->{'db'}</tt>");
+        }
 elsif ($type eq 'data') {
        return &text("log_${type}_${action}", "<tt>$object</tt>",
                     "<tt>$p->{'table'}</tt>", "<tt>$p->{'db'}</tt>");