diff --git a/core/class/router.class.php b/core/class/router.class.php index 73492a3..089763f 100644 --- a/core/class/router.class.php +++ b/core/class/router.class.php @@ -511,10 +511,10 @@ class core extends common * */ if ( - $this->isConnected() === false - and self::$siteContent !== 'home' + $this->isConnected() === false + and self::$siteContent !== 'home' and $this->getData(['course', self::$siteContent, 'enrolment']) > 0 - ) { + ) { $_SESSION['ZWII_SITE_CONTENT'] = 'home'; header(header: 'Location:' . helper::baseUrl(true) . 'swap/' . self::$siteContent); exit(); @@ -573,6 +573,20 @@ class core extends common $this->getData(['page', $this->getUrl(0), 'title']); } + /** + * 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é + * + */ + if ( + $this->isConnected() === true + and self::$siteContent !== 'home' + and $this->getData(['course', self::$siteContent, 'enrolment']) > 0 + ) { + $course = new course(); + self::$userProgress = $course->userProgress(self::$siteContent, $this->getUser('id')); + } // Importe le style de la page principale $inlineStyle[] = $this->getData(['page', $this->getUrl(0), 'css']) === null ? '' : $this->getData(['page', $this->getUrl(0), 'css']); diff --git a/core/core.php b/core/core.php index f61671e..1e2f4f7 100644 --- a/core/core.php +++ b/core/core.php @@ -174,8 +174,11 @@ class common public static $dialog; // Langue de l'interface sélectionnée public static $i18nUI = 'fr_FR'; - // Langues de contenu + + // Espace, contenu sélectionné public static $siteContent = 'home'; + // Progression d'un participant + public static $userProgress = ''; public static $languages = [ 'de' => 'Deutsch', diff --git a/core/module/course/course.php b/core/module/course/course.php index 7f8b905..2307d98 100644 --- a/core/module/course/course.php +++ b/core/module/course/course.php @@ -1358,6 +1358,9 @@ class course extends common // Liste des inscrits dans le contenu sélectionné. $users = $this->getData(['enrolment', $courseId]); + // Obtient les statistiques de l'ensemble de la cohorte + $reports = $this->getReport($courseId); + if (is_array($users)) { // Tri du tableau par défaut par $userId ksort($users); @@ -1388,8 +1391,8 @@ class course extends common } // Progression - $viewPages = $this->getData(['enrolment', $courseId, $userId, 'history']) !== null ? - count(array_keys($this->getData(['enrolment', $courseId, $userId, 'history']))) : + $viewPages = array_key_exists($userId, $reports) ? + count($reports[$userId]) : 0; // Construction du tableau @@ -2052,6 +2055,33 @@ class course extends common } } + + /** + * Méthode pour afficher la progression dans les espaces. + * + * @param mixed $courseId + * @param mixed $userId + * @return string Ratio de pages vues + */ + public function userProgress($courseId, $userId): string + { + + // Obtient les statistiques de l'ensemble de la cohorte + $reports = $this->getReport($courseId, $userId); + + // Nombre de pages dans l'espace + $viewPages = array_key_exists($userId, $reports) ? + count($reports[$userId]) : + 0; + // Nombre de pages vues + $sumPages = $this->countPages($this->getData(['page'])); + + // Calcule le ratio + $ratio = number_format(min(round(($viewPages * 100) / $sumPages, 1) / 100, 1), 2, ','); + + return $ratio; + } + /** * * Compte les pages d'un espace @@ -2116,7 +2146,7 @@ class course extends common /** * Lit le contenu des fichiers de traces au format CS et renvoie un tableau associatif */ - public function getReport($courseId, $userId = null) + private function getReport($courseId, $userId = null) { $data = [];