Location: PHPKode > projects > Energine > energine-2.2/core2a/framework/Data.class.php
<?php

/**
 * Класс Data.
 *
 * @package energine
 * @subpackage core
 * @author dr.Pavka
 * @copyright ColoCall 2006
 * @version $Id: Data.class.php,v 1.4 2007/12/17 14:16:03 pavka Exp $
 */

//require_once('core/framework/Object.class.php');
//require_once('core/framework/Field.class.php');

/**
 * Данные.
 *
 * @package energine
 * @subpackage core
 */
class Data extends Object {

    /**
     * @access private
     * @var array поля данных
     */
    private $fields = array();

    /**
     * @access private
     * @var int количество полей данных
     */
    private $length = 0;

    /**
     * @access private
     * @var int количество строк данных
     */
    private $rows = 0;

    /**
     * Конструктор класса.
     *
     * @access public
     * @return void
     */
    public function __construct() {
        parent::__construct();
    }

    /**
     * Загружает набор данных, полученных из БД.
     *
     * @access public
     * @param array $data
     * @return void
     * @see DBA::selectRequest()
     */
    public function load(array $data) {
        $data = inverseDBResult($data);
        foreach ($data as $fieldName => $fieldValues) {
            $fieldObject = new Field($fieldName);
            $fieldObject->setData($fieldValues);
            $this->addField($fieldObject);
        }
    }

    /**
     * Добавляет строку данных ко всем полям.
     *
     * @access public
     * @param array $rowData
     * @return void
     */
    public function addRow(array $rowData) {
        foreach ($rowData as $fieldName => $fieldValue) {
            $field = $this->getFieldByName($fieldName);
            if ($field) {
                $field->addRowData($fieldValue);
            }
        }
    }

    /**
     * Удаляет строку данных из всех полей.
     *
     * @access public
     * @param int $rowIndex
     * @return void
     */
    public function removeRow($rowIndex) {
        foreach ($this->fields as $field) {
            $field->removeRowData($rowIndex);
        }
    }

    /**
     * Изменяет строку данных для всех полей.
     *
     * @access public
     * @param int $rowIndex
     * @param array $rowData
     * @return boolean
     */
    public function changeRow($rowIndex, array $rowData) {
        $result = false;
        foreach ($rowData as $fieldName => $fieldValue) {
        	$field = $this->getFieldByName($fieldName);
        	if ($field) {
        		$result = $field->changeRowData($rowIndex, $fieldValue);
        	}
        }
        return $result;
    }

    /**
     * Добавляет поле данных.
     *
     * @access public
     * @param Field $field
     * @return void
     */
    public function addField(Field $field) {
        $this->fields[$field->getName()] = $field;
        $this->length++;
    }

    /**
     * Удаляет поле данных.
     *
     * @access public
     * @param Field $field
     * @return void
     */
    public function removeField(Field $field) {
        if (isset($this->fields[$field->getName()])) {
        	unset($this->fields[$field->getName()]);
        	$this->length--;
        }
    }

    /**
     * Возвращает поле с указанным именем.
     *
     * @access public
     * @param string $name
     * @return Field
     */
    public function getFieldByName($name) {
        $field = false;
        if (isset($this->fields[$name])) {
            $field = $this->fields[$name];
        }
        return $field;
    }

    /**
     * Возвращает набор полей данных.
     *
     * @access public
     * @return array
     */
    public function getFields() {
        return $this->fields;
    }

    /**
     * Возвращает количество полей данных.
     *
     * @access public
     * @return int
     */
    public function getLength() {
        return $this->length;
    }

    /**
     * Возвращает количество строк данных.
     *
     * @return int
     * @access public
     */
    public function getRowCount() {
        if ($this->length > 0) {
            $fieldNames = array_keys($this->fields);
            $firstFieldName = $fieldNames[0];
            $this->rows = $this->getFieldByName($firstFieldName)->getRowCount();
        }
        return $this->rows;
    }
}
Return current item: Energine