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;
 }