Files
netwatch/app/lib/helpers.php
2026-02-13 10:51:04 +01:00

218 lines
3.7 KiB
PHP

<?php
/**
* app/lib/helpers.php
*
* Zentrale Hilfsfunktionen
* - Output-Escaping
* - Redirects
* - Flash-Messages
* - Request-Helper
* - Allgemeine Utilities
*
* KEINE Business-Logik
*/
/**
* Sitzungs-Keys
*/
const FLASH_SESSION_KEY = 'flash_messages';
/* =========================
* Output / Sicherheit
* ========================= */
/**
* HTML-Escaping
*
* @param string|null $value
* @return string
*/
function e(?string $value): string
{
if ($value === null) {
return '';
}
return htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
/* =========================
* Redirects
* ========================= */
/**
* HTTP Redirect
*
* @param string $url
* @param int $code
*/
function redirect(string $url, int $code = 302): void
{
if (!headers_sent()) {
header('Location: ' . $url, true, $code);
}
exit;
}
/* =========================
* Flash Messages
* ========================= */
/**
* Flash-Message setzen
*
* @param string $type (success, error, info)
* @param string $message
*/
function flash(string $type, string $message): void
{
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
if (!isset($_SESSION[FLASH_SESSION_KEY])) {
$_SESSION[FLASH_SESSION_KEY] = [];
}
$_SESSION[FLASH_SESSION_KEY][] = ['type' => $type, 'message' => $message];
}
/**
* Flash-Messages abrufen & löschen
*
* @return array
*/
function getFlashes(): array
{
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
$messages = $_SESSION[FLASH_SESSION_KEY] ?? [];
unset($_SESSION[FLASH_SESSION_KEY]);
return $messages;
}
/* =========================
* Request Helper
* ========================= */
/**
* POST-Wert holen
*
* @param string $key
* @param mixed $default
* @return mixed
*/
function post(string $key, $default = null)
{
return $_POST[$key] ?? $default;
}
/**
* GET-Wert holen
*
* @param string $key
* @param mixed $default
* @return mixed
*/
function get(string $key, $default = null)
{
return $_GET[$key] ?? $default;
}
/**
* Prüfen, ob Request POST ist
*
* @return bool
*/
function isPost(): bool
{
return ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST';
}
/* =========================
* Validierung
* ========================= */
/**
* Prüft auf leeren Wert
*
* @param mixed $value
* @return bool
*/
function isEmpty($value): bool
{
if (is_string($value)) {
return trim($value) === '';
}
return empty($value);
}
/* =========================
* Pfade / URLs
* ========================= */
/**
* Baut eine URL zur App
*
* @param string $path
* @return string
*/
function url(string $path = ''): string
{
if ($path === '') {
$path = '/';
}
if (preg_match('~^([a-z]+:)?//~i', $path)) {
return $path;
}
$script = $_SERVER['SCRIPT_NAME'] ?? '';
$baseDir = rtrim(strtr(dirname($script), '\\\\', '/'), '/');
if ($baseDir === '.' || $baseDir === '\\\\') {
$baseDir = '';
}
$segment = ltrim($path, '/');
$prefix = $baseDir === '' ? '' : $baseDir;
if ($segment === '') {
return $prefix === '' ? '/' : $prefix;
}
return ($prefix === '' ? '' : $prefix) . '/' . $segment;
}
/* =========================
* Debug / Entwicklung
* ========================= */
/**
* Dump & Die (nur Dev)
*
* @param mixed $value
*/
function dd($value): void
{
echo '<pre>';
var_dump($value);
echo '</pre>';
exit;
}
/* =========================
* Sonstiges
* ========================= */
// TODO: Weitere Helfer nach Bedarf
// - Datum formatieren
// - Bytes → MB
// - UUID erzeugen
// - SVG-Koordinaten normalisieren