* * @category Main * @package PackagistClient * * @author Remi Collet * @copyright 2010-2014 Remi Collet * @license http://www.gnu.org/licenses/lgpl-2.1.txt LGPL License 2.1 or (at your option) any later version * @link https://git.remirepo.net/cgit/web/rpmphp.git/ * @since The begining of times. */ if (!function_exists('curl_version')) { die("curl extension required\n"); } require_once 'Cache/Lite.php'; class PackagistClient { const URL = 'https://packagist.org/'; protected $cache; function __construct () { $dir = "/tmp/pkgist-".posix_getlogin()."/"; @mkdir($dir); $this->cache = new Cache_Lite( array( 'memoryCaching' => true, 'cacheDir' => $dir, 'automaticSerialization' => true ) ); } function getPackageData($name) { $url = self::URL.'packages/'.$name.'.json'; $rep = $this->cache->get(__METHOD__, $url); if (!$rep) { $rep = @file_get_contents($url); $this->cache->save($rep, __METHOD__, $url); } return ($rep ? json_decode($rep, true) : false); } function getPackage($name) { $unstable = array('alpha', 'beta', 'rc'); $ret = false; $pkgs = $this->getPackageData($name); if ($pkgs) { $ret = array( 'name' => $name, 'stable' => NULL, 'unstable' => NULL, 'state' => NULL, ); foreach ($pkgs['package']['versions'] as $pkver => $pkg) { if (preg_match('/^v[0-9]/', $pkver)) { $pkver = substr($pkver, 1); } if (strpos($pkver, 'dev')) { continue; } $type = 'stable'; $subt = false; foreach($unstable as $i) { if (stripos($pkver, $i)) { $type = 'unstable'; $subt = $i; } } if (version_compare($pkver, $ret[$type], 'gt')) { $ret[$type] = $pkver; if ($subt) { $ret['state'] = $subt; } } } if ($ret['stable']) { if (version_compare($ret['stable'], $ret['unstable'], 'gt')) { $ret['unstable'] = NULL; $ret['state'] = NULL; } } } return $ret; } }