/** * Constructeur de la classe * * @param varchar $view Nom de la vue à charger * @param object $controller Contrôleur faisant appel à la vue * @access public * @author koéZionCMS * @version 0.1 - 13/06/2012 by FI * @version 0.2 - 05/06/2013 by FI - Mise en place du chargement des helpers template * @version 0.2 - 05/06/2013 by FI - Modification de la gestion des Helpers, par défaut on charge de façon distincte les helpers du backoffice et du frontoffice pour plus de souplesse dans la gestion des templates * @version 0.3 - 07/07/2014 by FI - Rajout de $this->request = new stdClass(); pour corriger l'erreur suivante Warning: Creating default object from empty value in /core/Koezion/view.php on line 342 * @version 0.4 - 08/01/2015 by FI - Mise en place des hooks pour les helpers */ public function __construct($view, $controller) { $this->view = $view; $this->controller = $controller; $this->layout = $controller->layout; $this->vars = $controller->get('vars'); $this->vars['components'] = $controller->components; $this->params = $controller->params; $this->request = new stdClass(); //Si on a des helpers à charger //Il s'agit ici de helpers commun à l'ensemble des templates backoffice et frontoffice uniquement //S'il s'agit de helpers spécifiques il faut mettre les fichiers dans les dossiers correspondants if ($this->helpers) { foreach ($this->helpers as $k => $v) { $helper = low($v); require_once HELPERS . DS . $helper . '_helper.php'; unset($this->helpers[$k]); $helperObjectName = $v . 'Helper'; $this->vars['helpers'][$v] = new $helperObjectName($this); } } //INSERTION DES EVENTUELS HELPERS DU TEMPLATE (BACK OU FRONT)// if (defined('LAYOUT_VIEWS')) { $moreHelpers = LAYOUT_VIEWS . DS . 'helpers'; } else { $moreHelpers = HELPERS . DS . 'backoffice'; } //Backoffice if (is_dir($moreHelpers)) { foreach (FileAndDir::directoryContent($moreHelpers) as $moreHelper) { $helperPath = $moreHelpers . DS . $moreHelper; //On va effectuer un contrôle pour vérifier si un hook n'est pas en place pour le helper concerné if (defined('LAYOUT_VIEWS')) { $websiteHooks = $this->vars['websiteParams']; $helpersHooks = $this->_load_hooks_files('HELPERS', $websiteHooks); if (isset($helpersHooks[$moreHelper])) { $helperPath = $helpersHooks[$moreHelper]; } } require_once $helperPath; $helperClass = Inflector::camelize(str_replace('_helper.php', '', $moreHelper)); $helperObjectName = $helperClass . 'Helper'; $this->vars['helpers'][$helperClass] = new $helperObjectName($this); } } $this->rendered = false; }
$aUrlList[str_repeat('___', $v['level'] + 1) . $v['name']] = $url; } //Réorganisation de la liste des articles foreach ($posts as $k => $v) { $aUrlList['[ ==== ' . _("Articles") . ' ==== ]'] = ''; $url = Router::url('posts/view/id:' . $v['id'] . '/slug:' . $v['slug'] . '/prefix:' . $v['prefix']); if (isset($v['redirect_to']) && !empty($v['redirect_to'])) { $url = Router::url($v['redirect_to']); } $aUrlList['___' . $v['name']] = $url; } ///////////////////////////////////////////////////////////////////////////// // REGLES ADDITIONNELLES POUR LA generation DES LIENS POUR LES PLUGINS // $moreLinks = CONFIGS . DS . 'plugins' . DS . 'ckeditor' . DS . 'generate_links'; if (is_dir($moreLinks)) { foreach (FileAndDir::directoryContent($moreLinks) as $moreLink) { require_once $moreLinks . DS . $moreLink; } } ///////////////////////////////////////////////////////////////////////////// /*if(isset($flipbooks) && !empty($flipbooks)) { foreach($flipbooks as $k => $v) { $aUrlList['[ ==== '._("Flipbooks").' ==== ]'] = ''; $aUrlList['___'.$v['name']] = Router::url('flipbooks/index/id:'.$v['id'].'/slug:'.$v['slug']); } }*/ /* //Réorganisation de la liste des types d'articles foreach($postsTypes as $k => $v) {
require_once KOEZION . DS . 'router.php'; //Chargement de l'object Router (Analyse des Urls) require_once CONFIGS . DS . 'configure.php'; //Classe de configuration require_once CONFIGS . DS . 'routes.php'; //Fichier contenant la liste des réécritures d'url require_once CAKEPHP . DS . 'string.php'; //Classe Object permettant la manipulation de chaîne de caractères require_once CAKEPHP . DS . 'set.php'; //Classe Object permettant des manipulations sur les tableaux require_once CAKEPHP . DS . 'sanitize.php'; //Classe Object permettant des manipulations de nettoyage require_once KOEZION . DS . 'validation.php'; //Classe Object permettant la gestion des différentes règles de validation des modèles require_once KOEZION . DS . 'request.php'; //Chargement de l'objet Request require_once CONTROLLERS . DS . 'app_controller.php'; //Classe App require_once KOEZION . DS . 'koezion_plugin.php'; //Classe Plugin require_once KOEZION . DS . 'dispatcher.php'; //Chargement du Dispatcher ///////////////////////////////////////////// // FICHIERS BOOTSTRAP POUR LES PLUGINS // $moreBootstraps = CONFIGS . DS . 'plugins' . DS . 'bootstrap'; if (is_dir($moreBootstraps)) { foreach (FileAndDir::directoryContent($moreBootstraps) as $moreBootstrap) { require_once $moreBootstraps . DS . $moreBootstrap; } } /////////////////////////////////////////////
/** * Cette fonction permet la copie récursive de dossiers et fichier * * @param varchar $sourcePath Dossier source * @param varchar $destinationPath Dossier de destination * @access static * @author koéZionCMS * @version 0.1 - 04/11/2014 by FI */ static function recursive_copy($sourcePath, $destinationPath) { FileAndDir::createPath($destinationPath); //Création du dossier de destination $sourcePathContent = FileAndDir::directoryContent($sourcePath); //On récupère l'ensemble des fichiers //On parcours le tout et on copie foreach ($sourcePathContent as $v) { if (!is_dir($sourcePath . DS . $v)) { $processResult = FileAndDir::fcopy($sourcePath . DS . $v, $destinationPath . DS . $v); } else { FileAndDir::recursive_copy($sourcePath . DS . $v, $destinationPath . DS . $v); } } }
/** * Cette fonction permet de contrôler les plugins qui ne sont pas encore insérés dans la base de données * * @access protected * @author koéZionCMS * @version 0.1 - 17/01/2012 by FI */ protected function _check_plugins() { $pluginsDirectoryContent = FileAndDir::directoryContent(PLUGINS); foreach ($pluginsDirectoryContent as $pluginDirectory) { if (is_dir(PLUGINS . DS . $pluginDirectory) && $pluginDirectory != "_") { if (file_exists(PLUGINS . DS . $pluginDirectory . DS . 'description.xml')) { $xParsedXml = simplexml_load_file(PLUGINS . DS . $pluginDirectory . DS . 'description.xml'); $xParsedXml = (array) $xParsedXml; $this->load_model('Module'); //On charge le modèle permettant la gestion des modules foreach ($xParsedXml as $k => $v) { $conditions = array('conditions' => array('code' => $xParsedXml['code'])); $plugin = $this->Plugin->find($conditions); if (count($plugin) == 0) { //Insertion dans la base de données $insertPlugin = array('code' => $xParsedXml['code'], 'name' => $xParsedXml['name'], 'description' => $xParsedXml['description'], 'author' => $xParsedXml['author'], 'online' => 0, 'installed' => 0); $this->Plugin->save($insertPlugin); } } } } } }
$Errorsmessages['PostsComment']['email'] = _('Vous devez indiquer un email valide.'); $Errorsmessages['PostsComment']['cpostal'] = _('Vous devez indiquer votre code postal.'); $Errorsmessages['PostsComment']['message'] = _('Veuillez saisir votre message'); $Errorsmessages['PostsType']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['PostsType']['column_title'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['RightButton']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['Slider']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['User']['role'] = _('Vous devez sélectionner une valeur.'); $Errorsmessages['User']['group'] = _('Vous devez sélectionner une valeur.'); $Errorsmessages['User']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['User']['login'] = _('La valeur de ce champ est de 4 caractères minimum.'); $Errorsmessages['User']['password'] = _('La valeur de ce champ est de 4 caractères minimum.'); $Errorsmessages['User']['email'] = _('Vous devez indiquer un email valide.'); $Errorsmessages['UsersGroup']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['UsersGroup']['role_id'] = _('Vous devez sélectionner une valeur.'); $Errorsmessages['Website']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['Website']['url'] = _('Vous devez indiquer une url valide.'); //$Errorsmessages['Website']['url_alias'] = _('Vous devez indiquer une url valide pour les alias.'); $Errorsmessages['Website']['template'] = _('Vous devez indiquer sélectionner un template.'); $Errorsmessages['Template']['name'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['Template']['layout'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['Template']['version'] = _('La valeur de ce champ est de 2 caractères minimum.'); $Errorsmessages['Template']['code'] = _('La valeur de ce champ est de 2 caractères minimum.'); //////////////////////////////////////////// // MESSAGES D'ERREURS SUPPLEMENTAIRES // $moreMessages = CONFIGS . DS . 'plugins' . DS . 'errors_messages'; if (is_dir($moreMessages)) { foreach (FileAndDir::directoryContent($moreMessages) as $moreMessage) { include $moreMessages . DS . $moreMessage; } }
/** * Cette fonction permet l'insertion de fichier CSS ou JS supplémentaire directement depuis le dossier upload * * Appel : * echo $helpers['Html']->upload_additional_files('CSS'); * echo $helpers['Html']->upload_additional_files('JS'); * * @param varchar $type CSS ou JS * @param array $except Tableau contenant la liste des fichiers à ignorer * @access public * @author koéZionCMS * @version 0.1 - 19/03/2014 by FI * @deprecated - Since 31/10/2014 by FI - Suppression de cette fonctionnalité car trop lourde à gérer */ public function upload_additional_files($type, $except = null) { $html = ''; if ($type == 'CSS') { $moreCSSPath = UPLOAD . DS . 'files' . DS . 'css'; if (is_dir($moreCSSPath)) { foreach (FileAndDir::directoryContent($moreCSSPath) as $moreCSS) { if (!isset($except) || isset($except) && !in_array($moreCSS, $except)) { //On génère la balise de chargement $html .= "\t\t" . '<link href="' . Router::webroot('/upload/files/css/' . $moreCSS) . '" rel="stylesheet" type="text/css" />' . "\n"; } } } } else { if ($type == 'JS') { $moreJSPath = UPLOAD . DS . 'files' . DS . 'js'; if (is_dir($moreJSPath)) { foreach (FileAndDir::directoryContent($moreJSPath) as $moreJS) { if (!isset($except[$moreJS])) { //On génère la balise de chargement $html .= "\t\t" . '<script src="' . Router::webroot('/upload/files/js/' . $moreJS) . '" type="text/javascript"></script>' . "\n"; } } } } } return $html; }
// REGLES FRONTOFFICE // Router::connect('', 'home/index'); //Page d'accueil du site Router::connect('e404', 'home/e404'); //Erreur 404 Router::connect('newsletter', 'contacts/newsletter'); //Inscription à la newsletter Router::connect('rechercher', 'searchs/rechercher'); //Préparation de l'url pour la recherche Router::connect('recherche', 'searchs/index'); //Résultat de la recherche //////////////////////////////////////////////// // REGLES ADDITIONNELLES POUR LES PLUGINS // $moreRoutes = CONFIGS . DS . 'plugins' . DS . 'routes'; if (is_dir($moreRoutes)) { foreach (FileAndDir::directoryContent($moreRoutes) as $moreRoute) { require_once $moreRoutes . DS . $moreRoute; } } //////////////////////////////////////////////// Router::connect(':prefix/:slug-:id', 'posts/view/id:([0-9]+)/slug:([a-zA-Z0-9\\-]+)/prefix:([a-zA-Z0-9\\-]+)'); //Affichage du détail d'un post Router::connect(':slug-:id', 'categories/view/id:([0-9]+)/slug:([a-zA-Z0-9\\-]+)'); //Affichage d'une page catégorie //////////////////////////// /////////////////////////// // REGLES BACKOFFICE // Router::connect('connexion', 'users/login'); //Connexion au backoffice Router::connect($routesConfigs['backoffice_prefix'], $routesConfigs['backoffice_prefix'] . '/dashboard/index'); //Accueil backoffice
function get_plugins_connectors() { $pluginsConnectors = array(); $pluginsConnectorsPath = CONFIGS . DS . 'plugins' . DS . 'connectors'; if (is_dir($pluginsConnectorsPath)) { foreach (FileAndDir::directoryContent($pluginsConnectorsPath) as $pluginsConnectorsFile) { include $pluginsConnectorsPath . DS . $pluginsConnectorsFile; } } return $pluginsConnectors; }
/** * Cette fonction est utilisée par l'éditeur de texte pour afficher la liste des liens disponibles * * @access public * @author koéZionCMS * @version 0.1 - 21/02/2012 by FI * @version 0.2 - 07/03/2012 by FI - Rajout de la récupération des types de posts * @version 0.3 - 14/03/2012 by FI - Rajout de la récupération des rédacteurs et des dates de parution * @version 0.4 - 16/05/2012 by FI - Modification de la récupération des catégories suite à la mise en place de la gestion des sites * @version 0.5 - 25/02/2013 by FI - Fonction déplacée de CategoriesController vers AppController * @version 0.6 - 27/02/2013 by FI - Mise en place d'une procédure automatisée pour la récupération des liens des plugins à intégrer dans l'éditeur (Thanks to Pierstoval) */ public function backoffice_ajax_ckeditor_get_internal_links() { $this->layout = 'ajax'; //Définition du layout à utiliser ///Récupération de toutes les catégories et envoi des données à la vue $this->load_model('Category'); //Chargement du model $categories = $this->Category->getTree(array('conditions' => 'type != 3')); $this->set('categories', $categories); //Récupération de tous les articles et envoi des données à la vue $this->load_model('Post'); //Chargement du model $posts = $this->Post->find(); $this->set('posts', $posts); ///////////////////////////////////////////////////////////////////////////////////////// // REGLES ADDITIONNELLES POUR LA RECUPERATION DES LIENS A GENERER POUR LES PLUGINS // $moreLinks = CONFIGS . DS . 'plugins' . DS . 'ckeditor' . DS . 'get_links'; if (is_dir($moreLinks)) { foreach (FileAndDir::directoryContent($moreLinks) as $moreLink) { require_once $moreLinks . DS . $moreLink; } } ///////////////////////////////////////////////////////////////////////////////////////// /*//Récupération de tous les types d'articles et envoi des données à la vue $this->load_model('PostsType'); //Chargement du model $postsTypes = $this->PostsType->find(); $this->set('postsTypes', $postsTypes); $this->unload_model('PostsType'); //Déchargement du model //Récupération de tous les utilisateurs (Rédacteurs) $this->load_model('User'); //Chargement du model $writers = $this->User->findList(); $this->set('writers', $writers); $this->unload_model('User'); //Déchargement du model //Récupération des dates de publication $publicationDates = $this->Category->query("SELECT DISTINCT(STR_TO_DATE(CONCAT(YEAR(modified), '-', MONTH(modified)), '%Y-%m')) AS publication_date FROM posts", true); $this->set('publicationDates', $publicationDates);*/ $this->render('/elements/ajax/backoffice_ajax_ckeditor_get_internal_links'); }