X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmircoders%2Fservlet%2FServletModuleContent.java;h=d09fd7f7960801bcc4364b8c530087704edd4fea;hb=95c2e3a74f492f6f61d4dbe8bb47996f43af0627;hp=7e8684af0452bf51c5e8d0ea11cf2418be209710;hpb=0d512e810fc3838b6787c2a866864481d79c93ca;p=mir.git diff --git a/source/mircoders/servlet/ServletModuleContent.java b/source/mircoders/servlet/ServletModuleContent.java index 7e8684af..d09fd7f7 100755 --- a/source/mircoders/servlet/ServletModuleContent.java +++ b/source/mircoders/servlet/ServletModuleContent.java @@ -30,75 +30,65 @@ package mircoders.servlet; +import java.util.ArrayList; +import java.util.Collections; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Vector; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import mir.entity.adapter.EntityAdapter; import mir.entity.adapter.EntityAdapterModel; import mir.entity.adapter.EntityIteratorAdapter; +import mir.entity.adapter.EntityAdapterEngine; +import mir.generator.Generator; import mir.log.LoggerWrapper; import mir.misc.StringUtil; import mir.servlet.ServletModule; import mir.servlet.ServletModuleExc; import mir.servlet.ServletModuleFailure; -import mir.util.CachingRewindableIterator; import mir.util.HTTPRequestParser; import mir.util.JDBCStringRoutines; import mir.util.SQLQueryBuilder; import mir.util.StringRoutines; import mir.util.URLBuilder; import mircoders.entity.EntityContent; +import mircoders.entity.EntityUsers; import mircoders.global.MirGlobal; import mircoders.module.ModuleContent; import mircoders.storage.DatabaseContent; import mircoders.storage.DatabaseContentToTopics; -/* - * ServletModuleContent - - * deliver html for the article admin form. - * - * @version $Id: ServletModuleContent.java,v 1.52.2.12 2003/10/23 14:55:25 rk Exp $ - * @author rk, mir-coders - * +/** + * Article admin interface code */ -public class ServletModuleContent extends ServletModule -{ +public class ServletModuleContent extends ServletModule { private static ServletModuleContent instance = new ServletModuleContent(); public static ServletModule getInstance() { return instance; } + private static ModuleContent contentModule; private ServletModuleContent() { super(); + propagatedParameters.add("selectarticleurl"); logger = new LoggerWrapper("ServletModule.Content"); try { - mainModule = new ModuleContent(DatabaseContent.getInstance()); + definition = "content"; + contentModule = new ModuleContent(); + mainModule = contentModule; } catch (Throwable e) { logger.fatal("ServletModuleContent could not be initialized: " + e.toString()); } } - public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { - HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); - - String where = requestParser.getParameter("where"); - String order = requestParser.getParameterWithDefault("order", "webdb_create desc"); - int offset = requestParser.getIntegerWithDefault("offset", 0); - String selectArticleUrl = requestParser.getParameter("selectarticleurl"); - - returnList(aRequest, aResponse, where, order, offset, selectArticleUrl); - } - public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc, ServletModuleFailure { try { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); @@ -108,7 +98,6 @@ public class ServletModuleContent extends ServletModule String searchOrder = requestParser.getParameterWithDefault("searchorder", ""); String searchispublished = requestParser.getParameterWithDefault("searchispublished", ""); String searchArticleType = requestParser.getParameterWithDefault("searcharticletype", ""); - String selectArticleUrl = requestParser.getParameter("selectarticleurl"); if (searchValue.length()>0) { if (searchField.equals("id")) @@ -146,7 +135,7 @@ public class ServletModuleContent extends ServletModule queryBuilder.appendAscendingOrder("creator"); } - returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0, selectArticleUrl); + returnList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0); } catch (Throwable e) { throw new ServletModuleFailure(e); @@ -157,10 +146,7 @@ public class ServletModuleContent extends ServletModule editObject(aRequest, aResponse, null); } - - public void insert(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { -//theLog.printDebugInfo(":: content :: trying to insert"); + public void insert(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { try { Map withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance()); @@ -181,8 +167,6 @@ public class ServletModuleContent extends ServletModule String id = mainModule.add(withValues); logAdminUsage(aRequest, id, "object added"); - List topics; - DatabaseContentToTopics.getInstance().setTopics(id, aRequest.getParameterValues("to_topic")); editObject(aRequest, aResponse, id); @@ -192,23 +176,26 @@ public class ServletModuleContent extends ServletModule } } - public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + 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); } -// methods for attaching media file - public void attach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + /** + * Attaches media to an article + */ + public void attach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { String mediaIdParam = aRequest.getParameter("mid"); String articleId = aRequest.getParameter("articleid"); if (articleId == null || mediaIdParam==null) throw new ServletModuleExc("smod content :: attach :: articleid/mid missing"); + if (!MirGlobal.accessControl().article().mayEditArticle(ServletHelper.getUser(aRequest), articleId)) + throw new ServletModuleExc("Article has been locked"); + try { EntityContent entContent = (EntityContent) mainModule.getById(articleId); entContent.attach(mediaIdParam); @@ -222,6 +209,9 @@ public class ServletModuleContent extends ServletModule editObject(aRequest, aResponse, articleId); } + /** + * Deattaches media from an article + */ public void dettach(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { String articleId = aRequest.getParameter("articleid"); @@ -231,6 +221,9 @@ public class ServletModuleContent extends ServletModule if (midParam == null) throw new ServletModuleExc("smod content :: dettach :: mid missing"); + if (!MirGlobal.accessControl().article().mayEditArticle(ServletHelper.getUser(aRequest), articleId)) + throw new ServletModuleExc("Article has been locked"); + try { EntityContent entContent = (EntityContent)mainModule.getById(articleId); entContent.dettach(articleId, midParam); @@ -244,20 +237,85 @@ public class ServletModuleContent extends ServletModule editObject(aRequest, aResponse, articleId); } + /** + * Locks an article + */ + public void lock(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc + { + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + + String idParam = requestParser.getParameter("id"); + if (idParam == null) + throw new ServletModuleExc("Wrong call: (id) is missing"); + + EntityUsers user = ServletHelper.getUser(aRequest); + + if (!MirGlobal.accessControl().article().mayLockArticle(user, idParam)) + throw new ServletModuleExc("Unable to lock"); + + contentModule.lockArticle(idParam, user.getId(), false); + + editObject(aRequest, aResponse, idParam); + } + + /** + * Unlocks an article + */ + public void unlock(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc + { + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + + String idParam = requestParser.getParameter("id"); + if (idParam == null) + throw new ServletModuleExc("Wrong call: (id) is missing"); + + EntityUsers user = ServletHelper.getUser(aRequest); + + if (!MirGlobal.accessControl().article().mayUnlockArticle(user, idParam)) + throw new ServletModuleExc("Unable to unlock"); + + contentModule.unlockArticle(idParam, user.getId(), false); + + editObject(aRequest, aResponse, idParam); + } + + /** + * Forcelocks an article + */ + public void forcelock(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc + { + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + + String idParam = requestParser.getParameter("id"); + if (idParam == null) + throw new ServletModuleExc("Wrong call: (id) is missing"); + + EntityUsers user = ServletHelper.getUser(aRequest); + + if (!MirGlobal.accessControl().article().mayForceLockArticle(user, idParam)) + throw new ServletModuleExc("Unable to force lock"); + + contentModule.lockArticle(idParam, user.getId(), true); + + editObject(aRequest, aResponse, idParam); + } + + /** + * Stores an article + */ 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"); + String idParam = requestParser.getParameter("id"); if (idParam == null) throw new ServletModuleExc("Wrong call: (id) is missing"); - Map withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance()); + if (!MirGlobal.accessControl().article().mayEditArticle(ServletHelper.getUser(aRequest), idParam)) + throw new ServletModuleExc("Article has been locked"); - String content_id = aRequest.getParameter("id"); + Map withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance()); withValues.put("is_produced", "0"); if (!withValues.containsKey("is_published")) @@ -275,11 +333,12 @@ public class ServletModuleContent extends ServletModule DatabaseContentToTopics.getInstance().setTopics(aRequest.getParameter("id"), aRequest.getParameterValues("to_topic")); - if (returnUrl!=null && !returnUrl.equals("")){ - redirect(aResponse, returnUrl); + if (MirGlobal.accessControl().article().mayUnlockArticle(ServletHelper.getUser(aRequest), idParam) && + (requestParser.getParameterWithDefault("unlock", "0").equals("1"))) { + contentModule.unlockArticle(id, ServletHelper.getUser(aRequest).getId(), false); } - else - editObject(aRequest, aResponse, idParam); + + editObject(aRequest, aResponse, idParam); } catch (Throwable e) { throw new ServletModuleFailure(e); @@ -288,15 +347,10 @@ public class ServletModuleContent extends ServletModule /** - * HelperMethod shows the basic article editing form. - * - * if the "id" parameter is null, it means show an empty form to add a new - * article. + * Returns the basic article editing form. * - * @param id - * @param aRequest - * @param aResponse - * @throws ServletModuleExc + * @param id identifier of the article. null, means show an + * empty form to add a new article. */ public void editObject(HttpServletRequest aRequest, HttpServletResponse aResponse, String id) throws ServletModuleExc { @@ -315,9 +369,16 @@ public class ServletModuleContent extends ServletModule if (id!=null) { responseData.put("new", Boolean.FALSE); article = model.makeEntityAdapter("content", mainModule.getById(id)); + + EntityUsers user = ServletHelper.getUser(aRequest); + + responseData.put("mayEdit", new Boolean(MirGlobal.accessControl().article().mayEditArticle(user, id))); + responseData.put("mayLock", new Boolean(MirGlobal.accessControl().article().mayLockArticle(user, id))); + responseData.put("mayForceLock", new Boolean(MirGlobal.accessControl().article().mayForceLockArticle(user, id))); + responseData.put("mayUnlock", new Boolean(MirGlobal.accessControl().article().mayUnlockArticle(user, id))); } else { - List fields = DatabaseContent.getInstance().getFields(); + List fields = DatabaseContent.getInstance().getFieldNames(); responseData.put("new", Boolean.TRUE); article = new HashMap(); Iterator i = fields.iterator(); @@ -328,10 +389,15 @@ public class ServletModuleContent extends ServletModule article.put("to_topics", null); MirGlobal.localizer().adminInterface().initializeArticle(article); + + responseData.put("mayEdit", Boolean.TRUE); + responseData.put("mayLock", Boolean.FALSE); + responseData.put("mayForceLock", Boolean.FALSE); + responseData.put("mayUnlock", Boolean.FALSE); } responseData.put("article", article); - List topicsList = new Vector(); + List topicsList = new ArrayList(); String[] topicCategories = configuration.getStringArray("Mir.Localizer.Admin.TopicLists"); @@ -340,18 +406,15 @@ public class ServletModuleContent extends ServletModule categoryMap.put("key", "topic"); categoryMap.put("listtype", "0"); categoryMap.put("listparameter", "3"); - categoryMap.put("items", - new EntityIteratorAdapter("", "title", - 20, MirGlobal.localizer().dataModel().adapterModel(), "topic")); + categoryMap.put("items", EntityAdapterEngine.retrieveAdapterList(model, "topic", "", "title", -1, 0)); topicsList.add(categoryMap); } - else - { - + else { for (int i = 0; i < topicCategories.length; i++) { try { Map categoryMap = new HashMap(); List parts = StringRoutines.splitString(topicCategories[i], ":"); + String key = null; String listtype = "0"; String listparameter = "5"; @@ -373,9 +436,7 @@ public class ServletModuleContent extends ServletModule categoryMap.put("key", key); categoryMap.put("listtype", listtype); categoryMap.put("listparameter", listparameter); - categoryMap.put("items", - new EntityIteratorAdapter(where, order, - 20, MirGlobal.localizer().dataModel().adapterModel(), "topic")); + categoryMap.put("items", EntityAdapterEngine.retrieveAdapterList(model, "topic", where, order, -1, 0)); topicsList.add(categoryMap); } } @@ -397,91 +458,7 @@ public class ServletModuleContent extends ServletModule } } - public void returnList(HttpServletRequest aRequest, HttpServletResponse aResponse, - String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc { - this.returnList(aRequest, aResponse, aWhereClause, anOrderByClause, anOffset, null); - } - - public void returnList( - HttpServletRequest aRequest, - HttpServletResponse aResponse, - String aWhereClause, - String anOrderByClause, - int anOffset, - String aSelectArticleUrl) throws ServletModuleExc { - - HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); - URLBuilder urlBuilder = new URLBuilder(); - EntityAdapterModel model; - int count; - - try { - Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)}); - model = MirGlobal.localizer().dataModel().adapterModel(); - - Object articleList = - new CachingRewindableIterator( - new EntityIteratorAdapter( aWhereClause, anOrderByClause, nrEntitiesPerListPage, - MirGlobal.localizer().dataModel().adapterModel(), "content", nrEntitiesPerListPage, anOffset) - ); - - responseData.put("nexturl", null); - responseData.put("prevurl", null); - - count=mainModule.getSize(aWhereClause); - - urlBuilder.setValue("module", "Content"); - urlBuilder.setValue("do", "list"); - urlBuilder.setValue("where", aWhereClause); - urlBuilder.setValue("order", anOrderByClause); - - - urlBuilder.setValue("searchfield", requestParser.getParameter("searchfield")); - urlBuilder.setValue("searchvalue", requestParser.getParameter("searchvalue")); - urlBuilder.setValue("searchispublished", requestParser.getParameter("searchispublished")); - urlBuilder.setValue("searchorder", requestParser.getParameter("searchorder")); - urlBuilder.setValue("searcharticletype", requestParser.getParameter("searcharticletype")); - urlBuilder.setValue("selectarticleurl", aSelectArticleUrl); - - responseData.put("searchfield", requestParser.getParameter("searchfield")); - responseData.put("searchvalue", requestParser.getParameter("searchvalue")); - responseData.put("searchispublished", requestParser.getParameter("searchispublished")); - responseData.put("searchorder", requestParser.getParameter("searchorder")); - responseData.put("searcharticletype", requestParser.getParameter("searcharticletype")); - responseData.put("selectarticleurl", aSelectArticleUrl); - - urlBuilder.setValue("offset", anOffset); - responseData.put("offset" , new Integer(anOffset).toString()); - responseData.put("thisurl" , urlBuilder.getQuery()); - - if (count>=anOffset+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()); - } - - responseData.put("articles", articleList); - - responseData.put("from" , Integer.toString(anOffset+1)); - responseData.put("count", Integer.toString(count)); - responseData.put("to", Integer.toString(Math.min(anOffset+nrEntitiesPerListPage, count))); - responseData.put("offset" , Integer.toString(anOffset)); - responseData.put("order", anOrderByClause); - responseData.put("where" , aWhereClause); - - ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator); - } - catch (Throwable e) { - throw new ServletModuleFailure(e); - } - } - - public void selectparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + public void selectparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { try { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); URLBuilder urlBuilder = new URLBuilder(); @@ -491,15 +468,15 @@ public class ServletModuleContent extends ServletModule urlBuilder.setValue("childid", requestParser.getParameter("id")); urlBuilder.setValue("returnurl", requestParser.getParameter("returnurl")); - returnList(aRequest, aResponse, "", "", 0, urlBuilder.getQuery()); + returnList(aRequest, aResponse, "", "", 0, + Collections.singletonMap("selectarticleurl", urlBuilder.getQuery())); } catch (Throwable e) { throw new ServletModuleFailure(e); } } - public void listchildren(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc - { + public void listchildren(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { try { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); String articleId = requestParser.getParameter("article_id"); @@ -507,7 +484,7 @@ public class ServletModuleContent extends ServletModule if (articleId == null) throw new ServletModuleExc("ServletModuleContent.listchildren: article_id not set!"); - returnList(aRequest, aResponse, "to_content = " + articleId, "", 0, null); + returnList(aRequest, aResponse, "to_content = " + articleId, "webdb_create desc", 0, null); } catch (Throwable e) { throw new ServletModuleFailure(e); @@ -517,13 +494,16 @@ public class ServletModuleContent extends ServletModule public void setparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); - String articleId = aRequest.getParameter("childid"); - String parentId = aRequest.getParameter("id"); - String returnUrl = aRequest.getParameter("returnurl"); + String articleId = requestParser.getParameter("childid"); + String parentId = requestParser.getParameter("id"); + String returnUrl = requestParser.getParameter("returnurl"); + + if (!MirGlobal.accessControl().article().mayEditArticle(ServletHelper.getUser(aRequest), articleId)) + throw new ServletModuleExc("Article has been locked"); try { EntityContent article = (EntityContent) mainModule.getById(articleId); - article.setValueForProperty("to_content", parentId); + article.setFieldValue("to_content", parentId); article.setProduced(false); article.update(); logAdminUsage(aRequest, articleId, "parent set to " + parentId); @@ -533,7 +513,7 @@ public class ServletModuleContent extends ServletModule throw new ServletModuleFailure(e); } - redirect(aResponse, returnUrl); + ServletHelper.redirect(aResponse, returnUrl); } public void clearparent(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc @@ -544,7 +524,7 @@ public class ServletModuleContent extends ServletModule try { EntityContent article = (EntityContent) mainModule.getById(articleId); - article.setValueForProperty("to_content", ""); + article.setFieldValue("to_content", ""); article.setProduced(false); article.update(); logAdminUsage(aRequest, articleId, "parent cleared"); @@ -556,6 +536,24 @@ public class ServletModuleContent extends ServletModule throw new ServletModuleFailure("ServletModuleContent.clearparent: " + e.getMessage(), e); } - redirect(aResponse, returnUrl); + ServletHelper.redirect(aResponse, returnUrl); + } + + public void showPreview(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc { + try { + HTTPRequestParser requestParser = new HTTPRequestParser(aRequest); + String articleId = requestParser.getParameter("id"); + EntityAdapter article = model.makeEntityAdapter("content", mainModule.getById(articleId)); + String preview = requestParser.getParameterWithDefault("preview", "default"); + + Map generationValues = new HashMap(); + Generator generator = + MirGlobal.localizer().adminInterface().prepareArticlePreview(preview, article, generationValues); + + generator.generate(aResponse.getWriter(), generationValues, logger); + } + catch (Exception e) { + throw new ServletModuleFailure(e); + } } }