fonctions pour déterminer si les conditions d'accès et d'inscription sont réalisées.

This commit is contained in:
Fred Tempez 2023-09-20 22:02:42 +02:00
parent eb109328d9
commit d7623cd1f5
2 changed files with 95 additions and 35 deletions

View File

@ -50,7 +50,7 @@ class common
const ACCESS_TIMER = 1800;
// Numéro de version
const ZWII_VERSION = '0.0.01';
const ZWII_VERSION = '1.0.00';
// URL autoupdate
const ZWII_UPDATE_URL = 'https://forge.chapril.org/ZwiiCMS-Team/update/raw/branch/master/';
@ -59,6 +59,18 @@ class common
// Valeurs possibles multiple de 10, 10 autorise 9 profils, 100 autorise 99 profils
const MAX_PROFILS = 10;
// Constantes pour les cours
// Modalités d'ouverture
const COURSE_ACCESS_OPEN = 0;
const COURSE_ACCESS_DATE = 1;
const COURSE_ACCESS_CLOSE = 2;
// Modalités d'inscription
const COURSE_ENROLMENT_GUEST = 0;
const COURSE_ENROLMENT_SELF = 1; // Ouvert à tous les membres
const COURSE_ENROLMENT_SELF_KEY = 2; // Ouvert à tous les membres disposant de la clé
const COURSE_ENROLMENT_MANUAL = 3;
public static $actions = [];
public static $coreModuleIds = [
@ -83,13 +95,13 @@ class common
'user'
];
/*
Cette variable est supprimée du test dans le routeur.
public static $accessExclude = [
'login',
'logout',
'maintenance',
];
*/
Cette variable est supprimée du test dans le routeur.
public static $accessExclude = [
'login',
'logout',
'maintenance',
];
*/
private $data = [];
private $hierarchy = [
'all' => [],
@ -1443,7 +1455,74 @@ class common
default:
return null;
}
}
/**
* Autorise l'accès à un cours
* @param @return bool le user a le droit d'entrée dans le cours
* @param string $userId identifiant de l'utilisateur
* @param string $courseId identifiant du cours sollicité
*/
public function courseUserEnrolment($courseId, $userId)
{
// Modalité d'ouverture du cours
// L'utilisateur n'est pas admin
switch ($this->getData(['user', $userId, 'group'])) {
case self::GROUP_ADMIN:
return true;
case self::GROUP_TEACHER:
return ($userId === $this->getData(['enrolment', $courseId, 'teacher']));
case self::GROUP_STUDENT:
return (
// Le cours est-il ouvert ?
$this->courseAccess($courseId) &&
// L'étudiant est isncrits ?
array_search($userId, $this->getData(['enrolment', $courseId, 'students']))
);
case self::GROUP_VISITOR:
// Le cours est-il ouvert ?
return (
$this->courseAccess($courseId) &&
$this->getData(['course', $courseId, 'enrolment']) === self::COURSE_ENROLMENT_GUEST
);
default:
return false;
}
if ($this->getData(['user', $userId, 'group']) < self::GROUP_ADMIN) {
if (
// le cours est fermé
$this->getData(['course', $courseId, 'access']) === self::COURSE_ACCESS_CLOSE
||
// Le cours ets ouvert entre deux dates
($this->getData(['course', $courseId, 'access']) &&
($this->getData(['course', $courseId, 'openingDate']) >= time() ||
$this->getData(['course', $courseId, 'clodingDate']) <= time())
)
) {
return;
}
}
}
/**
* Autorise l'accès à un cours
* @param @return bool le user a le droit d'entrée dans le cours
* @param string $courseId identifiant du cours sollicité
*/
public function courseAccess($courseId)
{
$access = $this->getData(['course', $courseId, 'access']);
switch ($access) {
case self::COURSE_ACCESS_OPEN:
return true;
case self::COURSE_ACCESS_DATE:
return (
time() >= $this->getData(['course', $courseId, 'openingDate']) &&
time() <= $this->getData(['course', $courseId, 'closingDate'])
);
case self::COURSE_ACCESS_CLOSE:
return false;
}
}
}

View File

@ -25,25 +25,23 @@ class course extends common
];
public static $courseAccess = [
0 => 'Ouvert',
1 => 'Période d\'ouverture',
2 => 'Fermé',
self::COURSE_ACCESS_OPEN => 'Ouvert',
self::COURSE_ACCESS_DATE => 'Période d\'ouverture',
self::COURSE_ACCESS_CLOSE => 'Fermé',
];
public static $courseEnrolment = [
0 => 'Anonyme',
1 => 'Auto-inscrition libre',
2 => 'Auto-inscription avec clé',
3 => 'Manuelle'
self::COURSE_ENROLMENT_GUEST => 'Anonyme',
self::COURSE_ENROLMENT_SELF => 'Auto-inscrition libre',
self::COURSE_ENROLMENT_SELF_KEY => 'Auto-inscription avec clé',
self::COURSE_ENROLMENT_MANUAL => 'Manuelle'
];
public static $courseTeachers = [];
public static $courses = [];
const COURSE_ACCESS_OPEN = 0;
const COURSE_ACCESS_DATE = 0;
const COURSE_ACCESS_CLOSE = 0;
public function index()
{
@ -245,23 +243,6 @@ class course extends common
// Cours sélectionnée
$courseId = $this->getUrl(2);
// Modalité d'ouverture du cours
// L'utilisateur n'est pas admin
if ($this->getUser('group') < self::GROUP_ADMIN) {
if (
// le cours est fermé
$this->getData(['course', $courseId, 'access']) === self::COURSE_ACCESS_CLOSE
||
// Le cours ets ouvert entre deux dates
($this->getData(['course', $courseId, 'access']) &&
($this->getData(['course', $courseId, 'openingDate']) >= time() ||
$this->getData(['course', $courseId, 'clodingDate']) <= time())
)
) {
return;
}
}
if (
// home n'est pas présent dans la base de donénes des cours
$courseId === 'home' ||