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; if($className == 'extensionModel') return 'extension'; 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|bool the model object or false if model file not exists. */ public function loadModel($moduleName) { if(empty($moduleName)) return false; $modelFile = helper::setModelFile($moduleName); if(!helper::import($modelFile)) return false; $modelClass = class_exists('ext' . $moduleName. 'model') ? 'ext' . $moduleName . 'model' : $moduleName . 'model'; if(!class_exists($modelClass)) $this->app->triggerError(" The model $modelClass not found", __FILE__, __LINE__, $exit = true); $this->$moduleName = new $modelClass(); return $this->$moduleName; } /** * Load extension class of a model. Saved to $moduleName/ext/model/class/$extensionName.class.php. * * @param string $extensionName * @param string $moduleName * @access public * @return void */ public function loadExtension($extensionName, $moduleName = '') { if(empty($extensionName)) return false; /* Set extenson name and extension file. */ $extensionName = strtolower($extensionName); $moduleName = $moduleName ? $moduleName : $this->getModuleName(); $extensionFile = $this->app->getModuleExtPath($moduleName, 'model') . 'class/' . $extensionName . '.class.php'; /* Try to import parent model file auto and then import the extension file. */ if(!class_exists($moduleName . 'Model')) helper::import($this->app->getModulePath($moduleName) . 'model.php'); if(!helper::import($extensionFile)) return false; /* Set the extension class name. */ $extensionClass = $extensionName . ucfirst($moduleName); if(!class_exists($extensionClass)) return false; /* Create an instance of the extension class and return it. */ $extensionObject = new $extensionClass; $extensionClass = str_replace('Model', '', $extensionClass); $this->$extensionClass = $extensionObject; return $extensionObject; } //-------------------- 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); } }