X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleComment.java;h=be28e74b307c0a7a158d2e53289848c21876779e;hb=626a903ec07e58e845d9bf5c6467adc7a95db1c9;hp=57f225f28fcfe224e101e63c6a9c3f05896c9942;hpb=e42ecea2db8ff123f268edf48190d6b9b28fcedb;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleComment.java b/source/mircoders/servlet/ServletModuleComment.java index 57f225f2..be28e74b 100755 --- a/source/mircoders/servlet/ServletModuleComment.java +++ b/source/mircoders/servlet/ServletModuleComment.java @@ -1,239 +1,340 @@ -package mircoders.servlet; - -import java.io.*; -import java.sql.*; -import java.util.*; -import java.net.*; -import javax.servlet.*; -import javax.servlet.http.*; -import org.apache.struts.util.MessageResources; - -import freemarker.template.*; - -import mir.servlet.*; -import mir.module.*; -import mir.misc.*; -import mir.entity.*; -import mir.storage.*; -import mir.generator.*; -import mir.entity.*; -import mir.entity.adapter.*; -import mir.util.*; - -import mircoders.storage.*; -import mircoders.global.*; -import mircoders.localizer.*; -import mircoders.module.*; - /* - * ServletModuleComment - controls navigation for Comments + * 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 * - * @author RK + * In addition, as a special exception, The Mir-coders gives permission to link + * the code of this program with 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. */ -public class ServletModuleComment extends ServletModule -{ +package mircoders.servlet; - private ModuleContent moduleContent; +import mir.entity.adapter.EntityAdapterEngine; +import mir.entity.adapter.EntityAdapterModel; +import mir.servlet.AdminServletModule; +import mir.servlet.ServletModuleExc; +import mir.servlet.ServletModuleFailure; +import mir.servlet.ServletModuleUserExc; +import mir.util.HTTPRequestParser; +import mir.util.JDBCStringRoutines; +import mir.util.SQLQueryBuilder; +import mir.util.URLBuilder; +import mircoders.entity.EntityComment; +import mircoders.global.MirGlobal; +import mircoders.module.ModuleComment; +import mircoders.storage.DatabaseComment; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * ServletModule for managing Comments + */ - // Singelton / Kontruktor - private static ServletModuleComment instance = new ServletModuleComment(); - public static ServletModule getInstance() { return instance; } +public class ServletModuleComment extends AdminServletModule { + public ServletModuleComment() { + mainModule = new ModuleComment(); + definition = "comment"; + } - private ServletModuleComment() { - theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("ServletModule.Comment.Logfile")); - templateListString = MirConfig.getProp("ServletModule.Comment.ListTemplate"); - templateObjektString = MirConfig.getProp("ServletModule.Comment.ObjektTemplate"); - templateConfirmString = MirConfig.getProp("ServletModule.Comment.ConfirmTemplate"); + public void delete(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { try { - mainModule = new ModuleComment(DatabaseComment.getInstance()); - moduleContent = new ModuleContent(DatabaseContent.getInstance()); + MirGlobal.accessControl().general().assertMayDeleteComments(ServletHelper.getUser(aRequest)); + + super.delete(aRequest, aResponse); + } + catch (Throwable t) { + throw new ServletModuleFailure(t); } - catch (StorageObjectException e) { - theLog.printError("servletmodule: comment could not be initialized"); + } + + 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 "); } + + editObject(aRequest, aResponse, idParam, null); } - public void list(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException - { - // Parameter auswerten - SimpleHash mergeData = new SimpleHash(); - String query_text = req.getParameter("query_text"); - mergeData.put("query_text",query_text); - if (query_text!=null) mergeData.put("query_text_encoded",URLEncoder.encode(query_text)); - String query_field = req.getParameter("query_field"); - mergeData.put("query_field",query_field); - String query_is_published = req.getParameter("query_is_published"); - mergeData.put("query_is_published",query_is_published); - - String offset = req.getParameter("offset"); - if (offset==null || offset.equals("")) offset="0"; - mergeData.put("offset",offset); - - // patching order - String order = req.getParameter("order"); - if(order!=null) { - mergeData.put("order", order); - mergeData.put("order_encoded", URLEncoder.encode(order)); - if (order.equals("webdb_create")) order="webdb_create desc"; - } - - // sql basteln - String whereClause=""; boolean isFirst=true; - if (query_text!=null && !query_text.equalsIgnoreCase("")) { - whereClause += "lower("+query_field+") like lower('%"+query_text+"%')"; isFirst=false;} - if (query_is_published != null && !query_is_published.equals("")) { - if (isFirst==false) whereClause+=" and "; - whereClause += "is_published='"+query_is_published+"'"; - isFirst=false; - } - - theLog.printDebugInfo("sql-whereclause: " + whereClause + " order: " + order + " offset: " + offset); - - // fetch und ausliefern + public void editObject(HttpServletRequest aRequest, HttpServletResponse aResponse, String anId, String aTemplate) throws ServletModuleExc { try { - - if (query_text!=null || query_is_published!=null ) { - EntityList theList = mainModule.getByWhereClause(whereClause, order, (new Integer(offset)).intValue()); - if (theList!=null && theList.size()>0) { - - //make articleHash for comment - StringBuffer buf= new StringBuffer("id in (");boolean first=true; - for(int i=0;i0) { - generationData.put( "previousurl", "module=Comment&do=listarticlecomments&offset="+ - Math.max( 0, anOffset - nrCommentsPerPage )+"&articleid="+anArticleId); - generationData.put("previous", new Integer(Math.max( 0, anOffset - nrCommentsPerPage ))); - } + logAdminUsage(aRequest, commentId, "media " + mediaIdParam + " attached"); - if (anOffset + nrCommentsPerPage < totalNrComments) { - generationData.put( "nexturl", "module=Comment&do=listarticlecomments&offset="+ - Math.min( anOffset + nrCommentsPerPage, totalNrComments-1 )+"&articleid="+anArticleId); - generationData.put("next", new Integer(Math.min( anOffset + nrCommentsPerPage, totalNrComments-1 ))); - } + editObject(aRequest, aResponse, commentId, null); + } - generator.generate(aWriter, generationData, new PrintWriter(new NullWriter())); + public void dettach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { + String commentId = aRequest.getParameter("commentid"); + String midParam = aRequest.getParameter("mid"); + if (commentId == null) { + throw new ServletModuleExc("smod comment :: dettach :: commentid missing"); } - catch (Throwable t) { - t.printStackTrace(System.out); - throw new ServletModuleException(t.getMessage()); + if (midParam == null) { + throw new ServletModuleExc("smod comment :: dettach :: mid missing"); } + + try { + EntityComment comment = (EntityComment)mainModule.getById(commentId); + comment.dettach(commentId, midParam); + } + catch(Throwable e) { + throw new ServletModuleFailure(e); + } + + logAdminUsage(aRequest, commentId, "media " + midParam + " deattached"); + + editObject(aRequest, aResponse, commentId, null); } - public void listarticlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException + + public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { - String articleIdString = req.getParameter("articleid"); - String offsetString = req.getParameter("offset"); - int offset = 0; - int articleId = 0; + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); - try { - offset = Integer.parseInt(offsetString); + String where = requestParser.getParameter("where"); + String order = requestParser.getParameterWithDefault("order", "webdb_create desc"); + int offset = requestParser.getIntegerWithDefault("offset", 0); + + returnList(aRequest, aResponse, where, order, offset); + } + + public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc + { + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + SQLQueryBuilder queryBuilder = new SQLQueryBuilder(); + + String searchField = requestParser.getParameter("searchfield"); + String searchText = requestParser.getParameter("searchtext"); + String searchIsPublished = requestParser.getParameter("searchispublished"); + String searchStatus = requestParser.getParameter("searchstatus"); + String searchOrder = requestParser.getParameter("searchorder"); + + if ("0".equals(searchIsPublished)) { + queryBuilder.appendAndCondition("is_published='f'"); } - catch (Throwable t) { + else if ("1".equals(searchIsPublished)) { + queryBuilder.appendAndCondition("is_published='t'"); } - try { - articleId = Integer.parseInt(articleIdString); + if (searchText.length()>0) { + queryBuilder.appendAndCondition( + "lower("+ searchField + ") like " + + "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'"); + } - showArticleCommentList( res.getWriter(), offset, articleId, getLocale(req)); + if (searchStatus.length()>0) { + queryBuilder.appendAndCondition("to_comment_status="+Integer.parseInt(searchStatus)); + } + + if (searchOrder.length()>0) { + if ("datedesc".equals(searchOrder)) { + queryBuilder.appendDescendingOrder("webdb_create"); + } + else if ("dateasc".equals(searchOrder)) { + queryBuilder.appendAscendingOrder("webdb_create"); + } + else if ("articletitle".equals(searchOrder)) { + queryBuilder.appendAscendingOrder("(select content.title from content where content.id = comment.to_media)"); + } + else if ("creator".equals(searchOrder)) { + queryBuilder.appendDescendingOrder("creator"); + } } - catch (ServletModuleException e) { - throw e; + + returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0); + } + + public void articlecomments(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { + String articleIdString = aRequest.getParameter("articleid"); + try { + int articleId = Integer.parseInt(articleIdString); + + returnList( aRequest, aResponse, "to_media="+articleId, "webdb_create desc", 0); } catch (Throwable e) { - e.printStackTrace(System.out); - throw new ServletModuleException(e.getMessage()); + throw new ServletModuleFailure(e); } } - public void performarticlecommentsoperation(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException { - String commentIdString = req.getParameter("commentid"); - String articleIdString = req.getParameter("articleid"); - String offsetString = req.getParameter("offset"); - String operation = req.getParameter("operation"); - int offset = 0; - int articleId = 0; + public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse, + String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc { + + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + URLBuilder urlBuilder = new URLBuilder(); try { - articleId = Integer.parseInt(articleIdString); + Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)}); + + List commentList = + EntityAdapterEngine.retrieveAdapterList(getModel(), definition, aWhereClause, + anOrderByClause, nrEntitiesPerListPage, anOffset); + + responseData.put("nexturl", null); + responseData.put("prevurl", null); + + urlBuilder.setValue("module", "Comment"); + urlBuilder.setValue("do", "list"); + urlBuilder.setValue("where", aWhereClause); + urlBuilder.setValue("order", anOrderByClause); + + urlBuilder.setValue("searchfield", requestParser.getParameter("searchfield")); + urlBuilder.setValue("searchtext", requestParser.getParameter("searchtext")); + urlBuilder.setValue("searchispublished", requestParser.getParameter("searchispublished")); + urlBuilder.setValue("searchstatus", requestParser.getParameter("searchstatus")); + urlBuilder.setValue("searchorder", requestParser.getParameter("searchorder")); + + responseData.put("searchfield", requestParser.getParameter("searchfield")); + responseData.put("searchtext", requestParser.getParameter("searchtext")); + responseData.put("searchispublished", requestParser.getParameter("searchispublished")); + responseData.put("searchstatus", requestParser.getParameter("searchstatus")); + responseData.put("searchorder", requestParser.getParameter("searchorder")); + + urlBuilder.setValue("offset", anOffset); + responseData.put("offset" , Integer.toString(anOffset)); + responseData.put("thisurl" , urlBuilder.getQuery()); + + if (commentList.size()>=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()); + } - showArticleCommentList( res.getWriter(), offset, articleId, getLocale(req)); + responseData.put("comments", commentList); + responseData.put("from" , Integer.toString(anOffset+1)); + responseData.put("to", Integer.toString(anOffset+commentList.size()-1)); + + ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator); + } + catch (Throwable e) { + throw new ServletModuleFailure(e); } - catch (ServletModuleException e) { - throw e; + } + + public void update(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc + { + try { + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + + String returnUrl = requestParser.getParameter("returnurl"); + + String idParam = aRequest.getParameter("id"); + if (idParam == null) { + throw new ServletModuleExc("Wrong call: (id) is missing"); + } + + Map withValues = getIntersectingValues(aRequest, DatabaseComment.getInstance()); + + if (!withValues.containsKey("is_published")) { + withValues.put("is_published","0"); + } + if (!withValues.containsKey("is_html")) { + withValues.put("is_html","0"); + } + + String webdbCreate = (String) withValues.get("webdb_create"); + if (webdbCreate==null || webdbCreate.trim().length()==0) { + withValues.remove("webdb_create"); + } + + String id = mainModule.set(withValues); + + logAdminUsage(aRequest, id, "object modified"); + + if (returnUrl!=null){ + ServletHelper.redirect(aResponse, returnUrl); + } + else { + editObject(aRequest, aResponse, idParam, null); + } } catch (Throwable e) { - e.printStackTrace(System.out); - throw new ServletModuleException(e.getMessage()); + throw new ServletModuleFailure(e); } } -} +} \ No newline at end of file