forked from ZwiiCMS-Team/ZwiiCampus
Fonctions pour récupérer les données des rapports
This commit is contained in:
parent
65029fb191
commit
ab34cb1953
135
core/core.php
135
core/core.php
@ -599,48 +599,123 @@ class common
|
||||
return file_put_contents(self::DATA_DIR . $path . '/content/' . $page . '.html', $value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Lire les données des historiques
|
||||
* @param string courseId
|
||||
* @param array $keys Clé(s) des données
|
||||
* @return array tableau demandé
|
||||
/**
|
||||
* Fonction pour obtenir les statistiques d'un utilisateur ou d'une page spécifique à partir d'un fichier JSON.
|
||||
*
|
||||
* @param string $courseId Identifiant du cours.
|
||||
* @param string|null $user Nom de l'utilisateur (facultatif).
|
||||
* @param string|null $page Nom de la page (facultatif).
|
||||
* @return mixed Statistiques demandées ou null si non trouvées.
|
||||
*/
|
||||
public function getReport($courseId, $keys = [])
|
||||
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 === []) {
|
||||
return $data['enrolment'][$courseId];
|
||||
} else {
|
||||
// Récupérer la première clé
|
||||
$result = $data['enrolment'][$courseId][$keys[0]];
|
||||
// Si aucun utilisateur n'est spécifié, retourner toutes les statistiques
|
||||
if ($user === null) {
|
||||
return $data['report'];
|
||||
}
|
||||
|
||||
// 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
|
||||
* @param string pageId
|
||||
* @param string contenu de la page
|
||||
* @return int nombre d'octets écrits ou erreur
|
||||
* Fonction pour écrire les données de statistiques dans un fichier JSON.
|
||||
*
|
||||
* @param string $courseId Identifiant du cours.
|
||||
* @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
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
@ -48,10 +48,3 @@ if (
|
||||
$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) {
|
||||
// Vérifier si l'utilisateur a un historique
|
||||
if (
|
||||
isset($userData["history"])
|
||||
&& isset($userData['history'][$this->getUrl(2)])
|
||||
is_array($userData)
|
||||
&& array_key_exists($userId, $userData)
|
||||
) {
|
||||
// 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->deleteData(['report', $userId,$this->getUrl(2)]);
|
||||
$this->deleteReport(self::$siteContent, [$userId,$this->getUrl(2)]);
|
||||
}
|
||||
// Mettre à jour la dernière page vue si nécessaire
|
||||
if ($this->getData(['enrolment', self::$siteContent, $userId, 'lastPageView']) === $this->getUrl(2)) {
|
||||
|
Loading…
Reference in New Issue
Block a user