some indy.nl related updates
[mir.git] / source / mircoders / servlet / ServletModuleContent.java
index 7b46a8f..7f5cb12 100755 (executable)
@@ -11,6 +11,7 @@ import javax.servlet.http.*;
 import freemarker.template.*;
 
 import mir.servlet.*;
+import mir.media.*;
 import mir.module.*;
 import mir.misc.*;
 import mir.storage.*;
@@ -34,7 +35,6 @@ public class ServletModuleContent extends ServletModule
 
   static ModuleTopics         themenModule;
   static ModuleSchwerpunkt    schwerpunktModule;
-  static ModuleGruppen        gruppenModule;
   static ModuleImages         imageModule;
 
   static String templateOpString;
@@ -46,15 +46,14 @@ public class ServletModuleContent extends ServletModule
 
   private ServletModuleContent() {
     try {
-      theLog = Logfile.getInstance(Configuration.getProperty("Home") + Configuration.getProperty("ServletModule.Content.Logfile"));
-      templateListString = Configuration.getProperty("ServletModule.Content.ListTemplate");
-      templateOpString = Configuration.getProperty("ServletModule.Content.OpTemplate");
-      templateObjektString = Configuration.getProperty("ServletModule.Content.ObjektTemplate");
-      templateConfirmString = Configuration.getProperty("ServletModule.Content.ConfirmTemplate");
+               theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.Content.Logfile"));
+      templateListString = MirConfig.getProp("ServletModule.Content.ListTemplate");
+      //templateOpString = MirConfig.getProp("ServletModule.Content.OpTemplate");
+      templateObjektString = MirConfig.getProp("ServletModule.Content.ObjektTemplate");
+      templateConfirmString = MirConfig.getProp("ServletModule.Content.ConfirmTemplate");
       mainModule = new ModuleContent(DatabaseContent.getInstance());
       themenModule = new ModuleTopics(DatabaseTopics.getInstance());
       schwerpunktModule = new ModuleSchwerpunkt(DatabaseFeature.getInstance());
-      gruppenModule = new ModuleGruppen(DatabaseGroups.getInstance());
       imageModule = new ModuleImages(DatabaseImages.getInstance());
     } catch (StorageObjectException e) {
       theLog.printDebugInfo("servletmodulecontent konnte nicht initialisiert werden");
@@ -148,14 +147,27 @@ public class ServletModuleContent extends ServletModule
     mergeData.put("is_published", "1");
     String now = StringUtil.date2webdbDate(new GregorianCalendar());
     mergeData.put("date", new SimpleScalar(now));
+    try {
     mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList());
-    mergeData.put("gruppenPopupData", gruppenModule.getGruppenAsSimpleList());
+    } catch (ModuleException e) {
+      theLog.printError("themenPopupData could not be fetched.");
+    }
     try {
       mergeData.put("articletypePopupData", DatabaseArticleType.getInstance().getPopupData());
-    } catch (Exception e) {theLog.printError("articletype could not be fetched.");}
-    //mergeData.put("gruppenHashData", gruppenModule.getHashData());
+    } catch (Exception e) {
+      theLog.printError("articletype could not be fetched.");
+    }
+    try {
+      mergeData.put("languagePopupData", DatabaseLanguage.getInstance().getPopupData());
+    } catch (Exception e) {
+      theLog.printError("language-popup could not be fetched.");
+    }
+    try {
     mergeData.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
-    mergeData.put("login_user", HTMLTemplateProcessor.makeSimpleHash(user));
+    } catch (ModuleException e) {
+      theLog.printError("schwerpunktPopupData could not be fetched.");
+    }
+    mergeData.put("login_user", user);
     deliver(req, res, mergeData, templateObjektString);
   }
 
@@ -176,8 +188,12 @@ public class ServletModuleContent extends ServletModule
         withValues.put("is_published","0");
       if (!withValues.containsKey("is_html"))
         withValues.put("is_html","0");
