diff options
Diffstat (limited to 'class')
-rw-r--r-- | class/CommonTable.php | 327 | ||||
-rw-r--r-- | class/FedoraClient.php | 114 | ||||
-rw-r--r-- | class/FedoraPkgdb.php | 150 | ||||
-rw-r--r-- | class/TableIterator.php | 286 | ||||
-rw-r--r-- | class/TablePearRepo.php | 136 | ||||
-rw-r--r-- | class/TableRRepo.php | 123 |
6 files changed, 715 insertions, 421 deletions
diff --git a/class/CommonTable.php b/class/CommonTable.php index 261c7aa..8fd0471 100644 --- a/class/CommonTable.php +++ b/class/CommonTable.php @@ -81,7 +81,7 @@ abstract class CommonTable $res = $this->db->exec($sql); if ($res===false) { $err = $this->db->errorInfo(); - throw new Exception($err[2]); + throw new Exception("\nSQL: $sql\nERROR: ".$err[2]."\nCODE:"); } return $res; } @@ -145,6 +145,7 @@ abstract class CommonTable return $nb; } + /** * Create the table */ @@ -193,333 +194,37 @@ abstract class CommonTable * * @param string $fieldkey name of the field to use as index * @param string $fieldvalue name of the field to use as value + * @param array $crit for request * * @return hashtable */ - public function getAllArray($fieldkey, $fieldvalue) + public function getHashtable($fieldkey, $fieldvalue, array $crit=array()) { - $crit = array('FIELDS' => array($fieldkey, $fieldvalue), - 'ORDER' => $fieldkey); + $crit['FIELDS'] = array($fieldkey, $fieldvalue); + $crit['ORDER'] = $fieldkey; + $tab = array(); foreach ($this->request($crit) as $data) { $tab[$data[$fieldkey]] = $data[$fieldvalue]; } return $tab; } -} - -class TablePearRepo extends CommonTable -{ /** - * Instanciate a TablePearRepo to manage pearrepo table + * Retrieve a big array with all date from the table * - * @param object $db PDO instance of the DB connection - */ - function __construct($db) - { - parent::__construct($db, 'pearrepo'); - } - - /** - * Create the table and populate it with known repo + * @param array|string $crit for the request * - * @return void + * @return array, index is rowid, value is a hastable */ - protected function createTable() + public function getArray($crit='') { - - // Table schema - $sql = "CREATE TABLE `pearrepo` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `alias` varchar(30) NOT NULL, - `url` varchar(255) NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `alias` (`alias`) - ) DEFAULT CHARSET=utf8"; - - $this->exec($sql); - - // Some known repo, other could be add manually - // no reply from "phpdb" => "pear.phpdb.org" - $channels = array( - "pear" => "pear.php.net" - ,"doctrine" => "pear.phpdoctrine.org" - ,"ezc" => "components.ez.no" - ,"pdepend" => "pear.pdepend.org" - ,"phing" => "pear.phing.info" - ,"phpmd" => "pear.phpmd.org" - ,"phpunit" => "pear.phpunit.de" - ,"swift" => "pear.swiftmailer.org" - ,"symphony" => "pear.symfony-project.com" - ); - - foreach ($channels as $alias => $url) { - $this->add(array('alias'=>$alias, 'url'=>$url)); + $tab = array(); + foreach ($this->request($crit) as $id => $data) { + $tab[$id] = $data; } - } - - /** - * Retrieve all the known repository - * - * @return hastable of alias => url - */ - function getAllRepo() - { - return $this->getAllArray('alias', 'url'); + return $tab; } } -/** - * Helper for simple query => use directly or through CommonTable::request() - * - * Freely inspired from DBmysqlIterator class from GLPI - * (already written by Remi, and ported to PDO) - * See http://www.glpi-project.org/ - */ -class TableIterator implements Iterator -{ - private $con; - private $sql; - private $res = false; - private $row; - private $pos; - - /** - * Constructor - * - * @param CommonDBTM $dbconnexion Database Connnexion - * (must be a CommonDBTM object) - * @param string $table table name - * @param string|array $crit string or array of filed/values, - * ex array("id"=>1), if empty => all rows - */ - function __construct (PDO $dbconnexion, $table, $crit='') - { - - $this->conn = $dbconnexion; - if (is_string($table) && strpos($table, " ")) { - $this->sql = $table; - } else { - // check field, orderby, limit, start in criterias - $field=""; - $orderby=""; - $limit=0; - $start=0; - - if (is_array($crit) && count($crit)) { - foreach ($crit as $key => $val) { - if ($key==="FIELDS") { - $field = $val; - unset($crit[$key]); - } else if ($key==="ORDER") { - $orderby = $val; - unset($crit[$key]); - } else if ($key==="LIMIT") { - $limit = $val; - unset($crit[$key]); - } else if ($key==="START") { - $start = $val; - unset($crit[$key]); - } - } - } - - // SELECT field list - if (is_array($field)) { - $this->sql = ""; - foreach ($field as $t => $f) { - if (is_numeric($t)) { - $this->sql .= (empty($this->sql) - ? "SELECT " : ",") . $f; - } else if (is_array($f)) { - $this->sql .= (empty($this->sql) - ? "SELECT $t." : ",$t.") . implode(",$t.", $f); - } else { - $this->sql .= (empty($this->sql) - ? "SELECT " : ",") . "$t.$f"; - } - } - } else if (empty($field)) { - $this->sql = "SELECT *"; - } else { - $this->sql = "SELECT `$field`"; - } - // FROM table list - if (is_array($table)) { - $this->sql .= " FROM `".implode("`, `", $table)."`"; - } else { - $this->sql .= " FROM `$table`"; - } - // WHERE criteria list - if (!empty($crit)) { - print_r($crit); - $this->sql .= " WHERE ".$this->_analyseCrit($crit); - } - // ORDER BY - if (is_array($orderby)) { - $this->sql .= " ORDER BY `".implode("`, `", $orderby)."`"; - } else if (!empty($orderby)) { - $this->sql .= " ORDER BY `$orderby`"; - } - if (is_numeric($limit) && $limit>0) { - $this->sql .= " LIMIT $limit"; - if (is_numeric($start) && $start>0) { - $this->sql .= " OFFSET $start"; - } - } - } - //echo "SQL: ".$this->sql."\n"; - $this->res = $this->conn->prepare($this->sql); - if ($this->res===false) { - $err = $this->db->errorInfo(); - throw new Exception($err[2]); - } - - $this->pos = -1; - } - - /** - * Class destructor - */ - function __destruct () - { - if ($this->res) { - $this->res->closeCursor(); - } - } - - /** - * Build WHERE clause - * - * @param TODO $crit To document - * @param TODO $bool To document - * - * @return To document - */ - private function _analyseCrit ($crit, $bool="AND") - { - - if (!is_array($crit)) { - return $crit; - } - $ret = ""; - foreach ($crit as $name => $value) { - if (!empty($ret)) { - $ret .= " $bool "; - } - if (is_numeric($name)) { - // No Key case => recurse. - $ret .= "(" . $this->_analyseCrit($value, $bool) . ")"; - } else if ($name==="OR" || $name==="AND") { - // Binary logical operator - $ret .= "(" . $this->_analyseCrit($value, $name) . ")"; - } else if ($name==="NOT") { - // Uninary logicial operator - $ret .= " NOT (" . $this->_analyseCrit($value, "AND") . ")"; - } else if ($name==="FKEY") { - // Foreign Key condition - if (is_array($value) && count($value)==2) { - reset($value); - list($t1,$f1)=each($value); - list($t2,$f2)=each($value); - $ret .= (is_numeric($t1) ? "$f1" : "$t1.$f1") . "=" . - (is_numeric($t2) ? "$f2" : "$t2.$f2"); - } else { - trigger_error("BAD FOREIGN KEY", E_USER_ERROR); - } - } else if (is_array($value)) { - // Array of Value - $ret .= "$name IN ('". implode("','", $value)."')"; - } else if (is_null($value)) { - // NULL condition - $ret .= "$name IS NULL"; - } else if (is_numeric($value)) { - // Integer - $ret .= "$name=$value"; - } else { - // String - $ret .= "$name='$value'"; - } - } - return $ret; - } - - /** - * To document - * - * @return To document - */ - public function rewind () - { - - if ($this->res && $this->pos>=0) { - $this->res->closeCursor(); - $this->pos = -1; - } - - if ($this->res && $this->pos<0) { - if (!$this->res->execute()) { - $err = $this->res->errorInfo(); - throw new Exception($err[2]); - } - } - return $this->next(); - } - - /** - * To document - * - * @return To document - */ - public function current() - { - return $this->row; - } - - /** - * To document - * - * @return To document - */ - public function key() - { - return (isset($this->row["id"]) ? $this->row["id"] : $this->pos); - } - - /** - * To document - * - * @return To document - */ - public function next() - { - if (!$this->res) { - return false; - } - $this->row = $this->res->fetch(PDO::FETCH_ASSOC); - $this->pos++; - return $this->row; - } - - /** - * To document - * - * @return To document - */ - public function valid() - { - return $this->res && $this->row; - } - - /** - * To document - * - * @return To document - */ - public function numrows() - { - return ($this->res ? $this->res->rowCount() : 0); - } -} -?> +?>
\ No newline at end of file diff --git a/class/FedoraClient.php b/class/FedoraClient.php index 43d9dce..f1ce8f6 100644 --- a/class/FedoraClient.php +++ b/class/FedoraClient.php @@ -35,8 +35,6 @@ * @since The begining of times. */ -define('FEDORACLIENT_VERSION', '0.1.0-dev'); - if (!function_exists('curl_version')) { die("curl extension required\n"); } @@ -44,7 +42,8 @@ require_once 'Cache/Lite.php'; abstract class FedoraClient { - private $url; + const VERSION='0.1.0-dev'; + protected $url; private $agent; private $debug = 0; protected $cache; @@ -65,7 +64,7 @@ abstract class FedoraClient if (isset($options['agent']) && !empty($options['agent'])) { $this->agent = $options['agent']; } else { - $this->agent = 'Fedora PHPClient/'.FEDORACLIENT_VERSION; + $this->agent = 'Fedora PHPClient/'.self::VERSION; } if (isset($options['debug']) && intval($options['debug'])>0) { $this->debug = intval($options['debug']); @@ -161,109 +160,4 @@ abstract class FedoraClient } } - -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; - } - $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) - { - $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']; - } -} -?> +?>
\ No newline at end of file diff --git a/class/FedoraPkgdb.php b/class/FedoraPkgdb.php new file mode 100644 index 0000000..d170911 --- /dev/null +++ b/class/FedoraPkgdb.php @@ -0,0 +1,150 @@ +<?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. + * + * Inspired from python-fedora + * + * FedoraClient is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * 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. + */ + +class FedoraPkgdb extends FedoraClient +{ + private $suburl; + + function __construct (array $options=array()) + { + parent::__construct('https://admin.fedoraproject.org/pkgdb/', $options); + $this->suburl = 'acls/name/'; + + $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 getPackageURL($name) + { + return $this->url.$this->suburl.$name; + } + + function getPackageInfo($name, $refresh=false) + { + $url=$this->suburl.urlencode($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; + } + $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) + { + $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']; + } +} +?>
\ No newline at end of file diff --git a/class/TableIterator.php b/class/TableIterator.php new file mode 100644 index 0000000..0903f37 --- /dev/null +++ b/class/TableIterator.php @@ -0,0 +1,286 @@ +<?php +/** + * Class which implement a simple Iterator over a PDO connexion + * + * PHP version 5 + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see <http://www.gnu.org/licenses/>. + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet <unknown@unknwown.com> + * @author Johan Cwiklinski <johan@x-tnd.be> + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ + +/** + * Helper for simple query => use directly or through CommonTable::request() + * + * Freely inspired from DBmysqlIterator class from GLPI + * (already written by Remi, and ported to PDO) + * See http://www.glpi-project.org/ + */ +class TableIterator implements Iterator +{ + private $con; + private $sql; + private $res = false; + private $row; + private $pos; + + /** + * Constructor + * + * @param CommonDBTM $dbconnexion Database Connnexion + * (must be a CommonDBTM object) + * @param string $table table name or complete SQL request + * @param string|array $crit string or array of filed/values, + * ex array("id"=>1), if empty => all rows + */ + function __construct (PDO $dbconnexion, $table, $crit='') + { + + $this->conn = $dbconnexion; + if (is_string($table) && strpos($table, " ")) { + $this->sql = $table; + } else { + // check field, orderby, limit, start in criterias + $field=""; + $orderby=""; + $limit=0; + $start=0; + + if (is_array($crit) && count($crit)) { + foreach ($crit as $key => $val) { + if ($key==="FIELDS") { + $field = $val; + unset($crit[$key]); + } else if ($key==="ORDER") { + $orderby = $val; + unset($crit[$key]); + } else if ($key==="LIMIT") { + $limit = $val; + unset($crit[$key]); + } else if ($key==="START") { + $start = $val; + unset($crit[$key]); + } + } + } + + // SELECT field list + if (is_array($field)) { + $this->sql = ""; + foreach ($field as $t => $f) { + if (is_numeric($t)) { + $this->sql .= (empty($this->sql) + ? "SELECT " : ",") . $f; + } else if (is_array($f)) { + $this->sql .= (empty($this->sql) + ? "SELECT $t." : ",$t.") . implode(",$t.", $f); + } else { + $this->sql .= (empty($this->sql) + ? "SELECT " : ",") . "$t.$f"; + } + } + } else if (empty($field)) { + $this->sql = "SELECT *"; + } else { + $this->sql = "SELECT `$field`"; + } + // FROM table list + if (is_array($table)) { + $this->sql .= " FROM `".implode("`, `", $table)."`"; + } else { + $this->sql .= " FROM `$table`"; + } + // WHERE criteria list + if (!empty($crit)) { + $this->sql .= " WHERE ".$this->_analyseCrit($crit); + } + // ORDER BY + if (is_array($orderby)) { + $this->sql .= " ORDER BY `".implode("`, `", $orderby)."`"; + } else if (!empty($orderby)) { + $this->sql .= " ORDER BY `$orderby`"; + } + if (is_numeric($limit) && $limit>0) { + $this->sql .= " LIMIT $limit"; + if (is_numeric($start) && $start>0) { + $this->sql .= " OFFSET $start"; + } + } + } + //echo "SQL: ".$this->sql."\n"; + $this->res = $this->conn->prepare($this->sql); + if ($this->res===false) { + $err = $this->db->errorInfo(); + throw new Exception($err[2]); + } + + $this->pos = -1; + } + + /** + * Class destructor + */ + function __destruct () + { + if ($this->res) { + $this->res->closeCursor(); + } + } + + /** + * Build WHERE clause + * + * @param string|array $crit To document + * @param string $bool logical operator between criteria + * + * @return To document + */ + private function _analyseCrit ($crit, $bool="AND") + { + + if (!is_array($crit)) { + return $crit; + } + $ret = ""; + foreach ($crit as $name => $value) { + if (!empty($ret)) { + $ret .= " $bool "; + } + if (is_numeric($name)) { + // No Key case => recurse. + $ret .= "(" . $this->_analyseCrit($value, $bool) . ")"; + } else if ($name==="OR" || $name==="AND") { + // Binary logical operator + $ret .= "(" . $this->_analyseCrit($value, $name) . ")"; + } else if ($name==="NOT") { + // Uninary logicial operator + $ret .= " NOT (" . $this->_analyseCrit($value, "AND") . ")"; + } else if ($name==="FKEY") { + // Foreign Key condition + if (is_array($value) && count($value)==2) { + reset($value); + list($t1,$f1)=each($value); + list($t2,$f2)=each($value); + $ret .= (is_numeric($t1) ? "$f1" : "$t1.$f1") . "=" . + (is_numeric($t2) ? "$f2" : "$t2.$f2"); + } else { + trigger_error("BAD FOREIGN KEY", E_USER_ERROR); + } + } else if (is_array($value)) { + // Array of Value + $ret .= "$name IN ('". implode("','", $value)."')"; + } else if (is_null($value)) { + // NULL condition + $ret .= "$name IS NULL"; + } else if (is_numeric($value)) { + // Integer + $ret .= "$name=$value"; + } else { + // String + $ret .= "$name='$value'"; + } + } + return $ret; + } + + /** + * Go to the begin of the request (launch it) + * + * @return hastable|false : next row + */ + public function rewind () + { + + if ($this->res && $this->pos>=0) { + $this->res->closeCursor(); + $this->pos = -1; + } + + if ($this->res && $this->pos<0) { + if (!$this->res->execute()) { + $err = $this->res->errorInfo(); + throw new Exception($err[2]); + } + } + return $this->next(); + } + + /** + * Retrieve current row + * + * @return hastable|false + */ + public function current() + { + return $this->row; + } + + /** + * Retrieve key of current row + * + * @return mixed + */ + public function key() + { + return (isset($this->row["id"]) ? $this->row["id"] : $this->pos); + } + + /** + * Retrieve next row + * + * @return hastable|false + */ + public function next() + { + if (!$this->res) { + return false; + } + $this->row = $this->res->fetch(PDO::FETCH_ASSOC); + $this->pos++; + return $this->row; + } + + /** + * Is current row defined + * + * @return boolean + */ + public function valid() + { + return $this->res && $this->row; + } + + /** + * Compute number of rows + * + * @return integer + */ + public function numrows() + { + return ($this->res ? $this->res->rowCount() : 0); + } +} +?>
\ No newline at end of file diff --git a/class/TablePearRepo.php b/class/TablePearRepo.php new file mode 100644 index 0000000..34a0c17 --- /dev/null +++ b/class/TablePearRepo.php @@ -0,0 +1,136 @@ +<?php +/** + * Class for "pearrepo" Table management + * + * PHP version 5 + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see <http://www.gnu.org/licenses/>. + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet <unknown@unknwown.com> + * @author Johan Cwiklinski <johan@x-tnd.be> + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ + +class TablePearRepo extends CommonTable +{ + + /** + * Instanciate a TablePearRepo to manage pearrepo table + * + * @param object $db PDO instance of the DB connection + */ + function __construct($db) + { + parent::__construct($db, 'pearrepo'); + } + + /** + * Create the table and populate it with known repo + * + * @return void + */ + protected function createTable() + { + + // Table schema + $sql = "CREATE TABLE `pearrepo` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `alias` varchar(30) NOT NULL, + `url` varchar(255) NOT NULL, + `active` tinyint NOT NULL default 1, + PRIMARY KEY (`id`), + UNIQUE KEY `alias` (`alias`), + KEY `active` (`active`) + ) DEFAULT CHARSET=utf8"; + + $this->exec($sql); + + // Some known repo, other could be add manually + // no reply from "" => "" + $channels = array( + array( + 'alias' => 'pear', + 'url' => 'pear.php.net' + ), + array( + 'alias' => 'doctrine', + 'url' => 'pear.phpdoctrine.org' + ), + array( + 'alias' => 'ezc', + 'url' => 'components.ez.no' + ), + array( + 'alias' => 'pdepend', + 'url' => 'pear.pdepend.org' + ), + array( + 'alias' => 'phing', + 'url' => 'pear.phing.info' + ), + array( + 'alias' => 'phpmd', + 'url' => 'pear.phpmd.org' + ), + array( + 'alias' => 'phpunit', + 'url' => 'pear.phpunit.de' + ), + array( + 'alias' => 'swift', + 'url' => 'pear.swiftmailer.org' + ), + array( + 'alias' => 'symphony', + 'url' => 'pear.symfony-project.com' + ), + array( + 'alias' => 'phpdb', + 'active' => 0, + 'url' => 'pear.phpdb.org' + ) + ); + + foreach ($channels as $channel) { + $this->add($channel); + } + } + + /** + * Retrieve all the known repository + * + * @param boolean $active true for only active repo (false for all) + * + * @return hastable of alias => url + */ + function getAllRepo($active=true) + { + if ($active) { + return $this->getHashtable('alias', 'url', array('active'=>1)); + } + return $this->getHashtable('alias', 'url'); + } +} + +?>
\ No newline at end of file diff --git a/class/TableRRepo.php b/class/TableRRepo.php new file mode 100644 index 0000000..884b4e3 --- /dev/null +++ b/class/TableRRepo.php @@ -0,0 +1,123 @@ +<?php +/** + * Class for "rrepo" Table management + * + * PHP version 5 + * + * Copyright © 2010 Remi Collet + * + * This file is part of rpmphp. + * + * rpmphp is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * rpmphp 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with rpmphp. If not, see <http://www.gnu.org/licenses/>. + * + * @category Main + * @package RPMPHP + * + * @author Remi Collet <unknown@unknwown.com> + * @author Johan Cwiklinski <johan@x-tnd.be> + * @copyright 2010 Remi Collet + * @license http://www.gnu.org/licenses/agpl-3.0-standalone.html AGPL License 3.0 or (at your option) any later version + * @link http://github.com/remicollet/rpmphp/ + * @since The begining of times. +*/ + +class TableRRepo extends CommonTable +{ + + /** + * Instanciate a TablePearRepo to manage pearrepo table + * + * @param object $db PDO instance of the DB connection + */ + function __construct($db) + { + parent::__construct($db, 'rrepo'); + } + + /** + * Create the table and populate it with known repo + * + * @return void + */ + protected function createTable() + { + + // Table schema + $sql = "CREATE TABLE `rrepo` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(30) NOT NULL, + `state` varchar(30) NOT NULL default 'stable', + `url` varchar(255) NOT NULL, + `active` tinyint NOT NULL default 1, + PRIMARY KEY (`id`), + UNIQUE KEY `name_state` (`name`,`state`), + KEY `active` (`active`) + ) DEFAULT CHARSET=utf8"; + + $this->exec($sql); + + // Some known repo, other could be add manually + $repos = array( + array( + "name" => "R", + "url" => "http://cran.at.r-project.org/src/contrib/PACKAGES" + ), + array( + "name" => "biocp", + "url" => "http://www.bioconductor.org/packages/release/bioc/src/contrib/PACKAGES" + ), + array( + "name" => "biocp", + "state" => "unstable", + "url" => "http://www.bioconductor.org/packages/devel/bioc/src/contrib/PACKAGES" + ), + array( + "name" => "bioca", + "url" => "http://www.bioconductor.org/packages/release/data/annotation/src/contrib/PACKAGES" + ), + array( + "name" => "bioca", + "state" => "unstable", + "url" => "http://www.bioconductor.org/packages/devel/data/annotation/src/contrib/PACKAGES" + ), + array( + "name" => "bioce", + "url" => "http://www.bioconductor.org/packages/release/data/experiment/src/contrib/PACKAGES" + ), + array( + "name" => "bioce", + "state" => "unstable", + "url" => "http://www.bioconductor.org/packages/devel/data/experiment/src/contrib/PACKAGES" + ) + ); + + foreach ($repos as $repo) { + $this->add($repo); + } + } + + /** + * Retrieve all the known repository + * + * @param boolean $active true for only active repo (false for all) + * + * @return hastable of alias => url + */ + function getAllRepo($active=true) + { + return $this->getArray($active ? array('active'=>1) : ''); + } +} + +?>
\ No newline at end of file |