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;
 }