/** * Cette fonction permet le chargement d'un model * * Appel possible dans un contrôleur : * * $databaseConfigs = array( * 'host' => "localhost", * 'login' => "root", * 'password' => "", * 'database' => "koezion_madatabase", * 'prefix' => "", * 'socket' => "", * 'port' => "", * 'source' => "mysql" * ); * $externalSlider = $this->load_model('Slider', true, $databaseConfigs); * pr($externalSlider->find()); * * @param varchar $name Nom du model à charger * @param boolean $return Indique si il faut ou non retourner l'objet * @param array $databaseConfigs Configuration de connexion différentes de celles par défaut * @return Objet ou rien * @access public * @author koéZionCMS * @version 0.1 - 23/12/2011 by FI * @version 0.2 - 18/03/2014 by FI - Reprise du chargement des modèles des plugins * @version 0.3 - 03/06/2014 by FI - Rajout de la variable $databaseConfigs permettant la connexion à une autre BDD * @version 0.4 - 08/08/2014 by FI - Modification des données envoyées au constructeur, création de la variable $modelParams */ public function load_model($name, $return = false, $databaseConfigs = null) { //En premier lieu on test si le model n'est pas déjà instancié //et si il ne l'est pas on procède à son intenciation if (!isset($this->{$name})) { $file_path = ''; $file_name = Inflector::underscore($name) . '.php'; //Nom du fichier à charger $file_path_default = ROOT . DS . 'models' . DS . $file_name; //Chemin vers le fichier à charger //Pour déterminer le dossier du plugin nous devons transformer le nom du model à charger //Etape 1 : passage au pluriel //Etape 2 : transformation du camelCased en _ $pluginPluralizeName = Inflector::pluralize($name); $pluginUnderscoreName = Inflector::underscore($pluginPluralizeName); ////////////////////////////////////////////// // RECUPERATION DES CONNECTEURS PLUGINS // $pluginsConnectors = get_plugins_connectors(); if (isset($pluginsConnectors[$pluginUnderscoreName])) { $connectorModel = $pluginsConnectors[$pluginUnderscoreName]; $file_path_plugin = PLUGINS . DS . $connectorModel . DS . 'models' . DS . $file_name; //Chargement de l'éventuel fichier supplémentaire pour les models $pluginModelBoostrap = PLUGINS . DS . $connectorModel . DS . 'model.php'; if (file_exists($pluginModelBoostrap)) { require_once $pluginModelBoostrap; } } ////////////////////////////////////////////// if (isset($file_path_plugin) && file_exists($file_path_plugin)) { $file_path = $file_path_plugin; } else { if (file_exists($file_path_default)) { $file_path = $file_path_default; } } //Sinon on test si le model par défaut existe //On va tester l'existence de ce fichier if (!file_exists($file_path)) { Session::write('redirectMessage', "Impossible de charger le modèle " . $name . " dans le fichier controller"); $this->redirect('home/e404'); die; } require_once $file_path; //Inclusion du fichier $modelParams = null; if (isset($this->request)) { $modelParams['url'] = $this->request->fullUrl; $modelParams['controller_action'] = isset($this->request->controller) && isset($this->request->action) ? $this->request->controller . '/' . $this->request->action : ''; } if ($return) { return new $name($modelParams, $databaseConfigs); } else { $this->{$name} = new $name($modelParams, $databaseConfigs); } //Création d'un objet Model de type $name que l'on va instancier dans la classe } }
/** * Cette fonction va charger le fichier contenant la classe d'un controller * * @param varchar $controllerToLoad Contrôleur à charger * @return varchar Nom du contrôleur souhaité * @access public * @author koéZionCMS * @version 0.1 - 23/12/2011 * @version 0.2 - 20/10/2013 by AB - Rajout de la gestion du dossier du plugin * @version 0.3 - 18/03/2014 by FI - Allègement de la gestion du chargement du fichier du controller * @version 0.4 - 12/04/2014 by FI - Suppression de _plugin dans le nom d'un controller de plugin * @version 0.5 - 12/04/2014 by FI - Annulation suppression de _plugin dans le nom d'un controller de plugin car un plugin peut potentiellement avoir le même nom qu'un controller existant */ public function load_controller_file($controllerToLoad = null) { if (isset($controllerToLoad) && !empty($controllerToLoad)) { $this->request->controller = $controllerToLoad; } $controllerName = strtolower($this->request->controller . '_controller'); //On récupère dans une variable le nom du controller $controllerPath = CONTROLLERS . DS . $controllerName . '.php'; //On récupère dans une variable le chemin du controller ////////////////////////////////////////////// // RECUPERATION DES CONNECTEURS PLUGINS // //Les connecteurs sont utilisés pour la correspondance entre les plugins et les dossiers des plugins $pluginsConnectors = get_plugins_connectors(); if (isset($pluginsConnectors[$this->request->controller])) { $this->request->pluginFolder = $folderPlugin = $pluginsConnectors[$this->request->controller]; //Récupération du dossier du plugin si le controller appellé est dans un connector d'un plugin $controllerPath = PLUGINS . DS . $folderPlugin . DS . 'controllers' . DS . $controllerName . '.php'; $controllerName = strtolower($this->request->controller . '_plugin_controller'); } ////////////////////////////////////////////// if (file_exists($controllerPath)) { if (isset($folderPlugin)) { //On doit contrôler si le plugin est installé en allant lire le fichiers $pluginsList = Cache::exists_cache_file(TMP . DS . 'cache' . DS . 'variables' . DS . 'Plugins' . DS, "plugins"); $pluginControllerToLoad = Inflector::camelize($folderPlugin); if (!isset($pluginsList[$pluginControllerToLoad])) { $message = "Le controller du plugin " . $this->request->controller . " n'existe pas" . " dans le fichier dispatcher ou n'est pas correctement installé"; $this->error($message); die; } $pluginControllerBoostrap = PLUGINS . DS . $folderPlugin . DS . 'controller.php'; if (file_exists($pluginControllerBoostrap)) { require_once $pluginControllerBoostrap; } } require_once $controllerPath; //Inclusion de ce fichier si il existe return $controllerName; } else { if (isset($folderPlugin)) { $message = "Le controller du plugin " . $this->request->controller . " n'existe pas" . " dans le fichier dispatcher ou n'est pas correctement installé"; } else { $message = "Le controller " . $this->request->controller . " n'existe pas" . " dans le fichier dispatcher"; } $this->error($message); die; } }
* @param varchar $file Chemin * @access public * @author koéZionCMS * @version 0.1 - 16/10/2014 by FI */ function get_path_from_server_origin($file) { $file = str_replace(BASE_URL, '', $file); $file = str_replace('/', DS, $file); return ROOT . $file; } /** * Gestion de la fonction _() utilisée par GetText pour la localisation * On test si le plugin localization n'est pas en cours d'utilisation car la fonction _() est déjà implémentée dans la librairie GetText */ if (!in_array('localization', get_plugins_connectors()) && !function_exists('_')) { function _($text) { return $text; } } /** * Convenience method for echo(). * * @param string $text String to echo * @link http://book.cakephp.org/view/1129/e * @deprecated Will be removed in 2.0 */ function e($text) { echo $text;