* * @category Main * @package FedoraClient * * @author Remi Collet * @author Johan Cwiklinski * @copyright 2010-2013 Remi Collet * @license http://www.gnu.org/licenses/lgpl-2.1.txt LGPL License 2.1 or (at your option) any later version * @link http://github.com/remicollet/rpmphp/ * @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("http://$server/api/", $options); $rep = $this->cache->get(__METHOD__, $this->url); if ($rep!==false) { $this->logDebug(2, __METHOD__."() get from cache"); } else { $rep =$this->sendRequest('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('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.'acls/name/'.$name; } function getPackageInfo($name, $refresh=false) { if ($this->_version > 0) { $url='package/acl/get/'.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"); } $this->logDebug(8, print_r($rep, true)); return false; } $url='acls/name/'.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['packageListings'] as $pack) { $branches[$pack['collection']['branchname']] = $pack; } $this->logDebug(7, print_r($branches, true)); return $branches; } function getBranch($name, $refresh=false) { if ($this->_version > 0) { $url='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="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); } }