Structure améliorée d'un nouveau cours

This commit is contained in:
Fred Tempez 2023-09-11 22:39:19 +02:00
parent d2e2de164f
commit e640fefa80
5 changed files with 150 additions and 81 deletions

View File

@ -896,9 +896,9 @@ class layout extends common
// Sélecteur de cours
if ($this->getUser('group') >= self::GROUP_TEACHER) {
$leftItems .= '<li><select id="barSelectCourse" >';
$leftItems .= '<option name="' . helper::translate('Accueil') . '" value="' . helper::baseUrl() . 'course/swap/home" ' . ('home' === self::$courseContent ? 'selected' : '') . '>' . helper::translate('Accueil') . '</option>';
$leftItems .= '<option name="' . helper::translate('Accueil') . '" value="' . helper::baseUrl(true) . 'course/swap/home" ' . ('home' === self::$courseContent ? 'selected' : '') . '>' . helper::translate('Accueil') . '</option>';
foreach ($this->getData(['course']) as $key => $value) {
$leftItems .= '<option name="' . $value['shortTitle'] . '" value="' . helper::baseUrl() . 'course/swap/' . $key . '" ' . ($key === self::$courseContent ? 'selected' : '') . '>' . $value['shortTitle'] . '</option>';
$leftItems .= '<option name="' . $value['shortTitle'] . '" value="' . helper::baseUrl(true) . 'course/swap/' . $key . '" ' . ($key === self::$courseContent ? 'selected' : '') . '>' . $value['shortTitle'] . '</option>';
}
$leftItems .= '</select></li>';
}

View File

@ -83,13 +83,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' => [],
@ -223,8 +223,6 @@ class common
private $courseFiles = [
'page' => '',
'module' => '',
'course' => '',
'enrolment' => '',
];
public static $fontsWebSafe = [
@ -333,16 +331,12 @@ class common
foreach ($this->configFiles as $module => $value) {
$this->initDB($module);
}
// Les fichiers de la page d'accueil
if (self::$courseContent === 'home') {
$this->initDB('page', self::$courseContent);
$this->initDB('module', self::$courseContent);
} else {
foreach ($this->courseFiles as $module => $value) {
$this->initDB($module, self::$courseContent);
}
// Les fichiers des cours
foreach ($this->courseFiles as $module => $value) {
$this->initDB($module, self::$courseContent);
}
// Installation fraîche, initialisation de la configuration inexistante
// Nécessaire pour le constructeur
if ($this->user === []) {
@ -353,15 +347,15 @@ class common
}
}
// Charge le site d'accueil
if (self::$courseContent === 'home') {
foreach ($this->courseFiles as $stageId => $item) {
if (
file_exists(self::DATA_DIR . self::$courseContent . '/' . $stageId . '.json') === false
) {
$this->saveCourse($stageId, self::$courseContent);
}
//if (self::$courseContent === 'home') {
foreach ($this->courseFiles as $stageId => $item) {
if (
file_exists(self::DATA_DIR . self::$courseContent . '/' . $stageId . '.json') === false
) {
$this->saveCourse($stageId);
}
}
//}
}
// Récupère un utilisateur connecté
@ -627,35 +621,34 @@ class common
* Données valides : page ou module
*/
public function saveCourse($module, $path)
public function saveCourse($module)
{
// Pas d'initialsiation des données de cours pour l'accueil
if (
$path === 'home' &&
($module === 'enrolment' || $module === 'course')
) {
return;
}
// Tableau avec les données vierges
require_once('core/module/install/ressource/defaultdata.php');
// L'arborescence
if (!file_exists(self::DATA_DIR . $path)) {
mkdir(self::DATA_DIR . $path, 0755);
if (!file_exists(self::DATA_DIR . self::$courseContent)) {
mkdir(self::DATA_DIR . self::$courseContent, 0755);
}
if (!file_exists(self::DATA_DIR . $path . '/content')) {
mkdir(self::DATA_DIR . $path . '/content', 0755);
if (!file_exists(self::DATA_DIR . self::$courseContent . '/content')) {
mkdir(self::DATA_DIR . self::$courseContent . '/content', 0755);
}
// Les données par défaut
$this->setData([$module, init::$siteTemplate[$module]]);
/*
* Le site d'accueil, home ne dispose pas des mêmes modèles
*/
$template = self::$courseContent === 'home' ? init::$siteTemplate :init:: $courseDefault;
// Création de page ou de module
$this->setData([$module, $template[$module]]);
// Création des pages
if ($module === 'page') {
foreach (init::$siteContent as $key => $value) {
$this->setPage($key, $value, $path);
$content = self::$courseContent === 'home' ? init::$siteContent : init::$courseContent;
foreach ($content as $key => $value) {
$this->setPage($key, $value, self::$courseContent);
}
}
common::$coreNotices[] = $module;
}

View File

@ -47,6 +47,9 @@ class course extends common
]);
}
/**
* Ajoute un nouveau cours
*/
public function add()
{
@ -55,33 +58,42 @@ class course extends common
$this->getUser('permission', __CLASS__, __FUNCTION__) === true &&
$this->isPost()
) {
$courseId = uniqid();
$this->setData([
'course',
uniqid(),
$courseId,
[
'title' => $this->getInput('courseAddTitle',helper::FILTER_STRING_SHORT, true),
'shortTitle' => $this->getInput('courseAddShortTitle',helper::FILTER_STRING_SHORT, true),
'title' => $this->getInput('courseAddTitle', helper::FILTER_STRING_SHORT, true),
'shortTitle' => $this->getInput('courseAddShortTitle', helper::FILTER_STRING_SHORT, true),
'author' => $this->getInput('courseAddAuthor'),
'description' => $this->getInput('courseAddDescription', helper::FILTER_STRING_SHORT, true),
'access' => $this->getInput('courseAddAccess'),
'openingDate' => $this->getInput('courseOpeningDate', helper::FILTER_DATETIME),
'closingDate' => $this->getInput('courseClosingDate', helper::FILTER_DATETIME),
'access' => $this->getInput('courseAddAccess'),
'openingDate' => $this->getInput('courseOpeningDate', helper::FILTER_DATETIME),
'closingDate' => $this->getInput('courseClosingDate', helper::FILTER_DATETIME),
'enrolment' => $this->getInput('courseAddEnrolment'),
'enrolmentKey' => $this->getInput('courseAddEnrolmentKey'),
]
]);
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'course',
'notification' => helper::translate('Cours créé'),
'state' => true
]);
// Créer la structure de données
mkdir(self::DATA_DIR . $courseId);
// BDD des inscrits
file_put_contents(self::DATA_DIR . $courseId . '/enrolment.json', json_encode(array()));
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl() . 'course',
'notification' => helper::translate('Cours créé'),
'state' => true
]);
}
// Liste des enseignants pour le sélecteur d'auteurs
$teachers = $this->getData(['user']);
foreach ($teachers as $teacherId => $teacherInfo) {
if ( $teacherInfo["group"] >= 2 ) {
if ($teacherInfo["group"] >= 2) {
self::$courseTeachers[$teacherId] = $teacherInfo["firstname"] . ' ' . $teacherInfo["lastname"];
}
}
@ -93,27 +105,28 @@ class course extends common
]);
}
/*
* Traitement du changement de langue
* Fonction utilisée par le noyau
*/
public function swap()
{
// Cours sélectionnée
$courseId = $this->getUrl(2);
/*
* Traitement du changement de langue
* Fonction utilisée par le noyau
*/
public function swap()
{
// Cours sélectionnée
$courseId = $this->getUrl(2);
if (
// home n'est pas présent dans la base de donénes des cours
$courseId === 'home' ||
( is_dir(self::DATA_DIR . $courseId) &&
$this->getData(['course', $courseId]))
) {
// Stocker la sélection
$_SESSION['ZWII_COURSE'] = $courseId;
}
if (
is_dir(self::DATA_DIR . $courseId) &&
$this->getData(['course', $courseId])
) {
// Stocker la sélection
$_SESSION['ZWII_COURSE'] = $courseId;
}
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl()
]);
}
// Valeurs en sortie
$this->addOutput([
'redirect' => helper::baseUrl()
]);
}
}

