/** * 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); } } }