nom addon -> plugin +export wip

This commit is contained in:
fredtempez 2022-01-26 11:40:48 +01:00
parent 974b6ac3e1
commit 29aaf0c346
16 changed files with 231 additions and 135 deletions

View File

@ -1,30 +0,0 @@
<?php echo template::formOpen('addonImportForm'); ?>
<div class="row">
<div class="col1">
<?php echo template::button('addonImportBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'addon',
'value' => template::ico('left')
]); ?>
</div>
<div class="col2 offset9">
<?php echo template::submit('addonImportSubmit', [
'value' => 'Appliquer'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Installer des données de module</h4>
<div class="row">
<div class="col6 offset3">
<?php echo template::file('addonImportFile', [
'label' => 'Archive ZIP :',
'type' => 2
]); ?>
</div>
</div>
</div>
</div>
</div>

View File

@ -16,21 +16,21 @@
* @link http://zwiicms.fr/ * @link http://zwiicms.fr/
*/ */
class addon extends common { class plugin extends common {
public static $actions = [ public static $actions = [
'index' => self::GROUP_ADMIN, 'index' => self::GROUP_ADMIN,
'delete' => self::GROUP_ADMIN, 'delete' => self::GROUP_ADMIN,
'export' => self::GROUP_ADMIN, 'dataExport' => self::GROUP_ADMIN,
'import' => self::GROUP_ADMIN, 'dataImport' => self::GROUP_ADMIN, // les données d'un module
'store' => self::GROUP_ADMIN, 'store' => self::GROUP_ADMIN,
'item' => self::GROUP_ADMIN, 'item' => self::GROUP_ADMIN, // détail d'un objet
'upload' => self::GROUP_ADMIN, 'upload' => self::GROUP_ADMIN, // Téléverser catalogue
'uploadItem'=> self::GROUP_ADMIN 'uploadItem'=> self::GROUP_ADMIN // Téléverser par archive
]; ];
// URL des modules // URL des modules
const BASEURL_STORE = 'https://www.zwiicms.fr/'; const BASEURL_STORE = 'https://store.zwiicms.fr/';
const MODULE_STORE = '?modules/'; const MODULE_STORE = '?modules/';
// Gestion des modules // Gestion des modules
@ -43,6 +43,9 @@ class addon extends common {
public static $storeList = []; public static $storeList = [];
public static $storeItem = []; public static $storeItem = [];
// Liste de pages
public static $pagesList = [];
/* /*
* Effacement d'un module installé et non utilisé * Effacement d'un module installé et non utilisé
@ -53,7 +56,7 @@ class addon extends common {
if ($this->getUrl(3) !== $_SESSION['csrf']) { if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'addon', 'redirect' => helper::baseUrl() . 'plugin',
'state' => false, 'state' => false,
'notification' => 'Action non autorisée' 'notification' => 'Action non autorisée'
]); ]);
@ -81,7 +84,7 @@ class addon extends common {
} }
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'addon', 'redirect' => helper::baseUrl() . 'plugin',
'notification' => $notification, 'notification' => $notification,
'state' => $success 'state' => $success
]); ]);
@ -271,7 +274,7 @@ class addon extends common {
*} *}
*/ */
$this->addOutput([ $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', 'notification' => $moduleFile . ' téléchargé dans le dossier modules du gestionnaire de fichiers',
'state' => true 'state' => true
]); ]);
@ -390,16 +393,16 @@ class addon extends common {
: '', : '',
implode(', ',array_keys($inPages,$key)) !== '' implode(', ',array_keys($inPages,$key)) !== ''
? template::button('moduleExport' . $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'), '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)) === '' implode(', ',array_keys($inPages,$key)) === ''
? template::button('moduleExport' . $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'), 'value' => template::ico('upload'),
'help' => 'Importer les données du module avec sa page' 'help' => 'Importer les données du module'
]) ])
: '' : ''
]; ];
@ -415,17 +418,19 @@ class addon extends common {
/* /*
* Export des données d'un module externes ou interne à module.json * Export des données d'un module externes ou interne à module.json
*/ */
public function export(){ public function dataExport(){
// Jeton incorrect // Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) { if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'addon', 'redirect' => helper::baseUrl() . 'plugin',
'state' => false, 'state' => false,
'notification' => 'Action non autorisée' 'notification' => 'Action non autorisée'
]); ]);
} }
else { else {
// Soumission du formulaire
if($this->isPost()) {
// Lire les données du module // Lire les données du module
$infoModules = helper::getModules(); $infoModules = helper::getModules();
// Créer un dossier par défaut // Créer un dossier par défaut
@ -434,6 +439,8 @@ class addon extends common {
if (!is_dir($tmpFolder)) { if (!is_dir($tmpFolder)) {
mkdir($tmpFolder, 0755); mkdir($tmpFolder, 0755);
} }
$page = $this->getInput('pluginExportSelectPage');
// Clés moduleIds dans les pages // Clés moduleIds dans les pages
$inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC'); $inPages = helper::arrayCollumn($this->getData(['page']),'moduleId', 'SORT_DESC');
// Parcourir les pages utilisant le module // Parcourir les pages utilisant le module
@ -501,23 +508,38 @@ class addon extends common {
} else { } else {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'addon', 'redirect' => helper::baseUrl() . 'plugin',
'notification' => 'Quelque chose s\'est mal passé', 'notification' => 'Quelque chose s\'est mal passé',
'state' => false 'state' => false
]); ]);
} }
} 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([
'title' => 'Export des données de module',
'view' => 'dataExport'
]);
}
} }
} }
/* /*
* Importer des données d'un module externes ou interne à module.json * Importer des données d'un module externes ou interne à module.json
*/ */
public function import(){ public function dataImport(){
// Jeton incorrect // Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) { if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'addon', 'redirect' => helper::baseUrl() . 'plugin',
'state' => false, 'state' => false,
'notification' => 'Action non autorisée' 'notification' => 'Action non autorisée'
]); ]);
@ -526,18 +548,32 @@ class addon extends common {
// Soumission du formulaire // Soumission du formulaire
if($this->isPost()) { if($this->isPost()) {
// Récupérer le fichier et le décompacter // 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(); $tempFolder = uniqid();
mkdir (self::TEMP_DIR . $tempFolder, 0755); mkdir (self::TEMP_DIR . $tempFolder, 0755);
$zip = new ZipArchive(); $zip = new ZipArchive();
if ($zip->open(self::FILE_DIR . 'source/' . $zipFilename) === TRUE) { if ($zip->open(self::FILE_DIR . 'source/' . $zipFilename) === TRUE) {
$zip->extractTo(self::TEMP_DIR . $tempFolder ); $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 // Import des données localisées page.json et module.json
// Pour chaque dossier localisé // Pour chaque dossier localisé
$dataTarget = array(); // $dataTarget = array();
$dataSource = array(); // $dataSource = array();
// Liste des pages de même nom dans l'archive et le site // Liste des pages de même nom dans l'archive et le site
/*
$list = ''; $list = '';
foreach (self::$i18nList as $key=>$value) { foreach (self::$i18nList as $key=>$value) {
// Les Pages et les modules // Les Pages et les modules
@ -561,20 +597,16 @@ class addon extends common {
if( $list === ''){ if( $list === ''){
file_put_contents(self::DATA_DIR . '/' .$key . '/' . $fileTarget . '.json', json_encode( $data ,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|LOCK_EX) ); 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 // Supprimer le dossier temporaire
$this->removeDir(self::TEMP_DIR . $tempFolder); $this->removeDir(self::TEMP_DIR . $tempFolder);
$zip->close(); $zip->close();
/*
if( $list !== '' ){ if( $list !== '' ){
$success = false; $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; 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{ else{
$success = true; $success = true;
$notification = 'Import réussi'; $notification = 'Import réussi';
} }*/
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'addon', 'redirect' => helper::baseUrl() . 'plugin',
'state' => $success, 'state' => $success,
'notification' => $notification '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 // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'title' => 'Importer des données de module', 'title' => 'Importer des données de module',
'view' => 'import' 'view' => 'dataImport'
]); ]);
} }
} }

