importData WIP

This commit is contained in:
fredtempez 2022-02-01 16:56:02 +01:00
parent ae09556e8d
commit a566883b06
4 changed files with 129 additions and 118 deletions

View File

@ -475,12 +475,14 @@ class plugin extends common {
'href' => helper::baseUrl(). $this->getUrl(0) . '/dataExport/' . $keyi18n . '/' . $pagesInfos[$keyi18n][$keyPage]['moduleId'] . '/' . $keyPage . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre 'href' => helper::baseUrl(). $this->getUrl(0) . '/dataExport/' . $keyi18n . '/' . $pagesInfos[$keyi18n][$keyPage]['moduleId'] . '/' . $keyPage . '/' . $_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' 'help' => 'Exporter les données du module'
]), ])
/*
template::button('moduleImport' . $keyPage, [ template::button('moduleImport' . $keyPage, [
'href' => helper::baseUrl(). $this->getUrl(0) . '/dataImport/' . $keyi18n . '/' . $pagesInfos[$keyi18n][$keyPage]['moduleId'] . '/' . $keyPage . '/' . $_SESSION['csrf'],// appel de fonction vaut exécution, utiliser un paramètre 'href' => helper::baseUrl(). $this->getUrl(0) . '/dataImport/' . $keyi18n . '/' . $pagesInfos[$keyi18n][$keyPage]['moduleId'] . '/' . $keyPage . '/' . $_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' 'help' => 'Importer les données du module'
]) ])
*/
]; ];
} }
} }
@ -524,9 +526,7 @@ class plugin extends common {
mkdir(self::FILE_DIR . 'source/modules'); mkdir(self::FILE_DIR . 'source/modules');
} }
$success = copy($tmpFolder . '/' . $fileName , self::FILE_DIR . 'source/modules/' . $this->getUrl(3) . '.zip' ); $success = copy($tmpFolder . '/' . $fileName , self::FILE_DIR . 'source/modules/' . $this->getUrl(3) . '.zip' );
// Nettoyage
unlink($tmpFolder . '/' . $fileName);
$this->removeDir($tmpFolder);
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'redirect' => helper::baseUrl() . 'plugin', 'redirect' => helper::baseUrl() . 'plugin',
@ -542,12 +542,12 @@ class plugin extends common {
ob_clean(); ob_clean();
ob_end_flush(); ob_end_flush();
readfile( $tmpFolder . '/' .$fileName); readfile( $tmpFolder . '/' .$fileName);
unlink($tmpFolder . '/' . $fileName);
$this->removeDir($tmpFolder);
exit(); exit();
break; break;
} }
// Nettoyage
unlink($tmpFolder . '/' . $fileName);
$this->removeDir($tmpFolder);
} }
} }
@ -570,24 +570,26 @@ class plugin extends common {
if (!is_dir($tmpFolder)) { if (!is_dir($tmpFolder)) {
mkdir($tmpFolder, 0755); mkdir($tmpFolder, 0755);
} }
// Sauvegarder la langue active
$saveI18n = self::$i18n;
self::$i18n = $this->getUrl(2);
// Copie des infos sur le module // Copie des infos sur le module
$moduleData = $this->getData(['module', $this->getUrl(4) ]); $modulesData = json_decode(file_get_contents(self::DATA_DIR . $this->getUrl(2) . '/module.json' ), true);
$moduleData [$this->getUrl(4)] = $modulesData['module'] [$this->getUrl(4)];
$success = file_put_contents ($tmpFolder . '/module.json', json_encode($moduleData)); $success = file_put_contents ($tmpFolder . '/module.json', json_encode($moduleData));
// Le dossier du module s'il existe // Le dossier du module s'il existe
if (is_dir(self::DATA_DIR . $this->getUrl(3) . '/' . $this->getUrl(4) ) ) { if (is_dir(self::DATA_DIR . $this->getUrl(3) . '/' . $this->getUrl(4) ) ) {
// Copier le dossier des données // Copier le dossier des données
$success = $this->copyDir(self::DATA_DIR . $this->getUrl(3) . '/' . $this->getUrl(4), $tmpFolder . '/' . self::DATA_DIR . $this->getUrl(3) . '/' . $this->getUrl(4)); $success .= $this->copyDir(self::DATA_DIR . $this->getUrl(3) . '/' . $this->getUrl(4), $tmpFolder);
} }
// Descripteur de l'archive
$success .= file_put_contents ($tmpFolder . '/descripteur.json', json_encode([
'langue' => $this->getUrl(2),
'page' => $this->getUrl(3),
'module' => $this->getUrl(4)
]));
// Restaurer la langue active
//self::$i18n = $saveI18n;
// création du zip // création du zip
if ($success) if ($success)
@ -621,110 +623,109 @@ class plugin extends common {
* 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 dataImport(){ public function dataImport(){
// Jeton incorrect
if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'plugin',
'state' => false,
'notification' => 'Action non autorisée'
]);
}
else {
// Soumission du formulaire
if($this->isPost()) {
// Récupérer le fichier et le décompacter
$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 // Soumission du formulaire
$this->copyDir (self::TEMP_DIR . $tempFolder . '/' .$key . '/content', self::DATA_DIR . '/' .$key . '/content'); if($this->isPost()) {
// Supprimer les fichiers importés // Jeton incorrect
unlink (self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json'); if ($this->getUrl(3) !== $_SESSION['csrf']) {
// Import des fichiers placés ailleurs que dans les dossiers localisés. // Valeurs en sortie
$this->copyDir (self::TEMP_DIR . $tempFolder, self::DATA_DIR ); $this->addOutput([
'redirect' => helper::baseUrl() . 'plugin',
'state' => false,
'notification' => 'Action non autorisée'
]);
}
// Récupérer le fichier et le décompacter
$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 );
}
// Import des données localisées page.json et module.json // copie du contenu de la page
// Pour chaque dossier localisé $this->copyDir (self::TEMP_DIR . $tempFolder . '/' .$key . '/content', self::DATA_DIR . '/' .$key . '/content');
// $dataTarget = array(); // Supprimer les fichiers importés
// $dataSource = array(); 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
// Liste des pages de même nom dans l'archive et le site // Pour chaque dossier localisé
/* // $dataTarget = array();
$list = ''; // $dataSource = array();
foreach (self::$i18nList as $key=>$value) {
// Les Pages et les modules
foreach (['page','module'] as $fileTarget){
if (file_exists(self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json')) { // Liste des pages de même nom dans l'archive et le site
// Le dossier de langue existe /*
// faire la fusion $list = '';
$dataSource = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json'), true); foreach (self::$i18nList as $key=>$value) {
// Des pages de même nom que celles de l'archive existent // Les Pages et les modules
if( $fileTarget === 'page' ){ foreach (['page','module'] as $fileTarget){
foreach( $dataSource as $keydataSource=>$valuedataSource ){ if (file_exists(self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json')) {
foreach( $this->getData(['page']) as $keypage=>$valuepage ){ // Le dossier de langue existe
if( $keydataSource === $keypage){ // faire la fusion
$list === '' ? $list .= ' '.$this->getData(['page', $keypage, 'title']) : $list .= ', '.$this->getData(['page', $keypage, 'title']); $dataSource = json_decode(file_get_contents(self::TEMP_DIR . $tempFolder . '/' .$key . '/' . $fileTarget . '.json'), true);
} // Des pages de même nom que celles de l'archive existent
if( $fileTarget === 'page' ){
foreach( $dataSource as $keydataSource=>$valuedataSource ){
foreach( $this->getData(['page']) as $keypage=>$valuepage ){
if( $keydataSource === $keypage){
$list === '' ? $list .= ' '.$this->getData(['page', $keypage, 'title']) : $list .= ', '.$this->getData(['page', $keypage, 'title']);
} }
} }
} }
$dataTarget = json_decode(file_get_contents(self::DATA_DIR . $key . '/' . $fileTarget . '.json'), true); }
$data [$fileTarget] = array_merge($dataTarget[$fileTarget], $dataSource); $dataTarget = json_decode(file_get_contents(self::DATA_DIR . $key . '/' . $fileTarget . '.json'), true);
if( $list === ''){ $data [$fileTarget] = array_merge($dataTarget[$fileTarget], $dataSource);
file_put_contents(self::DATA_DIR . '/' .$key . '/' . $fileTarget . '.json', json_encode( $data ,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|LOCK_EX) ); if( $list === ''){
} file_put_contents(self::DATA_DIR . '/' .$key . '/' . $fileTarget . '.json', json_encode( $data ,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT|LOCK_EX) );
} }
} }
} }
*/
// 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;
}
else{
$success = true;
$notification = 'Import réussi';
}*/
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'plugin',
'state' => $success,
'notification' => $notification
]);
} }
*/
// Liste des pages ne contenant pas de module
self::$pagesList = $this->getData(['page']); // Supprimer le dossier temporaire
foreach(self::$pagesList as $page => $pageId) { $this->removeDir(self::TEMP_DIR . $tempFolder);
if ($this->getData(['page',$page,'block']) === 'bar' || $zip->close();
$this->getData(['page',$page,'disable']) === true || /*
$this->getData(['page',$page,'moduleId']) !== '') { if( $list !== '' ){
unset(self::$pagesList[$page]); $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;
} }
else{
$success = true;
$notification = 'Import réussi';
}*/
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'title' => 'Importer des données de module', 'redirect' => helper::baseUrl() . 'plugin',
'view' => 'dataImport' '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' => 'dataImport'
]);
} }

