/** * Creates a new package installation queue. * * @param string $queueType * @return array */ protected function createQueue($queueType) { if (isset($this->parameters['authData'])) { PackageUpdateServer::storeAuthData($this->parameters['authData']['packageUpdateServerID'], $this->parameters['authData']['username'], $this->parameters['authData']['password'], $this->parameters['authData']['saveCredentials']); } $scheduler = new PackageInstallationScheduler($this->parameters['packages']); try { $scheduler->buildPackageInstallationStack($queueType == 'install'); } catch (PackageUpdateUnauthorizedException $e) { return array('template' => $e->getRenderedTemplate()); } // validate exclusions if ($queueType == 'update') { $excludedPackages = $scheduler->getExcludedPackages(); if (!empty($excludedPackages)) { return array('excludedPackages' => true, 'template' => WCF::getTPL()->fetch('packageUpdateExcludedPackages', 'wcf', array('excludedPackages' => $excludedPackages))); } } $stack = $scheduler->getPackageInstallationStack(); $queueID = null; if (!empty($stack)) { $parentQueueID = 0; $processNo = PackageInstallationQueue::getNewProcessNo(); foreach ($stack as $package) { $queue = PackageInstallationQueueEditor::create(array('parentQueueID' => $parentQueueID, 'processNo' => $processNo, 'userID' => WCF::getUser()->userID, 'package' => $package['package'], 'packageName' => $package['packageName'], 'packageID' => $package['packageID'] ?: null, 'archive' => $package['archive'], 'action' => $package['action'])); $parentQueueID = $queue->queueID; if ($queueID === null) { $queueID = $queue->queueID; } } } return array('queueID' => $queueID); }