Supprime les save excessifs

This commit is contained in:
Fred Tempez 2024-09-28 18:42:41 +02:00
parent a25dbc6bd2
commit df0c579af0
6 changed files with 77 additions and 51 deletions

View File

@ -1090,11 +1090,11 @@ class layout extends common
$today > $checkUpdate + $this->getData(['config', 'autoUpdateDelay', 86400]) $today > $checkUpdate + $this->getData(['config', 'autoUpdateDelay', 86400])
) { ) {
// Dernier auto controle // Dernier auto controle
$this->setData(['core', 'lastAutoUpdate', $today]); $this->setData(['core', 'lastAutoUpdate', $today], false);
if ( if (
helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL) helper::checkNewVersion(common::ZWII_UPDATE_CHANNEL)
) { ) {
$this->setData(['core', 'updateAvailable', true]); $this->setData(['core', 'updateAvailable', true], false);
} }
// Recherche de mise à jour des modules // Recherche de mise à jour des modules
@ -1111,11 +1111,12 @@ class layout extends common
} }
// Mise à jour d'un module // Mise à jour d'un module
if (array_key_exists($key, $infoModules) === true) { if (array_key_exists($key, $infoModules) === true) {
$this->setData(['core', 'updateModuleAvailable', true]); $this->setData(['core', 'updateModuleAvailable', true], false);
} }
} }
} }
// Force la sauvegarde
$this->saveDB('core');
} }
} }
// Afficher le bouton : Mise à jour détectée + activée // Afficher le bouton : Mise à jour détectée + activée

View File

@ -32,8 +32,6 @@ 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
//$this->SaveData();
} }
// Backup automatique des données // Backup automatique des données
$lastBackup = mktime(0, 0, 0); $lastBackup = mktime(0, 0, 0);
@ -519,7 +517,7 @@ class core extends common
&& $this->getUser('id') && $this->getUser('id')
&& !$this->isPost() && !$this->isPost()
) { ) {
$this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()]); $this->setData(['user', $this->getUser('id'), 'accessUrl', $this->getUrl()], false);
$this->setData(['user', $this->getUser('id'), 'accessTimer', time()]); $this->setData(['user', $this->getUser('id'), 'accessTimer', time()]);
} }
// Breadcrumb // Breadcrumb

View File

