This commit is contained in:
Fred Tempez 2023-09-08 10:12:23 +02:00
parent 5814ac1442
commit 6229ea4478
4 changed files with 147 additions and 70 deletions

View File

@ -82,13 +82,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' => [],
@ -205,6 +205,25 @@ class common
'profil' => '', 'profil' => '',
]; ];
private $configFiles = [
'admin' => '',
'blacklist' => '',
'config' => '',
'core' => '',
'font' => '',
'theme' => '',
'user' => '',
'language' => '',
'profil' => '',
];
private $courseFiles = [
'page' => '',
'module' => '',
'course' => '',
'enrolment' => '',
];
public static $fontsWebSafe = [ public static $fontsWebSafe = [
'arial' => [ 'arial' => [
'name' => 'Arial', 'name' => 'Arial',
@ -270,19 +289,19 @@ class common
// Boutons de navigation dans la page // Boutons de navigation dans la page
public static $navIconTemplate = [ public static $navIconTemplate = [
'open' => [ 'open' => [
'left' => 'left-open', 'left' => 'left-open',
'right' => 'right-open', 'right' => 'right-open',
], ],
'dir' => [ 'dir' => [
'left' => 'left', 'left' => 'left',
'right' => 'right-dir', 'right' => 'right-dir',
], ],
'big' => [ 'big' => [
'left' => 'left-big', 'left' => 'left-big',
'right' => 'right-big', 'right' => 'right-big',
], ],
]; ];
/** /**
* Constructeur commun * Constructeur commun
@ -308,16 +327,33 @@ class common
} }
// Instanciation de la classe des entrées / sorties // Instanciation de la classe des entrées / sorties
$this->jsonDB(self::$courseContent); // Les fichiers de configuration
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);
}
}
// Installation fraîche, initialisation des modules // Installation fraîche, initialisation de la configuration inexistante
if ($this->user === []) { if ($this->user === []) {
foreach ($this->dataFiles as $stageId => $item) { // Charge la configuration
$folder = $this->dataPath($stageId, self::$courseContent); foreach ($this->configFiles as $stageId => $item) {
if ( if (file_exists(self::DATA_DIR . $stageId . '.json') === false) {
file_exists($folder . $stageId . '.json') === false $this->loadConfig($stageId);
) { common::$coreNotices[] = $stageId;
$this->initData($stageId, self::$courseContent); }
}
// Charge le site d'accueil
foreach ($this->courseFiles as $stageId => $item) {
if (file_exists(self::DATA_DIR . self::$courseContent . '/' . $stageId . '.json') === false) {
$this->loadCourse($stageId, self::$courseContent);
common::$coreNotices[] = $stageId; common::$coreNotices[] = $stageId;
} }
} }
@ -549,10 +585,10 @@ class common
* @param string contenu de la page * @param string contenu de la page
* @return int nombre d'octets écrits ou erreur * @return int nombre d'octets écrits ou erreur
*/ */
public function setPage($page, $value, $course) public function setPage($page, $value, $path)
{ {
return file_put_contents(self::DATA_DIR . $course . '/content/' . $page . '.html', $value); return file_put_contents(self::DATA_DIR . $path . '/content/' . $page . '.html', $value);
} }
@ -569,56 +605,65 @@ class common
} }
public function jsonDB($course) public function initDB($module, $path = '')
{ {
// Instanciation de la classe des entrées / sorties // Instanciation de la classe des entrées / sorties
// Récupère les descripteurs // Constructeur JsonDB;
foreach ($this->dataFiles as $keys => $value) { $this->dataFiles[$module] = new \Prowebcraft\JsonDb([
// Constructeur JsonDB; 'name' => $module . '.json',
$this->dataFiles[$keys] = new \Prowebcraft\JsonDb([ 'dir' => self::DATA_DIR . $path,
'name' => $keys . '.json', 'backup' => file_exists('site/data/.backup')
'dir' => $this->dataPath($keys, $course), ]);
'backup' => file_exists('site/data/.backup')
]);
}
} }
/** /**
* Initialisation des données * Initialisation des données sur un cours ou la page d'accueil
* @param string $module : nom du module à générer * @param string $course : id du module à générer
* @param string $course le dossier à créer, nom du cours * @param string $path : le dossier à créer
* choix valides : core config user theme page module * Données valides : page ou module
*/ */
public function initData($module, $course)
public function loadCourse($module, $path = 'home')
{ {
// 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');
if (!file_exists(self::DATA_DIR . $course)) { // L'arborescence
mkdir(self::DATA_DIR . $course, 0755); if (!file_exists(self::DATA_DIR . $path)) {
mkdir(self::DATA_DIR . $path, 0755);
}
if (!file_exists(self::DATA_DIR . $path . '/content')) {
mkdir(self::DATA_DIR . $path . '/content', 0755);
}
// Les données par défaut
$this->setData([$module, init::$siteTemplate[$module]]);
// Création des pages
if ($module === 'page') {
foreach (init::$siteContent as $key => $value) {
$this->setPage($key, $value, $path);
}
} }
if (
$module === 'page' || }
$module === 'module' /**
) { * Initialisation des données
// Création des sous-dossiers localisés * @param string $module : if du module à générer
if (!file_exists(self::DATA_DIR . $course)) { * choix valides : core config user theme page module
mkdir(self::DATA_DIR . $course, 0755); */
} public function loadConfig($module)
if (!file_exists(self::DATA_DIR . $course . '/content')) { {
mkdir(self::DATA_DIR . $course . '/content', 0755); // Tableau avec les données vierges
} require_once('core/module/install/ressource/defaultdata.php');
$this->setData([$module, init::$siteTemplate[$module]]); // Installation des données des autres modules cad theme profil font config, admin et core
// Création des pages $this->setData([$module, init::$defaultData[$module]]);
foreach (init::$siteContent as $key => $value) {
$this->setPage($key, $value, $course);
}
//file_put_contents(self::DATA_DIR . $course . '/content/' . init::$defaultDataI18n[$courseDefault]['page'][$pageId]['content'], $content);
} else {
// Installation des données des autres modules cad theme profil font config, admin et core
$this->setData([$module, init::$defaultData[$module]]);
}
} }
@ -941,7 +986,7 @@ class common
// Sauf pour les pages et les modules // Sauf pour les pages et les modules
if ( if (
$id === 'page' || $id === 'page' ||
$id === 'module' $id === 'module'
) { ) {
$folder = self::DATA_DIR . $course . '/'; $folder = self::DATA_DIR . $course . '/';
} else { } else {

View File

@ -0,0 +1,29 @@
<?php
/**
* This file is part of Zwii.
* For full copyright and license information, please see the LICENSE
* file that was distributed with this source code.
*
* @author Rémi Jean <remi.jean@outlook.com>
* @copyright Copyright (C) 2008-2018, Rémi Jean
* @author Frédéric Tempez <frederic.tempez@outlook.com>
* @copyright Copyright (C) 2018-2023, Frédéric Tempez
* @license CC Attribution-NonCommercial-NoDerivatives 4.0 International
* @link http://zwiicms.fr/
*/
class dashboard extends common
{
public static $actions = [
'index' => self::GROUP_ADMIN,
];
public function index()
{
}
}

View File

@ -877,6 +877,9 @@ class init extends common
] ]
] ]
], ],
'course' => [],
'enrolment' => [],
]; ];
public static $siteContent = [ public static $siteContent = [

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/content.json course/course.json
BDD contenant les informations sur le cours BDD contenant les informations sur le cours
- courseId identifiant du cours - courseId identifiant du cours
- enrolmentKey clé d'inscription, si non vide - enrolmentKey clé d'inscription, si non vide