You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2008/02/13 07:15:49 UTC
svn commit: r627262 [2/2] -
/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Search.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Search.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Search.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Search.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,100 @@
+<%@ 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");
+%>
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/SisterSites.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/SisterSites.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/SisterSites.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/SisterSites.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,37 @@
+<%@ page import="java.util.*,com.ecyrd.jspwiki.*" %>
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="java.text.*" %>
+<%@ page import="com.ecyrd.jspwiki.rss.*" %>
+<%@ page import="com.ecyrd.jspwiki.util.*" %>
+<%@ taglib uri="/WEB-INF/oscache.tld" prefix="oscache" %>
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%>
+<%
+ /*
+ * This JSP creates support for the SisterSites standard,
+ * as specified by http://usemod.com/cgi-bin/mb.pl?SisterSitesImplementationGuide
+ *
+ * FIXME: Does not honor the ACL's on the pages.
+ */
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, "rss" );
+ if(!wikiContext.hasAccess( response )) return;
+
+ Set allPages = wiki.getReferenceManager().findCreated();
+
+ response.setContentType("text/plain; charset=UTF-8");
+ for( Iterator i = allPages.iterator(); i.hasNext(); )
+ {
+ String pageName = (String)i.next();
+
+ // Let's not add attachments.
+ // TODO: This is a kludge and not forward-compatible.
+
+ if( pageName.indexOf("/") != -1 ) continue;
+ String url = wiki.getViewURL( pageName );
+
+ out.write( url + " " + pageName + "\n" );
+ }
+ %>
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Upload.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Upload.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Upload.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Upload.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,24 @@
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="com.ecyrd.jspwiki.*" %>
+<%@ page errorPage="/Error.jsp" %>
+<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
+
+
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%>
+
+<%
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, WikiContext.UPLOAD );
+ if(!wikiContext.hasAccess( response )) return;
+ String pagereq = wikiContext.getName();
+
+ // Set the content type and include the response content
+ response.setContentType("text/html; charset="+wiki.getContentEncoding() );
+ String contentPage = wiki.getTemplateManager().findJSP( pageContext,
+ wikiContext.getTemplate(),
+ "UploadTemplate.jsp" );
+%><wiki:Include page="<%=contentPage%>" />
+
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/UserPreferences.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/UserPreferences.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/UserPreferences.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/UserPreferences.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,100 @@
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="com.ecyrd.jspwiki.VariableManager" %>
+<%@ page import="com.ecyrd.jspwiki.WikiContext" %>
+<%@ page import="com.ecyrd.jspwiki.WikiSession" %>
+<%@ page import="com.ecyrd.jspwiki.WikiEngine" %>
+<%@ page import="com.ecyrd.jspwiki.auth.UserManager" %>
+<%@ page import="com.ecyrd.jspwiki.auth.WikiSecurityException" %>
+<%@ page import="com.ecyrd.jspwiki.auth.login.CookieAssertionLoginModule" %>
+<%@ page import="com.ecyrd.jspwiki.auth.user.DuplicateUserException" %>
+<%@ page import="com.ecyrd.jspwiki.auth.user.UserProfile" %>
+<%@ page import="com.ecyrd.jspwiki.workflow.DecisionRequiredException" %>
+<%@ page import="com.ecyrd.jspwiki.ui.EditorManager" %>
+<%@ page import="com.ecyrd.jspwiki.preferences.*" %>
+<%@ page errorPage="/Error.jsp" %>
+<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
+
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%>
+
+<%
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, WikiContext.PREFS );
+ if(!wikiContext.hasAccess( response )) return;
+
+ // Extract the user profile and action attributes
+ UserManager userMgr = wiki.getUserManager();
+ WikiSession wikiSession = wikiContext.getWikiSession();
+
+ if( request.getParameter(EditorManager.PARA_EDITOR) != null )
+ {
+ String editor = request.getParameter(EditorManager.PARA_EDITOR);
+ session.setAttribute(EditorManager.PARA_EDITOR,editor);
+ }
+ // Are we saving the profile?
+ if( "saveProfile".equals(request.getParameter("action")) )
+ {
+ UserProfile profile = userMgr.parseProfile( wikiContext );
+
+ // Validate the profile
+ userMgr.validateProfile( wikiContext, profile );
+
+ // If no errors, save the profile now & refresh the principal set!
+ if ( wikiSession.getMessages( "profile" ).length == 0 )
+ {
+ try
+ {
+ userMgr.setUserProfile( wikiSession, profile );
+ CookieAssertionLoginModule.setUserCookie( response, profile.getFullname() );
+ }
+ catch( DuplicateUserException e )
+ {
+ // User collision! (full name or wiki name already taken)
+ wikiSession.addMessage( "profile", e.getMessage() );
+ }
+ catch( DecisionRequiredException e )
+ {
+ String redirect = wiki.getURL(WikiContext.VIEW,"ApprovalRequiredForUserProfiles",null,true);
+ response.sendRedirect( redirect );
+ return;
+ }
+ catch( WikiSecurityException e )
+ {
+ // Something went horribly wrong! Maybe it's an I/O error...
+ wikiSession.addMessage( "profile", e.getMessage() );
+ }
+ }
+ if ( wikiSession.getMessages( "profile" ).length == 0 )
+ {
+ String redirectPage = request.getParameter( "redirect" );
+ response.sendRedirect( wiki.getViewURL(redirectPage) );
+ return;
+ }
+ }
+ if( "setAssertedName".equals(request.getParameter("action")) )
+ {
+ Preferences.reloadPreferences(pageContext);
+ String assertedName = request.getParameter("assertedName");
+ CookieAssertionLoginModule.setUserCookie( response, assertedName );
+
+ String redirectPage = request.getParameter( "redirect" );
+ String viewUrl = ( "UserPreferences".equals( redirectPage ) ) ? "Wiki.jsp" : wiki.getViewURL( redirectPage );
+
+ log.info( "Redirecting user to " + viewUrl );
+ response.sendRedirect( viewUrl );
+ return;
+ }
+ if( "clearAssertedName".equals(request.getParameter("action")) )
+ {
+ CookieAssertionLoginModule.clearUserCookie( response );
+ response.sendRedirect( wikiContext.getURL(WikiContext.NONE,"Logout.jsp") );
+ return;
+ }
+ response.setContentType("text/html; charset="+wiki.getContentEncoding() );
+ String contentPage = wiki.getTemplateManager().findJSP( pageContext,
+ wikiContext.getTemplate(),
+ "ViewTemplate.jsp" );
+%><wiki:Include page="<%=contentPage%>" />
+
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Vote.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Vote.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Vote.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Vote.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,23 @@
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="com.ecyrd.jspwiki.*" %>
+<%@ page import="com.ecyrd.jspwiki.plugin.VotePlugin" %>
+<%@ page errorPage="/Error.jsp" %>
+<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%><%
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, WikiContext.VIEW );
+ String pagereq = wikiContext.getName();
+
+ String vote = request.getParameter("vote");
+ log.info("Vote '"+pagereq+"' from "+request.getRemoteAddr()+" by "+request.getRemoteUser() );
+
+ VotePlugin plugin = new VotePlugin();
+
+ plugin.vote( wikiContext, TextUtil.isPositive( vote ) ? 1 : -1 );
+
+ response.sendRedirect( wiki.getBaseURL()+"Wiki.jsp?page=VoteOk" );
+%>
+
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Wiki.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Wiki.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Wiki.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Wiki.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,47 @@
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="com.ecyrd.jspwiki.*" %>
+<%@ page import="com.ecyrd.jspwiki.util.*" %>
+<%@ page import="org.apache.commons.lang.time.StopWatch" %>
+<%@ page errorPage="/Error.jsp" %>
+<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%>
+
+<%
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, WikiContext.VIEW );
+ if(!wikiContext.hasAccess( response )) return;
+ String pagereq = wikiContext.getName();
+
+ // Redirect if the request was for a 'special page'
+ String redirect = wiki.getRedirectURL( wikiContext );
+ if( redirect != null )
+ {
+ response.sendRedirect( redirect );
+ return;
+ }
+
+ StopWatch sw = new StopWatch();
+ sw.start();
+ WatchDog w = wiki.getCurrentWatchDog();
+ try {
+ w.enterState("Generating VIEW response for "+wikiContext.getPage(),60);
+
+ // 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%>" /><%
+ }
+ finally
+ {
+ sw.stop();
+ if( log.isDebugEnabled() ) log.debug("Total response time from server on page "+pagereq+": "+sw);
+ w.exitState();
+ }
+%>
+
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Workflow.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Workflow.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Workflow.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/Workflow.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,94 @@
+<%@ page import="java.util.Collection" %>
+<%@ page import="java.util.Iterator" %>
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="com.ecyrd.jspwiki.WikiContext" %>
+<%@ page import="com.ecyrd.jspwiki.WikiSession" %>
+<%@ page import="com.ecyrd.jspwiki.WikiEngine" %>
+<%@ page import="com.ecyrd.jspwiki.workflow.Decision" %>
+<%@ page import="com.ecyrd.jspwiki.workflow.DecisionQueue" %>
+<%@ page import="com.ecyrd.jspwiki.workflow.NoSuchOutcomeException" %>
+<%@ page import="com.ecyrd.jspwiki.workflow.Outcome" %>
+<%@ page import="com.ecyrd.jspwiki.workflow.Workflow" %>
+<%@ page errorPage="/Error.jsp" %>
+<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
+
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%>
+
+<%
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, WikiContext.WORKFLOW );
+ if(!wikiContext.hasAccess( response )) return;
+
+ // Extract the wiki session
+ WikiSession wikiSession = wikiContext.getWikiSession();
+
+ // Get the current decisions
+ DecisionQueue dq = wiki.getWorkflowManager().getDecisionQueue();
+
+ if( "decide".equals(request.getParameter("action")) )
+ {
+ try
+ {
+ // Extract parameters for decision ID & decision outcome
+ int id = Integer.parseInt( request.getParameter( "id" ) );
+ String outcomeKey = request.getParameter("outcome");
+ Outcome outcome = Outcome.forName( outcomeKey );
+ // Iterate through our actor decisions and see if we can find an ID match
+ Collection decisions = dq.getActorDecisions(wikiSession);
+ for (Iterator it = decisions.iterator(); it.hasNext();)
+ {
+ Decision d = (Decision)it.next();
+ if (d.getId() == id)
+ {
+ // Cool, we found it. Now make the decision.
+ dq.decide(d, outcome);
+ }
+ }
+ }
+ catch ( NumberFormatException e )
+ {
+ log.warn("Could not parse integer from parameter 'decision'. Somebody is being naughty.");
+ }
+ catch ( NoSuchOutcomeException e )
+ {
+ log.warn("Could not look up Outcome from parameter 'outcome'. Somebody is being naughty.");
+ }
+ }
+ if( "abort".equals(request.getParameter("action")) )
+ {
+ try
+ {
+ // Extract parameters for decision ID & decision outcome
+ int id = Integer.parseInt( request.getParameter( "id" ) );
+ // Iterate through our owner decisions and see if we can find an ID match
+ Collection workflows = wiki.getWorkflowManager().getOwnerWorkflows(wikiSession);
+ for (Iterator it = workflows.iterator(); it.hasNext();)
+ {
+ Workflow w = (Workflow)it.next();
+ if (w.getId() == id)
+ {
+ // Cool, we found it. Now kill the workflow.
+ w.abort();
+ }
+ }
+ }
+ catch ( NumberFormatException e )
+ {
+ log.warn("Could not parse integer from parameter 'decision'. Somebody is being naughty.");
+ }
+ }
+
+ // Stash the current decisions/workflows
+ request.setAttribute("decisions", dq.getActorDecisions(wikiSession));
+ request.setAttribute("workflows", wiki.getWorkflowManager().getOwnerWorkflows(wikiSession));
+ request.setAttribute("wikiSession", wikiSession);
+
+ response.setContentType("text/html; charset="+wiki.getContentEncoding() );
+ String contentPage = wiki.getTemplateManager().findJSP( pageContext,
+ wikiContext.getTemplate(),
+ "ViewTemplate.jsp" );
+%><wiki:Include page="<%=contentPage%>" />
+
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/atom.css
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/atom.css?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/atom.css (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/atom.css Tue Feb 12 22:15:47 2008
@@ -0,0 +1,82 @@
+feed {
+ display:block;
+ font-family:verdana, sans-serif;
+ margin:2%;
+ font-size:90%;
+ color:#000000;
+ background:#ffffff;
+}
+
+title {
+ display:block;
+ font-size:1.3em;
+ color:inherit;
+ background:inherit;
+ font-weight:bold;
+}
+
+tagline, link {
+ display:block;
+ font-size:0.9em;
+}
+
+id, modified {
+ display:none;
+}
+
+generator {
+ display:block;
+ font-size:0.9em;
+}
+
+info {
+ display:block;
+ margin:3em 4em 3em 4em;
+ color:#CC3333;
+ background:#FFFF66;
+ border:solid #CCCC66 2px;
+ text-align:center;
+ padding:1.5em;
+ font-family:mono;
+ font-size:0.8em;
+}
+
+entry {
+ display:block;
+ color:inherit;
+ background:inherit;
+ padding:0;
+ margin:1em 1em 4em 1em;
+
+}
+
+entry modified, entry name {
+ display:inline;
+ color:#999999;
+ background:inherit;
+ font-size:0.8em;
+}
+
+entry created, entry issued, entry id {
+ display:none;
+}
+
+entry title {
+ display:block;
+ font-size:1em;
+ font-weight:bold;
+ color:inherit;
+ background:inherit;
+ padding:1em 1em 0em 1em;
+ margin:0;
+ border-top:solid 1px #dddddd;
+}
+
+content {
+ display:block;
+ font-size:0.9em;
+ color:inherit;
+ background:inherit;
+ padding:1em;
+ line-height:1.5em;
+}
\ No newline at end of file
Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/rss.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/rss.jsp?rev=627262&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/rss.jsp (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/src/webdocs/rss.jsp Tue Feb 12 22:15:47 2008
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<%@ page import="java.util.*,com.ecyrd.jspwiki.*" %>
+<%@ page import="org.apache.log4j.*" %>
+<%@ page import="java.text.*" %>
+<%@ page import="com.ecyrd.jspwiki.rss.*" %>
+<%@ page import="com.ecyrd.jspwiki.util.*" %>
+<%@ taglib uri="/WEB-INF/oscache.tld" prefix="oscache" %>
+
+<%!
+ Logger log = Logger.getLogger("JSPWiki");
+%>
+
+<%
+ WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
+ // Create wiki context and check for authorization
+ WikiContext wikiContext = wiki.createContext( request, "rss" );
+ if(!wikiContext.hasAccess( response )) return;
+ WikiPage wikipage = wikiContext.getPage();
+
+ // Redirect if baseURL not set or RSS generation not on
+ if( wiki.getBaseURL().length() == 0 )
+ {
+ response.sendError( 500, "The jspwiki.baseURL property has not been defined for this wiki - cannot generate RSS" );
+ return;
+ }
+
+ if( wiki.getRSSGenerator() == null )
+ {
+ response.sendError( 404, "RSS feeds are disabled at administrator request" );
+ return;
+ }
+
+ if( wikipage == null || !wiki.pageExists(wikipage.getName()) )
+ {
+ response.sendError( 404, "No such page "+wikipage.getName() );
+ return;
+ }
+
+ WatchDog w = wiki.getCurrentWatchDog();
+ w.enterState("Generating RSS",60);
+
+ // Set the mode and type for the feed
+ String mode = request.getParameter("mode");
+ String type = request.getParameter("type");
+
+ if( mode == null || !(mode.equals(RSSGenerator.MODE_BLOG) || mode.equals(RSSGenerator.MODE_WIKI)) )
+ mode = RSSGenerator.MODE_BLOG;
+ if( type == null || !(type.equals(RSSGenerator.RSS10) || type.equals(RSSGenerator.RSS20) || type.equals(RSSGenerator.ATOM)) )
+ type = RSSGenerator.RSS20;
+
+ // Force the TranslatorReader to output absolute URLs
+ // regardless of the current settings.
+ wikiContext.setVariable( WikiEngine.PROP_REFSTYLE, "absolute" );
+
+ // Set the content type and include the response content
+ response.setContentType( RSSGenerator.getContentType(type)+"; charset=UTF-8");
+
+ StringBuffer result = new StringBuffer();
+ SimpleDateFormat iso8601fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+
+ Properties properties = wiki.getWikiProperties();
+ String channelDescription = wiki.getRequiredProperty( properties, RSSGenerator.PROP_CHANNEL_DESCRIPTION );
+ String channelLanguage = wiki.getRequiredProperty( properties, RSSGenerator.PROP_CHANNEL_LANGUAGE );
+
+ //
+ // Now, list items.
+ //
+ List changed;
+
+ if( mode.equals("blog") )
+ {
+ com.ecyrd.jspwiki.plugin.WeblogPlugin plug = new com.ecyrd.jspwiki.plugin.WeblogPlugin();
+ changed = plug.findBlogEntries(wiki.getPageManager(),
+ wikipage.getName(),
+ new Date(0L),
+ new Date());
+ }
+ else
+ {
+ changed = wiki.getVersionHistory( wikipage.getName() );
+ }
+
+ //
+ // Check if nothing has changed, so we can just return a 304
+ //
+ boolean hasChanged = false;
+ Date latest = new Date(0);
+
+ for( Iterator i = changed.iterator(); i.hasNext(); )
+ {
+ WikiPage p = (WikiPage) i.next();
+
+ if( !HttpUtil.checkFor304( request, p ) ) hasChanged = true;
+ if( p.getLastModified().after( latest ) ) latest = p.getLastModified();
+ }
+
+ if( !hasChanged && changed.size() > 0 )
+ {
+ response.sendError( HttpServletResponse.SC_NOT_MODIFIED );
+ w.exitState();
+ return;
+ }
+
+ response.addDateHeader("Last-Modified",latest.getTime());
+ response.addHeader("ETag", HttpUtil.createETag(wikipage) );
+%>
+<%-- <oscache:cache time="300"> --%>
+<%
+ out.println(wiki.getRSSGenerator().generateFeed( wikiContext, changed, mode, type ));
+%>
+<%-- </oscache:cache> --%>
+<% w.exitState(); %>