Example #1
0
 /**
  * Constructeur de la classe
  *
  * @access 	public
  * @author 	koéZionCMS
  * @version 0.1 - 28/12/2011 by FI
  * @version 0.2 - 02/03/2012 by FI - Modification de la récupération de la configuration de la base  de données, on passe maintenant par un fichier .ini
  * @version 0.3 - 11/04/2012 by FI - Modification de la récupération du .ini seulement deux configurations possibles localhost et online
  * @version 0.4 - 24/08/2012 by FI - Rajout du shéma de la table comme variable de classe
  * @version 0.5 - 07/09/2012 by FI - Rajout de la variable database si la connexion existe déjà
  * @version 0.6 - 14/12/2012 by FI - Rajout de la variable $refererUrl dans le constructeur pour les logs bdd
  * @version 0.7 - 05/07/2013 by FI - Gestion de l'alias
  * @version 0.8 - 11/11/2013 by FI - Rajout de la source en variable en prévision de futures évolutions
  * @version 0.9 - 03/06/2014 by FI - Rajout de la variable $databaseConfigs pour permettre à un modèle de se connecter à une BDD autre que celle par défaut, le format doit être identique à celui retourné par le fichier configs/files/database.ini
  * @version 1.0 - 08/08/2014 by FI - Modification du premier paramètre passé au constructeur pour y ajouter de nouvelles données (la donnée controller_action)
  * @version 1.1 - 20/01/2015 by FI - Mise en place du code pour l'i18n
  */
 public function __construct($modelParams = null, $databaseConfigs = null)
 {
     $this->refererUrl = $modelParams['url'];
     $this->controller_action = $modelParams['controller_action'];
     //Récupération de la configuration de connexion à la base de données
     $httpHost = $_SERVER["HTTP_HOST"];
     if ($httpHost == 'localhost' || $httpHost == '127.0.0.1') {
         $section = 'localhost';
     } else {
         $section = 'online';
     }
     if (isset($databaseConfigs) && !empty($databaseConfigs)) {
         $conf = $databaseConfigs;
         Model::$connections = array();
     } else {
         require_once LIBS . DS . 'config_magik.php';
         //Import de la librairie de gestion des fichiers de configuration
         $cfg = new ConfigMagik(CONFIGS . DS . 'files' . DS . 'database.ini', true, true);
         //Création d'une instance
         $conf = $cfg->keys_values($section);
         //Récupération des configurations en fonction du nom de domaine (Ancienne version : $conf = $cfg->keys_values($_SERVER["HTTP_HOST"], 1);)
     }
     //$conf['source'] = "mysql";
     //Si le nom de la table n'est pas défini on va l'initialiser automatiquement
     //Par convention le nom de la table sera le nom de la classe en minuscule avec un s à la fin
     if ($this->table === false) {
         $prefix = $conf['prefix'];
         //On va récupérer la valeur du préfix se trouvant dans le tableau de configuration de la base de données
         $tableName = Inflector::tableize(get_class($this));
         //Mise en variable du nom de la table
         $this->table = $prefix . $tableName;
         //Affectation de la variable de classe
     }
     $this->alias = "Kz" . get_class($this);
     /////////////////////////////////////////////
     //    GESTION DE L'INTERNATIONALISATION    //
     if (defined('PLUGIN_LOCALIZATION_ACTIV') && PLUGIN_LOCALIZATION_ACTIV && defined('LOCALIZATION_TRANSLATE_FIELDS_FILE') && file_exists(LOCALIZATION_TRANSLATE_FIELDS_FILE)) {
         //On va contrôler que pour le model en cours il n'existe pas de champs à traduire
         //Le cas échéant on les rajoute dans la variable de classe $fieldsToTranslate
         require_once LIBS . DS . 'config_magik.php';
         //Chargement de ConfigMagik
         $cfg = new ConfigMagik(LOCALIZATION_TRANSLATE_FIELDS_FILE, true, true);
         //Création d'une instance de ConfigMagik avec le fichier des champs à traduire
         $fieldsToTranslate = $cfg->keys_values($this->table);
         //Récupération des configurations de la table en cours
         if ($fieldsToTranslate) {
             $this->fieldsToTranslate = $fieldsToTranslate;
         }
     }
     //On test qu'une connexion ne soit pas déjà active
     if (isset(Model::$connections[$this->conf])) {
         $this->db = Model::$connections[$this->conf];
         $this->database = $conf['database'];
         $this->shema = $this->shema();
         return true;
     }
     //On va tenter de se connecter à la base de données
     try {
         $dsn = $conf['source'] . ':host=' . $conf['host'] . ';dbname=' . $conf['database'];
         if (!empty($conf['socket'])) {
             $dsn = $conf['source'] . ':unix_socket=' . $conf['socket'] . ';dbname=' . $conf['database'] . ';port=' . $conf['port'];
         }
         //Création d'un objet PDO
         $pdo = new PDO($dsn, $conf['login'], $conf['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
         //Mise en place des erreurs de la classe PDO
         //Utilisation du mode exception pour récupérer les erreurs
         $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
         Model::$connections[$this->conf] = $pdo;
         //On affecte l'objet à la classe
         $this->db = $pdo;
         $this->database = $conf['database'];
         $this->shema = $this->shema();
     } catch (PDOException $e) {
         //Erreur
         //Test du mode debug
         if (Configure::read('debug') >= 1) {
             $message = '<pre style="background-color: #EBEBEB; border: 1px dashed black; padding: 10px;">';
             $message .= _("BASE DE DONNEES NON DISPONIBLE, MERCI DE REESSAYER PLUS TARD") . $e->getMessage();
             $message .= '</pre>';
             die($message);
         } else {
             $message = '<pre style="background-color: #EBEBEB; border: 1px dashed black; padding: 10px;">';
             $message .= _("BASE DE DONNEES INSDISPONIBLE, MERCI DE REESSAYER PLUS TARD");
             $message .= '</pre>';
             die($message);
         }
     }
 }