From 01d85c250cdf5b18c5a46cbbb31d8a774f37b90e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim=20D=C3=BCsterhus?= Date: Tue, 15 Nov 2022 11:13:32 +0100 Subject: [PATCH] Remove PackageArchive::getAllExistingRequirements() The last remaining user of this method was removed in the previous commit. The logic of this method was overly complex: - It handled the possibility that a single package is installed multiple times, which is not possible since forever. - It contained special (and semi-broken) logic for requirement links that are already stored in the database. Since a93b160e72731d72e58a13052c1b6b83b089552a all requirements in the database were deleted before this method was called in PackageInstallationDispatcher. It also failed to account for a requirement link existing, but the target package being of an insufficient version. --- .../system/package/PackageArchive.class.php | 68 ------------------- 1 file changed, 68 deletions(-) diff --git a/wcfsetup/install/files/lib/system/package/PackageArchive.class.php b/wcfsetup/install/files/lib/system/package/PackageArchive.class.php index 71bda79e32..18b0cf58dd 100644 --- a/wcfsetup/install/files/lib/system/package/PackageArchive.class.php +++ b/wcfsetup/install/files/lib/system/package/PackageArchive.class.php @@ -630,74 +630,6 @@ class PackageArchive return $this->instructions['update']; } - /** - * Checks which package requirements do already exist in right version. - * Returns a list with all existing requirements. - * - * @return array - */ - public function getAllExistingRequirements() - { - $existingRequirements = []; - $existingPackages = []; - if ($this->package !== null) { - $sql = "SELECT package.* - FROM wcf1_package_requirement requirement - LEFT JOIN wcf1_package package - ON package.packageID = requirement.requirement - WHERE requirement.packageID = ?"; - $statement = WCF::getDB()->prepare($sql); - $statement->execute([$this->package->packageID]); - while ($row = $statement->fetchArray()) { - $existingRequirements[$row['package']] = $row; - } - } - - // build sql - $packageNames = []; - $requirements = $this->getRequirements(); - foreach ($requirements as $requirement) { - if (isset($existingRequirements[$requirement['name']])) { - $existingPackages[$requirement['name']] = []; - $existingPackages[$requirement['name']][$existingRequirements[$requirement['name']]['packageID']] = $existingRequirements[$requirement['name']]; - } else { - $packageNames[] = $requirement['name']; - } - } - - // check whether the required packages do already exist - if (!empty($packageNames)) { - $conditions = new PreparedStatementConditionBuilder(); - $conditions->add("package.package IN (?)", [$packageNames]); - - $sql = "SELECT package.* - FROM wcf1_package package - {$conditions}"; - $statement = WCF::getDB()->prepare($sql); - $statement->execute($conditions->getParameters()); - while ($row = $statement->fetchArray()) { - // check required package version - if ( - isset($requirements[$row['package']]['minversion']) - && Package::compareVersion( - $row['packageVersion'], - $requirements[$row['package']]['minversion'] - ) == -1 - ) { - continue; - } - - if (!isset($existingPackages[$row['package']])) { - $existingPackages[$row['package']] = []; - } - - $existingPackages[$row['package']][$row['packageID']] = $row; - } - } - - return $existingPackages; - } - /** * Checks which package requirements do already exist in database. * Returns a list with the existing requirements. -- 2.20.1