From 2ad1036a7fbd43a189689edac247ed9244eb32d9 Mon Sep 17 00:00:00 2001 From: SylvainLelievre Date: Tue, 6 Apr 2021 17:19:39 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'core/class/hel?= =?UTF-8?q?per.class.php'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/class/helper.class.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/class/helper.class.php b/core/class/helper.class.php index dd743f11..67b5f815 100755 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -177,13 +177,10 @@ class helper { $delete = true; } // Constante DATADIRECTORY - if ( array_key_exists('DATADIRECTORY', $class_constants) - && $class_constants['DATADIRECTORY'] !== [] - && is_array($class_constants['DATADIRECTORY']) - ) { + if ( array_key_exists('DATADIRECTORY', $class_constants)) { $dataDirectory = $value::DATADIRECTORY; } else { - $dataDirectory = []; + $dataDirectory = ''; } // Affection $modules [$value] = [ From 6a9d19494287445b0715cc9d621e948f15c4e050 Mon Sep 17 00:00:00 2001 From: F Tempez Date: Tue, 6 Apr 2021 17:22:20 +0200 Subject: [PATCH 2/3] export nouveau datadirectory --- core/class/helper.class.php | 7 +- core/module/addon/addon.php | 212 +++++++++++++++++++----------------- 2 files changed, 116 insertions(+), 103 deletions(-) diff --git a/core/class/helper.class.php b/core/class/helper.class.php index dd743f11..67b5f815 100755 --- a/core/class/helper.class.php +++ b/core/class/helper.class.php @@ -177,13 +177,10 @@ class helper { $delete = true; } // Constante DATADIRECTORY - if ( array_key_exists('DATADIRECTORY', $class_constants) - && $class_constants['DATADIRECTORY'] !== [] - && is_array($class_constants['DATADIRECTORY']) - ) { + if ( array_key_exists('DATADIRECTORY', $class_constants)) { $dataDirectory = $value::DATADIRECTORY; } else { - $dataDirectory = []; + $dataDirectory = ''; } // Affection $modules [$value] = [ diff --git a/core/module/addon/addon.php b/core/module/addon/addon.php index 91a378fd..a2fd5d67 100644 --- a/core/module/addon/addon.php +++ b/core/module/addon/addon.php @@ -53,7 +53,7 @@ class addon extends common { $list = ''; foreach( $infoModules[$module]['dataDirectory'] as $moduleId){ if (strpos($moduleId,'module.json') === false && strpos($moduleId,'page.json') === false) { - $list === '' ? $list = self::DATA_DIR.$moduleId : $list .= ', '.self::DATA_DIR. $moduleId; + $list === '' ? $list = self::DATA_DIR . $moduleId : $list .= ', '.self::DATA_DIR. $moduleId; } } if( $this->removeDir('./module/'.$module ) === true){ @@ -110,16 +110,16 @@ class addon extends common { 'value' => template::ico('cancel') ]) : '', - is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) !== '' + implode(', ',array_keys($inPages,$key)) !== '' ? template::button('moduleExport' . $key, [ - 'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key,// appel de fonction vaut exécution, utiliser un paramètre + 'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre 'value' => template::ico('download') ]) : '', '', - is_array($infoModules[$key]['dataDirectory']) && implode(', ',array_keys($inPages,$key)) === '' + implode(', ',array_keys($inPages,$key)) === '' ? template::button('moduleExport' . $key, [ - 'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key.'/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre + 'href' => helper::baseUrl(). $this->getUrl(0) . '/import/' . $key . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre 'value' => template::ico('upload') ]) : '' @@ -251,107 +251,95 @@ class addon extends common { ]); } - /* - * Copie récursive de dossiers - * - */ - private function custom_copy($src, $dst) { - // open the source directory - $dir = opendir($src); - // Make the destination directory if not exist - if (!is_dir($dst)) { - mkdir($dst); - } - // Loop through the files in source directory - while( $file = readdir($dir) ) { - if (( $file != '.' ) && ( $file != '..' )) { - if ( is_dir($src . '/' . $file) ){ - // Recursively calling custom copy function - // for sub directory - $this -> custom_copy($src . '/' . $file, $dst . '/' . $file); - } - else { - copy($src . '/' . $file, $dst . '/' . $file); - } - } - } - closedir($dir); - } - - /* * Export des données d'un module externes ou interne à module.json */ public function export(){ - // Lire les données du module - $infoModules = helper::getModules(); - // Créer un dossier par défaut - $tmpFolder = self::TEMP_DIR . uniqid(); - //$tmpFolder = self::TEMP_DIR . 'test'; - if (!is_dir($tmpFolder)) { - mkdir($tmpFolder); + // Jeton incorrect + if ($this->getUrl(3) !== $_SESSION['csrf']) { + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . 'addon', + 'state' => false, + 'notification' => 'Action non autorisée' + ]); } - // Clés moduleIds dans les pages - $inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC'); - // Parcourir les pages utilisant le module - foreach (array_keys($inPages,$this->getUrl(2)) as $pageId) { - // Export des pages hébergeant le module - $pageContent[$pageId] = $this->getData(['page',$pageId]); - // Export de fr/module.json - $moduleId = 'fr/module.json'; - // Création de l'arborescence des langues - // Pas de nom dossier de langue - dossier par défaut - $t = explode ('/',$moduleId); - if ( is_array($t)) { - $lang = 'fr'; - } else { - $lang = $t[0]; + else { + // Lire les données du module + $infoModules = helper::getModules(); + // Créer un dossier par défaut + $tmpFolder = self::TEMP_DIR . uniqid(); + //$tmpFolder = self::TEMP_DIR . 'test'; + if (!is_dir($tmpFolder)) { + mkdir($tmpFolder); } - // Créer le dossier si inexistant - if (!is_dir($tmpFolder . '/' . $lang)) { - mkdir ($tmpFolder . '/' . $lang); - } - // Sauvegarde si données non vides - $tmpData [$pageId] = $this->getData(['module',$pageId ]); - if ($tmpData [$pageId] !== null) { - file_put_contents($tmpFolder . '/' . $moduleId, json_encode($tmpData)); - } - // Export des données localisées dans des dossiers - foreach ($infoModules[$this->getUrl(2)]['dataDirectory'] as $dirId) { - if ( file_exists(self::DATA_DIR . '/' . $dirId) - && !file_exists($tmpFolder . '/' . $dirId ) ) { - $this->custom_copy ( self::DATA_DIR . '/' . $dirId, $tmpFolder . '/' . $dirId ); + // Clés moduleIds dans les pages + $inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC'); + // Parcourir les pages utilisant le module + foreach (array_keys($inPages,$this->getUrl(2)) as $pageId) { + // Export des pages hébergeant le module + $pageContent[$pageId] = $this->getData(['page',$pageId]); + // Export de fr/module.json + $moduleId = 'fr/module.json'; + $moduleDir = str_replace('site/data/','',$infoModules[$this->getUrl(2)]['dataDirectory']); + // Création de l'arborescence des langues + // Pas de nom dossier de langue - dossier par défaut + $t = explode ('/',$moduleId); + if ( is_array($t)) { + $lang = 'fr'; + } else { + $lang = $t[0]; + } + // Créer le dossier temporaire si inexistant sinon le nettoie et le créer + if (!is_dir($tmpFolder . '/' . $lang)) { + mkdir ($tmpFolder . '/' . $lang, 0777, true); + } else { + $this->removeDir($tmpFolder . '/' . $lang); + mkdir ($tmpFolder . '/' . $lang, 0777, true); + } + // Créer le dossier temporaire des données du module + if ($infoModules[$this->getUrl(2)]['dataDirectory']) { + if (!is_dir($tmpFolder . '/' . $moduleDir)) { + mkdir ($tmpFolder . '/' . $moduleDir, 0777, true) ; } + } + // Sauvegarde si données non vides + $tmpData [$pageId] = $this->getData(['module',$pageId ]); + if ($tmpData [$pageId] !== null) { + file_put_contents($tmpFolder . '/' . $moduleId, json_encode($tmpData)); + } + // Export des données localisées dans le dossier de données du module + if ($infoModules[$this->getUrl(2)]['dataDirectory'] ) { + $this->custom_copy ($infoModules[$this->getUrl(2)]['dataDirectory'], $tmpFolder . '/' . $moduleDir); + } + } + // Enregistrement des pages dans le dossier de langue identique à module + if (!file_exists($tmpFolder . '/' . $lang . '/page.json')) { + file_put_contents($tmpFolder . '/' . $lang . '/page.json', json_encode($pageContent)); + } + // création du zip + $fileName = $this->getUrl(2) . '.zip'; + $this->makeZip ($fileName, $tmpFolder, []); + if (file_exists($fileName)) { + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="' . $fileName . '"'); + header('Content-Length: ' . filesize($fileName)); + readfile( $fileName); + // Valeurs en sortie + $this->addOutput([ + 'display' => self::DISPLAY_RAW + ]); + unlink($fileName); + $this->removeDir($tmpFolder); + exit(); + } else { + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . 'addon', + 'notification' => 'Quelque chose s\'est mal passé', + 'state' => false + ]); } - } - // Enregistrement des pages dans le dossier de langue identique à module - - if (!file_exists($tmpFolder . '/' . $lang . '/page.json')) { - file_put_contents($tmpFolder . '/' . $lang . '/page.json', json_encode($pageContent)); - } - - // création du zip - $fileName = $this->getUrl(2) . '.zip'; - $this->makeZip ($fileName, $tmpFolder, []); - if (file_exists($fileName)) { - header('Content-Type: application/octet-stream'); - header('Content-Disposition: attachment; filename="' . $fileName . '"'); - header('Content-Length: ' . filesize($fileName)); - readfile( $fileName); - // Valeurs en sortie - $this->addOutput([ - 'display' => self::DISPLAY_RAW - ]); - unlink($fileName); - $this->removeDir($tmpFolder); - exit(); - } else { - // Valeurs en sortie - $this->addOutput([ - 'redirect' => helper::baseUrl() . 'addon', - 'notification' => 'Quelque chose s\'est mal passé', - 'state' => false - ]); } } @@ -441,4 +429,32 @@ class addon extends common { ]); } } + + /* + * Copie récursive de dossiers + * + */ + private function custom_copy($src, $dst) { + // open the source directory + $dir = opendir($src); + // Make the destination directory if not exist + if (!is_dir($dst)) { + mkdir($dst); + } + // Loop through the files in source directory + while( $file = readdir($dir) ) { + if (( $file != '.' ) && ( $file != '..' )) { + if ( is_dir($src . '/' . $file) ){ + // Recursively calling custom copy function + // for sub directory + $this -> custom_copy($src . '/' . $file, $dst . '/' . $file); + } + else { + copy($src . '/' . $file, $dst . '/' . $file); + } + } + } + closedir($dir); + } + } From 9de4b08d20b14b2c80c935d606e688cb66caf1b8 Mon Sep 17 00:00:00 2001 From: F Tempez Date: Tue, 6 Apr 2021 17:35:46 +0200 Subject: [PATCH 3/3] =?UTF-8?q?addon=20effacement=20des=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/module/addon/addon.php | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/core/module/addon/addon.php b/core/module/addon/addon.php index a2fd5d67..62efd452 100644 --- a/core/module/addon/addon.php +++ b/core/module/addon/addon.php @@ -50,19 +50,13 @@ class addon extends common { $infoModules = helper::getModules(); $module = $this->getUrl(2); //Liste des dossiers associés au module non effacés - $list = ''; - foreach( $infoModules[$module]['dataDirectory'] as $moduleId){ - if (strpos($moduleId,'module.json') === false && strpos($moduleId,'page.json') === false) { - $list === '' ? $list = self::DATA_DIR . $moduleId : $list .= ', '.self::DATA_DIR. $moduleId; - } - } - if( $this->removeDir('./module/'.$module ) === true){ + if( $this->removeDir('./module/'.$module ) === true ){ $success = true; - if( $list === ''){ - $notification = 'Module '.$module .' désinstallé'; - } - else{ - $notification = 'Module '.$module .' désinstallé, il reste des données dans '.$list; + $notification = 'Module '. $module .' désinstallé'; + if(($infoModules[$this->getUrl(2)]['dataDirectory']) ) { + if (!$this->removeDir($infoModules[$this->getUrl(2)]['dataDirectory'])){ + $notification = 'Module '.$module .' désinstallé, il reste des données dans ' . $infoModules[$this->getUrl(2)]['dataDirectory']; + } } } else{