Wiki-Quellcode von Export To Markdown

Zuletzt geändert von Tobias Wintrich am 2026/03/27 13:47

Verstecke letzte Bearbeiter
René Vögeli 2.1 1 {{groovy}}
Tobias Wintrich 6.1 2 import org.xwiki.model.reference.EntityReferenceSerializer
Tobias Wintrich 4.1 3 import java.io.File
René Vögeli 1.1 4
Tobias Wintrich 6.1 5 if (request.get('confirm') == '1') {
Tobias Wintrich 4.1 6
Tobias Wintrich 5.1 7 // Zielverzeichnis
8 def exportDir = new File("/usr/local/xwiki/data/md-export")
9 exportDir.mkdirs()
Tobias Wintrich 4.1 10
Tobias Wintrich 6.1 11 // Serializer für Ordnerstruktur
Tobias Wintrich 5.1 12 def pathSerializer = services.component.getInstance(
Tobias Wintrich 6.1 13 EntityReferenceSerializer.TYPE_STRING, "fspath"
Tobias Wintrich 5.1 14 )
Tobias Wintrich 4.1 15
Tobias Wintrich 7.1 16 def query = "select doc.fullName from Document doc " +
17 "where (" +
18 "doc.space like 'HowTos' or doc.space like 'HowTos.%' or " +
19 "doc.space like 'Handbuecher' or doc.space like 'Handbuecher.%' or " +
20 "doc.space like 'Hardware' or doc.space like 'Hardware.%'" +
21 ") and doc.hidden = false"
Tobias Wintrich 4.1 22
Tobias Wintrich 6.1 23 def results = services.query.xwql(query).execute()
Tobias Wintrich 4.1 24
Tobias Wintrich 6.1 25 for (fullName in results) {
Tobias Wintrich 5.1 26
Tobias Wintrich 6.1 27 println("* Exporting " + fullName)
28
Tobias Wintrich 5.1 29 def doc = xwiki.getDocument(fullName)
30
31 if (doc.isHidden()) {
Tobias Wintrich 6.1 32 continue
Tobias Wintrich 5.1 33 }
34
Tobias Wintrich 6.1 35 // Markdown erzeugen
36 def markdown = services.rendering.render(doc.getXDOM(), "markdown/1.2")
Tobias Wintrich 7.1 37
38 // Fix für XWiki Image Syntax ![[file|text]]
39 markdown = markdown.replaceAll(
40 /!\[\[([^|\]]+)\|([^\]]+)\]\]/,
41 '![\$2](\$1)'
42 )
Tobias Wintrich 5.1 43
Tobias Wintrich 6.1 44 // Dateipfad erzeugen
Tobias Wintrich 5.1 45 def relativePath = pathSerializer.serialize(doc.documentReference)
46 def outputFile = new File(exportDir, relativePath + ".md")
47
René Vögeli 1.1 48 outputFile.parentFile.mkdirs()
Tobias Wintrich 6.1 49 outputFile.write(markdown, "UTF-8")
Tobias Wintrich 4.1 50
Tobias Wintrich 6.1 51 println(" -> Saved page to " + outputFile)
Tobias Wintrich 5.1 52
53 // Anhänge exportieren
Tobias Wintrich 6.1 54 for (attachment in doc.getAttachmentList()) {
Tobias Wintrich 5.1 55
Tobias Wintrich 6.1 56 def attachmentFile = new File(outputFile.parentFile, attachment.getFilename())
Tobias Wintrich 5.1 57
58 attachmentFile.withOutputStream { os ->
Tobias Wintrich 6.1 59 os << attachment.getContentInputStream()
Tobias Wintrich 5.1 60 }
61
Tobias Wintrich 6.1 62 println(" -> Exported attachment " + attachment.getFilename())
Tobias Wintrich 5.1 63 }
René Vögeli 1.1 64 }
65 }
66
Tobias Wintrich 6.1 67 println("[[Export starten>>||queryString='confirm=1']]")
René Vögeli 2.1 68 {{/groovy}}