Updated ContentManager and related enums

Update .htaccess, manager.php, and 3 more files...
This commit is contained in:
2024-04-19 14:01:53 +02:00
parent c8bf68fa2d
commit 29ff221faa
5 changed files with 47 additions and 34 deletions

View File

@@ -33,6 +33,11 @@ AddType application/wasm .wasm
AddType video/x-matroska .mkv AddType video/x-matroska .mkv
AddType text/css .css AddType text/css .css
# Special case for Plik
<Files ~ "\.css?$">
Header set Content-Type "text/css; charset=utf-8"
</Files>
# Correcting some default options for security and language/content redirection. # Correcting some default options for security and language/content redirection.
# FollowSymlinks is also on since it's required for "mod_rewrite" and the server is jailed/containerized. # FollowSymlinks is also on since it's required for "mod_rewrite" and the server is jailed/containerized.

View File

@@ -9,9 +9,14 @@ if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
include_once 'commons/langs.php'; include_once 'commons/langs.php';
enum EContentDisplayType { enum EContentDisplayType {
const NONE = 0; /** No display type have or could be determined. */
const SEARCH = 1; case NONE;
const DISPLAY = 2;
/** The content index should be shown */
case SEARCH;
/** The page for a specific piece of content should be shown */
case DISPLAY;
} }
class ContentIndexEntry { class ContentIndexEntry {
@@ -47,7 +52,7 @@ class ContentIndexEntry {
} }
class ContentManager { class ContentManager {
public ContentDisplayType|int $displayType; public EContentDisplayType $displayType;
public bool $hasError; public bool $hasError;
public string $errorMessageKey; public string $errorMessageKey;
public ?string $requestedId; public ?string $requestedId;
@@ -87,7 +92,7 @@ class ContentManager {
// Doing some dark magic whose inner workings are lost to times... // Doing some dark magic whose inner workings are lost to times...
$requestedUrlPart = explode( $requestedUrlPart = explode(
"?", "?",
explode("#", preg_replace("^\/(content|tools)^", "", $requestedUrl))[0] explode("#", preg_replace("^/(content|tools)^", "", $requestedUrl))[0]
)[0]; )[0];
if(strcmp($requestedUrlPart, "/") == 0) { if(strcmp($requestedUrlPart, "/") == 0) {
@@ -177,7 +182,7 @@ class ContentManager {
/** /**
* If currently in a "EContentDisplayType::DISPLAY" context, we prepare the path to the content definition. * If currently in a "EContentDisplayType::DISPLAY" context, we prepare the path to the content definition.
* This definition must be loaded afterward depending on the content's type. (content, tool, article, ...) * This definition must be loaded afterward depending on the content's type. (content, tool, article, ...)
* @param string $rootIndexFilepath * @param string $contentRootPath
* @return void * @return void
*/ */
function prepareContentFilePath(string $contentRootPath): void { function prepareContentFilePath(string $contentRootPath): void {
@@ -189,7 +194,7 @@ class ContentManager {
} }
// Preparing and checking the content's info index file. // Preparing and checking the content's info index file.
$this->contentFilepath = get_content_file_path($contentRootPath, $this->requestedId); $this->contentFilepath = ContentManager::getContentFilePath($contentRootPath, $this->requestedId);
if(empty($this->contentFilepath)) { if(empty($this->contentFilepath)) {
// File doesn't exist ! // File doesn't exist !
@@ -197,29 +202,32 @@ class ContentManager {
$this->errorMessageKey = "content.error.message.data.not.exist"; $this->errorMessageKey = "content.error.message.data.not.exist";
} }
} }
}
/**
// Common utilities * Returns the path to the main JSON file for a desired piece of content.
function get_content_file_path(string $contentRootPath, string $contentId): ?string { * @param string $contentRootPath
if(ctype_alnum(str_replace("-", "", $contentId))) { * @param string $contentId
return realpath($contentRootPath . "/items/" . $contentId . ".json"); * @return string|null
*/
private static function getContentFilePath(string $contentRootPath, string $contentId): ?string {
if(ctype_alnum(str_replace("-", "", $contentId))) {
return realpath($contentRootPath . "/items/" . $contentId . ".json");
}
return null;
}
/**
* Prepares a ContentManager for the current page.
* @param string $contentRootPath Root path for the relevant content ("<webRoot>/content", "<webRoot>/tools", ...)
* @return ContentManager
*/
public static function createContentManager(string $contentRootPath): ContentManager {
return new ContentManager(
$contentRootPath,
l10n_url_switch(NULL),
isset($_GET['tags']) ? htmlspecialchars($_GET['tags']) : NULL
);
} }
return null;
}
// Functions for use in pages
/**
* Prepares a ContentManager for the current page.
* @param string $contentRootPath Root path for the relevant content ("<webRoot>/content", "<webRoot>/tools", ...)
* @return ContentManager
*/
function getContentManager(string $contentRootPath): ContentManager {
return new ContentManager(
$contentRootPath,
l10n_url_switch(NULL),
isset($_GET['tags']) ? htmlspecialchars($_GET['tags']) : NULL
);
} }
?> ?>

View File

@@ -9,7 +9,7 @@ include_once 'commons/langs.php';
// Preparing the content // Preparing the content
include_once 'commons/content/manager.php'; include_once 'commons/content/manager.php';
include_once 'commons/content/composer.php'; include_once 'commons/content/composer.php';
$contentManager = getContentManager($config_dir_content); $contentManager = ContentManager::createContentManager($config_dir_content);
$content = NULL; $content = NULL;
if(!$contentManager->hasError && $contentManager->displayType == EContentDisplayType::DISPLAY) { if(!$contentManager->hasError && $contentManager->displayType == EContentDisplayType::DISPLAY) {
$content = load_content_by_file_path($contentManager->contentFilepath); $content = load_content_by_file_path($contentManager->contentFilepath);

View File

@@ -39,10 +39,10 @@ include 'commons/DOM/sidebar.php';
<?php <?php
// Loading the "index.json" file for later use in the showcase. // Loading the "index.json" file for later use in the showcase.
include_once 'commons/config.php'; include_once 'commons/config.php';
include_once 'commons/content.php'; include_once 'commons/content/manager.php';
$contentManager = getContentManager($config_dir_content); $contentManager = ContentManager::createContentManager($config_dir_content);
$content = NULL; $content = NULL;
if(!$contentManager->hasError && $contentManager->displayType == ContentDisplayType::CONTENT) { if(!$contentManager->hasError && $contentManager->displayType == EContentDisplayType::DISPLAY) {
$content = load_content_by_file_path($contentManager->contentFilepath); $content = load_content_by_file_path($contentManager->contentFilepath);
if(is_null($content)) { if(is_null($content)) {
$contentManager->hasError = true; $contentManager->hasError = true;

View File

@@ -8,7 +8,7 @@ include_once 'commons/langs.php';
// Preparing the content manager to get the page's context. // Preparing the content manager to get the page's context.
include_once 'commons/content/manager.php'; include_once 'commons/content/manager.php';
$contentManager = getContentManager($config_dir_tools); $contentManager = ContentManager::createContentManager($config_dir_tools);
// Attempting to load the tool's data if relevant. // Attempting to load the tool's data if relevant.
// If loaded, we can assume the standardized index wasn't loaded by "$contentManager". // If loaded, we can assume the standardized index wasn't loaded by "$contentManager".