X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleComment.java;h=eff08cd9b19c341f613fabb95bc726e0e9c7f0d7;hb=22a2f276fcc3efb4ae0e2bda7621e607df315129;hp=492e72660cca6029dac744927dd60bcb54b31880;hpb=9421d900431f4495a5c4d624e19d5d1e96b01b6a;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleComment.java b/source/mircoders/servlet/ServletModuleComment.java index 492e7266..eff08cd9 100755 --- a/source/mircoders/servlet/ServletModuleComment.java +++ b/source/mircoders/servlet/ServletModuleComment.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001, 2002 The Mir-coders group + * Copyright (C) 2001, 2002 The Mir-coders group * * This file is part of Mir. * @@ -18,108 +18,166 @@ * 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. + * 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. */ package mircoders.servlet; -import java.io.*; -import java.sql.*; +import mir.entity.adapter.EntityAdapterEngine; +import mir.entity.adapter.EntityAdapterModel; +import mir.log.LoggerWrapper; +import mir.servlet.ServletModule; +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.*; -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 mir.log.*; - -import mircoders.storage.*; -import mircoders.global.*; -import mircoders.localizer.*; -import mircoders.module.*; /* * ServletModuleComment - controls navigation for Comments * * - * @author RK + * @author the mir-coders */ public class ServletModuleComment extends ServletModule { - - private ModuleContent moduleContent; - - // Singelton / Kontruktor private static ServletModuleComment instance = new ServletModuleComment(); public static ServletModule getInstance() { return instance; } private ServletModuleComment() { logger = new LoggerWrapper("ServletModule.Comment"); - - templateListString = MirConfig.getProp("ServletModule.Comment.ListTemplate"); - templateObjektString = MirConfig.getProp("ServletModule.Comment.ObjektTemplate"); - templateConfirmString = MirConfig.getProp("ServletModule.Comment.ConfirmTemplate"); - try { - mainModule = new ModuleComment(DatabaseComment.getInstance()); - moduleContent = new ModuleContent(DatabaseContent.getInstance()); + mainModule = new ModuleComment(); + definition = "comment"; } - catch (StorageObjectException e) { + catch (Exception e) { logger.error("servletmodule comment could not be initialized:" + e.getMessage()); } } - public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException + public void delete(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleUserExc, ServletModuleFailure { + try { + MirGlobal.accessControl().general().assertMayDeleteComments(ServletHelper.getUser(aRequest)); + + super.delete(aRequest, aResponse); + } + catch (Throwable t) { + throw new ServletModuleFailure(t); + } + } + + public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { - String idParam = req.getParameter("id"); + String idParam = aRequest.getParameter("id"); if (idParam == null) - throw new ServletModuleException("Invalid call: id not supplied "); + throw new ServletModuleExc("Invalid call: id not supplied "); - showComment(idParam, req, res); + editObject(aRequest, aResponse, idParam); } - public void showComment(String anId, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException { + public void editObject(HttpServletRequest aRequest, HttpServletResponse aResponse, String anId) throws ServletModuleExc { try { - SimpleHash extraInfo = new SimpleHash(); - TemplateModelRoot data; + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] {getLocale(aRequest), getFallbackLocale(aRequest)}); + EntityAdapterModel model = MirGlobal.localizer().dataModel().adapterModel(); + Object comment; + URLBuilder urlBuilder = new URLBuilder(); - data = (TemplateModelRoot) mainModule.getById(anId); + urlBuilder.setValue("module", "Comment"); + urlBuilder.setValue("do", "edit"); + urlBuilder.setValue("id", anId); + urlBuilder.setValue("returnurl", requestParser.getParameter("returnurl")); - extraInfo.put("languages", DatabaseLanguage.getInstance().getPopupData()); - extraInfo.put("comment_status_values", DatabaseCommentStatus.getInstance().getPopupData()); + if (anId != null) { + responseData.put("new", Boolean.FALSE); + comment = model.makeEntityAdapter("comment", mainModule.getById(anId)); + } + else { + List fields = DatabaseComment.getInstance().getFieldNames(); + responseData.put("new", Boolean.TRUE); + Map emptyComment = new HashMap(); + Iterator i = fields.iterator(); + while (i.hasNext()) { + emptyComment.put(i.next(), null); + } + + comment = emptyComment; + } + responseData.put("comment", comment); + + responseData.put("returnurl", requestParser.getParameter("returnurl")); + responseData.put("thisurl", urlBuilder.getQuery()); - deliver(aRequest, aResponse, data, extraInfo, templateObjektString); + ServletHelper.generateResponse(aResponse.getWriter(), responseData, editGenerator); } - catch (Exception e) { - throw new ServletModuleException(e.toString()); + catch (Throwable e) { + throw new ServletModuleFailure(e); } } + public void attach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc + { + String mediaIdParam = aRequest.getParameter("mid"); + String commentId = aRequest.getParameter("commentid"); - public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException + if (commentId == null || mediaIdParam==null) throw new ServletModuleExc("smod comment :: attach :: commentid/mid missing"); + + try { + EntityComment comment = (EntityComment) mainModule.getById(commentId); + comment.attach(mediaIdParam); + } + catch(Throwable e) { + throw new ServletModuleFailure(e); + } + + logAdminUsage(aRequest, commentId, "media " + mediaIdParam + " attached"); + + editObject(aRequest, aResponse, commentId); + } + + 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"); + 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); + } + + + public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); @@ -127,108 +185,81 @@ public class ServletModuleComment extends ServletModule String order = requestParser.getParameterWithDefault("order", "webdb_create desc"); int offset = requestParser.getIntegerWithDefault("offset", 0); - returnCommentList(aRequest, aResponse, where, order, offset); + returnList(aRequest, aResponse, where, order, offset); } - public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException + public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + SQLQueryBuilder queryBuilder = new SQLQueryBuilder(); - String queryField = ""; 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"); - String whereClause = " (1=1) "; - String orderClause = "webdb_create desc"; - if (searchIsPublished.equals("0")) { - whereClause=whereClause + "is_published='f'"; + queryBuilder.appendAndCondition("is_published='f'"); } else if (searchIsPublished.equals("1")) { - whereClause=whereClause + "is_published='t'"; + queryBuilder.appendAndCondition("is_published='t'"); } - if (!searchField.equals("") && !searchText.equals("")) { - queryField=""; - - if (searchField.equals("title")) - queryField = "title"; - else if (searchField.equals("creator")) - queryField = "creator"; - else if (searchField.equals("description")) - queryField = "description"; - else - queryField = ""; - - if (!queryField.equals("")) { - if (!whereClause.equals("")) - whereClause = whereClause + " and "; - - whereClause = whereClause + "lower(" + queryField + ") like '%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'"; - } + if (searchText.length()>0) { + queryBuilder.appendAndCondition( + "lower("+ searchField + ") like " + + "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'"); } - System.out.println("search order = " + searchOrder); - - if (searchOrder.equals("datedesc")) { - orderClause = "webdb_create desc"; + if (searchStatus.length()>0) { + queryBuilder.appendAndCondition("to_comment_status="+Integer.parseInt(searchStatus)); } - else if (searchOrder.equals("dateasc")) { - orderClause = "webdb_create asc"; - } - else if (searchOrder.equals("articletitle")) { - orderClause = "(select content.title from content where content.id = comment.to_media) asc"; + + if (searchOrder.length()>0) { + if (searchOrder.equals("datedesc")) + queryBuilder.appendDescendingOrder("webdb_create"); + else if (searchOrder.equals("dateasc")) + queryBuilder.appendAscendingOrder("webdb_create"); + else if (searchOrder.equals("articletitle")) + queryBuilder.appendAscendingOrder("(select content.title from content where content.id = comment.to_media)"); + else if (searchOrder.equals("creator")) + queryBuilder.appendDescendingOrder("creator"); } - returnCommentList(aRequest, aResponse, whereClause, orderClause, 0); + returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0); } - public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException + public void articlecomments(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { - String articleIdString = req.getParameter("articleid"); + String articleIdString = aRequest.getParameter("articleid"); int articleId; try { articleId = Integer.parseInt(articleIdString); - returnCommentList( req, res, "to_media="+articleId, "webdb_create desc", 0); - } - catch (ServletModuleException e) { - throw e; + returnList( aRequest, aResponse, "to_media="+articleId, "webdb_create desc", 0); } catch (Throwable e) { - throw new ServletModuleException(e.getMessage()); + throw new ServletModuleFailure(e); } } - public void returnCommentList(HttpServletRequest aRequest, HttpServletResponse aResponse, - String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleException { - // ML: experiment in using the producer's generation system instead of the - // old one... + public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse, + String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); URLBuilder urlBuilder = new URLBuilder(); - EntityAdapterModel model; - int nrCommentsPerPage = 20; - int count; try { - Map responseData = ServletHelper.makeGenerationData(getLocale(aRequest)); - model = MirGlobal.localizer().dataModel().adapterModel(); + Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)}); - Object commentList = - new CachingRewindableIterator( - new EntityIteratorAdapter( aWhereClause, anOrderByClause, nrCommentsPerPage, - MirGlobal.localizer().dataModel().adapterModel(), "comment", nrCommentsPerPage, anOffset) - ); + List commentList = + EntityAdapterEngine.retrieveAdapterList(model, definition, aWhereClause, anOrderByClause, nrEntitiesPerListPage, anOffset); responseData.put("nexturl", null); responseData.put("prevurl", null); - count=mainModule.getSize(aWhereClause); - urlBuilder.setValue("module", "Comment"); urlBuilder.setValue("do", "list"); urlBuilder.setValue("where", aWhereClause); @@ -237,39 +268,74 @@ public class ServletModuleComment extends ServletModule 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" , new Integer(anOffset).toString()); responseData.put("thisurl" , urlBuilder.getQuery()); - if (count>=anOffset+nrCommentsPerPage) { - urlBuilder.setValue("offset", anOffset + nrCommentsPerPage); + if (commentList.size()>=nrEntitiesPerListPage) { + urlBuilder.setValue("offset", anOffset + nrEntitiesPerListPage); responseData.put("nexturl" , urlBuilder.getQuery()); } if (anOffset>0) { - urlBuilder.setValue("offset", Math.max(anOffset - nrCommentsPerPage, 0)); + urlBuilder.setValue("offset", Math.max(anOffset - nrEntitiesPerListPage, 0)); responseData.put("prevurl" , urlBuilder.getQuery()); } responseData.put("comments", commentList); responseData.put("from" , Integer.toString(anOffset+1)); - responseData.put("count", Integer.toString(count)); - responseData.put("to", Integer.toString(Math.min(anOffset+nrCommentsPerPage, count))); + responseData.put("to", Integer.toString(anOffset+commentList.size()-1)); - ServletHelper.generateResponse(aResponse.getWriter(), responseData, "commentlist.template"); + ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator); } catch (Throwable e) { - e.printStackTrace(new PrintWriter(new LoggerToWriterAdapter(logger, logger.ERROR_MESSAGE))); - - throw new ServletModuleException(e.getMessage()); + throw new ServletModuleFailure(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); + } + catch (Throwable e) { + throw new ServletModuleFailure(e); + } + } +} \ No newline at end of file