Your IP : 172.28.240.42


Current Path : /var/www/html/clients/rebirth.e-nk.ru/engine/classes/
Upload File :
Current File : /var/www/html/clients/rebirth.e-nk.ru/engine/classes/Entity.class.php

<?php
/*-------------------------------------------------------
*
*   LiveStreet Engine Social Networking
*   Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
*   Official site: www.livestreet.ru
*   Contact e-mail: rus.engine@gmail.com
*
*   GNU General Public License, version 2:
*   http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/

/**
 * Абстрактный класс сущности
 *
 */
abstract class Entity extends Object {	
	protected $_aData=array();
    protected $sPrimaryKey = null;

	/**
	 * Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность
	 *
	 * @param array|null $aParam
	 */
	public function __construct($aParam = false) {
		$this->_setData($aParam);
	}

	public function _setData($aData) {
		if(is_array($aData)) {
			foreach ($aData as $sKey => $val)    {
				$this->_aData[$sKey] = $val;
			}
		}
	}

	public function _getData($aKeys=array()) {
		if(!is_array($aKeys) or !count($aKeys)) return $this->_aData;
		
		$aReturn=array();
		foreach ($aKeys as $key) {
			if(array_key_exists($key,$this->_aData)) {
				$aReturn[$key] = $this->_aData[$key];
			}
		}
		return $aReturn;
	}

	public function _getDataOne($sKey) {
		if(array_key_exists($sKey,$this->_aData)) {
			return $this->_aData[$sKey];
		}
		return null;
	}
	
	/**
	 * Рекурсивное преобразование объекта и вложенных объектов в массив
	 */
	public function _getDataArray()
	{
		$aResult = array();
		foreach ($this->_aData as $sKey => $sValue) {
			if (is_object($sValue) && $sValue instanceOf Entity) {
				$aResult[$sKey] = $sValue->_getDataArray();
			} else {
				$aResult[$sKey] = $sValue;
			}
		}
		return $aResult;
	}
	
	/**
	 * Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
	 *
	 * @param string $sName
	 * @param array $aArgs
	 * @return unknown
	 */
	public function __call($sName,$aArgs) {
		$sType=strtolower(substr($sName,0,3));
		if (!strpos($sName,'_') and in_array($sType,array('get','set'))) {
			$sKey=func_underscore(substr($sName,3));
			if ($sType=='get') {
				if (isset($this->_aData[$sKey])) {
					return $this->_aData[$sKey];
				} else {
					if (preg_match('/Entity([^_]+)/',get_class($this),$sModulePrefix)) {
						$sModulePrefix=func_underscore($sModulePrefix[1]).'_';
						if (isset($this->_aData[$sModulePrefix.$sKey])) {
							return $this->_aData[$sModulePrefix.$sKey];
						}
					}
				}
				return null;
			} elseif ($sType=='set' and array_key_exists(0,$aArgs)) {
				$this->_aData[$sKey]=$aArgs[0];
			}
		} else {
			return Engine::getInstance()->_CallModule($sName,$aArgs);
		}
	}

    /**
     * Получение первичного ключа сущности (ключ, а не значение!)
     */
    public function _getPrimaryKey()
    {
        if (!$this->sPrimaryKey) {
            if (isset($this->_aData['id'])) {
                $this->sPrimaryKey = 'id';
            } else {
                // Получение primary_key из схемы бд (пока отсутствует)
                $this->sPrimaryKey = 'id';
            }
        }

        return $this->sPrimaryKey;
    }

    public function _getPrimaryKeyValue() {
        return $this->_getDataOne($this->_getPrimaryKey());
    }
}
?>