* @package ZenTaoPHP * @version $Id: model.class.php 135 2010-09-14 03:23:35Z yuren_@126.com $ * @link http://www.zentao.net */ /** * The base class of model. * * @package ZenTaoCMS */ class model { /** * The global $app object. * * @var object * @access protected */ protected $app; /** * The global $config object. * * @var object * @access protected */ protected $config; /** * The global $lang object. * * @var object * @access protected */ protected $lang; /** * The global $dbh object, the database connection handler. * * @var object * @access protected */ protected $dbh; /** * The $dao object, used to access or update database. * * @var object * @access protected */ public $dao; /** * The $post object, used to access the $_POST var. * * @var ojbect * @access public */ public $post; /** * The $get object, used to access the $_GET var. * * @var ojbect * @access public */ public $get; /** * The $sesion object, used to access the $_SESSION var. * * @var ojbect * @access public */ public $session; /** * The $server object, used to access the $_SERVER var. * * @var ojbect * @access public */ public $server; /** * The $cookie object, used to access the $_COOKIE var. * * @var ojbect * @access public */ public $cookie; /** * The $global object, used to access the $_GLOBAL var. * * @var ojbect * @access public */ public $global; /** * The construct function. * * 1. global the global vars, refer them by the class member such as $this->app. * 2. set the pathes, config, lang of current module * * @access public * @return void */ public function __construct() { global $app, $config, $lang, $dbh; $this->app = $app; $this->config = $config; $this->lang = $lang; $this->dbh = $dbh; $moduleName = $this->getModuleName(); $this->app->loadLang($moduleName, $exit = false); $this->app->loadConfig($moduleName, $exit = false); $this->loadDAO(); $this->setSuperVars(); } /** * Get the module name of this model. Not the module user visiting. * * This method replace the 'ext' and 'model' string from the model class name, thus get the module name. * Not useing $app->getModuleName() because it return the module user is visiting. But one module can be * loaded by loadModel() so we must get the module name of thie model. * * @access protected * @return string the module name. */ protected function getModuleName() { $parentClass = get_parent_class($this); $selfClass = get_class($this); $className = $parentClass == 'model' ? $selfClass : $parentClass; return strtolower(str_ireplace(array('ext', 'Model'), '', $className)); } /** * Set the super vars. * * @access protected * @return void */ protected function setSuperVars() { $this->post = $this->app->post; $this->get = $this->app->get; $this->server = $this->app->server; $this->cookie = $this->app->cookie; $this->session = $this->app->session; $this->global = $this->app->global; } /** * Load the model of one module. After loaded, can use $this->modulename to visit the model object. * * @param string $moduleName * @access public * @return object the model object */ public function loadModel($moduleName) { if(empty($moduleName)) return false; $modelFile = helper::setModelFile($moduleName); if(!file_exists($modelFile)) return false; helper::import($modelFile); $modelClass = class_exists('ext' . $moduleName. 'model') ? 'ext' . $moduleName . 'model' : $moduleName . 'model'; if(!class_exists($modelClass)) $this->app->error(" The model $modelClass not found", __FILE__, __LINE__, $exit = true); $this->$moduleName = new $modelClass(); return $this->$moduleName; } //-------------------- DAO related method s--------------------// /** * Load DAO. * * @access private * @return void */ private function loadDAO() { $this->dao = $this->app->loadClass('dao'); } /** * Delete one record. * * @param string $table the table name * @param string $id the id value of the record to be deleted * @access public * @return void */ public function delete($table, $id) { $this->dao->update($table)->set('deleted')->eq(1)->where('id')->eq($id)->exec(); $object = str_replace($this->config->db->prefix, '', $table); $this->loadModel('action')->create($object, $id, 'deleted', '', $extra = ACTIONMODEL::CAN_UNDELETED); } /** * Undelete an record. * * @param int $actionID * @access public * @return void */ public function undelete($actionID) { $action = $this->loadModel('action')->getById($actionID); if($action->action != 'deleted') return; $table = $this->config->action->objectTables[$action->objectType]; $this->dao->update($table)->set('deleted')->eq(0)->where('id')->eq($action->objectID)->exec(); $this->dao->update(TABLE_ACTION)->set('extra')->eq(ACTIONMODEL::BE_UNDELETED)->where('id')->eq($actionID)->exec(); $this->action->create($action->objectType, $action->objectID, 'undeleted'); } }