Files
DrupalTutorial/vendor/consolidation/annotated-command/src/State/StateHelper.php
2024-07-15 12:33:27 +02:00

78 lines
2.2 KiB
PHP

<?php
namespace Consolidation\AnnotatedCommand\State;
use Consolidation\AnnotatedCommand\Output\OutputAwareInterface;
use Consolidation\AnnotatedCommand\State\SavableState;
use Consolidation\AnnotatedCommand\State\State;
use Symfony\Component\Console\Input\InputAwareInterface;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class StateHelper
{
/**
* Inject $input and $output into the command instance if it is set up to receive them.
*
* @param Callable|object $callback
* @param OutputInterface $output
* @return State
*/
public static function injectIntoCallbackObject($callback, InputInterface $input, OutputInterface $output = null)
{
return static::inject(static::recoverCallbackObject($callback), $input, $output);
}
/**
* Inject $input and $output into the command instance if it is set up to receive them.
*
* @param Callable|object $callback
* @param OutputInterface $output
* @return State
*/
public static function inject($target, InputInterface $input, OutputInterface $output = null)
{
// Do not allow injection unless the target can save its state
if (!$target || !($target instanceof SavableState)) {
return new class implements State {
public function restore()
{
}
};
}
$state = $target->currentState();
if ($target instanceof InputAwareInterface) {
$target->setInput($input);
}
if (isset($output) && $target instanceof OutputAwareInterface) {
$target->setOutput($output);
}
return $state;
}
/**
* If the command callback is a method of an object, return the object.
*
* @param Callable|object $callback
* @return object|bool
*/
protected static function recoverCallbackObject($callback)
{
if (is_object($callback)) {
return $callback;
}
if (!is_array($callback)) {
return false;
}
if (!is_object($callback[0])) {
return false;
}
return $callback[0];
}
}