cleanup / abuse system fix / prepping for a release
[mir.git] / source / mircoders / servlet / ServletModuleContent.java
index 912df40..1369888 100755 (executable)
 
 package mircoders.servlet;
 
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import mir.entity.adapter.EntityAdapter;
+import mir.entity.adapter.EntityAdapterEngine;
 import mir.entity.adapter.EntityAdapterModel;
-import mir.entity.adapter.EntityIteratorAdapter;
+import mir.generator.Generator;
 import mir.log.LoggerWrapper;
 import mir.misc.StringUtil;
 import mir.servlet.ServletModule;
 import mir.servlet.ServletModuleExc;
 import mir.servlet.ServletModuleFailure;
-import mir.util.CachingRewindableIterator;
-import mir.util.HTTPRequestParser;
-import mir.util.JDBCStringRoutines;
-import mir.util.SQLQueryBuilder;
-import mir.util.StringRoutines;
-import mir.util.URLBuilder;
-import mircoders.entity.*;
+import mir.util.*;
+import mircoders.entity.EntityContent;
+import mircoders.entity.EntityUsers;
 import mircoders.global.MirGlobal;
 import mircoders.module.ModuleContent;
 import mircoders.storage.DatabaseContent;
 import mircoders.storage.DatabaseContentToTopics;
 
-/*
- *  ServletModuleContent -
- *  deliver html for the article admin form.
- *
- * @version $Id: ServletModuleContent.java,v 1.52.2.14 2004/01/18 17:31:00 zapata Exp $
- * @author rk, mir-coders
- *
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
+ * Article admin interface code
  */
 
