Details
-
Improvement
-
Resolution: Duplicate
-
Minor
-
None
-
3.5
-
None
-
all attachments filesize attachment
-
Description
I was looking for a way to display the filesizes in the XWiki.AllAttachments page, and find out large attachments that had been uploaded.
The following is a modified 3.5 version of XWiki.AllAttachments and XWiki.AllAttachmentsResults, which implements this idea.
(note I just overrode the display name of the column)
XWiki.AllAttachments: (attached javascript object)
(function(){ if (typeof XWiki == "undefined") { XWiki = new Object(); } if (typeof XWiki.index == "undefined") { XWiki.index = new Object(); } var mimetypes = { "image/svg" : { "src" : "$xwiki.getSkinFile('icons/silk/vector.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.svg")}", "title" : "${msg.get("core.viewers.attachments.mime.svg")}" }, "application/svg+xml" : { "src" : "$xwiki.getSkinFile('icons/silk/vector.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.svg")}", "title" : "${msg.get("core.viewers.attachments.mime.svg")}" }, "text/plain" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_text.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.text")}", "title" : "${msg.get("core.viewers.attachments.mime.text")}"}, "text/html" : { "src" : "$xwiki.getSkinFile('icons/silk/html.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.html")}", "title" : "${msg.get("core.viewers.attachments.mime.html")}"}, "text/css" : { "src" : "$xwiki.getSkinFile('icons/silk/css.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.css")}", "title" : "${msg.get("core.viewers.attachments.mime.css")}" }, "application/xml" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_code.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.xml")}", "title" : "${msg.get("core.viewers.attachments.mime.xml")}" }, "application/pdf" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_acrobat.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.pdf")}", "title" : "${msg.get("core.viewers.attachments.mime.pdf")}" }, "application/postscript" : { "src" : "$xwiki.getSkinFile('icons/silk/page_red.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.ps")}", "title" : "${msg.get("core.viewers.attachments.mime.ps")}" }, "application/msword" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_word.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.document")}", "title" : "${msg.get("core.viewers.attachments.mime.document")}"}, "application/powerpoint" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_powerpoint.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.presentation")}", "title" : "${msg.get("core.viewers.attachments.mime.presentation")}" }, "application/x-shockwave-flash" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_flash.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.flash")}", "title" : "${msg.get("core.viewers.attachments.mime.flash")}" }, "application/x-tar" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_compressed.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.tar")}", "title" : "${msg.get("core.viewers.attachments.mime.tar")}" }, "application/zip" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_zip.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.zip")}", "title" : "${msg.get("core.viewers.attachments.mime.zip")}" }, "application/x-gzip" : { "src" : "$xwiki.getSkinFile('icons/silk/page_white_compressed.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.gz")}", "title" : "${msg.get("core.viewers.attachments.mime.gz")}" }, "application/java-archive" : { "src" : "$xwiki.getSkinFile('icons/silk/cup.gif')", "alt" : "${msg.get("core.viewers.attachments.mime.jar")}", "title" : "${msg.get("core.viewers.attachments.mime.jar")}" } }; /** * JavasScript equivalent of the #mimetype macro. * Returns a 20px * 20px image (as an element) corresponding to the passed mimetype. * First lookup if the type is in the mimetypes object above, then handles some other cases (starts/end with, etc.) * This function should be cleaned at the same time the mimetype images and macro are. */ function getMimeTypeImage(type) { var image = undefined; if (mimetypes[type]) { image = new Element('img',{'src':mimetypes[type].src,'alt':mimetypes[type].alt,'title':mimetypes[type].title}); } else if(type.match(/^image\//)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/picture.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.image")}", 'title': "${msg.get("core.viewers.attachments.mime.image")}"}); } else if(type.match(/^text\//)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/page_white_text.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.text")}", 'title': "${msg.get("core.viewers.attachments.mime.text")}"}); } else if(type.match(/^audio\//)){ image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/music.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.audio")}", 'title': "${msg.get("core.viewers.attachments.mime.audio")}"}); } else if(type.match(/^video\//)){ image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/film.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.video")}", 'title': "${msg.get("core.viewers.attachments.mime.video")}"}); } else if(type=="application/octet-stream") { if (type.match(/\.xls$/)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/page_white_excel.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.spreadsheet")}", 'title': "${msg.get("core.viewers.attachments.mime.spreadsheet")}"}); } else if (type.match(/\.bz$/)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/page_white_compressed.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.bz")}", 'title': "${msg.get("core.viewers.attachments.mime.bz")}"}); } else if (type.match(/\.tgz$/)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/page_white_compressed.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.gz")}", 'title': "${msg.get("core.viewers.attachments.mime.gz")}"}); } else if (type.match(/\.rar$/)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/page_white_compressed.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.rar")}", 'title': "${msg.get("core.viewers.attachments.mime.rar")}"}); } else if (type.match(/\.(odt|odp|odf|ods|sxw|stw)$/)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/page.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.office")}", 'title': "${msg.get("core.viewers.attachments.mime.office")}"}); } } else if (type.match(/^application\//)) { image = new Element('img', {'src':"$xwiki.getSkinFile('icons/silk/cog.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.exe")}", 'title': "${msg.get("core.viewers.attachments.mime.exe")}"}); } if (typeof image == "undefined") { image = new Element('img', {'src': "$xwiki.getSkinFile('icons/silk/page_white.gif')", 'alt':"${msg.get("core.viewers.attachments.mime.attachment")}", 'title': "${msg.get("core.viewers.attachments.mime.attachment")}"}); } image.style.width = '16px'; image.style.height = '16px'; return image; } XWiki.index.displayAttachmentEntry = function (row, i, table) { var inaccessibleDocs = false; if(row.acclev == true) { var fileLink = new Element('a', {'href' : row.fileurl}).update(row.filename); var tr = new Element('tr').update(new Element('td').update(fileLink)); var pageLink = new Element('a', {'href' : row.url}).update(row.page); tr.appendChild(new Element('td', {'class' : 'pagename'}).update(pageLink)); var spaceLink = new Element('a', {'href' : row.spaceurl}).update(row.space); tr.appendChild(new Element('td', {'class' : 'spacename'}).update(spaceLink)); tr.appendChild(new Element('td').update(row.date)); var aa = new Element('a', {'href' : row.authorurl}).update(row.authorname); tr.appendChild(new Element('td').update(aa)); var type = new Element('td').update(getMimeTypeImage(row.type)); tr.appendChild(type); if(row.filesize) { var filesizeBytes = row.filesize; var largeAttachment = filesizeBytes > (1048576 * 3); var filesizeStr = filesizeBytes > 1048576 ? (Math.round(filesizeBytes / 1048576)).toFixed(0) + " MB" : (filesizeBytes / 1024).toFixed(1) + " KB" var filesizeTd = largeAttachment ? new Element('td',{'style':'color:red;'}) : new Element('td') filesizeTd.update(filesizeStr); tr.appendChild(filesizeTd); } return tr; } else { var tr = new Element('tr'); var page = row.fullname; var td1 = new Element('td').update("unavailable"); var td2 = new Element('td', {'class' : 'pagename'}).update(page + "*"); var td3 = new Element('td').update(" "); var td4 = new Element('td').update(" "); var td5 = new Element('td').update(" "); var td6 = new Element('td').update(" "); var td7 = new Element('td').update(" "); tr.appendChild(td1); tr.appendChild(td2); tr.appendChild(td3); tr.appendChild(td4); tr.appendChild(td5); tr.appendChild(td6); if(row.filesize) { tr.appendChild(td7); } $('inaccessibleDocsMessage').removeClassName('hidden'); return tr; } } })();
XWiki.AllAttachments: (editor)
{{velocity}} #set ($discard = $xwiki.jsx.use('XWiki.AllAttachments')) ## #set ($collist = ['filename', 'doc.name', 'doc.space', 'date', 'author', 'type','filesize']) #set ($colprops = { 'filename' : { 'type' : 'text', 'size' : 10 }, 'doc.name' : { 'type' : 'text', 'size' : 10 }, 'doc.space' : { 'type' : 'text', 'size' : 10 }, 'date' : { 'type' : 'date', 'size' : 10, 'filterable' : false }, 'author' : { 'type' : 'text', 'size' : 10 }, 'type' : { 'sortable' : false }, 'filesize' : { 'displayName' : 'File Size', 'size' : 10 } }) #set($options = { 'url' : $xwiki.getURL('XWiki.AllAttachmentsResults', 'get', 'xpage=plain&outputSyntax=plain'), 'callback' : 'XWiki.index.displayAttachmentEntry', 'translationPrefix' : 'platform.index.attachments.' }) #livetable('allattachments' $collist $colprops $options) (% id="inaccessibleDocsMessage" class="hidden" %) ((( {{info}}$msg.get('rightsmanager.documentrequireviewrights'){{/info}} ))) {{/velocity}}
XWiki.AllAttachmentsResults:
{{velocity wiki="false"}} ## ============================================================================================ ## This page is called from live grids via Ajax with the argument xpage=plain. It returns a ## set of results serialized in JSON. ## @programming This service page needs to be saved by a user with the programming access level ## to work as expected ## ============================================================================================ #if ("$!request.get('xpage')" == 'plain') $response.setContentType('application/json')## #set ($offset = $util.parseInt($request.get('offset'))) ## offset starts from 0 in velocity and 1 in javascript #set ($off = $offset - 1) #set ($limit = $util.parseInt($request.get('limit'))) #set ($title = $request.get('doc.name')) #set ($author = $request.get('author')) #set ($space = $request.get('doc.space')) #set ($filename = $request.filename) #set ($formatDate = 'yyyy MMMM dd, HH:mm') #set ($query = '') #set ($queryParameters = []) #if ($title) #set ($title = $title.trim().toLowerCase()) #set ($query = $query + " and lower(doc.name) like ?") #set ($discard = $queryParameters.add("%${title}%")) #end #if ($author) #set ($author = $author.trim().toLowerCase()) #set ($query = $query + " and lower(attach.author) like ?") #set ($discard = $queryParameters.add("%${author}%")) #end #if ($filename) #set ($filename = $filename.trim().toLowerCase()) #set ($query = $query + " and lower(attach.filename) like ?") #set ($discard = $queryParameters.add("%${filename}%")) #end #if ($space) #set ($space = $space.trim().toLowerCase()) #set ($query = $query + " and lower(doc.space) like ?") #set ($discard = $queryParameters.add("%${space}%")) #end ## ## Exclude Blacklisted spaces ($blacklistedSpaces is set in xwikivars.vm) ## #if (!$hasAdmin) #foreach ($blacklistedSpace in $blacklistedSpaces) #set ($query = "${query} and doc.space <> ?") #set ($discard = $queryParameters.add($blacklistedSpace)) #end #end #set ($validSortOptions = ['filename', 'doc.name', 'doc.space', 'date', 'author','filesize']) #if ($validSortOptions.contains($request.sort)) #set ($order = $request.sort) #else #set ($order = 'filename') #end #if (!$order.startsWith('doc.')) #set ($order = "attach.${order}") #end #if ("$!request.dir" == 'desc') #set ($dir = 'desc') #else #set ($dir = 'asc') #end ## ## Compute the final query ## #set ($countQuery = "select count(*) from XWikiDocument as doc, XWikiAttachment as attach where attach.docId=doc.id" + $query) #set ($query = "select doc.fullName, attach from XWikiDocument as doc, XWikiAttachment as attach where attach.docId=doc.id" + $query + " order by $order $dir") #set ($items = $xwiki.search($query, $limit, $off, $queryParameters)) #set ($totalItems = $xwiki.search($countQuery, 0, 0, $queryParameters).get(0)) #set ($returnedItems = $items.size()) ## ============================================== ## json starts ## ============================================== { "totalrows": $totalItems, "returnedrows": #if($returnedItems < $limit) $returnedItems #else $limit #end, "offset": $offset, "reqNo": $util.parseInt($request.reqNo), "rows": [ #foreach ($item in $items) #set ($docName = $item.get(0)) #set ($hasAccess = $xwiki.hasAccessLevel('view', $context.user, $docName)) #set ($attachment = $item.get(1)) #if ($velocityCount > 1) , #end { "acclev" : $hasAccess, #if ($hasAccess) #set ($document = $xwiki.getDocument($docName)) "page" : "$escapetool.javascript($document.name)", "space" : "$escapetool.javascript($document.space)", "fullname" : "$escapetool.javascript($document.fullName)", "filename" : "$escapetool.javascript($attachment.filename)", "fileurl" : "$document.getAttachmentURL($attachment.filename)", "url" : "$document.getURL('view')", "spaceurl" : "$xwiki.getURL("${document.space}.WebHome")", "date" : "$xwiki.formatDate($attachment.date, $formatDate)", "author" : "$!escapetool.javascript($attachment.author)", "authorname" : "$!escapetool.javascript($xwiki.getDocument($attachment.author).name)", "authorurl" : "$xwiki.getURL($attachment.author)", "type" : "$!escapetool.javascript($attachment.getMimeType($context.context))", "filesize" : "$!escapetool.javascript($attachment.getFilesize())" #else "fullname": "$escapetool.javascript($docName)" #end } #end ]} ## ============================================== ## json ended ## ============================================== #end {{/velocity}}
Attachments
Issue Links
- duplicates
-
XWIKI-7469 Display attachment size in the attachment index
- Closed