diff --git a/core/module/addon/view/import/import.php b/core/module/addon/view/import/import.php
deleted file mode 100644
index 8ccc44ce..00000000
--- a/core/module/addon/view/import/import.php
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- 'buttonGrey',
- 'href' => helper::baseUrl() . 'addon',
- 'value' => template::ico('left')
- ]); ?>
-
-
- 'Appliquer'
- ]); ?>
-
-
-
-
-
-
Installer des données de module
-
-
- 'Archive ZIP :',
- 'type' => 2
- ]); ?>
-
-
-
-
-
\ No newline at end of file
diff --git a/core/module/addon/addon.php b/core/module/plugin/plugin.php
similarity index 73%
rename from core/module/addon/addon.php
rename to core/module/plugin/plugin.php
index 3379395f..ebf47770 100644
--- a/core/module/addon/addon.php
+++ b/core/module/plugin/plugin.php
@@ -16,21 +16,21 @@
* @link http://zwiicms.fr/
*/
-class addon extends common {
+class plugin extends common {
public static $actions = [
'index' => self::GROUP_ADMIN,
'delete' => self::GROUP_ADMIN,
- 'export' => self::GROUP_ADMIN,
- 'import' => self::GROUP_ADMIN,
+ 'dataExport' => self::GROUP_ADMIN,
+ 'dataImport' => self::GROUP_ADMIN, // les données d'un module
'store' => self::GROUP_ADMIN,
- 'item' => self::GROUP_ADMIN,
- 'upload' => self::GROUP_ADMIN,
- 'uploadItem'=> self::GROUP_ADMIN
+ 'item' => self::GROUP_ADMIN, // détail d'un objet
+ 'upload' => self::GROUP_ADMIN, // Téléverser catalogue
+ 'uploadItem'=> self::GROUP_ADMIN // Téléverser par archive
];
// URL des modules
- const BASEURL_STORE = 'https://www.zwiicms.fr/';
+ const BASEURL_STORE = 'https://store.zwiicms.fr/';
const MODULE_STORE = '?modules/';
// Gestion des modules
@@ -43,6 +43,9 @@ class addon extends common {
public static $storeList = [];
public static $storeItem = [];
+ // Liste de pages
+ public static $pagesList = [];
+
/*
* Effacement d'un module installé et non utilisé
@@ -53,7 +56,7 @@ class addon extends common {
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon',
+ 'redirect' => helper::baseUrl() . 'plugin',
'state' => false,
'notification' => 'Action non autorisée'
]);
@@ -81,7 +84,7 @@ class addon extends common {
}
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon',
+ 'redirect' => helper::baseUrl() . 'plugin',
'notification' => $notification,
'state' => $success
]);
@@ -271,7 +274,7 @@ class addon extends common {
*}
*/
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon/store',
+ 'redirect' => helper::baseUrl() . 'plugin/store',
'notification' => $moduleFile . ' téléchargé dans le dossier modules du gestionnaire de fichiers',
'state' => true
]);
@@ -390,16 +393,16 @@ class addon extends common {
: '',
implode(', ',array_keys($inPages,$key)) !== ''
? template::button('moduleExport' . $key, [
- 'href' => helper::baseUrl(). $this->getUrl(0) . '/export/' . $key . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
+ 'href' => helper::baseUrl(). $this->getUrl(0) . '/dataExport/' . $key . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre
'value' => template::ico('download'),
- 'help' => 'Exporter les données du module avec sa page'
+ 'help' => 'Exporter les données du module'
])
: '',
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
'value' => template::ico('upload'),
- 'help' => 'Importer les données du module avec sa page'
+ 'help' => 'Importer les données du module'
])
: ''
];
@@ -415,95 +418,114 @@ class addon extends common {
/*
* Export des données d'un module externes ou interne à module.json
*/
- public function export(){
+ public function dataExport(){
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon',
+ 'redirect' => helper::baseUrl() . 'plugin',
'state' => false,
'notification' => 'Action non autorisée'
]);
}
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, 0755);
- }
- // 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
- $pageParam[$pageId] = $this->getData(['page',$pageId]);
- // Export du contenu de la page
- //$pageContent[$pageId] = file_get_contents(self::DATA_DIR . self::$i18n . '/content/' . $this->getData(['page', $pageId, 'content']));
- $pageContent[$pageId] = $this->getPage($pageId, self::$i18n);
- // 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];
+ // Soumission du formulaire
+ if($this->isPost()) {
+ // 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, 0755);
}
- // Créer le dossier temporaire si inexistant sinon le nettoie et le créer
- if (!is_dir($tmpFolder . '/' . $lang)) {
- mkdir ($tmpFolder . '/' . $lang, 0755, true);
- } else {
- $this->removeDir($tmpFolder . '/' . $lang);
- mkdir ($tmpFolder . '/' . $lang, 0755, 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, 0755, true) ;
+ $page = $this->getInput('pluginExportSelectPage');
+
+ // 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
+ $pageParam[$pageId] = $this->getData(['page',$pageId]);
+ // Export du contenu de la page
+ //$pageContent[$pageId] = file_get_contents(self::DATA_DIR . self::$i18n . '/content/' . $this->getData(['page', $pageId, 'content']));
+ $pageContent[$pageId] = $this->getPage($pageId, self::$i18n);
+ // 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, 0755, true);
+ } else {
+ $this->removeDir($tmpFolder . '/' . $lang);
+ mkdir ($tmpFolder . '/' . $lang, 0755, 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, 0755, 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'] &&
+ is_dir($infoModules[$this->getUrl(2)]['dataDirectory'])) {
+ $this->copyDir ($infoModules[$this->getUrl(2)]['dataDirectory'], $tmpFolder . '/' . $moduleDir);
}
}
- // Sauvegarde si données non vides
- $tmpData [$pageId] = $this->getData(['module',$pageId ]);
- if ($tmpData [$pageId] !== null) {
- file_put_contents($tmpFolder . '/' . $moduleId, json_encode($tmpData));
+ // 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($pageParam));
+ mkdir ($tmpFolder . '/' . $lang . '/content', 0755);
+ file_put_contents($tmpFolder . '/' . $lang . '/content/' . $this->getData(['page', $pageId, 'content']), $pageContent);
}
- // Export des données localisées dans le dossier de données du module
- if ($infoModules[$this->getUrl(2)]['dataDirectory'] &&
- is_dir($infoModules[$this->getUrl(2)]['dataDirectory'])) {
- $this->copyDir ($infoModules[$this->getUrl(2)]['dataDirectory'], $tmpFolder . '/' . $moduleDir);
+ // création du zip
+ $fileName = $this->getUrl(2) . '.zip';
+ $this->makeZip ($fileName, $tmpFolder, []);
+ if (file_exists($fileName)) {
+ ob_start();
+ header('Content-Type: application/octet-stream');
+ header('Content-Disposition: attachment; filename="' . $fileName . '"');
+ header('Content-Length: ' . filesize($fileName));
+ ob_clean();
+ ob_end_flush();
+ readfile( $fileName);
+ unlink($fileName);
+ $this->removeDir($tmpFolder);
+ exit();
+ } else {
+ // Valeurs en sortie
+ $this->addOutput([
+ 'redirect' => helper::baseUrl() . 'plugin',
+ '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($pageParam));
- mkdir ($tmpFolder . '/' . $lang . '/content', 0755);
- file_put_contents($tmpFolder . '/' . $lang . '/content/' . $this->getData(['page', $pageId, 'content']), $pageContent);
- }
- // création du zip
- $fileName = $this->getUrl(2) . '.zip';
- $this->makeZip ($fileName, $tmpFolder, []);
- if (file_exists($fileName)) {
- ob_start();
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: attachment; filename="' . $fileName . '"');
- header('Content-Length: ' . filesize($fileName));
- ob_clean();
- ob_end_flush();
- readfile( $fileName);
- unlink($fileName);
- $this->removeDir($tmpFolder);
- exit();
} else {
+
+ // Liste des pages contenant le module
+ $inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
+ foreach( $inPages as $key=>$value){
+ if ($value === $this->getUrl(2)) {
+ self::$pagesList[] = $key;
+ }
+ }
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon',
- 'notification' => 'Quelque chose s\'est mal passé',
- 'state' => false
+ 'title' => 'Export des données de module',
+ 'view' => 'dataExport'
]);
}
}
@@ -512,12 +534,12 @@ class addon extends common {
/*
* Importer des données d'un module externes ou interne à module.json
*/
- public function import(){
+ public function dataImport(){
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon',
+ 'redirect' => helper::baseUrl() . 'plugin',
'state' => false,
'notification' => 'Action non autorisée'
]);
@@ -526,18 +548,32 @@ class addon extends common {
// Soumission du formulaire
if($this->isPost()) {
// Récupérer le fichier et le décompacter
- $zipFilename = $this->getInput('addonImportFile', helper::FILTER_STRING_SHORT, true);
+ $zipFilename = $this->getInput('pluginImportFile', helper::FILTER_STRING_SHORT, true);
+ $targetPage = $this->getInput('pluginImportPage', helper::FILTER_STRING_SHORT, true);
$tempFolder = uniqid();
mkdir (self::TEMP_DIR . $tempFolder, 0755);
$zip = new ZipArchive();
if ($zip->open(self::FILE_DIR . 'source/' . $zipFilename) === TRUE) {
$zip->extractTo(self::TEMP_DIR . $tempFolder );
}
+
+ // copie du contenu de la page
+ $this->copyDir (self::TEMP_DIR . $tempFolder . '/' .$key . '/content', self::DATA_DIR . '/' .$key . '/content');
+ // Supprimer les fichiers importés
+ unlink (self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json');
+ // Import des fichiers placés ailleurs que dans les dossiers localisés.
+ $this->copyDir (self::TEMP_DIR . $tempFolder, self::DATA_DIR );
+
+
// Import des données localisées page.json et module.json
// Pour chaque dossier localisé
- $dataTarget = array();
- $dataSource = array();
+ // $dataTarget = array();
+ // $dataSource = array();
+
+
+
// Liste des pages de même nom dans l'archive et le site
+ /*
$list = '';
foreach (self::$i18nList as $key=>$value) {
// Les Pages et les modules
@@ -561,20 +597,16 @@ class addon extends common {
if( $list === ''){
file_put_contents(self::DATA_DIR . '/' .$key . '/' . $fileTarget . '.json', json_encode( $data ,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|LOCK_EX) );
}
- // copie du contenu de la page
- $this->copyDir (self::TEMP_DIR . $tempFolder . '/' .$key . '/content', self::DATA_DIR . '/' .$key . '/content');
- // Supprimer les fichiers importés
- unlink (self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json');
}
}
}
+ */
- // Import des fichiers placés ailleurs que dans les dossiers localisés.
- $this->copyDir (self::TEMP_DIR . $tempFolder,self::DATA_DIR );
// Supprimer le dossier temporaire
$this->removeDir(self::TEMP_DIR . $tempFolder);
$zip->close();
+ /*
if( $list !== '' ){
$success = false;
strpos( $list, ',') === false ? $notification = 'Import impossible la page suivante doit être renommée :'.$list : $notification = 'Import impossible les pages suivantes doivent être renommées :'.$list;
@@ -582,18 +614,29 @@ class addon extends common {
else{
$success = true;
$notification = 'Import réussi';
- }
+ }*/
// Valeurs en sortie
$this->addOutput([
- 'redirect' => helper::baseUrl() . 'addon',
+ 'redirect' => helper::baseUrl() . 'plugin',
'state' => $success,
'notification' => $notification
]);
}
+
+ // Liste des pages ne contenant pas de module
+ self::$pagesList = $this->getData(['page']);
+ foreach(self::$pagesList as $page => $pageId) {
+ if ($this->getData(['page',$page,'block']) === 'bar' ||
+ $this->getData(['page',$page,'disable']) === true ||
+ $this->getData(['page',$page,'moduleId']) !== '') {
+ unset(self::$pagesList[$page]);
+ }
+ }
+
// Valeurs en sortie
$this->addOutput([
'title' => 'Importer des données de module',
- 'view' => 'import'
+ 'view' => 'dataImport'
]);
}
}
diff --git a/core/module/addon/view/import/import.css b/core/module/plugin/view/dataExport/dataExport.css
similarity index 100%
rename from core/module/addon/view/import/import.css
rename to core/module/plugin/view/dataExport/dataExport.css
diff --git a/core/module/plugin/view/dataExport/dataExport.php b/core/module/plugin/view/dataExport/dataExport.php
new file mode 100644
index 00000000..e9d1ee50
--- /dev/null
+++ b/core/module/plugin/view/dataExport/dataExport.php
@@ -0,0 +1,30 @@
+
+
+
+ 'buttonGrey',
+ 'href' => helper::baseUrl() . 'plugin',
+ 'value' => template::ico('left')
+ ]); ?>
+
+
+ 'Appliquer'
+ ]); ?>
+
+
+
+
+
+
Installer des données de module
+
+
+ 'Export depuis la page ' . template::flag('site', '20px'),
+ 'help' => 'Pour exporter les données de module d\'une autre langue traduite, sélectionnez-la puis revenez sur cet écran'
+ ]); ?>
+
+
+
+
+
\ No newline at end of file
diff --git a/core/module/addon/view/index/index.css b/core/module/plugin/view/dataImport/dataImport.css
similarity index 100%
rename from core/module/addon/view/index/index.css
rename to core/module/plugin/view/dataImport/dataImport.css
diff --git a/core/module/plugin/view/dataImport/dataImport.php b/core/module/plugin/view/dataImport/dataImport.php
new file mode 100644
index 00000000..ea365be6
--- /dev/null
+++ b/core/module/plugin/view/dataImport/dataImport.php
@@ -0,0 +1,35 @@
+
+
+
+ 'buttonGrey',
+ 'href' => helper::baseUrl() . 'plugin',
+ 'value' => template::ico('left')
+ ]); ?>
+
+
+ 'Appliquer'
+ ]); ?>
+
+
+
+
+
+
Installer des données de module
+
+
+ 'Archive ZIP :',
+ 'type' => 2
+ ]); ?>
+
+
+ 'Importer le module dans la page ' . template::flag('site', '20px')
+ ]); ?>
+
+
+
+
+
\ No newline at end of file
diff --git a/core/module/addon/view/store/store.css b/core/module/plugin/view/index/index.css
similarity index 100%
rename from core/module/addon/view/store/store.css
rename to core/module/plugin/view/index/index.css
diff --git a/core/module/addon/view/index/index.help.html b/core/module/plugin/view/index/index.help.html
similarity index 100%
rename from core/module/addon/view/index/index.help.html
rename to core/module/plugin/view/index/index.help.html
diff --git a/core/module/addon/view/index/index.js.php b/core/module/plugin/view/index/index.js.php
similarity index 100%
rename from core/module/addon/view/index/index.js.php
rename to core/module/plugin/view/index/index.js.php
diff --git a/core/module/addon/view/index/index.php b/core/module/plugin/view/index/index.php
similarity index 88%
rename from core/module/addon/view/index/index.php
rename to core/module/plugin/view/index/index.php
index f5ee7fc6..e95c77ce 100644
--- a/core/module/addon/view/index/index.php
+++ b/core/module/plugin/view/index/index.php
@@ -17,21 +17,21 @@
helper::baseUrl() . 'addon/store',
+ 'href' => helper::baseUrl() . 'plugin/store',
'value' => template::ico('shopping-basket'),
"help" => 'Lister le catalogue en ligne'
]); ?>
helper::baseUrl() . 'addon/upload',
+ 'href' => helper::baseUrl() . 'plugin/upload',
'value' => template::ico('plus'),
"help" => 'Ajouter à partir d\'une archive ZIP'
]); ?>
-
+
diff --git a/core/module/addon/view/item/item.css b/core/module/plugin/view/item/item.css
similarity index 100%
rename from core/module/addon/view/item/item.css
rename to core/module/plugin/view/item/item.css
diff --git a/core/module/addon/view/item/item.php b/core/module/plugin/view/item/item.php
similarity index 100%
rename from core/module/addon/view/item/item.php
rename to core/module/plugin/view/item/item.php
diff --git a/core/module/addon/view/upload/upload.css b/core/module/plugin/view/store/store.css
similarity index 100%
rename from core/module/addon/view/upload/upload.css
rename to core/module/plugin/view/store/store.css
diff --git a/core/module/addon/view/store/store.php b/core/module/plugin/view/store/store.php
similarity index 87%
rename from core/module/addon/view/store/store.php
rename to core/module/plugin/view/store/store.php
index 8646d8cf..154bc4c7 100644
--- a/core/module/addon/view/store/store.php
+++ b/core/module/plugin/view/store/store.php
@@ -2,7 +2,7 @@
'buttonGrey',
- 'href' => helper::baseUrl() . 'addon',
+ 'href' => helper::baseUrl() . 'plugin',
'value' => template::ico('left')
]); ?>
diff --git a/core/module/plugin/view/upload/upload.css b/core/module/plugin/view/upload/upload.css
new file mode 100644
index 00000000..52709ea6
--- /dev/null
+++ b/core/module/plugin/view/upload/upload.css
@@ -0,0 +1,18 @@
+/**
+ * This file is part of Zwii.
+ *
+ * For full copyright and license information, please see the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @author Rémi Jean
+ * @copyright Copyright (C) 2008-2018, Rémi Jean
+ * @author Frédéric Tempez
+ * @copyright Copyright (C) 2018-2022, Frédéric Tempez
+ * @license GNU General Public License, version 3
+ * @link http://zwiicms.fr/
+ */
+
+
+/** NE PAS EFFACER
+* admin.css
+*/
\ No newline at end of file
diff --git a/core/module/addon/view/upload/upload.php b/core/module/plugin/view/upload/upload.php
similarity index 93%
rename from core/module/addon/view/upload/upload.php
rename to core/module/plugin/view/upload/upload.php
index 57114be4..c4104450 100644
--- a/core/module/addon/view/upload/upload.php
+++ b/core/module/plugin/view/upload/upload.php
@@ -3,12 +3,12 @@
'buttonGrey',
- 'href' => helper::baseUrl() . 'addon',
+ 'href' => helper::baseUrl() . 'plugin',
'value' => template::ico('left')
]); ?>
- 'https://doc.zwiicms.fr/installation-d-un-module',
'target' => '_blank',
'class' => 'buttonHelp',