/**
  * Génération du DAO
  * @param string $pFullyQualifiedDAO l'identifiant du DAO complet
  */
 private static function _generateDAO($pFullyQualifiedDAO, $pConnectionName)
 {
     Copix::RequireOnce(COPIX_PATH . 'dao/CopixDAOGenerator.class.php');
     $generator = new CopixDAOGenerator(self::_getDAODefinitionBuilder($pFullyQualifiedDAO, $pConnectionName)->getDefinition());
     // génération des classes PHP correspondant à la définition de la DAO
     CopixFile::write(CopixDAOFactory::_getCompiledPath($pFullyQualifiedDAO), $generator->getPHPCode());
 }
 /**
  * compile the given class id.
  */
 function compile($DAOid)
 {
     // on verifie que le plugin copixdb est bien inclus : on en a besoin pour la génération de code
     $plugin =& $GLOBALS['COPIX']['COORD']->getPlugin('copixdb');
     if ($plugin === null) {
         trigger_error(CopixI18N::get('copix:dao.error.plugin.notfound', $this->_shortFileName), E_USER_ERROR);
     }
     // recuperation du chemin et nom de fichier de definition xml de la dao
     $this->_DAOid = $DAOid;
     $selector =& CopixSelectorFactory::create($this->_DAOid);
     if (!$selector->isValid) {
         trigger_error(CopixI18N::get('copix:dao.error.selector.invalid', $this->_DAOid), E_USER_ERROR);
     }
     $this->_baseName = $selector->fileName;
     $this->_shortFileName = strtolower($selector->fileName . '.dao.definition.xml');
     $fileName = $selector->getPath(COPIX_RESOURCES_DIR) . $this->_shortFileName;
     if (!is_readable($fileName)) {
         trigger_error(CopixI18N::get('copix:dao.error.definitionfile.unknow', $fileName), E_USER_ERROR);
     }
     // chargement du fichier XML
     require_once COPIX_UTILS_PATH . 'CopixSimpleXml.class.php';
     $xmlParser =& new CopixSimpleXML();
     if (!($parsedFile = $xmlParser->parseFile($fileName))) {
         $xmlParser->raiseError();
     }
     // chargement de l'analyseur de définition et du générateur de code, adéquate à la version de la dao
     $attr = $parsedFile->attributes();
     $version = 1;
     if (isset($attr['VERSION'])) {
         $version = intval($attr['VERSION']);
     }
     if ($version == 1) {
         require_once COPIX_DAO_PATH . 'CopixDAODefinitionV1.class.php';
         require_once COPIX_DAO_PATH . 'CopixDAOGeneratorV1.class.php';
         $userDefinition =& new CopixDAODefinitionV1($this);
         $generator =& new CopixDAOGeneratorV1($this);
     } else {
         require_once COPIX_DAO_PATH . 'CopixDAODefinitionV0.class.php';
         require_once COPIX_DAO_PATH . 'CopixDAOGeneratorV0.class.php';
         $userDefinition =& new CopixDAODefinitionV0($this);
         $generator =& new CopixDAOGeneratorV0($this);
     }
     // analyse de la définition
     $userDefinition->loadFrom($parsedFile);
     // inclusion des classes "surchargeant" les futures classes générées
     $DAOPath = $selector->getPath(COPIX_CLASSES_DIR) . strtolower($selector->fileName . '.dao.class.php');
     if (is_readable($DAOPath)) {
         require_once $DAOPath;
         $generator->setUserDAOPath($DAOPath);
         // eventuelle surcharge de la classe DAO
         $className = $this->_DAOClassName();
         if (class_exists($className)) {
             $generator->setUserDAO(new $className());
         }
         // eventuelle surcharge de la classe du record DAO
         $className = $this->_DAORecordClassName();
         if (class_exists($className)) {
             $generator->setUserDAORecord(new $className());
         }
     }
     $generator->setUserDefinition($userDefinition);
     // génération des classes PHP correspondant à la définition de la DAO
     $compiled = '<?php ';
     $compiled .= $generator->compileDAORecordClass();
     $compiled .= $generator->compileDAO();
     $compiled .= "\n?>";
     $objectWriter =& new CopixFile();
     $objectWriter->write(CopixDAOFactory::_getCompiledPath($DAOid), $compiled);
 }