mirror of
https://github.com/webmin/webmin.git
synced 2026-02-03 06:03:28 +00:00
Add UI for deleting packages and modules
This commit is contained in:
@@ -27,18 +27,34 @@ foreach my $name (@d) {
|
||||
push(@delpkgs, $pkg);
|
||||
}
|
||||
|
||||
# Actually do the deletion
|
||||
&ui_print_unbuffered_header(undef, $text{'dpkgs_title'}, "");
|
||||
|
||||
foreach my $pkg (@delpkgs) {
|
||||
print &text('dpkgs_doing', "<tt>$pkg->{'name'}</tt>",
|
||||
$pkg->{'phpver'}),"<br>\n";
|
||||
$err = &delete_php_base_package($pkg);
|
||||
if ($err) {
|
||||
print &text('dpkgs_failed', $err),"<p>\n";
|
||||
if (!$in{'confirm'}) {
|
||||
# Find the packages first
|
||||
print &ui_form_start("delete_pkgs.cgi");
|
||||
foreach my $d (@d) {
|
||||
print &ui_hidden("d", $d);
|
||||
}
|
||||
else {
|
||||
print $text{'dpkgs_done'},"<p>\n";
|
||||
my @alldel;
|
||||
foreach my $pkg (@delpkgs) {
|
||||
push(@alldel, &list_all_php_version_packages($pkg));
|
||||
}
|
||||
print &text('dpkgs_rusure',
|
||||
join(" ", map { "<tt>$_</tt>" } @alldel)),"<p>\n";
|
||||
print &ui_form_end([ [ 'confirm', $text{'pkgs_delete'} ] ]);
|
||||
}
|
||||
else {
|
||||
# Actually do the deletion
|
||||
foreach my $pkg (@delpkgs) {
|
||||
print &text('dpkgs_doing', "<tt>$pkg->{'name'}</tt>",
|
||||
$pkg->{'phpver'}),"<br>\n";
|
||||
$err = &delete_php_base_package($pkg);
|
||||
if ($err) {
|
||||
print &text('dpkgs_failed', $err),"<p>\n";
|
||||
}
|
||||
else {
|
||||
print $text{'dpkgs_done'},"<p>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -234,11 +234,12 @@ pkgs_return=PHP packages
|
||||
|
||||
dpkgs_err=Failed to delete PHP packages
|
||||
dpkgs_title=Deleting PHP Packages
|
||||
dpkgs_doing=Uninstalling package $1 for PHP version $2 ..
|
||||
dpkgs_doing=Uninstalling package $1 and modules for PHP version $2 ..
|
||||
dpkgs_failed=.. failed : $1
|
||||
dpkgs_done=.. uninstalled successfully
|
||||
dpkgs_enone=No packages selected
|
||||
dpkgs_eexists=Package does not exist!
|
||||
dpkg_eusers=Package for PHP version $1 cannot be uninstalled, as it is still being used by $2 domains
|
||||
dpkgs_rusure=Are you sure you want to remove the selected PHP packages : $1
|
||||
|
||||
__norefs=1
|
||||
|
||||
@@ -913,6 +913,26 @@ for(my $i=0; $i<$n; $i++) {
|
||||
return sort { &compare_version_numbers($a->{'ver'}, $b->{'ver'}) } @rv;
|
||||
}
|
||||
|
||||
# list_all_php_module_packages(base-package)
|
||||
# Returns all install packages for PHP extensions of a given base package
|
||||
sub list_all_php_module_packages
|
||||
{
|
||||
my ($base) = @_;
|
||||
$base =~ s/(-php|-runtime)$//;
|
||||
my @rv;
|
||||
&foreign_require("software");
|
||||
my $n = &software::list_packages();
|
||||
for(my $i=0; $i<$n; $i++) {
|
||||
my $name = $software::packages{$i,'name'};
|
||||
next if ($name !~ /^\Q$base\E-/);
|
||||
push(@rv, { 'name' => $software::packages{$i,'name'},
|
||||
'system' => $software::packages{$i,'system'},
|
||||
'ver' => $software::packages{$i,'version'},
|
||||
});
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# list_available_php_packages()
|
||||
# Returns a list of hash refs, one per PHP version available, with the
|
||||
# following keys :
|
||||
@@ -959,17 +979,40 @@ foreach my $d (&virtual_server::list_domains()) {
|
||||
return \%vmap;
|
||||
}
|
||||
|
||||
# list_all_php_version_packages(&base-pkg)
|
||||
# Returns all package names for installed packages related to one PHP package,
|
||||
# such as those for extensions
|
||||
sub list_all_php_version_packages
|
||||
{
|
||||
my ($pkg) = @_;
|
||||
&foreign_require("software");
|
||||
my @rv = map { $_->{'name'} }
|
||||
&list_all_php_module_packages($pkg->{'name'});
|
||||
my $base = $pkg->{'name'};
|
||||
$base =~ s/-php$//;
|
||||
my @poss = ( @modpkgs, $base."-php", $base."-runtime", $base );
|
||||
foreach my $p (@poss) {
|
||||
my @info = &software::package_info($p, $pkg->{'ver'});
|
||||
next if (!@info);
|
||||
push(@rv, $p);
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
# delete_php_base_package(&package)
|
||||
# Delete a PHP package, and return undef on success or an error on failure
|
||||
sub delete_php_base_package
|
||||
{
|
||||
my ($pkg) = @_;
|
||||
&foreign_require("software");
|
||||
my $err = &software::delete_package($pkg->{'name'}, { }, $pkg->{'ver'});
|
||||
if ($err) {
|
||||
$err = &html_strip($err);
|
||||
foreach my $p (&list_all_php_version_packages($pkg)) {
|
||||
my @info = &software::package_info($p);
|
||||
next if (!@info);
|
||||
my $err = &software::delete_package($p, { 'nodeps' => 1 });
|
||||
if ($err) {
|
||||
return &html_strip($err);
|
||||
}
|
||||
}
|
||||
return $err;
|
||||
return undef;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user