%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/waritko/jetty-distribution-9.4.21.v20190926/webapps/ROOT/templates/
Upload File :
Create Path :
Current File : //home/waritko/jetty-distribution-9.4.21.v20190926/webapps/ROOT/templates/getdocuments.vm

###
### Template used by the livetable macro to display documents when calling it from inside other templates. It is meant
### as a light data source for the livetable macro when it can not rely on more feature-rich document sources like
### XWiki.LivetableResults. It supports basic document listing, sorting and pagination.
###
$response.setContentType("application/json")
##
## WHERE
##
#set ($whereQueryPart = 'WHERE 1=1')
#set ($queryParams = [])
## Display all documents in an exact given space (doesn't support Nested Spaces). Can be useful for backward
## compatibility for example or if there's a need to list exactly the content of a given space.
#if ("$!request.space" != '')
  #set ($discard = $queryParams.add($request.space))
  #set ($whereQueryPart = "${whereQueryPart} AND doc.space = ?${queryParams.size()}")
#end
## Display all documents in a space, including Nested Spaces
#if ("$!request.childrenOf" != '')
  #set ($discard = $queryParams.add($services.query.parameter().literal("$!{request.childrenOf}.").anyChars()))
  #set ($whereQueryPart = "${whereQueryPart} AND doc.fullName LIKE ?${queryParams.size()}")
  #set ($discard = $queryParams.add("${request.childrenOf}.WebHome"))
  #set ($whereQueryPart = "${whereQueryPart} AND doc.fullName <> ?${queryParams.size()}")
#end
## Exclude some documents
#set ($excludes = $request.getParameterValues('exclude'))
#if ("$!excludes" != '')
  #foreach ($exclude in $excludes)
    #set ($discard = $queryParams.add($exclude))
    #set ($whereQueryPart = "${whereQueryPart} AND doc.fullName <> ?${queryParams.size()}")
  #end
#end
#addLocationFilter($whereQueryPart, $queryParams, $!request.get('doc.location'))
#addLocationFilter($whereQueryPart, $queryParams, $!request.get('doc.title'))
##
## date filter
##
#set ($dateFilter = $request.get("doc.date"))
#if("$!{dateFilter}" != '')
  #set ($dates = $dateFilter.split('-'))
  #if ($dates.size() == 2)
    ## Date range matching
    #set ($discard = $queryParams.add($datetool.toDate($mathtool.toNumber($dates[0]))))
    #set ($whereQueryPart = "${whereQueryPart} and doc.date between ?$queryParams.size()")
    #set ($discard = $queryParams.add($datetool.toDate($mathtool.toNumber($dates[1]))))
    #set ($whereQueryPart = "${whereQueryPart} and ?$queryParams.size()")
  #else
    ## Single value matching
    #set ($discard = $queryParams.add($dateFilter))
    #set ($whereQueryPart = "${whereQueryPart} and upper(str(doc.date)) like upper(str(?$queryParams.size()))")
  #end
#end
##
## ORDER
##
#set ($order = "$!request.sort")
#set ($orderQueryPart = '')
#if ($order != '')
  #set ($orderDirection = "$!{request.get('dir').toLowerCase()}")
  #if ("$!orderDirection" != '' && "$!orderDirection" != 'asc')
    #set($orderDirection = 'desc')
  #end
  ## Sorting by doc.location is not supported by the DB, since the location field does not exist.
  #if ($order == 'doc.location')
    ## So we filter on the document full name instead, which is the expected behavior.
    #set ($order = 'doc.fullName')
  #end
  ## Weird things happen if we use "ORDER BY" (upper case), at least on HSQLDB. Other DBs may behave differently
  #set ($orderQueryPart = "order by ${order} ${orderDirection}")
#end
##
## OFFSET and LIMIT
##
#set ($offset = $mathtool.toInteger($request.get('offset')))
## offset starts from 0 in velocity and 1 in javascript
#set ($offset = $offset - 1)
#if (!$offset || $offset < 0)
  #set($offset = 0)
#end
#set ($limit = $mathtool.toInteger($request.get('limit')))
#if (!$limit)
  #set ($limit = 15)
#end
##
## Build the query
##
#set ($queryString = "$!{whereQueryPart} $!{orderQueryPart}")
#set ($query = $services.query.hql($queryString))
## Apply query filters if defined. Otherwise use default
#foreach ($queryFilter in $stringtool.split($!request.queryFilters, ', '))
  #set ($query = $query.addFilter($queryFilter))
#end
#set ($query = $query.setLimit($limit).setOffset($offset).bindValues($queryParams))
#if ("$!request.wiki" != '')
  #set ($query = $query.setWiki($request.wiki))
#end
##
## Execute the query and build the results
##
#set ($items = $query.execute())
#set ($map = {})
#set ($discard = $map.put('totalrows', $query.count()))
#set ($discard = $map.put('returnedrows', $mathtool.min($items.size(), $limit)))
#set ($discard = $map.put('offset', $mathtool.add($offset, 1)))
#if("$!request.sql" != '')
  ## Add debug infos
  #set($discard = $map.put('sql', $queryString))
  #set($discard = $map.put('params', $queryParams))