@ -520,7 +520,7 @@ class common
* Sauvegarde des données * Sauvegarde 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 = [], $save = true)
{ {
// Pas d'enregistrement lorsqu'une notice est présente ou tableau transmis vide // Pas d'enregistrement lorsqu'une notice est présente ou tableau transmis vide
if ( if (
@ -548,7 +548,7 @@ class common
$query .= '.' . $keys[$i]; $query .= '.' . $keys[$i];
} }
// Appliquer la modification, le dernier élément étant la donnée à sauvegarder // Appliquer la modification, le dernier élément étant la donnée à sauvegarder
$success = is_object($db->set($query, $keys[count($keys) - 1], true)); $success = is_object($db->set($query, $keys[count($keys) - 1], $save));
} }
return $success; return $success;
} }
@ -725,6 +725,17 @@ class common
} }
/**
* Forçage de l'enregistrement
* @param mixed $module
* @return void
*/
public function saveDB($module): void
{
$db = $this->dataFiles[$module];
$db->save();
}
/** /**
* Accède à la liste des pages parents et de leurs enfants * Accède à la liste des pages parents et de leurs enfants

View File

@ -382,11 +382,13 @@ class page extends common
$pageId = helper::increment($pageId, self::$moduleIds); $pageId = helper::increment($pageId, self::$moduleIds);
// Met à jour les enfants // Met à jour les enfants
foreach ($this->getHierarchy($this->getUrl(2), null) as $childrenPageId) { foreach ($this->getHierarchy($this->getUrl(2), null) as $childrenPageId) {
$this->setData(['page', $childrenPageId, 'parentPageId', $pageId]); $this->setData(['page', $childrenPageId, 'parentPageId', $pageId], false);
} }
// Force la sauvegarde
$this->saveDB('page');
// Change l'id de page dans les données des modules // Change l'id de page dans les données des modules
if ($this->getData(['module', $this->getUrl(2)]) !== null) { if ($this->getData(['module', $this->getUrl(2)]) !== null) {
$this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])]); $this->setData(['module', $pageId, $this->getData(['module', $this->getUrl(2)])], false);
$this->deleteData(['module', $this->getUrl(2)]); $this->deleteData(['module', $this->getUrl(2)]);
// Renommer le dossier du module // Renommer le dossier du module
$moduleId = $this->getData(['page', $this->getUrl(2), 'moduleId']); $moduleId = $this->getData(['page', $this->getUrl(2), 'moduleId']);
@ -397,8 +399,10 @@ class page extends common
copy($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2), $modulesData[$moduleId]['dataDirectory'] . $pageId); copy($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2), $modulesData[$moduleId]['dataDirectory'] . $pageId);
$this->deleteDir($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2)); $this->deleteDir($modulesData[$moduleId]['dataDirectory'] . $this->getUrl(2));
// Mettre à jour le nom de la feuille de style // Mettre à jour le nom de la feuille de style
$this->setData(['module', $pageId, 'theme', 'style', $modulesData[$moduleId]['dataDirectory'] . $pageId]); $this->setData(['module', $pageId, 'theme', 'style', $modulesData[$moduleId]['dataDirectory'] . $pageId], false);
} }
// Force la sauvegarde
$this->saveDB('module');
} }
// Si la page correspond à la page d'accueil, change l'id dans la configuration du site // Si la page correspond à la page d'accueil, change l'id dans la configuration du site
if ($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) { if ($this->getData(['locale', 'homePageId']) === $this->getUrl(2)) {
@ -418,20 +422,22 @@ class page extends common
} }
// Traitement des pages spéciales affectées dans la config : // Traitement des pages spéciales affectées dans la config :
if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId'])) { if ($this->getUrl(2) === $this->getData(['locale', 'legalPageId'])) {
$this->setData(['locale', 'legalPageId', $pageId]); $this->setData(['locale', 'legalPageId', $pageId], false);
} }
if ($this->getUrl(2) === $this->getData(['locale', 'searchPageId'])) { if ($this->getUrl(2) === $this->getData(['locale', 'searchPageId'])) {
$this->setData(['locale', 'searchPageId', $pageId]); $this->setData(['locale', 'searchPageId', $pageId], false);
} }
if ($this->getUrl(2) === $this->getData(['locale', 'page404'])) { if ($this->getUrl(2) === $this->getData(['locale', 'page404'])) {
$this->setData(['locale', 'page404', $pageId]); $this->setData(['locale', 'page404', $pageId], false);
} }
if ($this->getUrl(2) === $this->getData(['locale', 'page403'])) { if ($this->getUrl(2) === $this->getData(['locale', 'page403'])) {
$this->setData(['locale', 'page403', $pageId]); $this->setData(['locale', 'page403', $pageId], false);
} }
if ($this->getUrl(2) === $this->getData(['locale', 'page302'])) { if ($this->getUrl(2) === $this->getData(['locale', 'page302'])) {
$this->setData(['locale', 'page302', $pageId]); $this->setData(['locale', 'page302', $pageId], false);
} }
// Force la sauvegarde
$this->saveDB('locale');
// Si la page est une page enfant, actualise les positions des autres enfants du parent, sinon actualise les pages sans parents // Si la page est une page enfant, actualise les positions des autres enfants du parent, sinon actualise les pages sans parents
$lastPosition = 1; $lastPosition = 1;
$hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy()); $hierarchy = $this->getInput('pageEditParentPageId') ? $this->getHierarchy($this->getInput('pageEditParentPageId')) : array_keys($this->getHierarchy());
@ -450,7 +456,7 @@ class page extends common
$lastPosition++; $lastPosition++;
} }
// Change la position // Change la position
$this->setData(['page', $hierarchyPageId, 'position', $lastPosition]); $this->setData(['page', $hierarchyPageId, 'position', $lastPosition], false);
// Incrémente pour la prochaine position // Incrémente pour la prochaine position
$lastPosition++; $lastPosition++;
} }
@ -475,26 +481,28 @@ class page extends common
) { ) {
foreach ($this->getHierarchy($pageId) as $parentId => $childId) { foreach ($this->getHierarchy($pageId) as $parentId => $childId) {
if ($this->getData(['page', $childId, 'parentPageId']) === $pageId) { if ($this->getData(['page', $childId, 'parentPageId']) === $pageId) {
$this->setData(['page', $childId, 'position', 0]); $this->setData(['page', $childId, 'position', 0], false);
} }
} }
// Force la sauvegarde
$this->saveDB('page');
} }
// La page est une barre latérale qui a été renommée : changer le nom de la barre dans les pages qui l'utilisent // La page est une barre latérale qui a été renommée : changer le nom de la barre dans les pages qui l'utilisent
if ($this->getinput('pageEditBlock') === 'bar') { if ($this->getinput('pageEditBlock') === 'bar') {
foreach ($this->getHierarchy() as $eachPageId => $parentId) { foreach ($this->getHierarchy() as $eachPageId => $parentId) {
if ($this->getData(['page', $eachPageId, 'barRight']) === $this->getUrl(2)) { if ($this->getData(['page', $eachPageId, 'barRight']) === $this->getUrl(2)) {
$this->setData(['page', $eachPageId, 'barRight', $pageId]); $this->setData(['page', $eachPageId, 'barRight', $pageId], false);
} }
if ($this->getData(['page', $eachPageId, 'barLeft']) === $this->getUrl(2)) { if ($this->getData(['page', $eachPageId, 'barLeft']) === $this->getUrl(2)) {
$this->setData(['page', $eachPageId, 'barLeft', $pageId]); $this->setData(['page', $eachPageId, 'barLeft', $pageId], false);
} }
foreach ($parentId as $childId) { foreach ($parentId as $childId) {
if ($this->getData(['page', $childId, 'barRight']) === $this->getUrl(2)) { if ($this->getData(['page', $childId, 'barRight']) === $this->getUrl(2)) {
$this->setData(['page', $childId, 'barRight', $pageId]); $this->setData(['page', $childId, 'barRight', $pageId], false);
} }
if ($this->getData(['page', $childId, 'barLeft']) === $this->getUrl(2)) { if ($this->getData(['page', $childId, 'barLeft']) === $this->getUrl(2)) {
$this->setData(['page', $childId, 'barLeft', $pageId]); $this->setData(['page', $childId, 'barLeft', $pageId], false);
} }
} }
} }
@ -710,13 +718,13 @@ class page extends common
{ {
$p = $this->getData(['page']); $p = $this->getData(['page']);
$d = array_map(function ($d) { $d = array_map(function ($d) {
unset ($d["css"], $d["js"]); unset($d["css"], $d["js"]);
return $d; return $d;
}, $p); }, $p);
return json_encode($d); return json_encode($d);
} }
/** /**
* Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite * Stocke la variable dans les paramètres de l'utilisateur pour activer la tab à sa prochaine visite
* @return never * @return never
*/ */

