frontpage.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. /**
  3. * Front page editor: artist intro title/text + full-page hero image.
  4. */
  5. require dirname(__DIR__) . '/app/bootstrap.php';
  6. auth_require();
  7. $site = site_get();
  8. if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  9. csrf_verify();
  10. $site['intro_title'] = trim((string)($_POST['intro_title'] ?? ''));
  11. $site['intro_text'] = trim((string)($_POST['intro_text'] ?? ''));
  12. if (!empty($_FILES['hero']['name'])) {
  13. $stored = media_store_upload($_FILES['hero']);
  14. if ($stored === null) {
  15. flash_set('Hero image upload failed — use a JPG/PNG/WebP/AVIF file.', 'error');
  16. site_save($site);
  17. redirect('frontpage.php');
  18. }
  19. if (!empty($site['hero_image'])) {
  20. media_delete($site['hero_image']);
  21. }
  22. $site['hero_image'] = $stored;
  23. }
  24. site_save($site);
  25. flash_set('Front page saved.');
  26. redirect('frontpage.php');
  27. }
  28. admin_header('Front page', 'frontpage');
  29. flash_render();
  30. ?>
  31. <h1>Front page</h1>
  32. <form method="post" enctype="multipart/form-data" class="card">
  33. <?= csrf_field() ?>
  34. <label for="t">Artist name / title</label>
  35. <input type="text" id="t" name="intro_title" value="<?= e($site['intro_title']) ?>">
  36. <label for="x">Introduction text</label>
  37. <textarea id="x" name="intro_text"><?= e($site['intro_text']) ?></textarea>
  38. <p class="help">Shown below the hero image. Line breaks are kept.</p>
  39. <label for="h">Hero image (full-page background)</label>
  40. <?php if (!empty($site['hero_image'])): ?>
  41. <p class="help" style="margin-bottom:.6rem">
  42. Current: <?= e($site['hero_image']) ?> —
  43. <a href="../media/<?= e(rawurlencode($site['hero_image'])) ?>" target="_blank" rel="noopener">view ↗</a>
  44. </p>
  45. <?php endif; ?>
  46. <input type="file" id="h" name="hero" accept="image/*">
  47. <p class="help">Uploaded in full resolution, unmodified. Choose a file to replace the current image.</p>
  48. <button type="submit">Save</button>
  49. </form>
  50. <?php admin_footer(); ?>