/** * * Cette fonction permet de créer un fichier de cache * Par défaut elle teste si le dossier de destination existe et le créé le cas échéant * * @param varchar $cacheFolder Dossier de stockage du fichier * @param varchar $cacheFile Nom du fichier * @param array $datas Données à sauvegarder * @return boolean si le processus s'est correctement déroulé retourne vrai * @access static * @author koéZionCMS * @version 0.1 - 19/12/2012 by FI */ static function create_cache_file($cacheFolder, $cacheFile, $datas) { FileAndDir::createPath($cacheFolder); $result = FileAndDir::put($cacheFolder . $cacheFile . Cache::$extention, serialize($datas)); FileAndDir::chProperties($cacheFolder . $cacheFile . Cache::$extention, 0777); return $result; /*$pointeur = fopen($file, 'w'); fwrite($pointeur, serialize($datas)); fclose($pointeur);*/ }
/** * 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 désinstaller un plugin * * Pour ce faire, elle va chercher directement dans la classe du fichier plugin.php les variables qui contiennent les informations nécessaires : * $plugin->filesCopy La variable qui contient à la base la liste des fichiers à copier * $plugin->sourceFolder Détermine le dossier source des fichiers à copier. Le plus souvent, c'est " dirname(__FILE__).DS.'install' ", mais cela peut changer * * @param integer $id Identifiant du plugin à désinstaller * @access public * @author koéZionCMS * @version 0.1 - 30/03/2013 by AA * @version 0.2 - 29/10/2013 by FI - Reprise de la fonction pour la terminer... */ public function backoffice_uninstall($id) { $errors = array(); $plugin = $this->Plugin->findFirst(array('conditions' => array('id' => $id))); //On récupère le nom du plugin //On ne réalise la désinstallation que si le plugin est installé if ($plugin['installed']) { $pluginName = Inflector::camelize($plugin['code']) . 'Plugin'; //Génération du nom du plugin $pluginFile = PLUGINS . DS . $plugin['code'] . DS . 'plugin.php'; //Chemin vers le fichier d'installation du plugin if (FileAndDir::fexists($pluginFile)) { //Si le fichier plugin.php existe require_once $pluginFile; //Chargement du fichier $pluginClass = new $pluginName(); //Création d'un objet plugin ////////////////////////////////// // ACTIONS BDD // ////////////////////////////////// $sql[] = 'DELETE FROM `modules` WHERE `plugin_id` = ' . $id . ';'; //Requête de suppression des modules $sql[] = 'DELETE FROM `modules_types` WHERE `plugin_id` = ' . $id . ';'; //Requête de suppression du type de module $sql[] = 'DELETE FROM `plugins` WHERE `id` = ' . $id . ';'; //Requête de suppression du plugin //ON VA RECUPERER, SI IL Y EN A, LA LISTE DES TABLES ASSOCIEES AU PLUGIN EN COURS DE SUPPRESSION $databaseTables = $this->Plugin->table_list_in_database(); //Liste des tables de la BDD $databasePluginTables = array(); //Liste des tables du plugin $databasePluginTablesPrefix = 'plugins_' . $plugin['code']; //Préfix des tables du plugin //On va parcourir la liste des tables de la base de données pour en extraire les tables associées au plugin //Elles seront ensuite renommées en vue d'une suppression manuelle par le gestionnaire de la BDD foreach ($databaseTables as $databaseTable) { if (substr_count($databaseTable, $databasePluginTablesPrefix)) { $sql[] = "RENAME TABLE `" . $databaseTable . "` TO `_" . $databaseTable . "_" . date("Ymd_His") . "`;"; } } //Si on a des requêtes supplémentaires à exécuter //Prévu pour supprimer les types de modules par exemple if ($pluginClass->fileSqlDelete) { $sql[] = $pluginClass->fileSqlDelete; } //On va récupérer l'identifiant du type de module à supprimer //$modulesTypeIdResult = current($this->Plugin->query("SELECT DISTINCT(`modules_type_id`) FROM `modules` WHERE `plugin_id` = ".$id.";", true)); //$modulesTypeId = $modulesTypeIdResult['modules_type_id']; //if($modulesTypeId != 6) { $this->Plugin->query('DELETE FROM `modules_types` WHERE `id` = '.$modulesTypeId.';'); } //On supprime le type de module associé à ce plugin $sql = implode("\n", $sql); $this->Plugin->query($sql); ////////////////////////////////// // ACTIONS FICHIERS // ////////////////////////////////// //Si des fichiers doivent être supprimés, on les récupère dans le plugin //A REPRENDRE VOIR EVENTUELLEMENT SI ON SUPPRIME PAS LA CLASSE FileAndDir??? if (isset($pluginClass->filesCopy)) { //Création du dossier de backup des fichiers de configuration du plugin if ($pluginClass->path) { $deletePath = $pluginClass->path . DS . 'delete' . DS . date("Ymd_His"); FileAndDir::createPath($deletePath); } foreach ($pluginClass->filesCopy as $fileDelete) { if (isset($fileDelete['sourceName'])) { //On récupère le nom du fichier de destination (par défaut ce sera le même que la source) $destinationName = isset($fileDelete['destinationName']) ? $fileDelete['destinationName'] : $fileDelete['sourceName']; $fileToDelete = $fileDelete['destinationPath'] . DS . $destinationName; //Chemin du fichier de destination if (isset($deletePath)) { FileAndDir::fcopy($fileToDelete, $deletePath . DS . $destinationName); } //Sauvegarde du fichier $processResult = FileAndDir::remove($fileToDelete); //Suppression du fichier if (!$processResult) { $errors[] = $fileToDelete; } } else { //Backup des fichiers, on va copier le dossier parent $pathInfos = pathinfo($fileDelete['destinationPath']); FileAndDir::createPath($deletePath . DS . $pathInfos['filename']); FileAndDir::recursive_copy($fileDelete['destinationPath'], $deletePath . DS . $pathInfos['filename']); FileAndDir::recursive_delete($fileDelete['destinationPath']); } //Si l'index removePath est défini à true, alors on supprime le dossier en plus du fichier if (isset($fileDelete['removePath']) && $fileDelete['removePath'] == true) { FileAndDir::remove_directory($fileDelete['destinationPath']); } } if (!empty($errors)) { Session::setFlash('Une erreur est survenue lors de la suppression de certains fichiers :<br />' . implode('<br />* ', $errors), 'error'); $this->redirect('backoffice/plugins/index'); //On retourne sur la page de listing } } } else { Session::setFlash("Le fichier plugin.php n'existe pas", 'error'); $this->redirect('backoffice/plugins/index'); //On retourne sur la page de listing } } else { Session::setFlash('Le plugin doit être installé pour pouvoir être désinstallé', 'error'); $this->redirect('backoffice/plugins/index'); //On retourne sur la page de listing } FileAndDir::delete_directory_file(TMP . DS . 'cache' . DS . 'models' . DS); //Suppression du fichier de cache de la bdd FileAndDir::remove(TMP . DS . 'cache' . DS . 'variables' . DS . 'Plugins' . DS . 'plugins.cache'); //Suppression du fichier de cache des plugins Session::setFlash('Le plugin a été correctement désinstallé'); $this->redirect('backoffice/plugins/index'); //On retourne sur la page de listing }
$result = false; ?> <div class="system error">Le dossier <b><?php echo $txtFolder; ?> </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; ?>
/** * 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; }