/** * Ecriture automatique du fichier Dao personalise representant * une requette qui sera utilisee pour la personalisation. * generer le script (ex : mysql) * @param string $tableName Nom de la table * @param array() $columns Liste des champs de la table * @param bool $overWrite écrase le fichier si déjà existant * @param bool $verbose affiche l'action en cours * @return int Code d'erreur */ public static function write($tableName, $columns, $overWrite = false, $verbose = false) { include __DIR__ . DIRECTORY_SEPARATOR . 'datadict.inc.php'; $class_name = String_::camelize($tableName); $folder = dirname(dirname(dirname(dirname(dirname(__DIR__))))) . DIRECTORY_SEPARATOR . 'ressources' . DIRECTORY_SEPARATOR . 'models' . DIRECTORY_SEPARATOR . 'daoCust' . DIRECTORY_SEPARATOR; // Avant de générer le daoCust, on vérifie que le fichier n'existe pas déjà if (file_exists($folder . $class_name . "DaoCust.class.php") && !$overWrite) { if ($verbose) { echo helper::warning("Le fichier daoCust de {$tableName} existe déjà.\r\n"); } return 1; } if ($verbose) { echo helper::info("Génération du fichier daoCust de {$tableName}\r\n"); } $businessClass = '/../business/' . $class_name . ".class.php"; $sql_read = ""; $i = 0; $date = date('d/m/Y'); // Entete $txt = <<<EOF <?php /** * Classe d'accès aux données generée automatiquement * par daoGenerator. * Cette classe a pour but d'être personnalisée, une fois * la personalisation effectuée, elle ne doit plus être regenerée. * * @name {$class_name}DaoCust * @copyright PIXXID SARL - {$date} * @licence /LICENCE.txt * @since 1.0 * @author D.M <*****@*****.**> */ namespace xEngine\\Models\\DaoCust; require_once(XENGINE_DIR . '/exception/Exception_.class.php'); require_once(__DIR__ . '{$businessClass}'); use \\xEngine\\Exception\\Exception_; use \\xEngine\\Models\\Business\\{$class_name}; class {$class_name}DaoCust extends {$class_name} { /** * Objet de connexion à la base de données * @access private * @var \\PDO */ private \$conn; private \$message; /** * Constructeur * * @name {$class_name}DaoCust::__construct() * @access public * @param PDO \$conn * @return void */ public function __construct(\\PDO \$conn) { parent::__construct(); \$this->conn = \$conn; } public function getConn() { return \$this->conn; } public function setConn(\\PDO \$conn) { \$this->conn = \$conn; } public function getMessage() { return \$this->message; } EOF; // Liste des champs de la table. if (!empty($columns) && is_array($columns)) { foreach ($columns as $record) { $sql_read .= $record->getName() . ", "; } } // Suppression de la dernière virgule $sql_read = substr($sql_read, 0, strlen($sql_read) - 2); // ================================================ // Ecriture de la fonction readAll // ================================================ $txt .= <<<EOF /** * Liste de tous les éléments de la table * * @name {$class_name}DaoCust::readAll() * @access public * @param int \$fetch_style \\PDO::FETCH_* * * @return mixed array | null */ public function readAll(\$fetch_style = \\PDO::FETCH_ASSOC) { try { \$sql = "SELECT {$sql_read} FROM {$tableName} "; \$stmt = \$this->conn->prepare(\$sql); if (\$stmt->execute() === false) { throw new Exception_(implode('-', \$stmt->errorInfo())); } return \$stmt->fetchAll(\$fetch_style); } catch (Exception_ \$e) { \$this->message = \$e->getMessage(); return null; } } } EOF; // Ecriture du fichier return writeFile::write_r($folder, $class_name . 'DaoCust.class.php', $txt); }
/** * Génère les dao pour l'ensemble des tables (ou seulement moduleName) * @param string $option1 * @param string $option2 * @param string $option3 * @param string $option4 * @param string $option5 * * @return bool */ public function generate($option1 = null, $option2 = null, $option3 = null, $option4 = null, $option5 = null) { // On gère les différentes options passées $generateAllModels = false; $generateDao = false; $generateDaoCust = false; $overWriteDaoCust = false; $generateBusiness = false; $verbose = false; $model = null; // On génère tous les modèles ? if ($option1 === '--all' || $option2 === '--all' || $option3 === '--all' || $option4 === '--all' || $option5 === '--all') { $generateAllModels = true; // On regarde maintenant si un modèle particulier a été demandé } elseif ($option1 != null && !in_array($option1, array('--all', '--business', '--dao', '--daocust', '--verbose'))) { $model = $option1; } elseif ($option2 != null && !in_array($option2, array('--all', '--business', '--dao', '--daocust', '--verbose'))) { $model = $option2; } elseif ($option3 != null && !in_array($option3, array('--all', '--business', '--dao', '--daocust', '--verbose'))) { $model = $option3; } elseif ($option4 != null && !in_array($option4, array('--all', '--business', '--dao', '--daocust', '--verbose'))) { $model = $option4; } elseif ($option5 != null && !in_array($option5, array('--all', '--business', '--dao', '--daocust', '--verbose'))) { $model = $option5; } // On génère les dao ? if ($option1 === '--dao' || $option2 === '--dao' || $option3 === '--dao' || $option4 === '--dao' || $option5 === '--dao') { $generateDao = true; } // On génère les daoCust ? if ($option1 === '--daocust' || $option2 === '--daocust' || $option3 === '--daocust' || $option4 === '--daocust' || $option5 === '--daocust') { $generateDaoCust = true; $overWriteDaoCust = true; } // On génère les business ? if ($option1 === '--business' || $option2 === '--business' || $option3 === '--business' || $option4 === '--business' || $option5 === '--business') { $generateBusiness = true; } // On affiche le détail ? if ($option1 === '--verbose' || $option2 === '--verbose' || $option3 === '--verbose' || $option4 === '--verbose' || $option5 === '--verbose') { $verbose = true; } // Si aucune option n'a été passée, on génère tous les dao if (!$generateBusiness && !$generateDao && !$generateDaoCust) { $generateBusiness = true; $generateDao = true; $generateDaoCust = true; } $models = array(); // Récupère l'ensemble des tables de la base $tables = $this->listTables(); // On liste les tables afin que l'utilisateur valide celles qu'il veut, si l'option -a n'a pas été passée if (!$generateAllModels && $model === null) { echo helper::warning("Veuillez sélectionner les modèles à générer. Tappez [ENTER]/[o] pour valider le modèle, [n] pour le rejeter.\r\n"); foreach ($tables as $table) { echo helper::success($table[0] . "\r\n"); echo helper::info(">> "); $input = trim(fgets(STDIN)); if (!in_array($input, array('n', 'N', 'no', 'NO', 'NON', 'non'))) { $models[] = $table[0]; } } // Si c'est un modèle particulier demandé } elseif ($model !== null) { // On vérifie que le modèle demandé est présent dans la liste des tables foreach ($tables as $table) { if (strtolower($model) === strtolower($table[0])) { $models[] = $table[0]; break; } } // Sinon on les prend tous automatiquement } else { if ($verbose) { echo helper::info("Génération de tous les modèles\r\n"); } foreach ($tables as $table) { $models[] = $table[0]; } } // On va créer chaque modèle foreach ($models as $model) { try { $columns = $this->listColumns($model); $fullColumns = $this->prepareColumns($model, $columns); // Création du fichier business if ($generateBusiness) { writeBusiness::write($model, $fullColumns, $verbose); } // Création du fichier dao if ($generateDao) { writeDao::write($model, $fullColumns, $verbose); } // Création du fichier daoCust if ($generateDaoCust) { writeDaoCust::write($model, $fullColumns, $overWriteDaoCust, $verbose); } } catch (\Exception $e) { echo helper::error("Génération pour {$model} : {$e->getMessage()}\r\n"); return false; } } // Si des modèles ont été générés, on l'indique if (sizeof($models)) { echo helper::success("Génération terminée.\r\n"); } else { echo helper::warning("Aucun modèle généré.\r\n"); } return true; }