Quelltext des aktuellen Standes
<?php
/**
* Helfer für Datei-Anhänge (modulübergreifend).
*
* att_view_link() rendert den "Auge"-Vorschau-Button, der die gemeinsame
* Lightbox (templates/partials/_attachment_modal.php) öffnet. Nur Bilder und
* PDFs sind vorschaufähig – diese Typen werden inline (gleiche Origin)
* ausgeliefert (vgl. INLINE_SAFE_MIME). Für alle anderen Dateien wird kein
* Button gerendert (leerer String).
*/
if (!function_exists('att_preview_type')) {
/** @return string 'pdf', 'image' oder '' (nicht vorschaufähig) */
function att_preview_type(string $filename, string $mime = ''): string
{
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if ($ext === 'pdf' || $mime === 'application/pdf') {
return 'pdf';
}
$imgExt = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
$imgMime = ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];
if (in_array($ext, $imgExt, true) || in_array($mime, $imgMime, true)) {
return 'image';
}
return '';
}
}
if (!function_exists('att_view_link')) {
/**
* Vorschau-Button (Auge). Öffnet Bilder/PDFs in der Lightbox.
* Liefert leeren String, wenn die Datei nicht vorschaufähig ist.
*
* @param string $viewUrl Inline-Auslieferungs-Endpunkt (.../view)
* @param string $cls CSS-Klasse des Buttons (modulspezifisch)
*/
function att_view_link(string $viewUrl, string $filename, string $mime = '', string $cls = 'cs-file-view'): string
{
$type = att_preview_type($filename, $mime);
if ($type === '') {
return '';
}
$u = htmlspecialchars($viewUrl, ENT_QUOTES);
$n = htmlspecialchars($filename, ENT_QUOTES);
return '<a href="' . $u . '" class="' . htmlspecialchars($cls, ENT_QUOTES) . '" title="Vorschau"'
. ' data-att-view="' . $u . '" data-att-view-type="' . $type . '" data-att-view-name="' . $n . '">'
. '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14">'
. '<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/><circle cx="12" cy="12" r="3"/></svg>'
. '</a>';
}
}