📋 Commit iniziale con: - ✅ Documentazione unificata in docs/ - ✅ Codice Laravel in netgescon-laravel/ - ✅ Script automazione in scripts/ - ✅ Configurazione sync rsync - ✅ Struttura organizzata e pulita 🔄 Versione: 2025.07.19-1644 🎯 Sistema pronto per Git distribuito
120 lines
3.4 KiB
PHP
120 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace Illuminate\Console\Scheduling;
|
|
|
|
use Illuminate\Console\Application;
|
|
use Illuminate\Console\Command;
|
|
use Symfony\Component\Console\Attribute\AsCommand;
|
|
|
|
use function Laravel\Prompts\select;
|
|
|
|
#[AsCommand(name: 'schedule:test')]
|
|
class ScheduleTestCommand extends Command
|
|
{
|
|
/**
|
|
* The console command name.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'schedule:test {--name= : The name of the scheduled command to run}';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Run a scheduled command';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
|
* @return void
|
|
*/
|
|
public function handle(Schedule $schedule)
|
|
{
|
|
$phpBinary = Application::phpBinary();
|
|
|
|
$commands = $schedule->events();
|
|
|
|
$commandNames = [];
|
|
|
|
foreach ($commands as $command) {
|
|
$commandNames[] = $command->command ?? $command->getSummaryForDisplay();
|
|
}
|
|
|
|
if (empty($commandNames)) {
|
|
return $this->components->info('No scheduled commands have been defined.');
|
|
}
|
|
|
|
if (! empty($name = $this->option('name'))) {
|
|
$commandBinary = $phpBinary.' '.Application::artisanBinary();
|
|
|
|
$matches = array_filter($commandNames, function ($commandName) use ($commandBinary, $name) {
|
|
return trim(str_replace($commandBinary, '', $commandName)) === $name;
|
|
});
|
|
|
|
if (count($matches) !== 1) {
|
|
$this->components->info('No matching scheduled command found.');
|
|
|
|
return;
|
|
}
|
|
|
|
$index = key($matches);
|
|
} else {
|
|
$index = $this->getSelectedCommandByIndex($commandNames);
|
|
}
|
|
|
|
$event = $commands[$index];
|
|
|
|
$summary = $event->getSummaryForDisplay();
|
|
|
|
$command = $event instanceof CallbackEvent
|
|
? $summary
|
|
: trim(str_replace($phpBinary, '', $event->command));
|
|
|
|
$description = sprintf(
|
|
'Running [%s]%s',
|
|
$command,
|
|
$event->runInBackground ? ' normally in background' : '',
|
|
);
|
|
|
|
$event->runInBackground = false;
|
|
|
|
$this->components->task($description, fn () => $event->run($this->laravel));
|
|
|
|
if (! $event instanceof CallbackEvent) {
|
|
$this->components->bulletList([$event->getSummaryForDisplay()]);
|
|
}
|
|
|
|
$this->newLine();
|
|
}
|
|
|
|
/**
|
|
* Get the selected command name by index.
|
|
*
|
|
* @param array $commandNames
|
|
* @return int
|
|
*/
|
|
protected function getSelectedCommandByIndex(array $commandNames)
|
|
{
|
|
if (count($commandNames) !== count(array_unique($commandNames))) {
|
|
// Some commands (likely closures) have the same name, append unique indexes to each one...
|
|
$uniqueCommandNames = array_map(function ($index, $value) {
|
|
return "$value [$index]";
|
|
}, array_keys($commandNames), $commandNames);
|
|
|
|
$selectedCommand = select('Which command would you like to run?', $uniqueCommandNames);
|
|
|
|
preg_match('/\[(\d+)\]/', $selectedCommand, $choice);
|
|
|
|
return (int) $choice[1];
|
|
} else {
|
|
return array_search(
|
|
select('Which command would you like to run?', $commandNames),
|
|
$commandNames
|
|
);
|
|
}
|
|
}
|
|
}
|