/** * 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 }
/** * 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); }
/** * * Cette fonction permet de supprimer un fichier 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_file_content($cacheFolder, $cacheFile) { return FileAndDir::remove($cacheFolder . $cacheFile . Cache::$extention); }
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); } } } } }