📋 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
87 lines
2.6 KiB
PHP
87 lines
2.6 KiB
PHP
<?php
|
||
|
||
namespace Illuminate\Console;
|
||
|
||
use Illuminate\Console\View\Components\TwoColumnDetail;
|
||
use Illuminate\Support\Stringable;
|
||
use Symfony\Component\Console\Formatter\OutputFormatter;
|
||
use Symfony\Component\Console\Helper\SymfonyQuestionHelper;
|
||
use Symfony\Component\Console\Output\OutputInterface;
|
||
use Symfony\Component\Console\Question\ChoiceQuestion;
|
||
use Symfony\Component\Console\Question\ConfirmationQuestion;
|
||
use Symfony\Component\Console\Question\Question;
|
||
|
||
class QuestionHelper extends SymfonyQuestionHelper
|
||
{
|
||
/**
|
||
* {@inheritdoc}
|
||
*
|
||
* @return void
|
||
*/
|
||
#[\Override]
|
||
protected function writePrompt(OutputInterface $output, Question $question): void
|
||
{
|
||
$text = OutputFormatter::escapeTrailingBackslash($question->getQuestion());
|
||
|
||
$text = $this->ensureEndsWithPunctuation($text);
|
||
|
||
$text = " <fg=default;options=bold>$text</></>";
|
||
|
||
$default = $question->getDefault();
|
||
|
||
if ($question->isMultiline()) {
|
||
$text .= sprintf(' (press %s to continue)', 'Windows' == PHP_OS_FAMILY
|
||
? '<comment>Ctrl+Z</comment> then <comment>Enter</comment>'
|
||
: '<comment>Ctrl+D</comment>');
|
||
}
|
||
|
||
switch (true) {
|
||
case null === $default:
|
||
$text = sprintf('<info>%s</info>', $text);
|
||
|
||
break;
|
||
|
||
case $question instanceof ConfirmationQuestion:
|
||
$text = sprintf('<info>%s (yes/no)</info> [<comment>%s</comment>]', $text, $default ? 'yes' : 'no');
|
||
|
||
break;
|
||
|
||
case $question instanceof ChoiceQuestion:
|
||
$choices = $question->getChoices();
|
||
$text = sprintf('<info>%s</info> [<comment>%s</comment>]', $text, OutputFormatter::escape($choices[$default] ?? $default));
|
||
|
||
break;
|
||
|
||
default:
|
||
$text = sprintf('<info>%s</info> [<comment>%s</comment>]', $text, OutputFormatter::escape($default));
|
||
|
||
break;
|
||
}
|
||
|
||
$output->writeln($text);
|
||
|
||
if ($question instanceof ChoiceQuestion) {
|
||
foreach ($question->getChoices() as $key => $value) {
|
||
with(new TwoColumnDetail($output))->render($value, $key);
|
||
}
|
||
}
|
||
|
||
$output->write('<options=bold>❯ </>');
|
||
}
|
||
|
||
/**
|
||
* Ensures the given string ends with punctuation.
|
||
*
|
||
* @param string $string
|
||
* @return string
|
||
*/
|
||
protected function ensureEndsWithPunctuation($string)
|
||
{
|
||
if (! (new Stringable($string))->endsWith(['?', ':', '!', '.'])) {
|
||
return "$string:";
|
||
}
|
||
|
||
return $string;
|
||
}
|
||
}
|