From 0a5e58201ac73e7ac53a5b7bcf46986abc48d8df Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Thu, 27 Jun 2024 12:38:50 -0700 Subject: [PATCH] Correctly account for "or" dependent extensions in upgrade script --- upgrade.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/upgrade.php b/upgrade.php index 798d9d3c8f..0215c3937a 100644 --- a/upgrade.php +++ b/upgrade.php @@ -282,19 +282,24 @@ foreach ($required_exts_array as $required_ext) { // Split the either/ors by their pipe and put them into an array $require_either = explode("|", $required_ext); + $has_one_required_ext = false; + // Now loop through the either/or array and see whether any of the options match foreach ($require_either as $require_either_value) { if (in_array($require_either_value, $loaded_exts_array)) { $ext_installed .= '√ '.$require_either_value." is installed!\n"; - break; - // If no match, add it to the string for errors - } else { - $ext_missing .= '✘ MISSING PHP EXTENSION: '.str_replace("|", " OR ", $required_ext)."\n"; + $has_one_required_ext = true; break; } } + // If no match, add it to the string for errors + if (!$has_one_required_ext) { + $ext_missing .= '✘ MISSING PHP EXTENSION: '.str_replace("|", " OR ", $required_ext)."\n"; + break; + } + // If this isn't an either/or option, just add it to the string of errors conventionally } elseif (!in_array($required_ext, $recommended_exts_array)){ $ext_missing .= '✘ MISSING PHP EXTENSION: '.$required_ext."\n";