[9.3.00.dev] suppression tableau $data

This commit is contained in:
fredtempez 2019-08-19 15:42:07 +02:00
parent 9bd981566e
commit 6dc022947d
2 changed files with 130 additions and 170 deletions

View File

@ -29,7 +29,6 @@ class common {
const GROUP_MEMBER = 1; const GROUP_MEMBER = 1;
const GROUP_MODERATOR = 2; const GROUP_MODERATOR = 2;
const GROUP_ADMIN = 3; const GROUP_ADMIN = 3;
// Dossier de travail
const BACKUP_DIR = 'site/backup/'; const BACKUP_DIR = 'site/backup/';
const DATA_DIR = 'site/data/'; const DATA_DIR = 'site/data/';
const FILE_DIR = 'site/file/'; const FILE_DIR = 'site/file/';
@ -143,25 +142,25 @@ class common {
$this->input['_COOKIE'] = $_COOKIE; $this->input['_COOKIE'] = $_COOKIE;
} }
// Import des données d'une version 8 // Import des données d'une version 8 et 9
$this->importDataV8(); //$this->importDataV8();
$this->importDataV9(); //$this->importDataV9();
// Génère le fichier de données lorque les deux fichiers sont absents ou seulement le thème est - installation fraîche par défaut // Génère le fichier de données lorque les deux fichiers sont absents ou seulement le thème est - installation fraîche par défaut
if( if(
file_exists(self::DATA_DIR.'config.json') === false || file_exists(self::DATA_DIR.'config.json') === false ||
file_exists(self::DATA_DIR.'core.json') === false || file_exists(self::DATA_DIR.'core.json') === false ||
file_exists(self::DATA_DIR.'theme.json') === false || file_exists(self::DATA_DIR.'theme.json') === false ||
file_exists(self::DATA_DIR.'user.json') === false ) { file_exists(self::DATA_DIR.'user.json') === false ) {
include_once('core/module/install/ressource/defaultdata.php'); // Initialisation
$this->setData([install::$defaultData]); $this->iniData();
$this->saveData(); //$this->saveData();
} }
// Lecture des données déjà présentes // Lecture des données déjà présentes
if($this->data === []) { //if($this->data === []) {
$this->readData(); // $this->readData();
} //}
// Mise à jour des données core // Mise à jour des données core
$this->update(); $this->update();
@ -331,24 +330,41 @@ class common {
* @return mixed * @return mixed
*/ */
public function getData($keys = null) { public function getData($keys = null) {
// Retourne l'ensemble des données $lang = 'fr';
if($keys === null) { if (count($keys) >= 1) {
return $this->data; //Retourne une chaine contenant le dossier à créer
} $folder = $this->dirData ($keys[0],$lang);
// Descend dans les niveaux de la variable data // Constructeur du module de sauvegarde
$tempData = $this->data; $db = new \Prowebcraft\JsonDb([
foreach($keys as $key) { 'name' => $keys[0] . '.json',
// Si aucune donnée n'existe retourne null 'dir' => $folder,
if(isset($tempData[$key]) === false) { 'template' => self::TEMP_DIR . 'data.template.json'
return null; ]);
} switch(count($keys)) {
// Sinon décent dans les niveaux case 1:
else { $tempData = $db->get($keys[0]);
$tempData = $tempData[$key]; break;
case 2:
$tempData = $db->get($keys[0].'.'.$keys[1]);
break;
case 3:
$tempData = $db->get($keys[0].'.'.$keys[1].'.'.$keys[2]);
break;
case 4:
$tempData = $db->get($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3]);
break;
case 5:
$tempData = $db->get($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4]);
break;
case 6:
$tempData = $db->get($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5]);
break;
case 7:
$tempData = $db->get($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5].'.'.$keys[6]);
break;
} }
return $tempData;
} }
// Retourne les données
return $tempData;
} }
/** /**
@ -480,111 +496,6 @@ class common {
return ($this->checkCSRF() AND $this->input['_POST'] !== []); return ($this->checkCSRF() AND $this->input['_POST'] !== []);
} }
/**
* Enregistre les données dans deux fichiers séparés
* @keys array vide ou avec le tableau complet -> sauvegarde la totalité des données
* nombre de clés supérieur à 1 : écriture clé à clé.
*/
public function saveData($keys = []) {
// Langue du frontend en cours d'édition
// $lang = $this->readI18nData('frontend');
$lang = 'fr';
// Fonction appelée sans paramètre ou avec la totalité du tableau
switch(count($keys)) {
case 0:
case 1:
foreach (self::$dataStage as $stageId) {
// Stockage dans un sous-dossier localisé
// Le dossier de langue existe t-il ?
if (!file_exists(self::DATA_DIR . '/' . $lang)) {
mkdir (self::DATA_DIR . '/' . $lang);
}
// Sous-dossier localisé
$folder = $this->dirData ($stageId,$lang);
// COnstructeur
$db[$stageId] = new \Prowebcraft\JsonDb([
'name' => $stageId . '.json',
'dir' => $folder,
'template' => self::TEMP_DIR . 'data.template.json'
]);
$db[$stageId]->set($stageId,$this->getData([$stageId]));
$db[$stageId]->save;
}
break;
// Appel avec des paramètres, initialisation de la classe
case 2: case 3: case 4: case 5: case 6: case 7:
// Sous-dossier localisé
if ($keys[0] === 'page' ||
$keys[0] === 'module') {
$folder = self::DATA_DIR . $lang . '/';
} else {
$folder = self::DATA_DIR;
}
$db = new \Prowebcraft\JsonDb([
'name' => $keys[0] . '.json',
'dir' => $folder,
'template' => self::TEMP_DIR . 'data.template.json'
]);
// Appel avec paramètres, écriture des valeurs individuelles
case 2:
$db->set($keys[0],$keys[1]);
$db->save;
break;
case 3:
$db->set($keys[0] . '.' . $keys[1],$keys[2]);
$db->save;
break;
case 4:
$db->set($keys[0] . '.' . $keys[1] . '.' . $keys[2],$keys[3]);
$db->save;
break;
case 5:
$db->set($keys[0] . '.' . $keys[1] . '.' . $keys[2] . '.' . $keys[3] , $keys[4]);
$db->save;
break;
case 6:
$db->set($keys[0] . '.' . $keys[1] . '.' . $keys[2] . '.' . $keys[3] . '.' . $keys[4], $keys[5]);
$db->save;
break;
case 7:
$db->set($keys[0] . '.' . $keys[1] . '.' . $keys[2] . '.' . $keys[3] . '.' . $keys[4] . '.' . $keys[5], $keys[6]);
$db->save;
break;
}
}
/**
*
* Lecture des fichiers de données
*
*/
public function readData() {
// reset du tableau
$lang = 'fr';
$tempData = [];
// Boucle des modules
foreach (self::$dataStage as $stageId) {
// Dossier localisé
$folder = $this->dirData($stageId,$lang);
// Constructeur de la bdd
$db[$stageId] = new \Prowebcraft\JsonDb([
'name' => $stageId . '.json',
'dir' => $folder,
'template' => self::TEMP_DIR . 'data.template.json'
]);
$dbData = $db[$stageId]->get($stageId);
if ($dbData) {
$tempData [$stageId] = $dbData;
} else {
$tempData [$stageId] = [];
}
}
$this->data = $tempData;
}
/** /**
* Import des données de la version 8 * Import des données de la version 8
@ -596,7 +507,7 @@ class common {
for($i = 0; $i < 3; $i++) { for($i = 0; $i < 3; $i++) {
$tempData = [json_decode(file_get_contents(self::DATA_DIR.'data.json'), true)]; $tempData = [json_decode(file_get_contents(self::DATA_DIR.'data.json'), true)];
if($tempData) { if($tempData) {
$this->saveData(); //$this->saveData($tempData);
break; break;
} }
elseif($i === 2) { elseif($i === 2) {
@ -633,7 +544,7 @@ class common {
} }
rename (self::DATA_DIR.'core.json',self::DATA_DIR.'imported_data.json'); rename (self::DATA_DIR.'core.json',self::DATA_DIR.'imported_data.json');
rename (self::DATA_DIR.'theme.json',self::DATA_DIR.'imported_theme.json'); rename (self::DATA_DIR.'theme.json',self::DATA_DIR.'imported_theme.json');
$this->saveData(); //$this->saveData();
} }
} }
@ -882,32 +793,77 @@ class common {
* Insert des données * Insert des données
* @param array $keys Clé(s) des données * @param array $keys Clé(s) des données
*/ */
public function setData($keys) { public function setData($keys = NULL) {
switch(count($keys)) {
case 1: // Langue et chemin pour page et module
$this->data = $keys[0]; $lang='fr';
break; //Retourne une chaine contenant le dossier à créer
$folder = $this->dirData ($keys[0],$lang);
// Constructeur du module de sauvegarde
$db = new \Prowebcraft\JsonDb([
'name' => $keys[0] . '.json',
'dir' => $folder,
'template' => self::TEMP_DIR . 'data.template.json'
]);
switch(count($keys)) {
case 2: case 2:
$this->data[$keys[0]] = $keys[1]; $db->set($keys[0],$keys[1]);
$db->save();
break; break;
case 3: case 3:
$this->data[$keys[0]][$keys[1]] = $keys[2]; $db->set($keys[0].'.'.$keys[1],$keys[2]);
$db->save();
break; break;
case 4: case 4:
$this->data[$keys[0]][$keys[1]][$keys[2]] = $keys[3]; $db->set($keys[0].'.'.$keys[1].'.'.$keys[2],$keys[3]);
$db->save();
break; break;
case 5: case 5:
$this->data[$keys[0]][$keys[1]][$keys[2]][$keys[3]] = $keys[4]; $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3],$keys[4]);
$db->save();
break; break;
case 6: case 6:
$this->data[$keys[0]][$keys[1]][$keys[2]][$keys[3]][$keys[4]] = $keys[5]; $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4],$keys[5]);
$db->save();
break; break;
case 7: case 7:
$this->data[$keys[0]][$keys[1]][$keys[2]][$keys[3]][$keys[4]][$keys[5]] = $keys[6]; $db->set($keys[0].'.'.$keys[1].'.'.$keys[2].'.'.$keys[3].'.'.$keys[4].'.'.$keys[5],$keys[6]);
$db->save();
break; break;
} }
} }
/**
* Initialisation des données
* @param array $keys Clé(s) des données
*/
public function iniData($keys = NULL) {
// Initialisation des 5 zones de stockage
require_once('core/module/install/ressource/defaultdata.php');
// Langue et chemin pour page et module
$lang='fr';
foreach (self::$dataStage as $stageId) {
// Stockage dans un sous-dossier localisé
// Le dossier de langue existe t-il ?
if (!file_exists(self::DATA_DIR . '/' . $lang)) {
mkdir (self::DATA_DIR . '/' . $lang);
}
$folder = $this->dirData ($stageId,$lang);
// Constructeur
$db[$stageId] = new \Prowebcraft\JsonDb([
'name' => $stageId . '.json',
'dir' => $folder,
'template' => self::TEMP_DIR . 'data.template.json'
]);
$db[$stageId]->set($stageId,initdata::$defaultData[$stageId]);
$db[$stageId]->save;
}
}
/** /**
* Mises à jour * Mises à jour
*/ */
@ -916,7 +872,7 @@ class common {
if($this->getData(['core', 'dataVersion']) < 810) { if($this->getData(['core', 'dataVersion']) < 810) {
$this->setData(['config', 'timezone', 'Europe/Paris']); $this->setData(['config', 'timezone', 'Europe/Paris']);
$this->setData(['core', 'dataVersion', 810]); $this->setData(['core', 'dataVersion', 810]);
$this->saveData(); //$this->saveData();
} }
// Version 8.2.0 // Version 8.2.0
if($this->getData(['core', 'dataVersion']) < 820) { if($this->getData(['core', 'dataVersion']) < 820) {
@ -929,56 +885,56 @@ class common {
$this->setData(['theme', 'header', 'fontSize', '2em']); $this->setData(['theme', 'header', 'fontSize', '2em']);
$this->setData(['theme', 'footer', 'textColor', 'rgba(33, 34, 35, 1)']); $this->setData(['theme', 'footer', 'textColor', 'rgba(33, 34, 35, 1)']);
$this->setData(['core', 'dataVersion', 820]); $this->setData(['core', 'dataVersion', 820]);
$this->saveData(); //$this->saveData();
} }
// Version 8.2.2 // Version 8.2.2
if($this->getData(['core', 'dataVersion']) < 822) { if($this->getData(['core', 'dataVersion']) < 822) {
$this->setData(['config', 'maintenance', false]); $this->setData(['config', 'maintenance', false]);
$this->setData(['core', 'dataVersion', 822]); $this->setData(['core', 'dataVersion', 822]);
$this->saveData(); //$this->saveData();
} }
// Version 8.2.6 // Version 8.2.6
if($this->getData(['core', 'dataVersion']) < 826) { if($this->getData(['core', 'dataVersion']) < 826) {
$this->setData(['theme','header','linkHome',true]); $this->setData(['theme','header','linkHome',true]);
$this->setData(['core', 'dataVersion', 826]); $this->setData(['core', 'dataVersion', 826]);
$this->saveData(); //$this->SaveData();
} }
// Version 8.3.1 // Version 8.3.1
if($this->getData(['core', 'dataVersion']) < 831) { if($this->getData(['core', 'dataVersion']) < 831) {
$this->setData(['theme','header','imageContainer','auto']); $this->setData(['theme','header','imageContainer','auto']);
$this->setData(['core', 'dataVersion', 831]); $this->setData(['core', 'dataVersion', 831]);
$this->saveData(); //$this->SaveData();
} }
// Version 8.4.0 // Version 8.4.0
if($this->getData(['core', 'dataVersion']) < 840) { if($this->getData(['core', 'dataVersion']) < 840) {
$this->setData(['config','itemsperPage',10]); $this->setData(['config','itemsperPage',10]);
$this->setData(['core', 'dataVersion', 840]); $this->setData(['core', 'dataVersion', 840]);
$this->saveData(); //$this->SaveData();
} }
// Version 8.4.4 // Version 8.4.4
if($this->getData(['core', 'dataVersion']) < 844) { if($this->getData(['core', 'dataVersion']) < 844) {
$this->setData(['core', 'dataVersion', 844]); $this->setData(['core', 'dataVersion', 844]);
$this->saveData(); //$this->SaveData();
} }
// Version 8.4.6 // Version 8.4.6
if($this->getData(['core', 'dataVersion']) < 846) { if($this->getData(['core', 'dataVersion']) < 846) {
$this->setData(['config','itemsperPage',10]); $this->setData(['config','itemsperPage',10]);
$this->setData(['core', 'dataVersion', 846]); $this->setData(['core', 'dataVersion', 846]);
$this->saveData(); //$this->saveData();
} }
// Version 8.5.0 // Version 8.5.0
if($this->getData(['core', 'dataVersion']) < 850) { if($this->getData(['core', 'dataVersion']) < 850) {
$this->setData(['theme','menu','font','Open+Sans']); $this->setData(['theme','menu','font','Open+Sans']);
$this->setData(['core', 'dataVersion', 850]); $this->setData(['core', 'dataVersion', 850]);
$this->saveData(); //$this->saveData();
} }
// Version 8.5.1 // Version 8.5.1
if($this->getData(['core', 'dataVersion']) < 851) { if($this->getData(['core', 'dataVersion']) < 851) {
$this->setData(['config','itemsperPage',10]); $this->setData(['config','itemsperPage',10]);
$this->deleteData(['config','ItemsperPage']); $this->deleteData(['config','ItemsperPage']);
$this->setData(['core', 'dataVersion', 851]); $this->setData(['core', 'dataVersion', 851]);
$this->saveData(); //$this->saveData();
} }
// Version 9.0.0 // Version 9.0.0
if($this->getData(['core', 'dataVersion']) < 9000) { if($this->getData(['core', 'dataVersion']) < 9000) {
@ -988,13 +944,13 @@ class common {
} }
$this->setData(['theme', 'menu','fixed',false]); $this->setData(['theme', 'menu','fixed',false]);
$this->setData(['core', 'dataVersion', 9000]); $this->setData(['core', 'dataVersion', 9000]);
$this->saveData(); //$this->saveData();
} }
// Version 9.0.01 // Version 9.0.01
if($this->getData(['core', 'dataVersion']) < 9001) { if($this->getData(['core', 'dataVersion']) < 9001) {
$this->deleteData(['config', 'social', 'googleplusId']); $this->deleteData(['config', 'social', 'googleplusId']);
$this->setData(['core', 'dataVersion', 9001]); $this->setData(['core', 'dataVersion', 9001]);
$this->saveData(); //$this->saveData();
} }
// Version 9.0.08 // Version 9.0.08
if($this->getData(['core', 'dataVersion']) < 9008) { if($this->getData(['core', 'dataVersion']) < 9008) {
@ -1003,31 +959,31 @@ class common {
$this->setData(['theme', 'footer', 'fontSize','.8em']); $this->setData(['theme', 'footer', 'fontSize','.8em']);
$this->setData(['theme', 'footer', 'font','Open+Sans']); $this->setData(['theme', 'footer', 'font','Open+Sans']);
$this->setData(['core', 'dataVersion', 9008]); $this->setData(['core', 'dataVersion', 9008]);
$this->saveData(); //$this->saveData();
} }
// Version 9.0.09 // Version 9.0.09
if($this->getData(['core', 'dataVersion']) < 9009) { if($this->getData(['core', 'dataVersion']) < 9009) {
$this->setData(['core', 'dataVersion', 9009]); $this->setData(['core', 'dataVersion', 9009]);
$this->SaveData(); //$this->saveData();
} }
// Version 9.0.10 // Version 9.0.10
if($this->getData(['core', 'dataVersion']) < 9010) { if($this->getData(['core', 'dataVersion']) < 9010) {
$this->deleteData(['config', 'social', 'googleplusId']); $this->deleteData(['config', 'social', 'googleplusId']);
$this->setData(['core', 'dataVersion', 9010]); $this->setData(['core', 'dataVersion', 9010]);
$this->saveData(); //$this->saveData();
} }
// Version 9.0.11 // Version 9.0.11
if($this->getData(['core', 'dataVersion']) < 9011) { if($this->getData(['core', 'dataVersion']) < 9011) {
if ($this->getData(['theme','menu','position']) === 'body') if ($this->getData(['theme','menu','position']) === 'body')
$this->setData(['theme','menu','position','site']); $this->setData(['theme','menu','position','site']);
$this->setData(['core', 'dataVersion', 9011]); $this->setData(['core', 'dataVersion', 9011]);
$this->saveData(); //$this->saveData();
} }
// Version 9.0.17 // Version 9.0.17
if($this->getData(['core', 'dataVersion']) < 9017) { if($this->getData(['core', 'dataVersion']) < 9017) {
$this->setData(['theme','footer','displayVersion', true ]); $this->setData(['theme','footer','displayVersion', true ]);
$this->setData(['core', 'dataVersion', 9017]); $this->setData(['core', 'dataVersion', 9017]);
$this->saveData(); //$this->saveData();
} }
// Version 9.1.0 // Version 9.1.0
if($this->getData(['core', 'dataVersion']) < 9100) { if($this->getData(['core', 'dataVersion']) < 9100) {
@ -1035,7 +991,7 @@ class common {
$this->setData(['theme','footer','displaySiteMap', true ]); $this->setData(['theme','footer','displaySiteMap', true ]);
$this->setData(['theme','footer','displayCopyright', true ]); $this->setData(['theme','footer','displayCopyright', true ]);
$this->setData(['core', 'dataVersion', 9100]); $this->setData(['core', 'dataVersion', 9100]);
$this->saveData(); //$this->saveData();
} }
// Version 9.2.00 // Version 9.2.00
if($this->getData(['core', 'dataVersion']) < 9200) { if($this->getData(['core', 'dataVersion']) < 9200) {
@ -1045,7 +1001,7 @@ class common {
$this->setData(['theme','footer','displaySearch', false ]); $this->setData(['theme','footer','displaySearch', false ]);
$this->setData(['config','social','githubId', '' ]); $this->setData(['config','social','githubId', '' ]);
$this->setData(['core', 'dataVersion', 9200]); $this->setData(['core', 'dataVersion', 9200]);
$this->saveData(); //$this->saveData();
} }
// Version 9.2.05 // Version 9.2.05
if($this->getData(['core', 'dataVersion']) < 9205) { if($this->getData(['core', 'dataVersion']) < 9205) {
@ -1062,7 +1018,7 @@ class common {
rmdir ('core/vendor/swiper/'); rmdir ('core/vendor/swiper/');
} }
$this->setData(['core', 'dataVersion', 9205]); $this->setData(['core', 'dataVersion', 9205]);
$this->saveData(); //$this->saveData();
} }
} }
} }
@ -1096,7 +1052,8 @@ class core extends common {
// Date de la dernière suppression // Date de la dernière suppression
$this->setData(['core', 'lastClearTmp', $lastClearTmp]); $this->setData(['core', 'lastClearTmp', $lastClearTmp]);
// Enregistre les données // Enregistre les données
$this->saveData(); //$this->saveData();
//$this->saveData(['core', 'lastClearTmp', $lastClearTmp]);
} }
// Backup automatique des données // Backup automatique des données
@ -1122,7 +1079,8 @@ class core extends common {
// Date du dernier backup // Date du dernier backup
$this->setData(['core', 'lastBackup', $lastBackup]); $this->setData(['core', 'lastBackup', $lastBackup]);
// Enregistre les données // Enregistre les données
$this->saveData(); //$this->saveData();
//$this->saveData(['core', 'lastBackup', $lastBackup]);
// Supprime les backups de plus de 30 jours // Supprime les backups de plus de 30 jours
$iterator = new DirectoryIterator(self::BACKUP_DIR); $iterator = new DirectoryIterator(self::BACKUP_DIR);
foreach($iterator as $fileInfos) { foreach($iterator as $fileInfos) {
@ -1439,10 +1397,12 @@ class core extends common {
// Sinon traitement des données de sortie qui requiert qu'aucune notice ne soit présente // Sinon traitement des données de sortie qui requiert qu'aucune notice ne soit présente
else { else {
// Enregistrement des données // Enregistrement des données
/*
if($output['state'] !== false) { if($output['state'] !== false) {
$this->setData([$module->getData()]); $this->setData([$module->getData()]);
$this->saveData([$module->getData()]); //$this->saveData();
} }
*/
// Notification // Notification
if($output['notification']) { if($output['notification']) {
if($output['state'] === true) { if($output['state'] === true) {

View File

@ -1,5 +1,5 @@
<?php <?php
class install extends common { class initdata extends common {
public static $defaultData = [ public static $defaultData = [
'config' => [ 'config' => [
@ -499,4 +499,4 @@ class install extends common {
'version' => 0, 'version' => 0,
] ]
]; ];
} }