View File

@ -419,7 +419,7 @@ class theme extends common
]); ]);
// Sauvegarder la configuration localisée // Sauvegarder la configuration localisée
$this->setData(['locale', 'legalPageId', $this->getInput('configLegalPageId')]); $this->setData(['locale', 'legalPageId', $this->getInput('configLegalPageId')], false);
$this->setData(['locale', 'searchPageId', $this->getInput('configSearchPageId')]); $this->setData(['locale', 'searchPageId', $this->getInput('configSearchPageId')]);
// Valeurs en sortie // Valeurs en sortie
@ -507,21 +507,23 @@ class theme extends common
'featureContent' => $featureContent, 'featureContent' => $featureContent,
'featureFiles' => $files 'featureFiles' => $files
] ]
]); ], false);
// Modification de la position du menu selon la position de la bannière // Modification de la position du menu selon la position de la bannière
if ($this->getData(['theme', 'header', 'position']) == 'site') { if ($this->getData(['theme', 'header', 'position']) == 'site') {
$this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))]); $this->setData(['theme', 'menu', 'position', str_replace('body-', 'site-', $this->getData(['theme', 'menu', 'position']))], false);
} }
if ($this->getData(['theme', 'header', 'position']) == 'body') { if ($this->getData(['theme', 'header', 'position']) == 'body') {
$this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))]); $this->setData(['theme', 'menu', 'position', str_replace('site-', 'body-', $this->getData(['theme', 'menu', 'position']))], false);
} }
// Menu accroché à la bannière qui devient cachée // Menu accroché à la bannière qui devient cachée
if ( if (
$this->getData(['theme', 'header', 'position']) == 'hide' && $this->getData(['theme', 'header', 'position']) == 'hide' &&
in_array($this->getData(['theme', 'menu', 'position']), ['body-first', 'site-first', 'body-first', 'site-second']) in_array($this->getData(['theme', 'menu', 'position']), ['body-first', 'site-first', 'body-first', 'site-second'])
) { ) {
$this->setData(['theme', 'menu', 'position', 'site']); $this->setData(['theme', 'menu', 'position', 'site'], false);
} }
// Force la sauvegarde
$this->saveDB('theme');
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'notification' => helper::translate('Modifications enregistrées'), 'notification' => helper::translate('Modifications enregistrées'),
@ -650,7 +652,7 @@ class theme extends common
if (is_array($typeValue)) { if (is_array($typeValue)) {
foreach ($typeValue as $fontId => $fontValue) { foreach ($typeValue as $fontId => $fontValue) {
// Recherche les correspondances // Recherche les correspondances
$result = array_filter($fonts, function($value) use ($fontId) { $result = array_filter($fonts, function ($value) use ($fontId) {
return $value == $fontId; return $value == $fontId;
}); });
$keyResults = array_keys($result); $keyResults = array_keys($result);
@ -846,7 +848,7 @@ class theme extends common
file_exists($this->getData(['font', 'files', $this->getUrl(3), 'resource'])) file_exists($this->getData(['font', 'files', $this->getUrl(3), 'resource']))
) { ) {
unlink($this->getData(['font', 'files', $this->getUrl(3), 'resource'])); unlink($this->getData(['font', 'files', $this->getUrl(3), 'resource']));
} }
// Valeurs en sortie // Valeurs en sortie
@ -921,7 +923,7 @@ class theme extends common
'fontWeight' => $this->getInput('themeTitleFontWeight'), 'fontWeight' => $this->getInput('themeTitleFontWeight'),
'textTransform' => $this->getInput('themeTitleTextTransform') 'textTransform' => $this->getInput('themeTitleTextTransform')
] ]
]); ], false);
$this->setData([ $this->setData([
'theme', 'theme',
'text', 'text',
@ -931,7 +933,7 @@ class theme extends common
'textColor' => $this->getInput('themeTextTextColor'), 'textColor' => $this->getInput('themeTextTextColor'),
'linkColor' => $this->getInput('themeTextLinkColor') 'linkColor' => $this->getInput('themeTextLinkColor')
] ]
]); ], false);
$this->setData([ $this->setData([
'theme', 'theme',
'site', 'site',
@ -942,14 +944,14 @@ class theme extends common
'width' => $this->getInput('themeSiteWidth'), 'width' => $this->getInput('themeSiteWidth'),
'margin' => $this->getInput('themeSiteMargin', helper::FILTER_BOOLEAN) 'margin' => $this->getInput('themeSiteMargin', helper::FILTER_BOOLEAN)
] ]
]); ], false);
$this->setData([ $this->setData([
'theme', 'theme',
'button', 'button',
[ [
'backgroundColor' => $this->getInput('themeButtonBackgroundColor') 'backgroundColor' => $this->getInput('themeButtonBackgroundColor')
] ]
]); ], false);
$this->setData([ $this->setData([
'theme', 'theme',
'block', 'block',
@ -957,7 +959,9 @@ class theme extends common
'backgroundColor' => $this->getInput('themeBlockBackgroundColor'), 'backgroundColor' => $this->getInput('themeBlockBackgroundColor'),
'borderColor' => $this->getInput('themeBlockBorderColor') 'borderColor' => $this->getInput('themeBlockBorderColor')
] ]
]); ], false);
// Force la sauvegarde
$this->saveDB('theme');
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
'notification' => helper::translate('Modifications enregistrées'), 'notification' => helper::translate('Modifications enregistrées'),

