package mircoders.localizer.basic;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
import mir.entity.Entity;
import mir.misc.StringUtil;
import mir.session.Request;
import mir.session.Session;
import mir.session.SessionExc;
import mir.session.SessionFailure;
-import mir.session.UploadedFile;
import mir.session.ValidationHelper;
+import mir.util.EntityUtility;
import mircoders.entity.EntityContent;
import mircoders.global.MirGlobal;
import mircoders.media.MediaUploadProcessor;
import mircoders.module.ModuleArticleType;
-import mircoders.module.ModuleContent;
import mircoders.module.ModuleMediafolder;
-import mircoders.storage.DatabaseArticleType;
import mircoders.storage.DatabaseContent;
import mircoders.storage.DatabaseContentToMedia;
import mircoders.storage.DatabaseContentToTopics;
-import mircoders.storage.DatabaseMediafolder;
+
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
/**
- *
- * <p>Title: Experimental session handler for article postings </p>
- * <p>Description: </p>
- * <p>Copyright: Copyright (c) 2003</p>
- * <p>Company: </p>
- * @author Zapata
- * @version 1.0
+ * Extensible handler for open article postings
*/
public class MirBasicArticlePostingHandler extends MirBasicPostingSessionHandler {
- protected ModuleContent contentModule = new ModuleContent(DatabaseContent.getInstance());
protected DatabaseContentToMedia contentToMedia = DatabaseContentToMedia.getInstance();
protected DatabaseContent contentDatabase = DatabaseContent.getInstance();
public MirBasicArticlePostingHandler() {
- super();
+ this(false);
+ }
+
+ public MirBasicArticlePostingHandler(boolean aPersistentUploadedFiles) {
+ super(aPersistentUploadedFiles);
setResponseGenerators(
configuration.getString("Localizer.OpenSession.article.EditTemplate"),
configuration.getString("Localizer.OpenSession.article.UnsupportedMediaTemplate"),
configuration.getString("Localizer.OpenSession.article.DoneTemplate"));
}
-
+ /**
+ * {@inheritDoc}
+ */
protected void initializeResponseData(Request aRequest, Session aSession, Response aResponse) throws SessionExc, SessionFailure {
super.initializeResponseData(aRequest, aSession, aResponse);
- Iterator i = DatabaseContent.getInstance().getFields().iterator();
+ Iterator i = DatabaseContent.getInstance().getFieldNames().iterator();
while (i.hasNext()) {
String field = (String) i.next();
aResponse.setResponseValue(field, aRequest.getParameter(field));
aResponse.setResponseValue("to_topic", aRequest.getParameters("to_topic"));
}
+ /**
+ * {@inheritDoc}
+ */
public void validate(List aResults, Request aRequest, Session aSession) throws SessionExc, SessionFailure {
super.validate(aResults, aRequest, aSession);
ValidationHelper.testFieldEntered(aRequest, "content_data", "validationerror.missing", aResults);
}
+ /**
+ * Called just before the article is stored in the database.
+ * The last opportunity to alter fields.
+ */
public void finalizeArticle(Request aRequest, Session aSession, EntityContent anArticle) throws SessionExc, SessionFailure {
try {
anArticle.setFieldValue("is_published", "1");
anArticle.setFieldValue("is_html", "0");
anArticle.setFieldValue("publish_path", StringUtil.webdbDate2path(anArticle. getFieldValue("date")));
- ModuleArticleType module = new ModuleArticleType(DatabaseArticleType.getInstance());
+ ModuleArticleType module = new ModuleArticleType();
anArticle.setFieldValue("to_article_type", module.articleTypeIdForName(configuration.getString("Localizer.OpenSession.article.DefaultArticleType")));
anArticle.setFieldValue("to_publisher", "1");
}
}
}
- public void setArticleTopics(Request aRequest, Session aSession, EntityContent aContent) throws SessionExc, SessionFailure {
+ /**
+ * Extracts topics from the request and associated the
+ * article to them.
+ */
+ public void setArticleTopics(Request aRequest, Session aSession, EntityContent anArticle) throws SessionExc, SessionFailure {
// topics:
List topics = aRequest.getParameters("to_topic");
if (topics.size() > 0) {
try {
- DatabaseContentToTopics.getInstance().setTopics(aContent.getId(), topics);
+ DatabaseContentToTopics.getInstance().setTopics(anArticle.getId(), topics);
}
catch (Throwable e) {
logger.error("setting content_x_topic failed");
String id;
Map values = getIntersectingValues(aRequest, DatabaseContent.getInstance());
- EntityContent article = (EntityContent) contentModule.createNew();
- article.setValues(values);
+ EntityContent article = (EntityContent) contentDatabase.createNewEntity();
+ article.setFieldValues(values);
finalizeArticle(aRequest, aSession, article);
id = article.insert();
}
aSession.setAttribute("content", article);
-
setArticleTopics(aRequest, aSession, article);
-
}
catch (Throwable t) {
throw new SessionFailure(t);
}
}
- public void processUploadedFile(Request aRequest, Session aSession, UploadedFile aFile) throws SessionExc, SessionFailure {
+ public void processAttachmentError(Request aRequest, Session aSession, Attachment aFile, Throwable anError) {
+ EntityUtility.appendLineToField( ((EntityContent) aSession.getAttribute("content")), "comment",
+ "error with attachment: " + anError.toString());
+ ((EntityContent) aSession.getAttribute("content")).update();
+ }
+
+ public void processAttachment(Request aRequest, Session aSession, Attachment aFile) throws SessionExc, SessionFailure {
try {
Map values = new HashMap();
- values.put("title", aRequest.getParameter(aFile.getFieldName()+"_title"));
+ values.put("creator", aRequest.getParameter("creator"));
+ values.putAll(aFile.getAllAttributes());
values.put("creator", aRequest.getParameter("creator"));
values.put("to_publisher", "0");
values.put("is_published", "1");
values.put("is_produced", "1");
- ModuleMediafolder module = new ModuleMediafolder(DatabaseMediafolder.getInstance());
+ ModuleMediafolder module = new ModuleMediafolder();
values.put("to_media_folder", module.mediaFolderIdForName(configuration.getString("Localizer.OpenSession.article.DefaultMediaFolder")));
Entity mediaItem = MediaUploadProcessor.processMediaUpload(aFile, values);
MirGlobal.abuse().checkArticle(article, aRequest, null);
try {
- MirGlobal.localizer().openPostings().afterContentPosting(article);
+ MirGlobal.localizer().openPostings().afterArticlePosting(article);
}
catch (Throwable t) {
throw new SessionFailure(t);
}
logger.info("article posted");
- };
+ }
}