Wiki source code of CVSearchTemplate

Last modified by Eugen Colesnicov on 2013/03/20 13:56

Show last authors
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}&amp;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&amp;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}}