blob: c05cb149772a18f3cb37ed047fc3d9d2635c08d4 [file] [log] [blame]
<%@ page import="org.apache.log4j.*" %>
<%@ page import="com.ecyrd.jspwiki.*" %>
<%@ page import="com.ecyrd.jspwiki.auth.*" %>
<%@ page import="com.ecyrd.jspwiki.auth.permissions.*" %>
<%@ page import="java.util.*" %>
<%@ page errorPage="/Error.jsp" %>
<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
<%!
Logger log = Logger.getLogger("JSPWikiSearch");
%>
<%
WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
// Create wiki context and check for authorization
WikiContext wikiContext = wiki.createContext( request, WikiContext.FIND );
if(!wikiContext.hasAccess( response )) return;
String pagereq = wikiContext.getName();
// Get the search results
Collection list = null;
String query = request.getParameter( "query");
String go = request.getParameter("go");
if( query != null )
{
log.info("Searching for string "+query);
try
{
list = wiki.findPages( query );
//
// Filter down to only those that we actually have a permission to view
//
AuthorizationManager mgr = wiki.getAuthorizationManager();
ArrayList filteredList = new ArrayList();
for( Iterator i = list.iterator(); i.hasNext(); )
{
SearchResult r = (SearchResult)i.next();
WikiPage p = r.getPage();
PagePermission pp = new PagePermission( p, PagePermission.VIEW_ACTION );
try
{
if( mgr.checkPermission( wikiContext.getWikiSession(), pp ) )
{
filteredList.add( r );
}
}
catch( Exception e ) { log.error( "Searching for page "+p, e ); }
}
pageContext.setAttribute( "searchresults",
filteredList,
PageContext.REQUEST_SCOPE );
}
catch( Exception e )
{
wikiContext.getWikiSession().addMessage( e.getMessage() );
}
query = TextUtil.replaceEntities( query );
pageContext.setAttribute( "query",
query,
PageContext.REQUEST_SCOPE );
//
// Did the user click on "go"?
//
if( go != null )
{
if( list != null && list.size() > 0 )
{
SearchResult sr = (SearchResult) list.iterator().next();
WikiPage wikiPage = sr.getPage();
String url = wikiContext.getViewURL( wikiPage.getName() );
response.sendRedirect( url );
return;
}
}
}
// Set the content type and include the response content
response.setContentType("text/html; charset="+wiki.getContentEncoding() );
String contentPage = wiki.getTemplateManager().findJSP( pageContext,
wikiContext.getTemplate(),
"ViewTemplate.jsp" );
%><wiki:Include page="<%=contentPage%>" /><%
log.debug("SEARCH COMPLETE");
%>