function CopixDAOGenerator(&$compiler) { $this->_compiler =& $compiler; $this->_compiledDAOClassName = CopixDAOFactory::getDAOName($compiler->_DAOid); $this->_compiledDAORecordClassName = CopixDAOFactory::getDAORecordName($compiler->_DAOid); }
/** * Assigne le chemin vers le fichier PHP à utiliser et à surcharger pour générer le DAO * @param string $pFilePath le chemin absolu vers le fichier PHP à utiliser * @param string $pRecordName le nom de la classe PHP qui est définie par l'utilisateur pour reprsenter l'enregistrement * @param string $pDAOName le nom de la classe PHP qui est définie par l'utilisateur pour représenter le DAO */ public function setPHPClassFilePath($pFilePath, $pRecordName = null, $pDAOName = null) { if (Copix::RequireOnce($this->_phpClassFilePath = $pFilePath)) { //On s'occupe de récupérer le nom du Record à utiliser si besoin if ($pRecordName !== null) { if (!class_exists($pRecordName)) { throw new Exception('Demande d utilisation de ' . $pRecordName . ' pour le record mais la classe n est pas définie dans le fichier ' . $pFilePath); } else { $this->_userDefinedDAORecordName = $pRecordName; } } else { //on utilise le nom par défaut if (class_exists($daoRecordName = CopixDAOFactory::getDAORecordName($this->_DAOId, false))) { $this->_userDefinedDAORecordName = $daoRecordName; } } //On s'occupe de récupérer le nom du DAO à utiliser si besoin if ($pDAOName !== null) { if (!class_exists($pRecordName)) { throw new Exception('Demande d utilisation de ' . $pDAOName . ' pour le DAO mais la classe n est pas définie dans le fichier ' . $pFilePath); } else { $this->_userDefinedDAOName = $pDAOName; } } else { //on utilise le nom par défaut if (class_exists($daoName = CopixDAOFactory::getDAOName($this->_DAOId, false))) { $this->_userDefinedDAOName = $daoName; } } } else { throw new Exception('impossible de charger le fichier de définition demandé pour le DAO ' . $pFilePath); } }
/** * Compilation de l'objet record * @return string */ public function getPHPCode4DAORecord() { $result = ''; //--Vars $classVars = array(); $classMethods = array(); if ($this->_definition->getUserDefinedDAORecordName() !== null) { $result .= ' Copix::RequireOnce (\'' . $this->_definition->getPHPClassFilePath() . '\');' . "\n"; $extends = " extends " . $this->_definition->getUserDefinedDAORecordName(); $classVars = (array) get_class_vars($this->_definition->getUserDefinedDAORecordName()); $classMethods = (array) get_class_methods($this->_definition->getUserDefinedDAORecordName()); } else { $extends = ''; } $result .= "\nclass " . CopixDAOFactory::getDAORecordName($this->_definition->getDAOId()) . $extends . ' implements ICopixDAORecord' . "{\n"; //DAORecord fields (not in user's DAO) //building the tab for the required properties. $usingFields = array(); $classVarsList = array_keys($classVars); foreach ($this->_definition->getProperties() as $id => $field) { if (!in_array($field->name, $classVarsList)) { $usingFields[$id] = $field; } } //declaration of properties. $result .= $this->_writeFieldsInfoWith('name', ' var $', " = null;\n", '', $usingFields); //InitFromDBObject $methodName = in_array('initFromDBObject', $classMethods) ? '_compiled_initFromDBObject' : 'initFromDBObject'; $result .= ' public function ' . $methodName . ' ($dbRecord){' . "\n"; foreach ($this->_definition->getProperties() as $field) { $result .= ' if (is_array ($dbRecord)){' . "\n"; $result .= ' $this->' . $field->name . '= $dbRecord[\'' . $field->name . "'];\n"; $result .= '}else{' . "\n"; $result .= ' $this->' . $field->name . '= $dbRecord->' . $field->name . ";\n"; $result .= '}'; } $result .= ' return $this;'; $result .= ' }' . "\n"; $result .= $this->_generatePHP4GetDAOId(); $result .= "}\n"; return $result; }