View File

@ -15,20 +15,13 @@
'help' => 'Consulter l\'aide en ligne' 'help' => 'Consulter l\'aide en ligne'
]); ?> ]); ?>
</div> </div>
<div class="col1 offset8"> <div class="col1 offset9">
<?php echo template::button('configModulesStore', [ <?php echo template::button('configModulesStore', [
'href' => helper::baseUrl() . 'plugin/store', 'href' => helper::baseUrl() . 'plugin/store',
'value' => template::ico('shopping-basket'), 'value' => template::ico('shopping-basket'),
"help" => 'Lister le catalogue en ligne' "help" => 'Catalogue de modules en ligne'
]); ?> ]); ?>
</div> </div>
<div class="col1">
<?php echo template::button('configStoreUpload', [
'href' => helper::baseUrl() . 'plugin/upload',
'value' => template::ico('plus'),
"help" => 'Ajouter à partir d\'une archive ZIP'
]); ?>
</div>
</div> </div>
<?php if($module::$modulesOrphan): ?> <?php if($module::$modulesOrphan): ?>
<h3>Suppression des modules orphelins</h3> <h3>Suppression des modules orphelins</h3>
@ -39,8 +32,19 @@
<?php echo template::table([2, 2, 1, 5, 1, 1], $module::$modulesInstalled, [ 'Module', 'moduleId', 'Version', '', '', '']); ?> <?php echo template::table([2, 2, 1, 5, 1, 1], $module::$modulesInstalled, [ 'Module', 'moduleId', 'Version', '', '', '']); ?>
<?php endif; ?> <?php endif; ?>
<?php if($module::$modulesData): ?> <?php if($module::$modulesData): ?>
<h3>Sauvegarde des données des modules installés</h3> <div class="row">
<?php echo template::table([2, 2, 1, 1, 4, 1, 1], $module::$modulesData, [ 'Module', 'moduleId', 'Version', 'Langue', 'Page (id)', '', '']); ?> <div class="col11">
<h3>Sauvegarde des données des modules installés</h3>
</div>
<div class="col1">
<?php echo template::button('configModuledataImport', [
'href' => helper::baseUrl() . 'dataImport',
'value' => template::ico('upload'),
"help" => 'Importer des données de module'
]); ?>
</div>
</div>
<?php echo template::table([2, 2, 1, 1, 5, 1], $module::$modulesData, [ 'Module', 'moduleId', 'Version', 'Langue', 'Page (id)', '']); ?>
<?php else: ?> <?php else: ?>
<?php echo template::speech('Aucun module installé.'); ?> <?php echo template::speech('Aucun module installé.'); ?>
<?php endif; ?> <?php endif; ?>

