Fonctions pour récupérer les données des rapports

This commit is contained in:
Fred Tempez 2024-04-04 15:36:05 +02:00
parent 65029fb191
commit ab34cb1953
3 changed files with 113 additions and 45 deletions

View File

@ -599,49 +599,124 @@ class common
return file_put_contents(self::DATA_DIR . $path . '/content/' . $page . '.html', $value); return file_put_contents(self::DATA_DIR . $path . '/content/' . $page . '.html', $value);
} }
/* /**
* Lire les données des historiques * Fonction pour obtenir les statistiques d'un utilisateur ou d'une page spécifique à partir d'un fichier JSON.
* @param string courseId *
* @param array $keys Clé(s) des données * @param string $courseId Identifiant du cours.
* @return array tableau demandé * @param string|null $user Nom de l'utilisateur (facultatif).
*/ * @param string|null $page Nom de la page (facultatif).
public function getReport($courseId, $keys = []) * @return mixed Statistiques demandées ou null si non trouvées.
*/
public function getReport($courseId, $user = null, $page = null)
{ {
$data = json_decode(file_get_contents(self::DATA_DIR . $courseId . '/' . 'enrolment.json'), true); // Lire les données du fichier JSON
$data = json_decode(file_get_contents(self::DATA_DIR . $courseId . '/report.json'), true);
if ($keys === []) { // Si aucun utilisateur n'est spécifié, retourner toutes les statistiques
return $data['enrolment'][$courseId]; if ($user === null) {
} else { return $data['report'];
// Récupérer la première clé
$result = $data['enrolment'][$courseId][$keys[0]];
// Parcourir les clés restantes pour naviguer dans la structure
for ($i = 1; $i < count($keys); $i++) {
// Vérifier si la clé existe
if (isset($result[$keys[$i]])) {
// Déplacer le pointeur
$result = $result[$keys[$i]];
} else {
// Si la clé n'existe pas, retourner null
return null;
}
}
return $result;
} }
// Si un utilisateur est spécifié mais pas de page, retourner les statistiques de cet utilisateur
if ($page === null) {
return isset($data['report'][$user]) ? $data['report'][$user] : null;
}
// Si à la fois un utilisateur et une page sont spécifiés, retourner les statistiques de cette page pour cet utilisateur
return isset($data['report'][$user][$page]) ? $data['report'][$user][$page] : null;
} }
/** /**
* Ecrire les données de statistiques * Fonction pour écrire les données de statistiques dans un fichier JSON.
* @param string pageId *
* @param string contenu de la page * @param string $courseId Identifiant du cours.
* @return int nombre d'octets écrits ou erreur * @param string $user Nom de l'utilisateur.
* @param string $page Nom de la page.
* @param int|null $timestamp Timestamp de la visite (facultatif).
* @return int|false Le nombre d'octets écrits ou false en cas d'erreur.
*/ */
public function setReport($courseId, $keys = []) public function setReport($courseId, $user, $page, $timestamp = null)
{ {
return file_put_contents(self::DATA_DIR . $courseId . '/enrolment.json', json_encode($keys, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); // Lire les données existantes du fichier
$data = json_decode(file_get_contents(self::DATA_DIR . $courseId . '/report.json'), true);
// Pointeur pour naviguer dans la structure
$pointer =& $data['report'];
// Si la clé utilisateur n'existe pas, la créer
if (!isset($pointer[$user])) {
$pointer[$user] = [];
}
// Si une date est fournie, l'ajouter, sinon ajouter une visite sans date
if ($timestamp !== null) {
// Ajouter la visite avec la date
$pointer[$user][$page][] = $timestamp;
} else {
// Ajouter une visite sans date
$pointer[$user][$page][] = time(); // Timestamp actuel
}
// Écrire les données modifiées dans le fichier
return file_put_contents(self::DATA_DIR . $courseId . '/report.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
} }
/**
* Fonction pour supprimer toutes les statistiques, les statistiques d'un utilisateur spécifique
* ou les statistiques d'une page spécifique pour tous les utilisateurs.
*
* @param string $courseId Identifiant du cours.
* @param string|null $user Nom de l'utilisateur à supprimer (facultatif).
* @param string|null $page Nom de la page à supprimer (facultatif).
* @return bool Retourne true si les statistiques ont été supprimées avec succès, sinon false.
*/
public function deleteReport($courseId, $user = null, $page = null)
{
// Lire les données existantes du fichier
$data = json_decode(file_get_contents(self::DATA_DIR . $courseId . '/report.json'), true);
$deleted = false; // Variable pour suivre si des statistiques ont été supprimées
// Si aucun utilisateur ni page n'est spécifié, supprimer toutes les statistiques
if ($user === null && $page === null) {
unset($data['report']);
$deleted = true;
} elseif ($user !== null && $page === null) {
// Si un utilisateur est spécifié mais pas de page, supprimer les statistiques de cet utilisateur
if (isset($data['report'][$user])) {
unset($data['report'][$user]);
$deleted = true;
}
} elseif ($user !== null && $page !== null) {
// Si à la fois un utilisateur et une page sont spécifiés, supprimer la page pour cet utilisateur
if (isset($data['report'][$user][$page])) {
unset($data['report'][$user][$page]);
$deleted = true;
}
} elseif ($user === null && $page !== null) {
// Si une page est spécifiée mais pas d'utilisateur, supprimer la page pour tous les utilisateurs
foreach ($data['report'] as $username => &$userStats) {
if (isset($userStats[$page])) {
unset($userStats[$page]);
// Si l'utilisateur n'a plus de pages, le supprimer également
if (empty($userStats)) {
unset($data['report'][$username]);
}
$deleted = true;
}
}
}
// Écrire les données modifiées dans le fichier si au moins une statistique a été supprimée
if ($deleted) {
return file_put_contents(self::DATA_DIR . $courseId . '/report.json', json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)) !== false;
}
return false; // Aucun utilisateur ou page spécifié, aucune action réalisée
}
/** /**
* Effacer les données de la page * Effacer les données de la page

View File

@ -48,10 +48,3 @@ if (
$this->setData(['core', 'dataVersion', 1800]); $this->setData(['core', 'dataVersion', 1800]);
} }
/*
$t = $this->getEnrolment('6571b5913e87e', ['pablorodriguez', 'history', 'les-titres-ou-headers']);
echo"<pre>";
var_dump($t);
die();
*/

View File

@ -363,13 +363,13 @@ class page extends common
foreach ($this->getReport(self::$siteContent) as $userId => $userData) { foreach ($this->getReport(self::$siteContent) as $userId => $userData) {
// Vérifier si l'utilisateur a un historique // Vérifier si l'utilisateur a un historique
if ( if (
isset($userData["history"]) is_array($userData)
&& isset($userData['history'][$this->getUrl(2)]) && array_key_exists($userId, $userData)
) { ) {
// Remplacer l'ancienne ID par la nouvelle // Remplacer l'ancienne ID par la nouvelle
$datas = $this->getReport([self::$siteContent, [ $userId, $this->getUrl(2)]]); $datas = $this->getReport(self::$siteContent, [ $userId, $this->getUrl(2)]);
$this->setReport(self::$siteContent, [$userId, $pageId, $datas]); $this->setReport(self::$siteContent, [$userId, $pageId, $datas]);
$this->deleteData(['report', $userId,$this->getUrl(2)]); $this->deleteReport(self::$siteContent, [$userId,$this->getUrl(2)]);
} }
// Mettre à jour la dernière page vue si nécessaire // Mettre à jour la dernière page vue si nécessaire
if ($this->getData(['enrolment', self::$siteContent, $userId, 'lastPageView']) === $this->getUrl(2)) { if ($this->getData(['enrolment', self::$siteContent, $userId, 'lastPageView']) === $this->getUrl(2)) {