From 7ac5d9589ccf85590e07d1f7d399c851fbeb5e14 Mon Sep 17 00:00:00 2001 From: Fred Tempez Date: Thu, 4 Jan 2024 16:43:45 +0100 Subject: [PATCH] backup ok --- core/module/course/course.php | 104 ++++++++++++-------- core/module/course/view/restore/restore.css | 20 ++++ core/module/course/view/restore/restore.php | 33 +++++++ 3 files changed, 116 insertions(+), 41 deletions(-) create mode 100644 core/module/course/view/restore/restore.css create mode 100644 core/module/course/view/restore/restore.php diff --git a/core/module/course/course.php b/core/module/course/course.php index 1f31c33..659a65e 100644 --- a/core/module/course/course.php +++ b/core/module/course/course.php @@ -35,7 +35,8 @@ class course extends common 'userHistory' => self::GROUP_EDITOR, 'usersHistoryExport' => self::GROUP_EDITOR, 'userHistoryExport' => self::GROUP_EDITOR, - 'courseBackup' => self::GROUP_ADMIN, + 'backup' => self::GROUP_EDITOR, + 'restore' => self::GROUP_EDITOR, ]; public static $courseAccess = [ @@ -108,15 +109,14 @@ class course extends common 'help' => 'Éditer' ]), template::button('courseDownload' . $courseId, [ - 'href' => helper::baseUrl() . 'course/courseBackup/' . $courseId, - 'value' => template::ico('download'), + 'href' => helper::baseUrl() . 'course/backup/' . $courseId, + 'value' => template::ico('download-cloud'), 'help' => 'Sauvegarder' ]), template::button('courseUpload' . $courseId, [ - 'href' => helper::baseUrl() . 'course', - 'value' => template::ico('upload'), + 'href' => helper::baseUrl() . 'course/restore/', + 'value' => template::ico('upload-cloud'), 'help' => 'Restaurer', - 'disabled' => true, ]), template::button('courseDelete' . $courseId, [ 'class' => 'courseDelete buttonRed', @@ -1330,54 +1330,76 @@ class course extends common * Sauvegarde d'un cours sans option */ - public function courseBackup() + public function backup() { - $courseId = $this->getUrl(2); - // Participants avec historiques - $enrolment = $this->getData(['enrolment', $courseId]); - // Générer un fichier dans le dossier de l'espace - file_put_contents(self::DATA_DIR . $courseId . '/enrolment.json', json_encode([$courseId => $enrolment], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); + // Accès refusé + if ( + $this->getUser('permission', __CLASS__, __FUNCTION__) !== true + ) { + // Valeurs en sortie + $this->addOutput([ + 'access' => false + ]); + } else { + $courseId = $this->getUrl(2); - // Idem pour les données du cours - $course = $this->getData(['course', $courseId]); - // Générer un fichier dans le dossier de l'espace - file_put_contents(self::DATA_DIR . $courseId . '/course.json', json_encode([$courseId => $course], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); + // Participants avec historiques + $enrolment = $this->getData(['enrolment', $courseId]); + // Générer un fichier dans le dossier de l'espace + file_put_contents(self::DATA_DIR . $courseId . '/enrolment.json', json_encode([$courseId => $enrolment], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); - // Idem pour la catégorie - $category = $this->getData(['category', $this->getData(['course', $courseId, 'category'])]); - // Générer un fichier dans le dossier de l'espace - file_put_contents(self::DATA_DIR . $courseId . '/category.json', json_encode([$this->getData(['course', $courseId, 'category']) => $category], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); + // Idem pour les données du cours + $course = $this->getData(['course', $courseId]); + // Générer un fichier dans le dossier de l'espace + file_put_contents(self::DATA_DIR . $courseId . '/course.json', json_encode([$courseId => $course], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); + + // Idem pour la catégorie + $category = $this->getData(['category', $this->getData(['course', $courseId, 'category'])]); + // Générer un fichier dans le dossier de l'espace + file_put_contents(self::DATA_DIR . $courseId . '/category.json', json_encode([$this->getData(['course', $courseId, 'category']) => $category], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)); - // Génère une archive ZIP - $this->makeZip(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip', self::DATA_DIR . $courseId); - - if (!is_dir(self::FILE_DIR . 'source/backup')) { - mkdir(self::FILE_DIR . 'source/backup'); - } - - $success = false; - $message = helper::translate('Erreur : sauvegarde non générée !'); - // Transférer dans RFM - if (file_exists(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip')) { - if (!is_dir(self::FILE_DIR . 'source/' . $courseId . '/backup/')) { - mkdir(self::FILE_DIR . 'source/' . $courseId . '/backup/'); + // Génère une archive ZIP + $this->makeZip(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip', self::DATA_DIR . $courseId); + $success = false; + $message = helper::translate('Erreur : sauvegarde non générée !'); + // Transférer dans RFM + if (file_exists(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip')) { + if (!is_dir(self::FILE_DIR . 'source/' . $courseId )) { + mkdir(self::FILE_DIR . 'source/' . $courseId ); + } + if (!is_dir(self::FILE_DIR . 'source/' . $courseId . '/backup/')) { + mkdir(self::FILE_DIR . 'source/' . $courseId . '/backup/'); + } + copy(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip', self::FILE_DIR . 'source/' . $courseId . '/backup/' . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip'); + unlink(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip'); + $success = true; + $message = helper::translate('Sauvegarde générée avec succès'); } - copy(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip', self::FILE_DIR . 'source/' . $courseId . '/backup/' . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip'); - unlink(self::TEMP_DIR . $courseId . '-' . date('Y-m-d-H-i-s', time()) . '.zip'); - $success = true; - $message = helper::translate('Sauvegarde générée avec succès'); + + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . 'course', + 'state' => $success, + 'notification' => $message, + ]); } + } + + /** + * Sauvegarde d'un cours sans option + */ + + public function restore() + { // Valeurs en sortie $this->addOutput([ - 'redirect' => helper::baseUrl() . 'course', - 'state' => $success, - 'notification' => $message, + 'title' => helper::translate('Restaurer un espace'), + 'view' => 'restore' ]); - } diff --git a/core/module/course/view/restore/restore.css b/core/module/course/view/restore/restore.css new file mode 100644 index 0000000..7554b6c --- /dev/null +++ b/core/module/course/view/restore/restore.css @@ -0,0 +1,20 @@ +/** + * This file is part of Zwii. + * + * For full copyright and license information, please see the LICENSE + * file that was distributed with this source code. + * + * @author Rémi Jean + * @copyright Copyright (C) 2008-2018, Rémi Jean + * @author Frédéric Tempez + * @copyright Copyright (C) 2018-2023, Frédéric Tempez + * @license CC Attribution-NonCommercial-NoDerivatives 4.0 International + * @link http://zwiicms.fr/ + */ + + +/** @import url("site/data/admin.css"); */ + +/** NE PAS EFFACER +* admin.css +*/ \ No newline at end of file diff --git a/core/module/course/view/restore/restore.php b/core/module/course/view/restore/restore.php new file mode 100644 index 0000000..d13e9ae --- /dev/null +++ b/core/module/course/view/restore/restore.php @@ -0,0 +1,33 @@ + +
+
+ 'buttonGrey', + 'href' => helper::baseUrl() . 'course', + 'value' => template::ico('left') + ]); ?> +
+
+ 'Valider' + ]); ?> +
+
+
+
+
+

+ +

+
+
+ $this->getData(['course', $this->getUser('id'), 'language']), + //'label' => 'Fichier de sauvegarde :' + ]); ?> +
+
+
+
+
+ \ No newline at end of file