print &ui_form_start("backup.cgi", "post");
print &ui_hidden("db", $in{'db'});
print &ui_hidden("all", $in{'all'});
-print &ui_hidden_table_start($text{'backup_header1'}, undef, 2, "main", 1,
- [ "width=30%" ]);
+print &ui_hidden_table_start($text{'backup_header1'}, "width=100%", 2, "main",
+ 1, [ "width=30%" ]);
# Destination file or directory
$p = $c{'backup_'.$in{'db'}} || "$config{'repository'}/";
if ($cron) {
if ($access{'cmds'}) {
- print &ui_hidden_table_start($text{'backup_header2'}, undef, 2,
+ print &ui_hidden_table_start($text{'backup_header2'},
+ "width=100%", 2,
"opts", 0, [ "width=30%" ]);
$b = $c{'backup_before_'.$in{'db'}};
print &ui_hidden_table_end("opts");
}
- print &ui_hidden_table_start($text{'backup_header3'}, undef, 2, "sched",
- 1, [ "width=30%" ]);
+ print &ui_hidden_table_start($text{'backup_header3'}, "width=100%",
+ 2, "sched", 1, [ "width=30%" ]);
&foreign_require("cron", "cron-lib.pl");
@jobs = &cron::list_cron_jobs();
@group = @{$s->{'data'}->[0]};
}
-print "<form action=save_group.cgi>\n";
-print "<input type=hidden name=new value='$in{'new'}'>\n";
-print "<table border width=100%>\n";
-print "<tr $tb> <td><b>$text{'group_header'}</b></td> </tr>\n";
-print "<tr $cb> <td><table width=100%>\n";
+# Start of form block
+print &ui_form_start("save_group.cgi");
+print &ui_hidden("new", $in{'new'});
+print &ui_table_start($text{'group_header'}, undef, 2);
-print "<tr> <td><b>$text{'group_name'}</b></td>\n";
-print "<td><input name=name size=20 value='$group[0]'></td>\n";
+# Group name
+print &ui_table_row($text{'group_name'},
+ &ui_textbox("name", $group[0], 40));
-print "<td><b>$text{'group_id'}</b></td>\n";
+# Group ID, dynamically selected for new ones
if ($in{'new'}) {
$s = &execute_sql($config{'basedb'},
"select max(grosysid) from pg_group");
$gid = $s->{'data'}->[0]->[0] + 1;
- print "<td><input name=gid size=10 value='$gid'></td> </tr>\n";
+ print &ui_table_row($text{'group_id'},
+ &ui_textbox("gid", $gid, 10));
}
else {
- print "<td>$group[1]</td> </tr>\n";
- print "<input type=hidden name=gid value='$in{'gid'}'>\n";
- print "<input type=hidden name=oldname value='$group[0]'>\n";
+ print &ui_table_row($text{'group_id'}, $group[1]);
+ print &ui_hidden("gid", $in{'gid'});
+ print &ui_hidden("oldname", $group[0]);
}
-map { $mem{$_}++ } &split_array($group[2]) if (!$in{'new'});
-print "<tr> <td valign=top><b>$text{'group_mems'}</b></td>\n";
-print "<td colspan=3><select name=mems multiple size=5 width=200>\n";
+# Group members
$s = &execute_sql($config{'basedb'}, "select * from pg_shadow");
-foreach $u (@{$s->{'data'}}) {
- printf "<option value=%s %s>%s\n",
- $u->[1], $mem{$u->[1]} ? 'selected' : '', $u->[0];
+%uidtouser = map { $_->[1], $_->[0] } @{$s->{'data'}};
+if (!$in{'new'}) {
+ @mems = map { [ $_, $uidtouser{$_} || $_ ] } &split_array($group[2]);
}
-print "</select></td> </tr>\n";
+@users = map { [ $_->[1], $_->[0] ] } @{$s->{'data'}};
+print &ui_table_row($text{'group_mems'},
+ &ui_multi_select("mems", \@mems, \@users, 10, 1, 0,
+ $text{'group_memsopts'}, $text{'group_memsvals'}));
-print "</table></td></tr></table>\n";
-print "<table width=100%><tr>\n";
+# End of the form buttons
+print &ui_table_end();
if ($in{'new'}) {
- print "<td><input type=submit value='$text{'create'}'></td>\n";
+ print &ui_form_end([ [ undef, $text{'create'} ] ]);
}
else {
- print "<td><input type=submit value='$text{'save'}'></td>\n";
- print "<td align=right><input type=submit name=delete ",
- "value='$text{'delete'}'></td>\n";
+ print &ui_form_end([ [ undef, $text{'save'} ],
+ [ 'delete', $text{'delete'} ] ]);
}
-print "</tr></table>\n";
&ui_print_footer("list_groups.cgi", $text{'group_return'});
&ui_print_header(undef, $text{"host_edit"}, "");
}
-print "<form action=save_host.cgi>\n";
-print "<input type=hidden name=idx value='$in{'idx'}'>\n";
-print "<input type=hidden name=new value='$in{'new'}'>\n";
-print "<table border width=100%>\n";
-print "<tr $tb> <td><b>$text{'host_header'}</b></td> </tr>\n";
-print "<tr $cb> <td><table width=100%>\n";
+# Start of form block
+print &ui_form_start("save_host.cgi", "post");
+print &ui_hidden("idx", $in{'idx'});
+print &ui_hidden("new", $in{'new'});
+print &ui_table_start($text{'host_header'}, "width=100%", 2);
+# XXX
$mode = $type eq 'local' ? 3 :
$host->{'cidr'} ne '' ? 4 :
$host->{'netmask'} eq '0.0.0.0' ? 0 :
@user = @{$s->{'data'}->[0]};
}
-print "<form action=save_user.cgi>\n";
-print "<input type=hidden name=new value='$in{'new'}'>\n";
-print "<input type=hidden name=user value='$in{'user'}'>\n";
-print "<table border width=100%>\n";
-print "<tr $tb> <td><b>$text{'user_header'}</b></td> </tr>\n";
-print "<tr $cb> <td><table width=100%>\n";
+# Start of the form
+print &ui_form_start("save_user.cgi");
+print &ui_hidden("new", $in{'new'});
+print &ui_hidden("user", $in{'user'});
+print &ui_table_start($text{'user_header'}, undef, 2);
-print "<tr> <td><b>$text{'user_name'}</b></td>\n";
-if ($in{'new'} || &get_postgresql_version() >= 7.4) {
- print "<td><input name=name value='$user[0]' size=20></td>\n";
- }
-else {
- print "<td>$user[0]</td>\n";
- }
+# Username, not always editable
+print &ui_table_row($text{'user_name'},
+ $in{'new'} || &get_postgresql_version() >= 7.4 ?
+ &ui_textbox("name", $user[0], 40) :
+ $user[0]);
-print "<td><b>$text{'user_passwd'}</b></td>\n";
if ($in{'new'}) {
# For new users, can select empty or specific password
- print "<td>",&ui_radio("pass_def", 1,
+ print &ui_table_row($text{'user_passwd'},
+ &ui_radio("pass_def", 1,
[ [ 1, $text{'user_none'} ],
- [ 0, $text{'user_setto'} ] ]),"\n",
- &ui_password("pass", undef, 20),"</td> </tr>\n";
+ [ 0, $text{'user_setto'} ] ])." ".
+ &ui_password("pass", undef, 20));
}
else {
# For existing users, can select empty, leave unchanged or
# specific password
- print "<td>",&ui_radio("pass_def", 2,
+ print &ui_table_row($text{'user_passwd'},
+ &ui_radio("pass_def", 2,
[ [ 2, $text{'user_nochange'} ],
- [ 0, $text{'user_setto'} ] ]),"\n",
- &ui_password("pass", undef, 20),"</td> </tr>\n";
+ [ 0, $text{'user_setto'} ] ])." ".
+ &ui_password("pass", undef, 20));
}
-print "<tr> <td><b>$text{'user_db'}</b></td>\n";
-printf "<td><input type=radio name=db value=1 %s> $text{'yes'}\n",
- $user[2] =~ /t|1/ ? 'checked' : '';
-printf "<input type=radio name=db value=0 %s> $text{'no'}</td>\n",
- $user[2] =~ /t|1/ ? '' : 'checked';
+# Can create databases?
+print &ui_table_row($text{'user_db'},
+ &ui_yesno_radio("db", $user[2] =~ /t|1/));
-print "<td><b>$text{'user_other'}</b></td>\n";
-printf "<td><input type=radio name=other value=1 %s> $text{'yes'}\n",
- $user[4] =~ /t|1/ ? 'checked' : '';
-printf "<input type=radio name=other value=0 %s> $text{'no'}</td> </tr>\n",
- $user[4] =~ /t|1/ ? '' : 'checked';
+# Create create other users?
+print &ui_table_row($text{'user_other'},
+ &ui_yesno_radio("other", $user[4] =~ /t|1/));
-print "<tr> <td><b>$text{'user_until'}</b></td> <td colspan=3>\n";
-if (!$user[6]) {
- printf "<input type=radio name=until_def value=1 %s> %s\n",
- $user[6] ? '' : 'checked', $text{'user_forever'};
- printf "<input type=radio name=until_def value=0 %s>\n",
- $user[6] ? 'checked' : '';
- }
-print "<input name=until size=30 value='$user[6]'></td> </tr>\n";
+# Valid until
+print &ui_table_row($text{'user_until'},
+ $user[6] ? &ui_textbox("until", $user[6], 40) :
+ &ui_opt_textbox("until", $user[6], 40, $text{'user_forever'}));
-print "</table></td></tr></table>\n";
-print "<table width=100%><tr>\n";
+# End of form and buttons
+print &ui_table_end();
if ($in{'new'}) {
- print "<td><input type=submit value='$text{'create'}'></td>\n";
+ print &ui_form_end([ [ undef, $text{'create'} ] ]);
}
else {
- print "<td><input type=submit value='$text{'save'}'></td>\n";
- print "<td align=right><input type=submit name=delete ",
- "value='$text{'delete'}'></td>\n";
+ print &ui_form_end([ [ undef, $text{'save'} ],
+ [ 'delete', $text{'delete'} ] ]);
}
-print "</tr></table>\n";
&ui_print_footer("list_users.cgi", $text{'user_return'});
print "<b>$text{'index_notrun'}</b> <p>\n";
if (&is_postgresql_local()) {
- if ($access{'stop'} || $access{'users'}) {
- print &ui_hr();
- }
+ print &ui_hr();
print &ui_buttons_start();
if ($access{'stop'}) {
# Show start button
print &ui_buttons_row("start.cgi", $text{'index_start'},
- &text('index_startmsg',
- "<tt>$config{'start_cmd'}</tt>"));
+ $text{'index_startmsg2'});
}
if ($access{'users'}) {
print &ui_buttons_row("list_hosts.cgi",
elsif ($r == -1) {
# Running, but webmin doesn't know the login/password
&main_header(1);
- print "<p> <b>$text{'index_nopass'}</b> <p>\n";
- print "<form action=login.cgi method=post>\n";
- print "<center><table border>\n";
- print "<tr $tb> <td><b>$text{'index_ltitle'}</b></td> </tr>\n";
- print "<tr $cb> <td><table cellpadding=2>\n";
+ print "<b>$text{'index_nopass'}</b> <p>\n";
- print "<tr> <td><b>$text{'index_login'}</b></td>\n";
- printf "<td><input name=login size=20 value='%s'></td> </tr>\n",
- $access{'user'} || $config{'login'};
+ print &ui_form_start("login.cgi", "post");
+ print &ui_table_start($text{'index_ltitle'}, undef, 2);
- if (!$access{'user'}) {
- print "<tr> <td></td>\n";
- printf "<td><input type=checkbox name=sameunix value=1 %s> %s</td> </tr>\n",
- $config{'sameunix'} ? "checked" : "", $text{'index_sameunix'};
- }
+ print &ui_table_row($text{'index_login'},
+ &ui_textbox("login", $access{'user'} || $config{'login'}, 40));
+
+ print &ui_table_row(" ",
+ &ui_checkbox("sameunix", 1, $text{'index_sameunix'},
+ $config{'sameunix'}));
- print "<tr> <td><b>$text{'index_pass'}</b></td>\n";
- print "<td><input name=pass size=20 type=password></td> </tr>\n";
+ print &ui_table_row($text{'index_pass'},
+ &ui_password("pass", undef, 40));
+ print &ui_table_end();
+ print &ui_form_end([ [ undef, $text{'save'} ] ]);
- print "</table></td></tr></table>\n";
- print "<input type=submit value='$text{'save'}'>\n";
- print "<input type=reset value='$text{'index_clear'}'>\n";
- print "</center></form>\n";
print &text('index_emsg', "<tt>$rout</tt>"),"<p>\n";
}
elsif ($r == -2) {
"$gconfig{'webprefix'}/config.cgi?$module_name"),"<p>\n";
print &text('index_ldpath', "<tt>$ENV{$gconfig{'ld_env'}}</tt>",
"<tt>$config{'psql'}</tt>"),"<br>\n";
- print "<pre>$out</pre>\n";
+ print "<pre>",&html_escape($out),"</pre>\n";
print &text('index_emsg', "<tt>$rout</tt>"),"<p>\n";
}
else {
&icons_table(\@links, \@titles, \@images);
}
+ print &ui_hr();
+ print &ui_buttons_start();
+
+ # Show stop server button
if ($access{'stop'} && &is_postgresql_local()) {
- print &ui_hr();
- print "<form action=stop.cgi>\n";
- print "<table width=100%><tr><td width=25%>\n";
- print "<input type=submit ",
- "value=\"$text{'index_stop'}\"></td>\n";
- print "<td>$text{'index_stopmsg'}</td> </tr></table>\n";
- print "</form>\n";
+ print &ui_buttons_row("stop.cgi", $text{'index_stop'},
+ $text{'index_stopmsg'});
}
# Show backup all button
if ($can_all && $access{'backup'}) {
- print &ui_hr() if (!$access{'stop'});
- print "<form action=backup_form.cgi>\n";
- print "<input type=hidden name=all value=1>\n";
- print "<table width=100%><tr><td width=25%>\n";
- print "<input type=submit ",
- "value=\"$text{'index_backup'}\"></td>\n";
- print "<td>$text{'index_backupmsg'}</td> </tr></table>\n";
- print "</form>\n";
+ print &ui_buttons_row("backup_form.cgi", $text{'index_backup'},
+ $text{'index_backupmsg'},
+ &ui_hidden("all", 1));
}
+ print &ui_buttons_end();
+
# Check if the optional perl modules are installed
if (&foreign_available("cpan")) {
eval "use DBI";
index_title=PostgreSQL Database Server
index_notrun=PostgreSQL is not running on your system - database list could not be retrieved.
index_start=Start PostgreSQL Server
-index_startmsg=Click this button to start the PostgreSQL database server on your system with the command $1. This Webmin module cannot administer the database until it is started.
+index_startmsg2=Click this button to start the PostgreSQL database server on your system. This Webmin module cannot administer the database until it is started.
index_nopass=Webmin needs to know your PostgreSQL administration login and password in order to manage your database. Please enter your administration username and password below.
index_nouser=Your Webmin account is configured to connect to the PostgreSQL server as user $1, but this user has been denied access.
index_ltitle=PostgreSQL Login
user_epass=Missing or invalid password
user_ename=Missing or invalid username
user_sync=The options below configure synchronization between Unix users created through Webmin and PostgreSQL users.
+user_syncwhen=When to synchronize
user_sync_create=Add a new PostgreSQL user when a Unix user is added.
user_sync_modify=Update a PostgreSQL user when the matching Unix user is modified.
user_sync_delete=Delete a PostgreSQL user when the matching Unix user is deleted.
group_name=Group name
group_id=Group ID
group_mems=Members
+group_memsopts=All users
+group_memsvals=Users in group
group_add=Create a new group.
group_edit=Edit Group
group_create=Create Group
push(@cols, $g->[1]);
push(@cols, join(" | ",
map { &html_escape($uid{$_}) } &split_array($g->[2])));
- print &ui_checked_columns_row(\@cols, \@tds, "d", $g->[1]);
+ print &ui_checked_columns_row(\@cols, \@tds, "d", $g->[0]);
}
print &ui_columns_end();
}
if (&get_postgresql_version() >= 7 && &foreign_installed("useradmin")) {
print &ui_hr();
+ print "$text{'user_sync'}<p>\n";
print &ui_form_start("save_sync.cgi");
- print "$text{'user_sync'}<br>\n";
+ print &ui_table_start(undef, undef, 2);
- print &ui_checkbox("sync_create", 1, $text{'user_sync_create'},
- $config{'sync_create'}),"<br>\n";
- print &ui_checkbox("sync_modify", 1, $text{'user_sync_modify'},
- $config{'sync_modify'}),"<br>\n";
- print &ui_checkbox("sync_delete", 1, $text{'user_sync_delete'},
- $config{'sync_delete'}),"<br>\n";
+ # When to sync
+ print &ui_table_row($text{'user_syncwhen'},
+ &ui_checkbox("sync_create", 1, $text{'user_sync_create'},
+ $config{'sync_create'})."<br>\n".
+ &ui_checkbox("sync_modify", 1, $text{'user_sync_modify'},
+ $config{'sync_modify'})."<br>\n".
+ &ui_checkbox("sync_delete", 1, $text{'user_sync_delete'},
+ $config{'sync_delete'}));
+ print &ui_table_end();
print &ui_form_end([ [ "save", $text{'save'} ] ]);
}
foreach $u (@{$s->{'data'}}) {
$umap{$u->[1]} = $u->[0];
}
- @mems = split(/\0/, $in{'mems'});
+ @mems = split(/\r?\n/, $in{'mems'});
if ($in{'new'}) {
- &execute_sql_logged($config{'basedb'}, "create group $in{'name'} sysid $in{'gid'} ".join(" ", map { "user ".$umap{$_} } @mems));
+ $first = shift(@mems);
+ &execute_sql_logged($config{'basedb'}, "create group $in{'name'} sysid $in{'gid'} user ".$umap{$first});
+ if (@mems) {
+ &execute_sql_logged($config{'basedb'}, "alter group $in{'name'} add user ".join(" , ", map { $umap{$_} } @mems));
+ }
}
else {
if ($in{'name'} ne $in{'oldname'}) {