Modifications pour le document Export To Markdown

Modifié par Tobias Wintrich le 2026/03/27 13:39

Depuis la version 5.1
modifié par Tobias Wintrich
sur 2026/03/27 13:28
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 2.1
modifié par René Vögeli
sur 2026/03/25 10:30
Commentaire de modification : Il n'y a aucun commentaire pour cette version

Résumé

Détails

Propriétés de la Page
Auteur du document
... ... @@ -1,1 +1,1 @@
1 -XWiki.twintrich
1 +XWiki.rvoegeli
Contenu
... ... @@ -1,62 +1,20 @@
1 1  {{groovy}}
2 +import org.xwiki.environment.*
2 2  import org.xwiki.model.reference.*
3 -import org.xwiki.model.EntityType
4 -import java.io.File
5 5  
6 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 -
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))
41 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 - }
14 + outputFile << newContent
15 + println "Saved in ${outputFile.toString()}"
58 58   }
59 59  }
60 60  
61 -println "[[Export starten>>||queryString='confirm=1']]"
19 +println "[[Export>>||queryString='confirm=1']]"
62 62  {{/groovy}}