/** * Validates if the package has suitable install or update instructions * * @param string $requiredVersion * @param integer $validationMode */ protected function validateInstructions($requiredVersion, $validationMode) { $package = $this->getPackage(); // delivered package does not provide the minimum required version if (Package::compareVersion($requiredVersion, $this->archive->getPackageInfo('version'), '>')) { throw new PackageValidationException(PackageValidationException::INSUFFICIENT_VERSION, array('packageName' => $package->packageName, 'packageVersion' => $package->packageVersion, 'deliveredPackageVersion' => $this->archive->getPackageInfo('version'))); } // package is not installed yet if ($package === null) { $instructions = $this->archive->getInstallInstructions(); if (empty($instructions)) { throw new PackageValidationException(PackageValidationException::NO_INSTALL_PATH, array('packageName' => $this->archive->getPackageInfo('name'))); } if ($validationMode == PackageValidationManager::VALIDATION_RECURSIVE) { $this->validatePackageInstallationPlugins('install', $instructions); } } else { // package is already installed, check update path if (!$this->archive->isValidUpdate($package)) { throw new PackageValidationException(PackageValidationException::NO_UPDATE_PATH, array('packageName' => $package->packageName, 'packageVersion' => $package->packageVersion, 'deliveredPackageVersion' => $this->archive->getPackageInfo('version'))); } if ($validationMode === PackageValidationManager::VALIDATION_RECURSIVE) { $this->validatePackageInstallationPlugins('update', $this->archive->getUpdateInstructions()); } } }