X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleOpenIndy.java;h=5ba2b20153d608818a01bcfb4cc3db9af6aee0eb;hb=781ae5e450f0fdc85d3ee5b4b586aa542611a562;hp=8a2c90b425bd35d8b32ab2c6d407efca70a83175;hpb=a1149cce1e91c437b7b4c9679c61e6acde32347e;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleOpenIndy.java b/source/mircoders/servlet/ServletModuleOpenIndy.java index 8a2c90b4..5ba2b201 100755 --- a/source/mircoders/servlet/ServletModuleOpenIndy.java +++ b/source/mircoders/servlet/ServletModuleOpenIndy.java @@ -1,8 +1,42 @@ +/* + * Copyright (C) 2001, 2002 The Mir-coders group + * + * This file is part of Mir. + * + * Mir is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Mir is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Mir; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with the com.oreilly.servlet library, any library + * licensed under the Apache Software License, The Sun (tm) Java Advanced + * Imaging library (JAI), The Sun JIMI library (or with modified versions of + * the above that use the same license as the above), and distribute linked + * combinations including the two. You must obey the GNU General Public + * License in all respects for all of the code used other than the above + * mentioned libraries. If you modify this file, you may extend this exception + * to your version of the file, but you are not obligated to do so. If you do + * not wish to do so, delete this exception statement from your version. + */ + package mircoders.servlet; import java.io.*; +import java.lang.*; import java.sql.*; import java.util.*; +import java.net.*; +import java.lang.reflect.*; import javax.servlet.*; import javax.servlet.http.*; @@ -10,16 +44,29 @@ import freemarker.template.*; import com.oreilly.servlet.multipart.*; import com.oreilly.servlet.*; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; + +import org.apache.fop.apps.Driver; +import org.apache.fop.apps.Version; +import org.apache.fop.apps.XSLTInputHandler; + +import org.apache.log.*; + import mir.servlet.*; import mir.module.*; import mir.misc.*; import mir.entity.*; import mir.storage.*; +import mir.media.*; import mircoders.entity.*; import mircoders.storage.*; import mircoders.module.*; import mircoders.producer.*; +import mircoders.media.MediaRequest; +import mircoders.global.*; +import mircoders.localizer.*; /* * ServletModuleOpenIndy - @@ -27,34 +74,65 @@ import mircoders.producer.*; * adding comments to articles & * open-postings to the newswire * - * @author RK + * @author $Author: bruno $ + * @version $Revision: 1.41 $ $Date: 2002/09/03 14:30:37 $ + * + * $Log: ServletModuleOpenIndy.java,v $ + * Revision 1.41 2002/09/03 14:30:37 bruno + * seperation of admin and open posting bundles + * + * Revision 1.40 2002/09/01 22:05:57 mh + * Mir goes GPL + * + * Revision 1.39 2002/08/25 19:00:11 mh + * merge of localization branch into HEAD. mh and zap + * + * Revision 1.38 2002/07/21 22:50:14 mh + * cleanup coding style of getpdf() method + * + * Revision 1.37 2002/07/21 22:41:45 mh + * make use of new MediaRequest class. A big cleanup and optimization. + * + * Revision 1.36 2002/06/29 15:45:20 mh + * cvs macros + * + * */ public class ServletModuleOpenIndy extends ServletModule { - private String commentFormTemplate, commentFormDoneTemplate; - private String postingFormTemplate, postingFormDoneTemplate; - private ModuleContent contentModule; - private ModuleImages imageModule; - private boolean directOp; - + private String commentFormTemplate, commentFormDoneTemplate, + commentFormDupeTemplate; + private String postingFormTemplate, postingFormDoneTemplate, + postingFormDupeTemplate; + private ModuleContent contentModule; + private ModuleComment commentModule; + private ModuleImages imageModule; + private ModuleTopics themenModule; + private String directOp ="yes"; + private String passwdProtection ="yes"; // Singelton / Kontruktor private static ServletModuleOpenIndy instance = new ServletModuleOpenIndy(); public static ServletModule getInstance() { return instance; } private ServletModuleOpenIndy() { try { - theLog = Logfile.getInstance(Configuration.getProperty("Home") + Configuration.getProperty("ServletModule.OpenIndy.Logfile")); - commentFormTemplate = Configuration.getProperty("ServletModule.OpenIndy.CommentTemplate"); - commentFormDoneTemplate = Configuration.getProperty("ServletModule.OpenIndy.CommentDoneTemplate"); - postingFormTemplate = Configuration.getProperty("ServletModule.OpenIndy.PostingTemplate"); - postingFormDoneTemplate = Configuration.getProperty("ServletModule.OpenIndy.PostingDoneTemplate"); - directOp = Configuration.directOp(); + theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.OpenIndy.Logfile")); + commentFormTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentTemplate"); + commentFormDoneTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentDoneTemplate"); + commentFormDupeTemplate = MirConfig.getProp("ServletModule.OpenIndy.CommentDupeTemplate"); + postingFormTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingTemplate"); + postingFormDoneTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingDoneTemplate"); + postingFormDupeTemplate = MirConfig.getProp("ServletModule.OpenIndy.PostingDupeTemplate"); + directOp = MirConfig.getProp("DirectOpenposting").toLowerCase(); + passwdProtection = MirConfig.getProp("PasswdProtection").toLowerCase(); mainModule = new ModuleComment(DatabaseComment.getInstance()); contentModule = new ModuleContent(DatabaseContent.getInstance()); + themenModule = new ModuleTopics(DatabaseTopics.getInstance()); imageModule = new ModuleImages(DatabaseImages.getInstance()); defaultAction="addposting"; + } catch (StorageObjectException e) { theLog.printError("servletmoduleopenindy could not be initialized"); @@ -69,10 +147,27 @@ public class ServletModuleOpenIndy extends ServletModule public void addcomment(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException { String aid = req.getParameter("aid"); // the article id the comment will belong to + String language = req.getParameter("language"); + if (aid!=null && !aid.equals("")) { SimpleHash mergeData = new SimpleHash(); - // ok, article + + // onetimepasswd + if(passwdProtection.equals("yes")){ + String passwd = this.createOneTimePasswd(); + System.out.println(passwd); + HttpSession session = req.getSession(false); + session.setAttribute("passwd",passwd); + mergeData.put("passwd", passwd); + } + + if (language!=null) { + HttpSession session = req.getSession(false); + session.setAttribute("Locale", new Locale(language, "")); + session.setAttribute("passwd",language); + } + mergeData.put("aid", aid); deliver(req, res, mergeData, commentFormTemplate); } @@ -84,7 +179,8 @@ public class ServletModuleOpenIndy extends ServletModule * the commentDone Page */ - public void inscomment(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException + public void inscomment(HttpServletRequest req, HttpServletResponse res) + throws ServletModuleException,ServletModuleUserException { String aid = req.getParameter("to_media"); // the article id the comment will belong to if (aid!=null && !aid.equals("")) @@ -92,16 +188,50 @@ public class ServletModuleOpenIndy extends ServletModule // ok, collecting data from form try { HashMap withValues = getIntersectingValues(req, DatabaseComment.getInstance()); + + //no html in comments(for now) + for (Iterator i=withValues.keySet().iterator(); i.hasNext(); ){ + String k=(String)i.next(); + String v=(String)withValues.get(k); + + withValues.put(k,StringUtil.removeHTMLTags(v)); + } withValues.put("is_published","1"); + //checking the onetimepasswd + if(passwdProtection.equals("yes")){ + HttpSession session = req.getSession(false); + String sessionPasswd = (String)session.getAttribute("passwd"); + if ( sessionPasswd == null){ + throw new ServletModuleUserException("Lost password"); + } + String passwd = req.getParameter("passwd"); + if ( passwd == null || (!sessionPasswd.equals(passwd))) { + throw new ServletModuleUserException("Missing password"); + } + session.invalidate(); + } + // inserting into database String id = mainModule.add(withValues); - - // producing new page - new ProducerContent().handle(null, null, true, false, aid); - - // sync the server - int exitValue = Helper.rsync(); + theLog.printDebugInfo("id: "+id); + //insert was not successfull + if(id==null){ + deliver(req, res, new SimpleHash(), commentFormDupeTemplate); + } else { + DatabaseContent.getInstance().setUnproduced("id="+aid); + + try { + EntityComment comment = (EntityComment) DatabaseComment.getInstance().selectById(id); + MirGlobal.localizer().openPostings().afterCommentPosting(comment); + } + catch (Throwable t) { + throw new ServletModuleException(t.getMessage()); + } + + + + } // redirecting to url // should implement back to article @@ -120,16 +250,54 @@ public class ServletModuleOpenIndy extends ServletModule * Method for delivering the form-Page for open posting */ - public void addposting(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException - { + public void addposting(HttpServletRequest req, HttpServletResponse res) + throws ServletModuleException { SimpleHash mergeData = new SimpleHash(); - /** @todo popups missing */ + + // onetimepasswd + if(passwdProtection.equals("yes")){ + String passwd = this.createOneTimePasswd(); + System.out.println(passwd); + HttpSession session = req.getSession(false); + session.setAttribute("passwd",passwd); + mergeData.put("passwd", passwd); + } + + String maxMedia = MirConfig.getProp("ServletModule.OpenIndy.MaxMediaUploadItems"); + String numOfMedia = req.getParameter("medianum"); + if(numOfMedia==null||numOfMedia.equals("")){ + numOfMedia="1"; + } else if(Integer.parseInt(numOfMedia) > Integer.parseInt(maxMedia)) { + numOfMedia = maxMedia; + } + + int mediaNum = Integer.parseInt(numOfMedia); + SimpleList mediaFields = new SimpleList(); + for(int i =0; i=0) { - entImage.setImage(mediaData, fileType); - setMedia=true; - } - else - theLog.printDebugInfo("Wrong file uploaded!" + fileName); + String passwd = (String)withValues.get("passwd"); + if ( passwd == null || (!sessionPasswd.equals(passwd))) { + throw new ServletModuleUserException("Missing password"); } + session.invalidate(); + } + + if ((((String)withValues.get("title")).length() == 0) || + (((String)withValues.get("description")).length() == 0) || + (((String)withValues.get("content_data")).length() == 0)) + throw new ServletModuleUserException("Missing field"); + + // call the routines that escape html + + for (Iterator i=withValues.keySet().iterator(); i.hasNext(); ){ + String k=(String)i.next(); + String v=(String)withValues.get(k); + + if (k.equals("content_data")){ + //this doesn't quite work yet, so for now, all html goes + //withValues.put(k,StringUtil.approveHTMLTags(v)); + //withValues.put(k,StringUtil.removeHTMLTags(v)); + } else { + withValues.put(k,StringUtil.removeHTMLTags(v)); + } + } withValues.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); withValues.put("publish_path", StringUtil.webdbDate2path((String)withValues.get("date"))); withValues.put("is_produced", "0"); - // op-articles are immediatly published + // by default stuff is published, they can be un-published through the + // admin interface. withValues.put("is_published","1"); // if op direct article-type == newswire - if (directOp==true) withValues.put("to_article_type","1"); - // owner is openposting user + if (directOp.equals("yes")) withValues.put("to_article_type","1"); + withValues.put("to_publisher","1"); - if (withValues.get("creator").toString().equals("")) - withValues.put("creator","Anonym"); + + // owner is openposting user +// 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"); // inserting content into database - String id = contentModule.add(withValues); - - // inserting content and media id in table content_x_media - try{ - DatabaseContentToMedia.getInstance().setMedia(id,mediaId); - theLog.printError("setting content_x_topic success"); - } catch (Exception e) { - theLog.printError("setting content_x_topic failed"); + String cid = contentModule.add(withValues); + theLog.printDebugInfo("id: "+cid); + //insert was not successfull + if(cid==null){ + //How do we know that it was not succesful cause of a + //dupe, what if it failed cause of "No space left on device"? + //Or is there something I am missing? Wouldn't it be better + //to have an explicit dupe check and then insert? I have no + //idea what I am talking about. this comment is in case + //I forget to explicitely ask. -mh + deliver(req, res, mergeData, postingFormDupeTemplate); } - - // producing new page - if(mediaId!=null){ - new ProducerImages().handle(null, null, false, false, mediaId); + String[] to_topicsArr = mp.getParameterValues("to_topic"); + + if (to_topicsArr != null && to_topicsArr.length > 0) { + try{ + DatabaseContentToTopics.getInstance().setTopics(cid,to_topicsArr); + setTopic = true; + } catch (Exception e) { + theLog.printError("setting content_x_topic failed"); + contentModule.deleteById(cid); + throw new ServletModuleException("smod - openindy :: insposting: setting content_x_topic failed: "+e.toString()); + } //end try + } //end if + + //if we're here all is ok... associate the media to the article + for(int i=0;i