Modifié par Administrator le 2009/09/17 15:31

Afficher les derniers auteurs
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($selectedSpace = "$!request.space")
26 #if($selectedSpace != '' && !$blacklistedSpaces.contains($selectedSpace))
27 #set($extraClause = " AND web:${selectedSpace}")
28 #end
29 ## ----------------------------------------------------------------------
30 ## Exclude Blacklisted spaces ($blacklistedSpaces is set in xwikivars.vm)
31 ## Also exclude WebPreferences.
32 ## ----------------------------------------------------------------------
33 #foreach ($blacklistedSpace in $blacklistedSpaces)
34 #set ($extraClause = " AND NOT web:${blacklistedSpace}${extraClause}")
35 #end
36 #if(!$hasAdmin && !$isAdvancedUser)
37 #set ($extraClause = " AND NOT name:WebPreferences${extraClause}")
38 #end
39 ## ---------------
40 ## Space macros
41 ## ---------------
42 #macro(spaceoption $space $selectedSpace)
43 <option value="${space}" #if($selectedSpace == $space)selected="selected"#end>$space</option>
44 #end
45 #macro(spaceselect $selectedSpace $spaces)
46 <select name="space" title="$msg.get('xe.search.bar.spaces.title')">
47 <option value="" #if($selectedSpace == '')selected="selected"#end>$msg.get('xe.search.bar.spaces.all')</option>
48 #foreach($space in $xwiki.spaces)
49 #if (!$blacklistedSpaces.contains($space))
50 #spaceoption($space $selectedSpace)
51 #end
52 #end
53 </select>
54 #end
55 ## ---------------
56 ## Wikis filtering
57 ## ---------------
58 #set($wikinamelist = [])
59 #if(!$wikinames)
60 #set($wikinametable = $request.getParameterValues("wikinames"))
61 #if(!$wikinametable || $request.wikinames == "")
62 #set($wikinametable = $allwikinamelist)
63 #end
64 #set($wikinames = "")
65 #foreach($wikiname in $wikinametable)
66 #set($ok = $wikinamelist.add($wikiname))
67 #if($wikinames != "")
68 #set($wikinames = $wikinames + ",")
69 #end
70 #set($wikinames = $wikinames + $wikiname)
71 #end
72 #else
73 #set($wikinametable = $wikinames.split(", "))
74 #foreach($wikiname in $wikinametable)
75 #set($ok = $wikinamelist.add($wikiname))
76 #end
77 #end
78 ##
79 #if($xwiki.isVirtualMode())
80 #if(!$allwikinamelist)
81 #set($currentwikiname = $context.database)
82 #set($ok = $context.setDatabase($context.mainWikiName))
83 #set($allwikilist = $xwiki.searchDocuments(", BaseObject as obj, StringProperty as prop where doc.fullName=obj.name and obj.className='XWiki.XWikiServerClass' and prop.id.id=obj.id and prop.id.name='server'"))
84 #set($ok = $context.setDatabase($currentwikiname))
85 ##
86 #set($allwikinamelist = [])
87 #foreach($wiki in $allwikilist)
88 #set($ok = $allwikinamelist.add($wiki.substring(17).toLowerCase()))
89 #end
90 #if(!$allwikinamelist.contains($context.mainWikiName))
91 #set($ok = $allwikinamelist.add($context.mainWikiName))
92 #end
93 #end
94 ## ---------------
95 ## Wikis macros
96 ## ---------------
97 #macro(wikinamesoption $wikiname $wikinamelist)
98 <option value="$wikiname" #if($wikinamelist.contains($wikiname))selected="selected"#end>$wikiname</option>
99 #end
100 #macro(wikinamesselect $allwikinamelist $wikinamelist)
101 <select name="wikinames">
102 <option value="" selected="selected">All</option>
103 #foreach($wikiname in $allwikinamelist)
104 #wikinamesoption($wikiname $wikinamelist)
105 #end
106 </select>
107 #end
108 #else
109 #if($wikinames == "")
110 #set($wikinames = $context.mainWikiName)
111 #end
112 #end
113 ## ---------------
114 ## Query preparation
115 ## ---------------
116 #set($text = "$!request.getParameter('text')")
117 #set($query = $text)
118 #set($utext = $util.encodeURI($query))
119 #set($defaultItemsPerPage = 30)
120 #set($itemsPerPage = $util.parseInt("$!{request.perPage}"))
121 #if($itemsPerPage <= 0)
122 #set($itemsPerPage = $defaultItemsPerPage)
123 #end
124 ## ---------------
125 ## Query form
126 ## ---------------
127 #if(!$rssmode)
128 {{html}}
129 <form action="" method="get" id="searchBar">
130 <div class="centered">
131 <label for="text" class="hidden">$msg.get('xe.search.query')</label>
132 <input type="text" id="text" name="text" class="searchQuery #if($text == '') defaultText#end" #if($text == '') value="$msg.get('xe.search.bar.query.tip')" #else value="$xwiki.getXMLEncoded(${text})" #end title="$msg.get('xe.search.bar.query.title')"/>
133 #spaceselect($selectedSpace $spaces)
134 <input type="submit" class="searchButton" value="$msg.get('xe.search.bar.submit')" title="$msg.get('xe.search.bar.submit.title')"/>
135 <div class="searchHelp">$msg.get('xe.search.bar.queryTip')</div>
136 </div>
137 </form>
138 {{/html}}
139 #end
140 ## ---------------
141 ## Results processing
142 ## ---------------
143 #if($query != '')
144 #set($lucene = $xwiki.getPlugin("lucene"))
145 #if($lucene)
146 ## ---------------
147 ## Lucene search
148 ## ---------------
149 #set($searchresults = $lucene.getSearchResults("${query}${extraClause}", $wikinames, $!languages, $xwiki))
150 #if($searchresults.getHitcount() > 0)
151 ## -----------------
152 ## Pagination (top)
153 ## -----------------
154 #if(!$rssmode)
155 #set($paginationParameters = {'url' : $doc.getURL('view', "text=${query}&amp;space=${selectedSpace}"), 'totalItems' : $searchresults.getHitcount(), 'defaultItemsPerPage' : $defaultItemsPerPage, 'position': 'top'})
156 {{html}}
157 #pagination($paginationParameters)
158 {{/html}}
159 #end
160 ## -----------------
161 ## Display results
162 ## -----------------
163 #set($firstIndex = "$!{paginationParameters.firstItem}")
164 #if($firstIndex == '')
165 #set($firstIndex = "$!request.getParameter('firstIndex')")
166 #if($firstIndex == '')
167 #set($firstIndex = '0')
168 #end
169 #end
170 #set($firstIndex = $util.parseInt($firstIndex))
171 #set($firstIndex = $firstIndex + 1)
172 #set($results = $searchresults.getResults("$firstIndex", "$itemsPerPage"))
173 #if ($rssmode)
174 #set ($list = $util.arrayList)
175 #foreach ($item in $results)
176 #if ($item.type != "attachment")
177 #set ($ok = $list.add(0, "${item.web}.${item.name}"))
178 #end
179 #end
180 #set ($feed = $xwiki.feed.getDocumentFeed($list, $util.getHashMap()))
181 #set ($feedURI = $doc.getExternalURL("view"))
182 #set ($discard = $feed.setLink($feedURI))
183 #set ($discard = $feed.setUri($feedURI))
184 #set ($discard = $feed.setAuthor('XWiki'))
185 #set ($discard = $feed.setTitle($msg.get('xe.search.rss', [$text])))
186 #set ($discard = $feed.setDescription($msg.get('xe.search.rss', [$text])))
187 #set ($discard = $feed.setLanguage($context.language))
188 #set ($discard = $feed.setCopyright($xwiki.getXWikiPreference('copyright')))
189 $xwiki.feed.getFeedOutput($feed, 'rss_2.0')
190 #else
191 #set ($list = $results)
192 #set ($isScored = true)
193 {{include document="XWiki.Results"/}}
194 #end
195 ## -----------------
196 ## Pagination (bottom)
197 ## -----------------
198 #if(!$rssmode)
199 #set($paginationParameters.position = 'bottom')
200 {{html}}
201 #pagination($paginationParameters)
202 {{/html}}
203 ## ---------------
204 ## RSS link
205 ## ---------------
206 #if($selectedSpace == '')
207 #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=rdf&amp;text=${utext}" ))
208 #else
209 #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=rdf&space=${selectedSpace}&text=${utext}"))
210 #end
211 {{html}}
212 <a href="${rssURL}"><img src="$xwiki.getSkinFile("icons/silk/feed.gif")" alt="RSS icon"/>$msg.get("xe.search.rss", ["[$query]"])</a>
213 {{/html}}
214 #end
215 #end
216 #else
217
218 {{error}}$msg.get('xe.search.plugin.notfound')){{/error}}
219 #end
220 #end
221 #if (!$rssmode)
222 ## ---------------
223 ## Rebuild processing
224 ## ---------------
225 #set($lucene = $xwiki.getPlugin("lucene"))
226 #if($lucene)
227 #set($doRebuild = "$!{request.getParameter('rebuild')}")
228 #if($doRebuild == "yes")
229 #set($documentCount = $lucene.rebuildIndex())
230 #if(${documentCount} >= 0)
231
232 {{info}}$msg.get("xe.search.rebuild.started"){{/info}}
233 #elseif(${documentCount} == -1)
234
235 {{error}}$msg.get("xe.search.rebuild.rights"){{/error}}
236
237 #elseif(${documentCount} == -2)
238
239 {{error}}$msg.get("xe.search.rebuild.inprogress"){{/error}}
240 #else
241
242 {{error}}$msg.get("xe.search.rebuild.failed"){{/error}}
243 #end
244 #else## !doRebuild
245 ## ---------------
246 ## Queue & rebuild option
247 ## ---------------
248 #set ($queuesize = $xwiki.lucene.getQueueSize())
249 #if ($queuesize > 2)
250 #set($info1 = $msg.get('xe.search.rebuild.currently', [${queuesize}]))
251 #else
252 #set($info1 = $msg.get('xe.search.index.uptodate'))
253 #end
254 #if($hasAdmin)
255 #set($info2 = " [[$msg.get('xe.search.index.rebuild')>>${doc.space}.${doc.name}?rebuild=yes]].")
256 #else
257 #set($info2 = "")
258 #end
259
260 {{info}}${info1}${info2}{{/info}}
261 #end## doRebuild
262 #set($defaultSearch = "[[$msg.get('xe.search.default.engine')>>WebSearch?text=$utext]]")
263
264 {{warning}}$msg.get('xe.search.lucene.experimental', [$defaultSearch]){{/warning}}
265
266 #else## !lucene exists
267 #set($defaultSearch = "[[$msg.get('xe.search.default.engine')>>WebSearch?text=$utext]]")
268
269 {{warning}}$msg.get('xe.search.plugin.notenabled', [$defaultSearch]){{/warning}}
270 #end## lucene exists
271 #end## !$rssmode
272 {{/velocity}}