예제 #1
0
    /**
     * 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);
    }
예제 #2
0
파일: dao.php 프로젝트: pixxid/xengine
 /**
  * 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;
 }