/**
  * 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);
 }