forked from ZwiiCMS-Team/ZwiiCampus
Fonctions pour récupérer les données des rapports
This commit is contained in:
parent
65029fb191
commit
ab34cb1953
139
core/core.php
139
core/core.php
@ -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
|
||||||
|
@ -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();
|
|
||||||
*/
|
|
@ -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)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user