Fach- und Themendaten umstrukturiert

This commit is contained in:
Matthias Grief
2024-12-05 17:49:41 +01:00
committed by Eric Blommel
parent 294260c019
commit 7a146d8982
3 changed files with 63 additions and 14 deletions

View File

@@ -0,0 +1,51 @@
<?php
/**
* Konfigurationsdaten
*/
class Config
{
/**
* @return string Verzeichnis für generelle Konfigurationsdaten
*/
public static function getConfigDirectory(): string
{
return "config/";
}
/**
* @return string Verzeichnis für Fächer
*/
public static function getSubjectsDirectory(): string
{
return self::getConfigDirectory() . "subjects/";
}
/**
* @param string $subjectId ID des Faches
* @return string Verzeichnis des Faches
*/
public static function getSubjectDirectory(string $subjectId): string
{
return self::getSubjectsDirectory() . $subjectId . "/";
}
/**
* @param string $subjectId ID des Faches
* @return string Verzeichnis der Themen des Faches
*/
public static function getTopicsDirectory(string $subjectId): string
{
return self::getSubjectDirectory($subjectId) . "topics/";
}
/**
* @param string $subjectId ID des Faches
* @param string $topicId ID des Themas
* @return string Verzeichnis des Themas
*/
public static function getTopicDirectory(string $subjectId, string $topicId): string
{
return self::getTopicsDirectory($subjectId) . $topicId . "/";
}
}

View File

@@ -1,9 +1,10 @@
<?php <?php
require_once("Config.php");
require_once("Util.php"); require_once("Util.php");
require_once("TopicData.php"); require_once("TopicData.php");
/** /**
* Stellt alle relevanten Daten für ein einzeles Fach bereit * Stellt alle relevanten Daten für ein einzelnes Fach bereit
* *
*/ */
class SubjectData class SubjectData
@@ -47,8 +48,7 @@ class SubjectData
{ {
$result = array(); $result = array();
$subjectDirectory = "config/subjects"; $subjectNames = scandir(Config::getSubjectsDirectory());
$subjectNames = scandir($subjectDirectory);
usort($subjectNames, function ($a, $b) { usort($subjectNames, function ($a, $b) {
return strcmp($a, $b); return strcmp($a, $b);
@@ -79,10 +79,11 @@ class SubjectData
{ {
$result = new SubjectData(); $result = new SubjectData();
$subjectId = Util::removeIllegalCharacters($subjectId); if (Util::containsIllegalCharacters($subjectId)) {
return null;
}
$subjectDirectory = "config/subjects/$subjectId"; $filename = Config::getSubjectDirectory($subjectId) . "properties.json";
$filename = "$subjectDirectory/properties.json";
$data = Util::parseJsonFromFile($filename); $data = Util::parseJsonFromFile($filename);
if (!isset($data)) { if (!isset($data)) {
return null; return null;

View File

@@ -1,4 +1,5 @@
<?php <?php
require_once("Config.php");
require_once("Util.php"); require_once("Util.php");
class TopicData class TopicData
@@ -52,8 +53,7 @@ class TopicData
{ {
$result = array(); $result = array();
$topicDirectory = "config/subjects/$subjectId/topics"; $topicNames = scandir(Config::getTopicsDirectory($subjectId));
$topicNames = scandir($topicDirectory);
usort($topicNames, function ($a, $b) { usort($topicNames, function ($a, $b) {
return strcmp($a, $b); return strcmp($a, $b);
@@ -87,9 +87,7 @@ class TopicData
$subjectId = Util::removeIllegalCharacters($subjectId); $subjectId = Util::removeIllegalCharacters($subjectId);
$topicId = Util::removeIllegalCharacters($topicId); $topicId = Util::removeIllegalCharacters($topicId);
$topicsDirectory = "config/subjects/$subjectId/topics"; $data = Util::parseJsonFromFile(Config::getTopicDirectory($subjectId, $topicId) . "properties.json");
$topicDataDirectory = "$topicsDirectory/$topicId";
$data = Util::parseJsonFromFile("$topicDataDirectory/properties.json");
if (!isset($data)) { if (!isset($data)) {
return null; return null;
} }
@@ -126,15 +124,14 @@ class TopicData
$result->files = array(); $result->files = array();
} }
$article = Util::readFileContent("$topicDataDirectory/article.html"); $article = Util::readFileContent(Config::getTopicDirectory($subjectId, $topicId) . "article.html");
if (!isset($article)) { if (!isset($article)) {
$article = "Kein Erklärtext vorhanden"; $article = "Kein Erklärtext vorhanden";
} }
$article = str_replace('$TOPICPATH', $topicDataDirectory, $article); $article = str_replace('$TOPICPATH', Config::getTopicDirectory($subjectId, $topicId), $article);
$result->article = $article; $result->article = $article;
return $result; return $result;
} }
} }