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\HttpKernel\DataCollector ;
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpFoundation\Response ;
2018-11-23 12:29:20 +00:00
use Symfony\Component\HttpKernel\Kernel ;
use Symfony\Component\HttpKernel\KernelInterface ;
use Symfony\Component\VarDumper\Caster\LinkStub ;
2015-08-17 17:00:26 -07:00
/**
* @ author Fabien Potencier < fabien @ symfony . com >
*/
2018-11-23 12:29:20 +00:00
class ConfigDataCollector extends DataCollector implements LateDataCollectorInterface
2015-08-17 17:00:26 -07:00
{
/**
* @ var KernelInterface
*/
private $kernel ;
private $name ;
private $version ;
2018-11-23 12:29:20 +00:00
private $hasVarDumper ;
2015-08-17 17:00:26 -07:00
/**
* @ param string $name The name of the application using the web profiler
* @ param string $version The version of the application using the web profiler
*/
public function __construct ( $name = null , $version = null )
{
$this -> name = $name ;
$this -> version = $version ;
2018-11-23 12:29:20 +00:00
$this -> hasVarDumper = class_exists ( LinkStub :: class );
2015-08-17 17:00:26 -07:00
}
/**
* Sets the Kernel associated with this Request .
*/
public function setKernel ( KernelInterface $kernel = null )
{
$this -> kernel = $kernel ;
}
/**
* { @ inheritdoc }
*/
public function collect ( Request $request , Response $response , \Exception $exception = null )
{
$this -> data = array (
'app_name' => $this -> name ,
'app_version' => $this -> version ,
'token' => $response -> headers -> get ( 'X-Debug-Token' ),
'symfony_version' => Kernel :: VERSION ,
'symfony_state' => 'unknown' ,
'name' => isset ( $this -> kernel ) ? $this -> kernel -> getName () : 'n/a' ,
'env' => isset ( $this -> kernel ) ? $this -> kernel -> getEnvironment () : 'n/a' ,
'debug' => isset ( $this -> kernel ) ? $this -> kernel -> isDebug () : 'n/a' ,
'php_version' => PHP_VERSION ,
2018-11-23 12:29:20 +00:00
'php_architecture' => PHP_INT_SIZE * 8 ,
'php_intl_locale' => class_exists ( 'Locale' , false ) && \Locale :: getDefault () ? \Locale :: getDefault () : 'n/a' ,
'php_timezone' => date_default_timezone_get (),
'xdebug_enabled' => \extension_loaded ( 'xdebug' ),
'apcu_enabled' => \extension_loaded ( 'apcu' ) && filter_var ( ini_get ( 'apc.enabled' ), FILTER_VALIDATE_BOOLEAN ),
'zend_opcache_enabled' => \extension_loaded ( 'Zend OPcache' ) && filter_var ( ini_get ( 'opcache.enable' ), FILTER_VALIDATE_BOOLEAN ),
2015-08-17 17:00:26 -07:00
'bundles' => array (),
2018-11-23 12:29:20 +00:00
'sapi_name' => \PHP_SAPI ,
2015-08-17 17:00:26 -07:00
);
if ( isset ( $this -> kernel )) {
foreach ( $this -> kernel -> getBundles () as $name => $bundle ) {
2018-11-23 12:29:20 +00:00
$this -> data [ 'bundles' ][ $name ] = $this -> hasVarDumper ? new LinkStub ( $bundle -> getPath ()) : $bundle -> getPath ();
2015-08-17 17:00:26 -07:00
}
$this -> data [ 'symfony_state' ] = $this -> determineSymfonyState ();
2018-11-23 12:29:20 +00:00
$this -> data [ 'symfony_minor_version' ] = sprintf ( '%s.%s' , Kernel :: MAJOR_VERSION , Kernel :: MINOR_VERSION );
$eom = \DateTime :: createFromFormat ( 'm/Y' , Kernel :: END_OF_MAINTENANCE );
$eol = \DateTime :: createFromFormat ( 'm/Y' , Kernel :: END_OF_LIFE );
$this -> data [ 'symfony_eom' ] = $eom -> format ( 'F Y' );
$this -> data [ 'symfony_eol' ] = $eol -> format ( 'F Y' );
}
if ( preg_match ( '~^(\d+(?:\.\d+)*)(.+)?$~' , $this -> data [ 'php_version' ], $matches ) && isset ( $matches [ 2 ])) {
$this -> data [ 'php_version' ] = $matches [ 1 ];
$this -> data [ 'php_version_extra' ] = $matches [ 2 ];
2015-08-17 17:00:26 -07:00
}
}
2018-11-23 12:29:20 +00:00
/**
* { @ inheritdoc }
*/
public function reset ()
{
$this -> data = array ();
}
public function lateCollect ()
{
$this -> data = $this -> cloneVar ( $this -> data );
}
2015-08-17 17:00:26 -07:00
public function getApplicationName ()
{
return $this -> data [ 'app_name' ];
}
public function getApplicationVersion ()
{
return $this -> data [ 'app_version' ];
}
/**
* Gets the token .
*
* @ return string The token
*/
public function getToken ()
{
return $this -> data [ 'token' ];
}
/**
* Gets the Symfony version .
*
* @ return string The Symfony version
*/
public function getSymfonyVersion ()
{
return $this -> data [ 'symfony_version' ];
}
/**
* Returns the state of the current Symfony release .
*
* @ return string One of : unknown , dev , stable , eom , eol
*/
public function getSymfonyState ()
{
return $this -> data [ 'symfony_state' ];
}
2018-11-23 12:29:20 +00:00
/**
* Returns the minor Symfony version used ( without patch numbers of extra
* suffix like " RC " , " beta " , etc . ) .
*
* @ return string
*/
public function getSymfonyMinorVersion ()
{
return $this -> data [ 'symfony_minor_version' ];
}
/**
* Returns the human redable date when this Symfony version ends its
* maintenance period .
*
* @ return string
*/
public function getSymfonyEom ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'symfony_eom' ];
}
/**
* Returns the human redable date when this Symfony version reaches its
* " end of life " and won ' t receive bugs or security fixes .
*
* @ return string
*/
public function getSymfonyEol ()
{
return $this -> data [ 'symfony_eol' ];
2015-08-17 17:00:26 -07:00
}
/**
* Gets the PHP version .
*
* @ return string The PHP version
*/
public function getPhpVersion ()
{
return $this -> data [ 'php_version' ];
}
/**
2018-11-23 12:29:20 +00:00
* Gets the PHP version extra part .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return string | null The extra part
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function getPhpVersionExtra ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return isset ( $this -> data [ 'php_version_extra' ]) ? $this -> data [ 'php_version_extra' ] : null ;
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* @ return int The PHP architecture as number of bits ( e . g . 32 or 64 )
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function getPhpArchitecture ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'php_architecture' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* @ return string
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function getPhpIntlLocale ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'php_intl_locale' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* @ return string
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function getPhpTimezone ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'php_timezone' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* Gets the application name .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return string The application name
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function getAppName ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'name' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* Gets the environment .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return string The environment
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function getEnv ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'env' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* Returns true if the debug is enabled .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return bool true if debug is enabled , false otherwise
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function isDebug ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'debug' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* Returns true if the XDebug is enabled .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return bool true if XDebug is enabled , false otherwise
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function hasXDebug ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'xdebug_enabled' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* Returns true if APCu is enabled .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return bool true if APCu is enabled , false otherwise
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function hasApcu ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'apcu_enabled' ];
2015-08-17 17:00:26 -07:00
}
/**
2018-11-23 12:29:20 +00:00
* Returns true if Zend OPcache is enabled .
2015-08-17 17:00:26 -07:00
*
2018-11-23 12:29:20 +00:00
* @ return bool true if Zend OPcache is enabled , false otherwise
2015-08-17 17:00:26 -07:00
*/
2018-11-23 12:29:20 +00:00
public function hasZendOpcache ()
2015-08-17 17:00:26 -07:00
{
2018-11-23 12:29:20 +00:00
return $this -> data [ 'zend_opcache_enabled' ];
2015-08-17 17:00:26 -07:00
}
public function getBundles ()
{
return $this -> data [ 'bundles' ];
}
/**
* Gets the PHP SAPI name .
*
* @ return string The environment
*/
public function getSapiName ()
{
return $this -> data [ 'sapi_name' ];
}
/**
* { @ inheritdoc }
*/
public function getName ()
{
return 'config' ;
}
/**
* Tries to retrieve information about the current Symfony version .
*
* @ return string One of : dev , stable , eom , eol
*/
private function determineSymfonyState ()
{
$now = new \DateTime ();
$eom = \DateTime :: createFromFormat ( 'm/Y' , Kernel :: END_OF_MAINTENANCE ) -> modify ( 'last day of this month' );
$eol = \DateTime :: createFromFormat ( 'm/Y' , Kernel :: END_OF_LIFE ) -> modify ( 'last day of this month' );
if ( $now > $eol ) {
$versionState = 'eol' ;
} elseif ( $now > $eom ) {
$versionState = 'eom' ;
} elseif ( '' !== Kernel :: EXTRA_VERSION ) {
$versionState = 'dev' ;
} else {
$versionState = 'stable' ;
}
return $versionState ;
}
}