View File

@ -345,7 +345,7 @@ class user extends common
'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN), 'files' => $this->getInput('userEditFiles', helper::FILTER_BOOLEAN),
'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT), 'language' => $this->getInput('userEditLanguage', helper::FILTER_STRING_SHORT),
'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT), 'tags' => $this->getInput('userEditTags', helper::FILTER_STRING_SHORT),
'authKey' => $this->getData(['user', $this->getUrl(2), 'authKey']), 'authKey' => $this->getData(['user', $this->getUrl(2), 'authKey']),
] ]
]); ]);
// Redirection spécifique si l'utilisateur change son mot de passe // Redirection spécifique si l'utilisateur change son mot de passe
@ -1031,8 +1031,8 @@ class user extends common
$this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time() $this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) < time()
and $this->getData(['user', $userId, 'connectFail']) === $this->getData(['config', 'connect', 'attempt']) and $this->getData(['user', $userId, 'connectFail']) === $this->getData(['config', 'connect', 'attempt'])
) { ) {
$this->setData(['user', $userId, 'connectFail', 0]); $this->setData(['user', $userId, 'connectFail', 0], false);
$this->setData(['user', $userId, 'connectTimeout', 0]); $this->setData(['user', $userId, 'connectTimeout', 0], false);
} }
// Check la présence des variables et contrôle du blocage du compte si valeurs dépassées // Check la présence des variables et contrôle du blocage du compte si valeurs dépassées
// Vérification du mot de passe et du groupe // Vérification du mot de passe et du groupe
@ -1044,8 +1044,8 @@ class user extends common
and $captcha === true and $captcha === true
) { ) {
// RAZ // RAZ
$this->setData(['user', $userId, 'connectFail', 0]); $this->setData(['user', $userId, 'connectFail', 0], false);
$this->setData(['user', $userId, 'connectTimeout', 0]); $this->setData(['user', $userId, 'connectTimeout', 0], false);
// Clé d'authenfication // Clé d'authenfication
$authKey = uniqid('', true) . bin2hex(random_bytes(8)); $authKey = uniqid('', true) . bin2hex(random_bytes(8));
@ -1073,7 +1073,7 @@ class user extends common
} }
// Accès multiples avec le même compte // Accès multiples avec le même compte
$this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']]); $this->setData(['user', $userId, 'accessCsrf', $_SESSION['csrf']], false);
// Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur // Valeurs en sortie lorsque le site est en maintenance et que l'utilisateur n'est pas administrateur
if ( if (
$this->getData(['config', 'maintenance']) $this->getData(['config', 'maintenance'])
@ -1106,12 +1106,12 @@ class user extends common
$notification = helper::translate('Captcha, identifiant ou mot de passe incorrects'); $notification = helper::translate('Captcha, identifiant ou mot de passe incorrects');
$logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha'; $logStatus = $captcha === true ? 'Erreur de mot de passe' : 'Erreur de captcha';
// Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec // Cas 1 le nombre de connexions est inférieur aux tentatives autorisées : incrément compteur d'échec
if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'])) { if ($this->getData(['user', $userId, 'connectFail']) < $this->getData(['config', 'connect', 'attempt'], false)) {
$this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1]); $this->setData(['user', $userId, 'connectFail', $this->getdata(['user', $userId, 'connectFail']) + 1], false);
} }
// Cas 2 la limite du nombre de connexion est atteinte : placer le timer // Cas 2 la limite du nombre de connexion est atteinte : placer le timer
if ($this->getdata(['user', $userId, 'connectFail']) == $this->getData(['config', 'connect', 'attempt'])) { if ($this->getdata(['user', $userId, 'connectFail']) == $this->getData(['config', 'connect', 'attempt'])) {
$this->setData(['user', $userId, 'connectTimeout', time()]); $this->setData(['user', $userId, 'connectTimeout', time()], false);
} }
// Cas 3 le délai de bloquage court // Cas 3 le délai de bloquage court
if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) { if ($this->getData(['user', $userId, 'connectTimeout']) + $this->getData(['config', 'connect', 'timeout']) > time()) {
@ -1124,6 +1124,8 @@ class user extends common
]); ]);
} }
} }
// Force la sauvegarde
$this->saveDB('user');
} }
// Journalisation // Journalisation
$this->saveLog($logStatus); $this->saveLog($logStatus);
@ -1202,11 +1204,11 @@ class user extends common
$newPassword = $this->getInput('userResetNewPassword', helper::FILTER_PASSWORD, true); $newPassword = $this->getInput('userResetNewPassword', helper::FILTER_PASSWORD, true);
} }
// Modifie le mot de passe // Modifie le mot de passe
$this->setData(['user', $this->getUrl(2), 'password', $newPassword]); $this->setData(['user', $this->getUrl(2), 'password', $newPassword], false);
// Réinitialise la date de la demande // Réinitialise la date de la demande
$this->setData(['user', $this->getUrl(2), 'forgot', 0]); $this->setData(['user', $this->getUrl(2), 'forgot', 0], false);
// Réinitialise le blocage // Réinitialise le blocage
$this->setData(['user', $this->getUrl(2), 'connectFail', 0]); $this->setData(['user', $this->getUrl(2), 'connectFail', 0], false);
$this->setData(['user', $this->getUrl(2), 'connectTimeout', 0]); $this->setData(['user', $this->getUrl(2), 'connectTimeout', 0]);
// Valeurs en sortie // Valeurs en sortie
$this->addOutput([ $this->addOutput([
@ -1321,7 +1323,7 @@ class user extends common
"accessCsrf" => null, "accessCsrf" => null,
'tags' => $item['tags'] 'tags' => $item['tags']
] ]
]); ], false);
// Icône de notification // Icône de notification
$item['notification'] = $create ? template::ico('check') : template::ico('cancel'); $item['notification'] = $create ? template::ico('check') : template::ico('cancel');
// Envoi du mail // Envoi du mail
@ -1362,6 +1364,8 @@ class user extends common
} }
} }
// Force la sauvegarde
$this->saveDB('user');
if (empty(self::$users)) { if (empty(self::$users)) {
$notification = helper::translate('Rien à importer, erreur de format ou fichier incorrect'); $notification = helper::translate('Rien à importer, erreur de format ou fichier incorrect');
$success = false; $success = false;