diff --git a/phpini/delete_pkgs.cgi b/phpini/delete_pkgs.cgi
new file mode 100644
index 000000000..36bbae3af
--- /dev/null
+++ b/phpini/delete_pkgs.cgi
@@ -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', "$pkg->{'name'}",
+ $pkg->{'phpver'}),"
\n";
+ $err = &delete_php_base_package($pkg);
+ if ($err) {
+ print &text('dpkgs_failed', $err),"
\n"; + } + else { + print $text{'dpkgs_done'},"
\n"; + } + } + +&ui_print_footer("list_pkgs.cgi", $text{'pkgs_return'}); diff --git a/phpini/lang/en b/phpini/lang/en index 5643bd5d0..7b81116f4 100644 --- a/phpini/lang/en +++ b/phpini/lang/en @@ -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 diff --git a/phpini/list_pkgs.cgi b/phpini/list_pkgs.cgi index db161d469..0a8738315 100644 --- a/phpini/list_pkgs.cgi +++ b/phpini/list_pkgs.cgi @@ -54,7 +54,7 @@ if (&foreign_installed("package-updates")) { print "$text{'pkgs_newver'}\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'}); diff --git a/phpini/phpini-lib.pl b/phpini/phpini-lib.pl index a9b012717..1e37c8b95 100755 --- a/phpini/phpini-lib.pl +++ b/phpini/phpini-lib.pl @@ -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;