Wiki source code of TasksJSON

Last modified by Admin Trust-IT on 2023/01/10 11:26

Show last authors
1 {{velocity wiki="false"}}
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.offset).intValue())
9 ## If no offset is specified, start at 0.
10 #if (!$offset)
11 #set ($offset = 0)
12 #else
13 ## The offset sent by the live table widget starts from 1.
14 #set ($offset = $mathtool.max($offset, 1) - 1)
15 #end
16 ##==================
17 ## Limit = # of items to display
18 ##==================
19 #set($limit = $mathtool.max($numbertool.toNumber($request.limit).intValue(), 0))
20 ## If no limit is specified, limit at 10 items
21 #if (!$limit)
22 #set ($limit = 10)
23 #end
24 ##==================
25 ## Tag = one parameter per tag
26 ##==================
27 #if($request.tag)
28 #foreach($tag in $request.getParameterValues('tag'))
29 ## TODO: Add code to filter items based on the selected tags
30 #end
31 #end
32 ##==========
33 ## Sort direction
34 ##==========
35 #set($order = "$!request.sort")
36 #set($sortClause = "")
37 #if($order != '')
38 #set($orderDirection = "$!{request.get('dir').toLowerCase()}")
39 #if("$!orderDirection" != '' && "$!orderDirection" != 'asc')
40 #set($orderDirection = 'desc')
41 #end
42 #if ($order == "page")
43 #set ($sortClause = "order by doc.title $orderDirection")
44 #elseif ($order == "responsible")
45 #set ($sortClause = "order by task.responsible $orderDirection")
46 #elseif ($order == "dueDate")
47 #set ($sortClause = "order by task.dueDate $orderDirection")
48 #elseif ($order == "task")
49 #set ($sortClause = "order by task.task $orderDirection")
50 #elseif ($order == "action")
51 #set ($sortClause = "order by task.done $orderDirection")
52 #end
53 #end
54 ## ===========
55 ## Filters
56 ## ===========
57 #set ($pageFilter = "$!{request.page}%")
58 #if("$!{pageFilter}" != '%')
59 #set($inClause = "and doc.fullName like '$pageFilter'")
60 #else
61 #set($inClause = "")
62 #end
63 ## Handle hidden documents. Note that we cannot use the "hidden" filter since it seems it works only on short form queries or queries on Documents
64 #set ($hiddenClause = '')
65 #if($xwiki.getDocument($xcontext.user).getValue('displayHiddenDocuments') != 1)
66 #set ($hiddenClause = "and (doc.hidden <> true or doc.hidden is null)")
67 #end
68 ###################
69 #set ($projectFilter = "$!{request.project}")
70 #if("$!{projectFilter}" != '')
71 ## This is a special query parameter for an additional object present on the pages to be queried.
72 ## This lets you configure the task report macro so you can query pages within an App-within-a-minute database for one of their object properties.
73 ## To activate this dormant feature you need to add an additional macro parameter "project" in the CheckboxedTaskReport macro.
74 ## Set the parameter type to "org.xwiki.model.reference.DocumentReference".
75 ## Note: The reportchecktasks macro expects the value of this property to be a document reference!
76 ## Then, the following class reference and the property reference need to be changed according to the additional object class that should be looked for:
77 #set($projectProperty = "projectPage") ## adjust property of object!
78 #set($class = "Protokoll.Code.ProtokollClass") ## adjust class of object!
79 ## -----------------
80 #set($projectClause = "project.${projectProperty} = '${projectFilter}'")
81 ## Compute pages linked with a project and build inClause
82 #set ($inQuery = $services.query.xwql("from doc.object($class) as project where $projectClause $hiddenClause").execute())
83 #if("$!{pageFilter}" == '%')
84 #set ($inClause = "and doc.fullName in (")
85 #else
86 #set($inClause = "$inClause or doc.fullName in (")
87 #end
88 #foreach ($item in $inQuery)
89 #set ($inClause=$inClause+"'"+$item+"'")
90 #if( $foreach.hasNext )#set ($inClause=$inClause+",") #else #set ($inClause=$inClause+")")#end
91 #end
92 #end
93 ####################
94 #set ($taskFilter = "%$!{request.task.toLowerCase()}%")
95 #set ($responsibleFilter = "%$!{request.responsible}%")
96 #set($date = '')
97 #set($dateFilter = "$!{request.dueDate}")
98 #if("$!{dateFilter}" != '')
99 #set($dates = $dateFilter.split('-'))
100 #if($dates.size() == 2)
101 ## Date range matching
102 #set($date = "and task.dueDate between '${dates[0]}' and '${dates[1]}'")
103 #else
104 ## Single value matching
105 #set($date = "and task.dueDate like '%${dateFilter}%'")
106 #end
107 #end
108 #if (!$request.done) #set ($doneClause ="")#else #set($doneClause = " and task.done = "+"'$!{request.done}'")#end
109 ## Compute the total number of entries
110 #set ($countQuery="select count(doc.id) from Document doc, doc.object(Macros.CheckboxedTask.TaskClass) as task where task.protected = '0' and (doc.fullName not like 'Sandbox.%'$inClause) and task.task like :taskFilter and task.responsible like :responsibleFilter $date $doneClause $hiddenClause")
111 #set ($count = $services.query.xwql($countQuery).bindValue("taskFilter", $taskFilter).bindValue("responsibleFilter", $responsibleFilter).execute())
112 ## Compute the entries to display
113 #set ($resultsQuery="select doc.fullName, task.done, task.rid, task.task, task.dueDate, task.responsible from Document doc, doc.object(Macros.CheckboxedTask.TaskClass) as task where task.protected = '0' and (doc.fullName not like 'Sandbox.%'$inClause) and task.task like :taskFilter and task.responsible like :responsibleFilter $date $doneClause $hiddenClause $sortClause")
114 #set ($result = $services.query.xwql($resultsQuery).bindValue("taskFilter", $taskFilter).bindValue("responsibleFilter", $responsibleFilter).setLimit($limit).setOffset($offset).execute())
115 ## =============
116 ## Generate the JSON
117 ## =============
118 {
119 "totalrows": $count[0],
120 "matchingtags": {},
121 "tags" : [],
122 "returnedrows": $result.size(),
123 "offset": $offset,
124 "reqNo": $numbertool.toNumber($request.reqNo).intValue(),
125 "sort": "$request.sort",
126 "dir": "$request.dir",
127 "rows": [
128 #foreach($item in $result)
129 {
130 #if($item[4] == "")
131 #set($dueDate="")
132 #else
133 #set($dueDate = $item[4])
134 #end
135 #set($checkbox = $escapetool.javascript("<input name='checktask' type='checkbox' class='checktask-checkbox' data-page='$item[0]' value='$item[2]'"))
136 #if($item[1]==1)#set($action = "${checkbox} title='${services.localization.render('reportchecktasks.macro.tooltip1')}' checked disabled/>")#else #set($action = "${checkbox} title='${services.localization.render('reportchecktasks.macro.tooltip0')}' disabled/>")#end
137 #set($document = $xwiki.getDocument($item[0]))
138 #set($pageLink = $escapetool.javascript("<a href='$document.getURL()'>$document.title</a>"))
139 #set($pageAnchor= $escapetool.javascript("<a href='$document.getURL()#$item[2]'>$item[3]</a>"))
140 #if($item[5]=="")
141 #set($name="")
142 #set($profile="")
143 #else
144 #set($responsible=$xwiki.getDocument($item[5]))
145 #set($object = $responsible.getObject('XWiki.XWikiUsers'))
146 #set($name = "${object.get('first_name')} ${object.get('last_name')}")
147 #set($profile = $responsible.getURL())
148 #end
149 #if(!$item[4])
150 #set($dueDate = "")
151 #else
152 ##Now format the due date to be printed in a readable and reasonable manner
153 #set($formatter = $xwiki.jodatime.getDateTimeFormatterForPattern(${services.localization.render('checktask.macro.dateFormat')}))
154 #set($dueDate = $datetool.toDate($xwiki.getXWikiPreference('dateformat','yyyy/MM/dd HH:mm'),$item[4]))
155 #set($dueDate = $formatter.print($dueDate))
156 #end
157 "doc_viewable" : true,
158 "action" : "$action",
159 "done" : "#if($item[1])$item[1]#end",
160 "task" : "$pageAnchor",
161 "dueDate" : "$dueDate",
162 "responsible": "$name",
163 "profile": "$profile",
164 "page" : "$pageLink",
165 "space" : "$item[0]", ##"$escapetool.javascript($xwiki.getURL($item[0], 'view'))",
166 "rid" : "$item[2]"
167 }#if( $foreach.hasNext ),#end
168 #end
169 ]
170 }
171 {{/velocity}}