Ä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
am 2023/03/07 16:26
Änderungskommentar:
Install extension [com.xwiki.pro:xwiki-pro-macros/1.7]
Auf Version 3.1
bearbeitet von xwikiadmin
am 2023/10/26 09:31
am 2023/10/26 09:31
Änderungskommentar:
Migrated property [type] from class [XWiki.WikiMacroParameterClass]
Zusammenfassung
-
Objekte (1 geändert, 0 hinzugefügt, 0 gelöscht)
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 +