crontabManager = $crontabManager;
$this->tasksProvider = $tasksProvider;
parent::__construct();
}
/**
* @inheritdoc
*/
protected function configure()
{
$this->setName('cron:install')
->setDescription('Generates and installs crontab for current user')
->addOption(self::COMMAND_OPTION_FORCE, 'f', InputOption::VALUE_NONE, 'Force install tasks')
// @codingStandardsIgnoreStart
->addOption(self::COMMAND_OPTION_NON_OPTIONAL, 'd', InputOption::VALUE_NONE, 'Install only the non-optional (default) tasks');
// @codingStandardsIgnoreEnd
parent::configure();
}
/**
* Executes "cron:install" command.
*
* @param InputInterface $input
* @param OutputInterface $output
* @return int|null
* @throws LocalizedException
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
if ($this->crontabManager->getTasks() && !$input->getOption('force')) {
$output->writeln('Crontab has already been generated and saved');
return Cli::RETURN_FAILURE;
}
$tasks = $this->tasksProvider->getTasks();
if ($input->getOption(self::COMMAND_OPTION_NON_OPTIONAL)) {
$tasks = $this->extractNonOptionalTasks($tasks);
}
try {
$this->crontabManager->saveTasks($tasks);
} catch (LocalizedException $e) {
$output->writeln('' . $e->getMessage() . '');
return Cli::RETURN_FAILURE;
}
$output->writeln('Crontab has been generated and saved');
return Cli::RETURN_SUCCESS;
}
/**
* Returns an array of non-optional tasks
*
* @param array $tasks
* @return array
*/
private function extractNonOptionalTasks(array $tasks = []): array
{
$defaultTasks = [];
foreach ($tasks as $taskCode => $taskParams) {
if (!$taskParams['optional']) {
$defaultTasks[$taskCode] = $taskParams;
}
}
return $defaultTasks;
}
}