Work on support for removing packages

This commit is contained in:
Jamie Cameron
2025-04-06 18:58:58 -07:00
parent fde1b02880
commit 18bd46fe93
4 changed files with 75 additions and 5 deletions

45
phpini/delete_pkgs.cgi Normal file
View File

@@ -0,0 +1,45 @@
#!/usr/local/bin/perl
# Remove some PHP versions
require './phpini-lib.pl';
&error_setup($text{'dpkgs_err'});
$access{'global'} || &error($text{'pkgs_ecannot'});
&foreign_available("software") || &error($text{'pkgs_ecannot2'});
&ReadParse();
my @d = split(/\0/, $in{'d'});
@d || &error($text{'dpkgs_enone'});
my $vmap = &get_virtualmin_php_map();
# Find all packages and check that they can be safely removed
my @pkgs = &list_php_base_packages();
my @delpkgs;
foreach my $name (@d) {
($pkg) = grep { $_->{'name'} eq $name } @pkgs;
$pkg || &error($text{'dpkgs_eexists'});
if ($vmap) {
$ulist = $vmap->{$pkg->{'shortver'}};
if ($ulist && @$ulist) {
&error(&text('dpkg_eusers', $pkg->{'phpver'},
scalar(@$ulist)));
}
}
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";
}
else {
print $text{'dpkgs_done'},"<p>\n";
}
}
&ui_print_footer("list_pkgs.cgi", $text{'pkgs_return'});

View File

@@ -230,5 +230,15 @@ pkgs_nousers=No domains
pkgs_ucount=$1 domains
pkgs_newver=PHP package to install:
pkgs_install=Install Now
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_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
__norefs=1

View File

@@ -54,7 +54,7 @@ if (&foreign_installed("package-updates")) {
print "<b>$text{'pkgs_newver'}</b>\n";
print &ui_select("u", undef,
[ map { [ $_->{'name'},
$_->{'name'}." (".$_->{'version'}.")" ] } @newpkgs ]);
$_->{'name'}." (".$_->{'ver'}.")" ] } @newpkgs ]);
print &ui_hidden(
"redir", &get_webprefix()."/$module_name/list_pkgs.cgi");
print &ui_hidden("redirdesc", $text{'pkgs_title'});

View File

@@ -878,9 +878,10 @@ sub list_php_base_packages
&foreign_require("software");
my $n = &software::list_packages();
my @rv;
my %done;
for(my $i=0; $i<$n; $i++) {
my $name = $software::packages{$i,'name'};
next if ($name !~ /^php(\d*)$/);
next if ($name !~ /^php(\d*)(-php)?$/);
my $suffix = $1;
my $phpver = $software::packages{$i,'version'};
$phpver =~ s/\-.*$//;
@@ -901,6 +902,7 @@ for(my $i=0; $i<$n; $i++) {
if ($shortver =~ /^5\./) {
$shortver = "5";
}
next if ($done{$phpver}++);
push(@rv, { 'name' => $software::packages{$i,'name'},
'system' => $software::packages{$i,'system'},
'ver' => $software::packages{$i,'version'},
@@ -930,7 +932,7 @@ foreach my $pkg (&package_updates::list_available()) {
$shortver = "5";
}
push(@rv, { 'name' => $pkg->{'name'},
'version' => $pkg->{'version'},
'ver' => $pkg->{'version'},
'shortver' => $shortver,
'phpver' => $phpver,
});
@@ -947,8 +949,8 @@ my %vmap;
&foreign_check("virtual-server") || return undef;
&foreign_require("virtual-server");
foreach my $d (&virtual_server::list_domains()) {
my $v = $d->{'php_fpm_version'} ||
$d->{'php_version'};
my $v = $d->{'php_mode'} eq 'fpm' ? $d->{'php_fpm_version'}
: $d->{'php_version'};
if ($v) {
$vmap{$v} ||= [ ];
push(@{$vmap{$v}}, $d);
@@ -957,5 +959,18 @@ foreach my $d (&virtual_server::list_domains()) {
return \%vmap;
}
# 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);
}
return $err;
}
1;