Wiki source code of JSONService
Last modified by Andrey Che on 2018/12/10 14:09
Show last authors
1 | {{velocity output="false"}} |
2 | #if("$!{request.outputSyntax}" == 'plain') |
3 | $response.setContentType('application/json') |
4 | #end |
5 | {{/velocity}} |
6 | {{velocity filter="html" wiki="false"}} |
7 | #if($xcontext.action == 'get') |
8 | #if("$!{request.newEvent}"!="") |
9 | ## special case 1: find a new unused event name |
10 | #set($eventName = $request.newEvent) |
11 | #set($wiki = $doc.wiki) |
12 | #set($space = $doc.space) |
13 | #if ($request.parent) |
14 | #set($space = $xwiki.getDocument($request.parent).getSpace()) |
15 | #end |
16 | #set($eventName = $xwiki.getUniquePageName($space, $eventName)) |
17 | $jsontool.serialize( { 'name' : $eventName } ) |
18 | #elseif("$!{request.action}" == "checkDate") |
19 | ## special case 2: check if a date has a time part |
20 | #set($isAllDay = '') |
21 | #macro(checkDate $format $dateStr) |
22 | ## this check is ultra silly, but at least it works w/o timezone issues |
23 | #set($date = $datetool.toDate($fmt, $dateStr)) |
24 | #set($dateStrReparsed = $datetool.format("yyyyMMdd", $date)) |
25 | #set($date2 = $datetool.toDate("yyyyMMdd", $dateStrReparsed)) |
26 | #if($date.time == $date2.time && $isAllDay != false) |
27 | #set($isAllDay = true) |
28 | #else |
29 | #set($isAllDay = false) |
30 | #end |
31 | #end |
32 | #set($startDateStr = "$!{request.startDate}") |
33 | #if($startDateStr) |
34 | #set($fmt = $xwiki.getDocument("MoccaCalendar.MoccaCalendarEventClass").getxWikiClass().get("startDate").getProperty('dateFormat').value) |
35 | #checkDate($fmt $startDateStr) |
36 | #end |
37 | #set($endDateStr = "$!{request.endDate}") |
38 | #if($endDateStr) |
39 | #set($fmt = $xwiki.getDocument("MoccaCalendar.MoccaCalendarEventClass").getxWikiClass().get("endDate").getProperty('dateFormat').value) |
40 | #checkDate($fmt $endDateStr) |
41 | #end |
42 | $jsontool.serialize( { 'isAllDay' : $isAllDay } ) |
43 | #else |
44 | #set($startQuery = $datetool.toDate('yyyy-M-d', $request.start)) |
45 | #set($qsy = $datetool.getYear($startQuery)) |
46 | #set($qsm = $datetool.getMonth($startQuery)) |
47 | #set($qsm = $mathtool.add($qsm, 1)) |
48 | #set($qsd = $datetool.getDay($startQuery)) |
49 | ## if enddate is empty, use startdate instead |
50 | #set($endDateCheck = "year(enddate.value) > :startyear or (year(enddate.value) = :startyear and (month(enddate.value) > :startmonth or (month(enddate.value) = :startmonth and day(enddate.value) >= :startday)))") |
51 | #set($startDateCheck = "year(startdate.value) > :startyear or (year(startdate.value) = :startyear and (month(startdate.value) > :startmonth or (month(startdate.value) = :startmonth and day(startdate.value) >= :startday)))") |
52 | #set($whereQuery = "and (enddate.value is not null and ($endDateCheck) or ($startDateCheck)) ") |
53 | |
54 | #set($endQuery = $datetool.toDate('yyyy-M-d', $request.end)) |
55 | #set($qey = $datetool.getYear($endQuery)) |
56 | #set($qem = $datetool.getMonth($endQuery)) |
57 | #set($qem = $mathtool.add($qem, 1)) |
58 | #set($qed = $datetool.getDay($endQuery)) |
59 | #set($whereQuery = "$whereQuery and (year(startdate.value) < :endyear or ( year(startdate.value) = :endyear and (month(startdate.value) < :endmonth or (month(startdate.value) = :endmonth and day(startdate.value) <= :endday))))") |
60 | |
61 | #set($queryParams = { "startyear" : $qsy, "startmonth" : $qsm, "startday" : $qsd, "endyear" : $qey, "endmonth" : $qem, "endday" : $qed, "startDateField" : $request.startfield, "endDateField" : $request.endfield, "eventClass" : $request.classname }) |
62 | |
63 | #if("$!{request.filter}" != "" && "$!{request.calendarDoc}" != "") |
64 | #set($document = $xwiki.getDocument($request.calendarDoc)) |
65 | #if("$!{request.filter}" == "page") |
66 | ## see MOCCCAL-97 why we need to ways to get at the parent document |
67 | #set($whereQuery = "$whereQuery and (doc.parent = :parentDoc or doc.parent = :parentAbsDoc)") |
68 | #set($discard = $queryParams.put('parentDoc', $request.calendarDoc)) |
69 | #set($discard = $queryParams.put('parentAbsDoc', "${xcontext.getDatabase()}:${request.calendarDoc}")) |
70 | #end |
71 | #if("$!{request.filter}" == "space") |
72 | #set($document = $xwiki.getDocument($request.calendarDoc)) |
73 | #set($translated = $document.getTranslatedDocument()) |
74 | #set($space = $translated.getSpace()) |
75 | #set($whereQuery = "$whereQuery and (doc.space = :space)") |
76 | #set($discard = $queryParams.put('space', $space)) |
77 | #end |
78 | #end |
79 | |
80 | #set($direction="asc") |
81 | #if("$!{request.outputView}"=="plainList" && $datetool.difference($datetool.getDate(),$endQuery).getSeconds()<0) |
82 | #set($direction="desc") |
83 | #end |
84 | |
85 | #set($hql =", BaseObject as obj, DateProperty as startdate, DateProperty as enddate where doc.fullName=obj.name and obj.id=startdate.id.id and startdate.id.name=:startDateField and obj.id=enddate.id.id and enddate.id.name=:endDateField and doc.name!='MoccaCalendarEventTemplate' and obj.className= :eventClass $whereQuery order by startdate.value $direction") |
86 | |
87 | #set($query = $services.query.hql($hql)) |
88 | #foreach($param in $queryParams.entrySet()) |
89 | #set($query = $query.bindValue($param.key, $param.value)) |
90 | #end |
91 | |
92 | #set($jsondateformat = $xwiki.jodatime.getDateTimeFormatterForPattern("yyyy-MM-dd'T'HH:mm")) |
93 | #set($calDocParam = "calendarDoc=$!{escapetool.url($request.calendarDoc)}") |
94 | #set($results = []) |
95 | ##set($discard = $results.add($hql)) |
96 | ##set($discard = $results.add($queryParams)) |
97 | #foreach($item in $query.execute()) |
98 | #if($xwiki.hasAccessLevel("view", $xcontext.getUser(), $item)) |
99 | #set($itemdoc = $xwiki.getDocument($item)) |
100 | #set($parentCalDocName = $itemdoc.getParent()) |
101 | #if($parentCalDocName == "$!lastparentCalDocName") |
102 | #set($color="$!lastColor") |
103 | #else |
104 | #set($lastparentCalDocName = $parentCalDocName) |
105 | #set($color="$!xwiki.getDocument($parentCalDocName).getValue('color')") |
106 | #set($lastColor = $color) |
107 | #end |
108 | #set($startdate = $itemdoc.getValue($request.startfield)) |
109 | #set($enddate = $itemdoc.getValue($request.endfield)) |
110 | #set($duration = $itemdoc.getValue($request.durationfield)) |
111 | #if(!$duration) |
112 | #set($duration = "30") |
113 | #end |
114 | #if($startdate) |
115 | #set($startdate = $xwiki.jodatime.getDateTime($startdate.getTime())) |
116 | #if($enddate) |
117 | #set($enddate = $xwiki.jodatime.getDateTime($enddate.getTime())) |
118 | #else |
119 | #set($enddate = $startdate.plusMinutes($duration)) |
120 | #end |
121 | #set($allDay=false) |
122 | #if("$!itemdoc.getValue('allDay')"==1) |
123 | #set($allDay=true) |
124 | #set($enddateExclusive = $enddate.plusDays(1)) |
125 | #else |
126 | #set($enddateExclusive = $enddate) |
127 | #end |
128 | #set($event = {"id" : $itemdoc.getDocumentReference().toString(), "title" : $itemdoc.getPlainTitle(), "url" : $itemdoc.getURL('view',"$calDocParam"), "editUrl" : $itemdoc.getURL('edit',"$calDocParam"), "saveUrl" : $itemdoc.getURL('save',"$calDocParam"), "deleteUrl" : $itemdoc.getURL('delete',"$calDocParam"), "canEdit": $xwiki.hasAccessLevel("edit", $xcontext.getUser(), $item), "canDelete": $xwiki.hasAccessLevel("delete", $xcontext.getUser(), $item), "start" : $jsondateformat.print($startdate), "end" : $jsondateformat.print($enddateExclusive), "allDay" : $allDay, "color" : $color }) |
129 | #if("$!{request.outputView}"=="plainList") |
130 | #set($format = $!itemdoc.getObject("${request.classname}").getxWikiClass().get($request.startfield).getProperty('dateFormat').value) |
131 | #if($!format=="") |
132 | #set($format = $xwiki.getSpacePreference('dateformat', 'dd.MM.yyyy')) |
133 | #end |
134 | #if($allDay) |
135 | #set($idx = $format.indexOf("H")) |
136 | #if($idx > 0) |
137 | #set($format = $format.substring(0,$idx).trim()) |
138 | #end |
139 | #end |
140 | #set($dateprinter = $xwiki.jodatime.getDateTimeFormatterForPattern($format)) |
141 | #set($html = '<div class="moccaevent" style="border-color:' +$color + '">') |
142 | #set($html = "${html}"+'<h5><a href="'+${itemdoc.getURL("view")}+'">' + $escapetool.html($itemdoc.getPlainTitle()) + '</a></h5>') |
143 | #if($allDay) |
144 | #set($discard = $services.localization.use('document', 'Calendar.Translations')) |
145 | #set($html = "${html}" + '<p class="date">' + $dateprinter.print($startdate) + ' ' + $services.localization.render('xwiki.calendar.allDayText')+'</p>') |
146 | #else |
147 | #if($enddate.getYear() == $startdate.getYear() && $enddate.getDayOfYear() == $startdate.getDayOfYear()) |
148 | #set($idx = $format.indexOf("H")) |
149 | #if($idx > 0) |
150 | #set($timeformat = $format.substring($idx).trim()) |
151 | #else |
152 | #set($timeformat = "HH:mm") |
153 | #end |
154 | #set($timeprinter = $xwiki.jodatime.getDateTimeFormatterForPattern($timeformat)) |
155 | #set($html = "${html}" + '<p class="date">' + $dateprinter.print($startdate) + ' - ' + $timeprinter.print($enddate) + '</p>') |
156 | #else |
157 | #set($html = "${html}" + '<p class="date">' + $dateprinter.print($startdate) + ' - ' + $dateprinter.print($enddate) + '</p>') |
158 | #end |
159 | #end |
160 | #set($desc = $itemdoc.getValue('description')) |
161 | #if($desc) |
162 | #set($desc = $services.rendering.parse($desc, "xwiki/2.1")) |
163 | #set($desc = $services.rendering.render($desc, "xhtml/1.0")) |
164 | #set($html = "${html}" + $desc ) |
165 | #end |
166 | #set($html = "${html}</div>") |
167 | #set($discard = $event.put("html", $html)) |
168 | #end |
169 | #set($discard = $results.add($event)) |
170 | #end |
171 | #end |
172 | #end |
173 | $jsontool.serialize($results) |
174 | #end ## end of #if("$!{request.newEvent}"!="") |
175 | #else |
176 | Service Page for the Mocca Calendar Application |
177 | #end ## end of #if($xcontext.action == 'get') |
178 | {{/velocity}} |