-- language
-CREATE SEQUENCE "language_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ;\r
-\r
+CREATE SEQUENCE "language_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ;
+
CREATE TABLE "language" (
"id" integer DEFAULT nextval('language_id_seq') NOT NULL,
"name" character varying(40) NOT NULL,
-- article type
-CREATE SEQUENCE "article_type_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ;\r
-\r
+CREATE SEQUENCE "article_type_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ;
+
CREATE TABLE "article_type" (
"id" integer DEFAULT nextval('article_type_id_seq') NOT NULL,
"name" character varying(40) NOT NULL,
CONSTRAINT "article_type_pkey" PRIMARY KEY ("id")
-);\r
+);
--
-- TOC Entry ID 24 (OID 20183)
"address" character varying(80),
"phone" character varying(20),
"webdb_create" timestamp with time zone NOT NULL,
+ "webdb_lastchange" timestamp with time zone,
"is_published" boolean DEFAULT '1' NOT NULL,
"to_language" integer DEFAULT '0' NOT NULL,
"to_media" integer NOT NULL,
-- comment_status
-CREATE SEQUENCE "comment_status_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ;\r
-\r
+CREATE SEQUENCE "comment_status_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1 cache 1 ;
+
CREATE TABLE "comment_status" (
"id" integer DEFAULT nextval('comment_status_id_seq') NOT NULL,
"name" character varying(40) NOT NULL,
CONSTRAINT "comment_status_pkey" PRIMARY KEY ("id")
);
-\r
+
--
-- TOC Entry ID 33 (OID 20588)
CREATE UNIQUE INDEX "idx_comment_id" on "comment" using btree ( "id" "int4_ops" );
+CREATE TABLE "comment_x_media" (
+ "comment_id" integer,
+ "media_id" integer
+);
+
+CREATE UNIQUE INDEX idx_comment_media on comment_x_media (comment_id, media_id);
+CREATE UNIQUE INDEX idx_media_comment on comment_x_media (media_id, comment_id);
--- /dev/null
+-- update script 2002-12-12 by Zapata
+-- * creates table comment_x_media, to support media in comments
+-- * adds webdb_lastchange to comment
+-- This script will the second time this script is run,
+-- so running this script when it isn't needed can't do any harm.
+--
+-- IMPORTANT: after running this script, run the update_all_sequences script as well
+
+BEGIN TRANSACTION;
+
+-- task 1: comment_x_media
+
+CREATE TABLE comment_x_media (
+ comment_id integer,
+ media_id integer
+);
+
+CREATE UNIQUE INDEX idx_comment_media on comment_x_media (comment_id, media_id);
+CREATE UNIQUE INDEX idx_media_comment on comment_x_media (media_id, comment_id);
+
+-- task 2: add webdb_lastchange to table comment
+
+ ALTER TABLE "comment" RENAME TO "comment_old";
+ DROP INDEX comment_pkey;
+
+ CREATE TABLE "comment" (
+ "id" integer DEFAULT nextval('comment_id_seq') NOT NULL,
+ "title" character varying(80) NOT NULL,
+ "creator" character varying(80) NOT NULL,
+ "description" text NOT NULL,
+ "main_url" character varying(255),
+ "email" character varying(80),
+ "address" character varying(80),
+ "phone" character varying(20),
+ "webdb_create" timestamp with time zone NOT NULL,
+ "webdb_lastchange" timestamp with time zone,
+ "is_published" boolean DEFAULT '1' NOT NULL,
+ "to_language" integer DEFAULT '0' NOT NULL,
+ "to_media" integer NOT NULL,
+ "to_comment_status" smallint,
+ "checksum" integer,
+ "is_html" boolean DEFAULT '0' NOT NULL,
+ Constraint "comment_pkey" Primary Key ("id")
+ );
+
+ INSERT INTO "comment" (
+ "id",
+ "title",
+ "creator",
+ "description",
+ "main_url",
+ "email",
+ "address",
+ "phone",
+ "webdb_create",
+ "webdb_lastchange",
+ "is_published",
+ "to_language",
+ "to_media",
+ "to_comment_status",
+ "checksum",
+ "is_html"
+ )
+ SELECT
+ "id",
+ "title",
+ "creator",
+ "description",
+ "main_url",
+ "email",
+ "address",
+ "phone",
+ "webdb_create",
+ "webdb_create",
+ "is_published",
+ "to_language",
+ "to_media",
+ "to_comment_status",
+ "checksum",
+ "is_html"
+ FROM "comment_old";
+
+ UPDATE pg_class
+ SET
+ relowner = (SELECT relowner FROM pg_class WHERE relname='comment_old'),
+ relacl = (SELECT relacl FROM pg_class WHERE relname='comment_old')
+ WHERE
+ relname = 'comment';
+
+ DROP TABLE "comment_old";
+
+ CREATE INDEX "comment_checksum_index" on "comment" using btree ( "checksum" "int4_ops" );
+ CREATE INDEX "idx_comment_to_media" on "comment" using btree ( "to_media" "int4_ops" );
+ create index idx_comment_webdb_create on comment(webdb_create);
+ CREATE INDEX "idx_comment_tomedia_ispublished" on "comment" using btree ( "to_media" "int4_ops", "is_published" "bool_ops" );
+ CREATE UNIQUE INDEX "idx_comment_id" on "comment" using btree ( "id" "int4_ops" );
+
+-- that's it!
+
+COMMIT TRANSACTION;
-/*
- * 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.entity;
-
-import java.util.Map;
-
-import mir.entity.Entity;
-import mir.storage.StorageObject;
-
-/**
- * This class maps one line of the comment-table to a java-object.
- *
- * @author $Author: zapata $
- * @version $Revision: 1.14 $ $Date: 2003/03/04 22:00:52 $
- */
-
-
-public class EntityComment extends Entity
-{
-
- public EntityComment()
- {
- super();
- }
-
- public EntityComment(StorageObject theStorage) {
- this();
- setStorage(theStorage);
- }
-
-
- /**
- * overridden method setValues to patch creator_main_url
- */
- public void setValues(Map theStringValues)
- {
- if (theStringValues != null) {
- if (!theStringValues.containsKey("is_published")) {
- theStringValues.put("is_published","0");
- }
-
- if (theStringValues.containsKey("main_url")){
- if (((String)theStringValues.get("main_url")).equalsIgnoreCase("http://")) {
- theStringValues.remove("main_url");
- }
- else if ((!((String)theStringValues.get("main_url")).startsWith("http://"))
- && ((String)theStringValues.get("main_url")).length()>0) {
- theStringValues.put("main_url","http://"+((String)theStringValues.get("main_url")));
- }
- }
-
- }
- super.setValues(theStringValues);
- }
-}
+/*\r
+ * Copyright (C) 2001, 2002 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with the com.oreilly.servlet library, any library\r
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced\r
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of\r
+ * the above that use the same license as the above), and distribute linked\r
+ * combinations including the two. You must obey the GNU General Public\r
+ * License in all respects for all of the code used other than the above\r
+ * mentioned libraries. If you modify this file, you may extend this exception\r
+ * to your version of the file, but you are not obligated to do so. If you do\r
+ * not wish to do so, delete this exception statement from your version.\r
+ */\r
+\r
+package mircoders.entity;\r
+\r
+import java.util.Map;\r
+\r
+import mir.entity.Entity;\r
+import mir.storage.StorageObject;\r
+import mir.storage.StorageObjectFailure;\r
+import mircoders.storage.DatabaseCommentToMedia;\r
+import mircoders.storage.DatabaseContent;\r
+\r
+/**\r
+ * This class maps one line of the comment-table to a java-object.\r
+ *\r
+ * @author $Author: zapata $\r
+ * @version $Revision: 1.15 $ $Date: 2003/04/10 03:31:46 $\r
+ */\r
+\r
+\r
+public class EntityComment extends Entity\r
+{\r
+\r
+ public EntityComment()\r
+ {\r
+ super();\r
+ }\r
+\r
+ public EntityComment(StorageObject theStorage) {\r
+ this();\r
+ setStorage(theStorage);\r
+ }\r
+\r
+\r
+ /**\r
+ * overridden method setValues to patch creator_main_url\r
+ */\r
+ public void setValues(Map theStringValues)\r
+ {\r
+ if (theStringValues != null) {\r
+ if (!theStringValues.containsKey("is_published")) {\r
+ theStringValues.put("is_published","0");\r
+ }\r
+\r
+ if (theStringValues.containsKey("main_url")){\r
+ if (((String)theStringValues.get("main_url")).equalsIgnoreCase("http://")) {\r
+ theStringValues.remove("main_url");\r
+ }\r
+ else if ((!((String)theStringValues.get("main_url")).startsWith("http://"))\r
+ && ((String)theStringValues.get("main_url")).length()>0) {\r
+ theStringValues.put("main_url","http://"+((String)theStringValues.get("main_url")));\r
+ }\r
+ }\r
+\r
+ }\r
+ super.setValues(theStringValues);\r
+ }\r
+\r
+ /**\r
+ * Deattaches media from a comment\r
+ *\r
+ * @param aCommentId\r
+ * @param aMediaId\r
+ * @throws StorageObjectFailure\r
+ */\r
+ public void dettach(String aCommentId,String aMediaId) throws StorageObjectFailure\r
+ {\r
+ if (aMediaId!=null){\r
+ try{\r
+ DatabaseCommentToMedia.getInstance().delete(aCommentId, aMediaId);\r
+ }\r
+ catch (Exception e){\r
+ throwStorageObjectFailure(e, "dettach: failed to get instance");\r
+ }\r
+\r
+ DatabaseContent.getInstance().setUnproduced("id="+getValue("to_media"));\r
+ }\r
+ }\r
+\r
+ /**\r
+ *\r
+ * @param aMediaId\r
+ * @throws StorageObjectFailure\r
+ */\r
+\r
+ public void attach(String aMediaId) throws StorageObjectFailure\r
+ {\r
+ if (aMediaId!=null) {\r
+ try{\r
+ DatabaseCommentToMedia.getInstance().addMedia(getId(), aMediaId);\r
+ }\r
+ catch(StorageObjectFailure e){\r
+ throwStorageObjectFailure(e, "attach: could not get the instance");\r
+ }\r
+\r
+ DatabaseContent.getInstance().setUnproduced("id="+getValue("to_media"));\r
+ }\r
+ else {\r
+ logger.error("EntityContent: attach without mid");\r
+ }\r
+ }\r
+}\r
* this class implements mapping of one line of the database table content
* to a java object
*
- * @version $Id: EntityContent.java,v 1.17 2003/03/05 19:23:15 idfx Exp $
+ * @version $Id: EntityContent.java,v 1.18 2003/04/10 03:31:47 zapata Exp $
* @author mir-coders group
*
*/
public EntityContent(StorageObject theStorage) {
this();
+
setStorage(theStorage);
}
}
}
-
- /**
- * make openposting to newswire
- */
-
- public void newswire() throws StorageObjectFailure
- {
- String sql = "update content set to_article_type='1', is_produced='0' where id='" + getId()+"'";
- try {
- theStorageObject.executeUpdate(sql);
- } catch (StorageObjectFailure e) {
- throwStorageObjectFailure(e, "\n -- newswire failed");
- } catch (SQLException e) {
- throwStorageObjectFailure(e, "\n -- newswire failed");
- }
- }
-
-
/**
- * dettach from media
+ * Deattaches media from an article
+ *
+ * @param anArticleId
+ * @param aMediaId
+ * @throws StorageObjectFailure
*/
- public void dettach(String cid,String mid) throws StorageObjectFailure
+ public void dettach(String anArticleId, String aMediaId) throws StorageObjectFailure
{
- if (mid!=null){
+ if (aMediaId!=null){
try{
- DatabaseContentToMedia.getInstance().delete(cid,mid);
+ DatabaseContentToMedia.getInstance().delete(anArticleId, aMediaId);
}
catch (Exception e){
throwStorageObjectFailure(e, "\n -- failed to get instance");
}
- //set Content to unproduced
setProduced(false);
}
}
/**
- * attach to media
+ * Attaches media to an article
+ *
+ * @param mid
+ * @throws StorageObjectFailure
*/
- public void attach(String mid) throws StorageObjectFailure
+ public void attach(String aMediaId) throws StorageObjectFailure
{
- if (mid!=null) {
- //write media-id mid and content-id in table content_x_media
+ if (aMediaId!=null) {
try{
- DatabaseContentToMedia.getInstance().addMedia(getId(),mid);
- } catch(StorageObjectFailure e){
+ DatabaseContentToMedia.getInstance().addMedia(getId(),aMediaId);
+ }
+ catch(StorageObjectFailure e){
throwStorageObjectFailure(e, "attach: could not get the instance");
}
- //set Content to unproduced
setProduced(false);
}
else {
package mircoders.entity;
-import java.util.Map;
-import java.sql.SQLException;
-
-import freemarker.template.SimpleList;
-import freemarker.template.SimpleScalar;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-
-import mir.entity.Entity;
-import mir.entity.EntityList;
-import mir.log.LoggerWrapper;
-import mir.media.MediaHelper;
-import mir.media.MirMedia;
-import mir.misc.NumberUtils;
-import mir.storage.StorageObject;
-import mir.storage.StorageObjectFailure;
-import mircoders.storage.DatabaseContentToMedia;
+import java.sql.SQLException;\r
+import java.util.Map;\r
+\r
+import freemarker.template.SimpleList;\r
+import freemarker.template.SimpleScalar;\r
+import freemarker.template.TemplateModel;\r
+import freemarker.template.TemplateModelException;\r
+import mir.entity.Entity;\r
+import mir.log.LoggerWrapper;\r
+import mir.media.MediaHelper;\r
+import mir.media.MirMedia;\r
+import mir.misc.NumberUtils;\r
+import mir.storage.StorageObject;\r
+import mir.storage.StorageObjectFailure;\r
import mircoders.storage.DatabaseUploadedMedia;
/**
*
* @author mh, mir-coders group
- * @version $Id: EntityUploadedMedia.java,v 1.24 2003/03/16 19:54:45 zapata Exp $
+ * @version $Id: EntityUploadedMedia.java,v 1.25 2003/04/10 03:31:47 zapata Exp $
*/
anEntityAdapterDefinition.addCalculatedField("commentcount", new ContentCommentCountField(" and is_published='1'"));
anEntityAdapterDefinition.addCalculatedField("fullcommentcount", new ContentCommentCountField(""));
- anEntityAdapterDefinition.addCalculatedField("to_media_images", new ContentToMediaField( "image" ));
anEntityAdapterDefinition.addCalculatedField("to_uploaded_media", new ContentToMediaField( "uploadedMedia" ));
+ anEntityAdapterDefinition.addCalculatedField("to_media_images", new ContentToMediaField( "image" ));
anEntityAdapterDefinition.addCalculatedField("to_media_audio", new ContentToMediaField( "audio" ));
anEntityAdapterDefinition.addCalculatedField("to_media_video", new ContentToMediaField( "video" ));
anEntityAdapterDefinition.addCalculatedField("to_media_other", new ContentToMediaField( "otherMedia" ));
+ anEntityAdapterDefinition.addCalculatedField("to_all_uploaded_media", new ContentToMediaField( "uploadedMedia", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_images", new ContentToMediaField( "image", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_audio", new ContentToMediaField( "audio", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_video", new ContentToMediaField( "video", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_other", new ContentToMediaField( "otherMedia", false));
anEntityAdapterDefinition.addCalculatedField("to_media_icon", new ContentToIconField());
anEntityAdapterDefinition.addCalculatedField("article_type", new ContentToArticleTypeField());
anEntityAdapterDefinition.addCalculatedField("to_content", new CommentToContentField());
anEntityAdapterDefinition.addCalculatedField("status", new CommentToStatusField());
+ anEntityAdapterDefinition.addCalculatedField("to_uploaded_media", new CommentToMediaField( "uploadedMedia" ));
+ anEntityAdapterDefinition.addCalculatedField("to_media_images", new CommentToMediaField( "image" ));
+ anEntityAdapterDefinition.addCalculatedField("to_media_audio", new CommentToMediaField( "audio" ));
+ anEntityAdapterDefinition.addCalculatedField("to_media_video", new CommentToMediaField( "video" ));
+ anEntityAdapterDefinition.addCalculatedField("to_media_other", new CommentToMediaField( "otherMedia" ));
+ anEntityAdapterDefinition.addCalculatedField("to_all_uploaded_media", new CommentToMediaField( "uploadedMedia", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_images", new CommentToMediaField( "image", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_audio", new CommentToMediaField( "audio", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_video", new CommentToMediaField( "video", false));
+ anEntityAdapterDefinition.addCalculatedField("to_all_media_other", new CommentToMediaField( "otherMedia", false));
+
anEntityAdapterDefinition.addCalculatedField("description_parsed", new FilteredField("description"));
anEntityAdapterDefinition.addCalculatedField("operations",
new EntityToSimpleOperationsField(MirGlobal.localizer().adminInterface().simpleCommentOperations()));
}
protected class ContentToMediaField implements EntityAdapterDefinition.CalculatedField {
- String definition;
+ private String definition;
+ private boolean published;
+
+ public ContentToMediaField(String aDefinition, boolean anOnlyPublished) {
+ definition = aDefinition;
+ published = anOnlyPublished;
+ }
public ContentToMediaField(String aDefinition) {
+ this(aDefinition, true);
+ }
+
+ public Object getValue(EntityAdapter anEntityAdapter) {
+ try {
+ String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
+ if (published)
+ condition = "is_published='t' and " + condition;
+ return anEntityAdapter.getRelation(
+ condition,
+ "id",
+ definition);
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+ }
+
+ protected class CommentToMediaField implements EntityAdapterDefinition.CalculatedField {
+ private String definition;
+ private boolean published;
+
+ public CommentToMediaField(String aDefinition, boolean anOnlyPublished) {
definition = aDefinition;
+ published = anOnlyPublished;
+ }
+
+ public CommentToMediaField(String aDefinition) {
+ this(aDefinition, true);
}
public Object getValue(EntityAdapter anEntityAdapter) {
try {
+ String condition = "exists (select * from comment_x_media where comment_id="+anEntityAdapter.get("id")+" and media_id=id)";
+ if (published)
+ condition = "is_published='t' and " + condition;
return anEntityAdapter.getRelation(
- "is_published='t' and exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)",
+ condition,
"id",
definition);
}
-/*
- * 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.util.Map;
-import java.util.Locale;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import mir.config.MirPropertiesConfiguration;
-import mir.entity.adapter.EntityAdapterModel;
-import mir.entity.adapter.EntityIteratorAdapter;
-import mir.log.LoggerWrapper;
-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.URLBuilder;
-import mircoders.global.MirGlobal;
-import mircoders.module.ModuleComment;
-import mircoders.module.ModuleContent;
-import mircoders.storage.DatabaseComment;
-import mircoders.storage.DatabaseCommentStatus;
-import mircoders.storage.DatabaseContent;
-import mircoders.storage.DatabaseLanguage;
-import freemarker.template.SimpleHash;
-import freemarker.template.TemplateModelRoot;
-
-/*
- * ServletModuleComment - controls navigation for Comments
- *
- *
- * @author RK
- */
-
-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");
-
-
- try {
- configuration = MirPropertiesConfiguration.instance();
- templateListString = configuration.getString("ServletModule.Comment.ListTemplate");
- templateObjektString = configuration.getString("ServletModule.Comment.ObjektTemplate");
- templateConfirmString = configuration.getString("ServletModule.Comment.ConfirmTemplate");
-
- mainModule = new ModuleComment(DatabaseComment.getInstance());
- moduleContent = new ModuleContent(DatabaseContent.getInstance());
- }
- catch (Exception e) {
- logger.error("servletmodule comment could not be initialized:" + e.getMessage());
- }
- }
-
- public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
- {
- String idParam = req.getParameter("id");
-
- if (idParam == null)
- throw new ServletModuleExc("Invalid call: id not supplied ");
-
- showComment(idParam, req, res);
- }
-
- public void showComment(String anId, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {
- try {
- SimpleHash extraInfo = new SimpleHash();
- TemplateModelRoot data;
-
- data = (TemplateModelRoot) mainModule.getById(anId);
-
- extraInfo.put("languages", DatabaseLanguage.getInstance().getPopupData());
- extraInfo.put("comment_status_values", DatabaseCommentStatus.getInstance().getPopupData());
-
- deliver(aRequest, aResponse, data, extraInfo, templateObjektString);
- }
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
-
-
- 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);
-
- returnCommentList(aRequest, aResponse, where, order, offset);
- }
-
- 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");
-
- if (searchIsPublished.equals("0")) {
- queryBuilder.appendAndCondition("is_published='f'");
- }
- else if (searchIsPublished.equals("1")) {
- queryBuilder.appendAndCondition("is_published='t'");
- }
-
- if (searchText.length()>0) {
- queryBuilder.appendAndCondition(
- "lower("+ searchField + ") like " +
- "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'");
- }
-
- if (searchStatus.length()>0) {
- queryBuilder.appendAndCondition("to_comment_status="+Integer.parseInt(searchStatus));
- }
-
- if (searchOrder.length()>0) {
- if (searchOrder.equals("datedesc"))
- queryBuilder.appendAscendingOrder("webdb_create");
- else if (searchOrder.equals("dateasc"))
- queryBuilder.appendDescendingOrder("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, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0);
- }
-
- public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
- {
- String articleIdString = req.getParameter("articleid");
- int articleId;
-
- try {
- articleId = Integer.parseInt(articleIdString);
-
- returnCommentList( req, res, "to_media="+articleId, "webdb_create desc", 0);
- }
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
-
- public void returnCommentList(HttpServletRequest aRequest, HttpServletResponse aResponse,
- String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc {
- // ML: experiment in using the producer's generation system instead of the
- // old one...
-
- HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
- URLBuilder urlBuilder = new URLBuilder();
- EntityAdapterModel model;
- int nrCommentsPerPage = 20;
- int count;
-
- try {
- Map responseData = ServletHelper.makeGenerationData(new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
- model = MirGlobal.localizer().dataModel().adapterModel();
-
- Object commentList =
- new CachingRewindableIterator(
- new EntityIteratorAdapter( aWhereClause, anOrderByClause, nrCommentsPerPage,
- MirGlobal.localizer().dataModel().adapterModel(), "comment", nrCommentsPerPage, 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);
- 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" , new Integer(anOffset).toString());
- responseData.put("thisurl" , urlBuilder.getQuery());
-
- if (count>=anOffset+nrCommentsPerPage) {
- urlBuilder.setValue("offset", anOffset + nrCommentsPerPage);
- responseData.put("nexturl" , urlBuilder.getQuery());
- }
-
- if (anOffset>0) {
- urlBuilder.setValue("offset", Math.max(anOffset - nrCommentsPerPage, 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)));
-
- ServletHelper.generateResponse(aResponse.getWriter(), responseData, "commentlist.template");
- }
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
-}
-
+/*\r
+ * Copyright (C) 2001, 2002 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with the com.oreilly.servlet library, any library\r
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced\r
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of\r
+ * the above that use the same license as the above), and distribute linked\r
+ * combinations including the two. You must obey the GNU General Public\r
+ * License in all respects for all of the code used other than the above\r
+ * mentioned libraries. If you modify this file, you may extend this exception\r
+ * to your version of the file, but you are not obligated to do so. If you do\r
+ * not wish to do so, delete this exception statement from your version.\r
+ */\r
+\r
+package mircoders.servlet;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Locale;\r
+import java.util.Map;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+\r
+import mir.config.MirPropertiesConfiguration;\r
+import mir.entity.adapter.EntityAdapterModel;\r
+import mir.entity.adapter.EntityIteratorAdapter;\r
+import mir.log.LoggerWrapper;\r
+import mir.servlet.ServletModule;\r
+import mir.servlet.ServletModuleExc;\r
+import mir.servlet.ServletModuleFailure;\r
+import mir.util.CachingRewindableIterator;\r
+import mir.util.HTTPRequestParser;\r
+import mir.util.JDBCStringRoutines;\r
+import mir.util.SQLQueryBuilder;\r
+import mir.util.URLBuilder;\r
+import mircoders.entity.EntityComment;\r
+import mircoders.global.MirGlobal;\r
+import mircoders.module.ModuleComment;\r
+import mircoders.module.ModuleContent;\r
+import mircoders.storage.DatabaseComment;\r
+import mircoders.storage.DatabaseContent;\r
+\r
+/*\r
+ * ServletModuleComment - controls navigation for Comments\r
+ *\r
+ *\r
+ * @author RK\r
+ */\r
+\r
+public class ServletModuleComment extends ServletModule\r
+{\r
+ private ModuleContent moduleContent;\r
+\r
+ private static ServletModuleComment instance = new ServletModuleComment();\r
+ public static ServletModule getInstance() { return instance; }\r
+\r
+ private ServletModuleComment() {\r
+ logger = new LoggerWrapper("ServletModule.Comment");\r
+ try {\r
+ configuration = MirPropertiesConfiguration.instance();\r
+ templateListString = configuration.getString("ServletModule.Comment.ListTemplate");\r
+ templateObjektString = configuration.getString("ServletModule.Comment.ObjektTemplate");\r
+ templateConfirmString = configuration.getString("ServletModule.Comment.ConfirmTemplate");\r
+\r
+ mainModule = new ModuleComment(DatabaseComment.getInstance());\r
+ moduleContent = new ModuleContent(DatabaseContent.getInstance());\r
+ }\r
+ catch (Exception e) {\r
+ logger.error("servletmodule comment could not be initialized:" + e.getMessage());\r
+ }\r
+ }\r
+\r
+ public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc\r
+ {\r
+ String idParam = req.getParameter("id");\r
+\r
+ if (idParam == null)\r
+ throw new ServletModuleExc("Invalid call: id not supplied ");\r
+\r
+ showComment(idParam, req, res);\r
+ }\r
+\r
+ public void showComment(String anId, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
+ try {\r
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
+ Map responseData = ServletHelper.makeGenerationData(new Locale[] {getLocale(aRequest), getFallbackLocale(aRequest)});\r
+ EntityAdapterModel model = MirGlobal.localizer().dataModel().adapterModel();\r
+ Map comment;\r
+ URLBuilder urlBuilder = new URLBuilder();\r
+\r
+ urlBuilder.setValue("module", "Comment");\r
+ urlBuilder.setValue("do", "edit");\r
+ urlBuilder.setValue("id", anId);\r
+ urlBuilder.setValue("returnurl", requestParser.getParameter("returnurl"));\r
+\r
+ if (anId != null) {\r
+ responseData.put("new", Boolean.FALSE);\r
+ comment = model.makeEntityAdapter("comment", mainModule.getById(anId));\r
+ }\r
+ else {\r
+ List fields = DatabaseComment.getInstance().getFields();\r
+ responseData.put("new", Boolean.TRUE);\r
+ comment = new HashMap();\r
+ Iterator i = fields.iterator();\r
+ while (i.hasNext()) {\r
+ comment.put(i.next(), null);\r
+ }\r
+\r
+// MirGlobal.localizer().adminInterface().initializeArticle(article);\r
+ }\r
+ responseData.put("comment", comment);\r
+\r
+ responseData.put("returnurl", requestParser.getParameter("returnurl"));\r
+ responseData.put("thisurl", urlBuilder.getQuery());\r
+\r
+ ServletHelper.generateResponse(aResponse.getWriter(), responseData, templateObjektString);\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+\r
+ public void attach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc\r
+ {\r
+ String mediaIdParam = req.getParameter("mid");\r
+ String commentId = req.getParameter("commentid");\r
+\r
+ if (commentId == null || mediaIdParam==null) throw new ServletModuleExc("smod comment :: attach :: commentid/mid missing");\r
+\r
+ try {\r
+ EntityComment comment = (EntityComment) mainModule.getById(commentId);\r
+ comment.attach(mediaIdParam);\r
+ }\r
+ catch(Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+\r
+ showComment(commentId, req, res);\r
+ }\r
+\r
+ public void dettach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc\r
+ {\r
+ String commentId = req.getParameter("commentid");\r
+ String midParam = req.getParameter("mid");\r
+ if (commentId == null)\r
+ throw new ServletModuleExc("smod comment :: dettach :: commentid missing");\r
+ if (midParam == null)\r
+ throw new ServletModuleExc("smod comment :: dettach :: mid missing");\r
+\r
+ try {\r
+ EntityComment comment = (EntityComment)mainModule.getById(commentId);\r
+ comment.dettach(commentId, midParam);\r
+ }\r
+ catch(Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+\r
+ showComment(commentId, req, res);\r
+ }\r
+\r
+\r
+ public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc\r
+ {\r
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
+\r
+ String where = requestParser.getParameter("where");\r
+ String order = requestParser.getParameterWithDefault("order", "webdb_create desc");\r
+ int offset = requestParser.getIntegerWithDefault("offset", 0);\r
+\r
+ returnCommentList(aRequest, aResponse, where, order, offset);\r
+ }\r
+\r
+ public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc\r
+ {\r
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
+ SQLQueryBuilder queryBuilder = new SQLQueryBuilder();\r
+\r
+ String queryField = "";\r
+ String searchField = requestParser.getParameter("searchfield");\r
+ String searchText = requestParser.getParameter("searchtext");\r
+ String searchIsPublished = requestParser.getParameter("searchispublished");\r
+ String searchStatus = requestParser.getParameter("searchstatus");\r
+ String searchOrder = requestParser.getParameter("searchorder");\r
+\r
+ if (searchIsPublished.equals("0")) {\r
+ queryBuilder.appendAndCondition("is_published='f'");\r
+ }\r
+ else if (searchIsPublished.equals("1")) {\r
+ queryBuilder.appendAndCondition("is_published='t'");\r
+ }\r
+\r
+ if (searchText.length()>0) {\r
+ queryBuilder.appendAndCondition(\r
+ "lower("+ searchField + ") like " +\r
+ "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'");\r
+ }\r
+\r
+ if (searchStatus.length()>0) {\r
+ queryBuilder.appendAndCondition("to_comment_status="+Integer.parseInt(searchStatus));\r
+ }\r
+\r
+ if (searchOrder.length()>0) {\r
+ if (searchOrder.equals("datedesc"))\r
+ queryBuilder.appendAscendingOrder("webdb_create");\r
+ else if (searchOrder.equals("dateasc"))\r
+ queryBuilder.appendDescendingOrder("webdb_create");\r
+ else if (searchOrder.equals("articletitle"))\r
+ queryBuilder.appendAscendingOrder("(select content.title from content where content.id = comment.to_media)");\r
+ else if (searchOrder.equals("creator"))\r
+ queryBuilder.appendDescendingOrder("creator");\r
+ }\r
+\r
+ returnCommentList(aRequest, aResponse, queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), 0);\r
+ }\r
+\r
+ public void articlecomments(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc\r
+ {\r
+ String articleIdString = req.getParameter("articleid");\r
+ int articleId;\r
+\r
+ try {\r
+ articleId = Integer.parseInt(articleIdString);\r
+\r
+ returnCommentList( req, res, "to_media="+articleId, "webdb_create desc", 0);\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+\r
+ public void returnCommentList(HttpServletRequest aRequest, HttpServletResponse aResponse,\r
+ String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc {\r
+\r
+ HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
+ URLBuilder urlBuilder = new URLBuilder();\r
+ EntityAdapterModel model;\r
+ int nrCommentsPerPage = 20;\r
+ int count;\r
+\r
+ try {\r
+ Map responseData = ServletHelper.makeGenerationData(new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});\r
+ model = MirGlobal.localizer().dataModel().adapterModel();\r
+\r
+ Object commentList =\r
+ new CachingRewindableIterator(\r
+ new EntityIteratorAdapter( aWhereClause, anOrderByClause, nrCommentsPerPage,\r
+ MirGlobal.localizer().dataModel().adapterModel(), "comment", nrCommentsPerPage, anOffset)\r
+ );\r
+\r
+ responseData.put("nexturl", null);\r
+ responseData.put("prevurl", null);\r
+\r
+ count=mainModule.getSize(aWhereClause);\r
+\r
+ urlBuilder.setValue("module", "Comment");\r
+ urlBuilder.setValue("do", "list");\r
+ urlBuilder.setValue("where", aWhereClause);\r
+ urlBuilder.setValue("order", anOrderByClause);\r
+\r
+ urlBuilder.setValue("searchfield", requestParser.getParameter("searchfield"));\r
+ urlBuilder.setValue("searchtext", requestParser.getParameter("searchtext"));\r
+ urlBuilder.setValue("searchispublished", requestParser.getParameter("searchispublished"));\r
+ urlBuilder.setValue("searchstatus", requestParser.getParameter("searchstatus"));\r
+ urlBuilder.setValue("searchorder", requestParser.getParameter("searchorder"));\r
+\r
+ responseData.put("searchfield", requestParser.getParameter("searchfield"));\r
+ responseData.put("searchtext", requestParser.getParameter("searchtext"));\r
+ responseData.put("searchispublished", requestParser.getParameter("searchispublished"));\r
+ responseData.put("searchstatus", requestParser.getParameter("searchstatus"));\r
+ responseData.put("searchorder", requestParser.getParameter("searchorder"));\r
+\r
+ urlBuilder.setValue("offset", anOffset);\r
+ responseData.put("offset" , new Integer(anOffset).toString());\r
+ responseData.put("thisurl" , urlBuilder.getQuery());\r
+\r
+ if (count>=anOffset+nrCommentsPerPage) {\r
+ urlBuilder.setValue("offset", anOffset + nrCommentsPerPage);\r
+ responseData.put("nexturl" , urlBuilder.getQuery());\r
+ }\r
+\r
+ if (anOffset>0) {\r
+ urlBuilder.setValue("offset", Math.max(anOffset - nrCommentsPerPage, 0));\r
+ responseData.put("prevurl" , urlBuilder.getQuery());\r
+ }\r
+\r
+ responseData.put("comments", commentList);\r
+ responseData.put("from" , Integer.toString(anOffset+1));\r
+ responseData.put("count", Integer.toString(count));\r
+ responseData.put("to", Integer.toString(Math.min(anOffset+nrCommentsPerPage, count)));\r
+\r
+ ServletHelper.generateResponse(aResponse.getWriter(), responseData, "commentlist.template");\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+}\r
+\r
package mircoders.servlet;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Locale;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.lucene.index.IndexReader;
-import freemarker.template.SimpleHash;
-import mir.entity.adapter.EntityAdapterModel;
-import mir.entity.adapter.EntityIteratorAdapter;
-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.URLBuilder;
-
-import mircoders.entity.EntityContent;
-import mircoders.entity.EntityUsers;
-import mircoders.global.MirGlobal;
-import mircoders.module.ModuleContent;
-import mircoders.search.IndexUtil;
-import mircoders.storage.DatabaseComment;
-import mircoders.storage.DatabaseContent;
+import java.util.GregorianCalendar;\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Locale;\r
+import java.util.Map;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import javax.servlet.http.HttpSession;\r
+\r
+import org.apache.lucene.index.IndexReader;\r
+import freemarker.template.SimpleHash;\r
+import mir.entity.adapter.EntityAdapterModel;\r
+import mir.entity.adapter.EntityIteratorAdapter;\r
+import mir.log.LoggerWrapper;\r
+import mir.misc.StringUtil;\r
+import mir.servlet.ServletModule;\r
+import mir.servlet.ServletModuleExc;\r
+import mir.servlet.ServletModuleFailure;\r
+import mir.util.CachingRewindableIterator;\r
+import mir.util.HTTPRequestParser;\r
+import mir.util.JDBCStringRoutines;\r
+import mir.util.SQLQueryBuilder;\r
+import mir.util.URLBuilder;\r
+import mircoders.entity.EntityContent;\r
+import mircoders.entity.EntityUsers;\r
+import mircoders.global.MirGlobal;\r
+import mircoders.module.ModuleContent;\r
+import mircoders.search.IndexUtil;\r
+import mircoders.storage.DatabaseComment;\r
+import mircoders.storage.DatabaseContent;\r
+import mircoders.storage.DatabaseContentToMedia;\r
import mircoders.storage.DatabaseContentToTopics;
-import mircoders.storage.DatabaseContentToMedia;
/*
* ServletModuleContent -
* deliver html for the article admin form.
*
- * @version $Id: ServletModuleContent.java,v 1.47 2003/04/09 02:06:09 zapata Exp $
+ * @version $Id: ServletModuleContent.java,v 1.48 2003/04/10 03:31:47 zapata Exp $
* @author rk, mir-coders
*
*/
public void attach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
{
String mediaIdParam = req.getParameter("mid");
- String idParam = req.getParameter("cid");
- if (idParam == null||mediaIdParam==null) throw new ServletModuleExc("smod content :: attach :: cid/mid missing");
+ String articleId = req.getParameter("articleid");
+
+ if (articleId == null || mediaIdParam==null)
+ throw new ServletModuleExc("smod content :: attach :: articleid/mid missing");
try {
- EntityContent entContent = (EntityContent)mainModule.getById(idParam);
+ EntityContent entContent = (EntityContent) mainModule.getById(articleId);
entContent.attach(mediaIdParam);
}
catch(Throwable e) {
- logger.error("smod content :: attach :: could not get entityContent");
+ throw new ServletModuleFailure(e);
}
- _showObject(idParam, req, res);
+ _showObject(articleId, req, res);
}
public void dettach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
{
- String cidParam = req.getParameter("cid");
+ String articleId = req.getParameter("articleid");
String midParam = req.getParameter("mid");
- if (cidParam == null)
- throw new ServletModuleExc("smod content :: dettach :: cid missing");
+ if (articleId == null)
+ throw new ServletModuleExc("smod content :: dettach :: articleid missing");
if (midParam == null)
throw new ServletModuleExc("smod content :: dettach :: mid missing");
try {
- EntityContent entContent = (EntityContent)mainModule.getById(cidParam);
- entContent.dettach(cidParam,midParam);
+ EntityContent entContent = (EntityContent)mainModule.getById(articleId);
+ entContent.dettach(articleId, midParam);
}
catch(Throwable e) {
- logger.error("smod content :: dettach :: could not get entityContent");
+ throw new ServletModuleFailure(e);
}
- _showObject(cidParam, req, res);
+ _showObject(articleId, req, res);
}
public void update(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc
* open-postings to the newswire
*
* @author mir-coders group
- * @version $Id: ServletModuleOpenIndy.java,v 1.71 2003/04/09 02:06:09 zapata Exp $
+ * @version $Id: ServletModuleOpenIndy.java,v 1.72 2003/04/10 03:31:47 zapata Exp $
*
*/
throw new ServletModuleFailure(e);
}
}
-
-
}
-
-
-
-/*
- * 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.InputStream;
-import java.net.URLEncoder;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import mir.config.MirPropertiesConfiguration;
-import mir.entity.Entity;
-import mir.entity.EntityList;
-import mir.log.LoggerWrapper;
-import mir.media.MediaHelper;
-import mir.media.MirMedia;
-import mir.misc.FileHandler;
-import mir.misc.WebdbMultipartRequest;
-import mir.servlet.ServletModule;
-import mir.servlet.ServletModuleExc;
-import mir.servlet.ServletModuleFailure;
-import mir.servlet.ServletModuleUserExc;
-import mir.util.ExceptionFunctions;
-import mircoders.entity.EntityContent;
-import mircoders.entity.EntityUploadedMedia;
-import mircoders.entity.EntityUsers;
-import mircoders.media.MediaRequest;
-import mircoders.media.UnsupportedMediaFormatExc;
-import mircoders.storage.DatabaseContent;
-import mircoders.storage.DatabaseMediafolder;
-import freemarker.template.SimpleHash;
-import freemarker.template.SimpleList;
-
-/*
- * ServletModuleBilder -
- * liefert HTML fuer Bilder
- *
- * @version $Id: ServletModuleUploadedMedia.java,v 1.23 2003/03/09 19:14:21 idfx Exp $
- * @author RK, the mir-coders group
- */
-
-public abstract class ServletModuleUploadedMedia
- extends mir.servlet.ServletModule {
-
- //private static DatabaseRights dbRights;
-
- public static ServletModule getInstance() {
- return null;
- }
-
- public ServletModuleUploadedMedia() {
- super();
- logger = new LoggerWrapper("ServletModule.UploadedMedia");
- }
-
- public void insert(HttpServletRequest req, HttpServletResponse res)
- throws ServletModuleExc, ServletModuleUserExc {
- try {
- EntityUsers user = _getUser(req);
- MediaRequest mediaReq = new MediaRequest(user.getId(), false);
- WebdbMultipartRequest mp = new WebdbMultipartRequest(req, (FileHandler)mediaReq);
- EntityList mediaList = mediaReq.getEntityList();
- String articleid = (String) mp.getParameters().get("articleid");
-
- if (articleid!=null) {
- EntityContent entContent = (EntityContent) DatabaseContent.getInstance().selectById(articleid);
-
- mediaList.rewind();
-
- while (mediaList.hasNext()) {
- entContent.attach( ( (EntityUploadedMedia) mediaList.next()).getId());
- }
- mediaList.rewind();
-
- ((ServletModuleContent) ServletModuleContent.getInstance())._showObject(articleid, req, res);
-
- return;
- }
-
- SimpleHash mergeData = new SimpleHash();
- SimpleHash popups = new SimpleHash();
- mergeData.put("contentlist", mediaList);
- if (mediaList.getOrder() != null) {
- mergeData.put("order", mediaList.getOrder());
- mergeData.put("order_encoded", URLEncoder.encode(mediaList.getOrder()));
- }
- mergeData.put("count", (new Integer(mediaList.getCount())).toString());
- mergeData.put("from", (new Integer(mediaList.getFrom())).toString());
- mergeData.put("to", (new Integer(mediaList.getTo())).toString());
- if (mediaList.hasNextBatch())
- mergeData.put("next", (new Integer(mediaList.getNextBatch())).toString());
- if (mediaList.hasPrevBatch())
- mergeData.put("prev", (new Integer(mediaList.getPrevBatch())).toString());
- //fetch the popups
- popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());
- // raus damit
- deliver(req, res, mergeData, popups, templateListString);
- }
- catch (Throwable t) {
- Throwable cause = ExceptionFunctions.traceCauseException(t);
-
- if (cause instanceof UnsupportedMediaFormatExc) {
- throw new ServletModuleUserExc("media.error.unsupportedformat", new String[] {});
- }
- throw new ServletModuleFailure("ServletModuleUploadedMedia.insert: " + t.toString(), t);
- }
- }
-
- public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {
-
- try {
- EntityUsers user = _getUser(req);
- WebdbMultipartRequest mp = new WebdbMultipartRequest(req, null);
- Map parameters = mp.getParameters();
-
- parameters.put("to_publisher", user.getId());
- parameters.put("is_produced", "0");
- if (!parameters.containsKey("is_published"))
- parameters.put("is_published", "0");
-
- String id = mainModule.set(parameters);
- logger.debug("update: media ID = " + id);
- _edit(id, req, res);
- }
- catch (Throwable e) {
- throw new ServletModuleFailure("upload -- exception " + e.toString(), e);
- }
-
- }
-
-
- public void list(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {
- // Parameter auswerten
- SimpleHash mergeData = new SimpleHash();
- SimpleHash popups = 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 query_media_folder = req.getParameter("query_media_folder");
- mergeData.put("query_media_folder", query_media_folder);
- String offset = req.getParameter("offset");
- if (offset == null || offset.equals("")) offset = "0";
- mergeData.put("offset", offset);
-
- String order = req.getParameter("order");
- if (order == null || order.equals("")) order = "webdb_lastchange desc";
-
- // if in connection mode to content
- String cid = req.getParameter("cid");
- mergeData.put("cid", cid);
-
-
- // 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;
- }
- if (query_media_folder != null && !query_media_folder.equals("")) {
- if (isFirst == false) whereClause += " and ";
- whereClause += "to_media_folder='" + query_media_folder + "'";
- }
- //theLog.printDebugInfo("sql-whereclause: " + whereClause + " order: " + order + " offset: " + offset);
-
- // fetch and deliver
- try {
- if (query_text != null || query_is_published != null || query_media_folder != null) {
- EntityList theList = mainModule.getByWhereClause(whereClause, order, (new Integer(offset)).intValue(), 10);
- if (theList != null) {
- mergeData.put("contentlist", theList);
- if (theList.getOrder() != null) {
- mergeData.put("order", theList.getOrder());
- mergeData.put("order_encoded", URLEncoder.encode(theList.getOrder()));
- }
- mergeData.put("count", (new Integer(theList.getCount())).toString());
- mergeData.put("from", (new Integer(theList.getFrom())).toString());
- mergeData.put("to", (new Integer(theList.getTo())).toString());
- if (theList.hasNextBatch())
- mergeData.put("next", (new Integer(theList.getNextBatch())).toString());
- if (theList.hasPrevBatch())
- mergeData.put("prev", (new Integer(theList.getPrevBatch())).toString());
- }
- }
- popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());
-
- deliver(req, res, mergeData, popups, templateListString);
- }
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
-
-
- public void add(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {
- try {
- SimpleHash mergeData = new SimpleHash();
- SimpleHash popups = new SimpleHash();
- String maxMedia = MirPropertiesConfiguration.instance().getString("ServletModule.OpenIndy.MaxMediaUploadItems");
- String numOfMedia = req.getParameter("medianum");
-
- mergeData.put("new", "1");
- mergeData.put("articleid", req.getParameter("articleid"));
-
- popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());
-
- 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<mediaNum;i++){
- Integer mNum = new Integer(i+1);
- mediaFields.add(mNum.toString());
- }
- mergeData.put("medianum",numOfMedia);
- mergeData.put("mediafields",mediaFields);
- deliver(req, res, mergeData, popups, templateObjektString);
- }
- catch (Exception e) {
- throw new ServletModuleFailure(e);
- }
- }
-
- public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {
- String idParam = req.getParameter("id");
- _edit(idParam, req, res);
- }
-
- private void _edit(String idParam, HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {
- if (idParam != null && !idParam.equals("")) {
- try {
- SimpleHash popups = new SimpleHash();
- popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());
- deliver(req, res, mainModule.getById(idParam), popups,
- templateObjektString);
- }
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
- else {
- throw new ServletModuleExc("ServletmoduleUploadedMedia :: _edit without id");
- }
- }
-
-
- /** @todo should be in ServletModule.java */
- private EntityUsers _getUser(HttpServletRequest req) {
- HttpSession session = req.getSession(false);
- return (EntityUsers) session.getAttribute("login.uid");
- }
-
- public void getMedia(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {
- String idParam = req.getParameter("id");
- if (idParam!=null && !idParam.equals("")) {
- try {
- EntityUploadedMedia ent = (EntityUploadedMedia)mainModule.getById(idParam);
- Entity mediaType = ent.getMediaType();
- MirMedia mediaHandler;
-
- ServletContext ctx = MirPropertiesConfiguration.getContext();
- String fName = ent.getId()+"."+mediaType.getValue("name");
-
- mediaHandler = MediaHelper.getHandler(mediaType);
- InputStream in = mediaHandler.getMedia(ent, mediaType);
-
- res.setContentType(ctx.getMimeType(fName));
- //important that before calling this res.getWriter was not called first
- ServletOutputStream out = res.getOutputStream();
-
- int read ;
- byte[] buf = new byte[8 * 1024];
- while((read = in.read(buf)) != -1) {
- out.write(buf, 0, read);
- }
- in.close();
- out.close();
- }
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
- else logger.error("id not specified.");
- // no exception allowed
- }
-
- public void getIcon(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc
- {
- String idParam = req.getParameter("id");
- if (idParam!=null && !idParam.equals("")) {
- try {
- EntityUploadedMedia ent = (EntityUploadedMedia)mainModule.getById(idParam);
- Entity mediaType = ent.getMediaType();
- MirMedia mediaHandler;
-
- ServletContext ctx = MirPropertiesConfiguration.getContext();
- String fName = ent.getId()+"."+mediaType.getValue("name");
-
- mediaHandler = MediaHelper.getHandler(mediaType);
- InputStream in = mediaHandler.getIcon(ent);
-
- res.setContentType(ctx.getMimeType(fName));
- //important that before calling this res.getWriter was not called first
- ServletOutputStream out = res.getOutputStream();
-
- int read ;
- byte[] buf = new byte[8 * 1024];
- while((read = in.read(buf)) != -1) {
- out.write(buf, 0, read);
- }
- in.close();
- out.close();
- }
-
- catch (Throwable e) {
- throw new ServletModuleFailure(e);
- }
- }
- else logger.error("getIcon: id not specified.");
- // no exception allowed
- }
-
-}
-
-
+/*\r
+ * Copyright (C) 2001, 2002 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with the com.oreilly.servlet library, any library\r
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced\r
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of\r
+ * the above that use the same license as the above), and distribute linked\r
+ * combinations including the two. You must obey the GNU General Public\r
+ * License in all respects for all of the code used other than the above\r
+ * mentioned libraries. If you modify this file, you may extend this exception\r
+ * to your version of the file, but you are not obligated to do so. If you do\r
+ * not wish to do so, delete this exception statement from your version.\r
+ */\r
+\r
+package mircoders.servlet;\r
+\r
+import java.io.InputStream;\r
+import java.net.URLEncoder;\r
+import java.util.Map;\r
+import javax.servlet.ServletContext;\r
+import javax.servlet.ServletOutputStream;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import javax.servlet.http.HttpSession;\r
+\r
+import freemarker.template.SimpleHash;\r
+import freemarker.template.SimpleList;\r
+import mir.config.MirPropertiesConfiguration;\r
+import mir.entity.Entity;\r
+import mir.entity.EntityList;\r
+import mir.log.LoggerWrapper;\r
+import mir.media.MediaHelper;\r
+import mir.media.MirMedia;\r
+import mir.misc.FileHandler;\r
+import mir.misc.WebdbMultipartRequest;\r
+import mir.servlet.ServletModule;\r
+import mir.servlet.ServletModuleExc;\r
+import mir.servlet.ServletModuleFailure;\r
+import mir.servlet.ServletModuleUserExc;\r
+import mir.util.ExceptionFunctions;\r
+import mircoders.entity.EntityComment;\r
+import mircoders.entity.EntityContent;\r
+import mircoders.entity.EntityUploadedMedia;\r
+import mircoders.entity.EntityUsers;\r
+import mircoders.media.MediaRequest;\r
+import mircoders.media.UnsupportedMediaFormatExc;\r
+import mircoders.storage.DatabaseComment;\r
+import mircoders.storage.DatabaseContent;\r
+import mircoders.storage.DatabaseMediafolder;\r
+\r
+/*\r
+ * ServletModuleBilder -\r
+ * liefert HTML fuer Bilder\r
+ *\r
+ * @version $Id: ServletModuleUploadedMedia.java,v 1.24 2003/04/10 03:31:47 zapata Exp $\r
+ * @author RK, the mir-coders group\r
+ */\r
+\r
+public abstract class ServletModuleUploadedMedia\r
+ extends mir.servlet.ServletModule {\r
+\r
+ //private static DatabaseRights dbRights;\r
+\r
+ public static ServletModule getInstance() {\r
+ return null;\r
+ }\r
+\r
+ public ServletModuleUploadedMedia() {\r
+ super();\r
+ logger = new LoggerWrapper("ServletModule.UploadedMedia");\r
+ }\r
+\r
+ public void insert(HttpServletRequest req, HttpServletResponse res)\r
+ throws ServletModuleExc, ServletModuleUserExc {\r
+ try {\r
+ EntityUsers user = _getUser(req);\r
+ MediaRequest mediaReq = new MediaRequest(user.getId(), false);\r
+ WebdbMultipartRequest mp = new WebdbMultipartRequest(req, (FileHandler)mediaReq);\r
+ EntityList mediaList = mediaReq.getEntityList();\r
+ String articleid = (String) mp.getParameters().get("articleid");\r
+ String commentid = (String) mp.getParameters().get("commentid");\r
+\r
+ if (articleid!=null) {\r
+ EntityContent entContent = (EntityContent) DatabaseContent.getInstance().selectById(articleid);\r
+\r
+ mediaList.rewind();\r
+\r
+ while (mediaList.hasNext()) {\r
+ entContent.attach( ( (EntityUploadedMedia) mediaList.next()).getId());\r
+ }\r
+ mediaList.rewind();\r
+\r
+ ((ServletModuleContent) ServletModuleContent.getInstance())._showObject(articleid, req, res);\r
+\r
+ return;\r
+ }\r
+\r
+ if (commentid!=null) {\r
+ EntityComment comment = (EntityComment) DatabaseComment.getInstance().selectById(commentid);\r
+\r
+ mediaList.rewind();\r
+\r
+ while (mediaList.hasNext()) {\r
+ comment.attach( ( (EntityUploadedMedia) mediaList.next()).getId());\r
+ }\r
+ mediaList.rewind();\r
+\r
+ ((ServletModuleComment) ServletModuleComment.getInstance()).showComment(commentid, req, res);\r
+\r
+ return;\r
+ }\r
+\r
+ SimpleHash mergeData = new SimpleHash();\r
+ SimpleHash popups = new SimpleHash();\r
+ mergeData.put("contentlist", mediaList);\r
+ if (mediaList.getOrder() != null) {\r
+ mergeData.put("order", mediaList.getOrder());\r
+ mergeData.put("order_encoded", URLEncoder.encode(mediaList.getOrder()));\r
+ }\r
+ mergeData.put("count", (new Integer(mediaList.getCount())).toString());\r
+ mergeData.put("from", (new Integer(mediaList.getFrom())).toString());\r
+ mergeData.put("to", (new Integer(mediaList.getTo())).toString());\r
+ if (mediaList.hasNextBatch())\r
+ mergeData.put("next", (new Integer(mediaList.getNextBatch())).toString());\r
+ if (mediaList.hasPrevBatch())\r
+ mergeData.put("prev", (new Integer(mediaList.getPrevBatch())).toString());\r
+ //fetch the popups\r
+ popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());\r
+ // raus damit\r
+ deliver(req, res, mergeData, popups, templateListString);\r
+ }\r
+ catch (Throwable t) {\r
+ Throwable cause = ExceptionFunctions.traceCauseException(t);\r
+\r
+ if (cause instanceof UnsupportedMediaFormatExc) {\r
+ throw new ServletModuleUserExc("media.error.unsupportedformat", new String[] {});\r
+ }\r
+ throw new ServletModuleFailure("ServletModuleUploadedMedia.insert: " + t.toString(), t);\r
+ }\r
+ }\r
+\r
+ public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {\r
+\r
+ try {\r
+ EntityUsers user = _getUser(req);\r
+ WebdbMultipartRequest mp = new WebdbMultipartRequest(req, null);\r
+ Map parameters = mp.getParameters();\r
+\r
+ parameters.put("to_publisher", user.getId());\r
+ parameters.put("is_produced", "0");\r
+ if (!parameters.containsKey("is_published"))\r
+ parameters.put("is_published", "0");\r
+\r
+ String id = mainModule.set(parameters);\r
+ logger.debug("update: media ID = " + id);\r
+ _edit(id, req, res);\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure("upload -- exception " + e.toString(), e);\r
+ }\r
+\r
+ }\r
+\r
+\r
+ public void list(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {\r
+ // Parameter auswerten\r
+ SimpleHash mergeData = new SimpleHash();\r
+ SimpleHash popups = new SimpleHash();\r
+\r
+ String query_text = req.getParameter("query_text");\r
+ mergeData.put("query_text", query_text);\r
+ if (query_text != null) mergeData.put("query_text_encoded", URLEncoder.encode(query_text));\r
+ String query_field = req.getParameter("query_field");\r
+ mergeData.put("query_field", query_field);\r
+ String query_is_published = req.getParameter("query_is_published");\r
+ mergeData.put("query_is_published", query_is_published);\r
+ String query_media_folder = req.getParameter("query_media_folder");\r
+ mergeData.put("query_media_folder", query_media_folder);\r
+ String offset = req.getParameter("offset");\r
+ if (offset == null || offset.equals("")) offset = "0";\r
+ mergeData.put("offset", offset);\r
+\r
+ String order = req.getParameter("order");\r
+ if (order == null || order.equals("")) order = "webdb_lastchange desc";\r
+\r
+ // if in connection mode to content\r
+ mergeData.put("articleid", req.getParameter("articleid"));\r
+ mergeData.put("commentid", req.getParameter("commentid"));\r
+\r
+\r
+ // sql basteln\r
+ String whereClause = "";\r
+ boolean isFirst = true;\r
+ if (query_text != null && !query_text.equalsIgnoreCase("")) {\r
+ whereClause += "lower(" + query_field + ") like lower('%" + query_text + "%')";\r
+ isFirst = false;\r
+ }\r
+ if (query_is_published != null && !query_is_published.equals("")) {\r
+ if (isFirst == false) whereClause += " and ";\r
+ whereClause += "is_published='" + query_is_published + "'";\r
+ isFirst = false;\r
+ }\r
+ if (query_media_folder != null && !query_media_folder.equals("")) {\r
+ if (isFirst == false) whereClause += " and ";\r
+ whereClause += "to_media_folder='" + query_media_folder + "'";\r
+ }\r
+ //theLog.printDebugInfo("sql-whereclause: " + whereClause + " order: " + order + " offset: " + offset);\r
+\r
+ // fetch and deliver\r
+ try {\r
+ if (query_text != null || query_is_published != null || query_media_folder != null) {\r
+ EntityList theList = mainModule.getByWhereClause(whereClause, order, (new Integer(offset)).intValue(), 10);\r
+ if (theList != null) {\r
+ mergeData.put("contentlist", theList);\r
+ if (theList.getOrder() != null) {\r
+ mergeData.put("order", theList.getOrder());\r
+ mergeData.put("order_encoded", URLEncoder.encode(theList.getOrder()));\r
+ }\r
+ mergeData.put("count", (new Integer(theList.getCount())).toString());\r
+ mergeData.put("from", (new Integer(theList.getFrom())).toString());\r
+ mergeData.put("to", (new Integer(theList.getTo())).toString());\r
+ if (theList.hasNextBatch())\r
+ mergeData.put("next", (new Integer(theList.getNextBatch())).toString());\r
+ if (theList.hasPrevBatch())\r
+ mergeData.put("prev", (new Integer(theList.getPrevBatch())).toString());\r
+ }\r
+ }\r
+ popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());\r
+\r
+ deliver(req, res, mergeData, popups, templateListString);\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+\r
+\r
+ public void add(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {\r
+ try {\r
+ SimpleHash mergeData = new SimpleHash();\r
+ SimpleHash popups = new SimpleHash();\r
+ String maxMedia = MirPropertiesConfiguration.instance().getString("ServletModule.OpenIndy.MaxMediaUploadItems");\r
+ String numOfMedia = req.getParameter("medianum");\r
+\r
+ mergeData.put("new", "1");\r
+ mergeData.put("articleid", req.getParameter("articleid"));\r
+ mergeData.put("commentid", req.getParameter("commentid"));\r
+\r
+ popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());\r
+\r
+ if (numOfMedia==null || numOfMedia.equals("")) {\r
+ numOfMedia="1";\r
+ }\r
+ else if(Integer.parseInt(numOfMedia) > Integer.parseInt(maxMedia)) {\r
+ numOfMedia = maxMedia;\r
+ }\r
+\r
+ int mediaNum = Integer.parseInt(numOfMedia);\r
+ SimpleList mediaFields = new SimpleList();\r
+ for(int i =0; i<mediaNum;i++){\r
+ Integer mNum = new Integer(i+1);\r
+ mediaFields.add(mNum.toString());\r
+ }\r
+ mergeData.put("medianum",numOfMedia);\r
+ mergeData.put("mediafields",mediaFields);\r
+ deliver(req, res, mergeData, popups, templateObjektString);\r
+ }\r
+ catch (Exception e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+\r
+ public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {\r
+ String idParam = req.getParameter("id");\r
+ _edit(idParam, req, res);\r
+ }\r
+\r
+ private void _edit(String idParam, HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {\r
+ if (idParam != null && !idParam.equals("")) {\r
+ try {\r
+ SimpleHash popups = new SimpleHash();\r
+ popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData());\r
+ deliver(req, res, mainModule.getById(idParam), popups,\r
+ templateObjektString);\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+ else {\r
+ throw new ServletModuleExc("ServletmoduleUploadedMedia :: _edit without id");\r
+ }\r
+ }\r
+\r
+\r
+ /** @todo should be in ServletModule.java */\r
+ private EntityUsers _getUser(HttpServletRequest req) {\r
+ HttpSession session = req.getSession(false);\r
+ return (EntityUsers) session.getAttribute("login.uid");\r
+ }\r
+\r
+ public void getMedia(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc {\r
+ String idParam = req.getParameter("id");\r
+ if (idParam!=null && !idParam.equals("")) {\r
+ try {\r
+ EntityUploadedMedia ent = (EntityUploadedMedia)mainModule.getById(idParam);\r
+ Entity mediaType = ent.getMediaType();\r
+ MirMedia mediaHandler;\r
+\r
+ ServletContext ctx = MirPropertiesConfiguration.getContext();\r
+ String fName = ent.getId()+"."+mediaType.getValue("name");\r
+\r
+ mediaHandler = MediaHelper.getHandler(mediaType);\r
+ InputStream in = mediaHandler.getMedia(ent, mediaType);\r
+\r
+ res.setContentType(ctx.getMimeType(fName));\r
+ //important that before calling this res.getWriter was not called first\r
+ ServletOutputStream out = res.getOutputStream();\r
+\r
+ int read ;\r
+ byte[] buf = new byte[8 * 1024];\r
+ while((read = in.read(buf)) != -1) {\r
+ out.write(buf, 0, read);\r
+ }\r
+ in.close();\r
+ out.close();\r
+ }\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+ else logger.error("id not specified.");\r
+ // no exception allowed\r
+ }\r
+\r
+ public void getIcon(HttpServletRequest req, HttpServletResponse res) throws ServletModuleExc\r
+ {\r
+ String idParam = req.getParameter("id");\r
+ if (idParam!=null && !idParam.equals("")) {\r
+ try {\r
+ EntityUploadedMedia ent = (EntityUploadedMedia)mainModule.getById(idParam);\r
+ Entity mediaType = ent.getMediaType();\r
+ MirMedia mediaHandler;\r
+\r
+ ServletContext ctx = MirPropertiesConfiguration.getContext();\r
+ String fName = ent.getId()+"."+mediaType.getValue("name");\r
+\r
+ mediaHandler = MediaHelper.getHandler(mediaType);\r
+ InputStream in = mediaHandler.getIcon(ent);\r
+\r
+ res.setContentType(ctx.getMimeType(fName));\r
+ //important that before calling this res.getWriter was not called first\r
+ ServletOutputStream out = res.getOutputStream();\r
+\r
+ int read ;\r
+ byte[] buf = new byte[8 * 1024];\r
+ while((read = in.read(buf)) != -1) {\r
+ out.write(buf, 0, read);\r
+ }\r
+ in.close();\r
+ out.close();\r
+ }\r
+\r
+ catch (Throwable e) {\r
+ throw new ServletModuleFailure(e);\r
+ }\r
+ }\r
+ else logger.error("getIcon: id not specified.");\r
+ // no exception allowed\r
+ }\r
+\r
+}\r
+\r
+\r
package mircoders.storage;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import mir.log.LoggerWrapper;
-import mir.storage.Database;
-import mir.storage.StorageObject;
+import java.sql.Connection;\r
+import java.sql.SQLException;\r
+import java.sql.Statement;\r
+\r
+import freemarker.template.SimpleList;\r
+import mir.log.LoggerWrapper;\r
+import mir.storage.Database;\r
+import mir.storage.StorageObject;\r
import mir.storage.StorageObjectFailure;
-import freemarker.template.SimpleList;
/**
* <b>This class implements the access to the comment-table for the
--- /dev/null
+/*
+ * 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.storage;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import mir.entity.EntityList;
+import mir.log.LoggerWrapper;
+import mir.storage.Database;
+import mir.storage.StorageObject;
+import mir.storage.StorageObjectExc;
+import mir.storage.StorageObjectFailure;
+import mircoders.entity.EntityComment;
+import mircoders.entity.EntityUploadedMedia;
+
+/**
+ * <b>implements abstract DB connection to the comment_x_media SQL table
+ *
+ * @author RK, mir-coders group
+ * @version $Id: DatabaseCommentToMedia.java,v 1.1 2003/04/10 03:31:47 zapata Exp $
+ *
+ */
+
+public class DatabaseCommentToMedia extends Database implements StorageObject{
+
+ private static DatabaseCommentToMedia instance;
+
+ public static DatabaseCommentToMedia getInstance() {
+ if (instance == null) {
+ synchronized (DatabaseCommentToMedia.class) {
+ if (instance == null) {
+ instance = new DatabaseCommentToMedia();
+ instance.myselfDatabase = instance;
+ }
+ }
+ }
+ return instance;
+ }
+
+ private DatabaseCommentToMedia() {
+ super();
+
+ logger = new LoggerWrapper("Database.CommentToMedia");
+
+ hasTimestamp = false;
+ theTable = "comment_x_media";
+ theEntityClass = mir.entity.GenericEntity.class;
+ }
+
+ /**
+ * get all the media-files belonging to a comment entity
+ *
+ */
+ public EntityList getMedia(EntityComment comment) throws StorageObjectFailure {
+ EntityList returnList = null;
+ if (comment != null) {
+ // get all to_topic from media_x_topic
+ String id = comment.getId();
+ String subselect = "id in (select media_id from " + theTable +
+ " where comment_id=" + id + ")";
+
+ try {
+ // media should stay in uploaded order. this is especially important
+ // for photo stories which require a specific chronologic order.
+ // this is why we have the the second parameter "id"
+ returnList = DatabaseMedia.getInstance().selectByWhereClause(subselect,
+ "id", -1);
+ }
+ catch (Throwable e) {
+ logger.debug("-- get media failed " + e.toString());
+ throw new StorageObjectFailure("-- get media failed ", e);
+ }
+ }
+ return returnList;
+ }
+
+ public boolean hasMedia(EntityComment comment) throws StorageObjectFailure,
+ StorageObjectExc {
+ if (comment != null) {
+ try {
+ if (selectByWhereClause("comment_id=" + comment.getId(), -1).size() ==
+ 0)
+ return false;
+ else
+ return true;
+ }
+ catch (Exception e) {
+ logger.error("DatabaseCommentToMedia.hasMedia: " + e.toString());
+ throw new StorageObjectFailure("DatabaseCommentToMedia.hasMedia: " +
+ e.toString(), e);
+ }
+ }
+ else {
+ logger.error("DatabaseCommentToMedia.hasMedia: comment == null");
+ throw new StorageObjectExc(
+ "DatabaseCommentToMedia.hasMedia: comment == null");
+ }
+ }
+
+ /**
+ * get all the audio belonging to a comment entity
+ *
+ */
+ public EntityList getAudio(EntityComment comment) throws StorageObjectFailure {
+ EntityList returnList = null;
+ if (comment != null) {
+ // get all to_topic from media_x_topic
+ String id = comment.getId();
+ //this is not supported by mysql
+ String subselect = "id in (select media_id from " + theTable +
+ " where comment_id=" + id + ")";
+
+ try {
+ // media should stay in uploaded order. this is especially important
+ // for photo stories which require a specific chronologic order.
+ // this is why we have the the second parameter "id"
+ returnList = DatabaseAudio.getInstance().selectByWhereClause(subselect,
+ "id", -1);
+ }
+ catch (Exception e) {
+ logger.error("DatabaseCommentToMedia.getAudio: " + e.toString());
+ throw new StorageObjectFailure("DatabaseCommentToMedia.getAudio: " +
+ e.toString(), e);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * get all the video belonging to a comment entity
+ *
+ */
+ public EntityList getVideo(EntityComment comment) throws StorageObjectFailure {
+ EntityList returnList = null;
+ if (comment != null) {
+ // get all to_topic from media_x_topic
+ String id = comment.getId();
+ //this is not supported by mysql
+ String subselect = "id in (select media_id from " + theTable +
+ " where comment_id=" + id + ")";
+
+ try {
+ // media should stay in uploaded order. this is especially important
+ // for photo stories which require a specific chronologic order.
+ // this is why we have the the second parameter "id"
+ returnList = DatabaseVideo.getInstance().selectByWhereClause(subselect,
+ "id", -1);
+ }
+ catch (Exception e) {
+ logger.error("DatabaseCommentToMedia.getVideo: " + e.toString());
+ throw new StorageObjectFailure("DatabaseCommentToMedia.getVideo: " +
+ e.toString(), e);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * get all the images belonging to a comment entity
+ *
+ */
+ public EntityList getImages(EntityComment comment) throws
+ StorageObjectFailure {
+ EntityList returnList = null;
+ if (comment != null) {
+ // get all to_topic from media_x_topic
+ String id = comment.getId();
+ //this is not supported by mysql
+ String subselect = "id in (select media_id from " + theTable +
+ " where comment_id=" + id + ")";
+
+ try {
+ // media should stay in uploaded order. this is especially important
+ // for photo stories which require a specific chronologic order.
+ // this is why we have the the second parameter "id"
+ returnList = DatabaseImages.getInstance().selectByWhereClause(subselect,
+ "id", -1);
+ }
+ catch (Exception e) {
+ logger.error("DatabaseCommentToMedia.getImages: " + e.toString());
+ throw new StorageObjectFailure("DatabaseCommentToMedia.getImages: " +
+ e.toString(), e);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * get all the uploaded/other Media belonging to a comment entity
+ *
+ */
+ public EntityList getOther(EntityComment comment) throws StorageObjectFailure {
+ /** @todo this should only fetch published media / rk */
+
+ EntityList returnList = null;
+ if (comment != null) {
+ // get all to_topic from media_x_topic
+ String id = comment.getId();
+ //this is not supported by mysql
+ String subselect = "id in (select media_id from " + theTable +
+ " where comment_id=" + id + ")";
+
+ try {
+ // media should stay in uploaded order. this is especially important
+ // for photo stories which require a specific chronologic order.
+ // this is why we have the the second parameter "id"
+ returnList = DatabaseOther.getInstance().selectByWhereClause(subselect,
+ "id");
+ }
+ catch (Exception e) {
+ logger.error("DatabaseCommentToMedia.getOther: " + e.toString());
+ throw new StorageObjectFailure("DatabaseCommentToMedia.getOther: " + e.toString(), e);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * get all the uploaded/other Media belonging to a comment entity
+ *
+ */
+ public EntityList getUploadedMedia(EntityComment comment) throws
+ StorageObjectFailure {
+ /** @todo this should only fetch published media / rk */
+
+ EntityList returnList = null;
+ if (comment != null) {
+ // get all to_topic from media_x_topic
+ String id = comment.getId();
+ //this is not supported by mysql
+ String subselect = "id in (select media_id from " + theTable +
+ " where comment_id=" + id + ")";
+
+ try {
+ returnList = DatabaseUploadedMedia.getInstance().selectByWhereClause(
+ subselect,
+ "id");
+ }
+ catch (Exception e) {
+ logger.error("DatabaseCommentToMedia.getUploadedMedia: " + e.toString());
+ throw new StorageObjectFailure(
+ "DatabaseCommentToMedia.getUploadedMedia: " + e.toString(), e);
+ }
+ }
+ return returnList;
+ }
+
+ public void setMedia(String commentId, String[] mediaId) throws
+ StorageObjectFailure {
+ if (commentId == null) {
+ return;
+ }
+ if (mediaId == null || mediaId[0] == null) {
+ return;
+ }
+ //first delete all row with comment_id=commentId
+ String sql = "delete from " + theTable + " where comment_id=" + commentId;
+
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ ResultSet rs = executeSql(stmt, sql);
+ }
+ catch (Exception e) {
+ logger.error("-- set media failed -- delete");
+ throw new StorageObjectFailure("-- set media failed -- delete", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+
+ //now insert
+ //first delete all row with comment_id=commentId
+ for (int i = 0; i < mediaId.length; i++) {
+ sql = "insert into " + theTable + " (comment_id,media_id) values ("
+ + commentId + "," + mediaId[i] + ")";
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ }
+ catch (Exception e) {
+ logger.error("-- set topics failed -- insert");
+ throw new StorageObjectFailure("-- set topics failed -- insert ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+ }
+
+ public void addMedia(String commentId, String mediaId) throws
+ StorageObjectFailure {
+ if (commentId == null && mediaId == null) {
+ return;
+ }
+
+ Connection con = null;
+ Statement stmt = null;
+ //now insert
+
+ String sql = "insert into " + theTable + " (comment_id,media_id) values ("
+ + commentId + "," + mediaId + ")";
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ }
+ catch (Exception e) {
+ logger.error("-- add media failed -- insert");
+ throw new StorageObjectFailure("-- add media failed -- insert ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+
+ public void setMedia(String commentId, String mediaId) throws
+ StorageObjectFailure {
+ if (commentId == null && mediaId == null) {
+ return;
+ }
+ //first delete all row with comment_id=commentId
+ String sql = "delete from " + theTable + " where comment_id=" + commentId;
+
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ }
+ catch (Exception e) {
+ logger.error("-- set media failed -- delete");
+ throw new StorageObjectFailure("-- set media failed -- delete ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+
+ //now insert
+ //first delete all row with comment_id=commentId
+
+ sql = "insert into " + theTable + " (comment_id,media_id) values ("
+ + commentId + "," + mediaId + ")";
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ }
+ catch (Exception e) {
+ logger.error("-- set media failed -- insert");
+ throw new StorageObjectFailure("-- set media failed -- insert ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+
+ public void deleteByCommentId(String commentId) throws StorageObjectFailure {
+ if (commentId == null) {
+ //theLog.printDebugInfo("-- delete topics failed -- no comment id");
+ return;
+ }
+ //delete all row with comment_id=commentId
+ String sql = "delete from " + theTable + " where comment_id=" + commentId;
+
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ }
+ catch (Exception e) {
+ logger.error("-- delete by commentId failed ");
+ throw new StorageObjectFailure(
+ "-- delete by comment id failed -- delete ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+
+ public void deleteByMediaId(String mediaId) throws StorageObjectFailure {
+ if (mediaId == null) {
+ //theLog.printDebugInfo("-- delete topics failed -- no topic id");
+ return;
+ }
+ //delete all row with comment_id=commentId
+ String sql = "delete from " + theTable + " where media_id=" + mediaId;
+
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ logger.debug("-- delete media success ");
+ }
+ catch (Exception e) {
+ logger.error("-- delete media failed ");
+ throw new StorageObjectFailure("-- delete by media id failed -- ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+
+ public void delete(String commentId, String mediaId) throws
+ StorageObjectFailure {
+ if (mediaId == null || commentId == null) {
+ logger.debug("-- delete media failed -- missing parameter");
+ return;
+ }
+ //delete all row with comment_id=commentId and media_id=mediaId
+ String sql = "delete from " + theTable + " where media_id=" + mediaId +
+ " and comment_id= " + commentId;
+
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ int rs = executeUpdate(stmt, sql);
+ logger.debug("-- delete comment_x_media success ");
+ }
+ catch (Exception e) {
+ logger.error("-- delete comment_x_media failed ");
+ throw new StorageObjectFailure("-- delete comment_x_media failed -- ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+
+ public EntityList getComment(EntityUploadedMedia media) throws
+ StorageObjectFailure {
+ EntityList returnList = null;
+ if (media != null) {
+ String id = media.getId();
+ String select = "select comment_id from " + theTable + " where media_id=" +
+ id;
+
+ // execute select statement
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ ResultSet rs = executeSql(stmt, select);
+ if (rs != null) {
+ String mediaSelect = "id IN (";
+ boolean first = true;
+ while (rs.next()) {
+ if (first == false)
+ mediaSelect += ",";
+ mediaSelect += rs.getString(1);
+ first = false;
+ }
+ mediaSelect += ")";
+ if (first == false)
+ returnList = DatabaseComment.getInstance().selectByWhereClause(
+ mediaSelect, -1);
+ }
+ }
+ catch (Exception e) {
+ logger.error("-- get comment failed");
+ throw new StorageObjectFailure("-- get comment failed -- ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+ }
+ return returnList;
+ }
+
+ /**
+ * Returns a EntityList with all comment-objects having a relation to a media
+ */
+
+ public EntityList getComment() throws StorageObjectFailure {
+ EntityList returnList = null;
+
+ String select = "select distinct comment_id from " + theTable;
+ // execute select statement
+ Connection con = null;
+ Statement stmt = null;
+ try {
+ con = getPooledCon();
+ // should be a preparedStatement because is faster
+ stmt = con.createStatement();
+ ResultSet rs = executeSql(stmt, select);
+ if (rs != null) {
+ String mediaSelect = "id IN (";
+ boolean first = true;
+ while (rs.next()) {
+ if (first == false)
+ mediaSelect += ",";
+ mediaSelect += rs.getString(1);
+ first = false;
+ }
+ mediaSelect += ")";
+ if (first == false)
+ returnList = DatabaseComment.getInstance().selectByWhereClause(
+ mediaSelect, "webdb_lastchange desc");
+ }
+ }
+ catch (Exception e) {
+ logger.error("-- get comment failed");
+ throw new StorageObjectFailure("-- get comment failed -- ", e);
+ }
+ finally {
+ freeConnection(con, stmt);
+ }
+
+ return returnList;
+ }
+
+}
</if>
</if>
</function>
+
+
+
+<comment>functions to show media for an article/comment edit page</comment>
+<function showArticleAttachments(anArticle)>
+ <call showAttachments(1, anArticle)>
+</function>
+
+<function showCommentAttachments(aComment)>
+ <call showAttachments(0, aComment)>
+</function>
+
+<function showAttachments(anIsArticle, anObject)>
+ <if anIsArticle=="1">
+ <assign objectKey="articleid">
+ <assign objectModule="Content">
+ <else>
+ <assign objectKey="commentid">
+ <assign objectModule="Comment">
+ </if>
+
+ <table cellspacing="2" cellpadding="2">
+ <tr>
+ <td class="table_head" colspan="2">
+ ${lang("content.attachments")}
+ </td>
+ </tr>
+
+ <tr>
+ <td align=right valign=top class="table_left">
+ ${lang("content.images")}:
+ </td>
+ <td align="left" valign="top" class="listrow2">
+ <a href="${config.actionRoot}?module=Images&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addimage")}</a> |
+ <a href="${config.actionRoot}?module=Images&do=add&${objectKey}=${anObject.id}">${lang("content.uploadimage")}</a>
+ </td>
+ </tr>
+ <list anObject.to_all_media_images as m>
+ <tr>
+ <td align=right valign=top>
+ <a href="${config.actionRoot}?module=Images&do=edit&id=${m["id"]}"><img src="${config.actionRoot}?module=Images&do=getIcon&id=${m["id"]}" alt="edit" border="0"></a>
+ </td>
+ <td align="left" valign="top">
+ <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
+ </td>
+ </tr>
+ </list>
+
+
+ <tr>
+ <td align=right valign=top class="table_left">
+ ${lang("content.audio")}:
+ </td>
+ <td align="left" valign="top" class="listrow2">
+ <a href="${config.actionRoot}?module=Audio&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addaudio")}</a> |
+ <a href="${config.actionRoot}?module=Audio&do=add&${objectKey}=${anObject.id}">${lang("content.uploadaudio")}</a>
+ </td>
+ </tr>
+ <list anObject.to_all_media_audio as m>
+ <tr>
+ <td align=right valign=top>
+ <a href="${config.actionRoot}?module=Audio&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>
+ </td>
+ <td align="left" valign="top">
+ <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
+ </td>
+ </tr>
+ </list>
+
+
+ <tr>
+ <td align=right valign=top class="table_left">
+ ${lang("content.video")}:
+ </td>
+ <td align="left" valign="top" class="listrow2">
+ <a href="${config.actionRoot}?module=Video&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addvideo")}</a> |
+ <a href="${config.actionRoot}?module=Video&do=add&${objectKey}=${anObject.id}">${lang("content.uploadvideo")}</a>
+ </td>
+ </tr>
+ <list anObject.to_all_media_video as m>
+ <tr>
+ <td align=right valign=top>
+ <a href="${config.actionRoot}?module=Video&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>
+ </td>
+ <td align="left" valign="top">
+ <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
+ </td>
+ </tr>
+ </list>
+
+ <tr>
+ <td align=right valign=top class="table_left">
+ ${lang("content.other")}:
+ </td>
+ <td align="left" valign="top" class="listrow2">
+ <a href="${config.actionRoot}?module=OtherMedia&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addother")}</a> |
+ <a href="${config.actionRoot}?module=OtherMedia&do=add&${objectKey}=${anObject.id}">${lang("content.uploadother")}</a>
+ </td>
+ </tr>
+ <list anObject.to_all_media_other as m>
+ <tr>
+ <td align=right valign=top">
+ <a href="${config.actionRoot}?module=Video&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>
+ </td>
+ <td align="left" valign="top">
+ <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
+ </td>
+ </tr>
+ </list>
+ </table>
+</function>
+
+
<input type="hidden" name="module" value="${module}">
<input type="hidden" name="do" value="list">
-<input type="hidden" name="cid" value="${data.cid}">
+<input type="hidden" name="articleid" value="${data.articleid}">
+<input type="hidden" name="commentid" value="${data.commentid}">
<table border="0" cellspacing="2" cellpadding="2">
<tr>
${entry.creator}
</td>
<td>
- <if data.cid>
- <a href="${config.actionRoot}?module=Content&do=attach&mid=${entry.id}&cid=${data.cid}">${lang("attach")}</a>
+ <if data.articleid>
+ <a href="${config.actionRoot}?module=Content&do=attach&mid=${entry.id}&articleid=${data.articleid}">${lang("attach")}</a>
<else>
- <a href="${config.actionRoot}?module=${module}&do=delete&id=${entry.id}&query_text=${utility.encodeHTML(data.query_text_encoded)}&query_field=${utility.encodeHTML(data.query_field)}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.offset}">${lang("delete")}</a>
+ <if data.commentid>
+ <a href="${config.actionRoot}?module=Comment&do=attach&mid=${entry.id}&commentid=${data.commentid}">${lang("attach")}</a>
+ <else>
+ <a href="${config.actionRoot}?module=${module}&do=delete&id=${entry.id}&query_text=${utility.encodeHTML(data.query_text_encoded)}&query_field=${utility.encodeHTML(data.query_field)}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.offset}">${lang("delete")}</a>
| <a href="${config.actionRoot}?module=${module}&do=edit&id=${entry.id}">${lang("edit")}</a>
+ </if>
</if>
</td>
</tr>
<tr>
<td>
<if data.prev>
- <a href="${config.actionRoot}?module=${module}&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.prev}&prev=zurück&cid=${data.cid}">${lang("list.previous")}</a>
+ <a href="${config.actionRoot}?module=${module}&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.prev}&prev=zurück&articleid=${data.articleid}&commentid=${data.commentid}">${lang("list.previous")}</a>
</if>
<if data.next>
- <a href="${config.actionRoot}?module=${module}&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.next}&next=weiter&cid=${data.cid}">${lang("list.next")}</a>
+ <a href="${config.actionRoot}?module=${module}&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.next}&next=weiter&articleid=${data.articleid}&commentid=${data.commentid}">${lang("list.next")}</a>
</if>
</td>
</tr>
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
<table border="0">
<tr>
<td align="right" class="table_left">
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
<input type="hidden" name="where" value="${data.where}">
<input type="hidden" name="offset" value="${data.offset}">
<input type="hidden" name="order" value="${data.order}">
<form method="post" action="${config.actionRoot}">
<input type="hidden" name="module" value="Comment">
- <input type="hidden" name="id" value="${utility.encodeHTML(data.id)}">
- <input type="hidden" name="date" value="${utility.encodeHTML(data.date)}">
- <input type="hidden" name="to_media" value="${utility.encodeHTML(data.to_media)}">
- <if new>
+ <input type="hidden" name="id" value="${utility.encodeHTML(comment.id)}">
+ <if new=="1">
<input type="hidden" name="do" value="insert">
<else>
<input type="hidden" name="do" value="update">
${lang("comment.date")}
</td>
<td class="listrow2">
- ${utility.encodeHTML(utility.encodeHTML(data.webdb_create))}
+ ${utility.encodeHTML(utility.encodeHTML(comment.webdb_create))}
</td>
</tr>
</td>
<td class="listrow2">
<select name="to_comment_status">
- <list extra.comment_status_values as a>
- <option value="${a.key}" <if (a.key == data.to_comment_status)>selected</if>>${lang("commentstatus."+a.value)}</option>
+ <list commentstatuses as a>
+ <option value="${a.id}" <if (a.id == comment.to_comment_status)>selected</if>>${lang("commentstatus."+a.name)}</option>
</list>
</select>
</td>
</tr>
- <call TextInputTableRow (lang("comment.title"), 40, 255, "title", utility.encodeHTML(data.title))>
- <call TextInputTableRow (lang("comment.creator"), 40, 80, "creator", utility.encodeHTML(data.creator))>
- <call TextInputTableRow (lang("comment.url"), 40, 255, "main_url", utility.encodeHTML(data.main_url))>
- <call TextInputTableRow (lang("comment.email"), 40, 80, "email", utility.encodeHTML(data.email))>
- <call TextInputTableRow (lang("comment.phone"), 40, 80, "phone", utility.encodeHTML(data.phone))>
- <call TextInputTableRow (lang("comment.address"), 40, 80, "address", utility.encodeHTML(data.address))>
+ <call TextInputTableRow (lang("comment.title"), 40, 255, "title", utility.encodeHTML(comment.title))>
+ <call TextInputTableRow (lang("comment.creator"), 40, 80, "creator", utility.encodeHTML(comment.creator))>
+ <call TextInputTableRow (lang("comment.url"), 40, 255, "main_url", utility.encodeHTML(comment.main_url))>
+ <call TextInputTableRow (lang("comment.email"), 40, 80, "email", utility.encodeHTML(comment.email))>
+ <call TextInputTableRow (lang("comment.phone"), 40, 80, "phone", utility.encodeHTML(comment.phone))>
+ <call TextInputTableRow (lang("comment.address"), 40, 80, "address", utility.encodeHTML(comment.address))>
<tr>
</td>
<td class="listrow2">
<select name="to_language">
- <list extra.languages as l>
- <option value="${l.key}" <if (l.key == data.to_language)>selected</if>>${l.value}</option>
+ <list languages as l>
+ <option value="${l.id}" <if (l.id == comment.to_language)>selected</if>>${l.name}</option>
</list>
</select>
</td>
<tr>
<td align="right" class="table_left" valign="top">
${lang("comment.text")}<br>
- ${lang("comment.html")}<input type="checkbox" name="is_html" value="1"<if data.is_html=="1"> checked</if>>
+ ${lang("comment.html")}<input type="checkbox" name="is_html" value="1"<if comment.is_html=="1"> checked</if>>
</td>
<td class="listrow2">
- <textarea cols="60" rows="10" name="description" wrap="virtual">${utility.encodeHTML(data.description)}</textarea>
+ <textarea cols="60" rows="10" name="description" wrap="virtual">${utility.encodeHTML(comment.description)}</textarea>
</td>
</tr>
<tr>
<td colspan="2" align="right" class="table_foot" >
<span class="text">
- ${lang("comment.published")} <input type="checkbox" name="is_published" value="1" <if data.is_published=="1"> checked</if>>
- <if new>
+ ${lang("comment.published")} <input type="checkbox" name="is_published" value="1" <if comment.is_published=="1"> checked</if>>
+ <if new=="1">
<input type="submit" name="save" value="${lang("insert")}">
<else>
<input type="submit" name="save" value="${lang("save")}">
</td>
</tr>
</table>
+
+<if new=="0">
+
+<table width="90%" cellspacing="0" cellpadding="0">
+
+<tr>
+<comment>
+<td align="left" valign="top">
+<table cellspacing="3" cellpadding="2">
+ <tr>
+ <td class="table_head" colspan="2">
+ ${lang("content.family")}
+ </td>
+ </tr>
+
+ <tr>
+ <td align=right valign=top class="table_left">
+ ${lang("content.parent")}:
+ </td>
+ <td align="left" valign="top" class="listrow2">
+ <if article.parent>
+ <b>${utility.encodeHTML(article.parent.title)}</b><br>
+ <a href="${config.actionRoot}?module=Content&do=edit&id=${article.parent.id}&returnurl=${utility.encodeURI(thisurl)}">${lang("content.viewparent")}</a> |
+ <a href="${config.actionRoot}?module=Content&do=clearparent&id=${article.id}&returnurl=${utility.encodeURI(thisurl)}">${lang("content.clearparent")}</a> |
+ </if>
+ <a href="${config.actionRoot}?module=Content&do=selectparent&id=${article.id}&returnurl=${utility.encodeURI(thisurl)}">${lang("content.selectparent")}</a>
+ </td>
+ </tr>
+
+ <tr>
+ <td align=right valign=top class="table_left">
+ ${lang("content.children")}:
+ </td>
+ <td align="left" valign="top" class="listrow2">
+ <a href="${config.actionRoot}?module=Content&do=listchildren&article_id=${article.id}">${lang("content.viewchildren")}</a>
+ </td>
+ </tr>
+</table>
+
+</td>
+</comment>
+<td align="left" valign="top">
+<call showCommentAttachments(comment)>
+</td>
+</tr>
+</table>
+
+</if>
+
</form>
<p>
<table width="90%" cellspacing="3" cellpadding="2">
<tr>
<td align="left" valign="top">
- <if !data.new>
- <a href="${config.actionRoot}?module=Comment&do=articlecomments&articleid=${data.id}">[ ${lang("content.comments")} ]</a>
+ <if new=="0">
+ <a href="${config.actionRoot}?module=Comment&do=articlecomments&articleid=${article.id}&returnurl=${thisurl}">[ ${lang("content.comments")} ]</a>
</if>
</td>
<td align="right" valign="top">
</td>
<td align="right" valign="top">
-
-<table cellspacing="2" cellpadding="2">
- <tr>
- <td class="table_head" colspan="2">
- ${lang("content.attachments")}
- </td>
- </tr>
-
- <tr>
- <td align=right valign=top class="table_left">
- ${lang("content.images")}:
- </td>
- <td align="left" valign="top" class="listrow2">
- <a href="${config.actionRoot}?module=Images&do=list&cid=${article.id}">[+] ${lang("content.addimage")}</a> |
- <a href="${config.actionRoot}?module=Images&do=add&articleid=${article.id}">${lang("content.uploadimage")}</a>
- </td>
- </tr>
- <list article.to_media_images as m>
- <tr>
- <td align=right valign=top>
- <a href="${config.actionRoot}?module=Images&do=edit&id=${m["id"]}"><img src="${config.actionRoot}?module=Images&do=getIcon&id=${m["id"]}" alt="edit" border="0"></a>
- </td>
- <td align="left" valign="top">
- <a href="${config.actionRoot}?module=Content&do=dettach&cid=${article.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
- </td>
- </tr>
- </list>
-
-
- <tr>
- <td align=right valign=top class="table_left">
- ${lang("content.audio")}:
- </td>
- <td align="left" valign="top" class="listrow2">
- <a href="${config.actionRoot}?module=Audio&do=list&cid=${article.id}">[+] ${lang("content.addaudio")}</a> |
- <a href="${config.actionRoot}?module=Audio&do=add&articleid=${article.id}">${lang("content.uploadaudio")}</a>
- </td>
- </tr>
- <list article.to_media_audio as m>
- <tr>
- <td align=right valign=top>
- <a href="${config.actionRoot}?module=Audio&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>
- </td>
- <td align="left" valign="top">
- <a href="${config.actionRoot}?module=Content&do=dettach&cid=${article.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
- </td>
- </tr>
- </list>
-
-
- <tr>
- <td align=right valign=top class="table_left">
- ${lang("content.video")}:
- </td>
- <td align="left" valign="top" class="listrow2">
- <a href="${config.actionRoot}?module=Video&do=list&cid=${article.id}">[+] ${lang("content.addvideo")}</a> |
- <a href="${config.actionRoot}?module=Video&do=add&articleid=${article.id}">${lang("content.uploadvideo")}</a>
- </td>
- </tr>
- <list article.to_media_video as m>
- <tr>
- <td align=right valign=top>
- <a href="${config.actionRoot}?module=Video&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>
- </td>
- <td align="left" valign="top">
- <a href="${config.actionRoot}?module=Content&do=dettach&cid=${article.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
- </td>
- </tr>
- </list>
-
- <tr>
- <td align=right valign=top class="table_left">
- ${lang("content.other")}:
- </td>
- <td align="left" valign="top" class="listrow2">
- <a href="${config.actionRoot}?module=OtherMedia&do=list&cid=${article.id}">[+] ${lang("content.addother")}</a> |
- <a href="${config.actionRoot}?module=OtherMedia&do=add&articleid=${article.id}">${lang("content.uploadother")}</a>
- </td>
- </tr>
- <list article.to_media_other as m>
- <tr>
- <td align=right valign=top">
- <a href="${config.actionRoot}?module=Video&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>
- </td>
- <td align="left" valign="top">
- <a href="${config.actionRoot}?module=Content&do=dettach&cid=${article.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
- </td>
- </tr>
- </list>
-
-</table>
-
+<call showArticleAttachments(article)>
</td>
</tr>
</table>
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
+
<table border="0">
<tr>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
+
<input type="hidden" name="where" value="${data.where}">
<input type="hidden" name="offset" value="${data.offset}">
<input type="hidden" name="order" value="${data.order}">
${entry.creator}
</td>
<td>
- <if data.cid>
- <a href="${config.actionRoot}?module=Content&do=attach&mid=${entry.id}&cid=${data.cid}">${lang("attach")}</a>
+ <if data.articleid>
+ <a href="${config.actionRoot}?module=Content&do=attach&mid=${entry.id}&articleid=${data.articleid}">${lang("attach")}</a>
<else>
- <a href="${config.actionRoot}?module=Images&do=delete&id=${entry.id}&query_text=${utility.encodeHTML(data.query_text_encoded)}&query_field=${utility.encodeHTML(data.query_field)}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.offset}">${lang("delete")}</a>
- | <a href="${config.actionRoot}?module=Images&do=edit&id=${entry.id}">${lang("edit")}</a>
+ <if data.commentid>
+ <a href="${config.actionRoot}?module=Comment&do=attach&mid=${entry.id}&commentid=${data.commentid}">${lang("attach")}</a>
+ <else>
+ <a href="${config.actionRoot}?module=Images&do=delete&id=${entry.id}&query_text=${utility.encodeHTML(data.query_text_encoded)}&query_field=${utility.encodeHTML(data.query_field)}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.offset}">${lang("delete")}</a>
+ | <a href="${config.actionRoot}?module=Images&do=edit&id=${entry.id}">${lang("edit")}</a>
+ </if>
</if>
</td>
</tr>
<tr>
<td>
<if data.prev>
- <a href="${config.actionRoot}?module=Images&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.prev}&prev=zurück&cid=${data.cid}">${lang("list.previous")}</a>
+ <a href="${config.actionRoot}?module=Images&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.prev}&prev=zurück&articleid=${data.articleid}&commentid=${data.commentid}">${lang("list.previous")}</a>
</if>
<if data.next>
- <a href="${config.actionRoot}?module=Images&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.next}&next=weiter&cid=${data.cid}">${lang("list.next")}</a>
+ <a href="${config.actionRoot}?module=Images&do=list&query_text=${data.query_text_encoded}&query_field=${data.query_field}&query_is_published=${data.query_is_published}&query_media_folder=${data.query_media_folder}&offset=${data.next}&next=weiter&articleid=${data.articleid}&commentid=${data.commentid}">${lang("list.next")}</a>
</if>
</td>
</tr>
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
<table border="0">
<tr>
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
<input type="hidden" name="where" value="${data.where}">
<input type="hidden" name="offset" value="${data.offset}">
<input type="hidden" name="order" value="${data.order}">
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
<table border="0">
<tr>
<td align="right" class="table_left">
<if data.articleid>
<input type="hidden" name="articleid" value="${data.articleid}">
</if>
+ <if data.commentid>
+ <input type="hidden" name="commentid" value="${data.commentid}">
+ </if>
<input type="hidden" name="where" value="${data.where}">
<input type="hidden" name="offset" value="${data.offset}">