Änderungen von Dokument Attachments

Zuletzt geändert von xwikiadmin am 2026/03/05 08:03

Von Version 1.1
bearbeitet von xwikiadmin
am 2023/04/25 10:54
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.7.1]
Auf Version 3.1
bearbeitet von xwikiadmin
am 2023/10/26 09:37
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.9.2]

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -5,6 +5,7 @@
5 5  * {{{ labels }}} is not supported since XWiki does not support attachment tags
6 6  * {{{ preview }}} does not make sense for the XWiki macro as attachments are displayed differently
7 7  * {{{ old }}} has not been implemented in this bridge macro because it does not make really sense for XWiki
8 +* {{{ upload }}} has not been implemented yet because it conflicts with the standard attachment panel upload
8 8  * {{{ "created date" }}} value of the {{{ sortBy }}} property behave the same way as the {{{ "date" }}} value
9 9  
10 10  = Parameters =
... ... @@ -13,7 +13,6 @@
13 13  |**patterns**|Comma-separated list of regular expressions, used to filter attachments by name.|No|
14 14  |**sortBy**|Sort attachments by {{{ date }}}, {{{ size }}} or {{{ name }}}|No|{{{ date }}}
15 15  |**sortOrder**|Sort attachments in {{{ ascending }}} or {{{ descending }}} order|No|{{{ ascending }}}
16 -|**upload**|Allow users to attach new files|No|{{{ true }}}
17 17  |**page**|Pages containing the attachments to display. Current page if empty.|No|
18 18  
19 19  = Example Usage =
... ... @@ -20,7 +20,7 @@
20 20  
21 21  
22 22  {{code}}
23 -{{attachments
23 +{{confluence_attachments
24 24   patterns=".*png"
25 25   sortBy="name"
26 26  /}}
XWiki.JavaScriptExtension[0]
Pufferstrategie
... ... @@ -1,1 +1,0 @@
1 -long
Code
... ... @@ -1,8 +1,0 @@
1 -require(['jquery', 'xwiki-events-bridge'], function ($) {
2 - $('#xwikiuploadfile').on('xwiki:html5upload:message', function (event, data) {
3 - if (data.content === 'UPLOAD_FINISHED' && data.type === 'done') {
4 - location.reload();
5 - }
6 - });
7 -});
8 -
Inhalt parsen
... ... @@ -1,1 +1,0 @@
1 -Nein
Benutze diese Erweiterung
... ... @@ -1,1 +1,0 @@
1 -onDemand
XWiki.StyleSheetExtension[0]
Pufferstrategie
... ... @@ -1,1 +1,0 @@
1 -long
Code
... ... @@ -1,15 +1,0 @@
1 -.confluence-attachment-macro {
2 - .upload-response {
3 - display: none;
4 - }
5 -
6 - #AddAttachment {
7 - margin-top: 15px;
8 -
9 - #attachform {
10 - .buttonwrapper {
11 - display: none;
12 - }
13 - }
14 - }
15 -}
Content Type
... ... @@ -1,1 +1,0 @@
1 -LESS
Inhalt parsen
... ... @@ -1,1 +1,0 @@
1 -Nein
Benutze diese Erweiterung
... ... @@ -1,1 +1,0 @@
1 -onDemand
XWiki.WikiMacroClass[0]
Makro-Code
... ... @@ -1,48 +1,6 @@
1 1  {{velocity output="false"}}
2 -#macro (filterAndSortAttachments $attachmentsFiltered $invalidSortBy $invalidSortOrder)
3 - $xwiki.ssx.use('Confluence.Macros.Attachments')
4 - $xwiki.jsx.use('Confluence.Macros.Attachments')
5 - #if ("$!{request.forceTestRights}" == "1")#template("xwikivars.vm")#end
6 - #template('attachment_macros.vm')
7 - ## Get attachments
8 - #if ("$!wikimacro.parameters.tags" != '')
9 - #set ($tags = $!wikimacro.parameters.tags.split(','))
10 - #set ($pageReferenceSet = $collectiontool.getSet())
11 - #foreach ($tag in $tags)
12 - #set ($references = $xwiki.tag.getDocumentsWithTag("$tag"))
13 - #set ($discard = $pageReferenceSet.addAll($references))
14 - #end
15 - #set ($attachments = [])
16 - #foreach ($pageReference in $pageReferenceSet)
17 - #set ($document = $xwiki.getDocument($pageReference))
18 - #set ($documentAttachments = $document.attachmentList)
19 - #set ($discard = $attachments.addAll($documentAttachments))
20 - #end
21 - #else
22 - #set ($attachments = $doc.attachmentList)
23 - #if ("$!wikimacro.parameters.page" != '')
24 - #set ($document = $xwiki.getDocument("$!wikimacro.parameters.page"))
25 - #set ($attachments = $document.attachmentList)
26 - #end
27 - #end
28 - ## Filter attachments
29 - #set ($confluencePatterns = "$!wikimacro.parameters.patterns")
30 - #if ($confluencePatterns == '')
31 - #set($attachmentsFiltered = $attachments)
32 - #else
33 - #set ($patterns = $!confluencePatterns.split(','))
34 - #set($attachmentsFiltered = [])
35 - #foreach ($attachment in $attachments)
36 - #foreach ($pattern in $patterns)
37 - #set ($matches = $attachment.filename.matches("(?i)$!pattern"))
38 - #if ($matches)
39 - #set ($discard = $attachmentsFiltered.add($attachment))
40 - #break
41 - #end
42 - #end
43 - #end
44 - #end
45 - ## Sort attachments
2 +#macro (getLiveDataSort $return)
3 + ##property
46 46   #set ($confluenceSortBy = "$!wikimacro.parameters.sortBy")
47 47   #set ($invalidSortBy = false)
48 48   #if ($confluenceSortBy == 'date')
... ... @@ -56,6 +56,7 @@
56 56   #else
57 57   #set ($invalidSortBy = true)
58 58   #end
17 + ## order
59 59   #set ($confluenceSortOrder = "$!wikimacro.parameters.sortOrder")
60 60   #set ($invalidSortOrder = false)
61 61   #set ($reverseSortOrderProperties = ['filesize', 'date'])
... ... @@ -72,101 +72,103 @@
72 72   #set ($sortOrder = 'desc')
73 73   #end
74 74   #else
75 - #set ($invalidSortOrder = false)
34 + #set ($invalidSortOrder = true)
76 76   #end
77 - #set ($attachmentsFiltered = $collectiontool.sort($attachmentsFiltered, "$sortBy:$sortOrder"))
36 + ## return
37 + #if ($invalidSortBy || $invalidSortOrder)
38 + #setVariable("$return", {})
39 + #else
40 + #setVariable("$return", "$sortBy:$sortOrder")
41 + #end
78 78  #end
79 79  
80 -#macro (executeMacro)
81 - #filterAndSortAttachments($attachmentsFiltered $invalidSortBy $invalidSortOrder)
44 +#set ($confluenceAttachmentMacroIndex = -1)
45 +## Code taken and adapted
46 +#macro (showConfluenceAttachments $document)
47 + #template('attachment_macros.vm')
48 + #template('display_macros.vm')
49 + #initRequiredSkinExtensions()
50 + #set ($confluenceAttachmentMacroIndex = $confluenceAttachmentMacroIndex + 1)
51 + #set ($confluenceAttachmentMacroId = "confluenceAttachments$confluenceAttachmentMacroIndex")
52 + ##
53 + #showConfluenceAttachmentsLiveData($document $confluenceAttachmentMacroId)
54 +#end
55 +
56 +## Display a liveData with attachments from the specified document.
57 +#macro (showConfluenceAttachmentsLiveData $attachmentsDoc $liveDataId)
58 + #set ($liveDataConfig = {
59 + 'meta': {
60 + 'propertyDescriptors': [
61 + { 'id': 'mimeType', 'displayer': 'html'},
62 + { 'id': 'filename', 'displayer': 'html' },
63 + { 'id': 'filesize', 'displayer': 'html' },
64 + { 'id': 'date', 'filter': 'date'},
65 + { 'id': 'author', 'displayer': 'html' }
66 + ],
67 + 'entryDescriptor': {
68 + 'idProperty': 'id'
69 + }
70 + }
71 + })
72 +
73 + #if ("$!wikimacro.parameters.patterns" != '')
74 + #set ($liveDataConfig.query = {})
75 + #set ($liveDataConfig.query.filters = [
76 + {
77 + "property": "filename",
78 + "matchAll": true,
79 + "constraints": []
80 + }
81 + ])
82 + #set ($filters = $stringtool.split($wikimacro.parameters.patterns, ','))
83 + #foreach ($filter in $filters)
84 + #set ($discard = $liveDataConfig.query.filters[0].constraints.add(
85 + { "operator": "contains", "value": "$!filter.trim()" }
86 + ))
87 + #end
88 + #end
89 + #set ($sourceParameters = $escapetool.url({
90 + 'template': 'xpart.vm',
91 + 'translationPrefix': 'core.viewers.attachments.livetable.',
92 + 'className': 'XWiki.AllAttachments',
93 + "\$doc": "$attachmentsDoc",
94 + 'vm': 'attachmentsjson.vm'
95 + }))
96 + #getLiveDataSort($liveDataSort)
82 82   #if ($invalidSortBy)
83 - {{error}}
84 - Attachment macro error: sortBy parameter must be one of 'date', 'size', or 'name'
85 - {{/error}}
86 - #break
98 + {{warning}}
99 + Attachment macro: sortBy parameter must be one of 'date', 'size', or 'name'
100 + {{/warning}}
87 87   #end
88 88   #if ($invalidSortOrder)
89 - {{error}}
90 - Attachment macro error: sortOrder parameter must be one of 'ascending' or 'descending'
91 - {{/error}}
92 - #break
103 + {{warning}}
104 + Attachment macro: sortOrder parameter must be one of 'ascending' or 'descending'
105 + {{/warning}}
93 93   #end
94 - ## Display attachments
95 - {{html clean="false"}}
96 - <div class="confluence-attachment-macro">
97 - #if ($attachmentsFiltered.size() > 0)
98 - #displayAttachments($attachmentsFiltered)
99 - #deleteAttachmentModal()
100 - #else
101 - <p class="noitems">
102 - $!escapetool.xml($services.localization.render('core.viewers.attachments.noAttachments'))
103 - </p>
104 - #end
105 105  
106 - ## Allow upload
107 - #set ($upload = "$!wikimacro.parameters.upload")
108 - #if ($upload == 'true' && ($hasEdit || $hasAdmin) && $xcontext.action == 'view')
109 - <form
110 - id="AddAttachment"
111 - action="$doc.getURL("upload")"
112 - method="post"
113 - enctype="multipart/form-data"
114 - >
115 - <div>
116 - ## CSRF prevention
117 - <input
118 - type="hidden"
119 - name="form_token"
120 - value="$!{services.csrf.getToken()}"
121 - />
108 + {{liveData
109 + id="$liveDataId"
110 + properties="mimeType,filename,filesize,date,author"
111 + source='liveTable'
112 + sourceParameters="$sourceParameters"
113 + sort="$liveDataSort"
114 + limit=5
115 + }}$jsontool.serialize($liveDataConfig){{/liveData}}
122 122  
123 - <fieldset id="attachform">
124 - <legend>
125 - $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.title'))
126 - </legend>
117 + {{html clean="false"}}#deleteAttachmentModal(){{/html}}
118 +#end
127 127  
128 - <div class="fileupload-field">
129 - <label
130 - class="hidden"
131 - for="xwikiuploadfile"
132 - >
133 - $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.file'))
134 - </label>
135 135  
136 - <input
137 - id="xwikiuploadfile"
138 - class="uploadFileInput noitems"
139 - type="file"
140 - name="filepath"
141 - size="40"
142 - data-max-file-size="$!escapetool.xml($xwiki.getSpacePreference('upload_maxsize'))"
143 - />
144 - </div>
121 +#macro (executeMacro)
122 + #set ($document = $doc)
123 + #if ("$!wikimacro.parameters.page" != '')
124 + #set ($document = $xwiki.getDocument("$!wikimacro.parameters.page"))
125 + #end
145 145  
146 - <div>
147 - <span class="buttonwrapper">
148 - <input
149 - class="button btn btn-primary"
150 - type="submit"
151 - value="$!escapetool.xml($services.localization.render('core.viewers.attachments.upload.submit'))"
152 - />
153 - </span>
154 -
155 - <span class="buttonwrapper">
156 - <a
157 - class="cancel secondary button btn btn-primary"
158 - href="$doc.getURL()"
159 - >
160 - $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.cancel'))
161 - </a>
162 - </span>
163 - </div>
164 - </fieldset>
165 - </div>
166 - </form>
167 - #end
168 - </div> ## .confluence-attachment-macro
127 + {{html clean="false" wiki="true"}}
128 + #showConfluenceAttachments($document)
169 169   {{/html}}
130 +
170 170  #end
171 171  {{/velocity}}
172 172  
Standardkategorie
... ... @@ -1,1 +1,0 @@
1 -confluence