protected function selectOptionalPackages($currentNode, array $nodeData) { $installationStep = new PackageInstallationStep(); $document = $this->promptOptionalPackages($nodeData); if ($document !== null && $document instanceof form\FormDocument) { $installationStep->setDocument($document); $installationStep->setSplitNode(); } else { if (is_array($document)) { // get target child node $node = $currentNode; $queue = $this->queue; $shiftNodes = false; foreach ($nodeData as $package) { if (in_array($package['package'], $document)) { if (!$shiftNodes) { $this->nodeBuilder->shiftNodes($currentNode, 'tempNode'); $shiftNodes = true; } $queue = PackageInstallationQueueEditor::create(array('parentQueueID' => $queue->queueID, 'processNo' => $this->queue->processNo, 'userID' => WCF::getUser()->userID, 'package' => $package['package'], 'packageName' => $package['packageName'], 'archive' => $package['archive'], 'action' => $queue->action)); $installation = new PackageInstallationDispatcher($queue); $installation->nodeBuilder->setParentNode($node); $installation->nodeBuilder->buildNodes(); $node = $installation->nodeBuilder->getCurrentNode(); } } // shift nodes if ($shiftNodes) { $this->nodeBuilder->shiftNodes('tempNode', $node); } } } return $installationStep; }