#end
#template('hierarchy_macros.vm')
#set ($rows = [])
#foreach ($item in $items)
  ## Handle both the case where the "language" filter is used and thus languages are returned too and the case where
  ## only the document name is returned. When more than the document name is returned the $item variable is a list
  #if ($item.size())
    ## Extract doc name and doc language from $item
    #set ($docName = $item[0])
    #set ($docLanguage = $item[1])
  #else
    #set ($docName = $item)
    #set ($docLanguage = '')
  #end
  #set ($viewable = $xwiki.hasAccessLevel('view', $xcontext.user, "${xcontext.database}:${docName}"))
  #set ($row = {'doc_viewable' : $viewable})
  #if (!$viewable)
    #set ($discard = $row.put('doc_fullName', "${xcontext.database}:${item}"))
  #else
    #set ($itemDoc = $xwiki.getDocument($docName))
    ## Handle translations. We need to make sure we display the data associated to the correct document if the returned
    ## result is a translation
    #if ("$!docLanguage" != "" && $xwiki.getLanguagePreference() != $docLanguage)
      #set ($translatedDoc = $itemDoc.getTranslatedDocument($docLanguage))
      #set ($isTranslation = true)
    #else
      #set ($translatedDoc = $itemDoc.translatedDocument)
      #set ($isTranslation = false)
    #end
    #set ($fullname = $services.model.serialize($itemDoc.documentReference, 'default'))
    #if ($isTranslation)
      ## Display the language after the document name so that not all translated documents have the same name displayed
      #set ($discard = $row.put('doc_name', "$itemDoc.documentReference.name ($docLanguage)"))
    #else
      #set ($discard = $row.put('doc_name', $itemDoc.documentReference.name))
    #end
    #set ($discard = $row.put('doc_fullName', $fullname))
    #set ($location = "#hierarchy($itemDoc.documentReference, {'limit': 5, 'plain': false, 'local': true, 'displayTitle': false})")
    #set ($discard = $row.put('doc_location', $location))
    #set ($discard = $row.put('doc_space', $itemDoc.space))
    #set ($discard = $row.put('doc_url', $xwiki.getURL($docName)))
    #set ($discard = $row.put('doc_space_url', $xwiki.getURL($services.model.createDocumentReference($!itemDoc.wiki, $!itemDoc.space, 'WebHome'))))
    #set ($discard = $row.put('doc_wiki', $itemDoc.wiki))
    #set ($discard = $row.put('doc_wiki_url', $xwiki.getURL($services.model.resolveDocument('', 'default', $itemDoc.documentReference.extractReference('WIKI')))))
    #set ($discard = $row.put('doc_hasadmin', $xwiki.hasAdminRights()))
    #set ($discard = $row.put('doc_hasedit', $xwiki.hasAccessLevel('edit', $xcontext.user, $fullname)))
    #set ($discard = $row.put('doc_hasdelete', $xwiki.hasAccessLevel('delete', $xcontext.user, $fullname)))
    #set ($discard = $row.put('doc_hasrename', $row.doc_hasdelete))
    #set ($row.doc_hasrights = $row.doc_hasedit && $isAdvancedUser)
    #set ($discard = $row.put('doc_edit_url', $itemDoc.getURL($itemDoc.defaultEditMode)))
    #set ($discard = $row.put('doc_copy_url', $itemDoc.getURL('view', 'xpage=copy')))
    #set ($discard = $row.put('doc_delete_url', $itemDoc.getURL('delete')))
    #set ($discard = $row.put('doc_rename_url', $itemDoc.getURL('view', 'xpage=rename&step=1')))
    ## Compute the 'edit rights' URL
    #if($itemDoc.documentReference.name == 'WebHome')
      ## For nested pages, use the page administration
      #set($webPreferencesReference = $services.model.createEntityReference('WebPreferences', 'DOCUMENT', $itemDoc.documentReference.lastSpaceReference))
      #set($editRightsURL = $xwiki.getURL($webPreferencesReference, 'admin', 'editor=spaceadmin&section=PageRights'))
    #else
      ## For terminal pages, use the old rights editor
      ## TODO: we should create a page administration for terminal pages too
      #set($editRightsURL = $itemDoc.getURL('edit', 'editor=rights'))
    #end
    #set ($discard = $row.put('doc_rights_url', $editRightsURL))
    #set ($discard = $row.put('doc_author_url', $xwiki.getURL($translatedDoc.author)))
    #set ($discard = $row.put('doc_date', $xwiki.formatDate($translatedDoc.date)))
    #set ($discard = $row.put('doc_title', $translatedDoc.plainTitle))
    #set ($rawTitle = $translatedDoc.title)
    #if ($rawTitle != $row['doc_title'])
      #set ($discard = $row.put('doc_title_raw', $rawTitle))
    #end
    #set ($discard = $row.put('doc_author', $xwiki.getUserName($translatedDoc.author, false)))
    #set ($discard = $row.put('doc_creationDate', $xwiki.formatDate($translatedDoc.creationDate)))
    #set ($discard = $row.put('doc_creator', $xwiki.getUserName($translatedDoc.creator, false)))
    ## Ignore other columns
  #end
  #set ($discard = $rows.add($row))
#end
#set ($discard = $map.put('rows', $rows))
##
## Serialize the JSON
##
$jsontool.serialize($map)

Zerion Mini Shell 1.0