# Bijlagen en LeafWiki-import Deze gids beschrijft de M4-functionaliteit: bestanden (bijlagen) toevoegen aan pagina's, en het overzetten van bestaande LeafWiki-inhoud. Geschreven voor redacteuren (bijlagen) en de beheerder die een import uitvoert. ## Bijlagen toevoegen aan een pagina 1. Open een pagina en klap **Bijlagen** open, onderaan de pagina. 2. Kies een bestand via **Bijlage toevoegen**. 3. Zodra het uploaden gelukt is, verschijnt het bestand in de lijst met de bestandsgrootte. 4. Klik op **Kopieer Markdown-verwijzing** en plak die tekst op de gewenste plaats in de inhoud van de pagina om de bijlage zichtbaar te maken (als afbeelding bij een afbeeldingsbestand, of als downloadlink voor andere bestanden). ### Wat wordt geweigerd Om veiligheidsredenen worden sommige bestandstypes nooit geaccepteerd, ongeacht de bestandsnaam: - uitvoerbare bestanden (`.exe` en gelijkaardige programma's); - HTML- en SVG-bestanden (deze kunnen actieve inhoud bevatten). De toepassing herkent het echte bestandstype aan de inhoud zelf, niet aan de bestandsextensie — een bestand met een misleidende naam (bijvoorbeeld `factuur.pdf.exe`) wordt dus wel degelijk herkend en geweigerd. ### Standaardlimiet Een bijlage mag standaard maximaal 100 MiB groot zijn (instelbaar door de beheerder). ## LeafWiki-import (alleen beheerder, alleen via API) Er is nog geen importwizard in de webinterface — deze functionaliteit is voor deze milestone alleen via de API beschikbaar, net zoals gebruikersbeheer dat aanvankelijk was. De echte import van de eigenaar's LeafWiki-omgeving (M9) volgt de volledige procedure in `docs/17-leafwiki-migration.md`; dit is de technische samenvatting voor de synthetische/oefen-import die nu al mogelijk is. 1. **Plaats de bron.** Kopieer de LeafWiki-bronmap (nooit de originele, live map) naar het gemonteerde volume op het pad ingesteld via `KnowledgeHub:Paths:Imports` (standaard `/var/lib/knowledge-hub/imports`). 2. **Preflight (verkenning, geen wijzigingen).** ``` POST /api/v1/admin/imports/preflight { "sourceRelativePath": "", "idempotencyKey": "" } ``` Dit levert een plan op: welke pagina's herkend worden, de voorgestelde hiërarchie, en eventuele conflicten — zonder dat er iets in de kennisbank verandert. 3. **Uitvoeren.** ``` POST /api/v1/admin/imports/{jobId}/execute?sourceRelativePath= ``` Bestaande pagina's worden nooit overschreven. Een eerder geïmporteerde pagina met ongewijzigde inhoud wordt bij een herhaalde uitvoering overgeslagen, niet opnieuw aangemaakt. 4. **Terugdraaien indien nodig.** ``` POST /api/v1/admin/imports/{jobId}/rollback ``` Verwijdert alleen de pagina's die deze import zelf aanmaakte én die nadien niet door een gebruiker bewerkt zijn. Een pagina die na de import werd bewerkt, blijft bestaan — bewerkte inhoud gaat nooit verloren door een rollback. ### Wat de import ondersteunt in deze milestone - Een map met Markdown-bestanden (inclusief geneste submappen, `[[interne links]]` en bijlagen die door de Markdown-bestanden verwezen worden). - Een SQLite-database met het specifieke, in deze toepassing gedocumenteerde synthetische testschema (`synthetic-sqlite-v1`) — bedoeld om de schema-validatiemechaniek te bewijzen, niet als ondersteuning voor een echte, onbekende LeafWiki-databaseversie. Een database met een onherkend schema levert altijd een duidelijke blokkering op in de preflight-stap, nooit een gegokte interpretatie van de gegevens.