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 // Sélecteur de cours
if ($this->getUser('group') >= self::GROUP_TEACHER) { if ($this->getUser('group') >= self::GROUP_TEACHER) {
$leftItems .= '<li><select id="barSelectCourse" >'; $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) { 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>'; $leftItems .= '</select></li>';
} }

View File

@ -83,13 +83,13 @@ class common
'user' 'user'
]; ];
/* /*
Cette variable est supprimée du test dans le routeur. Cette variable est supprimée du test dans le routeur.
public static $accessExclude = [ public static $accessExclude = [
'login', 'login',
'logout', 'logout',
'maintenance', 'maintenance',
]; ];
*/ */
private $data = []; private $data = [];
private $hierarchy = [ private $hierarchy = [
'all' => [], 'all' => [],
@ -223,8 +223,6 @@ class common
private $courseFiles = [ private $courseFiles = [
'page' => '', 'page' => '',
'module' => '', 'module' => '',
'course' => '',
'enrolment' => '',
]; ];
public static $fontsWebSafe = [ public static $fontsWebSafe = [
@ -333,16 +331,12 @@ class common
foreach ($this->configFiles as $module => $value) { foreach ($this->configFiles as $module => $value) {
$this->initDB($module); $this->initDB($module);
} }
// Les fichiers de la page d'accueil // Les fichiers des cours
if (self::$courseContent === 'home') { foreach ($this->courseFiles as $module => $value) {
$this->initDB('page', self::$courseContent); $this->initDB($module, self::$courseContent);
$this->initDB('module', self::$courseContent);
} else {
foreach ($this->courseFiles as $module => $value) {
$this->initDB($module, self::$courseContent);
}
} }
// Installation fraîche, initialisation de la configuration inexistante // Installation fraîche, initialisation de la configuration inexistante
// Nécessaire pour le constructeur // Nécessaire pour le constructeur
if ($this->user === []) { if ($this->user === []) {
@ -353,15 +347,15 @@ class common
} }
} }
// Charge le site d'accueil // Charge le site d'accueil
if (self::$courseContent === 'home') { //if (self::$courseContent === 'home') {
foreach ($this->courseFiles as $stageId => $item) { foreach ($this->courseFiles as $stageId => $item) {
if ( if (
file_exists(self::DATA_DIR . self::$courseContent . '/' . $stageId . '.json') === false file_exists(self::DATA_DIR . self::$courseContent . '/' . $stageId . '.json') === false
) { ) {
$this->saveCourse($stageId, self::$courseContent); $this->saveCourse($stageId);
}
} }
} }
//}
} }
// Récupère un utilisateur connecté // Récupère un utilisateur connecté
@ -627,35 +621,34 @@ class common
* Données valides : page ou module * 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 // 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 . self::$courseContent)) {
mkdir(self::DATA_DIR . $path, 0755); mkdir(self::DATA_DIR . self::$courseContent, 0755);
} }
if (!file_exists(self::DATA_DIR . $path . '/content')) { if (!file_exists(self::DATA_DIR . self::$courseContent . '/content')) {
mkdir(self::DATA_DIR . $path . '/content', 0755); 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
// Création des pages */
$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') { if ($module === 'page') {
foreach (init::$siteContent as $key => $value) { $content = self::$courseContent === 'home' ? init::$siteContent : init::$courseContent;
$this->setPage($key, $value, $path); foreach ($content as $key => $value) {
$this->setPage($key, $value, self::$courseContent);
} }
} }
common::$coreNotices[] = $module; common::$coreNotices[] = $module;
} }

View File

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

View File

@ -666,9 +666,10 @@ class init extends common
'permanent' => true, 'permanent' => true,
'comment' => 'Contrôle total', 'comment' => 'Contrôle total',
] ]
], ],
'course' => [] 'course' => []
]; ];
public static $siteTemplate = [ public static $siteTemplate = [
'page' => [ 'page' => [
'accueil' => [ 'accueil' => [
@ -693,6 +694,9 @@ class init extends common
'block' => '12', 'block' => '12',
'barLeft' => '', 'barLeft' => '',
'barRight' => '', 'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none', 'displayMenu' => 'none',
'hideMenuSide' => false, 'hideMenuSide' => false,
'hideMenuChildren' => false, 'hideMenuChildren' => false,
@ -721,6 +725,9 @@ class init extends common
'block' => '12', 'block' => '12',
'barLeft' => '', 'barLeft' => '',
'barRight' => '', 'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none', 'displayMenu' => 'none',
'hideMenuSide' => false, 'hideMenuSide' => false,
'hideMenuChildren' => false, 'hideMenuChildren' => false,
@ -749,6 +756,9 @@ class init extends common
'block' => '12', 'block' => '12',
'barLeft' => '', 'barLeft' => '',
'barRight' => '', 'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none', 'displayMenu' => 'none',
'hideMenuSide' => false, 'hideMenuSide' => false,
'hideMenuHead' => false, 'hideMenuHead' => false,
@ -778,6 +788,9 @@ class init extends common
'block' => '12', 'block' => '12',
'barLeft' => '', 'barLeft' => '',
'barRight' => '', 'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none', 'displayMenu' => 'none',
'hideMenuSide' => true, 'hideMenuSide' => true,
'hideMenuHead' => true, 'hideMenuHead' => true,
@ -807,6 +820,9 @@ class init extends common
'block' => '12', 'block' => '12',
'barLeft' => '', 'barLeft' => '',
'barRight' => '', 'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none', 'displayMenu' => 'none',
'hideMenuSide' => false, 'hideMenuSide' => false,
'hideMenuChildren' => false, 'hideMenuChildren' => false,
@ -835,6 +851,9 @@ class init extends common
'block' => '12', 'block' => '12',
'barLeft' => '', 'barLeft' => '',
'barRight' => '', 'barRight' => '',
'navLeft' => 'none',
'navRight' => 'none',
'navTemplate' => 'dir',
'displayMenu' => 'none', 'displayMenu' => 'none',
'hideMenuSide' => false, 'hideMenuSide' => false,
'hideMenuChildren' => 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 : fichier plat contenant :
userid, page, TS début, TS fin userid, page, TS début, TS fin
course/course.json data/course.json
BDD contenant les informations sur le cours BDD contenant les informations sur le cours
- courseId identifiant du cours - courseId identifiant du cours
- title - title
@ -22,7 +22,7 @@ BDD contenant les informations sur le cours
- 3 manuel, le prof inscrits - 3 manuel, le prof inscrits
- enrolmentKey clé d'inscription, si non vide - enrolmentKey clé d'inscription, si non vide
course/enrolment.json data/course/enrolment.json
Détermine la liste des inscrits Détermine la liste des inscrits
- userid - userid
- userGroup - userGroup