View File

@ -666,9 +666,10 @@ class init extends common
'permanent' => true,
'comment' => 'Contrôle total',
]
],
],
'course' => []
];
public static $siteTemplate = [
'page' => [
'accueil' => [
@ -693,6 +694,9 @@ class init extends common
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => false,
'hideMenuChildren' => false,
@ -721,6 +725,9 @@ class init extends common
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => false,
'hideMenuChildren' => false,
@ -749,6 +756,9 @@ class init extends common
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => false,
'hideMenuHead' => false,
@ -778,6 +788,9 @@ class init extends common
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => true,
'hideMenuHead' => true,
@ -807,6 +820,9 @@ class init extends common
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => false,
'hideMenuChildren' => false,
@ -835,6 +851,9 @@ class init extends common
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => false,
'hideMenuChildren' => false,
@ -953,4 +972,48 @@ class init extends common
]
];
public static $courseDefault = [
'page' => [
'accueil' => [
'typeMenu' => 'text',
'iconUrl' => '',
'disable' => false,
'content' => 'accueil.html',
'hideTitle' => false,
'homePageId' => true,
'breadCrumb' => false,
'metaDescription' => '',
'metaTitle' => '',
'moduleId' => '',
'modulePosition' => 'bottom',
'parentPageId' => '',
'position' => 1,
'group' => self::GROUP_VISITOR,
'profil' => 0,
'targetBlank' => false,
'title' => 'Accueil',
'shortTitle' => 'Accueil',
'block' => '12',
'barLeft' => '',
'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none',
'hideMenuSide' => false,
'hideMenuChildren' => false,
'extraPosition' => false,
'css' => '',
'js' => ''
],
],
'module' => []
];
public static $courseContent = [
'accueil' => [
'content' => '<h2>Bienvenue sur votre nouveau Cours !</h2>'
],
];
}

View File

@ -2,7 +2,7 @@ course/id/tracking.json
fichier plat contenant :
userid, page, TS début, TS fin
course/course.json
data/course.json
BDD contenant les informations sur le cours
- courseId identifiant du cours
- title
@ -22,7 +22,7 @@ BDD contenant les informations sur le cours
- 3 manuel, le prof inscrits
- enrolmentKey clé d'inscription, si non vide
course/enrolment.json
data/course/enrolment.json
Détermine la liste des inscrits
- userid
- userGroup