protected function getSelectedProjects(InputInterface $input)
{
$projectList = $input->getOption('projects');
$projects = $this->getAllProjects($input);
if (!empty($projectList)) {
$projectIds = array_unique(preg_split('/[,\\s]+/', $projectList));
if ($invalid = array_diff($projectIds, array_keys($projects))) {
$this->stdErr->writeln(sprintf('Project ID(s) not found: <error>%s</error>', implode(', ', $invalid)));
return false;
}
} elseif (!$input->isInteractive()) {
$this->stdErr->writeln('In non-interactive mode, the --projects option must be specified.');
return false;
} elseif (!$this->getHelper('shell')->commandExists('dialog')) {
$this->stdErr->writeln('The "dialog" utility is required for interactive use.');
$this->stdErr->writeln('You can specify projects via the --projects option.');
return false;
} else {
$projectOptions = [];
foreach ($projects as $project) {
$projectOptions[$project->id] = $project->title ?: $project->id;
}
$projectIds = $this->showDialogChecklist($projectOptions, 'Choose one or more projects');
if (empty($projectIds)) {
return false;
}
$this->stdErr->writeln('Selected project(s): ' . implode(',', $projectIds));
$this->stdErr->writeln('');
}
return array_intersect_key($projects, array_flip($projectIds));
}