Wiki source code of JSONService
Last modified by Andrey Che on 2018/12/10 14:09
Hide last authors
![]() |
1.1 | 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}} |