Subversion Repositories oidplus

Rev

Rev 637 | Rev 663 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13. namespace Composer;
  14.  
  15. use Composer\Autoload\ClassLoader;
  16. use Composer\Semver\VersionParser;
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25. class InstalledVersions
  26. {
  27. private static $installed = array (
  28.   'root' =>
  29.   array (
  30.     'pretty_version' => '2.0',
  31.     'version' => '2.0.0.0',
  32.     'aliases' =>
  33.     array (
  34.     ),
  35.     'reference' => NULL,
  36.     'name' => 'danielmarschall/oidplus',
  37.   ),
  38.   'versions' =>
  39.   array (
  40.     'components/jquery' =>
  41.     array (
  42.       'pretty_version' => '3.6.0',
  43.       'version' => '3.6.0.0',
  44.       'aliases' =>
  45.       array (
  46.       ),
  47.       'reference' => '6cf38ee1fd04b6adf8e7dda161283aa35be818c3',
  48.     ),
  49.     'components/jqueryui' =>
  50.     array (
  51.       'pretty_version' => '1.12.1',
  52.       'version' => '1.12.1.0',
  53.       'aliases' =>
  54.       array (
  55.       ),
  56.       'reference' => '44ecf3794cc56b65954cc19737234a3119d036cc',
  57.     ),
  58.     'danielmarschall/fileformats' =>
  59.     array (
  60.       'pretty_version' => 'dev-master',
  61.       'version' => 'dev-master',
  62.       'aliases' =>
  63.       array (
  64.         0 => '9999999-dev',
  65.       ),
  66.       'reference' => 'acfeaf40523a3a3cd0b6dbf18f3dc2349a3bec25',
  67.     ),
  68.     'danielmarschall/oidplus' =>
  69.     array (
  70.       'pretty_version' => '2.0',
  71.       'version' => '2.0.0.0',
  72.       'aliases' =>
  73.       array (
  74.       ),
  75.       'reference' => NULL,
  76.     ),
  77.     'danielmarschall/php_utils' =>
  78.     array (
  79.       'pretty_version' => 'dev-master',
  80.       'version' => 'dev-master',
  81.       'aliases' =>
  82.       array (
  83.         0 => '9999999-dev',
  84.       ),
  85.       'reference' => 'f5e662c1d9af308613277de02adbf109ca1fa368',
  86.     ),
  87.     'danielmarschall/uuid_mac_utils' =>
  88.     array (
  89.       'pretty_version' => 'dev-master',
  90.       'version' => 'dev-master',
  91.       'aliases' =>
  92.       array (
  93.         0 => '9999999-dev',
  94.       ),
  95.       'reference' => '7b292091da6fd9ab93b06be767754ee668ff457c',
  96.     ),
  97.     'danielmarschall/vnag' =>
  98.     array (
  99.       'pretty_version' => 'dev-master',
  100.       'version' => 'dev-master',
  101.       'aliases' =>
  102.       array (
  103.         0 => '9999999-dev',
  104.       ),
  105.       'reference' => '4f729d8b09e4750c1b9ae762519d50ad8d25609a',
  106.     ),
  107.     'dcodeio/bcrypt.js' =>
  108.     array (
  109.       'pretty_version' => 'master',
  110.       'version' => 'dev-master',
  111.       'aliases' =>
  112.       array (
  113.       ),
  114.       'reference' => 'master',
  115.     ),
  116.     'emn178/js-sha3' =>
  117.     array (
  118.       'pretty_version' => 'master',
  119.       'version' => 'dev-master',
  120.       'aliases' =>
  121.       array (
  122.       ),
  123.       'reference' => 'master',
  124.     ),
  125.     'firebase/php-jwt' =>
  126.     array (
  127.       'pretty_version' => 'v5.4.0',
  128.       'version' => '5.4.0.0',
  129.       'aliases' =>
  130.       array (
  131.       ),
  132.       'reference' => 'd2113d9b2e0e349796e72d2a63cf9319100382d2',
  133.     ),
  134.     'gedmarc/layout' =>
  135.     array (
  136.       'pretty_version' => 'master',
  137.       'version' => 'dev-master',
  138.       'aliases' =>
  139.       array (
  140.       ),
  141.       'reference' => 'master',
  142.     ),
  143.     'google/recaptcha' =>
  144.     array (
  145.       'pretty_version' => 'dev-master',
  146.       'version' => 'dev-master',
  147.       'aliases' =>
  148.       array (
  149.         0 => '1.2.x-dev',
  150.       ),
  151.       'reference' => 'f911286ad361c9fba1b422c07f040852c0c193a3',
  152.     ),
  153.     'matthiasmullie/minify' =>
  154.     array (
  155.       'pretty_version' => '1.3.66',
  156.       'version' => '1.3.66.0',
  157.       'aliases' =>
  158.       array (
  159.       ),
  160.       'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6',
  161.     ),
  162.     'matthiasmullie/path-converter' =>
  163.     array (
  164.       'pretty_version' => '1.1.3',
  165.       'version' => '1.1.3.0',
  166.       'aliases' =>
  167.       array (
  168.       ),
  169.       'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9',
  170.     ),
  171.     'mikemcl/bignumber.js' =>
  172.     array (
  173.       'pretty_version' => 'master',
  174.       'version' => 'dev-master',
  175.       'aliases' =>
  176.       array (
  177.       ),
  178.       'reference' => 'master',
  179.     ),
  180.     'n-other/php-sha3' =>
  181.     array (
  182.       'pretty_version' => 'dev-master',
  183.       'version' => 'dev-master',
  184.       'aliases' =>
  185.       array (
  186.         0 => '9999999-dev',
  187.       ),
  188.       'reference' => '54ee3b90986e88286d333319e6340b90bde4f71a',
  189.     ),
  190.     'spamspan/spamspan' =>
  191.     array (
  192.       'pretty_version' => 'master',
  193.       'version' => 'dev-master',
  194.       'aliases' =>
  195.       array (
  196.       ),
  197.       'reference' => 'master',
  198.     ),
  199.     'symfony/polyfill-mbstring' =>
  200.     array (
  201.       'pretty_version' => 'v1.19.0',
  202.       'version' => '1.19.0.0',
  203.       'aliases' =>
  204.       array (
  205.       ),
  206.       'reference' => 'b5f7b932ee6fa802fc792eabd77c4c88084517ce',
  207.     ),
  208.     'tinymce/tinymce' =>
  209.     array (
  210.       'pretty_version' => '5.9.2',
  211.       'version' => '5.9.2.0',
  212.       'aliases' =>
  213.       array (
  214.       ),
  215.       'reference' => '48c665ad12ba0e4d8068ba0784026c7488aa4746',
  216.     ),
  217.     'twbs/bootstrap' =>
  218.     array (
  219.       'pretty_version' => 'v5.1.1',
  220.       'version' => '5.1.1.0',
  221.       'aliases' =>
  222.       array (
  223.       ),
  224.       'reference' => '0d81d3cbc14dfcdca8a868e3f25189a4f1ab273c',
  225.     ),
  226.     'tweeb/tinymce-i18n' =>
  227.     array (
  228.       'pretty_version' => '2.0.3',
  229.       'version' => '2.0.3.0',
  230.       'aliases' =>
  231.       array (
  232.       ),
  233.       'reference' => '9be0b61d0d91bba1f9a5c34f4830752b5da987ef',
  234.     ),
  235.     'twitter/bootstrap' =>
  236.     array (
  237.       'replaced' =>
  238.       array (
  239.         0 => 'v5.1.1',
  240.       ),
  241.     ),
  242.     'vakata/jstree' =>
  243.     array (
  244.       'pretty_version' => '3.3.12',
  245.       'version' => '3.3.12.0',
  246.       'aliases' =>
  247.       array (
  248.       ),
  249.       'reference' => '7a03954015eaea2467956dc05e6be78f4d1a1ff0',
  250.     ),
  251.   ),
  252. );
  253. private static $canGetVendors;
  254. private static $installedByVendor = array();
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262. public static function getInstalledPackages()
  263. {
  264. $packages = array();
  265. foreach (self::getInstalled() as $installed) {
  266. $packages[] = array_keys($installed['versions']);
  267. }
  268.  
  269. if (1 === \count($packages)) {
  270. return $packages[0];
  271. }
  272.  
  273. return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
  274. }
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284. public static function isInstalled($packageName)
  285. {
  286. foreach (self::getInstalled() as $installed) {
  287. if (isset($installed['versions'][$packageName])) {
  288. return true;
  289. }
  290. }
  291.  
  292. return false;
  293. }
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308. public static function satisfies(VersionParser $parser, $packageName, $constraint)
  309. {
  310. $constraint = $parser->parseConstraints($constraint);
  311. $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
  312.  
  313. return $provided->matches($constraint);
  314. }
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325. public static function getVersionRanges($packageName)
  326. {
  327. foreach (self::getInstalled() as $installed) {
  328. if (!isset($installed['versions'][$packageName])) {
  329. continue;
  330. }
  331.  
  332. $ranges = array();
  333. if (isset($installed['versions'][$packageName]['pretty_version'])) {
  334. $ranges[] = $installed['versions'][$packageName]['pretty_version'];
  335. }
  336. if (array_key_exists('aliases', $installed['versions'][$packageName])) {
  337. $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
  338. }
  339. if (array_key_exists('replaced', $installed['versions'][$packageName])) {
  340. $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
  341. }
  342. if (array_key_exists('provided', $installed['versions'][$packageName])) {
  343. $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
  344. }
  345.  
  346. return implode(' || ', $ranges);
  347. }
  348.  
  349. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  350. }
  351.  
  352.  
  353.  
  354.  
  355.  
  356. public static function getVersion($packageName)
  357. {
  358. foreach (self::getInstalled() as $installed) {
  359. if (!isset($installed['versions'][$packageName])) {
  360. continue;
  361. }
  362.  
  363. if (!isset($installed['versions'][$packageName]['version'])) {
  364. return null;
  365. }
  366.  
  367. return $installed['versions'][$packageName]['version'];
  368. }
  369.  
  370. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  371. }
  372.  
  373.  
  374.  
  375.  
  376.  
  377. public static function getPrettyVersion($packageName)
  378. {
  379. foreach (self::getInstalled() as $installed) {
  380. if (!isset($installed['versions'][$packageName])) {
  381. continue;
  382. }
  383.  
  384. if (!isset($installed['versions'][$packageName]['pretty_version'])) {
  385. return null;
  386. }
  387.  
  388. return $installed['versions'][$packageName]['pretty_version'];
  389. }
  390.  
  391. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  392. }
  393.  
  394.  
  395.  
  396.  
  397.  
  398. public static function getReference($packageName)
  399. {
  400. foreach (self::getInstalled() as $installed) {
  401. if (!isset($installed['versions'][$packageName])) {
  402. continue;
  403. }
  404.  
  405. if (!isset($installed['versions'][$packageName]['reference'])) {
  406. return null;
  407. }
  408.  
  409. return $installed['versions'][$packageName]['reference'];
  410. }
  411.  
  412. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  413. }
  414.  
  415.  
  416.  
  417.  
  418.  
  419. public static function getRootPackage()
  420. {
  421. $installed = self::getInstalled();
  422.  
  423. return $installed[0]['root'];
  424. }
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433. public static function getRawData()
  434. {
  435. @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);
  436.  
  437. return self::$installed;
  438. }
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446. public static function getAllRawData()
  447. {
  448. return self::getInstalled();
  449. }
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469. public static function reload($data)
  470. {
  471. self::$installed = $data;
  472. self::$installedByVendor = array();
  473. }
  474.  
  475.  
  476.  
  477.  
  478.  
  479. private static function getInstalled()
  480. {
  481. if (null === self::$canGetVendors) {
  482. self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
  483. }
  484.  
  485. $installed = array();
  486.  
  487. if (self::$canGetVendors) {
  488. foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
  489. if (isset(self::$installedByVendor[$vendorDir])) {
  490. $installed[] = self::$installedByVendor[$vendorDir];
  491. } elseif (is_file($vendorDir.'/composer/installed.php')) {
  492. $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
  493. }
  494. }
  495. }
  496.  
  497. $installed[] = self::$installed;
  498.  
  499. return $installed;
  500. }
  501. }
  502.