Code source wiki de Export To Markdown
Version 5.1 par Tobias Wintrich le 2026/03/27 13:28
Afficher les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
| 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}} |