Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- if(!defined('INITIALIZED'))
- exit;
- class DatabaseList extends DatabaseHandler implements Iterator, Countable
- {
- public $data;
- public $iterator = 0;
- public $class;
- public $table;
- public $tables = array();
- public $fields = array();
- public $extraFields = array();
- public $filter;
- public $orders = array();
- public $limit;
- public $offset = 0;
- public function __construct($class = null)
- {
- if($class !== null)
- $this->setClass($class);
- }
- public function load()
- {
- $fieldsArray = array();
- if(count($this->fields) > 0)
- foreach($this->fields as $fieldName)
- $fieldsArray[$fieldName] = $this->getDatabaseHandler()->tableName($this->table) . '.' . $this->getDatabaseHandler()->fieldName($fieldName);
- if(count($this->extraFields) > 0)
- foreach($this->extraFields as $field)
- if(!$field->hasAlias())
- $fieldsArray[] = $this->getDatabaseHandler()->tableName($field->getTable()) . '.' . $this->getDatabaseHandler()->fieldName($field->getName());
- else
- $fieldsArray[] = $this->getDatabaseHandler()->tableName($field->getTable()) . '.' . $this->getDatabaseHandler()->fieldName($field->getName()) . ' AS ' . $this->getDatabaseHandler()->fieldName($field->getAlias());
- $tables = array();
- foreach($this->tables as $table)
- $tables[] = $this->getDatabaseHandler()->tableName($table);
- $filter = '';
- if($this->filter !== null)
- $filter = ' WHERE ' .$this->filter->__toString();
- $order = '';
- $orders = array();
- if(count($this->orders) > 0)
- {
- foreach($this->orders as $_tmp_order)
- $orders[] = $_tmp_order->__toString();
- if(count($orders) > 0)
- $order = ' ORDER BY ' . implode(', ', $orders);
- }
- $limit = '';
- if($this->limit !== null)
- $limit = ' LIMIT ' . (int) $this->limit;
- $offset = '';
- if($this->offset > 0)
- $offset = ' OFFSET ' . (int) $this->offset;
- $query = 'SELECT ' . implode(', ', $fieldsArray) . ' FROM ' . implode(', ', $tables) . $filter . $order . $limit . $offset;
- $this->data = $this->getDatabaseHandler()->query($query)->fetchAll();
- }
- public function getResult($id)
- {
- if(!isset($this->data))
- $this->load();
- if(isset($this->data[$id]))
- {
- if(!is_object($this->data[$id]))
- {
- $_tmp = new $this->class();
- $_tmp->loadData($this->data[$id]);
- return $_tmp;
- }
- else
- return $this->data[$id];
- }
- else
- return false;
- }
- public function addExtraField($field)
- {
- $this->extraFields[] = $field;
- $this->addTables($field->getTable());
- }
- public function addOrder($order)
- {
- $this->orders[] = $order;
- }
- public function setClass($class)
- {
- $this->class = $class;
- $instance = new $this->class();
- $this->fields = $instance::$fields;
- if(isset($instance::$extraFields))
- foreach($instance::$extraFields as $extraField)
- {
- if(!isset($extraField[2]))
- $this->extraFields[] = new SQL_Field($extraField[0], $extraField[1]);
- else
- $this->extraFields[] = new SQL_Field($extraField[0], $extraField[1], $extraField[2]);
- $this->tables[$extraField[1]] = $extraField[1];
- }
- $this->table = $instance::$table;
- $this->tables[$instance::$table] = $instance::$table;
- }
- public function setFilter($filter)
- {
- $this->addTables($filter->getTables());
- $this->filter = $filter;
- }
- public function setLimit($limit)
- {
- $this->limit = $limit;
- }
- public function setOffset($offset)
- {
- $this->offset = $offset;
- }
- public function addTables($tables)
- {
- if(is_array($tables))
- {
- foreach($tables as $table)
- if($table != '' && !in_array($table, $this->tables))
- $this->tables[$table] = $table;
- }
- elseif($tables != '' && !in_array($tables, $this->tables))
- $this->tables[$tables] = $tables;
- }
- public function current()
- {
- return $this->getResult($this->iterator);
- }
- public function rewind()
- {
- if(!isset($this->data))
- $this->load();
- $this->iterator = 0;
- }
- public function next()
- {
- ++$this->iterator;
- }
- public function key()
- {
- return $this->iterator;
- }
- public function valid()
- {
- return isset($this->data[$this->iterator]);
- }
- public function count()
- {
- if(!isset($this->data))
- $this->load();
- return count($this->data);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement