コード例 #1
0
 /**
  * Checks for conflicted exclusions.
  */
 protected function checkExclusions()
 {
     $excludedPackages = $this->packageArchive->getConflictedExcludedPackages();
     if (count($excludedPackages) > 0) {
         // this package exludes existing packages -> stop installation
         WCF::getTPL()->assign(array('excludedPackages' => $excludedPackages));
         WCF::getTPL()->display('packageInstallationExcludedPackages');
         exit;
     }
     $excludingPackages = $this->packageArchive->getConflictedExcludingPackages();
     if (count($excludingPackages) > 0) {
         $stop = 1;
         // this package is excluded by existing packages
         $sql = "SELECT\t*\n\t\t\t\tFROM\twcf" . WCF_N . "_package_installation_queue\n\t\t\t\tWHERE\tprocessNo = " . $this->processNo . "\n\t\t\t\t\tAND packageID IN (" . implode(',', array_keys($excludingPackages)) . ")";
         $result = WCF::getDB()->sendQuery($sql);
         while ($row = WCF::getDB()->fetchArray($result)) {
             $archive = new PackageArchive($row['archive']);
             $archive->openArchive();
             $newExclusions = $archive->getExcludedPackages();
             if (!count($newExclusions) || !isset($newExclusions[$this->packageArchive->getPackageInfo('name')]) || isset($newExclusions[$this->packageArchive->getPackageInfo('name')]['version']) && Package::compareVersion($this->packageArchive->getPackageInfo('version'), $newExclusions[$this->packageArchive->getPackageInfo('name')]['version'], '<')) {
                 unset($excludingPackages[$row['packageID']]);
                 $stop = 0;
             }
         }
         if (count($excludingPackages) > 0) {
             WCF::getTPL()->assign(array('excludingPackages' => $excludingPackages, 'stop' => $stop, 'nextStep' => 'package'));
             WCF::getTPL()->display('packageInstallationExcludingPackages');
             exit;
         }
     }
 }