* * @category Main * @package FedoraClient * * @author Remi Collet * @author Johan Cwiklinski * @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. */ class FedoraPkgdb extends FedoraClient { private $_version = 0; function __construct (array $options=array()) { if (isset($options['server']) && ($options['server'])) { $server = $options['server']; } else { $server = 'admin.fedoraproject.org'; } parent::__construct("https://$server/pkgdb/", $options); $rep = $this->cache->get(__METHOD__, $this->url); if ($rep!==false) { $this->logDebug(2, __METHOD__."() get from cache"); } else { $rep =$this->sendRequest('api/version'); $this->cache->save($rep, __METHOD__, $this->url); $this->logDebug(2, __METHOD__."() save to cache" ); } if (isset($rep['version'])) { /* Pkgdb2 */ $this->_version = $rep['version']; } else { /* Pkgdb */ $this->setUrl("https://$server/pkgdb/"); } } function getVersion() { return $this->_version; } function getBranches($refresh=false) { $rep = ($refresh ? false : $this->cache->get(__METHOD__, $this->url)); if ($rep) { $this->logDebug(2, __METHOD__."() get from cache"); } else { $rep =$this->sendRequest('api/collections'); $this->cache->save($rep, __METHOD__, $this->url); $this->logDebug(2, __METHOD__."() save to cache"); } $branches = array(); if (isset($rep['collections'])) { if ($this->_version > 0) { foreach ($rep['collections'] as $coll) { if (isset($coll['branchname'])) { /* pkgdb version 2 */ $branches[$coll['branchname']] = $coll; } } } else { foreach ($rep['collections'] as $coll) { if (isset($coll[0]['branchname'])) { /* pkgdb version 1 */ $branches[$coll[0]['branchname']] = $coll[0]; } } } } return $branches; } function getPackageURL($name) { return $this->url.'package/'.urlencode($name); } function getPackageInfo($name, $refresh=false) { return false; static $convert=array( 'master' => 'devel', 'el5' => 'EL-5', 'el6' => 'EL-6', 'epel7' => 'EL-7', ); $url='api/package/'.urlencode($name); $rep = ($refresh ? false : $this->cache->get(__METHOD__, $this->url.$url)); if ($rep) { $this->logDebug(2, __METHOD__."($name) get from cache"); } else { $rep =$this->sendRequest($url); $this->cache->save($rep, __METHOD__, $this->url.$url); $this->logDebug(2, __METHOD__."($name) save to cache"); } if (isset($rep['status']) && !$rep['status']) { $this->logDebug(1, __METHOD__."($name) ".$rep['message']); return false; } $this->logDebug(8, print_r($rep, true)); $branches = array(); foreach ($rep['packages'] as $pack) { $n = $pack['collection']['branchname']; if (isset($convert[$n])) $n=$convert[$n]; $pack['owner'] = $pack['point_of_contact']; $pack['people'] = array(); foreach ($pack['acls'] as $acl) { if ($acl['acl']=='commit' && $acl['status']=='Approved') { $pack['people'][] = $acl['fas_name']; } } $branches[$n] = $pack; } $this->logDebug(7, print_r($branches, true)); return $branches; } function getBranch($name, $refresh=false) { if ($this->_version > 0) { $url='api/collections/'.urlencode($name).'/'; $rep = ($refresh ? false : $this->cache->get(__METHOD__, $this->url.$url)); if ($rep) { $this->logDebug(2, __METHOD__."($name) get from cache"); } else { $rep =$this->sendRequest($url); $this->cache->save($rep, __METHOD__, $this->url.$url); $this->logDebug(2, __METHOD__."($name) save to cache"); } return (isset($rep['collections'][0]) ? $rep['collections'][0] : array()); } $branches = $this->getBranches($refresh); if (isset($branches[$name])) { return $branches[$name]; } return false; } function getCritPath($refresh=false) { if ($this->_version > 0) { $url="api/critpath"; $rep = ($refresh ? false : $this->cache->get(__METHOD__, $this->url)); if ($rep) { $this->logDebug(2, __METHOD__."() get from cache"); } else { $rep =$this->sendRequest($url); $this->cache->save($rep, __METHOD__, $this->url); $this->logDebug(2, __METHOD__."() save to cache"); } return (isset($rep['pkgs']) ? $rep['pkgs'] : NULL); } $url="lists/critpath"; $rep = ($refresh ? false : $this->cache->get(__METHOD__, $this->url)); if ($rep) { $this->logDebug(2, __METHOD__."() get from cache"); } else { $rep =$this->sendRequest($url); $this->cache->save($rep, __METHOD__, $this->url); $this->logDebug(2, __METHOD__."() save to cache" ); } return (isset($rep['pkgs']) ? $rep['pkgs'] : NULL); } }