/** * 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; }
/** * http://prendreuncafe.com/blog/post/2005/07/19/218-lister-recursivement-le-contenu-d-un-repertoire-en-php * @param unknown_type $path * @param unknown_type $full_list */ static function recursive_dir_content($path = '.', $full_list = false, $datasFormat = null) { $out = array(); $i = 0; $path = substr($path, strlen($path) - 1, strlen($path)) !== DS ? $path . DS : $path; if (!is_dir($path) || !($handle = @dir($path))) { trigger_error(DS . $path . DS . " doesn't exists or is not a valid directory", E_USER_ERROR); } else { while ($entry = $handle->read()) { if ($full_list == true || $entry !== "." && $entry !== "..") { $path_to_entry = $path . $entry; if ($entry !== '.' && $entry !== '..' && @is_dir($path_to_entry)) { $out[$entry] = FileAndDir::recursive_dir_content($path_to_entry, $full_list, $datasFormat); } else { $rootPath = $path_to_entry; $pathToWww = str_replace(ROOT, BASE_URL, $rootPath); $wwwPath = str_replace(DS, '/', $pathToWww); if (!isset($datasFormat)) { $out[$entry]['root'] = $rootPath; $out[$entry]['www'] = $wwwPath; } else { if ($datasFormat == 'root') { $out[$entry] = $rootPath; } else { if ($datasFormat == 'www') { $out[$entry] = $wwwPath; } } } } } } } return $out; }
/** * Cette fonction va insérer dans le fichier de log les différentes erreurs rencontrées * * @param varchar $message Message à insérer dans les logs * @access public * @author koéZionCMS * @version 0.1 - 23/12/2011 */ public function error($message) { require_once LIBS . DS . 'config_magik.php'; $cfg = new ConfigMagik(CONFIGS . DS . 'files' . DS . 'core.ini', true, false); $coreConfs = $cfg->keys_values(); if ($coreConfs['log_php']) { //Rajout le 02/04/2013 $date = date('Y-m-d'); $traceSql = date('Y-m-d H:i:s') . "|#|" . $message . "|#|" . $this->request->url . "\n"; FileAndDir::put(TMP . DS . 'logs' . DS . 'php' . DS . 'e404_' . $date . '.log', $traceSql, FILE_APPEND); } $url = Router::url('e404'); $url .= "?e404=" . $this->request->url; Session::write('redirectMessage', $message); header("Location: " . $url); die; }
/** * 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); } } } } } }
?> </b> doit être supprimé.</div><?php } break; } } if ($result) { /////////////////////////////////////////////////// // CREATION DES DOSSIERS DANS WEBROOT/UPLOAD // $foldersToCreate = array(WEBROOT_UPLOAD . DS . '_thumbs', WEBROOT_UPLOAD . DS . '_thumbs' . DS . 'Files', WEBROOT_UPLOAD . DS . '_thumbs' . DS . 'Flash', WEBROOT_UPLOAD . DS . '_thumbs' . DS . 'Images', WEBROOT_UPLOAD . DS . 'files', WEBROOT_UPLOAD . DS . 'flash', WEBROOT_UPLOAD . DS . 'images'); foreach ($foldersToCreate as $folder) { FileAndDir::createPath($folder); } FileAndDir::fcopy(INSTALL_FILES . DS . 'core.ini', CONFIGS_FILES . DS . 'core.ini'); FileAndDir::fcopy(INSTALL_FILES . DS . 'posts.ini', CONFIGS_FILES . DS . 'posts.ini'); FileAndDir::fcopy(INSTALL_FILES . DS . 'routes.ini', CONFIGS_FILES . DS . 'routes.ini'); $httpHost = $_SERVER["HTTP_HOST"]; if ($httpHost == 'localhost' || $httpHost == '127.0.0.1') { $section = 'localhost'; } else { $section = 'online'; } ?> <form action="index.php?step=database_params" method="post"> <input type="hidden" name="section" value="<?php echo $section; ?> " /> <div class="row" style="text-align: right; padding-right: 0; padding-bottom: 0;"><button class="medium grey" type="submit"><span>Configurer la base de données</span></button></div> </form> <?php
$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; }
<?php } ?> </table> <?php } ?> </div> </div> </div> <div class="half"> <?php if (!in_array($_SERVER["HTTP_HOST"], array('localhost', '127.0.0.1')) && FileAndDir::dexists(ROOT . DS . 'install')) { ?> <div class="box"> <div class="title"> <h2><?php echo _("ATTENTION"); ?> </h2> </div> <div class="content"> <div class="system warning"> <?php echo _("Le dossier /install est toujours présent sur le serveur"); ?> .<br /> <?php
/** * Cette fonction permet l'édition d'un élément * * @param integer $id Identifiant de l'élément à modifier * @access public * @author koéZionCMS * @version 0.1 - 17/01/2012 by FI * @version 0.2 - 21/06/2013 by FI - Rajout de la récupération des boutons colonnes de doite --> C'est le jour le plus long de l'année * @version 0.3 - 03/11/2013 by FI - Modification de la fonction de transformation des dates * @version 0.4 - 03/10/2014 by FI - Correction erreur surcharge de la fonction, rajout de tous les paramètres */ public function backoffice_edit($id = null, $redirect = true) { $this->_transform_date('fr2Sql', 'publication_date'); //Transformation de la date FR en date SQL $parentEdit = parent::backoffice_edit($id, false); //On fait appel à la fonction d'édition parente if ($this->request->data) { if ($parentEdit) { $this->_save_assoc_datas_posts_posts_type($this->Post->id, true); $this->_save_assoc_datas_posts_right_button($this->Post->id, true); $this->_check_send_mail($this->request->data); FileAndDir::remove(TMP . DS . 'cache' . DS . 'variables' . DS . 'Posts' . DS . 'home_page_website_' . CURRENT_WEBSITE_ID . '.cache'); //On supprime le dossier cache FileAndDir::remove(TMP . DS . 'cache' . DS . 'variables' . DS . 'Posts' . DS . 'website_' . CURRENT_WEBSITE_ID . '.cache'); //On supprime le dossier cache $this->redirect('backoffice/posts/index'); //On retourne sur la page de listing } } $this->_transform_date('sql2Fr', 'publication_date'); //Transformation de la date SQL en date FR $this->_init_categories(); $this->_init_posts_types(); $this->_init_right_buttons(); $this->_get_assoc_datas($id); }
// 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 permet d'éffectuer la copie de l'ensemble des fichiers de configurations d'un plugin * * @param array $filesCopy Liste des fichiers à copier * @return boolean Vrai si la copie s'est correctement déroulée, faux sinon * @access protected * @author koéZionCMS * @version 0.1 - 09/05/2014 by FI * @version 0.2 - 04/11/2014 by FI - Mise en place de la récursivité dans la librairie FileAndDir pour la création des dossiers */ protected function _files_copy($filesCopy) { $processResult = true; //Parcours des fichiers à copier foreach ($filesCopy as $fileCopy) { //Dans le cas ou on un seul fichier à copier if (isset($fileCopy['sourceName'])) { FileAndDir::createPath($fileCopy['destinationPath']); //Création du dossier de destination $sourceFile = $fileCopy['sourcePath'] . DS . $fileCopy['sourceName']; //Chemin du fichier source //On récupère le nom du fichier de destination (par défaut ce sera le même que la source) $destinationName = isset($fileCopy['destinationName']) ? $fileCopy['destinationName'] : $fileCopy['sourceName']; $destinationFile = $fileCopy['destinationPath'] . DS . $destinationName; //Chemin du fichier de destination $processResult = FileAndDir::fcopy($sourceFile, $destinationFile); //Copie du fichier //Dans le cas ou on a le contenu d'un dossier à copier on procède à une copie récursive } else { FileAndDir::recursive_copy($fileCopy['sourcePath'], $fileCopy['destinationPath']); } } return $processResult; }
/** * * @param unknown_type $function * @param unknown_type $query * @param unknown_type $datasToSave */ protected function _trace_sql($function, $query, $datasToSave = null) { require_once LIBS . DS . 'config_magik.php'; $cfg = new ConfigMagik(CONFIGS . DS . 'files' . DS . 'core.ini', true, false); $coreConfs = $cfg->keys_values(); if ($coreConfs['log_sql']) { $date = date('Y-m-d'); $debug = debug_backtrace(); $traceSql = "================================================================================" . "\n" . "[DATE] : \t\t\t" . date('Y-m-d H:i:s') . "\n" . "[CLASS] : \t\t\t" . get_class($this) . "\n" . "[REFERER] : \t\t" . $this->refererUrl . "\n" . "[DEBUG BACKTRACE] : " . "\n"; foreach ($debug as $k => $v) { if (isset($v['file']) && !empty($v['file']) && isset($v['line']) && !empty($v['line'])) { $traceSql .= "\t\t\t\t\t" . '[FILE] : ' . $v['file'] . ' --> [LINE] : ' . $v['line'] . "\n"; } } $traceSql .= "[FUNCTION] : \t\t" . $function . "\n" . "[QUERY] : " . "\n" . $query . "\n"; if (isset($datasToSave)) { $traceSql .= "[DATAS] : \n" . var_export($datasToSave, true) . "\n"; } FileAndDir::put(TMP . DS . 'logs' . DS . 'models' . DS . $date . '.log', $traceSql, FILE_APPEND); } }
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 de supprimer un dossier de cache * * @param varchar $cacheFolder Dossier de stockage du fichier * @param varchar $cacheFile Nom du fichier * @return boolean vrai si la suppression s'est correctement déroulée * @access static * @author koéZionCMS * @version 0.1 - 19/12/2012 by FI */ static function delete_cache_directory($cacheFolder) { return FileAndDir::remove_directory($cacheFolder); }
$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) {
protected function _delete_cache() { if (isset($this->cachingFiles)) { foreach ($this->cachingFiles as $file) { if (FileAndDir::dexists($file)) { Cache::delete_cache_directory($file); } else { if (FileAndDir::fexists($file)) { FileAndDir::remove($file); } } } } }