/**
  * @see Action::execute()
  */
 public function execute()
 {
     // call execute event
     parent::execute();
     // save selection
     if ($this->saveSelection) {
         $sql = '';
         foreach ($this->packages as $packageName => $packageData) {
             if (!empty($sql)) {
                 $sql .= ',';
             }
             $sql .= "(" . $this->source->sourceID . ",\r\n\t\t\t\t\t'" . escapeString($this->directory) . "',\r\n\t\t\t\t\t'" . escapeString($packageName) . "',\r\n\t\t\t\t\t'" . escapeString($packageData['hash']) . "',\r\n\t\t\t\t\t'" . escapeString($packageData['directory']) . "'\r\n\t\t\t\t\t)";
         }
         if (!empty($sql)) {
             $sql = "INSERT INTO\t\tpb" . PB_N . "_selected_package\r\n\t\t\t\t\t\t\t\t(sourceID, directory, packageName, hash, resourceDirectory)\r\n\t\t\t\t\tVALUES\t\t\t" . $sql . "\r\n\t\t\t\t\tON DUPLICATE KEY UPDATE\tresourceDirectory = VALUES(resourceDirectory)";
             WCF::getDB()->sendQuery($sql);
         }
     }
     // set package resources
     PackageHelper::registerPackageResources($this->packages);
     // read package
     $pr = new PackageReader($this->source->sourceID, $this->directory);
     try {
         // build package
         $pb = new PackageBuilder($this->source, $pr, $this->directory, $this->filename);
         if ($this->wcfSetupResource) {
             require_once PB_DIR . 'lib/system/package/StandalonePackageBuilder.class.php';
             $spb = new StandalonePackageBuilder($this->source, $this->wcfSetupResource);
             $spb->createWcfSetup($pb->getArchiveLocation());
         }
     } catch (SystemException $e) {
         PackageHelper::clearTemporaryFiles();
         throw $e;
     }
     // clear previously created archives
     PackageHelper::clearTemporaryFiles();
     // call executed event
     $this->executed();
     // forward
     HeaderUtil::redirect('index.php?page=SourceView&sourceID=' . $this->source->sourceID . SID_ARG_2ND_NOT_ENCODED);
     exit;
 }