Code source wiki de Export To Markdown

Version 5.1 par Tobias Wintrich le 2026/03/27 13:28

Afficher les derniers auteurs
1 {{groovy}}
2 import org.xwiki.model.reference.*
3 import org.xwiki.model.EntityType
4 import java.io.File
5
6 if (request.confirm == '1') {
7
8 // Zielverzeichnis
9 def exportDir = new File("/usr/local/xwiki/data/md-export")
10 exportDir.mkdirs()
11
12 // Serializer für saubere Ordnerstruktur
13 def pathSerializer = services.component.getInstance(
14 EntityReferenceSerializer.TYPE_STRING, 'fspath'
15 )
16
17 // Nur veröffentlichte Dokumente (hidden = false)
18 def query = """
19 select doc.fullName from Document doc
20 where (doc.space like 'HowTos' or doc.space like 'HowTos.%')
21 and doc.hidden = false
22 """
23
24 services.query.xwql(query).execute().each { fullName ->
25
26 println "* Exporting ${fullName}..."
27
28 def doc = xwiki.getDocument(fullName)
29
30 if (doc.isHidden()) {
31 return
32 }
33
34 // Markdown rendern
35 def markdown = services.rendering.render(doc.getXDOM(), 'markdown/1.2')
36
37 // Verzeichnisstruktur erzeugen
38 def relativePath = pathSerializer.serialize(doc.documentReference)
39 def outputFile = new File(exportDir, relativePath + ".md")
40
41 outputFile.parentFile.mkdirs()
42 outputFile.text = markdown
43
44 println " -> Saved page to ${outputFile}"
45
46 // Anhänge exportieren
47 doc.attachmentList.each { attachment ->
48
49 def attachmentDir = outputFile.parentFile
50 def attachmentFile = new File(attachmentDir, attachment.filename)
51
52 attachmentFile.withOutputStream { os ->
53 os << attachment.contentInputStream
54 }
55
56 println " -> Exported attachment ${attachment.filename}"
57 }
58 }
59 }
60
61 println "[[Export starten>>||queryString='confirm=1']]"
62 {{/groovy}}