-      if (withValues.get("creator").toString().equals(""))
-        withValues.put("creator","Anonym");
+
+//      ML: this is not multi-language friendly and this can be done in a template
+//      if (withValues.get("creator").toString().equals(""))
+//        withValues.put("creator","Anonym");
+
+
       String id = mainModule.add(withValues);
       DatabaseContentToTopics.getInstance().setTopics(id,req.getParameterValues("to_topic"));
       //theLog.printDebugInfo(":: content :: inserted");
@@ -217,6 +233,10 @@ public class ServletModuleContent extends ServletModule
       if (confirmParam!= null && !confirmParam.equals("")) {
         try {
           mainModule.deleteById(idParam);
+
+          /** @todo the following two should be imlied in
+           *  DatabaseContent */
+
           //delete rows in the content_x_topic-table
           DatabaseContentToTopics.getInstance().deleteByContentId(idParam);
           //delete rows in the comment-table
@@ -248,6 +268,7 @@ public class ServletModuleContent extends ServletModule
     String  mediaIdParam = req.getParameter("mid");
     String  idParam = req.getParameter("cid");
     if (idParam == null||mediaIdParam==null) throw new ServletModuleException("smod content :: attach :: cid/mid missing");
+
     try {
       EntityContent entContent = (EntityContent)mainModule.getById(idParam);
       entContent.attach(mediaIdParam);
@@ -255,21 +276,32 @@ public class ServletModuleContent extends ServletModule
     catch(ModuleException e) {
       theLog.printError("smod content :: attach :: could not get entityContent");
     }
+    catch(StorageObjectException e) {
+      theLog.printError("smod content :: attach :: could not get entityContent");
+    }
+
     _showObject(idParam, req, res);
   }
 
   public void dettach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
   {
-    String  idParam = req.getParameter("cid");
-    if (idParam == null) throw new ServletModuleException("smod content :: dettach :: cid missing");
+    String  cidParam = req.getParameter("cid");
+               String  midParam = req.getParameter("mid");
+    if (cidParam == null) throw new ServletModuleException("smod content :: dettach :: cid missing");
+    if (midParam == null) throw new ServletModuleException("smod content :: dettach :: mid missing");
+
     try {
-      EntityContent entContent = (EntityContent)mainModule.getById(idParam);
-      entContent.dettach();
+      EntityContent entContent = (EntityContent)mainModule.getById(cidParam);
+      entContent.dettach(cidParam,midParam);
     }
     catch(ModuleException e) {
       theLog.printError("smod content :: dettach :: could not get entityContent");
     }
-    _showObject(idParam, req, res);
+    catch(StorageObjectException e) {
+      theLog.printError("smod content :: dettach :: could not get entityContent");
+    }
+
+    _showObject(cidParam, req, res);
   }
 
   public void newswire(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
@@ -283,6 +315,10 @@ public class ServletModuleContent extends ServletModule
     catch(ModuleException e) {
       theLog.printError("smod content :: newswire :: could not get entityContent");
     }
+    catch(StorageObjectException e) {
+      theLog.printError("smod content :: dettach :: could not get entityContent");
+    }
+
     list(req, res);
   }
 
@@ -295,10 +331,9 @@ public class ServletModuleContent extends ServletModule
       EntityUsers   user = _getUser(req);
       if (user==null) theLog.printDebugInfo("user null!");
       String idParam = req.getParameter("id");
-      if (idParam == null) throw new ServletModuleException("Falscher Aufruf: (id) nicht angegeben");
+      if (idParam == null) throw new ServletModuleException("Wrong call: (id) is missing");
 
       HashMap withValues = getIntersectingValues(req, DatabaseContent.getInstance());
-      //String topic_id = req.getParameter("to_topic");
       String[] topic_id = req.getParameterValues("to_topic");
       String content_id = req.getParameter("id");
       // withValues.put("publish_path", StringUtil.webdbDate2path((String)withValues.get("date")));
@@ -308,8 +343,11 @@ public class ServletModuleContent extends ServletModule
         withValues.put("is_published","0");
       if (!withValues.containsKey("is_html"))
         withValues.put("is_html","0");
-      if (withValues.get("creator").toString().equals(""))
-        withValues.put("creator","Anonym");
+
+//      ML: this is not multi-language friendly and this can be done in a template
+//      if (withValues.get("creator").toString().equals(""))
+//        withValues.put("creator","Anonym");
+
       //theLog.printDebugInfo("updating. ");
       String id = mainModule.set(withValues);
       DatabaseContentToTopics.getInstance().setTopics(req.getParameter("id"),topic_id);
@@ -337,46 +375,31 @@ public class ServletModuleContent extends ServletModule
   private void _showObject(String id, HttpServletRequest req, HttpServletResponse res)
     throws ServletModuleException {
 
+    SimpleHash extraInfo = new SimpleHash();
     try {
       EntityContent entContent=(EntityContent)mainModule.getById(id);
-      SimpleHash mergeData =  HTMLTemplateProcessor.makeSimpleHash(entContent);
-      EntityList topicToContent = DatabaseContentToTopics.getInstance().getTopics(entContent);
-      if (topicToContent!=null && topicToContent.size()>0){
-        theLog.printDebugInfo("topicanzahl: "+topicToContent.size());
-        Entity topics = null;
-        SimpleList topicList = new SimpleList();
-        for(int i=0;i<topicToContent.size();i++){
-          topics = (EntityTopics)topicToContent.elementAt(i);
-          topicList.add(topics.getId());
-        }
-        mergeData.put("to_topic",topicList);
+
+      extraInfo.put("themenPopupData", themenModule.getTopicsAsSimpleList());
+      try {
+        extraInfo.put("articletypePopupData",
+                        DatabaseArticleType.getInstance().getPopupData());
+      } catch (Exception e) {
+        theLog.printError("articletype could not be fetched.");
       }
-      //obsolete, because of psqgl 7.1.x
-      //mergeData.put("content_data", entContent.getContentData());
-      mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList());
-      mergeData.put("gruppenPopupData", gruppenModule.getGruppenAsSimpleList());
       try {
-        mergeData.put("articletypePopupData", DatabaseArticleType.getInstance().getPopupData());
-      } catch (Exception e) {theLog.printError("articletype could not be fetched.");}
-
-      // get the images
-      String currentMediaId = entContent.getValue("to_media");
-      SimpleHash imageHash = new SimpleHash();
-      if (currentMediaId!=null && !currentMediaId.equals("")) {
-        imageHash.put(currentMediaId, HTMLTemplateProcessor.makeSimpleHash(imageModule.getById(currentMediaId)));
-        mergeData.put("images", imageHash);
+        extraInfo.put("languagePopupData", DatabaseLanguage.getInstance().getPopupData());
+      } catch (Exception e) {
+        theLog.printError("language-popup could not be fetched.");
       }
 
-
-      //mergeData.put("gruppenHashData", gruppenModule.getHashData());
-      mergeData.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
+      extraInfo.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
       // hier code um zur liste zurueckzukommen
       String offsetParam, whereParam, orderParam;
-      if ((offsetParam = req.getParameter("offset"))!=null) mergeData.put("offset", offsetParam);
-      if ((whereParam = req.getParameter("where"))!=null) mergeData.put("where", whereParam);
-      if ((orderParam = req.getParameter("order"))!=null) mergeData.put("order", orderParam);
-      mergeData.put("login_user", HTMLTemplateProcessor.makeSimpleHash(_getUser(req)));
-      deliver(req, res, mergeData, templateObjektString);
+      if ((offsetParam = req.getParameter("offset"))!=null) extraInfo.put("offset", offsetParam);
+      if ((whereParam = req.getParameter("where"))!=null) extraInfo.put("where", whereParam);
+      if ((orderParam = req.getParameter("order"))!=null) extraInfo.put("order", orderParam);
+      extraInfo.put("login_user", _getUser(req));
+      deliver(req, res, entContent, extraInfo, templateObjektString);
     } catch (Exception e) {
       throw new ServletModuleException(e.toString());
     }
@@ -392,7 +415,6 @@ public class ServletModuleContent extends ServletModule
         SimpleHash modelRoot = HTMLTemplateProcessor.makeSimpleHashWithEntitylistInfos(theList);
         modelRoot.put("themenHashData", themenModule.getHashData());
         modelRoot.put("schwerpunktHashData", schwerpunktModule.getHashData());
-        modelRoot.put("gruppenHashData", gruppenModule.getHashData());
         modelRoot.put("articletypeHash", DatabaseArticleType.getInstance().getHashData());
         deliver(req, res, modelRoot, templateListString);
       } else  { // count = 1
@@ -407,11 +429,88 @@ public class ServletModuleContent extends ServletModule
     throws ServletModuleException {
 
     try {
-      // hier dann htmlcode rausschreiben
+      // delivering html
       if (theList == null || theList.getCount() == 0 || theList.getCount()>1) {
         SimpleHash modelRoot = HTMLTemplateProcessor.makeSimpleHashWithEntitylistInfos(theList);
         modelRoot.put("articletypeHash", DatabaseArticleType.getInstance().getHashData());
-        modelRoot.put("gruppenHashData", gruppenModule.getHashData());
+
+    EntityContent       currentContent;
+    EntityList          upMediaEntityList;
+    EntityList          imageEntityList;
+    EntityList          currentMediaList;
+    Entity              mediaType;
+    EntityMedia         uploadedMedia;
+    SimpleList          opList;
+      String imageRoot = MirConfig.getProp("Producer.ImageRoot");
+
+    SimpleHash          contentHash;
+    Class               mediaHandlerClass=null;
+    MirMedia            mediaHandler=null;
+    String              mediaHandlerName=null;
+    Database            mediaStorage=null;
+    String              tinyIcon;
+    String              iconAlt;
+
+      for (int i=0; i < theList.size();i++) {
+        currentContent = (EntityContent)theList.elementAt(i);
+        //fetching/setting the images
+        upMediaEntityList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
+        if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
+          tinyIcon = null;
+          iconAlt = null;
+          mediaHandler = null;
+          mediaHandlerName = null;
+          for (int n=0; n < upMediaEntityList.size();n++) {
+            uploadedMedia = (EntityMedia)upMediaEntityList.elementAt(n);
+            mediaType = uploadedMedia.getMediaType();
+
+            //must of had a non-existant to_media_type entry..
+            //let's save our ass.
+            if (mediaType != null) {
+                try {
+                  mediaHandlerName = mediaType.getValue("classname");
+                  mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
+                  mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
+                } catch (Exception e) {
+                  theLog.printError("ProducerStartpage:problem in reflection: "+mediaHandlerName);
+                }
+
+                //the "best" media type to show
+                if (mediaHandler.isVideo()) {
+                  tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
+                  iconAlt = "Video";
+                  break;
+                } else if (mediaHandler.isAudio()) {
+                  tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
+                  iconAlt = "Audio";
+                } else if (tinyIcon == null && !mediaHandler.isImage()) {
+                  tinyIcon = mediaHandler.getTinyIcon();
+                  iconAlt = mediaHandler.getIconAlt();
+                }
+            }
+          }
+          //it only has image(s)
+          if (tinyIcon == null) {
+            tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
+            iconAlt = "Image";
+          }
+
+        // uploadedMedia Entity list is empty.
+        // we only have text
+        } else {
+          tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
+          iconAlt = "Text";
+        }
+
+        try{
+          //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
+          contentHash = (SimpleHash)theList.get(i);
+          contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
+          contentHash.put("icon_alt", iconAlt);
+        } catch (Exception e){}
+      }
+
+
         deliver(req, res, modelRoot, templateListString);
       } else  { // count = 1
         _showObject(theList.elementAt(0).getId(), req, res);