Wiki source code of CVSearchTemplate
Last modified by Eugen Colesnicov on 2013/03/20 13:56
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | {{velocity}} | ||
2 | $xwiki.jsfx.use("uicomponents/search/search.js", true)## | ||
3 | $xwiki.ssfx.use("uicomponents/search/search.css", true)## | ||
4 | ## Disable the document extra data: comments, attachments, history... | ||
5 | #set($docextras = []) | ||
6 | ## =================== | ||
7 | ## Lucene search | ||
8 | ## =================== | ||
9 | ## Inputs : $request.text | ||
10 | ## Outputs : $list, $isScored | ||
11 | ## =================== | ||
12 | ## Uncomment this line to overload the maximum list of wiki where to search (also the one listed in the wikis combobox) | ||
13 | ## #set($allwikinamelist = ["xwiki", "wiki1", "wiki2"]) | ||
14 | ## | ||
15 | ## Uncomment this line to overload the wikis where to search | ||
16 | ## #set($wikinames = "xwiki,wiki,wiki") | ||
17 | ## | ||
18 | ## Uncomment this line to overload the languages to search | ||
19 | ## #set($languages = "default,en,de") | ||
20 | #set ($rssmode = ("$!request.xpage" == 'plain')) | ||
21 | ## --------------- | ||
22 | ## Space filtering | ||
23 | ## --------------- | ||
24 | ## #set($extraClause = '') | ||
25 | #set($extraClause = " AND space:etvcCV AND ( object:etvcCVcode.CurriculumClass OR type:attachment )") | ||
26 | ##set($spaces = $xwiki.spaces) | ||
27 | ##set($selectedSpace = "$!request.space") | ||
28 | ##if($selectedSpace != '' && !$blacklistedSpaces.contains($selectedSpace)) | ||
29 | ##set($extraClause = " AND space:${selectedSpace}") | ||
30 | ##end | ||
31 | ## ---------------------------------------------------------------------- | ||
32 | ## Exclude Blacklisted spaces ($blacklistedSpaces is set in xwikivars.vm) | ||
33 | ## Also exclude WebPreferences. | ||
34 | ## ---------------------------------------------------------------------- | ||
35 | #foreach ($blacklistedSpace in $blacklistedSpaces) | ||
36 | #set ($extraClause = " AND NOT space:${blacklistedSpace}${extraClause}") | ||
37 | #end | ||
38 | #if(!$hasAdmin && !$isAdvancedUser) | ||
39 | #set ($extraClause = " AND NOT name:WebPreferences${extraClause}") | ||
40 | #end | ||
41 | ## --------------- | ||
42 | ## Space macros | ||
43 | ## --------------- | ||
44 | #macro(spaceoption $space $selectedSpace) | ||
45 | <option value="${space}" #if($selectedSpace == $space)selected="selected"#end>$space</option> | ||
46 | #end | ||
47 | #macro(spaceselect $selectedSpace $spaces) | ||
48 | <select name="space" title="$msg.get('search.page.bar.spaces.title')"> | ||
49 | <option value="" #if($selectedSpace == '')selected="selected"#end>$msg.get('search.page.bar.spaces.all')</option> | ||
50 | #foreach($space in $spaces) | ||
51 | #if (!$blacklistedSpaces.contains($space)) | ||
52 | #spaceoption($space $selectedSpace) | ||
53 | #end | ||
54 | #end | ||
55 | </select> | ||
56 | #end | ||
57 | ## --------------- | ||
58 | ## Wikis filtering | ||
59 | ## --------------- | ||
60 | ## Parse provided wikis | ||
61 | #set($wikinamelist = []) | ||
62 | #if (!$wikinames) | ||
63 | #set($wikinametable = $request.getParameterValues("wikinames")) | ||
64 | #if (!$wikinametable || $request.wikinames == "") | ||
65 | #set($wikinametable = $allwikinamelist) | ||
66 | #end | ||
67 | #set($wikinames = '') | ||
68 | #foreach($wikiname in $wikinametable) | ||
69 | #set($ok = $wikinamelist.add($wikiname)) | ||
70 | #if($wikinames != "") | ||
71 | #set($wikinames = $wikinames + ",") | ||
72 | #end | ||
73 | #set($wikinames = $wikinames + $wikiname) | ||
74 | #end | ||
75 | #if (!$context.isMainWiki() && $wikinames == '') | ||
76 | #set($wikinames = $context.database) | ||
77 | #end | ||
78 | #else | ||
79 | #set($wikinametable = $wikinames.split(", ")) | ||
80 | #foreach($wikiname in $wikinametable) | ||
81 | #set($ok = $wikinamelist.add($wikiname)) | ||
82 | #end | ||
83 | #end | ||
84 | ## | ||
85 | #if($xwiki.isVirtualMode() && $context.isMainWiki()) | ||
86 | #if(!$allwikinamelist) | ||
87 | #set($currentwikiname = $context.database) | ||
88 | ## TODO: add and use a public API method to get the list of wikis instead of doing it "by hand" | ||
89 | #set($allwikilist = $xwiki.searchDocuments(", BaseObject as obj, StringProperty as prop where doc.fullName=obj.name and doc.fullName<>'XWiki.XWikiServerClassTemplate' and obj.className='XWiki.XWikiServerClass' and prop.id.id=obj.id and prop.id.name='server'")) | ||
90 | ## | ||
91 | #set($allwikinamelist = []) | ||
92 | #foreach($wiki in $allwikilist) | ||
93 | #set($ok = $allwikinamelist.add($wiki.substring(17).toLowerCase())) | ||
94 | #end | ||
95 | ## Make sure the main wiki is part of the list | ||
96 | #if(!$allwikinamelist.contains($context.mainWikiName)) | ||
97 | #set($ok = $allwikinamelist.add($context.mainWikiName)) | ||
98 | #end | ||
99 | #end | ||
100 | ## --------------- | ||
101 | ## Wikis macros | ||
102 | ## --------------- | ||
103 | #macro(wikioption $wikiname $wikinamelist) | ||
104 | <option value="$wikiname" #if($wikinamelist.contains($wikiname))selected="selected"#end>$wikiname</option> | ||
105 | #end | ||
106 | #macro(wikisselect $wikinamelist $allwikinamelist) | ||
107 | ## TODO: find a scaling way to handle wikis multiselect, does not use multiple="multiple" for now because it does not looks nice | ||
108 | <select name="wikinames"> | ||
109 | <option value="" selected="selected">$msg.get('search.page.bar.wikis.all')</option> | ||
110 | #foreach($wikiname in $allwikinamelist) | ||
111 | #wikioption($wikiname $wikinamelist) | ||
112 | #end | ||
113 | </select> | ||
114 | #end | ||
115 | #else | ||
116 | #if($wikinames == '') | ||
117 | #set($wikinames = $context.mainWikiName) | ||
118 | #end | ||
119 | #end | ||
120 | ## --------------- | ||
121 | ## Query preparation | ||
122 | ## --------------- | ||
123 | #set($text = "$!request.getParameter('text')") | ||
124 | #set($query = $text) | ||
125 | #set($utext = $util.encodeURI($query)) | ||
126 | #set($defaultItemsPerPage = 30) | ||
127 | #set($itemsPerPage = $util.parseInt("$!{request.perPage}")) | ||
128 | #if($itemsPerPage <= 0) | ||
129 | #set($itemsPerPage = $defaultItemsPerPage) | ||
130 | #end | ||
131 | ## --------------- | ||
132 | ## Query form | ||
133 | ## --------------- | ||
134 | #if(!$rssmode) | ||
135 | |||
136 | {{html wiki="true"}} | ||
137 | <form action="" id="searchBar"> | ||
138 | <div class="centered"> | ||
139 | <label for="text" class="hidden">$msg.get('search.page.query.label')</label> | ||
140 | <input type="text" id="text" name="text" class="searchQuery #if($text == '') defaultText#end" #if($text == '') value="$msg.get('search.page.bar.query.tip')" #else value="${escapetool.xml($text)}" #end title="$msg.get('search.page.bar.query.title')"/> | ||
141 | #if ($xwiki.isVirtualMode() && $context.isMainWiki()) | ||
142 | #wikisselect($wikinamelist $allwikinamelist) | ||
143 | #end | ||
144 | ##spaceselect($selectedSpace $spaces) | ||
145 | <input type="submit" class="searchButton" value="$msg.get('search.page.bar.submit')" title="$msg.get('search.page.bar.submit.title')"/> | ||
146 | <div class="searchHelp">$msg.get('search.page.bar.querytip')</div> | ||
147 | </div> | ||
148 | </form> | ||
149 | {{/html}} | ||
150 | #end | ||
151 | ## --------------- | ||
152 | ## Results processing | ||
153 | ## --------------- | ||
154 | #if($query != '') | ||
155 | #set($lucene = $xwiki.getPlugin("lucene")) | ||
156 | #if($lucene) | ||
157 | ## --------------- | ||
158 | ## Lucene search | ||
159 | ## --------------- | ||
160 | #set($searchresults = $lucene.getSearchResults("${query}${extraClause}", '', $wikinames, $!languages)) | ||
161 | #if($searchresults.getHitcount() > 0) | ||
162 | ## ----------------- | ||
163 | ## Pagination (top) | ||
164 | ## ----------------- | ||
165 | #if(!$rssmode) | ||
166 | #set($paginationParameters = {'url' : $doc.getURL('view', "text=${query}&space=${selectedSpace}"), 'totalItems' : $searchresults.getHitcount(), 'defaultItemsPerPage' : $defaultItemsPerPage, 'position': 'top'}) | ||
167 | |||
168 | {{html}} | ||
169 | #pagination($paginationParameters) | ||
170 | {{/html}} | ||
171 | #end | ||
172 | ## ----------------- | ||
173 | ## Display results | ||
174 | ## ----------------- | ||
175 | #set($firstIndex = "$!{paginationParameters.firstItem}") | ||
176 | #if($firstIndex == '') | ||
177 | #set($firstIndex = "$!request.getParameter('firstIndex')") | ||
178 | #if($firstIndex == '') | ||
179 | #set($firstIndex = '0') | ||
180 | #end | ||
181 | #end | ||
182 | #set($firstIndex = $util.parseInt($firstIndex)) | ||
183 | #set($firstIndex = $firstIndex + 1) | ||
184 | #set($results = $searchresults.getResults("$firstIndex", "$itemsPerPage")) | ||
185 | #if ($rssmode) | ||
186 | #set ($list = $util.arrayList) | ||
187 | #foreach ($item in $results) | ||
188 | #if ($item.type != "attachment") | ||
189 | #set ($ok = $list.add(0, "${item.space}.${item.name}")) | ||
190 | #end | ||
191 | #end | ||
192 | #set ($feed = $xwiki.feed.getDocumentFeed($list, $util.getHashMap())) | ||
193 | #set ($feedURI = $doc.getExternalURL("view")) | ||
194 | #set ($discard = $feed.setLink($feedURI)) | ||
195 | #set ($discard = $feed.setUri($feedURI)) | ||
196 | #set ($discard = $feed.setAuthor('XWiki')) | ||
197 | #set ($discard = $feed.setTitle($msg.get('search.rss', [$text]))) | ||
198 | #set ($discard = $feed.setDescription($msg.get('search.rss', [$text]))) | ||
199 | #set ($discard = $feed.setLanguage($context.language)) | ||
200 | #set ($discard = $feed.setCopyright($xwiki.getXWikiPreference('copyright'))) | ||
201 | {{{$xwiki.feed.getFeedOutput($feed, 'rss_2.0')}}} | ||
202 | #else | ||
203 | #set ($list = $results) | ||
204 | #set ($isScored = true) | ||
205 | |||
206 | {{include document="XWiki.Results"/}} | ||
207 | #end | ||
208 | ## ----------------- | ||
209 | ## Pagination (bottom) | ||
210 | ## ----------------- | ||
211 | #if(!$rssmode) | ||
212 | #set($paginationParameters.position = 'bottom') | ||
213 | |||
214 | {{html}} | ||
215 | #pagination($paginationParameters) | ||
216 | {{/html}} | ||
217 | ## --------------- | ||
218 | ## RSS link | ||
219 | ## --------------- | ||
220 | #if($selectedSpace == '') | ||
221 | #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=plain&text=${utext}" )) | ||
222 | #else | ||
223 | #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=plain&space=${selectedSpace}&text=${utext}")) | ||
224 | #end | ||
225 | |||
226 | {{html}} | ||
227 | <a href="${rssURL}"><img src="$xwiki.getSkinFile("icons/silk/feed.gif")" alt="RSS icon"/>$msg.get("search.rss", ["[$query]"])</a> | ||
228 | {{/html}} | ||
229 | #end | ||
230 | #end | ||
231 | #else | ||
232 | |||
233 | {{error}}$msg.get('search.lucene.plugin.notfound')){{/error}} | ||
234 | #end | ||
235 | #end | ||
236 | #if (!$rssmode) | ||
237 | ## --------------- | ||
238 | ## Rebuild processing | ||
239 | ## --------------- | ||
240 | #set($lucene = $xwiki.getPlugin("lucene")) | ||
241 | #if($lucene) | ||
242 | ## --------------- | ||
243 | ## Queue | ||
244 | ## --------------- | ||
245 | #set ($queuesize = $xwiki.lucene.getQueueSize()) | ||
246 | #if ($queuesize > 0) | ||
247 | |||
248 | {{info}}$msg.get('search.page.lucene.rebuilding', [${queuesize}]){{/info}} | ||
249 | #end | ||
250 | #end## lucene exists | ||
251 | #end## !$rssmode | ||
252 | {{/velocity}} |