Subversion Repositories oidplus

Rev

Rev 827 | Rev 842 | 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' => '880e97b497710dc14ee8f38b4e48250ce49202ee',
  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' => '88f27fa61f916ebe0b412fab11d2211a7af98f15',
  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' => '31174ea5dc3398645f70bc40f5162aa5b73f5b52',
  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' => '2d0af05e72b902df45292b24157f6269fb75684b',
  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.5.1',
  128.       'version' => '5.5.1.0',
  129.       'aliases' =>
  130.       array (
  131.       ),
  132.       'reference' => '83b609028194aa042ea33b5af2d41a7427de80e6',
  133.     ),
  134.     'gedmarc/layout' =>
  135.     array (
  136.       'pretty_version' => 'master',
  137.       'version' => 'dev-master',
  138.       'aliases' =>
  139.       array (
  140.       ),
  141.       'reference' => 'master',
  142.     ),
  143.     'matthiasmullie/minify' =>
  144.     array (
  145.       'pretty_version' => '1.3.66',
  146.       'version' => '1.3.66.0',
  147.       'aliases' =>
  148.       array (
  149.       ),
  150.       'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6',
  151.     ),
  152.     'matthiasmullie/path-converter' =>
  153.     array (
  154.       'pretty_version' => '1.1.3',
  155.       'version' => '1.1.3.0',
  156.       'aliases' =>
  157.       array (
  158.       ),
  159.       'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9',
  160.     ),
  161.     'n-other/php-sha3' =>
  162.     array (
  163.       'pretty_version' => 'dev-master',
  164.       'version' => 'dev-master',
  165.       'aliases' =>
  166.       array (
  167.         0 => '9999999-dev',
  168.       ),
  169.       'reference' => '54ee3b90986e88286d333319e6340b90bde4f71a',
  170.     ),
  171.     'paragonie/constant_time_encoding' =>
  172.     array (
  173.       'pretty_version' => 'v2.5.0',
  174.       'version' => '2.5.0.0',
  175.       'aliases' =>
  176.       array (
  177.       ),
  178.       'reference' => '9229e15f2e6ba772f0c55dd6986c563b937170a8',
  179.     ),
  180.     'paragonie/random_compat' =>
  181.     array (
  182.       'pretty_version' => 'v9.99.100',
  183.       'version' => '9.99.100.0',
  184.       'aliases' =>
  185.       array (
  186.       ),
  187.       'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',
  188.     ),
  189.     'phpseclib/phpseclib' =>
  190.     array (
  191.       'pretty_version' => 'dev-master',
  192.       'version' => 'dev-master',
  193.       'aliases' =>
  194.       array (
  195.         0 => '9999999-dev',
  196.       ),
  197.       'reference' => '369c98616d95ee70b33520217b7171802741ff8d',
  198.     ),
  199.     'script47/bs5-utils' =>
  200.     array (
  201.       'pretty_version' => 'master',
  202.       'version' => 'dev-master',
  203.       'aliases' =>
  204.       array (
  205.       ),
  206.       'reference' => 'master',
  207.     ),
  208.     'spamspan/spamspan' =>
  209.     array (
  210.       'pretty_version' => 'master',
  211.       'version' => 'dev-master',
  212.       'aliases' =>
  213.       array (
  214.       ),
  215.       'reference' => 'master',
  216.     ),
  217.     'symfony/polyfill-mbstring' =>
  218.     array (
  219.       'pretty_version' => 'v1.19.0',
  220.       'version' => '1.19.0.0',
  221.       'aliases' =>
  222.       array (
  223.       ),
  224.       'reference' => 'b5f7b932ee6fa802fc792eabd77c4c88084517ce',
  225.     ),
  226.     'tinymce/tinymce' =>
  227.     array (
  228.       'pretty_version' => '5.x-dev',
  229.       'version' => '5.9999999.9999999.9999999-dev',
  230.       'aliases' =>
  231.       array (
  232.       ),
  233.       'reference' => 'dadd7f25e31680f1c6bf61d2fb0b15794f425cd1',
  234.     ),
  235.     'twbs/bootstrap' =>
  236.     array (
  237.       'pretty_version' => 'v5.1.3',
  238.       'version' => '5.1.3.0',
  239.       'aliases' =>
  240.       array (
  241.       ),
  242.       'reference' => '1a6fdfae6be09b09eaced8f0e442ca6f7680a61e',
  243.     ),
  244.     'tweeb/tinymce-i18n' =>
  245.     array (
  246.       'pretty_version' => '2.0.4',
  247.       'version' => '2.0.4.0',
  248.       'aliases' =>
  249.       array (
  250.       ),
  251.       'reference' => '058da08d6e61dc4e0279de6509bb6969a62f68e5',
  252.     ),
  253.     'twitter/bootstrap' =>
  254.     array (
  255.       'replaced' =>
  256.       array (
  257.         0 => 'v5.1.3',
  258.       ),
  259.     ),
  260.     'vakata/jstree' =>
  261.     array (
  262.       'pretty_version' => '3.3.12',
  263.       'version' => '3.3.12.0',
  264.       'aliases' =>
  265.       array (
  266.       ),
  267.       'reference' => '7a03954015eaea2467956dc05e6be78f4d1a1ff0',
  268.     ),
  269.   ),
  270. );
  271. private static $canGetVendors;
  272. private static $installedByVendor = array();
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280. public static function getInstalledPackages()
  281. {
  282. $packages = array();
  283. foreach (self::getInstalled() as $installed) {
  284. $packages[] = array_keys($installed['versions']);
  285. }
  286.  
  287. if (1 === \count($packages)) {
  288. return $packages[0];
  289. }
  290.  
  291. return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
  292. }
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302. public static function isInstalled($packageName)
  303. {
  304. foreach (self::getInstalled() as $installed) {
  305. if (isset($installed['versions'][$packageName])) {
  306. return true;
  307. }
  308. }
  309.  
  310. return false;
  311. }
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326. public static function satisfies(VersionParser $parser, $packageName, $constraint)
  327. {
  328. $constraint = $parser->parseConstraints($constraint);
  329. $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
  330.  
  331. return $provided->matches($constraint);
  332. }
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343. public static function getVersionRanges($packageName)
  344. {
  345. foreach (self::getInstalled() as $installed) {
  346. if (!isset($installed['versions'][$packageName])) {
  347. continue;
  348. }
  349.  
  350. $ranges = array();
  351. if (isset($installed['versions'][$packageName]['pretty_version'])) {
  352. $ranges[] = $installed['versions'][$packageName]['pretty_version'];
  353. }
  354. if (array_key_exists('aliases', $installed['versions'][$packageName])) {
  355. $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
  356. }
  357. if (array_key_exists('replaced', $installed['versions'][$packageName])) {
  358. $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
  359. }
  360. if (array_key_exists('provided', $installed['versions'][$packageName])) {
  361. $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
  362. }
  363.  
  364. return implode(' || ', $ranges);
  365. }
  366.  
  367. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  368. }
  369.  
  370.  
  371.  
  372.  
  373.  
  374. public static function getVersion($packageName)
  375. {
  376. foreach (self::getInstalled() as $installed) {
  377. if (!isset($installed['versions'][$packageName])) {
  378. continue;
  379. }
  380.  
  381. if (!isset($installed['versions'][$packageName]['version'])) {
  382. return null;
  383. }
  384.  
  385. return $installed['versions'][$packageName]['version'];
  386. }
  387.  
  388. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  389. }
  390.  
  391.  
  392.  
  393.  
  394.  
  395. public static function getPrettyVersion($packageName)
  396. {
  397. foreach (self::getInstalled() as $installed) {
  398. if (!isset($installed['versions'][$packageName])) {
  399. continue;
  400. }
  401.  
  402. if (!isset($installed['versions'][$packageName]['pretty_version'])) {
  403. return null;
  404. }
  405.  
  406. return $installed['versions'][$packageName]['pretty_version'];
  407. }
  408.  
  409. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  410. }
  411.  
  412.  
  413.  
  414.  
  415.  
  416. public static function getReference($packageName)
  417. {
  418. foreach (self::getInstalled() as $installed) {
  419. if (!isset($installed['versions'][$packageName])) {
  420. continue;
  421. }
  422.  
  423. if (!isset($installed['versions'][$packageName]['reference'])) {
  424. return null;
  425. }
  426.  
  427. return $installed['versions'][$packageName]['reference'];
  428. }
  429.  
  430. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  431. }
  432.  
  433.  
  434.  
  435.  
  436.  
  437. public static function getRootPackage()
  438. {
  439. $installed = self::getInstalled();
  440.  
  441. return $installed[0]['root'];
  442. }
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451. public static function getRawData()
  452. {
  453. @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);
  454.  
  455. return self::$installed;
  456. }
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464. public static function getAllRawData()
  465. {
  466. return self::getInstalled();
  467. }
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487. public static function reload($data)
  488. {
  489. self::$installed = $data;
  490. self::$installedByVendor = array();
  491. }
  492.  
  493.  
  494.  
  495.  
  496.  
  497. private static function getInstalled()
  498. {
  499. if (null === self::$canGetVendors) {
  500. self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
  501. }
  502.  
  503. $installed = array();
  504.  
  505. if (self::$canGetVendors) {
  506. foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
  507. if (isset(self::$installedByVendor[$vendorDir])) {
  508. $installed[] = self::$installedByVendor[$vendorDir];
  509. } elseif (is_file($vendorDir.'/composer/installed.php')) {
  510. $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
  511. }
  512. }
  513. }
  514.  
  515. $installed[] = self::$installed;
  516.  
  517. return $installed;
  518. }
  519. }
  520.