This commit is contained in:
Fred Tempez 2024-09-30 19:22:08 +02:00
parent a474a41402
commit c4bb124bea
2 changed files with 86 additions and 46 deletions

View File

@ -320,12 +320,31 @@ class common
public function __construct() public function __construct()
{ {
// Construct cache
if (isset($GLOBALS['common_construct'])) {
$this->input['_POST'] = $GLOBALS['common_construct']['input']['_POST'];
$this->input['_COOKIE'] = $GLOBALS['common_construct']['input']['_COOKIE'];
self::$siteContent = $GLOBALS['common_construct']['siteContent'];
$this->dataFiles = $GLOBALS['common_construct']['dataFiles'];
$this->configFiles = $GLOBALS['common_construct']['configFiles'];
$this->user = $GLOBALS['common_construct']['user'];
self::$i18nUI = $GLOBALS['common_construct']['i18nUI'];
$this->hierarchy = $GLOBALS['common_construct']['hierarchy'];
$this->url = $GLOBALS['common_construct']['url'];
self::$dialog = $GLOBALS['common_construct']['dialog'];
return;
}
// Extraction des données http // Extraction des données http
if (isset($_POST)) { if (isset($_POST)) {
$this->input['_POST'] = $_POST; $this->input['_POST'] = $_POST;
// Cache
$GLOBALS['common_construct']['input']['_POST'] = $this->input['_POST'];
} }
if (isset($_COOKIE)) { if (isset($_COOKIE)) {
$this->input['_COOKIE'] = $_COOKIE; $this->input['_COOKIE'] = $_COOKIE;
// Cache
$GLOBALS['common_construct']['input']['_COOKIE'] = $this->input['_COOKIE'];
} }
// Déterminer le contenu du site // Déterminer le contenu du site
@ -336,16 +355,23 @@ class common
$_SESSION['ZWII_SITE_CONTENT'] = 'home'; $_SESSION['ZWII_SITE_CONTENT'] = 'home';
self::$siteContent = 'home'; self::$siteContent = 'home';
} }
// Cache
$GLOBALS['common_construct']['siteContent'] = self::$siteContent;
// Instanciation de la classe des entrées / sorties // Instanciation de la classe des entrées / sorties
// Les fichiers de configuration // Les fichiers de configuration
foreach ($this->configFiles as $module => $value) { foreach ($this->configFiles as $module => $value) {
$this->initDB($module); $this->initDB($module);
} }
// Cache
$GLOBALS['common_construct']['configFiles'] = $this->configFiles;
// Les fichiers des contenus // Les fichiers des contenus
foreach ($this->contentFiles as $module => $value) { foreach ($this->contentFiles as $module => $value) {
$this->initDB($module, self::$siteContent); $this->initDB($module, self::$siteContent);
} }
// Cache
$GLOBALS['common_construct']['dataFiles'] = $this->dataFiles;
// Installation fraîche, initialisation de la configuration inexistante // Installation fraîche, initialisation de la configuration inexistante
// Nécessaire pour le constructeur // Nécessaire pour le constructeur
@ -371,6 +397,8 @@ class common
if ($this->user === []) { if ($this->user === []) {
$this->user = $this->getData(['user', $this->getInput('ZWII_USER_ID')]); $this->user = $this->getData(['user', $this->getInput('ZWII_USER_ID')]);
} }
// Cache
$GLOBALS['common_construct']['user'] = $this->user;
// Langue de l'administration si le user est connecté // Langue de l'administration si le user est connecté
if ($this->getData(['user', $this->getUser('id'), 'language'])) { if ($this->getData(['user', $this->getUser('id'), 'language'])) {
@ -395,11 +423,15 @@ class common
// Stocker l'courseId pour le thème de TinyMCE // Stocker l'courseId pour le thème de TinyMCE
//setcookie('ZWII_SITE_CONTENT', self::$siteContent, time() + 3600, '', '', false, false); //setcookie('ZWII_SITE_CONTENT', self::$siteContent, time() + 3600, '', '', false, false);
setlocale(LC_ALL, self::$i18nUI); setlocale(LC_ALL, self::$i18nUI);
// Cache
$GLOBALS['common_construct']['i18nUI'] = self::$i18nUI;
// Construit la liste des pages parents/enfants // Construit la liste des pages parents/enfants
if ($this->hierarchy['all'] === []) { if ($this->hierarchy['all'] === []) {
$this->buildHierarchy(); $this->buildHierarchy();
} }
// Cache
$GLOBALS['common_construct']['hierarchy'] = $this->hierarchy;
// Construit l'url // Construit l'url
if ($this->url === '') { if ($this->url === '') {
@ -409,6 +441,8 @@ class common
$this->url = $this->homePageId(); $this->url = $this->homePageId();
} }
} }
// Cache
$GLOBALS['common_construct']['url'] = $this->url;
// Chargement des dialogues // Chargement des dialogues
if (!file_exists(self::I18N_DIR . self::$i18nUI . '.json')) { if (!file_exists(self::I18N_DIR . self::$i18nUI . '.json')) {
@ -428,6 +462,8 @@ class common
self::$dialog = array_merge(self::$dialog, $d); self::$dialog = array_merge(self::$dialog, $d);
} }
} }
// Cache
$GLOBALS['common_construct']['dialog'] = self::$dialog;
// Données de proxy // Données de proxy
$proxy = $this->getData(['config', 'proxyType']) . $this->getData(['config', 'proxyUrl']) . ':' . $this->getData(['config', 'proxyPort']); $proxy = $this->getData(['config', 'proxyType']) . $this->getData(['config', 'proxyUrl']) . ':' . $this->getData(['config', 'proxyPort']);
@ -451,7 +487,7 @@ class common
} }
// Mise à jour des données core // Mise à jour des données core
include ('core/include/update.inc.php'); include('core/include/update.inc.php');
} }
@ -511,44 +547,44 @@ class common
return is_object($success); return is_object($success);
} }
/** /**
* Sauvegarde des données * Sauvegarde des données
* @param array $keys Clé(s) des données * @param array $keys Clé(s) des données
* @param bool $save Indique si le fichier doit être sauvegardé après modification (par défaut true) * @param bool $save Indique si le fichier doit être sauvegardé après modification (par défaut true)
* @return bool Succès de l'opération * @return bool Succès de l'opération
*/ */
public function setData($keys = [], $save = true) 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 (
!empty(self::$inputNotices) !empty(self::$inputNotices)
or empty($keys) or empty($keys)
) { ) {
return false; return false;
}
// Empêcher la sauvegarde d'une donnée nulle.
if (gettype($keys[count($keys) - 1]) === NULL) {
return false;
}
// Initialisation du retour en cas d'erreur de descripteur
$success = false;
// Construire la requête dans la base inf à 1 retourner toute la base
if (count($keys) >= 1) {
// Descripteur de la base
$db = $this->dataFiles[$keys[0]];
$query = $keys[0];
// Construire la requête
// Ne pas tenir compte du dernier élément qui une une value donc <
for ($i = 1; $i < count($keys) - 1; $i++) {
$query .= '.' . $keys[$i];
} }
// Appliquer la modification, le dernier élément étant la donnée à sauvegarder
$success = is_object($db->set($query, $keys[count($keys) - 1], $save)); // Empêcher la sauvegarde d'une donnée nulle.
if (gettype($keys[count($keys) - 1]) === NULL) {
return false;
}
// Initialisation du retour en cas d'erreur de descripteur
$success = false;
// Construire la requête dans la base inf à 1 retourner toute la base
if (count($keys) >= 1) {
// Descripteur de la base
$db = $this->dataFiles[$keys[0]];
$query = $keys[0];
// Construire la requête
// Ne pas tenir compte du dernier élément qui une une value donc <
for ($i = 1; $i < count($keys) - 1; $i++) {
$query .= '.' . $keys[$i];
}
// Appliquer la modification, le dernier élément étant la donnée à sauvegarder
$success = is_object($db->set($query, $keys[count($keys) - 1], $save));
}
return $success;
} }
return $success;
}
/** /**
@ -639,7 +675,7 @@ public function setData($keys = [], $save = true)
$write_result = file_put_contents($filename, $data, LOCK_EX | $flags); $write_result = file_put_contents($filename, $data, LOCK_EX | $flags);
// $now = \DateTime::createFromFormat('U.u', microtime(true)); // $now = \DateTime::createFromFormat('U.u', microtime(true));
// file_put_contents("tmplog.txt", '[SecurePut][' . $now->format('H:i:s.u') . ']' . "\r\n", FILE_APPEND); // file_put_contents("tmplog.txt", '[SecurePut][' . $now->format('H:i:s.u') . ']' . "\r\n", FILE_APPEND);
// Vérifie si l'écriture a réussi // Vérifie si l'écriture a réussi
if ($write_result !== false && $write_result === $data_length) { if ($write_result !== false && $write_result === $data_length) {
@ -665,12 +701,12 @@ public function setData($keys = [], $save = true)
'backup' => file_exists('site/data/.backup'), 'backup' => file_exists('site/data/.backup'),
'update' => false, 'update' => false,
]; ];
// Instanciation de l'objet et stockage dans dataFiles // Instanciation de l'objet et stockage dans dataFiles
$this->dataFiles[$module] = new \Prowebcraft\JsonDb($config); $this->dataFiles[$module] = new \Prowebcraft\JsonDb($config);
} }
/** /**
* Cette fonction est liée à saveData * Cette fonction est liée à saveData
@ -679,7 +715,7 @@ public function setData($keys = [], $save = true)
*/ */
public function saveDB($module): void public function saveDB($module): void
{ {
$db = $this->dataFiles[$module]; $db = $this->dataFiles[$module];
$db->save(); $db->save();
} }
@ -695,7 +731,7 @@ public function setData($keys = [], $save = true)
{ {
// Tableau avec les données vierges // Tableau avec les données vierges
require_once ('core/module/install/ressource/defaultdata.php'); require_once('core/module/install/ressource/defaultdata.php');
// L'arborescence // L'arborescence
if (!file_exists(self::DATA_DIR . $path)) { if (!file_exists(self::DATA_DIR . $path)) {
@ -730,7 +766,7 @@ public function setData($keys = [], $save = true)
public function saveConfig($module) public function saveConfig($module)
{ {
// Tableau avec les données vierges // Tableau avec les données vierges
require_once ('core/module/install/ressource/defaultdata.php'); require_once('core/module/install/ressource/defaultdata.php');
// Installation des données des autres modules cad theme profil font config, admin et core // Installation des données des autres modules cad theme profil font config, admin et core
$this->setData([$module, init::$defaultData[$module]]); $this->setData([$module, init::$defaultData[$module]]);
common::$coreNotices[] = $module; common::$coreNotices[] = $module;
@ -1036,9 +1072,10 @@ public function setData($keys = [], $save = true)
/** /**
* @return bool l'utilisateur est connecté true sinon false * @return bool l'utilisateur est connecté true sinon false
*/ */
public function isConnected() { public function isConnected()
return ( {
return (
!empty($this->getUser('authKey')) !empty($this->getUser('authKey'))
&& &&
$this->getUser('authKey') === $this->getInput('ZWII_AUTH_KEY')); $this->getUser('authKey') === $this->getInput('ZWII_AUTH_KEY'));

View File

@ -25,6 +25,9 @@ $siteId = md5($_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_FILENAME']); // Ou util
// Change le nom de la session en fonction de cet identifiant // Change le nom de la session en fonction de cet identifiant
session_name('zwii_session_' . $siteId); session_name('zwii_session_' . $siteId);
// Récupère dynamiquement le chemin du dossier dans lequel le script est exécuté
$scriptPath = dirname($_SERVER['SCRIPT_NAME']);
// Si le chemin est vide (ce qui peut arriver si le site est à la racine), définis-le comme '/' // Si le chemin est vide (ce qui peut arriver si le site est à la racine), définis-le comme '/'
if ($scriptPath === '/' || $scriptPath === '\\' || $scriptPath === '.') { if ($scriptPath === '/' || $scriptPath === '\\' || $scriptPath === '.') {
$scriptPath = '/'; $scriptPath = '/';