2020-12-10 14:04:11 +01:00
< ? php
2021-04-27 08:32:47 +02:00
2020-12-10 14:04:11 +01:00
namespace Composer ;
2021-04-27 08:32:47 +02:00
use Composer\Autoload\ClassLoader ;
2020-12-10 14:04:11 +01:00
use Composer\Semver\VersionParser ;
2021-07-23 11:58:50 +02:00
2020-12-10 14:04:11 +01:00
class InstalledVersions
{
private static $installed = array (
'root' =>
array (
'pretty_version' => 'dev-master' ,
'version' => 'dev-master' ,
'aliases' =>
array (
),
2021-04-27 08:32:47 +02:00
'reference' => NULL ,
2020-12-10 14:04:11 +01:00
'name' => 'automattic/jetpack' ,
),
'versions' =>
array (
'automattic/jetpack' =>
array (
'pretty_version' => 'dev-master' ,
'version' => 'dev-master' ,
'aliases' =>
array (
),
2021-04-27 08:32:47 +02:00
'reference' => NULL ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-a8c-mc-stats' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.4.4' ,
'version' => '1.4.4.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '59df714196e8ac4fd69a4ddedcb9dbeb12e7ecb5' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-abtest' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.9.9' ,
'version' => '1.9.9.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => '426a5e252ccab742af8c58cdcf16c8367c16a3a3' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-assets' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.11.5' ,
'version' => '1.11.5.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '88f04c6eb63ee4ce801735c03f7db5cae05e79bc' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-autoloader' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v2.10.3' ,
'version' => '2.10.3.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => 'aab966d6f2c8fd6669d6f5b1378d8ced5fd665b4' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-backup' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.1.1' ,
'version' => '1.1.1.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => '1ec002e2e621218ac27fb07faae0ce52727a6816' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-blocks' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.4.1' ,
'version' => '1.4.1.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '2d8e214bb64856cc4e2413af2e3252c241c668ca' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-compat' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.6.5' ,
'version' => '1.6.5.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '8101adbec7971bae8746108a6fd261afae99524c' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-config' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.4.6' ,
'version' => '1.4.6.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '98f8080550901a8a29daf466ee75a4906c5f1ef0' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-connection' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.30.1' ,
'version' => '1.30.1.0' ,
2021-04-27 08:32:47 +02:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => 'c73a279ff07bdd343c8129ca40f56a6eb2b9273c' ,
2021-04-27 08:32:47 +02:00
),
'automattic/jetpack-connection-ui' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.3.0' ,
'version' => '1.3.0.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => 'a6ce83b175600073786753bf79a9cd6f793dc334' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-constants' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.6.5' ,
'version' => '1.6.5.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '1e02eebb828c6701f3bf97fa8404e9fc85d3fb63' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-device-detection' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.4.2' ,
'version' => '1.4.2.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '6f7c0560cac114a99066a703cf66813e325e8630' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-error' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.3.5' ,
'version' => '1.3.5.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => 'f81fa17c2afb559dd12c52dae8aedb44da6a4195' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-heartbeat' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.3.8' ,
'version' => '1.3.8.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => 'ed630c4a9271d5ce2bba15eec4ff32c448330b67' ,
),
'automattic/jetpack-identity-crisis' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v0.2.2' ,
'version' => '0.2.2.0' ,
2021-07-23 11:58:50 +02:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => 'f9e76478f8df130238f0843fd53472fff0b7e76e' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-jitm' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.16.2' ,
'version' => '1.16.2.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => '3276a4cf55b739c8c42448fd33f16f26ab766aaa' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-lazy-images' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.5.0' ,
'version' => '1.5.0.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '27d9a86239c61093557d9256bf9d46e589b384cc' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-licensing' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.4.4' ,
'version' => '1.4.4.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => '1355affaf0dabb72a55a75ed89159e567e458a20' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-logo' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.5.5' ,
'version' => '1.5.5.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '4b4a24e30ac76beea19a4d75b451e2b7a287db4c' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-options' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.13.0' ,
'version' => '1.13.0.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '2606ae27f9b4336ca1b34ee9ecd99ac658ef30fc' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-partner' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.5.1' ,
'version' => '1.5.1.0' ,
2021-04-27 08:32:47 +02:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => 'c5836805d2dd2367264408260d1f51a0a82a0203' ,
2021-04-27 08:32:47 +02:00
),
'automattic/jetpack-password-checker' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v0.1.2' ,
'version' => '0.1.2.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '408bf765942578276da69b10c2600564773dceee' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-redirect' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.7.0' ,
'version' => '1.7.0.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '8320a82f8daee5127a2c3e19cb4e2566ba4c94bb' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-roles' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.4.5' ,
'version' => '1.4.5.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => 'd04bbd4e012516d280a610e3961edef5cf241722' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-status' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.8.0' ,
'version' => '1.8.0.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '9da88ee253d69e4948c76e4080435aca23c65dbb' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-sync' =>
array (
2021-08-17 08:33:07 +02:00
'pretty_version' => 'v1.24.2' ,
'version' => '1.24.2.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-08-17 08:33:07 +02:00
'reference' => '08ddb52e2118daa59541dadedb87a25febf12ef5' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-terms-of-service' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.9.8' ,
'version' => '1.9.8.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '9ebb094dc1243b36c449ecb37a858511c9b41759' ,
2020-12-10 14:04:11 +01:00
),
'automattic/jetpack-tracking' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v1.13.7' ,
'version' => '1.13.7.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '8fd3b9aef38dd2dd9b072dfd9af5b9a3278b20b6' ,
2020-12-10 14:04:11 +01:00
),
'nojimage/twitter-text-php' =>
array (
2021-07-23 11:58:50 +02:00
'pretty_version' => 'v3.1.2' ,
'version' => '3.1.2.0' ,
2020-12-10 14:04:11 +01:00
'aliases' =>
array (
),
2021-07-23 11:58:50 +02:00
'reference' => '979bcf6a92d543b61588c7c0c0a87d0eb473d8f6' ,
2020-12-10 14:04:11 +01:00
),
),
);
2021-04-27 08:32:47 +02:00
private static $canGetVendors ;
private static $installedByVendor = array ();
2020-12-10 14:04:11 +01:00
public static function getInstalledPackages ()
{
2021-04-27 08:32:47 +02:00
$packages = array ();
foreach ( self :: getInstalled () as $installed ) {
$packages [] = array_keys ( $installed [ 'versions' ]);
}
if ( 1 === \count ( $packages )) {
return $packages [ 0 ];
}
return array_keys ( array_flip ( \call_user_func_array ( 'array_merge' , $packages )));
2020-12-10 14:04:11 +01:00
}
public static function isInstalled ( $packageName )
{
2021-04-27 08:32:47 +02:00
foreach ( self :: getInstalled () as $installed ) {
if ( isset ( $installed [ 'versions' ][ $packageName ])) {
return true ;
}
}
return false ;
2020-12-10 14:04:11 +01:00
}
public static function satisfies ( VersionParser $parser , $packageName , $constraint )
{
$constraint = $parser -> parseConstraints ( $constraint );
$provided = $parser -> parseConstraints ( self :: getVersionRanges ( $packageName ));
return $provided -> matches ( $constraint );
}
public static function getVersionRanges ( $packageName )
{
2021-04-27 08:32:47 +02:00
foreach ( self :: getInstalled () as $installed ) {
if ( ! isset ( $installed [ 'versions' ][ $packageName ])) {
continue ;
2020-12-10 14:04:11 +01:00
}
$ranges = array ();
2021-04-27 08:32:47 +02:00
if ( isset ( $installed [ 'versions' ][ $packageName ][ 'pretty_version' ])) {
$ranges [] = $installed [ 'versions' ][ $packageName ][ 'pretty_version' ];
2020-12-10 14:04:11 +01:00
}
2021-04-27 08:32:47 +02:00
if ( array_key_exists ( 'aliases' , $installed [ 'versions' ][ $packageName ])) {
$ranges = array_merge ( $ranges , $installed [ 'versions' ][ $packageName ][ 'aliases' ]);
2020-12-10 14:04:11 +01:00
}
2021-04-27 08:32:47 +02:00
if ( array_key_exists ( 'replaced' , $installed [ 'versions' ][ $packageName ])) {
$ranges = array_merge ( $ranges , $installed [ 'versions' ][ $packageName ][ 'replaced' ]);
2020-12-10 14:04:11 +01:00
}
2021-04-27 08:32:47 +02:00
if ( array_key_exists ( 'provided' , $installed [ 'versions' ][ $packageName ])) {
$ranges = array_merge ( $ranges , $installed [ 'versions' ][ $packageName ][ 'provided' ]);
2020-12-10 14:04:11 +01:00
}
return implode ( ' || ' , $ranges );
}
2021-04-27 08:32:47 +02:00
throw new \OutOfBoundsException ( 'Package "' . $packageName . '" is not installed' );
}
2020-12-10 14:04:11 +01:00
public static function getVersion ( $packageName )
{
2021-04-27 08:32:47 +02:00
foreach ( self :: getInstalled () as $installed ) {
if ( ! isset ( $installed [ 'versions' ][ $packageName ])) {
continue ;
2020-12-10 14:04:11 +01:00
}
2021-04-27 08:32:47 +02:00
if ( ! isset ( $installed [ 'versions' ][ $packageName ][ 'version' ])) {
2020-12-10 14:04:11 +01:00
return null ;
}
2021-04-27 08:32:47 +02:00
return $installed [ 'versions' ][ $packageName ][ 'version' ];
}
throw new \OutOfBoundsException ( 'Package "' . $packageName . '" is not installed' );
2020-12-10 14:04:11 +01:00
}
public static function getPrettyVersion ( $packageName )
{
2021-04-27 08:32:47 +02:00
foreach ( self :: getInstalled () as $installed ) {
if ( ! isset ( $installed [ 'versions' ][ $packageName ])) {
continue ;
2020-12-10 14:04:11 +01:00
}
2021-04-27 08:32:47 +02:00
if ( ! isset ( $installed [ 'versions' ][ $packageName ][ 'pretty_version' ])) {
2020-12-10 14:04:11 +01:00
return null ;
}
2021-04-27 08:32:47 +02:00
return $installed [ 'versions' ][ $packageName ][ 'pretty_version' ];
}
throw new \OutOfBoundsException ( 'Package "' . $packageName . '" is not installed' );
2020-12-10 14:04:11 +01:00
}
public static function getReference ( $packageName )
{
2021-04-27 08:32:47 +02:00
foreach ( self :: getInstalled () as $installed ) {
if ( ! isset ( $installed [ 'versions' ][ $packageName ])) {
continue ;
2020-12-10 14:04:11 +01:00
}
2021-04-27 08:32:47 +02:00
if ( ! isset ( $installed [ 'versions' ][ $packageName ][ 'reference' ])) {
2020-12-10 14:04:11 +01:00
return null ;
}
2021-04-27 08:32:47 +02:00
return $installed [ 'versions' ][ $packageName ][ 'reference' ];
}
throw new \OutOfBoundsException ( 'Package "' . $packageName . '" is not installed' );
2020-12-10 14:04:11 +01:00
}
public static function getRootPackage ()
{
2021-04-27 08:32:47 +02:00
$installed = self :: getInstalled ();
return $installed [ 0 ][ 'root' ];
2020-12-10 14:04:11 +01:00
}
2021-07-23 11:58:50 +02:00
2020-12-10 14:04:11 +01:00
public static function getRawData ()
{
2021-07-23 11:58:50 +02:00
@ trigger_error ( 'getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.' , E_USER_DEPRECATED );
2020-12-10 14:04:11 +01:00
return self :: $installed ;
}
2021-07-23 11:58:50 +02:00
public static function getAllRawData ()
{
return self :: getInstalled ();
}
2020-12-10 14:04:11 +01:00
public static function reload ( $data )
{
self :: $installed = $data ;
2021-04-27 08:32:47 +02:00
self :: $installedByVendor = array ();
}
2021-07-23 11:58:50 +02:00
2021-04-27 08:32:47 +02:00
private static function getInstalled ()
{
if ( null === self :: $canGetVendors ) {
self :: $canGetVendors = method_exists ( 'Composer\Autoload\ClassLoader' , 'getRegisteredLoaders' );
}
$installed = array ();
if ( self :: $canGetVendors ) {
foreach ( ClassLoader :: getRegisteredLoaders () as $vendorDir => $loader ) {
if ( isset ( self :: $installedByVendor [ $vendorDir ])) {
$installed [] = self :: $installedByVendor [ $vendorDir ];
} elseif ( is_file ( $vendorDir . '/composer/installed.php' )) {
$installed [] = self :: $installedByVendor [ $vendorDir ] = require $vendorDir . '/composer/installed.php' ;
}
}
}
$installed [] = self :: $installed ;
return $installed ;
2020-12-10 14:04:11 +01:00
}
}