206 lines
9.2 KiB
PHP
206 lines
9.2 KiB
PHP
<?php
|
||
ob_start();
|
||
|
||
$isPdf = ($step2Meta['mime'] ?? '') === 'application/pdf';
|
||
$isHtml = str_starts_with($step2Meta['mime'] ?? '', 'text/html');
|
||
|
||
// Ordre + labels contextuels
|
||
$metaRows = [
|
||
'mime' => 'Type',
|
||
'size' => 'Taille',
|
||
// PDF
|
||
'pages' => 'Pages',
|
||
'page_size' => 'Format',
|
||
'pdf_version' => 'Version PDF',
|
||
// Image
|
||
'width' => 'Dimensions',
|
||
'camera' => 'Appareil',
|
||
// HTML
|
||
'site_name' => 'Site',
|
||
'og_type' => 'Type',
|
||
'language' => 'Langue',
|
||
// Commun
|
||
'author' => $isHtml ? 'Auteur' : ($isPdf ? 'Auteur' : 'Auteur EXIF'),
|
||
'date' => $isPdf ? 'Créé le' : ($isHtml ? 'Publié le' : 'Prise de vue'),
|
||
'description' => 'Description',
|
||
'subject' => 'Sujet',
|
||
'keywords' => 'Mots-clés',
|
||
'copyright' => 'Copyright',
|
||
// PDF logiciel
|
||
'creator' => 'Créé avec',
|
||
'producer' => 'Produit par',
|
||
// HTML liens
|
||
'canonical' => 'URL canonique',
|
||
'og_image' => 'Image OG',
|
||
];
|
||
|
||
$hasTitle = !empty($step2Meta['title']);
|
||
$preAuthor = $step2Meta['author'] ?? $step2Meta['credit'] ?? '';
|
||
$preSource = $step2Meta['canonical'] ?? $step2Meta['source'] ?? $step2Url;
|
||
?>
|
||
|
||
<div class="d-flex align-items-center gap-3 mb-4">
|
||
<a href="/?action=import_image&uuid=<?= rawurlencode($step2Article['uuid']) ?>" class="btn btn-secondary btn-sm">← Retour</a>
|
||
<h1 class="h4 mb-0">Importer un fichier</h1>
|
||
</div>
|
||
|
||
<p class="text-muted small mb-4">
|
||
Article : <strong><?= htmlspecialchars($step2Article['title']) ?></strong>
|
||
</p>
|
||
|
||
<?php if ($step2Screenshot ?? null): ?>
|
||
<!-- Aperçu screenshot -->
|
||
<div class="mb-4">
|
||
<p class="fw-semibold small mb-2">Aperçu de la page</p>
|
||
<?php
|
||
$previewMtime = @filemtime(BASE_PATH . '/data/' . $step2Article['uuid'] . '/files/' . $step2Screenshot) ?: time();
|
||
?>
|
||
<img src="/file?uuid=<?= rawurlencode($step2Article['uuid']) ?>&name=<?= rawurlencode($step2Screenshot) ?>&v=<?= $previewMtime ?>"
|
||
class="img-fluid rounded shadow-sm d-block"
|
||
style="max-height:320px;object-fit:cover;object-position:top"
|
||
alt="Aperçu">
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<!-- Résumé métadonnées -->
|
||
<?php
|
||
$visibleRows = array_filter($metaRows, fn ($label, $key) => !empty($step2Meta[$key]), ARRAY_FILTER_USE_BOTH);
|
||
if ($visibleRows): ?>
|
||
<div class="card mb-4" style="max-width:640px">
|
||
<div class="card-header small fw-semibold">Métadonnées du fichier</div>
|
||
<div class="card-body p-0">
|
||
<table class="table table-sm table-borderless mb-0 small">
|
||
<tbody>
|
||
<?php foreach ($visibleRows as $key => $label): ?>
|
||
<?php
|
||
$val = $step2Meta[$key];
|
||
$cellHtml = match($key) {
|
||
'size' => htmlspecialchars(round($val / 1024) . ' Ko'),
|
||
'width' => htmlspecialchars($val . ' × ' . ($step2Meta['height'] ?? '?') . ' px'),
|
||
'og_image' => '<img src="' . htmlspecialchars((string)$val) . '" style="max-height:72px;max-width:200px;border-radius:4px" alt="">',
|
||
'canonical' => '<a href="' . htmlspecialchars((string)$val) . '" target="_blank" rel="noopener" class="small text-break">' . htmlspecialchars((string)$val) . '</a>',
|
||
default => htmlspecialchars((string)$val),
|
||
};
|
||
?>
|
||
<tr>
|
||
<th class="text-muted fw-normal ps-3 pe-3 text-nowrap align-top" style="width:130px"><?= $label ?></th>
|
||
<td class="pe-3"><?= $cellHtml ?></td>
|
||
</tr>
|
||
<?php endforeach; ?>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<!-- Formulaire -->
|
||
<div class="card" style="max-width:640px">
|
||
<div class="card-body">
|
||
<form method="POST" action="/?action=add_file_from_url&uuid=<?= rawurlencode($step2Article['uuid']) ?>">
|
||
<input type="hidden" name="image_url" value="<?= htmlspecialchars($step2Url) ?>">
|
||
<?php if ($step2Screenshot ?? null): ?>
|
||
<input type="hidden" name="screenshot_file" value="<?= htmlspecialchars($step2Screenshot) ?>">
|
||
<?php endif; ?>
|
||
<?php
|
||
$metaToStore = array_filter(
|
||
array_diff_key($step2Meta, array_flip(['ok', 'height'])),
|
||
fn ($v) => $v !== null && $v !== ''
|
||
);
|
||
?>
|
||
<input type="hidden" name="meta_json"
|
||
value="<?= htmlspecialchars(json_encode($metaToStore, JSON_UNESCAPED_UNICODE)) ?>">
|
||
|
||
<!-- Titre (obligatoire) -->
|
||
<div class="mb-3">
|
||
<label class="form-label fw-semibold">
|
||
Titre <span class="text-danger">*</span>
|
||
</label>
|
||
<input type="text" name="img_title" class="form-control"
|
||
placeholder="ex. Compte rendu du conseil municipal"
|
||
value="<?= htmlspecialchars($step2Meta['title'] ?? '') ?>"
|
||
required autofocus>
|
||
<?php if (!$hasTitle): ?>
|
||
<div class="form-text text-warning small">
|
||
Titre non trouvé dans les métadonnées — saisie requise.
|
||
</div>
|
||
<?php endif; ?>
|
||
</div>
|
||
|
||
<!-- Mode -->
|
||
<div class="mb-4">
|
||
<p class="form-label fw-semibold mb-2">Mode</p>
|
||
<div class="form-check mb-1">
|
||
<input class="form-check-input" type="radio" name="mode" id="mode_link" value="link" checked>
|
||
<label class="form-check-label" for="mode_link">
|
||
<strong>Lien externe</strong>
|
||
<span class="text-muted small"> — insère une référence, le fichier reste chez l'hôte</span>
|
||
</label>
|
||
</div>
|
||
<div class="form-check">
|
||
<input class="form-check-input" type="radio" name="mode" id="mode_download" value="download">
|
||
<label class="form-check-label" for="mode_download">
|
||
<strong>Télécharger sur le serveur</strong>
|
||
<span class="text-muted small"> — copie locale du fichier</span>
|
||
</label>
|
||
</div>
|
||
<?php if ($step2Screenshot ?? null): ?>
|
||
<div class="form-check">
|
||
<input class="form-check-input" type="radio" name="mode" id="mode_screenshot" value="screenshot">
|
||
<label class="form-check-label" for="mode_screenshot">
|
||
<strong>Enregistrer la capture d'écran</strong>
|
||
<span class="text-muted small"> — sauvegarde l'aperçu comme image</span>
|
||
</label>
|
||
</div>
|
||
<?php endif; ?>
|
||
<div id="copyright-warning" class="alert alert-warning mt-3 mb-0 small" style="display:none">
|
||
<strong>Droits d'auteur.</strong> Une page de confirmation légale vous sera
|
||
présentée avant le téléchargement.
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Auteur / source : toujours visibles pour les pages web, download-only sinon -->
|
||
<div id="download-fields" <?= $isHtml ? '' : 'style="display:none"' ?>>
|
||
<?php if ($preAuthor || $isHtml): ?>
|
||
<div class="mb-3">
|
||
<label class="form-label fw-semibold">Auteur / crédit</label>
|
||
<input type="text" name="img_author" class="form-control"
|
||
placeholder="ex. Jane Doe"
|
||
value="<?= htmlspecialchars($preAuthor) ?>">
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<div class="mb-3">
|
||
<label class="form-label fw-semibold">URL source</label>
|
||
<input type="url" name="img_source" class="form-control font-monospace"
|
||
placeholder="https://…"
|
||
value="<?= htmlspecialchars($preSource) ?>">
|
||
<div class="form-text">Laissé vide → URL du fichier utilisée comme source.</div>
|
||
</div>
|
||
|
||
<?php if (!$isHtml || ($step2Screenshot ?? null)): ?>
|
||
<div class="mb-4">
|
||
<div class="form-check">
|
||
<input class="form-check-input" type="checkbox" name="is_cover" id="is_cover">
|
||
<label class="form-check-label" for="is_cover">
|
||
Définir comme image de couverture
|
||
<span class="text-muted small">(images uniquement, sera nommée <code>cover.jpg</code>)</span>
|
||
</label>
|
||
</div>
|
||
</div>
|
||
<?php endif; ?>
|
||
</div>
|
||
|
||
<div class="d-flex gap-2">
|
||
<button type="submit" class="btn btn-primary">Valider</button>
|
||
<a href="/?action=edit&uuid=<?= rawurlencode($step2Article['uuid']) ?>"
|
||
class="btn btn-outline-secondary">Annuler</a>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<?php
|
||
$content = ob_get_clean();
|
||
$title = 'Importer un fichier — ' . htmlspecialchars($step2Article['title']);
|
||
include __DIR__ . '/layout.php';
|