| ... |
... |
@@ -45,11 +45,14 @@ |
| 45 |
45 |
#end |
| 46 |
46 |
(% class="gallery" %)((( |
| 47 |
47 |
## Only display the upload form if they have edit permission on targetAttachDocument |
| 48 |
|
- #if ($xwiki.hasAccessLevel('edit',$xcontext.user,${targetAttachDocument.fullName})) |
| 49 |
|
- #attachmentPicker_displayUploadForm($targetDocument, $targetAttachDocument, $options) |
| 50 |
|
- #end |
|
48 |
+ #attachmentPicker_displayUploadForm($targetDocument, $targetAttachDocument, $options) |
| 51 |
51 |
#attachmentPicker_displayAttachmentGalleryEmptyValue($targetDocument, $targetAttachDocument, $options, $currentValue) |
| 52 |
|
- #set ($sortedAttachments = $collectiontool.sort($targetAttachDocument.getAttachmentList(), "${options.sortAttachmentsBy}") ) |
|
50 |
+ #if ("$!services.temporaryAttachments" != '') |
|
51 |
+ #set ($unsortedAttachments = $services.temporaryAttachments.listAllAttachments($targetAttachDocument)) |
|
52 |
+ #set ($sortedAttachments = $collectiontool.sort($unsortedAttachments, "${options.sortAttachmentsBy}")) |
|
53 |
+ #else |
|
54 |
+ #set ($sortedAttachments = $collectiontool.sort($targetAttachDocument.getAttachmentList(), "${options.sortAttachmentsBy}") ) |
|
55 |
+ #end |
| 53 |
53 |
#foreach ($attachment in $sortedAttachments) |
| 54 |
54 |
#set ($extension = $attachment.getFilename()) |
| 55 |
55 |
#set ($extension = $extension.substring($mathtool.add($extension.lastIndexOf('.'), 1)).toLowerCase()) |
| ... |
... |
@@ -69,12 +69,24 @@ |
| 69 |
69 |
* @param $currentValue the currently selected file, used for determining if the box should be highlighted as the current value |
| 70 |
70 |
*# |
| 71 |
71 |
#macro (attachmentPicker_displayAttachmentBox $attachment $targetDocument $targetAttachDocument, $options $currentValue) |
| 72 |
|
- #if ($options.displayImage && $attachment.isImage()) |
| 73 |
|
- #set ($cssClass = 'gallery_image') |
|
75 |
+ #set ($hasTemporaryAttachment = "$!services.temporaryAttachments" != '') |
|
76 |
+ #set ($canEdit = $xwiki.hasAccessLevel('edit', $xcontext.user, ${targetAttachDocument.fullName})) |
|
77 |
+ #set ($isTemporaryAttachment = false) |
|
78 |
+ #if(!$hasTemporaryAttachment) |
|
79 |
+ #set ($canDeleteAttachment = $canEdit) |
| 74 |
74 |
#else |
| 75 |
|
- #set ($cssClass = '') |
|
81 |
+ #set ($isTemporaryAttachment = $services.temporaryAttachments.temporaryAttachmentExists($attachment)) |
|
82 |
+ ## TODO: Update once it is made possible to delete temporary attachments (see XWIKI-20225). |
|
83 |
+ #set ($canDeleteAttachment = !$isTemporaryAttachment && $canEdit) |
| 76 |
76 |
#end |
| 77 |
|
- #attachmentPicker_displayStartFrame({'value' : $attachment.filename, 'text' : $attachment.filename, 'cssClass' : "$!{cssClass}"} $currentValue) |
|
85 |
+ #set ($cssClasses = []) |
|
86 |
+ #if ($options.displayImage && $attachment.isImage()) |
|
87 |
+ #set ($discard = $cssClasses.add('gallery_image')) |
|
88 |
+ #end |
|
89 |
+ #if ($isTemporaryAttachment) |
|
90 |
+ #set ($discard = $cssClasses.add('temporary_attachment')) |
|
91 |
+ #end |
|
92 |
+ #attachmentPicker_displayStartFrame({'value' : $attachment.filename, 'text' : $attachment.filename, 'cssClass' : "${stringtool.join($cssClasses, ' ')}"} $currentValue) |
| 78 |
78 |
#attachmentPicker_displayAttachmentDetails($attachment $options) |
| 79 |
79 |
#set ($returnURL = $escapetool.url($doc.getURL('view', $request.queryString))) |
| 80 |
80 |
#set ($deleteURL = $targetAttachDocument.getAttachmentURL($attachment.filename, 'delattachment', "xredirect=${returnURL}&form_token=$!{services.csrf.getToken()}") ) |
| ... |
... |
@@ -83,7 +83,20 @@ |
| 83 |
83 |
"${options.get('classname')}_${options.get('object')}_${options.get('property')}": ${attachment.filename}, |
| 84 |
84 |
'form_token': $!{services.csrf.getToken()} |
| 85 |
85 |
}))) |
| 86 |
|
- #attachmentPicker_displayEndFrame ([{'name' : 'select', 'url' : $selectURL}, {'name' : 'delete', 'url' : $deleteURL}]) |
|
101 |
+ ## Delete action is only proposed for users with the edit right on the document. |
|
102 |
+ ## If the temporary attachment is available, the delete action is only allowed for non-temporary attachments. |
|
103 |
+ #set ($attachmentActions = [{'name' : 'select', 'url' : $selectURL}]) |
|
104 |
+ #if($canDeleteAttachment) |
|
105 |
+ #set ($discard = $attachmentActions.add({'name' : 'delete', 'url' : $deleteURL})) |
|
106 |
+ #end |
|
107 |
+ #define($additionalContent) |
|
108 |
+ #if ($isTemporaryAttachment) |
|
109 |
+ #set ($titleMessage = $services.localization.render('attachment.attachmentSelector.attachmentBox.temporaryAttachmentTitle')) |
|
110 |
+ #set ($titleMessage = $services.rendering.escape($titleMessage, 'xwiki/2.1')) |
|
111 |
+ (% title="$titleMessage" %)$services.icon.render('clock')(%%) |
|
112 |
+ #end |
|
113 |
+ #end |
|
114 |
+ #attachmentPicker_displayEndFrame ($attachmentActions $additionalContent) |
| 87 |
87 |
#end |
| 88 |
88 |
|
| 89 |
89 |
#** |
| ... |
... |
@@ -139,8 +139,9 @@ |
| 139 |
139 |
* <dt>rel</dt> |
| 140 |
140 |
* <dd>an optional parameter to be used in the "rel" HTML attribute; for example "__blank" can be used to open the link in a new tab/window</dd> |
| 141 |
141 |
* </dl> |
|
170 |
+ * @param $additionalContent optional additional content that does not follow the structure of the actions |
| 142 |
142 |
*# |
| 143 |
|
-#macro (attachmentPicker_displayEndFrame $actions) |
|
172 |
+#macro (attachmentPicker_displayEndFrame $actions $additionalContent) |
| 144 |
144 |
)))## attachmentframe |
| 145 |
145 |
(% class="gallery_actions" %)((( |
| 146 |
146 |
#foreach ($action in $actions) |
| ... |
... |
@@ -147,6 +147,7 @@ |
| 147 |
147 |
#set( $actionname = $services.localization.render("${translationPrefix}.actions.${action.name}") ) |
| 148 |
148 |
[[${actionname}>>path:${action.url}||class="tool ${action.name}" title="${actionname}" #if($action.rel) rel="${action.rel}"#end]]## |
| 149 |
149 |
#end |
|
179 |
+ $!additionalContent |
| 150 |
150 |
)))## actions |
| 151 |
151 |
)))## attachmentbox |
| 152 |
152 |
#end |
| ... |
... |
@@ -303,8 +303,10 @@ |
| 303 |
303 |
$!targetDocument.use($targetDocument.getObject($options.classname, $options.object))## |
| 304 |
304 |
#attachmentPicker_displayAttachmentGallery($targetDocument, $targetAttachDocument, $options) |
| 305 |
305 |
|
|
336 |
+ #set ($cancelLinkName = $services.rendering.escape($services.rendering.escape($services.localization.render("${translationPrefix}.cancel"), 'xwiki/2.1'), 'xwiki/2.1')) |
|
337 |
+ #set ($cancelLinkTarget = $services.rendering.escape($services.model.serialize($targetDocument), 'xwiki/2.1')) |
| 306 |
306 |
(% class="gallery_buttons buttons" %)((( |
| 307 |
|
- (% class="buttonwrapper secondary" %)[[$services.localization.render("${translationPrefix}.cancel")>>${targetDocument}||class="button secondary" id="attachment-picker-close"]] |
|
339 |
+ (% class="buttonwrapper secondary" %)[[$cancelLinkName>>$cancelLinkTarget||class="button secondary" id="attachment-picker-close"]] |
| 308 |
308 |
))) |
| 309 |
309 |
#end |
| 310 |
310 |
{{/velocity}} |