Interface de gestion des abonnements

This commit is contained in:
Fred Tempez 2024-04-03 18:22:05 +02:00
parent 0eede10300
commit 0b14519567
3 changed files with 111 additions and 71 deletions

View File

@ -143,7 +143,6 @@ class JsonDb extends \Prowebcraft\Dot
public function save() public function save()
{ {
$v = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT ); $v = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT );
// $v = json_encode($this->data, JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT);
$l = strlen($v); $l = strlen($v);
$t = 0; $t = 0;
while ($t < 5) { while ($t < 5) {

View File

@ -447,7 +447,7 @@ class common
} }
// Mise à jour des données core // Mise à jour des données core
include('core/include/update.inc.php'); include ('core/include/update.inc.php');
} }
@ -598,11 +598,49 @@ 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);
} }
public function getEnrolment($courseId, $keys =[]) { /**
$data = json_decode(file_get_contents(self::DATA_DIR . $courseId .'.json'), true); * Lire les données des historiques
return $data[$keys[0]]; * @param string courseId
* @param array $keys Clé(s) des données
* @return array tableau demandé
*/
public function getEnrolment($courseId, $keys = [])
{
$data = json_decode(file_get_contents(self::DATA_DIR . $courseId . '/' . 'enrolment.json'), true);
if ($keys === []) {
return $data['enrolment'][$courseId];
} else {
// 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;
}
} }
/**
* Ecrire les données de statistiques
* @param string pageId
* @param string contenu de la page
* @return int nombre d'octets écrits ou erreur
*/
public function setEnrolement($courseId, $value)
{
return file_put_contents(self::DATA_DIR . $courseId . '/enrolment.json', json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
}
/** /**
* Effacer les données de la page * Effacer les données de la page
@ -638,7 +676,7 @@ class common
{ {
// Tableau avec les données vierges // Tableau avec les données vierges
require_once('core/module/install/ressource/defaultdata.php'); require_once ('core/module/install/ressource/defaultdata.php');
// L'arborescence // L'arborescence
if (!file_exists(self::DATA_DIR . $path)) { if (!file_exists(self::DATA_DIR . $path)) {
@ -673,7 +711,7 @@ class common
public function saveConfig($module) public function saveConfig($module)
{ {
// Tableau avec les données vierges // Tableau avec les données vierges
require_once('core/module/install/ressource/defaultdata.php'); require_once ('core/module/install/ressource/defaultdata.php');
// Installation des données des autres modules cad theme profil font config, admin et core // Installation des données des autres modules cad theme profil font config, admin et core
$this->setData([$module, init::$defaultData[$module]]); $this->setData([$module, init::$defaultData[$module]]);
common::$coreNotices[] = $module; common::$coreNotices[] = $module;
@ -709,65 +747,65 @@ class common
* Fonction pour construire le tableau des pages * Fonction pour construire le tableau des pages
*/ */
private function buildHierarchy() private function buildHierarchy()
{ {
$pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC'); $pages = helper::arrayColumn($this->getData(['page']), 'position', 'SORT_ASC');
// Parents // Parents
foreach ($pages as $pageId => $pagePosition) { foreach ($pages as $pageId => $pagePosition) {
if ( if (
// Page parent // Page parent
$this->getData(['page', $pageId, 'parentPageId']) === "" $this->getData(['page', $pageId, 'parentPageId']) === ""
// Ignore les pages dont l'utilisateur n'a pas accès // Ignore les pages dont l'utilisateur n'a pas accès
and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR and ($this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') or ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
//and $this->getUser('group') >= $this->getData(['page', $pageId, 'group']) //and $this->getUser('group') >= $this->getData(['page', $pageId, 'group'])
// Modification qui tient compte du profil de la page // Modification qui tient compte du profil de la page
and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil'])) and ($this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']))
) )
) )
) { ) {
if ($pagePosition !== 0) { if ($pagePosition !== 0) {
$this->hierarchy['visible'][$pageId] = []; $this->hierarchy['visible'][$pageId] = [];
} }
if ($this->getData(['page', $pageId, 'block']) === 'bar') { if ($this->getData(['page', $pageId, 'block']) === 'bar') {
$this->hierarchy['bar'][$pageId] = []; $this->hierarchy['bar'][$pageId] = [];
} }
$this->hierarchy['all'][$pageId] = []; $this->hierarchy['all'][$pageId] = [];
} }
} }
// Enfants // Enfants
foreach ($pages as $pageId => $pagePosition) { foreach ($pages as $pageId => $pagePosition) {
if ( if (
// Page parent // Page parent
$parentId = $this->getData(['page', $pageId, 'parentPageId']) $parentId = $this->getData(['page', $pageId, 'parentPageId'])
// Ignore les pages dont l'utilisateur n'a pas accès // Ignore les pages dont l'utilisateur n'a pas accès
and ( and (
( (
$this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR $this->getData(['page', $pageId, 'group']) === self::GROUP_VISITOR
and and
$this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR $this->getData(['page', $parentId, 'group']) === self::GROUP_VISITOR
) )
or ( or (
$this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD')
and and
$this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil']) $this->getUser('group') * self::MAX_PROFILS + $this->getUser('profil')) >= ($this->getData(['page', $pageId, 'group']) * self::MAX_PROFILS + $this->getData(['page', $pageId, 'profil'])
) )
) )
) { ) {
if ($pagePosition !== 0) { if ($pagePosition !== 0) {
$this->hierarchy['visible'][$parentId][] = $pageId; $this->hierarchy['visible'][$parentId][] = $pageId;
} }
if ($this->getData(['page', $pageId, 'block']) === 'bar') { if ($this->getData(['page', $pageId, 'block']) === 'bar') {
$this->hierarchy['bar'][$pageId] = []; $this->hierarchy['bar'][$pageId] = [];
} }
$this->hierarchy['all'][$parentId][] = $pageId; $this->hierarchy['all'][$parentId][] = $pageId;
} }
} }
} }
/** /**
* Génère un fichier json avec la liste des pages * Génère un fichier json avec la liste des pages
@ -1439,8 +1477,8 @@ class common
foreach ($courses as $courseId => $value) { foreach ($courses as $courseId => $value) {
// Affiche les espaces gérés par l'éditeur, les espaces où il participe et les espaces anonymes // Affiche les espaces gérés par l'éditeur, les espaces où il participe et les espaces anonymes
if ( if (
// le membre est inscrit // le membre est inscrit
( $this->getData(['enrolment', $courseId]) && array_key_exists($this->getUser('id'), $this->getData(['enrolment', $courseId])) ) ($this->getData(['enrolment', $courseId]) && array_key_exists($this->getUser('id'), $this->getData(['enrolment', $courseId])))
// Il est l'auteur // Il est l'auteur
|| $this->getUser('id') === $this->getData(['course', $courseId, 'author']) || $this->getUser('id') === $this->getData(['course', $courseId, 'author'])
// Le cours est ouvert // Le cours est ouvert
@ -1454,7 +1492,7 @@ class common
foreach ($courses as $courseId => $value) { foreach ($courses as $courseId => $value) {
// Affiche les espaces du participant et les espaces anonymes // Affiche les espaces du participant et les espaces anonymes
if ( if (
($this->getData(['enrolment', $courseId]) && array_key_exists($this->getUser('id'), $this->getData(['enrolment', $courseId])) ) ($this->getData(['enrolment', $courseId]) && array_key_exists($this->getUser('id'), $this->getData(['enrolment', $courseId])))
|| $this->getData(['course', $courseId, 'enrolment']) === self::COURSE_ENROLMENT_GUEST || $this->getData(['course', $courseId, 'enrolment']) === self::COURSE_ENROLMENT_GUEST
) { ) {
$filter[$courseId] = $courses[$courseId]; $filter[$courseId] = $courses[$courseId];

View File

@ -43,6 +43,9 @@ if (
unlink(self::DATA_DIR . 'enrolment.json'); unlink(self::DATA_DIR . 'enrolment.json');
$this->setData(['core', 'dataVersion', 1800]); $this->setData(['core', 'dataVersion', 1800]);
} }
$t = $this->getEnrolment(['65d749713a217']); /*
$t = $this->getEnrolment('6571b5913e87e', ['pablorodriguez', 'history', 'les-titres-ou-headers']);
echo"<pre>";
var_dump($t); var_dump($t);
dei(); die();
*/