Code source wiki de $msg.get("xe.recentchanges")
Modifié par Admin le 2009/09/09 00:00
Afficher les derniers auteurs
author | version | line-number | content |
---|---|---|---|
1 | {{velocity}} | ||
2 | ## | ||
3 | ## Recent changes. | ||
4 | ## | ||
5 | ## Optional parameters : | ||
6 | ## | ||
7 | ## Parameters which can be set in velocity before including this page or can be passed as HTTP parameters. | ||
8 | ## Note that HTTP parameters supercede velocity set variables. | ||
9 | ## | ||
10 | ## - rcShowMinor (String set to "true" or "false"): show minor edits. | ||
11 | ## - rcShowDiff (String set to "true" or "false"): show diff in items. | ||
12 | ## - rcShowRss (String set to "true" or "false"): show RSS at the bottom of the list. | ||
13 | ## - rcChangesNb (String set to a numerical value): number of recent changes to display. | ||
14 | ## - rcSpace (List of string[s]): restrict recent changes retrieval to pages within the given space. | ||
15 | ## - rcTag (List of string[s]): restrict recent changes retrieval to pages with the given tag. | ||
16 | ## - rcAuthor (List of string[s]): restrict recent changes retrieval to pages with the given author. | ||
17 | ## | ||
18 | ## Parameters which can be set before including this page only. | ||
19 | ## | ||
20 | ## - rcDocumentNames (Collection): The list of recentlyChanged documents, to reuse a previous search query. | ||
21 | ## | ||
22 | $xwiki.jsx.use("Main.RecentChanges")## | ||
23 | $xwiki.ssx.use("Main.RecentChanges")## | ||
24 | #set($action = "$!request.getParameter('action')") | ||
25 | ## | ||
26 | ## Start execution timer | ||
27 | ## | ||
28 | #set($execStart = $util.getDate()) | ||
29 | ## | ||
30 | ## Go to diff URL service. | ||
31 | ## | ||
32 | #if($action == "goToDiffURL") | ||
33 | #set($page = "$!request.getParameter('page')") | ||
34 | #set($author = "$!request.getParameter('author')") | ||
35 | #set($date = "$!request.getParameter('date')") | ||
36 | #set($period = $xwiki.criteriaService.getPeriodFactory().createDayPeriod($date)) | ||
37 | #set($criterion = $xwiki.criteriaService.getRevisionCriteriaFactory().createRevisionCriteria($author, $period)) | ||
38 | #if("$!request.getParameter('rcShowMinor')" == "true") | ||
39 | #set($discard = $criterion.setIncludeMinorVersions(true)) | ||
40 | #end | ||
41 | #set($diffDoc = $xwiki.getDocument($page)) | ||
42 | #set($revisions = $diffDoc.getRevisions($criterion)) | ||
43 | #set($rev1 = $listtool.get($revisions, 0)) | ||
44 | #set($revMax = $revisions.size() - 1) | ||
45 | #set($rev2 = $listtool.get($revisions, $revMax)) | ||
46 | #if($rev2 != "1.1") | ||
47 | #set($rev2 = $xwiki.getDocument($diffDoc, $rev2).getPreviousVersion()) | ||
48 | #end | ||
49 | $response.sendRedirect($diffDoc.getURL("view", "viewer=changes&rev1=${rev1}&rev2=${rev2}")) | ||
50 | #end | ||
51 | ## We have to use the HTML macro to avoid prints of multiple   on macro calls. | ||
52 | {{html}} | ||
53 | ## Manage minor edits. | ||
54 | #setVariableFromRequest($rcShowMinor "rcShowMinor" false) | ||
55 | ## Manage show diff in items. | ||
56 | #setVariableFromRequest($rcShowDiff "rcShowDiff" true) | ||
57 | ## Manage show RSS links. | ||
58 | #setVariableFromRequest($rcShowRss "rcShowRss" true) | ||
59 | ## Manage number of changes to display. | ||
60 | #setVariableFromRequest($rcChangesNb "rcChangesNb" 30) | ||
61 | ## Manage tag criterion | ||
62 | #setVariableFromRequest($rcTag "rcTag" []) | ||
63 | ## Manage space criterion | ||
64 | #setVariableFromRequest($rcSpace "rcSpace" []) | ||
65 | ## Manage author criterion | ||
66 | #setVariableFromRequest($rcAuthor "rcAuthor" []) | ||
67 | {{/html}} | ||
68 | ## | ||
69 | ## Create a string containing one or more ? given the number of values in the passed list. | ||
70 | ## | ||
71 | #macro(createQueryParameters $values $parameters) | ||
72 | #foreach($value in $values) | ||
73 | #if($parameters == "") | ||
74 | #set($parameters = "?") | ||
75 | #else | ||
76 | #set($parameters = "${parameters}, ?") | ||
77 | #end | ||
78 | #end | ||
79 | #end | ||
80 | ## | ||
81 | ## Retrieve recently changed documents. | ||
82 | ## | ||
83 | #set($criteria = $util.getHashMap()) | ||
84 | #if("$!rcDocumentNames" == "") | ||
85 | #if(!$xwiki.hasMinorEdit() || $rcShowMinor) | ||
86 | #set ($hqlQuery = "where 1=1 order by doc.date desc") | ||
87 | #else | ||
88 | #set ($hqlQuery = "where doc.version like '%.1'#if(!$isAdvancedUser) and doc.author != 'superadmin'#end order by doc.date desc") | ||
89 | #end | ||
90 | ## Create space criterion. | ||
91 | #if($rcSpace.size() > 0) | ||
92 | #set($spaceParameters = "") | ||
93 | #createQueryParameters($rcSpace $spaceParameters) | ||
94 | #set($discard = $criteria.put("doc.space in (${spaceParameters})", $rcSpace)) | ||
95 | #end | ||
96 | ## Create tag criterion. | ||
97 | #if("$!xwiki.getPlugin('tag')" != "" && $rcTag.size() > 0) | ||
98 | #set($docsWithTag = $util.getArrayList()) | ||
99 | #foreach($item in $rcTag) | ||
100 | #set($discard = $docsWithTag.addAll($xwiki.tag.getDocumentsWithTag($item))) | ||
101 | #end | ||
102 | #set($docsWithTagParameters = "") | ||
103 | #createQueryParameters($docsWithTag $docsWithTagParameters) | ||
104 | #set($discard = $criteria.put("doc.fullName in (${docsWithTagParameters})", $docsWithTag)) | ||
105 | #end | ||
106 | #if($rcAuthor.size() > 0) | ||
107 | #set($authorParameters = "") | ||
108 | #createQueryParameters($rcAuthor $authorParameters) | ||
109 | #set($discard = $criteria.put("doc.author in (${authorParameters})", $rcAuthor)) | ||
110 | #end | ||
111 | ## Exclude blacklisted spaces if displaying changes for a whole wiki | ||
112 | #if($rcSpace.size() == 0) | ||
113 | #set($blacklistedSpacesParameters = "") | ||
114 | #createQueryParameters($blacklistedSpaces $blacklistedSpacesParameters) | ||
115 | #set($discard = $criteria.put("doc.space not in (${blacklistedSpacesParameters})", $blacklistedSpaces)) | ||
116 | #end | ||
117 | #if($criteria.size() > 0) | ||
118 | ## If any, loop over criterias to add them to the query, then perform the query. | ||
119 | #set($values = $util.getArrayList()) | ||
120 | #foreach($criterion in $criteria.keySet()) | ||
121 | #if($criteria.get($criterion).size() > 0) | ||
122 | #set($hqlQuery = $hqlQuery.replaceAll("where", "where ${criterion} and")) | ||
123 | #set($discard = $values.addAll(0, $criteria.get($criterion))) | ||
124 | #end | ||
125 | #end | ||
126 | #set($rcDocumentNames = $xwiki.searchDocuments($hqlQuery, $rcChangesNb, 0, $values)) | ||
127 | #else | ||
128 | ## No query criterion, perform the query as is. | ||
129 | #set($rcDocumentNames = $xwiki.searchDocuments($hqlQuery, $rcChangesNb, 0)) | ||
130 | #end | ||
131 | #end | ||
132 | ## | ||
133 | ## Prepare comments handling | ||
134 | #set($commentsOrder = false) | ||
135 | #if($xwiki.getSpacePreferenceAsInt('commentsorder', 1) == 0) | ||
136 | #set($commentsOrder = true) | ||
137 | #end | ||
138 | ## | ||
139 | ## Comment handling macro. | ||
140 | ## Retreive page's last comment if any and | ||
141 | ## overwrite variables if this comment is the last modification on the page. | ||
142 | ## | ||
143 | #macro(handleComment $rcDoc $rcType $rcDt $commentsOrder) | ||
144 | ## Retrieve comments from last to first. | ||
145 | #set($rcComments = $rcDoc.getComments($commentsOrder)) | ||
146 | #if($rcComments.size() > 0) | ||
147 | ## Retrieve last comment. | ||
148 | #set($lastComment = $listtool.get($rcComments, 0)) | ||
149 | #set($lastCommentDate = $lastComment.getProperty("date").getValue()) | ||
150 | ## If the last modification on the page is the comment, overwrite values. | ||
151 | ## We don't test compareTo() == 0 since the comment date and the save date may vary a little bit. | ||
152 | #if($lastCommentDate.compareTo($rcDt.toDate()) > -1 && $lastCommentDate.compareTo($rcDt.toDate()) <= 1) | ||
153 | #set($rcType = "comment") | ||
154 | #end | ||
155 | #end | ||
156 | #end | ||
157 | ## | ||
158 | ## Attachments handling macro. | ||
159 | ## Retrieve page's attachments and put those which upload matches the modification entry (author and timeframe) | ||
160 | ## in the $rcAttachments List. | ||
161 | ## | ||
162 | #macro(handleAttachments $rcDoc $rcAuthor $rcDt) | ||
163 | #set($attachments = $rcDoc.getAttachmentList()) | ||
164 | #foreach($attachment in $attachments) | ||
165 | #set($attachmentDt = $xwiki.jodatime.getDateTime($attachment.getDate().getTime())) | ||
166 | #if($rcAuthor == $attachment.getAuthor() && $rcDt.getYear() == $attachmentDt.getYear() && $rcDt.getDayOfYear() == $attachmentDt.getDayOfYear()) | ||
167 | #set($discard = $rcAttachments.add($attachment)) | ||
168 | #end | ||
169 | #end | ||
170 | #end | ||
171 | ## | ||
172 | ## | ||
173 | ## | ||
174 | #macro(displayRcAuthor $author) | ||
175 | #mediumUserAvatar($author) | ||
176 | <br/><span class="recentChangesAuthor"> | ||
177 | #if($author == "XWikiGuest") | ||
178 | Guest | ||
179 | #else | ||
180 | #set($userName = $xwiki.getUserName($author)) | ||
181 | #if($userName == "") | ||
182 | ## userName can be empty when the page has been saved without specifying the author. | ||
183 | ## We're printing a non-breaking space to ensure xhtml validity (ie: avoid empty paragraph). | ||
184 | | ||
185 | #else | ||
186 | $userName | ||
187 | #end | ||
188 | #end | ||
189 | </span> | ||
190 | #end | ||
191 | #macro(displayRcVersion $version) | ||
192 | #if($version == "1.1") | ||
193 | <span class="rcVersion">(<span class="newVersion">$msg.get("xe.recentchanges.entry.new")</span>)</span> | ||
194 | #end | ||
195 | #end | ||
196 | |||
197 | ## | ||
198 | ## Display the recent changes list. | ||
199 | ## | ||
200 | #set($previousDt = $xwiki.jodatime.getDateTime(0)) | ||
201 | #set($discard = $previousDate.setTime(0)) | ||
202 | #set($previousAuthor = "") | ||
203 | ## Get this very doc, useful when it is included from another one. | ||
204 | #set($recentChangesDoc = $xwiki.getDocument("Main.RecentChanges")) | ||
205 | {{html clean="false"}} | ||
206 | <table class="recentChanges" summary="$msg.get('xe.recentchanges.summary')"> | ||
207 | <tr class="recentChangesHeader"><th scope="col">$msg.get("xe.recentchanges.column.authoranddate")</th><th scope="col">$msg.get("xe.recentchanges.column.changes")</th></tr> | ||
208 | #foreach ($rcDocName in $rcDocumentNames) | ||
209 | #set($row = "") | ||
210 | #set($rcAttachments = $util.arrayList) | ||
211 | ## Verify user access level on the document | ||
212 | #if ($xwiki.hasAccessLevel("view", $context.user, "${context.database}:${rcDocName}")) | ||
213 | #set($rcDoc = $xwiki.getDocument($rcDocName)) | ||
214 | #set($rcType = "page") | ||
215 | #set($rcAuthor = $rcDoc.getAuthor()) ## TODO : check comments | ||
216 | #set($rcDt = $xwiki.jodatime.getDateTime($rcDoc.getDate().getTime())) | ||
217 | ## The handleComment macro overwrites rcType variable if the last modification is a comment. | ||
218 | #handleComment($rcDoc $rcType $rcDt $commentsOrder) | ||
219 | ## The handleAttachments macro put a list of attachments uploaded during the day by the author in $rcAttachments. | ||
220 | #handleAttachments($rcDoc $rcAuthor $rcDt) | ||
221 | #if($rcAuthor == $previousAuthor && $rcDt.getYear() == $previousDt.getYear() && $rcDt.getDayOfYear() == $previousDt.getDayOfYear()) | ||
222 | ## Same day and author, continue in the same row. | ||
223 | #else | ||
224 | ## Different day or author, end previous row and start a new one. | ||
225 | #if($velocityCount > 1)</ul></td></tr>#end ## close previous row if needed | ||
226 | <tr><td class="recentChangesLeft">#displayRcAuthor($rcAuthor)<br/> | ||
227 | <span class="recentChangesDate">$xwiki.formatDate($rcDt.toDate(), "MMMM d")</span></td> | ||
228 | <td class="recentChangesRight"><ul class="xlist"> ## open next cell | ||
229 | #end | ||
230 | ## Compute a GUID for this modification with page name, modification date and author. | ||
231 | #set($modGUID = "${rcDoc.fullName}_${xwiki.formatDate($rcDt.toDate(), 'yyyyMMdd')}_${rcAuthor}") | ||
232 | ## Build the URL used to retreive the diff viewer URL | ||
233 | #set($goToDiffURL = $recentChangesDoc.getURL("view", "xpage=plain&action=goToDiffURL&page=${rcDoc.getFullName()}&author=${rcAuthor}&date=${xwiki.formatDate($rcDt.toDate(), 'yyyyMMdd')}&rcShowMinor=${rcShowMinor}")) | ||
234 | <li class="xitem xunderline xhighlight ${rcType}"> | ||
235 | <div class="xitemcontainer"> | ||
236 | #if($rcType == "comment") | ||
237 | <div class="modifiedPage"><a href="$rcDoc.getURL()" title="$msg.get("xe.recentchanges.entry.comment.tooltip", [$xwiki.formatDate($rcDt.toDate(), "HH:mm")]) ">$xwiki.getXMLEncoded($rcDoc.getDisplayTitle())</a></div> | ||
238 | #if($rcShowDiff) | ||
239 | <div class="xshowonhover modifiedPageActions"><a class="ajax" href="$rcDoc.getURL("vire", "viewer=comments")" onclick="toggleClass(document.getElementById('$modGUID'), 'hidden'); toggleClass(document.getElementById('${modGUID}_comShow'), 'hidden'); toggleClass(document.getElementById('${modGUID}_comHide'), 'hidden'); return false;"><span id="${modGUID}_comShow">[+] $msg.get("xe.recentchanges.entry.comment.show")</span><span id="${modGUID}_comHide" class="hidden">[-] $msg.get("xe.recentchanges.entry.comment.hide")</span> $msg.get("xe.recentchanges.entry.comment")</a></div> | ||
240 | <div class="commentContainer hidden" id="$modGUID"> | ||
241 | <div class="commentQuote lQuo"> </div> | ||
242 | <div class="commentQuote rQuo"> </div> | ||
243 | <div class="comment"> | ||
244 | {{/html}} | ||
245 | $lastComment.get("comment") | ||
246 | {{html clean="false"}} | ||
247 | </div> | ||
248 | ## Display discussion link, this link point to the comments anchor. | ||
249 | <div class="commentAdd"><img src="$xwiki.getSkinFile("icons/silk/comment.gif")" alt="Reply icon" /> <a href="${rcDoc.getURL("view")}#Comments">$msg.get("xe.recentchanges.entry.comment.seediscussion")</a></div> | ||
250 | </div> | ||
251 | #end | ||
252 | #else | ||
253 | <div class="modifiedPage"><a href="$rcDoc.getURL()" title="$msg.get("xe.recentchanges.entry.page.tooltip", [$rcDoc.getVersion(), $xwiki.formatDate($rcDt.toDate())])">$xwiki.getXMLEncoded($rcDoc.getDisplayTitle())</a> #displayRcVersion($rcDoc.getVersion())</div> | ||
254 | #if($rcShowDiff) | ||
255 | <div class="xshowonhover modifiedPageActions"><a href="$goToDiffURL" title="$msg.get('xe.recentchanges.entry.page.seemodifications.title', [$rcDoc.fullName])">$msg.get("xe.recentchanges.entry.page.seemodifications")</a></div> | ||
256 | ## If the author has uploaded attachments during the day in this page, display them. | ||
257 | #if($rcAttachments.size() > 0) | ||
258 | <div class="attachmentContainer" id="$modGUID"> | ||
259 | <ul> | ||
260 | #foreach($rcAttachment in $rcAttachments) | ||
261 | <li class="attachment"><a href="$rcDoc.getAttachmentURL($rcAttachment.filename)">$rcAttachment.filename</a> #displayRcVersion($rcAttachment.getVersion())</li> | ||
262 | #end | ||
263 | </ul> | ||
264 | </div> | ||
265 | #end | ||
266 | #end | ||
267 | #end | ||
268 | <div class="xspacer"> </div> | ||
269 | </div> | ||
270 | </li> | ||
271 | #end | ||
272 | #set($previousAuthor = $rcAuthor) | ||
273 | #set($previousDt = $rcDt) | ||
274 | #end | ||
275 | ## Close last row if any. | ||
276 | #if($rcDocumentNames.size() > 1)</ul></td></tr>#end | ||
277 | </table> | ||
278 | {{/html}} | ||
279 | ## | ||
280 | ## Rebuild URL query string | ||
281 | ## Workaround until we fix $request.getQueryString() | ||
282 | ## | ||
283 | #set($queryString = "") | ||
284 | #set($paramMap = $request.getParameterMap()) | ||
285 | #foreach($key in $paramMap.keySet()) | ||
286 | #foreach($value in $paramMap.get($key)) | ||
287 | #set($queryString = "${queryString}&${key}=${value}") | ||
288 | #end | ||
289 | #end | ||
290 | ## | ||
291 | ## Provide links to display minor edits and RSS feed. | ||
292 | ## | ||
293 | #if($xwiki.hasMinorEdit()) | ||
294 | |||
295 | {{html}} | ||
296 | <p class="recentChangesMoreActions"> | ||
297 | #if($rcShowMinor) | ||
298 | <a href="$xwiki.getURL($tdoc.getFullName(), "view", $queryString.replaceAll('rcShowMinor=true', ''))"><img src="$xwiki.getSkinFile("icons/silk/zoom_out.gif")" alt="Hide minor icon"/>$msg.get("xe.recentchanges.hideminor")</a> | ||
299 | #else | ||
300 | <a href="$xwiki.getURL($tdoc.getFullName(), "view", "${queryString}&rcShowMinor=true")"><img src="$xwiki.getSkinFile("icons/silk/zoom_in.gif")" alt="Show minor icon"/>$msg.get("xe.recentchanges.showminor")</a> | ||
301 | #end | ||
302 | #if($rcShowRss) | ||
303 | #set($rssURL = "") | ||
304 | #set($parameters = 'xpage=plain&outputSyntax=plain') | ||
305 | #if($rcTag.size() > 0) | ||
306 | #set($parameters = "${parameters}&tag=$listtool.get($rcTag, 0)") | ||
307 | #end | ||
308 | #if($rcSpace.size() > 0) | ||
309 | #set($parameters = "${parameters}&space=$listtool.get($rcSpace, 0)") | ||
310 | #end | ||
311 | #set($rssURL = $xwiki.getURL('Main.WebRss', 'view', $parameters)) | ||
312 | <a href="${rssURL}"><img src="$xwiki.getSkinFile("icons/silk/feed.gif")" alt="RSS icon"/>$msg.get("xe.recentchanges.rssfeed")</a> | ||
313 | #end | ||
314 | </p> | ||
315 | {{/html}} | ||
316 | #end | ||
317 | {{/velocity}} |