Files
xamxam/app/templates/head.php
Pontoporeia 32a7509598 feat: add file display to forms and recap pages
- Live file preview on all file inputs (file-field partial, edit template):
  thumbnails for images, emoji icons for PDF/video/zip/vtt, filename + size
- New file-preview.js wired via $extraJs in add.php / edit.php and direct
  <script> in partage/index.php; $extraJs support added to head.php
- admin/recapitulatif.php: replace plain table with rich file list — image
  thumbnails linked to media.php, type badges, human-readable size, date
- partage/recapitulatif.php: full rewrite — shows thesis metadata + files
  list with same rich display (no media links for student privacy)
- form.css: new sections for .file-preview-list (live preview) and
  .recap-file-list / .recap-dl / .partage-recap (recap pages)
2026-04-27 20:52:27 +02:00

86 lines
4.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php
// Admin: append suffix to title and prepend admin.css
if (!empty($isAdmin)) {
$pageTitle = isset($pageTitle) ? $pageTitle . ' Admin' : 'Admin';
$extraCss = array_merge(['/assets/css/admin.css'], $extraCss ?? []);
}
?>
<title><?= htmlspecialchars($pageTitle ?? 'XAMXAM') ?></title>
<?php if (empty($isAdmin)): ?>
<?php if (!empty($metaDescription)): ?>
<meta name="description" content="<?= htmlspecialchars($metaDescription) ?>">
<?php endif; ?>
<?php
// Open Graph / Twitter Card tags — populated per-page via $ogTags array.
// Keys: type, title, description, url, image, image_alt, site_name, article_author, article_published_time
if (!empty($ogTags)):
$ogType = $ogTags['type'] ?? 'website';
$ogTitle = $ogTags['title'] ?? ($pageTitle ?? 'XAMXAM');
$ogDescription = $ogTags['description'] ?? ($metaDescription ?? '');
$ogUrl = $ogTags['url'] ?? '';
$ogImage = $ogTags['image'] ?? '';
$ogImageAlt = $ogTags['image_alt'] ?? $ogTitle;
$ogSiteName = $ogTags['site_name'] ?? 'XAMXAM ERG';
?>
<meta property="og:type" content="<?= htmlspecialchars($ogType) ?>">
<meta property="og:site_name" content="<?= htmlspecialchars($ogSiteName) ?>">
<meta property="og:title" content="<?= htmlspecialchars($ogTitle) ?>">
<?php if (!empty($ogDescription)): ?>
<meta property="og:description" content="<?= htmlspecialchars($ogDescription) ?>">
<?php endif; ?>
<?php if (!empty($ogUrl)): ?>
<meta property="og:url" content="<?= htmlspecialchars($ogUrl) ?>">
<?php endif; ?>
<?php if (!empty($ogImage)): ?>
<meta property="og:image" content="<?= htmlspecialchars($ogImage) ?>">
<meta property="og:image:alt" content="<?= htmlspecialchars($ogImageAlt) ?>">
<?php endif; ?>
<?php if (!empty($ogTags['article_author'])): ?>
<meta property="article:author" content="<?= htmlspecialchars($ogTags['article_author']) ?>">
<?php endif; ?>
<?php if (!empty($ogTags['article_published_time'])): ?>
<meta property="article:published_time" content="<?= htmlspecialchars($ogTags['article_published_time']) ?>">
<?php endif; ?>
<meta name="twitter:card" content="<?= !empty($ogImage) ? 'summary_large_image' : 'summary' ?>">
<meta name="twitter:title" content="<?= htmlspecialchars($ogTitle) ?>">
<?php if (!empty($ogDescription)): ?>
<meta name="twitter:description" content="<?= htmlspecialchars($ogDescription) ?>">
<?php endif; ?>
<?php if (!empty($ogImage)): ?>
<meta name="twitter:image" content="<?= htmlspecialchars($ogImage) ?>">
<meta name="twitter:image:alt" content="<?= htmlspecialchars($ogImageAlt) ?>">
<?php endif; ?>
<?php endif; ?>
<?php endif; ?>
<link rel="apple-touch-icon" sizes="152x152" href="/assets/favicon/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="167x167" href="/assets/favicon/apple-touch-icon-167x167.png">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16.png">
<link rel="shortcut icon" href="/assets/favicon/favicon.ico">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="<?= App::assetV('/assets/css/modern-normalize.min.css') ?>">
<link rel="stylesheet" href="<?= App::assetV('/assets/css/common.css') ?>">
<?php foreach ($extraCss ?? [] as $css): ?>
<link rel="stylesheet" href="<?= App::assetV($css) ?>">
<?php endforeach; ?>
<?php foreach ($extraJs ?? [] as $js): ?>
<script src="<?= App::assetV($js) ?>" defer></script>
<?php endforeach; ?>
<?php if (php_sapi_name() === 'cli-server'): ?>
<script>
(function poll(){
fetch('/live-reload').then(r=>r.json()).then(d=>{
if(d.changed) location.reload(); else setTimeout(poll,1000);
}).catch(()=>setTimeout(poll,2000));
})();
</script>
<?php endif; ?>
</head>
<body class="<?= htmlspecialchars($bodyClass ?? '') ?>">