Änderungen von Dokument Attachments

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

Von Version 1.1
bearbeitet von xwikiadmin
am 2023/03/07 16:26
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.7]
Auf Version 2.1
bearbeitet von xwikiadmin
am 2023/04/25 11:49
Änderungskommentar: Install extension [com.xwiki.pro:xwiki-pro-macros/1.7.1]

Zusammenfassung

Details

XWiki.WikiMacroClass[0]
Makro-Code
... ... @@ -1,169 +1,187 @@
1 1  {{velocity output="false"}}
2 -$xwiki.ssx.use('Confluence.Macros.Attachments')
3 -$xwiki.jsx.use('Confluence.Macros.Attachments')
4 -#if ("$!{request.forceTestRights}" == "1")#template("xwikivars.vm")#end
5 -#template('attachment_macros.vm')
6 -## Get attachments
7 -#if ("$!wikimacro.parameters.tags" != '')
8 - #set ($tags = $!wikimacro.parameters.tags.split(','))
9 - #set ($pageReferenceSet = $collectiontool.getSet())
10 - #foreach ($tag in $tags)
11 - #set ($references = $xwiki.tag.getDocumentsWithTag("$tag"))
12 - #set ($discard = $pageReferenceSet.addAll($references))
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
13 13   #end
14 - #set ($attachments = [])
15 - #foreach ($pageReference in $pageReferenceSet)
16 - #set ($document = $xwiki.getDocument($pageReference))
17 - #set ($documentAttachments = $document.attachmentList)
18 - #set ($discard = $attachments.addAll($documentAttachments))
19 - #end
20 -#else
21 - #set ($attachments = $doc.attachmentList)
22 - #if ("$!wikimacro.parameters.page" != '')
23 - #set ($document = $xwiki.getDocument("$!wikimacro.parameters.page"))
24 - #set ($attachments = $document.attachmentList)
25 - #end
26 -#end
27 -## Filter attachments
28 -#set ($confluencePatterns = "$!wikimacro.parameters.patterns")
29 -#if ($confluencePatterns == '')
30 - #set($attachmentsFiltered = $attachments)
31 -#else
32 - #set ($patterns = $!confluencePatterns.split(','))
33 - #set($attachmentsFiltered = [])
34 - #foreach ($attachment in $attachments)
35 - #foreach ($pattern in $patterns)
36 - #set ($matches = $attachment.filename.matches("(?i)$!pattern"))
37 - #if ($matches)
38 - #set ($discard = $attachmentsFiltered.add($attachment))
39 - #break
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
40 40   #end
41 41   #end
42 42   #end
43 -#end
44 -## Sort attachments
45 -#set ($confluenceSortBy = "$!wikimacro.parameters.sortBy")
46 -#set ($invalidSortBy = false)
47 -#if ($confluenceSortBy == 'date')
48 - #set ($sortBy = 'date')
49 -#elseif ($confluenceSortBy == 'size')
50 - #set ($sortBy = 'filesize')
51 -#elseif ($confluenceSortBy == 'name')
52 - #set ($sortBy = 'filename')
53 -#elseif ($confluenceSortBy == 'creation date')
54 - #set ($sortBy = 'date')
55 -#else
56 - #set ($invalidSortBy = true)
57 -#end
58 -#set ($confluenceSortOrder = "$!wikimacro.parameters.sortOrder")
59 -#set ($invalidSortOrder = false)
60 -#set ($reverseSortOrderProperties = ['filesize', 'date'])
61 -#if ($confluenceSortOrder == 'ascending')
62 - #if ($reverseSortOrderProperties.contains($sortBy))
63 - #set ($sortOrder = 'desc')
45 + ## Sort attachments
46 + #set ($confluenceSortBy = "$!wikimacro.parameters.sortBy")
47 + #set ($invalidSortBy = false)
48 + #if ($confluenceSortBy == 'date')
49 + #set ($sortBy = 'date')
50 + #elseif ($confluenceSortBy == 'size')
51 + #set ($sortBy = 'filesize')
52 + #elseif ($confluenceSortBy == 'name')
53 + #set ($sortBy = 'filename')
54 + #elseif ($confluenceSortBy == 'creation date')
55 + #set ($sortBy = 'date')
64 64   #else
65 - #set ($sortOrder = 'asc')
57 + #set ($invalidSortBy = true)
66 66   #end
67 -#elseif ($confluenceSortOrder == 'descending')
68 - #if ($reverseSortOrderProperties.contains($sortBy))
69 - #set ($sortOrder = 'asc')
59 + #set ($confluenceSortOrder = "$!wikimacro.parameters.sortOrder")
60 + #set ($invalidSortOrder = false)
61 + #set ($reverseSortOrderProperties = ['filesize', 'date'])
62 + #if ($confluenceSortOrder == 'ascending')
63 + #if ($reverseSortOrderProperties.contains($sortBy))
64 + #set ($sortOrder = 'desc')
65 + #else
66 + #set ($sortOrder = 'asc')
67 + #end
68 + #elseif ($confluenceSortOrder == 'descending')
69 + #if ($reverseSortOrderProperties.contains($sortBy))
70 + #set ($sortOrder = 'asc')
71 + #else
72 + #set ($sortOrder = 'desc')
73 + #end
70 70   #else
71 - #set ($sortOrder = 'desc')
75 + #set ($invalidSortOrder = false)
72 72   #end
73 -#else
74 - #set ($invalidSortOrder = false)
77 + #set ($attachmentsFiltered = $collectiontool.sort($attachmentsFiltered, "$sortBy:$sortOrder"))
75 75  #end
76 -#set ($attachmentsFiltered = $collectiontool.sort($attachmentsFiltered, "$sortBy:$sortOrder"))
77 -{{/velocity}}
78 78  
79 -{{velocity}}
80 -#if ($invalidSortBy)
81 - {{error}}
82 - Attachment macro error: sortBy parameter must be one of 'date', 'size', or 'name'
83 - {{/error}}
84 - #break
85 -#end
86 -#if ($invalidSortOrder)
87 - {{error}}
88 - Attachment macro error: sortOrder parameter must be one of 'ascending' or 'descending'
89 - {{/error}}
90 - #break
91 -#end
92 -## Display attachments
93 -{{html clean="false"}}
94 - <div class="confluence-attachment-macro">
95 - #if ($attachmentsFiltered.size() > 0)
96 - #displayAttachments($attachmentsFiltered)
97 - #deleteAttachmentModal()
98 - #else
99 - <p class="noitems">
100 - $!escapetool.xml($services.localization.render('core.viewers.attachments.noAttachments'))
101 - </p>
102 - #end
80 +#macro (executeMacro)
81 + #filterAndSortAttachments($attachmentsFiltered $invalidSortBy $invalidSortOrder)
82 + #if ($invalidSortBy)
83 + {{error}}
84 + Attachment macro error: sortBy parameter must be one of 'date', 'size', or 'name'
85 + {{/error}}
86 + #break
87 + #end
88 + #if ($invalidSortOrder)
89 + {{error}}
90 + Attachment macro error: sortOrder parameter must be one of 'ascending' or 'descending'
91 + {{/error}}
92 + #break
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
103 103  
104 - ## Allow upload
105 - #set ($upload = "$!wikimacro.parameters.upload")
106 - #if ($upload == 'true' && ($hasEdit || $hasAdmin) && $xcontext.action == 'view')
107 - <form
108 - id="AddAttachment"
109 - action="$doc.getURL("upload")"
110 - method="post"
111 - enctype="multipart/form-data"
112 - >
113 - <div>
114 - ## CSRF prevention
115 - <input
116 - type="hidden"
117 - name="form_token"
118 - value="$!{services.csrf.getToken()}"
119 - />
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 + />
120 120  
121 - <fieldset id="attachform">
122 - <legend>
123 - $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.title'))
124 - </legend>
123 + <fieldset id="attachform">
124 + <legend>
125 + $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.title'))
126 + </legend>
125 125  
126 - <div class="fileupload-field">
127 - <label
128 - class="hidden"
129 - for="xwikiuploadfile"
130 - >
131 - $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.file'))
132 - </label>
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>
133 133  
134 - <input
135 - id="xwikiuploadfile"
136 - class="uploadFileInput noitems"
137 - type="file"
138 - name="filepath"
139 - size="40"
140 - data-max-file-size="$!escapetool.xml($xwiki.getSpacePreference('upload_maxsize'))"
141 - />
142 - </div>
143 -
144 - <div>
145 - <span class="buttonwrapper">
146 146   <input
147 - class="button btn btn-primary"
148 - type="submit"
149 - value="$!escapetool.xml($services.localization.render('core.viewers.attachments.upload.submit'))"
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'))"
150 150   />
151 - </span>
144 + </div>
152 152  
153 - <span class="buttonwrapper">
154 - <a
155 - class="cancel secondary button btn btn-primary"
156 - href="$doc.getURL()"
157 - >
158 - $!escapetool.xml($services.localization.render('core.viewers.attachments.upload.cancel'))
159 - </a>
160 - </span>
161 - </div>
162 - </fieldset>
163 - </div>
164 - </form>
165 - #end
166 - </div> ## .confluence-attachment-macro
167 -{{/html}}
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
169 + {{/html}}
170 +#end
168 168  {{/velocity}}
169 169  
173 +{{include reference="Licenses.Code.VelocityMacros"/}}
174 +
175 +{{velocity}}
176 +## We need to check if there is a valid license because the macro is registered even if the user doesn't have view right
177 +## on the macro definition page. See XWIKI-14828: Rendering macros defined in wiki pages are available to users that
178 +## don't have view right on those pages.
179 +#if ($services.licensing.licensor.hasLicensureForEntity($xcontext.macro.doc.documentReference))
180 + #executeMacro
181 +#else
182 + {{error}}
183 + #getMissingLicenseMessage('proMacros.extension.name')
184 + {{/error}}
185 +#end
186 +{{/velocity}}
187 +