View File

@ -0,0 +1,30 @@
<?php echo template::formOpen('pluginImportForm'); ?>
<div class="row">
<div class="col1">
<?php echo template::button('pluginImportBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'plugin',
'value' => template::ico('left')
]); ?>
</div>
<div class="col2 offset9">
<?php echo template::submit('pluginImportSubmit', [
'value' => 'Appliquer'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Installer des données de module</h4>
<div class="row">
<div class="col6 offset3">
<?php echo template::select('pluginExportSelectPage', $module::$pagesList , [
'label' => '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'
]); ?>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,35 @@
<?php echo template::formOpen('pluginImportForm'); ?>
<div class="row">
<div class="col1">
<?php echo template::button('pluginImportBack', [
'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'plugin',
'value' => template::ico('left')
]); ?>
</div>
<div class="col2 offset9">
<?php echo template::submit('pluginImportSubmit', [
'value' => 'Appliquer'
]); ?>
</div>
</div>
<div class="row">
<div class="col12">
<div class="block">
<h4>Installer des données de module</h4>
<div class="row">
<div class="col6">
<?php echo template::file('pluginImportFile', [
'label' => 'Archive ZIP :',
'type' => 2
]); ?>
</div>
<div class="col6">
<?php echo template::select('pluginImportPage', helper::arrayCollumn($module::$pagesList, 'title', 'SORT_ASC') , [
'label' => 'Importer le module dans la page ' . template::flag('site', '20px')
]); ?>
</div>
</div>
</div>
</div>
</div>

View File

@ -17,21 +17,21 @@
</div> </div>
<div class="col1 offset8"> <div class="col1 offset8">
<?php echo template::button('configModulesStore', [ <?php echo template::button('configModulesStore', [
'href' => helper::baseUrl() . 'addon/store', 'href' => helper::baseUrl() . 'plugin/store',
'value' => template::ico('shopping-basket'), 'value' => template::ico('shopping-basket'),
"help" => 'Lister le catalogue en ligne' "help" => 'Lister le catalogue en ligne'
]); ?> ]); ?>
</div> </div>
<div class="col1"> <div class="col1">
<?php echo template::button('configStoreUpload', [ <?php echo template::button('configStoreUpload', [
'href' => helper::baseUrl() . 'addon/upload', 'href' => helper::baseUrl() . 'plugin/upload',
'value' => template::ico('plus'), 'value' => template::ico('plus'),
"help" => 'Ajouter à partir d\'une archive ZIP' "help" => 'Ajouter à partir d\'une archive ZIP'
]); ?> ]); ?>
</div> </div>
</div> </div>
<?php if($module::$modInstal): ?> <?php if($module::$modInstal): ?>
<?php echo template::table([2, 2, 2, 2, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', 'Exporter', 'Importer']); ?> <?php echo template::table([2, 2, 2, 2, 1, 1, 1], $module::$modInstal, ['Module installé', 'Alias', 'Version', 'Page(s)', 'Supprimer', '', '']); ?>
<?php else: ?> <?php else: ?>
<?php echo template::speech('Aucun module installé.'); ?> <?php echo template::speech('Aucun module installé.'); ?>
<?php endif; ?> <?php endif; ?>

View File

@ -2,7 +2,7 @@
<div class="col1"> <div class="col1">
<?php echo template::button('configStoreBack', [ <?php echo template::button('configStoreBack', [
'class' => 'buttonGrey', 'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'addon', 'href' => helper::baseUrl() . 'plugin',
'value' => template::ico('left') 'value' => template::ico('left')
]); ?> ]); ?>
</div> </div>

View File

@ -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 <remi.jean@outlook.com>
* @copyright Copyright (C) 2008-2018, Rémi Jean
* @author Frédéric Tempez <frederic.tempez@outlook.com>
* @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
*/

View File

@ -3,12 +3,12 @@
<div class="col1"> <div class="col1">
<?php echo template::button('configModulesBack', [ <?php echo template::button('configModulesBack', [
'class' => 'buttonGrey', 'class' => 'buttonGrey',
'href' => helper::baseUrl() . 'addon', 'href' => helper::baseUrl() . 'plugin',
'value' => template::ico('left') 'value' => template::ico('left')
]); ?> ]); ?>
</div> </div>
<div class="col1"> <div class="col1">
<?php echo template::button('addonIndexHelp', [ <?php echo template::button('pluginIndexHelp', [
'href' => 'https://doc.zwiicms.fr/installation-d-un-module', 'href' => 'https://doc.zwiicms.fr/installation-d-un-module',
'target' => '_blank', 'target' => '_blank',
'class' => 'buttonHelp', 'class' => 'buttonHelp',