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