Subversion Repositories oidplus

Rev

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