Changes for page Export To Markdown
Last modified by Tobias Wintrich on 2026/03/27 13:39
From version 2.1
edited by René Vögeli
on 2026/03/25 10:30
on 2026/03/25 10:30
Change comment:
There is no comment for this version
To version 5.1
edited by Tobias Wintrich
on 2026/03/27 13:28
on 2026/03/27 13:28
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki.r voegeli1 +XWiki.twintrich - Content
-
... ... @@ -1,20 +1,62 @@ 1 1 {{groovy}} 2 -import org.xwiki.environment.* 3 3 import org.xwiki.model.reference.* 3 +import org.xwiki.model.EntityType 4 +import java.io.File 4 4 5 5 if (request.confirm == '1') { 6 - services.query.xwql("select distinct doc.fullName from Document doc where doc.space like 'Sandbox' or doc.space like 'Sandbox.%'").execute().each() { 7 - print "* Converting ${it} to MD..." 8 - def itemDoc = xwiki.getDocument(it) 9 - def newContent = services.rendering.render(itemDoc.getXDOM(), 'markdown/1.2') 10 - def tmpDir = new File(services.component.getInstance(Environment.class).temporaryDirectory, 'md-export') 11 - def pathSerializer = services.component.getInstance(EntityReferenceSerializer.TYPE_STRING, 'fspath') 12 - def outputFile = new File(tmpDir, pathSerializer.serialize(itemDoc.documentReference)) 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 + 13 13 outputFile.parentFile.mkdirs() 14 - outputFile << newContent 15 - println "Saved in ${outputFile.toString()}" 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 + } 16 16 } 17 17 } 18 18 19 -println "[[Export>>||queryString='confirm=1']]" 61 +println "[[Export starten>>||queryString='confirm=1']]" 20 20 {{/groovy}}