2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Console\Helper ;
/**
* Helps outputting debug information when running an external program from a command .
*
* An external program can be a Process , an HTTP request , or anything else .
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class DebugFormatterHelper extends Helper
{
2015-08-27 12:03:05 -07:00
private $colors = array ( 'black' , 'red' , 'green' , 'yellow' , 'blue' , 'magenta' , 'cyan' , 'white' , 'default' );
2015-08-17 17:00:26 -07:00
private $started = array ();
private $count = - 1 ;
/**
2015-10-08 11:40:12 -07:00
* Starts a debug formatting session .
2015-08-17 17:00:26 -07:00
*
* @ param string $id The id of the formatting session
* @ param string $message The message to display
* @ param string $prefix The prefix to use
*
* @ return string
*/
public function start ( $id , $message , $prefix = 'RUN' )
{
$this -> started [ $id ] = array ( 'border' => ++ $this -> count % count ( $this -> colors ));
return sprintf ( " %s<bg=blue;fg=white> %s </> <fg=blue>%s</> \n " , $this -> getBorder ( $id ), $prefix , $message );
}
/**
2015-10-08 11:40:12 -07:00
* Adds progress to a formatting session .
2015-08-17 17:00:26 -07:00
*
* @ param string $id The id of the formatting session
* @ param string $buffer The message to display
* @ param bool $error Whether to consider the buffer as error
* @ param string $prefix The prefix for output
* @ param string $errorPrefix The prefix for error output
*
* @ return string
*/
public function progress ( $id , $buffer , $error = false , $prefix = 'OUT' , $errorPrefix = 'ERR' )
{
$message = '' ;
if ( $error ) {
if ( isset ( $this -> started [ $id ][ 'out' ])) {
$message .= " \n " ;
unset ( $this -> started [ $id ][ 'out' ]);
}
if ( ! isset ( $this -> started [ $id ][ 'err' ])) {
2015-10-08 11:40:12 -07:00
$message .= sprintf ( '%s<bg=red;fg=white> %s </> ' , $this -> getBorder ( $id ), $errorPrefix );
2015-08-17 17:00:26 -07:00
$this -> started [ $id ][ 'err' ] = true ;
}
$message .= str_replace ( " \n " , sprintf ( " \n %s<bg=red;fg=white> %s </> " , $this -> getBorder ( $id ), $errorPrefix ), $buffer );
} else {
if ( isset ( $this -> started [ $id ][ 'err' ])) {
$message .= " \n " ;
unset ( $this -> started [ $id ][ 'err' ]);
}
if ( ! isset ( $this -> started [ $id ][ 'out' ])) {
2015-10-08 11:40:12 -07:00
$message .= sprintf ( '%s<bg=green;fg=white> %s </> ' , $this -> getBorder ( $id ), $prefix );
2015-08-17 17:00:26 -07:00
$this -> started [ $id ][ 'out' ] = true ;
}
$message .= str_replace ( " \n " , sprintf ( " \n %s<bg=green;fg=white> %s </> " , $this -> getBorder ( $id ), $prefix ), $buffer );
}
return $message ;
}
/**
2015-10-08 11:40:12 -07:00
* Stops a formatting session .
2015-08-17 17:00:26 -07:00
*
* @ param string $id The id of the formatting session
* @ param string $message The message to display
* @ param bool $successful Whether to consider the result as success
* @ param string $prefix The prefix for the end output
*
* @ return string
*/
public function stop ( $id , $message , $successful , $prefix = 'RES' )
{
$trailingEOL = isset ( $this -> started [ $id ][ 'out' ]) || isset ( $this -> started [ $id ][ 'err' ]) ? " \n " : '' ;
if ( $successful ) {
return sprintf ( " %s%s<bg=green;fg=white> %s </> <fg=green>%s</> \n " , $trailingEOL , $this -> getBorder ( $id ), $prefix , $message );
}
$message = sprintf ( " %s%s<bg=red;fg=white> %s </> <fg=red>%s</> \n " , $trailingEOL , $this -> getBorder ( $id ), $prefix , $message );
unset ( $this -> started [ $id ][ 'out' ], $this -> started [ $id ][ 'err' ]);
return $message ;
}
/**
* @ param string $id The id of the formatting session
*
* @ return string
*/
private function getBorder ( $id )
{
return sprintf ( '<bg=%s> </>' , $this -> colors [ $this -> started [ $id ][ 'border' ]]);
}
/**
* { @ inheritdoc }
*/
public function getName ()
{
return 'debug_formatter' ;
}
}