diff options
Diffstat (limited to 'class')
-rw-r--r-- | class/CommonTable.php | 190 |
1 files changed, 129 insertions, 61 deletions
diff --git a/class/CommonTable.php b/class/CommonTable.php index a913edd..1ed47f8 100644 --- a/class/CommonTable.php +++ b/class/CommonTable.php @@ -32,19 +32,19 @@ * @since The begining of times. */ -abstract class CommonTable { - +abstract class CommonTable +{ protected $db; protected $table; /** * Instanciate a CommonTable * - * @param $db object PDO instance of the DB connection - * @param $table string with table name + * @param object $db PDO instance of the DB connection + * @param string $table with table name */ - function __construct(PDO $db, $table) { - + function __construct(PDO $db, $table) + { $this->db = $db; $this->table = $table; @@ -56,11 +56,12 @@ abstract class CommonTable { /** * Check if the table already exists * - * @param $table string with table name + * @param string $table with table name * * @return boolean */ - public function existsTable($table) { + public function existsTable($table) + { $req = new TableIterator($this->db, "SHOW TABLES LIKE '$table'"); foreach ($req as $data) { return true; @@ -71,9 +72,10 @@ abstract class CommonTable { /** * Execute an SQL statement (INSERT, DELETE, ...) * - * @param $sql string + * @param string $sql The SQL clause */ - protected function exec($sql) { + protected function exec($sql) + { $res = $this->db->exec($sql); if ($res===false) { $err = $this->db->errorInfo(); @@ -84,9 +86,10 @@ abstract class CommonTable { /** * Add a new row in the table * - * @param fields hashtable of fieldname => value + * @param hashtable $fields hashtable of fieldname => value */ - protected function add(array $fields) { + protected function add(array $fields) + { $col = array(); $val = array(); foreach ($fields as $name => $value) { @@ -99,8 +102,8 @@ abstract class CommonTable { $val[] = "'$value'"; } } - $sql = "INSERT INTO `".$this->table."` (".implode(',',$col).") - VALUE (".implode(',',$val).")"; + $sql = "INSERT INTO `".$this->table."` (".implode(',', $col).") + VALUE (".implode(',', $val).")"; $this->exec($sql); } @@ -118,12 +121,22 @@ abstract class CommonTable { * foreach ($DB->request("", "name") as $ID => $data) { ... } * foreach ($DB->request(array("name"=>"SBEI003W","entities_id"=>1),array("serial","otherserial")) { ... } * - * @param $crit string or array of field/values, ex array("id"=>1), if empty => all rows + * @param string|array $crit string or array of field/values, + * ex array("id"=>1), if empty => all rows * * Examples = - * array("id"=>NULL) - * array("OR"=>array("id"=>1, "NOT"=>array("state"=>3))); - * array("AND"=>array("id"=>1, array("NOT"=>array("state"=>array(3,4,5),"toto"=>2)))) + * array("id"=>NULL) + * array("OR"=>array("id"=>1, "NOT"=>array("state"=>3))); + * array( + * "AND"=>array( + * "id"=>1,array( + * "NOT"=>array( + * "state"=>array(3,4,5), + * "toto"=>2 + * ) + * ) + * ) + * ) * * param 'FIELDS' name or array of field names * param 'ORDER' filed name or array of field names @@ -132,19 +145,21 @@ abstract class CommonTable { * * @return DBIterator **/ - public function request ($crit='') { + public function request ($crit='') + { return new TableIterator ($this->db, $this->table, $crit); } /** * Retrieve 2 columns of all the table's row in a hashtable * - * @param $fieldkey string name of the field to use as index - * @param $fieldvalue string name of the field to use as value + * @param string $fieldkey name of the field to use as index + * @param string $fieldvalue name of the field to use as value * * @return hashtable */ - public function getAllArray($fieldkey, $fieldvalue) { + public function getAllArray($fieldkey, $fieldvalue) + { $crit = array('FIELDS' => array($fieldkey, $fieldvalue), 'ORDER' => $fieldkey); $tab = array(); @@ -155,19 +170,26 @@ abstract class CommonTable { } } -class TablePearRepo extends CommonTable { +class TablePearRepo extends CommonTable +{ /** * Instanciate a TablePearRepo to manage pearrepo table + * + * @param object $db PDO instance of the DB connection */ - function __construct($db) { + function __construct($db) + { parent::__construct($db, 'pearrepo'); } /** * Create the table and populate it with known repo + * + * @return void */ - protected function createTable() { + protected function createTable() + { // Table schema $sql = "CREATE TABLE `pearrepo` ( @@ -204,20 +226,21 @@ class TablePearRepo extends CommonTable { * * @return hastable of alias => url */ - function getAllRepo() { + function getAllRepo() + { return $this->getAllArray('alias', 'url'); } } -/* +/** * 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 { - +class TableIterator implements Iterator +{ private $con; private $sql; private $res = false; @@ -227,12 +250,14 @@ class TableIterator implements Iterator { /** * Constructor * - * @param $dbconnexion Database Connnexion (must be a CommonDBTM object) - * @param $table table name - * @param $crit string or array of filed/values, ex array("id"=>1), if empty => all rows - * - **/ - function __construct (PDO $dbconnexion, $table, $crit='') { + * @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, " ")) { @@ -267,11 +292,14 @@ class TableIterator implements Iterator { $this->sql = ""; foreach ($field as $t => $f) { if (is_numeric($t)) { - $this->sql .= (empty($this->sql) ? "SELECT " : ",") . $f; + $this->sql .= (empty($this->sql) + ? "SELECT " : ",") . $f; } else if (is_array($f)) { - $this->sql .= (empty($this->sql) ? "SELECT $t." : ",$t.") . implode(",$t.",$f); + $this->sql .= (empty($this->sql) + ? "SELECT $t." : ",$t.") . implode(",$t.", $f); } else { - $this->sql .= (empty($this->sql) ? "SELECT " : ",") . "$t.$f"; + $this->sql .= (empty($this->sql) + ? "SELECT " : ",") . "$t.$f"; } } } else if (empty($field)) { @@ -281,18 +309,18 @@ class TableIterator implements Iterator { } // FROM table list if (is_array($table)) { - $this->sql .= " FROM `".implode("`, `",$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); + $this->sql .= " WHERE ".$this->_analyseCrit($crit); } // ORDER BY if (is_array($orderby)) { - $this->sql .= " ORDER BY `".implode("`, `",$orderby)."`"; + $this->sql .= " ORDER BY `".implode("`, `", $orderby)."`"; } else if (!empty($orderby)) { $this->sql .= " ORDER BY `$orderby`"; } @@ -313,8 +341,11 @@ class TableIterator implements Iterator { $this->pos = -1; } - function __destruct () { - + /** + * Class destructor + */ + function __destruct () + { if ($this->res) { $this->res->closeCursor(); } @@ -322,8 +353,14 @@ class TableIterator implements Iterator { /** * Build WHERE clause + * + * @param TODO $crit To document + * @param TODO $bool To document + * + * @return To document */ - private function analyseCrit ($crit, $bool="AND") { + private function _analyseCrit ($crit, $bool="AND") + { if (!is_array($crit)) { return $crit; @@ -334,14 +371,14 @@ class TableIterator implements Iterator { $ret .= " $bool "; } if (is_numeric($name)) { - // No Key case => recurse. - $ret .= "(" . $this->analyseCrit($value, $bool) . ")"; + // No Key case => recurse. + $ret .= "(" . $this->_analyseCrit($value, $bool) . ")"; } else if ($name==="OR" || $name==="AND") { - // Binary logical operator - $ret .= "(" . $this->analyseCrit($value, $name) . ")"; + // Binary logical operator + $ret .= "(" . $this->_analyseCrit($value, $name) . ")"; } else if ($name==="NOT") { // Uninary logicial operator - $ret .= " NOT (" . $this->analyseCrit($value, "AND") . ")"; + $ret .= " NOT (" . $this->_analyseCrit($value, "AND") . ")"; } else if ($name==="FKEY") { // Foreign Key condition if (is_array($value) && count($value)==2) { @@ -355,7 +392,7 @@ class TableIterator implements Iterator { } } else if (is_array($value)) { // Array of Value - $ret .= "$name IN ('". implode("','",$value)."')"; + $ret .= "$name IN ('". implode("','", $value)."')"; } else if (is_null($value)) { // NULL condition $ret .= "$name IS NULL"; @@ -370,7 +407,13 @@ class TableIterator implements Iterator { return $ret; } - public function rewind () { + /** + * To document + * + * @return To document + */ + public function rewind () + { if ($this->res && $this->pos>=0) { $this->res->closeCursor(); @@ -386,18 +429,33 @@ class TableIterator implements Iterator { return $this->next(); } - public function current() { - + /** + * To document + * + * @return To document + */ + public function current() + { return $this->row; } - public function key() { - + /** + * To document + * + * @return To document + */ + public function key() + { return (isset($this->row["id"]) ? $this->row["id"] : $this->pos); } - public function next() { - + /** + * To document + * + * @return To document + */ + public function next() + { if (!$this->res) { return false; } @@ -406,13 +464,23 @@ class TableIterator implements Iterator { return $this->row; } - public function valid() { - + /** + * To document + * + * @return To document + */ + public function valid() + { return $this->res && $this->row; } - public function numrows() { - + /** + * To document + * + * @return To document + */ + public function numrows() + { return ($this->res ? $this->res->rowCount() : 0); } } |