Uploaded image for project: '{RETIRED} XWiki Enterprise'
  1. {RETIRED} XWiki Enterprise
  2. XE-614

Errors in UI for deleted documents & attachments

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.2.2
    • Fix Version/s: 2.2.3, 2.3 M1
    • Component/s: Navigation Application
    • Labels:
      None
    • Environment:
      XWiki Enterprise Manager 2.2
    • keywords:
      patch, UI Deleted documents/attachments
    • Similar issues:

      Description

      Deleted documents not displayed in virtual wikis.

      Errormessage:

      org.xwiki.rendering.macro.MacroExecutionException: Failed to evaluate Velocity Macro for content [##
      #set($dateFormat = 'yyyy MMMM d, HH:mm')
      #if(!$request.list)
      $xwiki.ssx.use('XWiki.DeletedDocuments')##
      #if(!$xwiki.hasProgrammingRights())
      warning}}This document requires programming rights and needs to be saved by an administrator of this Wiki{{/warning
      #end
      $xwiki.jsx.use('XWiki.DeletedDocuments')##
      ##
      #set($columns = ["ddoc.fullName", "ddoc.title", "ddoc.date", "ddoc.deleter", 'actions'])
      #set($columnProperties = {
      'ddoc.fullName' :

      { 'type' : 'text', 'size' : 10 }

      ,
      'ddoc.title' :

      { 'type' : 'text', 'filterable' : false, 'sortable' : false }

      ,
      'ddoc.date' :

      { 'type' : 'date', 'filterable' : false }

      ,
      'ddoc.deleter' :

      { 'type' : 'text', 'size' : 10 }

      ,
      'actions' :

      { 'type' : 'text', 'filterable' : false, 'sortable' : false }

      })##
      #set($options =

      { 'url' : "$xwiki.getURL('XWiki.DeletedDocuments', 'view', 'list=1&xpage=plain&outputSyntax=plain')", 'callback' : 'XWiki.index.trash.documents.displayEntry', 'translationPrefix' : 'xe.index.trash.documents.' }

      )##
      ##
      ##
      ##
      html wiki="true" clean="false"
      <div class="hidden">
      #livetable('documentsTrash' $columns $columnProperties $options)
      </div>
      /html
      ##
      ##
      ##

      html wiki="true" clean="false"
      <noscript>
      #set($deletedDocuments = $xwiki.search('select count(ddoc.id) from XWikiDeletedDocument as ddoc').get(0))
      #if($deletedDocuments == 0)

      info$msg.get('xe.index.trash.documents.empty')/info

      #else
      #macro(displayDeletedDoc $id)
      #set($ddoc = $xwiki.getDeletedDocument('', '', "$id"))
      #set($originalDocument = $ddoc.getDocument())
      <tr>
      <td><a href="$originalDocument.getURL('view', "viewer=recyclebin&id=${id}")">$ddoc.fullName</a></td>
      <td>$originalDocument.displayTitle</td>
      <td>$xwiki.formatDate($ddoc.getDate(), $dateFormat)</td>
      <td>$xwiki.getLocalUserName($ddoc.getDeleter())</td>
      <td class="itemActions">
      #if($xwiki.getDocument($ddoc.fullName).isNew())
      #if($ddoc.canUndelete())
      <a href="${originalDocument.getURL('undelete', "id=${id}")}" class="tool restore" title="$msg.get('xe.index.trash.documents.actions.restore.tooltip')">$msg.get('xe.index.trash.documents.actions.restore.text')</a>
      #end
      #else
      <a href="${originalDocument.getURL()}" class="tool cannot-restore" title="$msg.get('xe.index.trash.documents.actions.cannotRestore.tooltip')">$msg.get('xe.index.trash.documents.actions.cannotRestore.text')</a>
      #end
      #if($ddoc.canDelete())
      <a href="${originalDocument.getURL('delete', "id=${id}&xredirect=$util.encodeURI($!request.getRequestURI())?$util.encodeURI($!request.getQueryString())")}" class="tool delete" title="$msg.get('xe.index.trash.documents.actions.delete.tooltip')">$msg.get('xe.index.trash.documents.actions.delete.text')</a>
      #end
      </td>
      </tr>
      #end
      ##
      #if("$!

      {request.view}" == '')
      #set($queryParams = '')
      #else
      #set($queryParams = "view=$!{request.view}

      ")
      #end
      #set($paginationParameters =

      { 'totalItems' : $xwiki.search("select count(ddoc.id) from XWikiDeletedDocument as ddoc").get(0), 'defaultItemsPerPage' : 15, 'url' : $doc.getURL('view', $queryParams) }

      )
      #pagination($paginationParameters)
      <table id="searchResults" class="xwiki-livetable xwiki-livetable-display">
      <thead class="xwiki-livetable-display-header"><tr>
      <th scope="col" class="xwiki-livetable-display-header-text selected asc">$msg.get('xe.index.trash.documents.ddoc.fullName')</th>
      <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.documents.ddoc.title')</th>
      <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.documents.ddoc.date')</th>
      <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.documents.ddoc.deleter')</th>
      <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.documents.actions')</th>
      </tr></thead>
      <tbody class="xwiki-livetable-display-body">
      #foreach($item in $xwiki.search('select ddoc.id from XWikiDeletedDocument as ddoc order by ddoc.fullName asc', $paginationParameters.itemsPerPage, $paginationParameters.firstItem))
      #displayDeletedDoc($item)
      #end
      </tbody>
      </table>
      #set($discard = $paginationParameters.put('position', 'bottom'))
      #pagination($paginationParameters)
      #end ## deletedDocuments.size
      </noscript>
      /html
      #else ## request.list

        1. ============================================================================================
        2. This page is called from live table via Ajax with the argument xpage=plain. It returns a
        3. set of results serialized in JSON.
        4. @programming This service page needs to be saved by a user with the programming access level
        5. to work as expected
        6. ============================================================================================
          #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($offset = $offset - 1)
          #set($limit = $util.parseInt($request.get('limit')))
          #set($docNameFilter = $request.get('ddoc.fullName'))
          #set($deleterFilter = $request.get('ddoc.deleter'))
          #set($sql = '')
          #if("$!{docNameFilter}" != '')
          #set($sql = "and lower(ddoc.fullName) like '%${docNameFilter.trim().toLowerCase()}%' ")
          #end
          #if("$!{deleterFilter}" != '')
          #set($sql = $sql + "and lower(ddoc.deleter) like '%${deleterFilter.trim().toLowerCase()}%' ")
          #end
          #if("$!{request.sort}" != '')
          #set($order = $request.sort)
          #else
          #set($order = 'ddoc.id')
          #end
          #if("$!{request.dir}" != '')
          #set($dir = $request.dir)
          #else
          #set($dir = 'asc')
          #end
          #set($selectSql = "select ddoc.id from XWikiDeletedDocument as ddoc where 1=1 " + $sql + " order by $order $dir")
          #set($countSql = "select count from XWikiDeletedDocument as ddoc where 1=1 " + $sql)
          #set($items = $xwiki.search($selectSql, $limit, $offset))
          #set($totalItems = $xwiki.search($countSql).get(0))
          #set($returnedItems = $items.size())
          ## ==============================================
          ## json starts
          ## ==============================================
          {
          "totalrows": $totalItems,
          "returnedrows": $returnedItems,
          "offset": ${request.get('offset')},
          "reqNo": ${request.reqNo},
          "rows": [
          #foreach($item in $items)
          #set($ddoc = $xwiki.getDeletedDocument('', '', "$item"))
          #if($velocityCount > 1) , #end
          {
          #set($originalDocument = $ddoc.getDocument())
          "fullname" : "$originalDocument.fullName",
          "title" : "$originalDocument.displayTitle",
          "url" : "$originalDocument.getURL('view', "viewer=recyclebin&id=${item}")",
          "originalUrl" : "$originalDocument.getURL()",
          "canDelete" : $ddoc.canDelete(),
          "deleteUrl" : "$originalDocument.getURL('delete', "id=${item}")",
          "canRestore" : $ddoc.canUndelete(),
          "alreadyExists" : !$xwiki.getDocument($ddoc.fullName).isNew(),
          "restoreUrl" : "$originalDocument.getURL('undelete', "id=${item}")",
          "date" : "$xwiki.formatDate($ddoc.date, $dateFormat)",
          "deleter" : "$ddoc.deleter",
          "deletername" : "$xwiki.getUserName($ddoc.deleter, false)",
          "deleterurl" : "$xwiki.getURL($ddoc.deleter, 'view')"
          }
          #end
          ]}
          ## ==============================================
          ## json ended
          ## ==============================================
          #end ## xpage=plain
          #end ## request.list]
          at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluate(VelocityMacro.java:118)
          at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluate(VelocityMacro.java:44)
          at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:200)
          at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:53)
          at org.xwiki.rendering.internal.transformation.MacroTransformation.transformOnce(MacroTransformation.java:175)
          at org.xwiki.rendering.internal.transformation.MacroTransformation.transform(MacroTransformation.java:120)
          at org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:72)
          at com.xpn.xwiki.doc.XWikiDocument.performSyntaxConversion(XWikiDocument.java:6847)
          at com.xpn.xwiki.doc.XWikiDocument.performSyntaxConversion(XWikiDocument.java:6822)
          at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:725)
          at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:739)
          at com.xpn.xwiki.api.Document.getRenderedContent(Document.java:492)
          at sun.reflect.GeneratedMethodAccessor386.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
          at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
          at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:493)
          at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:71)
          at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:142)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:106)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:191)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:156)
          at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:116)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1806)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1727)
          at com.xpn.xwiki.api.XWiki.parseTemplate(XWiki.java:740)
          at sun.reflect.GeneratedMethodAccessor210.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
          at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
          at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:332)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:212)
          at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:247)
          at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:106)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:191)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:156)
          at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:116)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1806)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1727)
          at com.xpn.xwiki.web.Utils.parseTemplate(Utils.java:148)
          at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:224)
          at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:115)
          at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
          at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
          at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
          at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.wysiwyg.server.filter.ConversionFilter.doFilter(ConversionFilter.java:152)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:118)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java:68)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.web.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:295)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:112)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
          at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
          at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
          at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
          at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
          at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
          at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
          at java.lang.Thread.run(Thread.java:619)
          Caused by: org.xwiki.velocity.XWikiVelocityException: Failed to evaluate content with id [velocity macro]
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:200)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:156)
          at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluate(VelocityMacro.java:110)
          ... 93 more
          Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'get' in class java.util.Collections$EmptyList threw exception java.lang.IndexOutOfBoundsException: Index: 0 at velocity macro[line 37, column 99]
          at org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:337)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:284)
          at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
          at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:493)
          at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:71)
          at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:142)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:191)
          ... 95 more
          Caused by: java.lang.IndexOutOfBoundsException: Index: 0
          at java.util.Collections$EmptyList.get(Collections.java:2970)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
          ... 103 more


          Error switching to deleted attachments tab when attachment recyclebin is disabled in xwiki.cfg.

          Errormessage:

          org.xwiki.rendering.macro.MacroExecutionException: Failed to evaluate Velocity Macro for content [##
          #set($dateFormat = 'yyyy MMMM d, HH:mm')
          #if(!$request.list)
          $xwiki.ssx.use('XWiki.DeletedAttachments')##
          #if(!$xwiki.hasProgrammingRights())
          warning}}This document requires programming rights and needs to be saved by an administrator of this Wiki{{/warning
          #end
          $xwiki.jsx.use('XWiki.DeletedAttachments', {'minify' : 'false'})##
          ##
          #set($columns = ['datt.filename', 'datt.docName', 'datt.date', 'datt.deleter', 'actions'])
          #set($columnProperties = {
          'datt.filename' : { 'type' : 'text', 'size' : 10 },
          'datt.docName' : { 'type' : 'text', 'size' : 10 },
          'datt.date' : { 'type' : 'date', 'filterable' : false },
          'datt.deleter' : { 'type' : 'text', 'size' : 10 },
          'actions' : { 'type' : 'text', 'filterable' : false, 'sortable' : false }
          })##
          #set($options = { 'url' : "$xwiki.getURL('XWiki.DeletedAttachments', 'view', 'list=1&xpage=plain&outputSyntax=plain')", 'callback' : 'XWiki.index.trash.attachments.displayEntry', 'translationPrefix' : 'xe.index.trash.attachments.' })##
          ##
          ##
          ##
          html wiki="true" clean="false"
          <div class="hidden">
          #livetable('attachmentTrash' $columns $columnProperties $options)
          </div>
          /html
          ##
          ##
          ##
          html wiki="true" clean="false"
          <noscript>
          #set($deletedAttachments = $xwiki.search('select count(datt.id) from DeletedAttachment as datt').get(0))
          #if($deletedAttachments == 0)

          info$msg.get('xe.index.trash.attachments.empty')/info

          #else
          #macro(displayDeletedAttachment $id)
          #set($datt = $xwiki.getDeletedAttachment("$id"))
          #set($originalAttachment = $datt.getAttachment())
          #set($originalDocument = $xwiki.getDocument($datt.docName))
          <tr>
          <td><a href="$originalDocument.getAttachmentRevisionURL($originalAttachment.filename, $originalAttachment.version, "rid=${datt.id}").replaceAll('&', '&')">$datt.filename</a></td>
          <td><a href="$originalDocument.getURL()">$originalDocument.displayTitle (${originalDocument.fullName})</a></td>
          <td>$xwiki.formatDate($datt.getDate(), $dateFormat)</td>
          <td>$xwiki.getLocalUserName($datt.getDeleter())</td>
          <td class="itemActions">
          #if($datt.canDelete())
          <a href="${originalDocument.getAttachmentURL($datt.filename, 'delattachment', "trashId=${datt.id}&xredirect=$util.encodeURI($!request.getRequestURI())?$util.encodeURI($!request.getQueryString())")}" class="tool delete" title="$msg.get('xe.index.trash.attachments.actions.delete.tooltip')">$msg.get('xe.index.trash.attachments.delete.text')</a>
          #end
          </td>
          </tr>
          #end
          ##
          #if("$!{request.view}" == '')
          #set($queryParams = '')
          #else
          #set($queryParams = "view=$!{request.view}")
          #end
          #set($paginationParameters = { 'totalItems' : $xwiki.search("select count(datt.id) from DeletedAttachment as datt").get(0), 'defaultItemsPerPage' : 15, 'url' : $doc.getURL('view', $queryParams) })
          #pagination($paginationParameters)
          <table id="searchResults" class="xwiki-livetable xwiki-livetable-display">
          <thead class="xwiki-livetable-display-header"><tr>
          <th scope="col" class="xwiki-livetable-display-header-text selected asc">$msg.get('xe.index.trash.attachments.datt.filename')</th>
          <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.attachments.datt.docName')</th>
          <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.attachments.datt.date')</th>
          <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.attachments.datt.deleter')</th>
          <th scope="col" class="xwiki-livetable-display-header-text">$msg.get('xe.index.trash.attachments.actions')</th>
          </tr></thead>
          <tbody class="xwiki-livetable-display-body">
          #foreach($item in $xwiki.search('select datt.id from DeletedAttachment as datt order by datt.filename asc', $paginationParameters.itemsPerPage, $paginationParameters.firstItem))
          #displayDeletedAttachment($item)
          #end
          </tbody>
          </table>
          #set($discard = $paginationParameters.put('position', 'bottom'))
          #pagination($paginationParameters)
          #end ## deletedAttachments != 0
          </noscript>
          /html
          #else ## request.list
          ## ============================================================================================
          ## This page is called from live table 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')))

        7. offset starts from 0 in velocity and 1 in javascript
          #set($offset = $offset - 1)
          #set($limit = $util.parseInt($request.get('limit')))
          #set($filenameFilter = $request.get('datt.filename'))
          #set($docNameFilter = $request.get('datt.docName'))
          #set($deleterFilter = $request.get('datt.deleter'))
          #set($sql = '')
          #if("$! {filenameFilter}

          " != '')
          #set($sql = "and lower(datt.filename) like '%${filenameFilter.trim().toLowerCase()}%' ")
          #end
          #if("$!

          {docNameFilter}

          " != '')
          #set($sql = "and lower(datt.docName) like '%${docNameFilter.trim().toLowerCase()}%' ")
          #end
          #if("$!

          {deleterFilter}

          " != '')
          #set($sql = $sql + "and lower(datt.deleter) like '%${deleterFilter.trim().toLowerCase()}%' ")
          #end
          #if("$!

          {request.sort}

          " != '')
          #set($order = $request.sort)
          #else
          #set($order = 'datt.id')
          #end
          #if("$!

          {request.dir}

          " != '')
          #set($dir = $request.dir)
          #else
          #set($dir = 'asc')
          #end
          #set($selectSql = "select datt.id, $order from DeletedAttachment as datt where 1=1 " + $sql + " order by $order $dir")
          #set($countSql = "select count from DeletedAttachment as datt where 1=1 " + $sql)
          #set($items = $xwiki.search($selectSql, $limit, $offset))
          #set($totalItems = $xwiki.search($countSql).get(0))
          #set($returnedItems = $items.size())

        8. ==============================================
        9. json starts
        10. ==============================================
          {
          "totalrows": $totalItems,
          "returnedrows": $returnedItems,
          "offset": ${request.get('offset')},
          "reqNo": ${request.reqNo},
          "query" : "$selectSql",
          "rows": [
          #foreach($item in $items)
          #set($datt = $xwiki.getDeletedAttachment("$item.get(0)"))
          #if($velocityCount > 1) , #end
          {
          #set($originalAttachment = $datt.getAttachment())
          #set($originalDocument = $xwiki.getDocument($datt.docName))
          "filename" : "$datt.filename",
          "docName" : "$datt.docName",
          "title" : "$originalDocument.displayTitle",
          "url" : "$originalDocument.getAttachmentRevisionURL($originalAttachment.filename, $originalAttachment.version, "rid=${datt.id}")",
          "documentUrl" : "$originalDocument.getURL()",
          "canDelete" : $datt.canDelete(),
          "deleteUrl" : "$originalDocument.getAttachmentURL($datt.filename, 'delattachment', "trashId=${datt.id}")",
          "canRestore" : $datt.canRestore(),
          "alreadyExists" : #if($originalDocument.getAttachment($datt.filename)) true #else false #end,
          "restoreUrl" : "$originalDocument.getAttachmentURL($datt.filename)",
          "date" : "$xwiki.formatDate($datt.date, $dateFormat)",
          "deleter" : "$datt.deleter",
          "deletername" : "$xwiki.getUserName($datt.deleter, false)",
          "deleterurl" : "$xwiki.getURL($datt.deleter, 'view')"
          }
          #end
          ]}
        11. ==============================================
        12. json ended
        13. ==============================================
          #end ## xpage=plain
          #end ## request.list]
          at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluate(VelocityMacro.java:118)
          at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluate(VelocityMacro.java:44)
          at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:200)
          at org.xwiki.rendering.macro.script.AbstractScriptMacro.execute(AbstractScriptMacro.java:53)
          at org.xwiki.rendering.internal.transformation.MacroTransformation.transformOnce(MacroTransformation.java:175)
          at org.xwiki.rendering.internal.transformation.MacroTransformation.transform(MacroTransformation.java:120)
          at org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:72)
          at com.xpn.xwiki.doc.XWikiDocument.performSyntaxConversion(XWikiDocument.java:6847)
          at com.xpn.xwiki.doc.XWikiDocument.performSyntaxConversion(XWikiDocument.java:6822)
          at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:725)
          at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:739)
          at com.xpn.xwiki.api.Document.getRenderedContent(Document.java:492)
          at sun.reflect.GeneratedMethodAccessor386.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
          at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
          at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:493)
          at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:71)
          at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:142)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:106)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:191)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:156)
          at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:116)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1806)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1727)
          at com.xpn.xwiki.api.XWiki.parseTemplate(XWiki.java:740)
          at sun.reflect.GeneratedMethodAccessor210.invoke(Unknown Source)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
          at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
          at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:332)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:212)
          at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:247)
          at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:106)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:191)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:156)
          at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:116)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1806)
          at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1727)
          at com.xpn.xwiki.web.Utils.parseTemplate(Utils.java:148)
          at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:224)
          at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:115)
          at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
          at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
          at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
          at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.wysiwyg.server.filter.ConversionFilter.doFilter(ConversionFilter.java:152)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:118)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java:68)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.web.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:295)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at com.xpn.xwiki.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:112)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
          at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
          at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
          at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
          at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
          at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
          at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
          at java.lang.Thread.run(Thread.java:619)
          Caused by: org.xwiki.velocity.XWikiVelocityException: Failed to evaluate content with id [velocity macro]
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:200)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:156)
          at org.xwiki.rendering.internal.macro.velocity.VelocityMacro.evaluate(VelocityMacro.java:110)
          ... 93 more
          Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'get' in class java.util.Collections$EmptyList threw exception java.lang.IndexOutOfBoundsException: Index: 0 at velocity macro[line 36, column 98]
          at org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:337)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:284)
          at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
          at org.apache.velocity.runtime.parser.node.ASTReference.value(ASTReference.java:493)
          at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:71)
          at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:142)
          at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
          at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
          at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
          at org.xwiki.velocity.internal.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:191)
          ... 95 more
          Caused by: java.lang.IndexOutOfBoundsException: Index: 0
          at java.util.Collections$EmptyList.get(Collections.java:2970)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
          at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
          at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
          ... 103 more

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                sdumitriu Sergiu Dumitriu
                Reporter:
                hel Helmut Lehner
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Date of First Response: