1.15 Nouveu calcule de la progression dans un espace

This commit is contained in:
Fred Tempez 2024-12-06 18:20:36 +01:00
parent 7d8d0d7a18
commit 124aeeeb98
5 changed files with 51 additions and 40 deletions

View File

@ -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é.

View File

@ -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);

View File

@ -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 ]);
}*/
}
/**

View File

@ -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/';

View File

@ -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