diff --git a/README.md b/README.md index 0283543..25580fc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ZwiiCampus 1.14.07 +# ZwiiCampus 1.15.00 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 669d6d9..fa7fbc9 100644 --- a/core/class/jsondb/JsonDb.class.php +++ b/core/class/jsondb/JsonDb.class.php @@ -143,7 +143,7 @@ class JsonDb extends \Prowebcraft\Dot public function save() { // Encode les données au format JSON avec les options spécifiées - $encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT | JSON_PRETTY_PRINT); + $encoded_data = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT); // Vérifie la longueur de la chaîne JSON encodée $encoded_length = strlen($encoded_data); diff --git a/core/class/router.class.php b/core/class/router.class.php index 07361d4..d3cf0d2 100644 --- a/core/class/router.class.php +++ b/core/class/router.class.php @@ -409,26 +409,41 @@ class core extends common exit(); } - // Sauvegarde la dernière page visitée par l'utilisateur connecté et enregistre l'historique des consultations + + /* + * Récupère les statistiques de l'utilisateur non admin + * en dehors de home + * et si la connextion est nécessaire et que le membre est connecté + * stocke la progression dans la base des inscriptions + * */ if ( + // L'utilisateur est renseigné $this->getUser('id') + // L'accueil ne stocke pas lea progression && common::$siteContent !== 'home' + // La page existe && in_array($this->getUrl(0), array_keys($this->getData(['page']))) - // Le userId n'est pas celui d'un admis ni le prof du contenu + // L'espace dispose d'un accès nécessitant un compte + && $this->getData(['course', self::$siteContent, 'enrolment']) > 0 + // Le userId n'est pas celui d'un admis ni le compte d'un gestionnaire de cet espace && ( $this->getUser('group') < common::GROUP_ADMIN || $this->getUser('id') !== $this->getData(['course', common::$siteContent, 'author']) ) ) { + + $course = new course(); + + // Met à jour la progression de l'utisateur et obtient le nombre de pages vues + $userProgress = $course->setUserProgress(self::$siteContent, $this->getUser('id')); + + // Stockage dans les données d'inscription du membre + $this->setData(['enrolment', self::$siteContent, $this->getUser('id'), 'progress', $userProgress], false); + // Stocke la dernière page vue et sa date de consultation $this->setData(['enrolment', common::$siteContent, $this->getUser('id'), 'lastPageView', $this->getUrl(0)], false); $this->setData(['enrolment', common::$siteContent, $this->getUser('id'), 'datePageView', time()]); - // Stocke le rapport en CSV - $file = fopen(common::DATA_DIR . common::$siteContent . '/report.csv', 'a+'); - fputcsv($file, [$this->getUser('id'), $this->getUrl(0), time()], ';'); - fclose($file); - } // Journalisation @@ -519,21 +534,6 @@ class core extends common header(header: 'Location:' . helper::baseUrl(true) . 'swap/' . self::$siteContent); exit(); } - /* - * Récupère les statistiques de l'utilisateur non admin - * en dehors de home - * et si la connextion est nécessaire et que le membre est connecté - * stocke la progression dans la base des inscriptions - * - if ( - $this->isConnected() === true - and self::$siteContent !== 'home' - and $this->getData(['course', self::$siteContent, 'enrolment']) > 0 - ) { - $course = new course(); - $userProgress = $course->userProgress(self::$siteContent, $this->getUser('id')); - $this->setData(['enrolment', self::$siteContent, $this->getUser('id'), 'progress', $userProgress ]); - }*/ } /** diff --git a/core/core.php b/core/core.php index 6fdc7f2..7a489e1 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.14.09'; + const ZWII_VERSION = '1.15.00'; // 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 d822e0e..d0c0c27 100644 --- a/core/module/course/course.php +++ b/core/module/course/course.php @@ -736,16 +736,14 @@ class course extends common 'href' => helper::baseUrl() . 'course/userReport/' . $courseId . '/' . $userId, /** La lecture de la progression s'effectue selon la nouvelle méthode (progression dans la base des enrolements) * Soit avec l'ancienne méthode qui consiste à recalculer la progression. - * TRANSITOIRE A SUPPRIMER EN FIN D'ANNEE + * + * Le pourcentage de progression est-il renseigné au format INT sinon il est recalculé + * **/ - /* - 'value' => array_key_exists('progress', $userValue) - ? $userValue['progress'] + 'value' => (array_key_exists('progress', $userValue) and is_int($userValue['progress'])) + ? number_format($userValue['progress']) . ' %' : ($viewPages ? min(round(($viewPages * 100) / $sumPages, 1), 100) . ' %' : '0%'), 'disable' => empty($userValue['datePageView']), - */ - 'value' => $viewPages ? min(round(($viewPages * 100) / $sumPages, 1), 100) . ' %' : '0%', - //'disable' => empty($viewPages) ]), template::button('userDelete' . $userId, [ 'class' => 'userDelete buttonRed', @@ -754,7 +752,6 @@ class course extends common 'help' => 'Désinscrire' ]) ]; - } } @@ -2079,31 +2076,45 @@ class course extends common * * @param mixed $courseId * @param mixed $userId - * @return string Ratio de pages vues + * @return float Ratio de pages vues en décimales de pourcentages */ - public function userProgress($courseId, $userId): string + private function getUserProgress($courseId, $userId): float { // Obtient les statistiques de l'ensemble de la cohorte $reports = $this->getReport($courseId, $userId); - // Nombre de pages dans l'espace + // Nombre de pages dans l'espace vues par cet utilisateur $viewPages = array_key_exists($userId, $reports) ? count($reports[$userId]) : 0; - // Nombre de pages vues + // Nombre de pages totales $sumPages = $this->countPages($this->getData(['page'])); // Calcule le ratio - $ratio = ($viewPages *100) / $sumPages; + $ratio = ($viewPages * 100) / $sumPages; // Arrondi le ratio à deux décimales $ratio = round($ratio, 2); - // Transforme le ratio en pourcentage - $ratio = number_format($ratio) . ' %'; return $ratio; } + /** + * + * @param mixed $courseId id de l'espace + * @param mixed $userId id de l'utilisateur + * @return float nombre de pages vues + */ + public function setUserProgress($courseId, $userId): float { + // Stocke le rapport en CSV + $file = fopen(common::DATA_DIR . $courseId. '/report.csv', 'a+'); + fputcsv($file, [$userId, $this->getUrl(0), time()], ';'); + fclose($file); + + // Retourne le nombre de page vues + return ($this->getUserProgress($courseId, $userId)); + } + /** * * Compte les pages d'un espace