You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/06/08 18:06:46 UTC
svn commit: r189602 [23/50] - in /incubator/roller/trunk: ./ contrib/
contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/
contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/
contrib/plugins/src/org/roller/presentation/velocity/
contrib/plugins/src/org/roller/presentation/velocity/plugins/
contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/
contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/
contrib/plugins/src/org/roller/presentation/velocity/plugins/email/
contrib/plugins/src/org/roller/presentation/velocity/plugins/jspwiki/
contrib/plugins/src/org/roller/presentation/velocity/plugins/radeox/
contrib/plugins/src/org/roller/presentation/velocity/plugins/readmore/
contrib/plugins/src/org/roller/presentation/velocity/plugins/smileys/
contrib/plugins/src/org/roller/presentation/velocity/plugins/textile/ docs/
docs/images/ docs/installguide/ docs/installguide/old/ docs/userguide/
docs/userguide/images/ docs/userguide/old/ metadata/ metadata/database/
metadata/database/hibernate/ metadata/xdoclet/ personal/ personal/eclipse/
personal/testing/ src/ src/org/ src/org/roller/ src/org/roller/business/
src/org/roller/business/hibernate/ src/org/roller/business/utils/
src/org/roller/model/ src/org/roller/pojos/ src/org/roller/presentation/
src/org/roller/presentation/atom/ src/org/roller/presentation/bookmarks/
src/org/roller/presentation/bookmarks/actions/
src/org/roller/presentation/bookmarks/formbeans/
src/org/roller/presentation/bookmarks/tags/
src/org/roller/presentation/filters/ src/org/roller/presentation/forms/
src/org/roller/presentation/newsfeeds/ src/org/roller/presentation/pagecache/
src/org/roller/presentation/pagecache/rollercache/
src/org/roller/presentation/tags/ src/org/roller/presentation/tags/calendar/
src/org/roller/presentation/tags/menu/
src/org/roller/presentation/velocity/ src/org/roller/presentation/weblog/
src/org/roller/presentation/weblog/actions/
src/org/roller/presentation/weblog/formbeans/
src/org/roller/presentation/weblog/search/
src/org/roller/presentation/weblog/search/operations/
src/org/roller/presentation/weblog/tags/ src/org/roller/presentation/website/
src/org/roller/presentation/website/actions/
src/org/roller/presentation/website/formbeans/
src/org/roller/presentation/website/tags/
src/org/roller/presentation/xmlrpc/ src/org/roller/util/ tests/ tests/org/
tests/org/roller/ tests/org/roller/business/ tests/org/roller/model/
tests/org/roller/persistence/ tests/org/roller/presentation/
tests/org/roller/presentation/atom/ tests/org/roller/presentation/bookmarks/
tests/org/roller/presentation/velocity/
tests/org/roller/presentation/velocity/plugins/
tests/org/roller/presentation/velocity/plugins/smileys/
tests/org/roller/presentation/velocity/plugins/textile/
tests/org/roller/presentation/xmlrpc/ tests/org/roller/util/ tools/
tools/buildtime/ tools/buildtime/mockrunner-0.2.6/
tools/buildtime/mockrunner-0.2.6/lib/ tools/buildtime/tomcat-4.1.24/
tools/buildtime/xdoclet-1.2/ tools/buildtime/xdoclet-1.2/lib/
tools/hibernate-2.1/ tools/hibernate-2.1/lib/ tools/lib/
tools/standard-1.0.3/ tools/standard-1.0.3/lib/ tools/standard-1.0.3/tld/
tools/struts-1.1/ tools/struts-1.1/lib/ web/ web/WEB-INF/
web/WEB-INF/classes/ web/WEB-INF/classes/flavors/
web/WEB-INF/classes/themes/ web/bookmarks/ web/images/ web/images/editor/
web/images/midas/ web/images/preview/ web/images/smileys/ web/tags/
web/templates/ web/theme/ web/theme/images/ web/theme/lavender/
web/theme/scripts/ web/theme/scripts/classes/ web/themes/ web/themes/basic/
web/themes/berkley/ web/themes/berkley/images/ web/themes/cheb/
web/themes/cheb/images/ web/themes/cheb/scripts/ web/themes/clean/
web/themes/currency-i18n/ web/themes/currency-i18n/images/
web/themes/currency/ web/themes/currency/images/ web/themes/grey2/
web/themes/moonshine/ web/themes/pacifica/ web/themes/robot/
web/themes/rolling/ web/themes/rolling/images/ web/themes/sotto/
web/themes/sotto/images/ web/themes/sotto/styles/ web/themes/sunsets/
web/themes/sunsets/images/ web/themes/sunsets/scripts/
web/themes/sunsets/styles/ web/themes/werner/ web/themes/x2/
web/themes/x2/images/ web/themes/x2/scripts/ web/themes/x2/styles/
web/weblog/ web/website/
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/TrackbackServlet.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/TrackbackServlet.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/TrackbackServlet.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/TrackbackServlet.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,164 @@
+/*
+ * Created on Apr 13, 2003
+ */
+package org.roller.presentation.weblog;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.RollerRequest;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Roller's Trackback server implementation. POSTing to this Servlet will add a
+ * Trackback to a Weblog Entrty. For more info on Trackback, read the spec:
+ * <a href="http://www.movabletype.org/docs/mttrackback.html>MT Trackback</a>.
+ *
+ * @web.servlet name="TrackbackServlet"
+ * @web.servlet-mapping url-pattern="/trackback/*"
+ *
+ * @author David M Johnson
+ */
+public class TrackbackServlet extends HttpServlet
+{
+ /** Request parameter to indicate a trackback "tb" */
+ private static final String TRACKBACK_PARAM = "tb";
+
+ /** Request parameter for the trackback "title" */
+ private static final String TRACKBACK_TITLE_PARAM = "title";
+
+ /** Request parameter for the trackback "excerpt" */
+ private static final String TRACKBACK_EXCERPT_PARAM = "excerpt";
+
+ /** Request parameter for the trackback "url" */
+ private static final String TRACKBACK_URL_PARAM = "url";
+
+ /** Request parameter for the trackback "blog_name" */
+ private static final String TRACKBACK_BLOG_NAME_PARAM = "blog_name";
+
+ /** Key under which the trackback return code will be placed
+ * (example: on the request for the JSPDispatcher) */
+ public static final String BLOJSOM_TRACKBACK_RETURN_CODE =
+ "BLOJSOM_TRACKBACK_RETURN_CODE";
+
+ /** Key under which the trackback error message will be placed
+ * (example: on the request for the JSPDispatcher) */
+ public static final String BLOJSOM_TRACKBACK_MESSAGE =
+ "BLOJSOM_TRACKBACK_MESSAGE";
+
+ /** Trackback success page */
+ private static final String TRACKBACK_SUCCESS_PAGE = "trackback-success";
+
+ /** Trackback failure page */
+ private static final String TRACKBACK_FAILURE_PAGE = "trackback-failure";
+
+ /**
+ * Constructor.
+ */
+ public TrackbackServlet()
+ {
+ super();
+ }
+
+ /**
+ * POSTing to this Servlet will add a Trackback to a Weblog Entrty.
+ */
+ protected void doGet(HttpServletRequest req, HttpServletResponse res)
+ throws ServletException, IOException
+ {
+ doPost(req,res);
+ }
+
+ /**
+ * POSTing to this Servlet will add a Trackback to a Weblog Entrty.
+ */
+ protected void doPost(HttpServletRequest req, HttpServletResponse res)
+ throws ServletException, IOException
+ {
+ String url = req.getParameter(TRACKBACK_URL_PARAM);
+ String title = req.getParameter(TRACKBACK_TITLE_PARAM);
+ String excerpt = req.getParameter(TRACKBACK_EXCERPT_PARAM);
+ String blogName = req.getParameter(TRACKBACK_BLOG_NAME_PARAM);
+
+ if ((title == null) || "".equals(title))
+ {
+ title = url;
+ }
+
+ if (excerpt == null)
+ {
+ excerpt = "";
+ }
+ else
+ {
+ if (excerpt.length() >= 255)
+ {
+ excerpt = excerpt.substring(0, 252);
+ excerpt += "...";
+ }
+ }
+
+ String error = null;
+ PrintWriter pw = new PrintWriter(res.getOutputStream());
+ try
+ {
+ if ( title==null || url==null || excerpt==null || blogName==null )
+ {
+ error = "title, url, excerpt, and blog_name not specified.";
+ }
+ else
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ WeblogEntryData entry = rreq.getWeblogEntry();
+
+ if (entry!=null && entry.getCommentsStillAllowed())
+ {
+ entry.addTrackback(url,title,excerpt,blogName);
+ rreq.getRoller().commit();
+
+ pw.println("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>");
+ pw.println("<response>");
+ pw.println("<error>0</error>");
+ pw.println("</response>");
+ pw.flush();
+ }
+ else if (entry!=null)
+ {
+ error = "Comments and Trackbacks are disabled for the entry you specified.";
+ }
+ else
+ {
+ error = "Entry not specified.";
+ }
+ }
+
+ }
+ catch (Exception e)
+ {
+ error = e.getMessage();
+ if ( error == null )
+ {
+ error = e.getClass().getName();
+ }
+ }
+
+ if ( error!= null )
+ {
+ pw.println("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>");
+ pw.println("<response>");
+ pw.println("<error>1</error>");
+ pw.println("<message>ERROR: "+error+"</message>");
+ pw.println("</response>");
+ pw.flush();
+ }
+ res.flushBuffer();
+ }
+}
\ No newline at end of file
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/BakeWeblogAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/BakeWeblogAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/BakeWeblogAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/BakeWeblogAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,251 @@
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.actions.DispatchAction;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.roller.RollerException;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.PageData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.RollerSession;
+import org.roller.presentation.velocity.ContextLoader;
+import org.roller.presentation.weblog.tags.WeblogEntryMacros;
+import org.roller.util.DateUtil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringWriter;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspFactory;
+import javax.servlet.jsp.PageContext;
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Generates static pages for each day containing Weblog entries.
+ * @struts.action name="bakeWeblogForm" path="/bake" scope="session"
+ * parameter="method"
+ *
+ * @author llavandowska
+ */
+public class BakeWeblogAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(BakeWeblogAction.class);
+
+ public ActionForward load(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ try {
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ return mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ return mapping.findForward("access-denied");
+ }
+ return mapping.findForward("baking.done");
+ }
+
+ public ActionForward bake(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("baking.done");
+ ActionErrors errors = new ActionErrors();
+ try
+ {
+ PageContext pageContext =
+ JspFactory.getDefaultFactory().getPageContext(
+ this.getServlet(), request, response,"", true, 8192, true);
+ RollerRequest rreq = RollerRequest.getRollerRequest(pageContext);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ return mapping.findForward("access-denied");
+ }
+
+ String pid = getDefaultPageId( rreq );
+
+ VelocityContext context = new VelocityContext();
+ ContextLoader.setupContext( context, rreq, response );
+
+ // Get this months Entries
+ WeblogManager mgr = rreq.getRoller().getWeblogManager();
+ //Map entryMap = mgr.getWeblogEntryMonthMap(
+ //rreq.getUser().getUserName(),
+ //rreq.getDate(true),
+ //null,
+ //false,
+ //true );
+
+ Map entryMap = mgr.getWeblogEntryObjectMap(
+ rreq.getWebsite(),
+ null, // startDate
+ rreq.getDate(true), // endDate
+ null, // catName
+ WeblogManager.PUB_ONLY, // status
+ null); // maxEntries
+
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("Num Days to Bake: " + entryMap.size());
+ }
+
+ Iterator iter = entryMap.keySet().iterator();
+ if (iter.hasNext())
+ {
+ Date d = (Date)iter.next();
+
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("Bake Weblog for date:" + d);
+ }
+
+ // Do we need this to continue supporting Macros?
+ WeblogEntryMacros macros =
+ new WeblogEntryMacros( rreq.getPageContext(), d );
+ context.put( "macros", macros );
+
+ List entries = (List) entryMap.get( d );
+ String content = transformTemplate(pid, entries, context, rreq);
+
+ String fileName = writeToFile(content, d, rreq);
+ request.getSession().setAttribute(
+ RollerSession.STATUS_MESSAGE,
+ "Weblog baked to :" + fileName);
+ }
+
+ /** put some user message **/
+ String message = (String) request.getSession().getAttribute(
+ RollerSession.STATUS_MESSAGE);
+ if (message == null) message = "No Files Written";
+ request.getSession().setAttribute(
+ RollerSession.STATUS_MESSAGE,
+ message);
+ }
+ catch (Exception e)
+ {
+ forward = mapping.findForward("error");
+
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.bake.weblog", e.toString()));
+ saveErrors(request,errors);
+
+ mLogger.error(getResources(request).getMessage("error.bake.weblog")
+ + e.toString(),e);
+ }
+
+ return forward;
+ }
+
+ /**
+ * Write the content generated by transformTemplate to a file in the Upload
+ * directory, where the user can reach it.
+ *
+ * @param content
+ * @param d
+ * @param rreq
+ */
+ private String writeToFile(String content, Date d, RollerRequest rreq)
+ throws IOException
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("Write file for:" + d);
+ }
+
+ String dir = RollerContext.getUploadDir( rreq.getServletContext() );
+ String username = rreq.getUser().getUserName();
+ File dirF = new File(dir + username + File.separator + "baked");
+ if (!dirF.exists())
+ {
+ dirF.mkdirs();
+ }
+
+ SimpleDateFormat mFmt = DateUtil.get8charDateFormat();
+ String dString = mFmt.format( d ) + ".html";
+ File pFile = new File(dirF, dString);
+
+ OutputStream bos = new FileOutputStream(pFile);
+ bos.write( content.getBytes() );
+ bos.close();
+
+ return pFile.getName();
+ }
+
+ /**
+ * Transform the Page specified by the pageId using Velocity. Return the
+ * resulting String.
+ *
+ * @param pid
+ * @param context
+ * @throws ResourceNotFoundException
+ * @throws ParseErrorException
+ * @throws MethodInvocationException
+ * @throws Exception
+ */
+ private String transformTemplate(String pid, List entries,
+ VelocityContext context, RollerRequest rreq)
+ throws
+ ResourceNotFoundException,
+ ParseErrorException,
+ MethodInvocationException,
+ Exception
+ {
+
+ context.put( "entries", entries );
+
+ StringWriter sw = new StringWriter();
+ Velocity.mergeTemplate(pid, Velocity.ENCODING_DEFAULT, context, sw );
+ return sw.toString();
+ }
+
+ /**
+ * Get the default pageId for this Website, this is assumed to be the Weblog
+ * page since we have no other way of declaring it.
+ *
+ * @param rreq
+ * @return String
+ * @throws RollerException
+ */
+ private String getDefaultPageId(RollerRequest rreq) throws RollerException
+ {
+ UserManager userMgr = rreq.getRoller().getUserManager();
+ WebsiteData wd = rreq.getWebsite();
+ PageData pd = userMgr.retrievePage(wd.getDefaultPageId());
+ return pd.getId();
+ }
+
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoriesAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,196 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.CategoriesForm;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.TreeSet;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Actions that are initiated from the CategoriesForm.
+ *
+ * @struts.action name="categoriesForm" path="/categories" parameter="method"
+ * @struts.action-forward name="CategoriesForm" path="/weblog/CategoriesForm.jsp"
+ *
+ * @author Dave Johnson
+ */
+public class CategoriesAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(CategoriesAction.class);
+
+ /**
+ * Present the CategoriesForm loaded with category specified by request.
+ * @param mapping Action mapping.
+ * @param actionForm Form bean.
+ * @param request Request.
+ * @param response Response.
+ * @return Forward to CategoriesForm or access-denied.
+ * @throws RollerException
+ */
+ public ActionForward selectCategory(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws RollerException
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if (rreq.isUserAuthorizedToEdit())
+ {
+ addModelObjects(request, (CategoriesForm)actionForm);
+ return mapping.findForward("CategoriesForm");
+ }
+ else
+ {
+ return mapping.findForward("access-denied");
+ }
+ }
+
+ /**
+ * Move Categories and bookmarks indicated by CategoriesForm bean.
+ * @param mapping Action mapping.
+ * @param actionForm Form bean.
+ * @param request Request.
+ * @param response Response.
+ * @return Forward to CategoriesForm or access-denied.
+ * @throws RollerException
+ */
+ public ActionForward moveSelected(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws RollerException
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if (rreq.isUserAuthorizedToEdit())
+ {
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+ CategoriesForm form = (CategoriesForm)actionForm;
+
+ mLogger.debug("Moving categories to category, id="
+ + form.getMoveToCategoryId());
+
+ // Move subCategories to new category.
+ String Categories[] = form.getSelectedCategories();
+ WeblogCategoryData parent = wmgr.retrieveWeblogCategory(form.getMoveToCategoryId());
+ if (null != Categories)
+ {
+ for (int i = 0; i < Categories.length; i++)
+ {
+ WeblogCategoryData cd = wmgr.retrieveWeblogCategory(Categories[i]);
+
+ // Don't move category into itself.
+ if (!cd.getId().equals(parent.getId()))
+ {
+ cd.setParent(parent);
+ cd.save();
+ }
+ }
+ }
+
+ rreq.getRoller().commit();
+
+ addModelObjects(request, (CategoriesForm)actionForm);
+ return mapping.findForward("CategoriesForm");
+ }
+ else
+ {
+ return mapping.findForward("access-denied");
+ }
+ }
+
+ /**
+ * Load model objects for display in CategoriesForm.
+ * @param request
+ * @throws RollerException
+ */
+ private void addModelObjects(HttpServletRequest request, CategoriesForm form)
+ throws RollerException
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WebsiteData wd = rreq.getWebsite();
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+
+ TreeSet allCategories = new TreeSet(new Comparator() {
+ public int compare(Object o1, Object o2) {
+ WeblogCategoryData f1 = (WeblogCategoryData)o1;
+ WeblogCategoryData f2 = (WeblogCategoryData)o2;
+ return f1.getPath().compareTo(f2.getPath());
+ }
+ });
+
+ // Find catid wherever it may be
+ String catId = (String)request.getAttribute(RollerRequest.WEBLOGCATEGORYID_KEY);
+ if (null == catId)
+ {
+ catId = request.getParameter(RollerRequest.WEBLOGCATEGORYID_KEY);
+ }
+ if (null == catId)
+ {
+ catId = form.getId();
+ }
+
+ WeblogCategoryData cat = null;
+ if (null == catId || catId.equals("null"))
+ {
+ cat = wmgr.getRootWeblogCategory(wd);
+ }
+ else
+ {
+ cat = wmgr.retrieveWeblogCategory(catId);
+ }
+ form.setId(cat.getId());
+
+ request.setAttribute("category", cat);
+ request.setAttribute("categories", cat.getWeblogCategories());
+
+ if (null != cat.getParent())
+ {
+ LinkedList catPath = new LinkedList();
+ catPath.add(0, cat);
+ WeblogCategoryData parent = cat.getParent();
+ while (parent != null)
+ {
+ catPath.add(0, parent);
+ parent = parent.getParent();
+ }
+ request.setAttribute("categoryPath", catPath);
+
+ request.setAttribute(
+ RollerRequest.PARENTID_KEY, cat.getParent().getId());
+ }
+
+ // Build collection of all Categories, except for current one,
+ // sorted by path.
+ Iterator iter = wmgr.getWeblogCategories(wd).iterator();
+ while (iter.hasNext())
+ {
+ WeblogCategoryData cd = (WeblogCategoryData) iter.next();
+ if (!cd.getId().equals(catId))
+ {
+ allCategories.add(cd);
+ }
+ }
+ request.setAttribute("allCategories", allCategories);
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryDeleteAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,128 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.CategoryDeleteForm;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action path="/categoryDelete" name="categoryDeleteForm"
+ * @struts.action-forward name="Categories" path="/categories.do?method=selectCategory"
+ * @struts.action-forward name="CategoryDeleteOK" path="/weblog/CategoryDeleteOK.jsp"
+ *
+ * @author Dave Johnson
+ */
+public class CategoryDeleteAction extends Action
+{
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ ActionForward forward = null;
+ CategoryDeleteForm form = (CategoryDeleteForm)actionForm;
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+
+ if (rreq.isUserAuthorizedToEdit())
+ {
+ String catid = request.getParameter("catid");
+ WeblogCategoryData catToDelete =
+ wmgr.retrieveWeblogCategory(catid);
+ String returnId = null;
+ if (catToDelete.getParent() != null)
+ {
+ returnId = catToDelete.getParent().getId();
+ }
+ if (form.isDelete() == null)
+ {
+ // Present CategoryDeleteOK? page to user
+ WebsiteData website = rreq.getWebsite();
+ WeblogCategoryData theCat = wmgr.retrieveWeblogCategory(catid);
+ Iterator allCats =
+ wmgr.getWeblogCategories(website).iterator();
+ List destCats = new LinkedList();
+ while (allCats.hasNext())
+ {
+ WeblogCategoryData cat = (WeblogCategoryData)allCats.next();
+ if (cat.getId() != catid)
+ {
+ destCats.add(cat);
+ }
+ }
+ if (destCats.size() > 0)
+ {
+ form.setName(theCat.getName());
+ form.setCatid(catid);
+ form.setCats(destCats);
+ form.setInUse(new Boolean(catToDelete.isInUse()));
+ forward = mapping.findForward("CategoryDeleteOK");
+ }
+ else
+ {
+ // Can't delete last category, send 'em back!
+ if (null != returnId)
+ {
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, returnId);
+ }
+ forward = mapping.findForward("Categories");
+ }
+ }
+ else if (form.isDelete().booleanValue())
+ {
+ // User clicked YES to delete
+ WeblogCategoryData destCat = null;
+ if (form.getMoveToWeblogCategoryId() != null)
+ {
+ destCat = wmgr.retrieveWeblogCategory(form.getMoveToWeblogCategoryId());
+ }
+
+ // move entries to destCat and remove catToDelete
+ catToDelete.remove(destCat);
+
+ rreq.getRoller().commit();
+
+ if (null != returnId)
+ {
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, returnId);
+ }
+ forward = mapping.findForward("Categories");
+ }
+ else
+ {
+ // User clicked NO to delete, do back to categories form
+ if (null != returnId)
+ {
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, returnId);
+ }
+ forward = mapping.findForward("Categories");
+ }
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ return forward;
+ }
+
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategoryEditAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,93 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.WeblogCategoryFormEx;
+
+import java.util.LinkedList;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action path="/categoryEdit" name="weblogCategoryFormEx" validate="false"
+ * @struts.action-forward name="CategoryForm" path="/weblog/CategoryForm.jsp"
+ *
+ * @author Dave Johnson
+ */
+public class CategoryEditAction extends Action
+{
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WebsiteData wd = rreq.getWebsite();
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+ WeblogCategoryFormEx form = (WeblogCategoryFormEx)actionForm;
+
+ WeblogCategoryData parentCat = null;
+ if (null!=rreq.getWeblogCategory() && null==request.getParameter("correct"))
+ {
+ // If request specifies Category and we are not correcting an
+ // already submitted form then load that Category into the form.
+ WeblogCategoryData cd = rreq.getWeblogCategory();
+ form.copyFrom(cd, request.getLocale());
+ request.setAttribute("state","edit");
+
+ // Pass Category's parent id on as attribute.
+ parentCat = cd.getParent();
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, parentCat.getId());
+ }
+ else if (null != request.getParameter("correct"))
+ {
+ // We are correcting a previously submtted form.
+ request.setAttribute("state","correcting");
+
+ // Cat is specified by request param, pass it on as attribute.
+ parentCat = wmgr.retrieveWeblogCategory(rreq.getWeblogCategory().getId());
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, parentCat.getId());
+ }
+ else
+ {
+ // We are adding a new Category
+ request.setAttribute("state","add");
+
+ // Cat is specified by request param, pass it on as attribute.
+ String parentId = request.getParameter(RollerRequest.PARENTID_KEY);
+ form.setParentId(parentId);
+ }
+
+ // Build cat path for display on page
+ if (null != parentCat)
+ {
+ LinkedList categoryPath = new LinkedList();
+ categoryPath.add(0, parentCat);
+ WeblogCategoryData parent = parentCat.getParent();
+ while (parent != null)
+ {
+ categoryPath.add(0, parent);
+ parent = parent.getParent();
+ }
+ request.setAttribute("parentCategory", parentCat);
+ request.setAttribute("categoryPath", categoryPath);
+ }
+
+ return mapping.findForward("CategoryForm");
+ }
+
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CategorySaveAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,60 @@
+/*
+ * Created on Oct 21, 2003
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.weblog.formbeans.WeblogCategoryFormEx;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action path="/categorySave" name="weblogCategoryFormEx"
+ * validate="true" input="/categoryEdit.do"
+ * @struts.action-forward name="Categories" path="/categories.do?method=selectCategory"
+ *
+ * @author Dave Johnson
+ */
+public class CategorySaveAction extends Action
+{
+ public ActionForward execute(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ WeblogCategoryFormEx form = (WeblogCategoryFormEx)actionForm;
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogManager wmgr = rreq.getRoller().getWeblogManager();
+
+ WeblogCategoryData cd = null;
+ if (null != form.getId() && !form.getId().trim().equals(""))
+ {
+ cd = wmgr.retrieveWeblogCategory(form.getId());
+ }
+ else
+ {
+ cd = wmgr.createWeblogCategory();
+ cd.setWebsite(rreq.getWebsite());
+
+ String parentId = form.getParentId();
+ cd.setParent(wmgr.retrieveWeblogCategory(parentId));
+ }
+ form.copyTo(cd, request.getLocale());
+ cd.save();
+ rreq.getRoller().commit();
+
+ request.setAttribute(
+ RollerRequest.WEBLOGCATEGORYID_KEY, cd.getParent().getId());
+ return mapping.findForward("Categories");
+ }
+
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CommentFormAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CommentFormAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CommentFormAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/CommentFormAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,585 @@
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.actions.DispatchAction;
+import org.apache.struts.util.MessageResources;
+import org.apache.struts.util.RequestUtils;
+import org.roller.RollerException;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.CommentData;
+import org.roller.pojos.PageData;
+import org.roller.pojos.RollerConfig;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.LanguageUtil;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCache;
+import org.roller.presentation.weblog.formbeans.CommentFormEx;
+import org.roller.presentation.weblog.search.IndexManager;
+import org.roller.presentation.weblog.search.operations.AddEntryOperation;
+import org.roller.presentation.weblog.search.operations.RemoveEntryOperation;
+import org.roller.util.CommentSpamChecker;
+import org.roller.util.MailUtil;
+import org.roller.util.StringUtils;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/////////////////////////////////////////////////////////////////////////////
+/**
+ * Comment form action supports displaying, posting, previewing, and
+ * deleting comments.
+ *
+ * @struts.action name="commentFormEx" path="/comment"
+ * scope="session" parameter="method"
+ */
+public class CommentFormAction extends DispatchAction
+{
+ private static final String COMMENT_SPAM_MSG =
+ "Your comment has been recognized as " +
+ "<a href='http://www.jayallen.org/projects/mt-blacklist/'>" +
+ "Comment Spam</a> and rejected.";
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(CommentFormAction.class);
+
+ //------------------------------------------------------------------------
+
+ /**
+ * Done.
+ */
+ public ActionForward done(ActionMapping mapping, ActionForm actionForm,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ return mapping.findForward("editWeblog");
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * load the comments for weblogEntryId into request attribute
+ **/
+ private void loadComments(
+ HttpServletRequest request,
+ String weblogEntryId,
+ WeblogManager mgr,
+ boolean noSpam)
+ throws RollerException
+ {
+ List comments = mgr.getComments( weblogEntryId, noSpam );
+ request.setAttribute("blogComments", comments);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Load comments and blog entry objects and forward to comment display
+ * edit page.
+ */
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("comment.page");
+ ActionErrors errors = new ActionErrors();
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ try
+ {
+ WeblogEntryData wd = rreq.getWeblogEntry();
+ if (wd == null || wd.getId() == null)
+ {
+ // this is likely to be a fraudulent attempt
+ throw new NullPointerException("Unable to find WeblogEntry for "+
+ request.getParameter(RollerRequest.WEBLOGENTRYID_KEY));
+ }
+ request.setAttribute("blogEntry", wd);
+
+ CommentFormEx cf = (CommentFormEx)actionForm;
+ cf.setWeblogEntry( wd );
+
+ WeblogManager mgr = rreq.getRoller().getWeblogManager();
+ loadComments(request, wd.getId(), mgr, true); // no spam
+ }
+ catch (Exception e)
+ {
+ forward = mapping.findForward("error");
+
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.edit.comment", e.toString()));
+ saveErrors(request,errors);
+
+ if (e instanceof NullPointerException)
+ {
+ // from a fraudulent attempt - lower logging level
+ mLogger.warn(getResources(request).getMessage("error.edit.comment")
+ + e.toString(),e);
+ }
+ else
+ {
+ mLogger.error(getResources(request).getMessage("error.edit.comment")
+ + e.toString(),e);
+ }
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Saves comment and forward to the comment-edit page.
+ */
+ public ActionForward update(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = null; // we'll compute this later
+
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ ActionErrors errors = new ActionErrors();
+
+ try
+ {
+ // Get weblog entry object, put in page context
+ WeblogEntryData wd = rreq.getWeblogEntry();
+ if (wd == null || wd.getId() == null)
+ {
+ throw new NullPointerException(
+ "Unable to find WeblogEntry for "+
+ request.getParameter(RollerRequest.WEBLOGENTRYID_KEY));
+ }
+ if ( !wd.getWebsite().getAllowComments().booleanValue() ) {
+ throw new ServletException("ERROR comments disabled by user");
+ }
+ request.setAttribute("blogEntry", wd);
+
+ // get the User to which the blog belongs
+ UserData user = rreq.getUser();
+
+ // Save comment
+ WeblogManager mgr = rreq.getRoller().getWeblogManager();
+ CommentFormEx cf = (CommentFormEx)actionForm;
+ CommentData cd = new CommentData();
+ cf.copyTo(cd, request.getLocale());
+ cd.setWeblogEntry(wd);
+ cd.setRemoteHost(request.getRemoteHost());
+
+ cd.setPostTime(new java.sql.Timestamp( System.currentTimeMillis()));
+ if (cd.getSpam() == null)
+ {
+ cd.setSpam(Boolean.FALSE);
+ }
+ cd.save();
+ rreq.getRoller().commit();
+
+ // check for spam
+ testCommentSpam(cd, request);
+ if (cd.getSpam().booleanValue())
+ {
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.update.comment", COMMENT_SPAM_MSG));
+ saveErrors(request,errors);
+ }
+ else
+ {
+ reindexEntry(wd);
+ }
+
+ // Refresh user's entries in page cache
+ PageCache.removeFromCache( request, user );
+
+ // Put array of comments in context
+ List comments = mgr.getComments( wd.getId() );
+ request.setAttribute("blogComments", comments);
+
+ // Remove the obsolete form bean
+ request.removeAttribute(mapping.getAttribute());
+
+ // MR: Added functionality to e-mail comments
+ sendEmailNotification(request, rreq, wd, cd, user, comments);
+
+ if ( request.getAttribute("updateFromPage")!=null )
+ {
+ forward = updateFromPageForward(request, rreq, wd, user);
+ }
+ else
+ {
+ forward = mapping.findForward("comment.page");
+ }
+
+ // Put array of comments in context
+ loadComments(request, wd.getId(), mgr, true); // no spam
+
+ cf.reset(mapping,request);
+ }
+ catch (Exception e)
+ {
+ forward = mapping.findForward("error");
+
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.update.comment", e.toString()));
+ saveErrors(request,errors);
+
+ mLogger.error(getResources(request)
+ .getMessage("error.update.comment") + e.toString(),e);
+ }
+ return forward;
+ }
+
+ /**
+ * Re-index the WeblogEntry so that the new comment gets indexed
+ * along with it.
+ *
+ * @param wd
+ */
+ private void reindexEntry(WeblogEntryData entry)
+ {
+ IndexManager manager =
+ RollerContext.getRollerContext(
+ RollerContext.getServletContext()).getIndexManager();
+
+ // remove entry before (re)adding it, or in case it isn't Published
+ RemoveEntryOperation removeOp = new RemoveEntryOperation(entry);
+ manager.executeIndexOperationNow(removeOp);
+
+ // if published, index the entry
+ if (entry.getPublishEntry() == Boolean.TRUE)
+ {
+ AddEntryOperation addEntry = new AddEntryOperation(entry);
+ manager.scheduleIndexOperation(addEntry);
+ }
+ }
+
+ private void sendEmailNotification(
+ HttpServletRequest request,
+ RollerRequest rreq,
+ WeblogEntryData wd,
+ CommentData cd,
+ UserData user,
+ List comments)
+ throws MalformedURLException
+ {
+ RollerContext rc = RollerContext.getRollerContext( request );
+ RollerConfig rollerConfig = rc.getRollerConfig();
+
+ MessageResources resources = getResources(request);
+ Locale viewLocale = LanguageUtil.getViewLocale(request);
+
+ UserManager userMgr = null;
+ WebsiteData site = null;
+ try
+ {
+ userMgr = RollerContext.getRoller(request).getUserManager();
+ site = userMgr.getWebsite(user.getUserName());
+ }
+ catch (RollerException re)
+ {
+ re.printStackTrace();
+ mLogger.error("Couldn't get UserManager from RollerContext", re.getRootCause());
+ }
+
+ // Send e-mail to owner (if enabled) and subscribed users
+ if ( rollerConfig.getEmailComments().booleanValue() &&
+ site.getEmailComments().booleanValue() )
+ {
+
+ String defaultFromEmail = (StringUtils.isEmpty(site.getEmailFromAddress())) ?
+ user.getEmailAddress() : site.getEmailFromAddress();
+
+ String from = (StringUtils.isEmpty(cd.getEmail()))
+ ? defaultFromEmail : cd.getEmail();
+
+ // get all the subscribers to this comment thread
+ ArrayList subscribers = new ArrayList();
+ for (Iterator it = comments.iterator(); it.hasNext();)
+ {
+ CommentData comment = (CommentData) it.next();
+ // only add the subscriber if they don't already exist
+ if ( ! StringUtils.isEmpty(comment.getEmail())
+ && ! subscribers.contains(comment.getEmail())
+ && ! StringUtils.equals(comment.getEmail(),
+ user.getEmailAddress()))
+ {
+ subscribers.add(comment.getEmail());
+ }
+ }
+
+ // There's got to be an easier way, but I'm in a hurry ;-)
+ String[] cc = new String[subscribers.size()];
+ for (int i = 0; i < subscribers.size(); i++)
+ {
+ cc[i] = (String) subscribers.get(i);
+ }
+
+ StringBuffer msg = new StringBuffer();
+
+ // determine with mime type to use for e-mail
+ boolean escapeHtml = rollerConfig.getEscapeCommentHtml().booleanValue();
+ if (!escapeHtml)
+ {
+ msg.append("<html><body style=\"background: white; ");
+ msg.append(" color: black; font-size: 12px\">");
+ }
+
+ if (!StringUtils.isEmpty(cd.getName()))
+ {
+ msg.append(cd.getName() + " " + resources.getMessage(viewLocale, "email.comment.wrote") + ": ");
+ }
+ else
+ {
+ msg.append(resources.getMessage(viewLocale, "email.comment.anonymous") + ": ");
+ }
+
+ msg.append((escapeHtml) ? "\n\n" : "<br /><br />");
+ msg.append(cd.getContent());
+ msg.append((escapeHtml) ? "\n\n----\n" :
+ "<br /><br /><hr /><span style=\"font-size: 11px\">");
+ msg.append(resources.getMessage(viewLocale, "email.comment.respond") + ": ");
+ msg.append((escapeHtml) ? "\n" : "<br />");
+
+ // build link back to comment
+ StringBuffer commentURL = new StringBuffer();
+ commentURL.append(RequestUtils.serverURL(request));
+ commentURL.append(request.getContextPath()+"/page/");
+ commentURL.append(rreq.getUser().getUserName());
+ PageData page = rreq.getPage();
+ if (page == null)
+ {
+ commentURL.append("?anchor=");
+ }
+ else
+ {
+ commentURL.append("/").append(page.getLink()).append("/");
+ }
+
+ commentURL.append(wd.getAnchor());
+
+ if (escapeHtml)
+ {
+ msg.append(commentURL.toString());
+ }
+ else
+ {
+ msg.append("<a href=\"" + commentURL + "\">" + commentURL + "</a></span>");
+ msg.append("</body></html>");
+ }
+
+ String subject = null;
+
+ if ( (subscribers.size() > 1) ||
+ (StringUtils.equals(cd.getEmail(), user.getEmailAddress()) ))
+ {
+ subject = "RE: " + resources.getMessage(viewLocale, "email.comment.title") + ": ";
+ }
+ else
+ {
+ subject = resources.getMessage(viewLocale, "email.comment.title") + ": ";
+ }
+
+ subject += wd.getTitle();
+
+ try
+ {
+ Context ctx = (Context)
+ new InitialContext().lookup("java:comp/env");
+ Session session = (Session) ctx.lookup("mail/Session");
+ if (escapeHtml)
+ {
+ // signifies plain text
+ // from, to, subject, content
+ MailUtil.sendTextMessage(session, from,
+ user.getEmailAddress(), cc,
+ subject, msg.toString());
+ }
+ else
+ {
+ MailUtil.sendHTMLMessage(session, from,
+ user.getEmailAddress(), cc,
+ subject, msg.toString());
+ }
+ }
+ catch (NamingException ne)
+ {
+ log.error("NamingException: " + ne.getMessage());
+ log.warn("Looking up mail session in JNDI failed!");
+ }
+ catch (MessagingException me)
+ {
+ log.error("MessagingException: " + me.getMessage());
+ log.warn("Sending comments e-mail failed!");
+ }
+
+ }
+
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Get the "forward" necessary to display the
+ * "single entry" view.
+ */
+ private ActionForward updateFromPageForward(
+ HttpServletRequest request,
+ RollerRequest rreq,
+ WeblogEntryData wd,
+ UserData user)
+ {
+ ActionForward forward;
+ PageData page = rreq.getPage();
+ if (page == null)
+ {
+ try
+ {
+ page = rreq.getRoller().getUserManager().
+ retrievePage(wd.getWebsite().getDefaultPageId());
+ }
+ catch (Exception ignore)
+ {
+ }
+ }
+ StringBuffer sb = new StringBuffer();
+ sb.append("/page/");
+ sb.append(user.getUserName());
+ if (page == null)
+ {
+ sb.append("?anchor=");
+ }
+ else
+ {
+ request.setAttribute(RollerRequest.PAGEID_KEY, page.getId());
+ sb.append("/").append(page.getLink()).append("/");
+ }
+ sb.append(wd.getAnchor());
+ forward = new ActionForward(sb.toString());
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * @param cf
+ * @return
+ */
+ private void testCommentSpam(CommentData cd, HttpServletRequest req)
+ {
+ new CommentSpamChecker().testComment(cd,
+ RollerContext.getRollerContext(req).getThreadManager());
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Saves comment and forward to the comment-edit page.
+ */
+ public ActionForward updateFromPage(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ request.setAttribute("updateFromPage","true");
+ return update(mapping,actionForm,request,response);
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Load comment and blog entry objects and forward to comment preview page.
+ */
+ public ActionForward preview(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = null; // we'll compute this later
+
+ ActionErrors errors = new ActionErrors();
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ try
+ {
+ WeblogEntryData wd = rreq.getWeblogEntry();
+ if (wd == null || wd.getId() == null)
+ {
+ throw new NullPointerException(
+ "Unable to find WeblogEntry for " +
+ request.getParameter(RollerRequest.WEBLOGENTRYID_KEY));
+ }
+ request.setAttribute("blogEntry", wd);
+
+ CommentFormEx cf = (CommentFormEx)actionForm;
+ cf.setWeblogEntry( wd );
+ cf.setPostTime(new java.sql.Timestamp(System.currentTimeMillis()));
+ request.setAttribute("commentForm", cf);
+
+ UserData user = rreq.getUser();
+
+ if ( request.getAttribute("previewFromPage")!=null )
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append("/page/");
+ sb.append(user.getUserName());
+ sb.append("?anchor=");
+ sb.append(wd.getAnchor());
+ forward = new ActionForward(sb.toString());
+ }
+ else
+ {
+ forward = mapping.findForward("comment.preview");
+ }
+ }
+ catch (Exception e)
+ {
+ forward = mapping.findForward("error");
+
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.preview.comment", e.toString()));
+ saveErrors(request,errors);
+
+ mLogger.error(
+ getResources(request).getMessage("error.preview.comment"),e);
+ }
+ return forward;
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Load comment and blog entry objects and forward to comment preview page.
+ */
+ public ActionForward previewFromPage(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ request.setAttribute("previewFromPage","true");
+ return preview(mapping,actionForm,request,response);
+ }
+
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ExportEntriesAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,289 @@
+/*
+ * Created on Mar 25, 2004
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.apache.struts.util.RequestUtils;
+import org.roller.RollerException;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.presentation.BasePageModel;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.velocity.ExportRss;
+import org.roller.presentation.weblog.formbeans.WeblogQueryForm;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.jsp.JspFactory;
+import javax.servlet.jsp.PageContext;
+
+/**
+ * @struts.action path="/exportEntries" name="weblogQueryForm"
+ * scope="request" parameter="method"
+ *
+ * @author lance.lavandowska
+ */
+public class ExportEntriesAction extends DispatchAction
+{
+ private SimpleDateFormat dayFormat = new SimpleDateFormat("yyyyMMdd");
+ private SimpleDateFormat monthFormat = new SimpleDateFormat("yyyyMM");
+ private SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
+
+ public ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ return edit(mapping, actionForm, request, response);
+ }
+
+ /**
+ * Prepare the form for selecting date-range to export.
+ *
+ * @param mapping
+ * @param actionForm
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("exportEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ else
+ {
+ request.setAttribute("model",
+ new BasePageModel(request, response, mapping));
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ /**
+ * Export entries from the requested date-range to XML.
+ *
+ * @param mapping
+ * @param actionForm
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward export(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("exportEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ WeblogQueryForm form = (WeblogQueryForm)actionForm;
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ request.setAttribute("model",
+ new BasePageModel(request, response, mapping));
+
+ Locale locale = Locale.getDefault();//rreq.getWebsite().getLocaleInstance();
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ Date startDate;
+ Date endDate;
+ try
+ {
+ startDate = df.parse(form.getStartDateString());
+ endDate = df.parse(form.getEndDateString());
+ }
+ catch (ParseException e)
+ {
+ throw new RollerException("ERROR parsing date:" + e.getMessage());
+ }
+
+ if (startDate != null && endDate != null)
+ {
+ // this work should go into a Thread!
+ WeblogManager weblogMgr =
+ rreq.getRoller().getWeblogManager();
+
+ //List entries = weblogMgr.getWeblogEntriesInDateRange(
+ //rreq.getUser().getUserName(), null, startDate, endDate, false);
+ //System.out.println("Export: got " + entries.size() + " entries.");
+
+ List entries = weblogMgr.getWeblogEntries(
+ rreq.getWebsite(), // userName
+ startDate, // startDate
+ endDate, // endDate
+ null, // catName
+ WeblogManager.ALL, // status
+ null); // maxEntries
+
+ ActionMessages messages = writeSuccessMessage(request, response, rreq, form);
+
+ // seperate the entries as specified: day, month, year
+ Map entryMap = seperateByPeriod(entries, form.getFileBy());
+
+ // now export each List in the entryMap
+ ExportRss exporter = new ExportRss(rreq.getWebsite());
+ String exportTo = form.getExportFormat().toLowerCase();
+ if ("atom".equals(exportTo))
+ {
+ exporter.setExportAtom(true);
+ }
+ ArrayList fileNames = new ArrayList();
+ Iterator it = entryMap.keySet().iterator();
+ while(it.hasNext())
+ {
+ String key = (String)it.next();
+ ArrayList list = (ArrayList)entryMap.get(key);
+ exporter.exportEntries(list, key+"_"+exportTo+".xml");
+ fileNames.add("Exported " + list.size() + " entry(s) to " + key+"_"+exportTo+".xml<br />");
+ //System.out.println("Exported: " + list.size() + " entries for " + key);
+ }
+
+ StringBuffer fileMessage = new StringBuffer();
+ it = fileNames.iterator();
+ while (it.hasNext())
+ {
+ fileMessage.append((String)it.next());
+ }
+ if (fileMessage.length() > 0)
+ {
+ messages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("weblogEntryExport.exportFiles",
+ fileMessage.toString()));
+ }
+ saveMessages(request, messages);
+ }
+ else
+ {
+ form.reset(mapping, (ServletRequest)request);
+ return edit(mapping, actionForm, request, response);
+ }
+
+ //forward = mapping.findForward("exportEntries.done");
+ }
+ else
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ /**
+ * Place entries into Lists, placed into date-related
+ * buckets. The individual buckets may represent a
+ * day, month, or year, depending on which the user specified.
+ *
+ * @param entries
+ * @return
+ */
+ private Map seperateByPeriod(List entries, String period)
+ {
+ HashMap map = new HashMap();
+ WeblogEntryData entry = null;
+ String key = null;
+ ArrayList list = null;
+ SimpleDateFormat formatter = monthFormat;
+ if ("year".equals(period))
+ {
+ formatter = yearFormat;
+ }
+ else if ("day".equals(period))
+ {
+ formatter = dayFormat;
+ }
+
+ Iterator it = entries.iterator();
+ while (it.hasNext())
+ {
+ entry = (WeblogEntryData)it.next();
+ key = formatter.format(entry.getPubTime());
+ list = (ArrayList)map.get(key);
+ if (list == null)
+ {
+ list = new ArrayList();
+ map.put(key, list);
+ }
+ list.add(entry);
+ }
+ return map;
+ }
+
+ private ActionMessages writeSuccessMessage(
+ HttpServletRequest request,
+ HttpServletResponse response,
+ RollerRequest rreq,
+ WeblogQueryForm form) throws MalformedURLException
+ {
+ PageContext pageContext =
+ JspFactory.getDefaultFactory().getPageContext(
+ this.getServlet(), request, response, "", true, 8192, true);
+ Map params = new HashMap();
+ params.put( RollerRequest.USERNAME_KEY, rreq.getUser().getUserName());
+ params.put("rmik", "Files");
+ String filesLink = RequestUtils.computeURL(
+ pageContext, (String)null, (String)null, (String)null,
+ "uploadFiles", params, (String)null, false);
+
+ String message =
+ "Exporting Entries from " +
+ form.getStartDateString() + " to " +
+ form.getEndDateString() + ".<br />" +
+ "Check your <a href=\"" + filesLink + "\">Files</a>.";
+
+ ActionMessages messages = new ActionMessages();
+ messages.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("weblogEntryExport.exportSuccess", message));
+
+ return messages;
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ImportEntriesAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,166 @@
+/*
+ * Created on Mar 31, 2004
+ */
+package org.roller.presentation.weblog.actions;
+
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.pojos.UserData;
+import org.roller.presentation.ArchiveParser;
+import org.roller.presentation.MainPageAction;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCache;
+import org.roller.presentation.weblog.formbeans.ImportEntriesForm;
+import org.roller.util.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @struts.action name="importEntries" path="/importEntries"
+ * scope="request" parameter="method"
+ *
+ * @author lance.lavandowska
+ */
+public class ImportEntriesAction extends DispatchAction
+{
+ public ActionForward importEntries(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("importEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ else
+ {
+ getXmlFiles(actionForm, rreq);
+ ImportEntriesForm form = (ImportEntriesForm)actionForm;
+ if (StringUtils.isNotEmpty(form.getImportFileName()))
+ {
+ // "default" values
+ UserData user = rreq.getUser();
+
+ // load selected file
+ ServletContext app = this.getServlet().getServletConfig().getServletContext();
+ String dir = RollerContext.getUploadDir( app );
+ File f = new File(dir + user.getUserName() +
+ "/" + form.getImportFileName());
+
+ ArchiveParser archiveParser =
+ new ArchiveParser(rreq.getRoller(), rreq.getWebsite(), f);
+ String parseMessages = archiveParser.parse();
+
+ // buf will be non-zero if Entries were imported
+ if (parseMessages.length() > 0)
+ {
+ ActionMessages notices = new ActionMessages();
+ notices.add(ActionMessages.GLOBAL_MESSAGE,
+ new ActionMessage("weblogEntryImport.importFiles",
+ parseMessages));
+ saveMessages(request, notices);
+
+ // Flush the page cache
+ PageCache.removeFromCache( request, user );
+ // refresh the front page cache
+ MainPageAction.flushMainPageCache();
+ }
+ else
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(ActionErrors.GLOBAL_ERROR,
+ new ActionError("error.importing.entries", ""));
+ saveErrors(request,errors);
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ /**
+ * Load list of XML files available for import.
+ * @param mapping
+ * @param actionForm
+ * @param request
+ * @param response
+ * @return
+ * @throws IOException
+ * @throws ServletException
+ */
+ public ActionForward edit(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ ActionForward forward = mapping.findForward("importEntries.page");
+ try
+ {
+ RollerRequest rreq = RollerRequest.getRollerRequest(request);
+ if ( !rreq.isUserAuthorizedToEdit() )
+ {
+ forward = mapping.findForward("access-denied");
+ }
+ else
+ {
+ getXmlFiles(actionForm, rreq);
+ }
+ }
+ catch (Exception e)
+ {
+ request.getSession().getServletContext().log("ERROR",e);
+ throw new ServletException(e);
+ }
+ return forward;
+ }
+
+ private void getXmlFiles(ActionForm actionForm, RollerRequest rreq)
+ {
+ ServletContext app = this.getServlet().getServletConfig().getServletContext();
+ String dir = RollerContext.getUploadDir( app );
+ File d = new File(dir + rreq.getUser().getUserName());
+ ArrayList xmlFiles = new ArrayList();
+ if (d.mkdirs() || d.exists())
+ {
+ File[] files = d.listFiles();
+ for (int i=0; i<files.length; i++)
+ {
+ if (!files[i].isDirectory() &&
+ files[i].getName().toLowerCase().endsWith(".xml"))
+ // TODO : later change detection to use FileInfo
+ {
+ xmlFiles.add(files[i].getName());
+ }
+ }
+ }
+ ImportEntriesForm form = (ImportEntriesForm)actionForm;
+ form.setXmlFiles(xmlFiles);
+ }
+}
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ReferersAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,150 @@
+
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.ActionError;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.action.ActionMessage;
+import org.apache.struts.action.ActionMessages;
+import org.apache.struts.actions.DispatchAction;
+import org.roller.model.RefererManager;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WebsiteData;
+import org.roller.presentation.RollerRequest;
+
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Display today's referers.
+ * @struts.action name="refererForm" path="/referers"
+ * scope="session" parameter="method"
+ */
+public class ReferersAction extends DispatchAction
+{
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(ReferersAction.class);
+
+ public ActionForward unspecified(
+ ActionMapping mapping,
+ ActionForm actionForm,
+ HttpServletRequest request,
+ HttpServletResponse response)
+ throws Exception
+ {
+ return view(mapping, actionForm, request, response);
+ }
+
+ /**
+ * execute
+ */
+ public ActionForward view(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ ActionForward forward = mapping.findForward("referers.page");
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ RefererManager refmgr = rreq.getRoller().getRefererManager();
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ UserData ud = rreq.getUser();
+
+ req.setAttribute("pageHits",
+ new Integer(refmgr.getDayHits(rreq.getWebsite())));
+
+ req.setAttribute("totalHits",
+ new Integer(refmgr.getTotalHits(rreq.getWebsite())));
+
+ List refs = refmgr.getTodaysReferers(rreq.getWebsite());
+ req.setAttribute("referers",refs);
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+
+ return forward;
+ }
+
+ public ActionForward reset(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ this.servlet.log("ReferersAction.reset()");
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ RefererManager refmgr = rreq.getRoller().getRefererManager();
+ WebsiteData website = rreq.getWebsite();
+ refmgr.forceTurnover(website.getId());
+ rreq.getRoller().commit();
+ }
+ this.servlet.log("ReferersAction.reset(): don't have permission");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return view(mapping, form, req, res);
+ }
+
+ public ActionForward delete(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+ //this.servlet.log("ReferersAction.delete()");
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ RefererManager refmgr = rreq.getRoller().getRefererManager();
+ WebsiteData website = rreq.getWebsite();
+
+ String[] deleteIds = req.getParameterValues("id");
+ if (deleteIds != null)
+ {
+ for (int i=0; i<deleteIds.length; i++)
+ {
+ refmgr.removeReferer(deleteIds[i]);
+ }
+ rreq.getRoller().commit();
+ ActionMessages messages = new ActionMessages();
+ messages.add(null, new ActionMessage("referers.deletedReferers"));
+ saveMessages(req, messages);
+ }
+ else
+ {
+ ActionErrors errors = new ActionErrors();
+ errors.add(null, new ActionError("referers.noReferersSpecified"));
+ saveErrors(req, errors);
+ }
+ }
+ //this.servlet.log("ReferersAction.delete(): don't have permission");
+ }
+ catch (Exception e)
+ {
+ mLogger.error("ERROR in action",e);
+ throw new ServletException(e);
+ }
+ return view(mapping, form, req, res);
+ }
+}
+
Added: incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java?rev=189602&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java (added)
+++ incubator/roller/trunk/src/org/roller/presentation/weblog/actions/ToggleLinkbackDisplayAction.java Wed Jun 8 09:06:16 2005
@@ -0,0 +1,84 @@
+package org.roller.presentation.weblog.actions;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.action.Action;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.roller.model.RefererManager;
+import org.roller.pojos.RefererData;
+import org.roller.presentation.RollerContext;
+import org.roller.presentation.RollerRequest;
+import org.roller.presentation.pagecache.PageCache;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Toggle display of a linkback.
+ * @struts.action name="toggleLinkback" path="/toggleLinkback" scope="session"
+ */
+public class ToggleLinkbackDisplayAction extends Action
+{
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ ToggleLinkbackDisplayAction.class);
+
+ /**
+ * execute
+ */
+ public ActionForward execute(
+ ActionMapping mapping, ActionForm form,
+ HttpServletRequest req, HttpServletResponse res)
+ throws Exception
+ {
+
+ RollerRequest rreq = RollerRequest.getRollerRequest(req);
+ String userName = rreq.getUser().getUserName();
+
+ try
+ {
+ if ( rreq.isUserAuthorizedToEdit() )
+ {
+ String refid = req.getParameter(RollerRequest.REFERERID_KEY);
+ if ( refid != null )
+ {
+ RefererManager refmgr =
+ rreq.getRoller().getRefererManager();
+ RefererData ref = refmgr.retrieveReferer(refid);
+ ref.setVisible(
+ Boolean.valueOf( !ref.getVisible().booleanValue() ));
+ ref.save();
+
+ rreq.getRoller().commit();
+
+ PageCache.removeFromCache( req, rreq.getUser() );
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Toggling linkback display",e);
+ throw new ServletException(e);
+ }
+
+ // forward to user's website URL
+ String url = null;
+ try
+ {
+ RollerContext rctx = RollerContext.getRollerContext(
+ rreq.getServletContext());
+ url = rctx.getContextUrl( req, userName);
+ res.sendRedirect(url);
+ }
+ catch (Exception e)
+ {
+ mLogger.error("Unexpected exception",e);
+ }
+
+ return null;
+ }
+}
+