/** * Sets parent package and rebuilds dependencies for both. */ protected function installPackageParent() { // do not handle parent package if current package is an application or does not have a plugin tag while within installation process if ($this->getArchive()->getPackageInfo('isApplication') || $this->getAction() != 'install' || !$this->getArchive()->getPackageInfo('plugin')) { return; } // get parent package from requirements $sql = "SELECT\trequirement\n\t\t\tFROM\twcf" . WCF_N . "_package_requirement\n\t\t\tWHERE\tpackageID = ?\n\t\t\t\tAND requirement IN (\n\t\t\t\t\tSELECT\tpackageID\n\t\t\t\t\tFROM\twcf" . WCF_N . "_package\n\t\t\t\t\tWHERE\tpackage = ?\n\t\t\t\t)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array($this->getPackage()->packageID, $this->getArchive()->getPackageInfo('plugin'))); $row = $statement->fetchArray(); if (!$row || empty($row['requirement'])) { throw new SystemException("can not find any available installations of required parent package '" . $this->getArchive()->getPackageInfo('plugin') . "'"); } // save parent package $packageEditor = new PackageEditor($this->getPackage()); $packageEditor->update(array('parentPackageID' => $row['requirement'])); // rebuild parent package dependencies Package::rebuildParentPackageDependencies($this->getPackage()->packageID); // rebuild parent's parent package dependencies Package::rebuildParentPackageDependencies($row['requirement']); // reload package object on next request $this->package = null; }
/** * Uninstalls current package. * * @param array $nodeData */ protected function uninstallPackage(array $nodeData) { PackageEditor::deleteAll(array($this->queue->packageID)); // remove localized package infos // todo: license/readme $sql = "DELETE FROM\twcf" . WCF_N . "_language_item\n\t\t\tWHERE\t\tlanguageItem IN (?, ?)"; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute(array('wcf.acp.package.packageName.package' . $this->queue->packageID, 'wcf.acp.package.packageDescription.package' . $this->queue->packageID)); // reset package cache CacheHandler::getInstance()->clearResource('packages'); // rebuild package dependencies Package::rebuildParentPackageDependencies($this->queue->packageID); }