id] = $topicData; } return $result; } /** * Gibt Themendaten zu einem bestimmten Thema eines Faches zurück * @param $subjectId string Die ID des Faches * @param $topicId string Die ID des Themas * @return TopicData|null Die Themendaten oder null, wenn das Thema nicht existiert */ public static function fromName(string $subjectId, string $topicId): TopicData|null { $result = new TopicData(); $subjectId = Util::removeIllegalCharacters($subjectId); $topicId = Util::removeIllegalCharacters($topicId); $topicsDirectory = "config/subjects/$subjectId/topics"; $topicDataDirectory = "$topicsDirectory/$topicId"; $data = Util::parseJsonFromFile("$topicDataDirectory/properties.json"); if (!isset($data)) { return null; } $result->id = $topicId; $result->subjectId = $subjectId; if (isset($data->displayName)) { $result->displayName = $data->displayName; } else { return null; } if (isset($data->icon)) { $result->icon = $data->icon; } else { return null; } if (isset($data->description)) { $result->description = $data->description; } else { return null; } if (isset($data->relatedTopics)) { $result->relatedTopics = $data->relatedTopics; } else { $result->relatedTopics = array(); } if (isset($data->files)) { $result->files = $data->files; } else { $result->files = array(); } $article = Util::readFileContent("$topicDataDirectory/article.html"); if (!isset($article)) { $article = "Kein Erklärtext vorhanden"; } $article = str_replace('$TOPICPATH', $topicDataDirectory, $article); $result->article = $article; return $result; } }