-public class ServletModuleContent extends ServletModule
-{
+public class ServletModuleContent extends ServletModule {
   private static ServletModuleContent instance = new ServletModuleContent();
   public static ServletModule getInstance() { return instance; }
   private static ModuleContent contentModule;
 
   private ServletModuleContent() {
     super();
+    propagatedParameters.add("selectarticleurl");
 
     logger = new LoggerWrapper("ServletModule.Content");
 
     try {
-      contentModule = new ModuleContent(DatabaseContent.getInstance());
+      definition = "content";
+      contentModule = new ModuleContent();
       mainModule = contentModule;
     }
     catch (Throwable e) {
@@ -89,18 +76,6 @@ public class ServletModuleContent extends ServletModule
     }
   }
 
-  public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
-  {
-    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
-
-    String where = requestParser.getParameter("where");
-    String order = requestParser.getParameterWithDefault("order", "webdb_create desc");
-    int offset = requestParser.getIntegerWithDefault("offset", 0);
-    String selectArticleUrl = requestParser.getParameter("selectarticleurl");
-
-    returnList(aRequest, aResponse, where, order, offset, selectArticleUrl);
-  }
-
   public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleFailure {
     try {
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
@@ -110,7 +85,6 @@ public class ServletModuleContent extends ServletModule
       String searchOrder = requestParser.getParameterWithDefault("searchorder", "");
       String searchispublished = requestParser.getParameterWithDefault("searchispublished", "");
       String searchArticleType = requestParser.getParameterWithDefault("searcharticletype", "");
-      String selectArticleUrl = requestParser.getParameter("selectarticleurl");
 
       if (searchValue.length()>0) {
         if (searchField.equals("id"))
@@ -148,7 +122,7 @@ public class ServletModuleContent extends ServletModule
           queryBuilder.appendAscendingOrder("creator");
       }
 
-      returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0, selectArticleUrl);
+      returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0);
     }
     catch (Throwable e) {
       throw new ServletModuleFailure(e);
@@ -159,8 +133,7 @@ public class ServletModuleContent extends ServletModule
     editObject(aRequest, aResponse, null);
   }
 
-  public void insert(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
-  {
+  public void insert(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     try {
       Map withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance());
 
@@ -181,8 +154,6 @@ public class ServletModuleContent extends ServletModule
       String id = mainModule.add(withValues);
       logAdminUsage(aRequest, id, "object added");
 
-      List topics;
-
       DatabaseContentToTopics.getInstance().setTopics(id, aRequest.getParameterValues("to_topic"));
 
       editObject(aRequest, aResponse, id);
@@ -192,8 +163,7 @@ public class ServletModuleContent extends ServletModule
     }
   }
 
-  public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
-  {
+  public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     String idParam = aRequest.getParameter("id");
     if (idParam == null)
       throw new ServletModuleExc("Invalid call: id not supplied ");
@@ -202,16 +172,23 @@ public class ServletModuleContent extends ServletModule
 
   /**
    * Attaches media to an article
-   *
    */
-  public void attach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
-  {
+  public void attach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     String  mediaIdParam = aRequest.getParameter("mid");
     String  articleId = aRequest.getParameter("articleid");
-
     if (articleId == null || mediaIdParam==null)
       throw new ServletModuleExc("smod content :: attach :: articleid/mid missing");
-
+    // check if mediaIdParam and articleid are correct integers
+    try
+    {
+      Integer.parseInt(mediaIdParam);
+      Integer.parseInt(articleId);
+    }
+    catch(NumberFormatException e)
+    {
+      throw new ServletModuleExc("smod content :: attach :: invalid articleid/mid");
+    }
+    
     if (!MirGlobal.accessControl().article().mayEditArticle(ServletHelper.getUser(aRequest), articleId))
       throw new ServletModuleExc("Article has been locked");
 
@@ -263,9 +240,7 @@ public class ServletModuleContent extends ServletModule
   {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String returnUrl = requestParser.getParameter("returnurl");
-
-    String idParam = aRequest.getParameter("id");
+    String idParam = requestParser.getParameter("id");
     if (idParam == null)
       throw new ServletModuleExc("Wrong call: (id) is missing");
 
@@ -286,9 +261,7 @@ public class ServletModuleContent extends ServletModule
   {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String returnUrl = requestParser.getParameter("returnurl");
-
-    String idParam = aRequest.getParameter("id");
+    String idParam = requestParser.getParameter("id");
     if (idParam == null)
       throw new ServletModuleExc("Wrong call: (id) is missing");
 
@@ -309,9 +282,7 @@ public class ServletModuleContent extends ServletModule
   {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-    String returnUrl = requestParser.getParameter("returnurl");
-
-    String idParam = aRequest.getParameter("id");
+    String idParam = requestParser.getParameter("id");
     if (idParam == null)
       throw new ServletModuleExc("Wrong call: (id) is missing");
 
@@ -333,9 +304,7 @@ public class ServletModuleContent extends ServletModule
     try {
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
 
-      String returnUrl = requestParser.getParameter("returnurl");
-
-      String idParam = aRequest.getParameter("id");
+      String idParam = requestParser.getParameter("id");
       if (idParam == null)
         throw new ServletModuleExc("Wrong call: (id) is missing");
 
@@ -344,8 +313,6 @@ public class ServletModuleContent extends ServletModule
 
       Map withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance());
 
-      String content_id = aRequest.getParameter("id");
-
       withValues.put("is_produced", "0");
       if (!withValues.containsKey("is_published"))
         withValues.put("is_published","0");
@@ -387,7 +354,7 @@ public class ServletModuleContent extends ServletModule
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
       EntityAdapterModel model = MirGlobal.localizer().dataModel().adapterModel();
-      Map article;
+      Object article;
       URLBuilder urlBuilder = new URLBuilder();
 
       urlBuilder.setValue("module", "Content");
@@ -407,26 +374,28 @@ public class ServletModuleContent extends ServletModule
         responseData.put("mayUnlock", new Boolean(MirGlobal.accessControl().article().mayUnlockArticle(user, id)));
       }
       else {
-        List fields = DatabaseContent.getInstance().getFields();
+        List fields = DatabaseContent.getInstance().getFieldNames();
         responseData.put("new", Boolean.TRUE);
-        article = new HashMap();
+        Map emptyArticle = new HashMap();
         Iterator i = fields.iterator();
         while (i.hasNext()) {
-          article.put(i.next(), null);
+          emptyArticle.put(i.next(), null);
         }
 
-        article.put("to_topics", null);
+        emptyArticle.put("to_topics", null);
 
-        MirGlobal.localizer().adminInterface().initializeArticle(article);
+        MirGlobal.localizer().adminInterface().initializeArticle(emptyArticle);
+        article = emptyArticle;
 
         responseData.put("mayEdit", Boolean.TRUE);
         responseData.put("mayLock", Boolean.FALSE);
         responseData.put("mayForceLock", Boolean.FALSE);
         responseData.put("mayUnlock", Boolean.FALSE);
+
       }
       responseData.put("article", article);
 
-      List topicsList = new Vector();
+      List topicsList = new ArrayList();
 
       String[] topicCategories = configuration.getStringArray("Mir.Localizer.Admin.TopicLists");
 
@@ -435,18 +404,15 @@ public class ServletModuleContent extends ServletModule
         categoryMap.put("key", "topic");
         categoryMap.put("listtype", "0");
         categoryMap.put("listparameter", "3");
-        categoryMap.put("items",
-                        new EntityIteratorAdapter("", "title",
-            20, MirGlobal.localizer().dataModel().adapterModel(), "topic"));
+        categoryMap.put("items", EntityAdapterEngine.retrieveAdapterList(model, "topic", "", "title", -1, 0));
         topicsList.add(categoryMap);
       }
-      else
-      {
-
+      else {
         for (int i = 0; i < topicCategories.length; i++) {
           try {
             Map categoryMap = new HashMap();
             List parts = StringRoutines.splitString(topicCategories[i], ":");
+
             String key = null;
             String listtype = "0";
             String listparameter = "5";
@@ -468,9 +434,7 @@ public class ServletModuleContent extends ServletModule
               categoryMap.put("key", key);
               categoryMap.put("listtype", listtype);
               categoryMap.put("listparameter", listparameter);
-              categoryMap.put("items",
-                              new EntityIteratorAdapter(where, order,
-                  20, MirGlobal.localizer().dataModel().adapterModel(), "topic"));
+              categoryMap.put("items", EntityAdapterEngine.retrieveAdapterList(model, "topic", where, order, -1, 0));
               topicsList.add(categoryMap);
             }
           }
@@ -492,91 +456,7 @@ public class ServletModuleContent extends ServletModule
     }
   }
 
-  public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse,
-     String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc {
-    this.returnList(aRequest, aResponse, aWhereClause, anOrderByClause, anOffset, null);
-  }
-
-  public void returnList(
-       HttpServletRequest aRequest,
-       HttpServletResponse aResponse,
-       String aWhereClause,
-       String anOrderByClause,
-       int anOffset,
-       String aSelectArticleUrl) throws ServletModuleExc {
-
-    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
-    URLBuilder urlBuilder = new URLBuilder();
-    EntityAdapterModel model;
-    int count;
-
-    try {
-      Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
-      model = MirGlobal.localizer().dataModel().adapterModel();
-
-      Object articleList =
-          new CachingRewindableIterator(
-            new EntityIteratorAdapter( aWhereClause, anOrderByClause, nrEntitiesPerListPage,
-               MirGlobal.localizer().dataModel().adapterModel(), "content", nrEntitiesPerListPage, anOffset)
-      );
-
-      responseData.put("nexturl", null);
-      responseData.put("prevurl", null);
-
-      count=mainModule.getSize(aWhereClause);
-
-      urlBuilder.setValue("module", "Content");
-      urlBuilder.setValue("do", "list");
-      urlBuilder.setValue("where", aWhereClause);
-      urlBuilder.setValue("order", anOrderByClause);
-
-
-      urlBuilder.setValue("searchfield", requestParser.getParameter("searchfield"));
-      urlBuilder.setValue("searchvalue", requestParser.getParameter("searchvalue"));
-      urlBuilder.setValue("searchispublished", requestParser.getParameter("searchispublished"));
-      urlBuilder.setValue("searchorder", requestParser.getParameter("searchorder"));
-      urlBuilder.setValue("searcharticletype", requestParser.getParameter("searcharticletype"));
-      urlBuilder.setValue("selectarticleurl", aSelectArticleUrl);
-
-      responseData.put("searchfield", requestParser.getParameter("searchfield"));
-      responseData.put("searchvalue", requestParser.getParameter("searchvalue"));
-      responseData.put("searchispublished", requestParser.getParameter("searchispublished"));
-      responseData.put("searchorder", requestParser.getParameter("searchorder"));
-      responseData.put("searcharticletype", requestParser.getParameter("searcharticletype"));
-      responseData.put("selectarticleurl", aSelectArticleUrl);
-
-      urlBuilder.setValue("offset", anOffset);
-      responseData.put("offset" , new Integer(anOffset).toString());
-      responseData.put("thisurl" , urlBuilder.getQuery());
-
-      if (count>=anOffset+nrEntitiesPerListPage) {
-        urlBuilder.setValue("offset", (anOffset + nrEntitiesPerListPage));
-        responseData.put("nexturl" , urlBuilder.getQuery());
-      }
-
-      if (anOffset>0) {
-        urlBuilder.setValue("offset", Math.max(anOffset - nrEntitiesPerListPage, 0));
-        responseData.put("prevurl" , urlBuilder.getQuery());
-      }
-
-      responseData.put("articles", articleList);
-
-      responseData.put("from" , Integer.toString(anOffset+1));
-      responseData.put("count", Integer.toString(count));
-      responseData.put("to", Integer.toString(Math.min(anOffset+nrEntitiesPerListPage, count)));
-      responseData.put("offset" , Integer.toString(anOffset));
-      responseData.put("order", anOrderByClause);
-      responseData.put("where" , aWhereClause);
-
-      ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator);
-    }
-    catch (Throwable e) {
-      throw new ServletModuleFailure(e);
-    }
-  }
-
-  public void selectparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
-  {
+  public void selectparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     try {
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
       URLBuilder urlBuilder = new URLBuilder();
@@ -586,15 +466,15 @@ public class ServletModuleContent extends ServletModule
       urlBuilder.setValue("childid", requestParser.getParameter("id"));
       urlBuilder.setValue("returnurl", requestParser.getParameter("returnurl"));
 
-      returnList(aRequest, aResponse, "", "", 0, urlBuilder.getQuery());
+      returnList(aRequest, aResponse, "", "", 0,
+          Collections.singletonMap("selectarticleurl", urlBuilder.getQuery()));
     }
     catch (Throwable e) {
       throw new ServletModuleFailure(e);
     }
   }
 
-  public void listchildren(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
-  {
+  public void listchildren(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
     try {
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
       String articleId = requestParser.getParameter("article_id");
@@ -602,7 +482,7 @@ public class ServletModuleContent extends ServletModule
       if (articleId == null)
         throw new ServletModuleExc("ServletModuleContent.listchildren: article_id not set!");
 
-      returnList(aRequest, aResponse, "to_content = " + articleId, "", 0, null);
+      returnList(aRequest, aResponse, "to_content = " + articleId, "webdb_create desc", 0);
     }
     catch (Throwable e) {
       throw new ServletModuleFailure(e);
@@ -612,9 +492,9 @@ public class ServletModuleContent extends ServletModule
   public void setparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
   {
     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
-    String articleId = aRequest.getParameter("childid");
-    String parentId  = aRequest.getParameter("id");
-    String returnUrl = aRequest.getParameter("returnurl");
+    String articleId = requestParser.getParameter("childid");
+    String parentId  = requestParser.getParameter("id");
+    String returnUrl = requestParser.getParameter("returnurl");
 
     if (!MirGlobal.accessControl().article().mayEditArticle(ServletHelper.getUser(aRequest), articleId))
       throw new ServletModuleExc("Article has been locked");
@@ -631,7 +511,7 @@ public class ServletModuleContent extends ServletModule
       throw new ServletModuleFailure(e);
     }
 
-    redirect(aResponse, returnUrl);
+    ServletHelper.redirect(aResponse, returnUrl);
   }
 
   public void clearparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
@@ -654,6 +534,24 @@ public class ServletModuleContent extends ServletModule
       throw new ServletModuleFailure("ServletModuleContent.clearparent: " + e.getMessage(), e);
     }
 
-    redirect(aResponse, returnUrl);
+    ServletHelper.redirect(aResponse, returnUrl);
+  }
+
+  public void showPreview(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
+    try {
+      HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
+      String articleId = requestParser.getParameter("id");
+      EntityAdapter article = model.makeEntityAdapter("content", mainModule.getById(articleId));
+      String preview = requestParser.getParameterWithDefault("preview", "default");
+
+      Map generationValues = new HashMap();
+      Generator generator =
+          MirGlobal.localizer().adminInterface().prepareArticlePreview(preview, article, generationValues);
+
+      generator.generate(aResponse.getWriter(), generationValues, logger);
+    }
+    catch (Exception e) {
+      throw new ServletModuleFailure(e);
+    }
   }
 }