General Actions:
Log-in
Register
Wiki:
Main wiki
▼
:
Document Index
»
Space:
Main
▼
:
Document Index
»
Page:
DatabaseSearch
Search
en
Page Actions:
Export
▼
:
Export as PDF
Export as RTF
Export as HTML
More actions
▼
:
Print preview
View Source
Main wiki
»
Search
»
Database Search
Wiki source code of
Database Search
Last modified by
Administrator
on 2012/03/21 17:40
Content
·
Comments
(0)
·
Annotations
(0)
·
Attachments
(0)
·
History
·
Information
Hide line numbers
1: {{velocity}} 2: $xwiki.ssfx.use("uicomponents/search/search.css", true)## 3: ## Disable the document extra data: comments, attachments, history... 4: #set($docextras = []) 5: #set ($rssmode = ("$!request.xpage" == 'plain')) 6: ## --------------- 7: ## Space filtering 8: ## --------------- 9: #set($spaces = $xwiki.spaces) 10: #set($selectedSpace = "$!request.space") 11: ## --------------- 12: ## Space macros 13: ## --------------- 14: #macro(spaceoption $space $selectedSpace) 15: <option value="${space}" #if($selectedSpace == $space)selected="selected"#end>$space</option> 16: #end 17: #macro(spaceselect $selectedSpace $spaces) 18: <select name="space" title="$msg.get('search.page.bar.spaces.title')"> 19: <option value="" #if($selectedSpace == '')selected="selected"#end>$msg.get('search.page.bar.spaces.all')</option> 20: #foreach($space in $spaces) 21: #if (!$blacklistedSpaces.contains($space) && $xwiki.hasAccessLevel('view', "${space}.DocumentReservedForInternalXWikiUsage${mathtool.random(0, 999)}")) 22: #spaceoption($space $selectedSpace) 23: #end 24: #end 25: </select> 26: #end 27: ## 28: ## 29: #set($text = "$!request.getParameter('text')") 30: #set($utext = $util.encodeURI($text)) 31: ## --------------- 32: ## Query form 33: ## --------------- 34: #if(!$rssmode) 35: {{html}} 36: <form action="" id="searchBar"> 37: <div class="centered"> 38: <label for="text" class="hidden">$msg.get('search.page.query.label')</label> 39: <input type="text" id="text" name="text" class="searchQuery #if($text == '') withTip#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')"/> 40: #spaceselect($selectedSpace $spaces) 41: <span class='buttonwrapper'> 42: <input type="submit" class="searchButton button" value="$msg.get('search.page.bar.submit')" title="$msg.get('search.page.bar.submit.title')"/> 43: </span> 44: </div> 45: </form> 46: {{/html}} 47: #end 48: #set($space = $selectedSpace) 49: #set($datedlist = $util.arrayList) 50: #if("$!text" == '') 51: ## No search 52: #else 53: #set($text = $text.replaceAll("'", "''").replaceAll("%", "\\%")) 54: #set($nbitems = 50) 55: ## ---------------------------------------------------------------------- 56: ## Exclude Blacklisted spaces ($blacklistedSpaces is set in xwikivars.vm) 57: ## Also exclude WebPreferences. 58: ## ---------------------------------------------------------------------- 59: #set ($webClause = '') 60: #foreach ($blacklistedSpace in $blacklistedSpaces) 61: #set ($webClause = "${webClause} doc.space <> '$blacklistedSpace' and") 62: #end 63: #if(!$hasAdmin && !$isAdvancedUser) 64: #set ($webClause = "${webClause} doc.name<>'WebPreferences' and") 65: #end 66: ## ----------------------------------------------------------- 67: ## Display only a given space if $request.space is defined 68: ## ----------------------------------------------------------- 69: #if("$!space" != '') 70: #set ($webClause = "${webClause} doc.space='$space' and") 71: #end 72: #macro(addelement $item $list) 73: #if($xwiki.hasAccessLevel('view', $xcontext.user, "${xcontext.database}:${item}")) 74: #set($itemdoc = $xwiki.getDocument($item)) 75: ## All items will be sorted by the date; since the list is obtained from several queries, we can't order in the HQL. 76: ## Prefix all item names with the date for sorting the combined results. 77: #set($sdate = $xwiki.formatDate($itemdoc.date, 'yyyyMMddHHmmss')) 78: #set($sitem = "${sdate}${item}") 79: #if(!$list.contains($sitem)) 80: #set($discard = $list.add($sitem)) 81: #end 82: #end 83: #end 84: ## ----------------------------------------------------------- 85: ## Search in the page names 86: ## ----------------------------------------------------------- 87: #set ($sql = "where $webClause upper(doc.fullName) like upper('%$!text%') order by doc.date desc") 88: #foreach ($item in $xwiki.searchDocuments($sql , $nbitems, 0)) 89: #addelement($item $datedlist) 90: #end 91: ## ----------------------------------------------------------- 92: ## Search in page content 93: ## ----------------------------------------------------------- 94: #set ($sql = "where $webClause upper(doc.content) like upper('%$!text%') order by doc.date desc") 95: #foreach ($item in $xwiki.searchDocuments($sql , $nbitems, 0)) 96: #addelement($item $datedlist) 97: #end 98: ## ----------------------------------------------------------- 99: ## Search in text fields (simple String properties) 100: ## ----------------------------------------------------------- 101: #set($sql= ", BaseObject as obj, StringProperty as prop where $webClause obj.name=doc.fullName and prop.id.id = obj.id and upper(prop.value) like upper('%$!text%')") 102: #foreach ($item in $xwiki.searchDocuments($sql , $nbitems, 0)) 103: #addelement($item $datedlist) 104: #end 105: ## ----------------------------------------------------------- 106: ## Search in big text fields (textarea properties) 107: ## ----------------------------------------------------------- 108: #set($sql= ", BaseObject as obj, LargeStringProperty as prop where $webClause obj.name=doc.fullName and prop.id.id = obj.id and upper(prop.value) like upper('%$!text%')") 109: #foreach ($item in $xwiki.searchDocuments($sql , $nbitems, 0)) 110: #addelement($item $datedlist) 111: #end 112: #end 113: #set($list = $util.arrayList) 114: #foreach($item in $util.sort($datedlist)) 115: ## datedlist contains items prefixed with the date; strip the date from the actual item name: 116: #set($ok = $list.add(0, $item.substring(14))) 117: #end 118: #if ("$!utext" != '') 119: #if($rssmode) 120: #set ($feed = $xwiki.feed.getDocumentFeed($list, $util.getHashMap())) 121: #set ($feedURI = $doc.getExternalURL("view")) 122: #set ($discard = $feed.setLink($feedURI)) 123: #set ($discard = $feed.setUri($feedURI)) 124: #set ($discard = $feed.setAuthor('XWiki')) 125: #set ($discard = $feed.setTitle($msg.get('search.rss', [$text]))) 126: #set ($discard = $feed.setDescription($msg.get('search.rss', [$text]))) 127: #set ($discard = $feed.setLanguage($xcontext.language)) 128: #set ($discard = $feed.setCopyright($xwiki.getXWikiPreference('copyright'))) 129: {{{$xwiki.feed.getFeedOutput($feed, $xwiki.getXWikiPreference('feed_type', 'rss_2.0'))}}} 130: #else 131: 132: {{include document="XWiki.Results"/}} 133: 134: #if($selectedSpace == '') 135: #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=plain&outputSyntax=plain&text=${utext}" )) 136: #else 137: #set($rssURL = $xwiki.getURL($doc.fullName, 'view', "xpage=plain&outputSyntax=plain&space=${selectedSpace}&text=${utext}")) 138: #end 139: {{html}} 140: <a href="${rssURL}" class='hasIcon iconRSS'>$msg.get("search.rss", ["[$escapetool.xml($text)]"])</a> 141: {{/html}} 142: #end 143: #end 144: {{/velocity}}