summaryrefslogtreecommitdiffstats
path: root/FedoraClient.php
diff options
context:
space:
mode:
authorJohan "Papa" Cwiklinski <trasher@odysseus.(none)>2010-05-30 23:40:11 +0200
committerJohan "Papa" Cwiklinski <trasher@odysseus.(none)>2010-05-30 23:40:11 +0200
commit5656eab3a24864b35148acf260c63468fa58b094 (patch)
treeb583185583e8b49681ba6da2b3c73da81753781c /FedoraClient.php
parent80ad1fe372391923f270dc90cfb65c1bf2b39a47 (diff)
Begin to apply PEAR coding standards. Doc is NOK nor private variables names ; refs #48
Diffstat (limited to 'FedoraClient.php')
-rw-r--r--FedoraClient.php392
1 files changed, 237 insertions, 155 deletions
diff --git a/FedoraClient.php b/FedoraClient.php
index 4a7cfd6..4ece45c 100644
--- a/FedoraClient.php
+++ b/FedoraClient.php
@@ -1,7 +1,12 @@
<?php
-/*
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
* FedoraClient is a PHP class to interact with web services
*
+ * PHP version 5
+ *
* Copyright (C) 2010 Remi Collet
* http://github.com/remicollet/rpmphp.
*
@@ -12,174 +17,251 @@
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
- * python-fedora is distributed in the hope that it will be useful,
+ * FedoraClient is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* See <http://www.gnu.org/licenses/>
*
+ * @category Main
+ * @package FedoraClient
+ *
+ * @author Remi Collet <unknown@unknwown.com>
+ * @author Johan Cwiklinski <johan@x-tnd.be>
+ * @copyright 2010 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.
*/
-define ('FEDORACLIENT_VERSION','0.1.0-dev');
+define('FEDORACLIENT_VERSION','0.1.0-dev');
if (!function_exists('curl_version')) {
- die("curl extension required\n");
+ die("curl extension required\n");
}
-require_once('Cache/Lite.php');
-
-abstract class FedoraClient {
- private $url;
- private $agent;
- private $debug = 0;
- protected $cache;
-
- function __construct ($url, array $options) {
- $dir = "/tmp/cachelite-".posix_getlogin()."/";
- @mkdir($dir);
- $this->cache = new Cache_Lite(array('memoryCaching' => true,
- 'cacheDir' => $dir,
- 'automaticSerialization'=> true));
-
- $this->url = $url;
- if (isset($options['agent']) && !empty($options['agent'])) {
- $this->agent = $options['agent'];
- } else {
- $this->agent = 'Fedora PHPClient/'.FEDORACLIENT_VERSION;
- }
- if (isset($options['debug']) && intval($options['debug'])>0) {
- $this->debug = intval($options['debug']);
- }
- $this->logDebug(3,__CLASS__."::".__FUNCTION__.": url='$url', agent='".$this->agent."'");
- }
-
- function logDebug($level, $msg) {
- if ($this->debug>=$level) {
- echo "[debug][$level] $msg\n";
- }
- }
- function sendRequest($method, array $options=array()) {
- $curl = curl_init();
- # And join to make our url.
- $url = $this->url.$method;
- curl_setopt($curl, CURLOPT_URL, $url);
- # Boilerplate so pycurl processes cookies
- curl_setopt($curl, CURLOPT_COOKIEFILE, '/dev/null');
-
- # Associate with the response to accumulate data
- $this->data='';
- curl_setopt($curl, CURLOPT_WRITEFUNCTION, array($this, 'receive'));
-
- # Follow redirect
- curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
-
- # Set standard headers
- curl_setopt($curl, CURLOPT_HTTPHEADER, array('User-agent: '.$this->agent, 'Accept: application/json'));
-
- # run the request
- $this->logDebug(2,__CLASS__."::".__FUNCTION__.": call '$url'");
- curl_exec($curl);
-
-
- # Check for auth failures
- # Note: old TG apps returned 403 Forbidden on authentication failures.
- # Updated apps return 401 Unauthorized
- # We need to accept both until all apps are updated to return 401.
- $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
- if ($http_status==401 || $http_status==403) {
- $this->logDebug(1,__CLASS__."::".__FUNCTION__.": http_status '$http_status' Authentication failed logging in");
- return array();
- } else if ($http_status>=400) {
- $this->logDebug(1,__CLASS__."::".__FUNCTION__.": http_status '$http_status' Unknown HTTP Server Response");
- return array();
- } else {
- $this->logDebug(2,__CLASS__."::".__FUNCTION__.": http_status '$http_status'");
- }
-
- $this->logDebug(2,__CLASS__."::".__FUNCTION__.": close connexion");
-
- curl_close($curl);
- return json_decode($this->data, true);
- }
-
- function receive($curl, $data) {
- $this->logDebug(9,__CLASS__."::".__FUNCTION__.": $data");
- $this->data .= $data;
- return strlen($data);
- }
+require_once 'Cache/Lite.php';
+
+abstract class FedoraClient
+{
+ private $url;
+ private $agent;
+ private $debug = 0;
+ protected $cache;
+
+ function __construct ($url, array $options)
+ {
+ $dir = "/tmp/cachelite-".posix_getlogin()."/";
+ @mkdir($dir);
+ $this->cache = new Cache_Lite(
+ array(
+ 'memoryCaching' => true,
+ 'cacheDir' => $dir,
+ 'automaticSerialization' => true
+ )
+ );
+
+ $this->url = $url;
+ if (isset($options['agent']) && !empty($options['agent'])) {
+ $this->agent = $options['agent'];
+ } else {
+ $this->agent = 'Fedora PHPClient/'.FEDORACLIENT_VERSION;
+ }
+ if (isset($options['debug']) && intval($options['debug'])>0) {
+ $this->debug = intval($options['debug']);
+ }
+ $this->logDebug(
+ 3,
+ __CLASS__."::".__FUNCTION__.": url='$url', agent='".$this->agent."'"
+ );
+ }
+
+ function logDebug($level, $msg)
+ {
+ if ($this->debug>=$level) {
+ echo "[debug][$level] $msg\n";
+ }
+ }
+
+ function sendRequest($method, array $options=array())
+ {
+ $curl = curl_init();
+ // And join to make our url.
+ $url = $this->url.$method;
+ curl_setopt($curl, CURLOPT_URL, $url);
+ // Boilerplate so pycurl processes cookies
+ curl_setopt($curl, CURLOPT_COOKIEFILE, '/dev/null');
+
+ //# Associate with the response to accumulate data
+ $this->data='';
+ curl_setopt($curl, CURLOPT_WRITEFUNCTION, array($this, 'receive'));
+
+ // Follow redirect
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
+ curl_setopt($curl, CURLOPT_MAXREDIRS, 5);
+
+ // Set standard headers
+ curl_setopt(
+ $curl,
+ CURLOPT_HTTPHEADER,
+ array('User-agent: '.$this->agent, 'Accept: application/json')
+ );
+
+ // run the request
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__.": call '$url'"
+ );
+ curl_exec($curl);
+
+
+ // Check for auth failures
+ // Note: old TG apps returned 403 Forbidden on authentication failures.
+ // Updated apps return 401 Unauthorized
+ // We need to accept both until all apps are updated to return 401.
+ $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+ if ($http_status==401 || $http_status==403) {
+ $this->logDebug(
+ 1,
+ __CLASS__."::".__FUNCTION__.
+ ": http_status '$http_status' Authentication failed logging in"
+ );
+ return array();
+ } else if ($http_status>=400) {
+ $this->logDebug(
+ 1,
+ __CLASS__."::".__FUNCTION__.
+ ": http_status '$http_status' Unknown HTTP Server Response"
+ );
+ return array();
+ } else {
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__.": http_status '$http_status'"
+ );
+ }
+
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__.": close connexion"
+ );
+
+ curl_close($curl);
+ return json_decode($this->data, true);
+ }
+
+ function receive($curl, $data)
+ {
+ $this->logDebug(
+ 9,
+ __CLASS__."::".__FUNCTION__.": $data"
+ );
+ $this->data .= $data;
+ return strlen($data);
+ }
}
+class FedoraPkgdb extends FedoraClient
+{
+
+ function __construct (array $options=array())
+ {
+ parent::__construct('https://admin.fedoraproject.org/pkgdb/', $options);
+ $this->logDebug(
+ 3,
+ __CLASS__."::".__FUNCTION__
+ );
+ }
+
+ function getBranches($refresh=false)
+ {
+ $rep = ($refresh ? false : $this->cache->get(__FUNCTION__, __CLASS__));
+ if ($rep) {
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__."() get from cache"
+ );
+ } else {
+ $rep =$this->sendRequest('collections');
+ $this->cache->save($rep, __FUNCTION__, __CLASS__);
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__."() save to cache"
+ );
+ }
+
+ $branches = array();
+ if (isset($rep['collections'])) {
+ foreach ($rep['collections'] as $coll) {
+ if (isset($coll[0]['branchname'])) {
+ $branches[$coll[0]['branchname']] = $coll[0];
+ }
+ }
+ }
+ return $branches;
+ }
+
+ function getPackageInfo($name, $refresh=false)
+ {
+ $url="acls/name/$name";
+ $rep = ($refresh ? false : $this->cache->get($url, __CLASS__));
+ if ($rep) {
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__."($name) get from cache"
+ );
+ } else {
+ $rep =$this->sendRequest($url);
+ $this->cache->save($rep, $url, __CLASS__);
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__."($name) save to cache"
+ );
+ }
+
+ if (isset($rep['status']) && !$rep['status']) {
+ $this->logDebug(
+ 1,
+ __CLASS__."::".__FUNCTION__."($name) ".$rep['message']
+ );
+ return false;
+ }
+ $branches = array();
+ foreach ($rep['packageListings'] as $pack) {
+ $branches[$pack['collection']['branchname']] = $pack;
+ }
+ return $branches;
+ }
+
+ function getBranch($name, $refresh=false)
+ {
+ $branches = $this->getBranches($refresh);
+
+ if (isset($branches[$name])) {
+ return $branches[$name];
+ }
+ return false;
+ }
-class FedoraPkgdb extends FedoraClient {
-
- function __construct (array $options=array()) {
- parent::__construct('https://admin.fedoraproject.org/pkgdb/', $options);
- $this->logDebug(3,__CLASS__."::".__FUNCTION__);
- }
-
- function getBranches($refresh=false) {
- $rep = ($refresh ? false : $this->cache->get(__FUNCTION__,__CLASS__));
- if ($rep) {
- $this->logDebug(2,__CLASS__."::".__FUNCTION__."() get from cache");
- } else {
- $rep =$this->sendRequest('collections');
- $this->cache->save($rep,__FUNCTION__,__CLASS__);
- $this->logDebug(2,__CLASS__."::".__FUNCTION__."() save to cache");
- }
-
- $branches = array();
- if (isset($rep['collections'])) {
- foreach ($rep['collections'] as $coll) if (isset($coll[0]['branchname'])) {
- $branches[$coll[0]['branchname']] = $coll[0];
- }
- }
- return $branches;
- }
-
- function getPackageInfo($name, $refresh=false) {
- $url="acls/name/$name";
- $rep = ($refresh ? false : $this->cache->get($url,__CLASS__));
- if ($rep) {
- $this->logDebug(2,__CLASS__."::".__FUNCTION__."($name) get from cache");
- } else {
- $rep =$this->sendRequest($url);
- $this->cache->save($rep,$url,__CLASS__);
- $this->logDebug(2,__CLASS__."::".__FUNCTION__."($name) save to cache");
- }
-
- if (isset($rep['status']) && !$rep['status']) {
- $this->logDebug(1,__CLASS__."::".__FUNCTION__."($name) ".$rep['message']);
- return false;
- }
- $branches = array();
- foreach ($rep['packageListings'] as $pack) {
- $branches[$pack['collection']['branchname']] = $pack;
- }
- return $branches;
- }
-
- function getBranch($name, $refresh=false) {
- $branches = $this->getBranches($refresh);
-
- if (isset($branches[$name])) {
- return $branches[$name];
- }
- return false;
- }
-
- function getCritPath($refresh=false) {
- $url="lists/critpath";
- $rep = ($refresh ? false : $this->cache->get($url,__CLASS__));
- if ($rep) {
- $this->logDebug(2,__CLASS__."::".__FUNCTION__." get from cache");
- } else {
- $rep =$this->sendRequest($url);
- $this->cache->save($rep,$url,__CLASS__);
- $this->logDebug(2,__CLASS__."::".__FUNCTION__." save to cache");
- }
- return $rep['pkgs'];
- }
+ function getCritPath($refresh=false)
+ {
+ $url="lists/critpath";
+ $rep = ($refresh ? false : $this->cache->get($url, __CLASS__));
+ if ($rep) {
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__." get from cache"
+ );
+ } else {
+ $rep =$this->sendRequest($url);
+ $this->cache->save($rep, $url, __CLASS__);
+ $this->logDebug(
+ 2,
+ __CLASS__."::".__FUNCTION__." save to cache"
+ );
+ }
+ return $rep['pkgs'];
+ }
}
?>