X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleOpenIndy.java;h=5ba2b20153d608818a01bcfb4cc3db9af6aee0eb;hb=781ae5e450f0fdc85d3ee5b4b586aa542611a562;hp=6e10b89c2b6c7ca2d8bf8e8803505f45a1f23fec;hpb=c6a2204d8d75293256fd17c07e54971d7672359a;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleOpenIndy.java b/source/mircoders/servlet/ServletModuleOpenIndy.java index 6e10b89c..5ba2b201 100755 --- a/source/mircoders/servlet/ServletModuleOpenIndy.java +++ b/source/mircoders/servlet/ServletModuleOpenIndy.java @@ -1,3 +1,34 @@ +/* + * 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.*; @@ -13,6 +44,15 @@ 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.*; @@ -24,6 +64,9 @@ import mircoders.entity.*; import mircoders.storage.*; import mircoders.module.*; import mircoders.producer.*; +import mircoders.media.MediaRequest; +import mircoders.global.*; +import mircoders.localizer.*; /* * ServletModuleOpenIndy - @@ -31,7 +74,29 @@ 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 @@ -42,10 +107,11 @@ public class ServletModuleOpenIndy extends ServletModule 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; } @@ -60,11 +126,13 @@ public class ServletModuleOpenIndy extends ServletModule 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"); @@ -79,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); } @@ -94,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("")) @@ -102,30 +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); theLog.printDebugInfo("id: "+id); //insert was not successfull if(id==null){ deliver(req, res, new SimpleHash(), commentFormDupeTemplate); - } - - // producing new page - new ProducerContent().handle(null, null, true, false, aid); + } else { + DatabaseContent.getInstance().setUnproduced("id="+aid); - // sync the server - int exitValue = Helper.rsync(); - theLog.printDebugInfo("rsync:"+exitValue); + 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 @@ -147,11 +253,24 @@ public class ServletModuleOpenIndy extends ServletModule public void addposting(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException { SimpleHash mergeData = new SimpleHash(); + + // 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) { + + if (to_topicsArr != null && to_topicsArr.length > 0) { try{ DatabaseContentToTopics.getInstance().setTopics(cid,to_topicsArr); setTopic = true; @@ -254,179 +401,22 @@ public class ServletModuleOpenIndy extends ServletModule throw new ServletModuleException("smod - openindy :: insposting: setting content_x_topic failed: "+e.toString()); } //end try } //end if - - // if op contains uploaddata - String mediaId=null; - int i=1; - for(Iterator it = mp.requestList.iterator(); it.hasNext();){ - MpRequest mpReq = (MpRequest)it.next(); - String fileName = mpReq.getFilename(); - - //get the content-type from what the client browser - //sends us. (the "Oreilly method") - String contentType = mpReq.getContentType(); - - theLog.printInfo("FROM BROWSER: "+contentType); - - //if the client browser sent us unknown (text/plain is default) - //or if we got application/octet-stream, it's possible that - //the browser is in error, better check against the file extension - if (contentType.equals("text/plain") || - contentType.equals("application/octet-stream")) { - /** - * This is just a temporary way to get the content-type via - * the .extension , we could maybe use a magic method, by looking - * at the header (first few bytes) of the file. (like the file(1) - * command). - * The Oreilly method relies on the content-type that the client - * browser sends and that sometimes is application-octet stream with - * broken/mis-configured browsers. - * - * The map file should be Mir/content-types.properties, it's the - * default Sun Java file with some additional entries that it did - * not have. So if you support a new media type you have to make - * sure that it is in this file -mh - */ - contentType = FileUtil.guessContentTypeFromName(fileName); - if (contentType==null) - contentType = "text/plain"; // rfc1867 says this is the default - } - HashMap mediaValues = new HashMap(); - - theLog.printInfo("CONTENT TYPE IS: "+contentType); - - if (contentType.equals("text/plain") || - contentType.equals("application/octet-stream")) { - throw new ServletModuleUserException("One or more files of unrecognized types"); - } - - String mediaTitle=(String)withValues.get("media_title"+i); - i++; - - if (mediaTitle==null) - mediaTitle = (String)withValues.get("title"); - - mediaValues.put("title", mediaTitle); - mediaValues.put("date", StringUtil.date2webdbDate(new GregorianCalendar())); - mediaValues.put("to_publisher", "1"); // op user - mediaValues.put("to_media_folder", "7"); // op media_folder - mediaValues.put("is_produced", "0"); - mediaValues.put("is_published","0"); - - //the where clause to find the media_type entry - //from the content-type. - //we use the media type entry to lookup the - //media Handler/Storage classes - //String wc = " mime_type = '"+contentType+"'"; - - // @todo this should probably be moved to DatabaseMediaType -mh - String[] cTypeSplit = StringUtil.split(contentType, "/"); - String wc = " mime_type LIKE '"+cTypeSplit[0]+"%'"; - - DatabaseMediaType mediaTypeStor = DatabaseMediaType.getInstance(); - EntityList mediaTypesList = mediaTypeStor.selectByWhereClause(wc); - - String mediaTypeId = null; - MirMedia mediaHandler; - Database mediaStorage; - - //if we found an entry matching the - //content-type int the table. - if (mediaTypesList.size() > 0) { - Entity mediaType = null; - - // find out if we an exact content-type match if so take it. - // otherwise just use the first one. - // @todo this should probably be moved to DatabaseMediaType -mh - for(int j=0;j 0 - - } //end for Iterator... - - //if we're here all is ok... - EntityContent contentEnt = (EntityContent)contentModule.getById(cid); - contentEnt.setValueForProperty("is_published","1"); - contentEnt.update(); - - - //dereference mp. -mh - mp=null; - - // producing openpostinglist - new ProducerOpenPosting().handle(null,null,false,false); - // producing new page - new ProducerContent().handle(null, null, false, false,cid); - //if direct op producing startpage - if (directOp.equals("yes")) new ProducerStartPage().handle(null,null); - - //produce the topicPages if set - //should be more intelligent - //if(setTopic==true) new ProducerTopics().handle(null,null); - - // sync the server - //should be configureable - int exitValue = Helper.rsync(); - theLog.printDebugInfo("rsync: "+exitValue); + + //if we're here all is ok... associate the media to the article + for(int i=0;i