View File

@ -6,6 +6,13 @@
'value' => template::ico('left') 'value' => template::ico('left')
]); ?> ]); ?>
</div> </div>
<div class="col1 offset10">
<?php echo template::button('configStoreUpload', [
'href' => helper::baseUrl() . 'plugin/upload',
'value' => template::ico('plus'),
"help" => 'Importer depuis une archive ZIP'
]); ?>
</div>
</div> </div>
<?php if($module::$storeList): ?> <?php if($module::$storeList): ?>
<?php echo template::table([2, 2, 1, 2, 2, 2, 1], $module::$storeList, ['Catégorie', 'Module', 'Version', 'Date', 'Pages', 'Obtenir']); ?> <?php echo template::table([2, 2, 1, 2, 2, 2, 1], $module::$storeList, ['Catégorie', 'Module', 'Version', 'Date', 'Pages', 'Obtenir']); ?>

1
truc
View File

@ -1 +0,0 @@
{"config":{"previewLength":"100","resultHideContent":"","placeHolder":"Un ou plusieurs mots-cl\u00e9s s\u00e9par\u00e9s par un espace ou par +","submitText":"Rechercher","versionData":"2.2"},"theme":{"keywordColor":"rgba(229, 229, 1, 1)","style":"site\/data\/search\/recherche\/theme.css"}}