Changeset f24b795 in Klonkt


Ignore:
Timestamp:
06/30/2026 06:46:32 PM (2 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
2ab99c0
Parents:
a95dbfd
Message:

feat(media): Beheer -> Media — image library with usage + cleanup of orphan files

A new /admin/media page lists uploaded images (storage/media/post-images), shows how many posts use
each, lets you copy a URL, and deletes unused files — including the loop-MP4 + poster siblings of an
animated cover. The Beheer "Audio" nav link becomes "Media" (Audio stays a tab linking to
/admin/audio) so the nav doesn't grow. Mounted unconditionally (works in lite/no-audio mode).

  • src/routes/admin-media.js — list / delete / cleanup (path-traversal-safe, god-only)
  • src/views/pages/admin-media.ejs — grid + copy/delete/cleanup (CSP-safe nonce'd script)
  • server.js mount; admin.ejs nav Audio->Media; i18n nl/en/de

Co-Authored-By: Claude <noreply@…>

Location:
src
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • src/server.js

    ra95dbfd rf24b795  
    4545import adminPatreonRoutes from './routes/admin-patreon.js';
    4646import adminStatsRoutes from './routes/admin-stats.js';
     47import adminMediaRoutes from './routes/admin-media.js';
    4748import circleRoutes from './routes/circle.js';
    4849import epkRoutes from './routes/epk.js';
     
    365366  app.use('/admin/playlists', adminPlaylistsRoutes);
    366367}
     368app.use('/admin/media', adminMediaRoutes); // image library + cleanup (works in lite mode too)
    367369app.use('/admin/sites', adminSitesRoutes);
    368370app.use('/admin/users', adminUsersRoutes);
  • src/services/i18n.js

    ra95dbfd rf24b795  
    6666    'admin.tagline_hub': 'Hub-modus — bedrijfssite met gebruikers, elk hun eigen Klonkt Hub.',
    6767    'admin.b_sites': '🌐 Sites', 'admin.b_users': '👥 Gebruikers', 'admin.b_audio': '🎵 Audio',
     68    'admin.b_media': '🎬 Media', 'admin.t_media': 'Media', 'admin.media_images': 'Afbeeldingen', 'admin.media_count': 'afbeeldingen', 'admin.media_unused': 'ongebruikt', 'admin.media_cleanup': 'Ongebruikt opruimen', 'admin.media_cleanup_confirm': 'Alle ongebruikte afbeeldingen verwijderen?', 'admin.media_empty': 'Nog geen afbeeldingen geüpload.', 'admin.media_copy': 'Kopieer URL', 'admin.media_del_confirm': 'Deze afbeelding verwijderen?',
    6869    'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Reacties', 'admin.b_seo': '🔎 SEO',
    6970    'admin.b_settings': '⚙️ Instellingen', 'admin.b_newpost': '✍️ Nieuwe post', 'admin.b_look': '🎨 Uiterlijk',
     
    988989    'admin.tagline_hub': 'Hub mode — a company site with users, each their own Klonkt Hub.',
    989990    'admin.b_sites': '🌐 Sites', 'admin.b_users': '👥 Users', 'admin.b_audio': '🎵 Audio',
     991    'admin.b_media': '🎬 Media', 'admin.t_media': 'Media', 'admin.media_images': 'Images', 'admin.media_count': 'images', 'admin.media_unused': 'unused', 'admin.media_cleanup': 'Delete unused', 'admin.media_cleanup_confirm': 'Delete all unused images?', 'admin.media_empty': 'No images uploaded yet.', 'admin.media_copy': 'Copy URL', 'admin.media_del_confirm': 'Delete this image?',
    990992    'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Comments', 'admin.b_seo': '🔎 SEO',
    991993    'admin.b_settings': '⚙️ Settings', 'admin.b_newpost': '✍️ New post', 'admin.b_look': '🎨 Appearance',
     
    19041906    'admin.tagline_hub': 'Hub-Modus — eine Firmenseite mit Nutzern, je ein eigener Klonkt Hub.',
    19051907    'admin.b_sites': '🌐 Seiten', 'admin.b_users': '👥 Nutzer', 'admin.b_audio': '🎵 Audio',
     1908    'admin.b_media': '🎬 Medien', 'admin.t_media': 'Medien', 'admin.media_images': 'Bilder', 'admin.media_count': 'Bilder', 'admin.media_unused': 'ungenutzt', 'admin.media_cleanup': 'Ungenutzte löschen', 'admin.media_cleanup_confirm': 'Alle ungenutzten Bilder löschen?', 'admin.media_empty': 'Noch keine Bilder hochgeladen.', 'admin.media_copy': 'URL kopieren', 'admin.media_del_confirm': 'Dieses Bild löschen?',
    19061909    'admin.b_playlists': '📃 Playlists', 'admin.b_comments': '💬 Kommentare', 'admin.b_seo': '🔎 SEO',
    19071910    'admin.b_settings': '⚙️ Einstellungen', 'admin.b_newpost': '✍️ Neuer Beitrag', 'admin.b_look': '🎨 Aussehen',
  • src/views/pages/admin.ejs

    ra95dbfd rf24b795  
    2727      <a href="/admin/sites" class="btn"><%= t('admin.b_sites') %></a>
    2828      <a href="/admin/users" class="btn"><%= t('admin.b_users') %></a>
     29      <a href="/admin/media" class="btn"><%= t('admin.b_media') %></a>
    2930      <% if (typeof audioEnabled === 'undefined' || audioEnabled) { %>
    30       <a href="/admin/audio" class="btn"><%= t('admin.b_audio') %></a>
    3131      <a href="/admin/playlists" class="btn"><%= t('admin.b_playlists') %></a>
    3232      <% } %>
     
    3535    <% } else { %>
    3636      <a href="/posts/new" class="btn"><%= t('admin.b_newpost') %></a>
    37       <% if (typeof audioEnabled === 'undefined' || audioEnabled) { %>
    38       <a href="/admin/audio" class="btn"><%= t('admin.b_audio') %></a>
    39       <% } %>
     37      <a href="/admin/media" class="btn"><%= t('admin.b_media') %></a>
    4038      <% if (primarySite) { %>
    4139        <a href="/admin/sites/<%= primarySite.slug %>/edit" class="btn"><%= t('admin.b_look') %></a>
Note: See TracChangeset for help on using the changeset viewer.