3 # Delete a module from one or all servers, after asking for confirmation
5 require './cluster-webmin-lib.pl';
7 @servers = &list_servers();
8 @hosts = &list_webmin_hosts();
9 if ($in{'server'} < 0) {
10 # Find servers that have the module or theme
12 foreach $m (@{$h->{'modules'}}, @{$h->{'themes'}}) {
13 if ($m->{'dir'} eq $in{'mod'}) {
14 local ($s) = grep { $_->{'id'} == $h->{'id'} }
18 $best = $s if (!$s->{'id'});
23 $s = $best ? $best : $got[0];
26 ($s) = grep { $_->{'id'} == $in{'server'} } @servers;
27 ($h) = grep { $_->{'id'} == $in{'server'} } @hosts;
32 foreach $m ($in{'type'} eq 'mod' ? @{$h->{'modules'}} : @{$h->{'themes'}}) {
33 $info = $m if ($m->{'dir'} eq $in{'mod'});
36 # Setup error handler for down hosts
39 $del_error_msg = join("", @_);
41 &remote_error_setup(\&del_error);
42 &remote_foreign_require($s->{'host'}, "webmin", "webmin-lib.pl");
44 &ui_print_header(undef, $text{'delete_title'}, "");
46 # do the deletion in separate processes
47 print "<br><b>",&text("delete_header_$in{'type'}",
48 $info->{'desc'}),"</b><p>\n";
51 local ($rh = "READ$p", $wh = "WRITE$p");
55 local $h = $gotmap{$g};
57 # Check for any dependencies on this host
58 foreach $m (@{$h->{'modules'}}) {
59 foreach $d (split(/\s+/, $m->{'depends'})) {
60 push(@{$ondeps{$d}}, $m);
63 if ($ondeps{$in{'mod'}}) {
64 print $wh &serialise_variable([ 0, &text('delete_edepends', join(", ", map { $_->{'desc'} } @{$ondeps{$in{'mod'}}})) ]);
69 &remote_foreign_require($g->{'host'}, "webmin",
70 "webmin-lib.pl") if ($s ne $g);
71 &remote_foreign_require($g->{'host'}, "acl",
73 local $desc = &remote_foreign_call($g->{'host'},
74 "webmin", "delete_webmin_module", $in{'mod'},
77 print $wh &serialise_variable([ 0, $del_error_msg ]);
80 print $wh &serialise_variable([ 1, $desc ]);
83 print $wh &serialise_variable([ 0, $text{'delete_egone'} ]);
86 # Re-request all users and groups from the server
87 local @newmods = grep { $_->{'dir'} ne $in{'mod'} }
89 local @newthemes = grep { $_->{'dir'} ne $in{'mod'} }
91 $h->{'modules'} = \@newmods;
92 $h->{'themes'} = \@newthemes;
93 $h->{'users'} = [ &remote_foreign_call($g->{'host'},
94 "acl", "list_users") ];
95 $h->{'groups'} = [ &remote_foreign_call($g->{'host'},
96 "acl", "list_groups") ];
97 &save_webmin_host($h);
106 # Read back the results
109 local $rh = "READ$p";
111 local $rv = &unserialise_variable($line);
113 local $d = &server_name($g);
116 print &text('delete_error', $d, $rv->[1]),"<br>\n";
119 print &text('delete_success', $d, $rv->[1]),"<br>\n";
123 print "<p><b>$text{'delete_done'}</b><p>\n";
126 # Ask if the user is sure..
127 $rroot = &remote_eval($s->{'host'}, "webmin", '$root_directory');
128 $sz = &remote_foreign_call($s->{'host'}, "webmin", "disk_usage_kb",
129 "$rroot/$in{'mod'}");
131 if ($in{'server'} < 0) {
132 print &text("delete_rusure_$in{'type'}",
133 "<b>$info->{'desc'}</b>", $sz),"<p>\n";
136 print &text("delete_rusure2_$in{'type'}",
137 "<b>$info->{'desc'}</b>", $sz, &server_name($s)),"<p>\n";
139 print "<form action=delete_mod.cgi>\n";
140 print "<input type=hidden name=mod value=\"$in{'mod'}\">\n";
141 print "<input type=hidden name=type value=\"$in{'type'}\">\n";
142 print "<input type=hidden name=server value=\"$in{'server'}\">\n";
143 print "<input type=hidden name=sure value=1>\n";
144 print "<input type=submit value=\"$text{'delete_ok'}\"><br>\n";
145 print "<input type=checkbox name=acls value=1> $text{'delete_acls'}\n";
146 print "</center></form>\n";
150 &ui_print_footer("", $text{'index_return'});