diff --git a/README.md b/README.md index 10d6257..3c878d4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ZwiiCampus 1.19.02 +# ZwiiCampus 1.19.03 ZwiiCampus (Learning Management System) est logiciel auteur destiné à mettre en ligne des tutoriels. Il dispose de plusieurs modalités d'ouverture et d'accès des contenus. Basé sur la version 13 du CMS Zwii, la structure logicielle est solide, le framework de Zwii est éprouvé. diff --git a/core/class/jsondb/JsonDb.class.php b/core/class/jsondb/JsonDb.class.php index 6352500..009c14b 100644 --- a/core/class/jsondb/JsonDb.class.php +++ b/core/class/jsondb/JsonDb.class.php @@ -1,4 +1,5 @@ data === null || $reload) { $this->db = $this->config['dir'] . $this->config['name']; + if (!file_exists($this->db)) { - return null; // Rebuild database manage by CMS - } else { - if ($this->config['backup']) { - try { - copy($this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'], $this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'] . '.backup'); - } catch (\Exception $e) { - error_log('Erreur de chargement : ' . $e); - exit('Erreur de chargement : ' . $e); + return null; // Rebuild database managed by CMS + } + + if ($this->config['backup']) { + $backup_path = $this->config['dir'] . DIRECTORY_SEPARATOR . $this->config['name'] . '.backup'; + + try { + if (!copy($this->db, $backup_path)) { + throw new \RuntimeException('Échec de la création de la sauvegarde'); } + } catch (\Exception $e) { + throw new \RuntimeException('Erreur de sauvegarde : ' . $e->getMessage()); } } - $this->data = json_decode(file_get_contents($this->db), true); - if (!$this->data === null) { - throw new \InvalidArgumentException('Le fichier ' . $this->db - . ' contient des données invalides.'); + + $file_contents = file_get_contents($this->db); + + $this->data = json_decode($file_contents, true); + + if ($this->data === null) { + throw new \InvalidArgumentException('Le fichier ' . $this->db . ' contient des données invalides.'); } } + return $this->data; } /** - * Save database + * Charge les données depuis un fichier JSON. + * + * @param bool $reload Force le rechargement des données si true + * + * @return array|null Les données chargées ou null si le fichier n'existe pas + * + * @throws \RuntimeException En cas d'erreur lors de la création de la sauvegarde + * @throws \InvalidArgumentException Si le fichier contient des données JSON invalides */ public function save(): void { - if ($this->data === null) { - throw new \RuntimeException('Tentative de sauvegarde de données nulles'); - } - - try { - $encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_THROW_ON_ERROR); - } catch (\JsonException $e) { - throw new \RuntimeException('Erreur d\'encodage JSON : ' . $e->getMessage()); - } - - $encoded_length = strlen($encoded_data); - $max_attempts = 5; - - for ($attempt = 0; $attempt < $max_attempts; $attempt++) { - $temp_file = $this->db . '.tmp' . uniqid(); - - try { - $write_result = file_put_contents($temp_file, $encoded_data, LOCK_EX); - - if ($write_result === $encoded_length) { - if (rename($temp_file, $this->db)) { - return; - } - } - } catch (\Exception $e) { - // Nettoyer le fichier temporaire en cas d'exception - if (file_exists($temp_file)) { - unlink($temp_file); - } - } - - usleep(pow(2, $attempt) * 250000); - } - - // Erreur fatale si tous les essais échouent - throw new \RuntimeException('Échec de sauvegarde après ' . $max_attempts . ' tentatives'); + if ($this->data === null) { + throw new \RuntimeException('Tentative de sauvegarde de données nulles'); + } + try { + $encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new \RuntimeException('Erreur d\'encodage JSON : ' . $e->getMessage()); + } + + $encoded_length = strlen($encoded_data); + $max_attempts = 5; + + for ($attempt = 0; $attempt < $max_attempts; $attempt++) { + $temp_file = $this->db . '.tmp' . uniqid(); + + try { + $write_result = file_put_contents($temp_file, $encoded_data, LOCK_EX); + + if ($write_result === $encoded_length) { + if (rename($temp_file, $this->db)) { + return; + } + } + } catch (\Exception $e) { + // Nettoyer le fichier temporaire en cas d'exception + if (file_exists($temp_file)) { + unlink($temp_file); + } + } + + usleep(pow(2, $attempt) * 250000); + } + + // Erreur fatale si tous les essais échouent + throw new \RuntimeException('Échec de sauvegarde après ' . $max_attempts . ' tentatives'); } -} \ No newline at end of file +} diff --git a/core/core.php b/core/core.php index 2808719..2ef3d1f 100644 --- a/core/core.php +++ b/core/core.php @@ -51,7 +51,7 @@ class common const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '1.19.02'; + const ZWII_VERSION = '1.19.03'; // URL autoupdate const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/'; diff --git a/core/module/course/course.php b/core/module/course/course.php index e1ee033..0763373 100644 --- a/core/module/course/course.php +++ b/core/module/course/course.php @@ -180,7 +180,7 @@ class course extends common $this->initData('theme', $courseId); // Pointer RFM sur le dossier de l'espace - self::$siteContent = $courseId; + // self::$siteContent = $courseId; // Ordonne les pages par position $this->buildHierarchy(); @@ -319,7 +319,7 @@ class course extends common $this->initDB('page', $courseId); // Pointer RFM sur le dossier de l'espace - self::$siteContent = $courseId; + // self::$siteContent = $courseId; // Ordonne les pages par position $this->buildHierarchy(); @@ -378,7 +378,7 @@ class course extends common $this->initDB('page', $courseId); // Pointer RFM sur le dossier de l'espace - self::$siteContent = $courseId; + // self::$siteContent = $courseId; // Ordonne les pages par position $this->buildHierarchy(); @@ -1740,7 +1740,7 @@ class course extends common $this->initDB('page', $courseId); // Pointer RFM sur le dossier de l'espace - self::$siteContent = $courseId; + // self::$siteContent = $courseId; // Ordonne les pages par position $this->buildHierarchy();