Last modified by superadmin on 2025/05/22 17:44

Hide last authors
superadmin 1.1 1 {{velocity}}
2 #if("$!{request.xpage}" == 'plain')
3 $response.setContentType('application/json')
4 #end
5 ##==============================
6 ## Offset = item # at which to start displaying data
7 ##==============================
8 #set($offset = $numbertool.toNumber($request.get('offset')).intValue())
9 ## offset starts from 0 in velocity and 1 in javascript
10 #set($offset = $offset - 1)
11 #if (!$offset || $offset < 0)
12 #set($offset = 0)
13 #end
14 ##==================
15 ## Limit = # of items to display
16 ##==================
17 #set($limit = $numbertool.toNumber($request.get('limit')).intValue())
18 #if (!$limit)
19 #set ($limit = 15)
20 #end
21 ##====================================
22 ## Step1: Transform Map into list, one list item per link/page
23 ##====================================
24 #set ($states = $services.linkchecker.getLinkStates())
25 #set ($stateList = [])
26 #foreach ($link in $states.keySet())
27 #set ($pages = $states.get($link))
28 #foreach ($page in $pages.keySet())
29 #set ($tmpMap = {})
30 #set ($dummy = $tmpMap.put("link", $link))
31 #set ($dummy = $tmpMap.put("page", $page))
32 #set ($dummy = $tmpMap.put("code", $pages.get($page).getResponseCode()))
33 #set ($dummy = $tmpMap.put("date", $datetool.format($pages.get($page).getLastCheckedTime())))
34 #set ($dummy = $stateList.add($tmpMap))
35 #end
36 #end
37 ##============
38 ## Step2: Filter the list
39 ##============
40 #set ($filteredList = [])
41 #set ($linkFilter = "$!{request.get('link')}")
42 #set ($pageFilter = "$!{request.get('page')}")
43 #set ($codeFilter = "$!{request.get('code')}")
44 #set ($dateFilter = "$!{request.get('date')}")
45 #foreach ($entry in $stateList)
46 #set ($codeString = "$entry.get('code')")
47 #if ($codeFilter.startsWith("!") && $codeFilter.length() > 1)
48 #set ($codeMatch = !$codeString.contains($codeFilter.substring(1)))
49 #else
50 #set ($codeMatch = $codeString.contains($codeFilter))
51 #end
52 #if ($entry.get("link").contains($linkFilter) && $entry.get("page").contains($pageFilter) && $codeMatch && $entry.get("date").contains($dateFilter))
53 #set ($dummy = $filteredList.add($entry))
54 #end
55 #end
56 ##===================
57 ## Step3: Handle offset and limit
58 ##===================
59 #set ($added = 0)
60 #set ($resultList = [])
61 #if ($offset < $filteredList.size())
62 #set ($toIndex = $mathtool.min($mathtool.add($offset, $limit), $filteredList.size()))
63 #set ($resultList = $filteredList.subList($offset, $toIndex))
64 #end
65 ## ==========
66 ## JSON Generation
67 ## ==========
68 #set ($json = {
69 'totalrows': $filteredList.size(),
70 'matchingtags': {},
71 'tags': [],
72 'returnedrows': $resultList.size(),
73 'offset': $mathtool.add($offset, 1),
74 'reqNo': $numbertool.toNumber($request.reqNo).intValue(),
75 'rows': []
76 })
77 #foreach ($entry in $resultList)
78 #set ($discard = $json.rows.add({
79 'doc_viewable': true,
80 'link': $entry.get('link'),
81 'link_url': $entry.get('link'),
82 'page': $entry.get('page'),
83 'page_url': $xwiki.getURL($entry.get('page')),
84 'code': $entry.get("code"),
85 'date': $entry.get("date")
86 }))
87 #end
88 $jsontool.serialize($json)
89 {{/velocity}}