Subversion Repositories oidplus

Rev

Rev 927 | Rev 930 | 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' => 'a13f0e04b3a8a1f4d45f111286190ac8ce723500',
  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' => '7cf969d7dd3b128cc63713165fee87c81becd8d3',
  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.69',
  146.       'version' => '1.3.69.0',
  147.       'aliases' =>
  148.       array (
  149.       ),
  150.       'reference' => 'a61c949cccd086808063611ef9698eabe42ef22f',
  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.6.3',
  174.       'version' => '2.6.3.0',
  175.       'aliases' =>
  176.       array (
  177.       ),
  178.       'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
  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' => '3.0.14',
  192.       'version' => '3.0.14.0',
  193.       'aliases' =>
  194.       array (
  195.       ),
  196.       'reference' => '2f0b7af658cbea265cbb4a791d6c29a6613f98ef',
  197.     ),
  198.     'script47/bs5-utils' =>
  199.     array (
  200.       'pretty_version' => 'master',
  201.       'version' => 'dev-master',
  202.       'aliases' =>
  203.       array (
  204.       ),
  205.       'reference' => 'master',
  206.     ),
  207.     'spamspan/spamspan' =>
  208.     array (
  209.       'pretty_version' => 'master',
  210.       'version' => 'dev-master',
  211.       'aliases' =>
  212.       array (
  213.       ),
  214.       'reference' => 'master',
  215.     ),
  216.     'symfony/polyfill-mbstring' =>
  217.     array (
  218.       'pretty_version' => 'v1.19.0',
  219.       'version' => '1.19.0.0',
  220.       'aliases' =>
  221.       array (
  222.       ),
  223.       'reference' => 'b5f7b932ee6fa802fc792eabd77c4c88084517ce',
  224.     ),
  225.     'tinymce/tinymce' =>
  226.     array (
  227.       'pretty_version' => '5.x-dev',
  228.       'version' => '5.9999999.9999999.9999999-dev',
  229.       'aliases' =>
  230.       array (
  231.       ),
  232.       'reference' => 'c91227ab933d664c3ce2ea4ec68257f2282437ed',
  233.     ),
  234.     'twbs/bootstrap' =>
  235.     array (
  236.       'pretty_version' => '5.2.0',
  237.       'version' => '5.2.0.0',
  238.       'aliases' =>
  239.       array (
  240.       ),
  241.       'reference' => 'edf9c40956d19e6ab3f9151bfe0dfac6be06fa21',
  242.     ),
  243.     'tweeb/tinymce-i18n' =>
  244.     array (
  245.       'pretty_version' => '2.0.4',
  246.       'version' => '2.0.4.0',
  247.       'aliases' =>
  248.       array (
  249.       ),
  250.       'reference' => '058da08d6e61dc4e0279de6509bb6969a62f68e5',
  251.     ),
  252.     'twitter/bootstrap' =>
  253.     array (
  254.       'replaced' =>
  255.       array (
  256.         0 => '5.2.0',
  257.       ),
  258.     ),
  259.     'vakata/jstree' =>
  260.     array (
  261.       'pretty_version' => '3.3.12',
  262.       'version' => '3.3.12.0',
  263.       'aliases' =>
  264.       array (
  265.       ),
  266.       'reference' => '7a03954015eaea2467956dc05e6be78f4d1a1ff0',
  267.     ),
  268.   ),
  269. );
  270. private static $canGetVendors;
  271. private static $installedByVendor = array();
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279. public static function getInstalledPackages()
  280. {
  281. $packages = array();
  282. foreach (self::getInstalled() as $installed) {
  283. $packages[] = array_keys($installed['versions']);
  284. }
  285.  
  286. if (1 === \count($packages)) {
  287. return $packages[0];
  288. }
  289.  
  290. return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
  291. }
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301. public static function isInstalled($packageName)
  302. {
  303. foreach (self::getInstalled() as $installed) {
  304. if (isset($installed['versions'][$packageName])) {
  305. return true;
  306. }
  307. }
  308.  
  309. return false;
  310. }
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325. public static function satisfies(VersionParser $parser, $packageName, $constraint)
  326. {
  327. $constraint = $parser->parseConstraints($constraint);
  328. $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
  329.  
  330. return $provided->matches($constraint);
  331. }
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342. public static function getVersionRanges($packageName)
  343. {
  344. foreach (self::getInstalled() as $installed) {
  345. if (!isset($installed['versions'][$packageName])) {
  346. continue;
  347. }
  348.  
  349. $ranges = array();
  350. if (isset($installed['versions'][$packageName]['pretty_version'])) {
  351. $ranges[] = $installed['versions'][$packageName]['pretty_version'];
  352. }
  353. if (array_key_exists('aliases', $installed['versions'][$packageName])) {
  354. $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
  355. }
  356. if (array_key_exists('replaced', $installed['versions'][$packageName])) {
  357. $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
  358. }
  359. if (array_key_exists('provided', $installed['versions'][$packageName])) {
  360. $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
  361. }
  362.  
  363. return implode(' || ', $ranges);
  364. }
  365.  
  366. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  367. }
  368.  
  369.  
  370.  
  371.  
  372.  
  373. public static function getVersion($packageName)
  374. {
  375. foreach (self::getInstalled() as $installed) {
  376. if (!isset($installed['versions'][$packageName])) {
  377. continue;
  378. }
  379.  
  380. if (!isset($installed['versions'][$packageName]['version'])) {
  381. return null;
  382. }
  383.  
  384. return $installed['versions'][$packageName]['version'];
  385. }
  386.  
  387. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  388. }
  389.  
  390.  
  391.  
  392.  
  393.  
  394. public static function getPrettyVersion($packageName)
  395. {
  396. foreach (self::getInstalled() as $installed) {
  397. if (!isset($installed['versions'][$packageName])) {
  398. continue;
  399. }
  400.  
  401. if (!isset($installed['versions'][$packageName]['pretty_version'])) {
  402. return null;
  403. }
  404.  
  405. return $installed['versions'][$packageName]['pretty_version'];
  406. }
  407.  
  408. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  409. }
  410.  
  411.  
  412.  
  413.  
  414.  
  415. public static function getReference($packageName)
  416. {
  417. foreach (self::getInstalled() as $installed) {
  418. if (!isset($installed['versions'][$packageName])) {
  419. continue;
  420. }
  421.  
  422. if (!isset($installed['versions'][$packageName]['reference'])) {
  423. return null;
  424. }
  425.  
  426. return $installed['versions'][$packageName]['reference'];
  427. }
  428.  
  429. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  430. }
  431.  
  432.  
  433.  
  434.  
  435.  
  436. public static function getRootPackage()
  437. {
  438. $installed = self::getInstalled();
  439.  
  440. return $installed[0]['root'];
  441. }
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. public static function getRawData()
  451. {
  452. @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);
  453.  
  454. return self::$installed;
  455. }
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463. public static function getAllRawData()
  464. {
  465. return self::getInstalled();
  466. }
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486. public static function reload($data)
  487. {
  488. self::$installed = $data;
  489. self::$installedByVendor = array();
  490. }
  491.  
  492.  
  493.  
  494.  
  495.  
  496. private static function getInstalled()
  497. {
  498. if (null === self::$canGetVendors) {
  499. self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
  500. }
  501.  
  502. $installed = array();
  503.  
  504. if (self::$canGetVendors) {
  505. foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
  506. if (isset(self::$installedByVendor[$vendorDir])) {
  507. $installed[] = self::$installedByVendor[$vendorDir];
  508. } elseif (is_file($vendorDir.'/composer/installed.php')) {
  509. $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
  510. }
  511. }
  512. }
  513.  
  514. $installed[] = self::$installed;
  515.  
  516. return $installed;
  517. }
  518. }
  519.