Compare commits

...

5 Commits

4 changed files with 79 additions and 13 deletions

View File

@ -1,4 +1,4 @@
# ZwiiCampus 1.14.00 # ZwiiCampus 1.14.05
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é. 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é.

View File

@ -519,6 +519,22 @@ class core extends common
header(header: 'Location:' . helper::baseUrl(true) . 'swap/' . self::$siteContent); header(header: 'Location:' . helper::baseUrl(true) . 'swap/' . self::$siteContent);
exit(); 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();
self::$userProgress = $course->userProgress(self::$siteContent, $this->getUser('id'));
$this->setData(['enrolment', self::$siteContent, $this->getUser('id'), 'progress', self::$userProgress ]);
}
} }
/** /**

View File

@ -51,7 +51,7 @@ class common
const ACCESS_TIMER = 1800; const ACCESS_TIMER = 1800;
// Numéro de version // Numéro de version
const ZWII_VERSION = '1.14.04'; const ZWII_VERSION = '1.14.05';
// URL autoupdate // URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/'; const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/campus-update/raw/branch/master/';
@ -174,8 +174,11 @@ class common
public static $dialog; public static $dialog;
// Langue de l'interface sélectionnée // Langue de l'interface sélectionnée
public static $i18nUI = 'fr_FR'; public static $i18nUI = 'fr_FR';
// Langues de contenu
// Espace, contenu sélectionné
public static $siteContent = 'home'; public static $siteContent = 'home';
// Progression d'un participant
public static $userProgress = '';
public static $languages = [ public static $languages = [
'de' => 'Deutsch', 'de' => 'Deutsch',

View File

@ -734,8 +734,16 @@ class course extends common
$this->getData(['user', $userId, 'tags']), $this->getData(['user', $userId, 'tags']),
template::button('userReport' . $userId, [ template::button('userReport' . $userId, [
'href' => helper::baseUrl() . 'course/userReport/' . $courseId . '/' . $userId, 'href' => helper::baseUrl() . 'course/userReport/' . $courseId . '/' . $userId,
'value' => $viewPages ? min(round(($viewPages * 100) / $sumPages, 1), 100) . ' %' : '0%', /** La lecture de la progression s'effectue selon la nouvelle méthode (progression dans la base des enrolements)
'disable' => empty($viewPages) * Soit avec l'ancienne méthode qui consiste à recalculer la progression.
* TRANSITOIRE A SUPPRIMER EN FIN D'ANNEE
**/
'value' => array_key_exists('progress', $userValue)
? $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, [ template::button('userDelete' . $userId, [
'class' => 'userDelete buttonRed', 'class' => 'userDelete buttonRed',
@ -1358,6 +1366,9 @@ class course extends common
// Liste des inscrits dans le contenu sélectionné. // Liste des inscrits dans le contenu sélectionné.
$users = $this->getData(['enrolment', $courseId]); $users = $this->getData(['enrolment', $courseId]);
// Obtient les statistiques de l'ensemble de la cohorte
$reports = $this->getReport($courseId);
if (is_array($users)) { if (is_array($users)) {
// Tri du tableau par défaut par $userId // Tri du tableau par défaut par $userId
ksort($users); ksort($users);
@ -1388,8 +1399,8 @@ class course extends common
} }
// Progression // Progression
$viewPages = $this->getData(['enrolment', $courseId, $userId, 'history']) !== null ? $viewPages = array_key_exists($userId, $reports) ?
count(array_keys($this->getData(['enrolment', $courseId, $userId, 'history']))) : count($reports[$userId]) :
0; 0;
// Construction du tableau // Construction du tableau
@ -1402,7 +1413,14 @@ class course extends common
: $this->getData(['enrolment', $courseId, $userId, 'lastPageView']) . ' (supprimée)', : $this->getData(['enrolment', $courseId, $userId, 'lastPageView']) . ' (supprimée)',
helper::dateUTF8('%d/%d/%Y', $this->getData(['enrolment', $courseId, $userId, 'datePageView'])), helper::dateUTF8('%d/%d/%Y', $this->getData(['enrolment', $courseId, $userId, 'datePageView'])),
helper::dateUTF8('%H:%M', $this->getData(['enrolment', $courseId, $userId, 'datePageView'])), helper::dateUTF8('%H:%M', $this->getData(['enrolment', $courseId, $userId, 'datePageView'])),
number_format(min(round(($viewPages * 100) / $sumPages, 1) / 100, 1), 2, ',') /** 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
**/
array_key_exists('progress', $userValue)
? $userValue['progress']
: ($viewPages ? min(round(($viewPages * 100) / $sumPages, 1), 100) . ' %' : '0%'),
//number_format(min(round(($viewPages * 100) / $sumPages, 1) / 100, 1), 2, ','),
]; ];
// Synthèse des historiques // Synthèse des historiques
@ -2052,6 +2070,33 @@ class course extends common
} }
} }
/**
* Méthode externe 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 * Compte les pages d'un espace
@ -2076,7 +2121,9 @@ class course extends common
$courseId, $courseId,
$userId, $userId,
[ [
'history' => [], 'lastPageView' => '',
'datePageView' => '',
'progress' => '',
] ]
]); ]);
} }
@ -2116,7 +2163,7 @@ class course extends common
/** /**
* Lit le contenu des fichiers de traces au format CS et renvoie un tableau associatif * 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 = []; $data = [];