From 72c22389b3e9efb92e9b56fd8761d767d174155d Mon Sep 17 00:00:00 2001 From: zapata Date: Tue, 4 Mar 2003 22:00:51 +0000 Subject: [PATCH] fixes: - only published media are now generated into articles - HashMap -> Map for variable defintions - cos library upgraded added - upload media from the article page --- bundles/admin_en.properties | 6 +- lib/cos.jar | Bin 48585 -> 56404 bytes source/Mir.java | 6 +- source/mir/entity/Entity.java | 26 +- source/mir/misc/FileHandler.java | 10 +- source/mir/misc/HTMLTemplateProcessor.java | 4 +- source/mir/misc/WebdbMultipartRequest.java | 25 +- source/mir/module/AbstractModule.java | 6 +- source/mir/servlet/ServletModule.java | 15 +- source/mir/storage/Database.java | 5 +- source/mir/storage/store/ObjectStore.java | 3 +- source/mir/storage/store/StoreContainerType.java | 5 +- source/mircoders/entity/EntityAudio.java | 6 +- source/mircoders/entity/EntityComment.java | 8 +- source/mircoders/entity/EntityContent.java | 7 +- source/mircoders/entity/EntityOther.java | 156 ++-- source/mircoders/entity/EntityUploadedMedia.java | 6 +- source/mircoders/entity/EntityVideo.java | 4 +- .../basic/MirBasicDataModelLocalizer.java | 2 +- source/mircoders/media/MediaRequest.java | 6 +- source/mircoders/module/ModuleComment.java | 4 +- source/mircoders/module/ModuleContent.java | 6 +- source/mircoders/module/ModuleTopics.java | 17 +- .../producer/PDFPreFormattingProducerNode.java | 10 +- source/mircoders/servlet/ServletModuleContent.java | 9 +- .../mircoders/servlet/ServletModuleOpenIndy.java | 9 +- .../servlet/ServletModuleUploadedMedia.java | 809 +++++++++++---------- source/mircoders/servlet/ServletModuleUsers.java | 4 +- source/mircoders/storage/DatabaseLinksImcs.java | 6 +- templates/admin/audio.template | 6 + templates/admin/content.template | 12 +- templates/admin/image.template | 331 +++++---- templates/admin/media.template | 6 + templates/admin/video.template | 6 + 34 files changed, 802 insertions(+), 739 deletions(-) diff --git a/bundles/admin_en.properties b/bundles/admin_en.properties index 9ffef87b..61dc5a19 100755 --- a/bundles/admin_en.properties +++ b/bundles/admin_en.properties @@ -1,6 +1,6 @@ ########## admin ########## # language: english -# $Id: admin_en.properties,v 1.35 2003/02/21 05:38:36 zapata Exp $ +# $Id: admin_en.properties,v 1.36 2003/03/04 22:00:51 zapata Exp $ languagename=English @@ -152,9 +152,13 @@ content.video=Video content.other=Other media content.media=Media content.addimage=add image +content.uploadimage=upload image content.addaudio=add audio +content.uploadaudio=upload audio content.addvideo=add video +content.uploadvideo=upload video content.addother=add other media +content.uploadother=upload other media content.creationdate=date content.modificationdate=last change content.status=Status diff --git a/lib/cos.jar b/lib/cos.jar index bcb822ab61f864478c5b2e3cbf8ffe14971c5388..6a4a1ff5f6d848c970c85008aa1cf1b5291be196 100755 GIT binary patch literal 56404 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 D*tGer literal 48585 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 diff --git a/source/Mir.java b/source/Mir.java index ed6825c3..b61308b6 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -81,14 +81,14 @@ import mircoders.storage.DatabaseUsers; /** * Mir.java - main servlet, that dispatches to servletmodules * - * @author $Author: idfx $ - * @version $Id: Mir.java,v 1.30 2003/02/28 18:27:07 idfx Exp $ + * @author $Author: zapata $ + * @version $Id: Mir.java,v 1.31 2003/03/04 22:00:51 zapata Exp $ * */ public class Mir extends AbstractServlet { private static ModuleUsers usersModule = null; private static ModuleMessage messageModule = null; - private final static HashMap servletModuleInstanceHash = new HashMap(); + private final static Map servletModuleInstanceHash = new HashMap(); //I don't know about making this static cause it removes the //possibility to change the config on the fly.. -mh diff --git a/source/mir/entity/Entity.java b/source/mir/entity/Entity.java index 0ea03865..85ae7121 100755 --- a/source/mir/entity/Entity.java +++ b/source/mir/entity/Entity.java @@ -37,6 +37,7 @@ package mir.entity; import java.util.List; +import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Set; @@ -59,7 +60,7 @@ import mir.storage.StorageObjectFailure; * Base Class of Entities * Interfacing TemplateHashModel and TemplateModelRoot to be freemarker compliant * - * @version $Id: Entity.java,v 1.16 2003/02/28 18:27:07 idfx Exp $ + * @version $Id: Entity.java,v 1.17 2003/03/04 22:00:51 zapata Exp $ * @author rk * */ @@ -69,7 +70,7 @@ public class Entity implements TemplateHashModel, TemplateModelRoot protected static MirPropertiesConfiguration configuration; private boolean changed; - protected HashMap theValuesHash; // tablekey / value + protected Map theValuesHash; // tablekey / value protected StorageObject theStorageObject; protected List streamedInput = null; protected LoggerWrapper logger; @@ -107,24 +108,17 @@ public class Entity implements TemplateHashModel, TemplateModelRoot /** * Sets the values of the Entity. - * @param theStringValues HashMap containing the new values of the Entity + * @param theStringValues Map containing the new values of the Entity */ - public void setValues(HashMap theStringValues) { + public void setValues(Map theStringValues) { /** @todo should be synchronized */ if (theStringValues != null) { theValuesHash = new HashMap(); - String aKey; - Set set = theStringValues.keySet(); - Iterator it = set.iterator(); - int size = set.size(); - for (int i = 0; i < size; i++) { - aKey = (String) it.next(); - theValuesHash.put(aKey, (String) theStringValues.get(aKey)); - } + theValuesHash.putAll(theStringValues); } else - logger.warn("Entity.setValues called with null HashMap"); + logger.warn("Entity.setValues called with null Map"); } /** @@ -248,14 +242,14 @@ public class Entity implements TemplateHashModel, TemplateModelRoot } /** - * Returns a Hashmap with all values of the Entity. - * @return HashMap with field name as key and the corresponding values + * Returns a Map with all values of the Entity. + * @return Map with field name as key and the corresponding values * * @deprecated This method is deprecated and will be deleted in the next release. * Entity interfaces freemarker.template.TemplateHashModel now and can * be used in the same way as SimpleHash. */ - public HashMap getValues() { + public Map getValues() { logger.warn("using deprecated Entity.getValues() - a waste of resources"); return theValuesHash; } diff --git a/source/mir/misc/FileHandler.java b/source/mir/misc/FileHandler.java index 7d9b01e4..790d5c33 100755 --- a/source/mir/misc/FileHandler.java +++ b/source/mir/misc/FileHandler.java @@ -31,7 +31,7 @@ package mir.misc; -import java.util.HashMap; +import java.util.Map; import com.oreilly.servlet.multipart.FilePart; @@ -39,16 +39,16 @@ import com.oreilly.servlet.multipart.FilePart; /** * Interface that classes wishing to be used as a callback on FileParts for the * WebdbMultipartRequest class should implement this interface. - * + * * @author mh - * @version $Id: FileHandler.java,v 1.3 2003/01/25 17:45:17 idfx Exp $ + * @version $Id: FileHandler.java,v 1.4 2003/03/04 22:00:52 zapata Exp $ * @see mir.misc.WebdbMultipartRequest - * + * */ public interface FileHandler { - public void setFile (FilePart filePart, int fileNum, HashMap Params) + public void setFile (FilePart filePart, int fileNum, Map Params) throws FileHandlerException, FileHandlerUserException; } diff --git a/source/mir/misc/HTMLTemplateProcessor.java b/source/mir/misc/HTMLTemplateProcessor.java index 346d3d21..46775f27 100755 --- a/source/mir/misc/HTMLTemplateProcessor.java +++ b/source/mir/misc/HTMLTemplateProcessor.java @@ -352,11 +352,11 @@ public final class HTMLTemplateProcessor { /** * Konvertiert ein Hashtable mit den keys und values als String * in ein freemarker.template.SimpleHash-Modell - * @param mergeData der HashMap mit den String / String Daten + * @param mergeData der Map mit den String / String Daten * @return SimpleHash mit den entsprechenden freemarker Daten * */ - public static SimpleHash makeSimpleHash(HashMap mergeData) { + public static SimpleHash makeSimpleHash(Map mergeData) { SimpleHash modelRoot = new SimpleHash(); String aField; if (mergeData != null) { diff --git a/source/mir/misc/WebdbMultipartRequest.java b/source/mir/misc/WebdbMultipartRequest.java index 42e90823..d421d12d 100755 --- a/source/mir/misc/WebdbMultipartRequest.java +++ b/source/mir/misc/WebdbMultipartRequest.java @@ -34,6 +34,7 @@ package mir.misc; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; +import java.util.Map; import java.util.Hashtable; import java.util.Vector; @@ -82,20 +83,20 @@ public class WebdbMultipartRequest /** - * The following comment and some code was adapted from the Oreilley cos.jar + * The following comment and some code was adapted from the Oreilley cos.jar * package. -mh 2001.09.20 * - * Returns all the parameters as a HashMap of Strings, any parameter - * that sent without a value will be null. A value - * is guaranteed to be in its normal, decoded form. If A parameter - * has multiple values, only the last one is returned (for backward + * Returns all the parameters as a Map of Strings, any parameter + * that sent without a value will be null. A value + * is guaranteed to be in its normal, decoded form. If A parameter + * has multiple values, only the last one is returned (for backward * compatibility). For parameters with multiple values, it's possible * the last "value" may be null. * - * @return A HashMap of String representations of the parameter values. + * @return A Map of String representations of the parameter values. */ - public HashMap getParameters(){ - HashMap pHash = new HashMap(); + public Map getParameters(){ + Map pHash = new HashMap(); String value = new String(); Enumeration Keys = parameters.keys(); @@ -116,10 +117,10 @@ public class WebdbMultipartRequest * The following code and comment stolen from oreilley cos.jar. * -mh. 2001.09.20 * - * Returns the values of the named parameter as a String array, or null if - * the parameter was not sent. The array has one entry for each parameter - * field sent. If any field was sent without a value that entry is stored - * in the array as a null. The values are guaranteed to be in their + * Returns the values of the named parameter as a String array, or null if + * the parameter was not sent. The array has one entry for each parameter + * field sent. If any field was sent without a value that entry is stored + * in the array as a null. The values are guaranteed to be in their * normal, decoded form. A single value is returned as a one-element array. * * @param name the parameter name. diff --git a/source/mir/module/AbstractModule.java b/source/mir/module/AbstractModule.java index a010a855..2324e19a 100755 --- a/source/mir/module/AbstractModule.java +++ b/source/mir/module/AbstractModule.java @@ -32,7 +32,7 @@ package mir.module; import java.sql.SQLException; -import java.util.HashMap; +import java.util.Map; import freemarker.template.SimpleHash; @@ -163,7 +163,7 @@ public class AbstractModule { * @return Id des eingef?gten Objekts * @exception ModuleException */ - public String add (HashMap theValues) throws ModuleException { + public String add (Map theValues) throws ModuleException { try { Entity theEntity = (Entity)theStorage.getEntityClass().newInstance(); theEntity.setStorage(theStorage); @@ -180,7 +180,7 @@ public class AbstractModule { * @return Id des eingef?gten Objekts * @exception ModuleException */ - public String set (HashMap theValues) throws ModuleException { + public String set (Map theValues) throws ModuleException { try { Entity theEntity = theStorage.selectById((String)theValues.get("id")); if (theEntity == null) diff --git a/source/mir/servlet/ServletModule.java b/source/mir/servlet/ServletModule.java index eb95f617..3d67860d 100755 --- a/source/mir/servlet/ServletModule.java +++ b/source/mir/servlet/ServletModule.java @@ -34,6 +34,7 @@ package mir.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.List; +import java.util.Map; import java.util.HashMap; import java.util.Locale; @@ -216,7 +217,7 @@ public abstract class ServletModule { public void insert(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException, ServletModuleUserException { try { - HashMap withValues = getIntersectingValues(req, mainModule.getStorageObject()); + Map withValues = getIntersectingValues(req, mainModule.getStorageObject()); logger.debug("--trying to add..."); String id = mainModule.add(withValues); logger.debug("--trying to deliver..." + id); @@ -310,7 +311,7 @@ public abstract class ServletModule { throws ServletModuleException { try { String idParam = req.getParameter("id"); - HashMap withValues = getIntersectingValues(req, mainModule.getStorageObject()); + Map withValues = getIntersectingValues(req, mainModule.getStorageObject()); String id = mainModule.set(withValues); String whereParam = req.getParameter("where"); @@ -446,12 +447,12 @@ public abstract class ServletModule { } /** - * Holt die Felder aus der Metadatenfelderliste des StorageObjects, die - * im HttpRequest vorkommen und liefert sie als HashMap zurueck + * Gets the fields from a httprequest and matches them with the metadata from + * the storage object. Returns the keys that match, with their values. * - * @return HashMap mit den Werten + * @return Map with the values */ - public HashMap getIntersectingValues(HttpServletRequest req, StorageObject theStorage) + public Map getIntersectingValues(HttpServletRequest req, StorageObject theStorage) throws ServletModuleException { try { @@ -471,7 +472,7 @@ public abstract class ServletModule { theFieldList = theStorage.getFields(); - HashMap withValues = new HashMap(); + Map withValues = new HashMap(); String aField, aValue; for (int i = 0; i < theFieldList.size(); i++) { diff --git a/source/mir/storage/Database.java b/source/mir/storage/Database.java index a22714cb..2482ba1c 100755 --- a/source/mir/storage/Database.java +++ b/source/mir/storage/Database.java @@ -49,6 +49,7 @@ import java.util.List; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.HashMap; +import java.util.Map; import com.codestudio.util.SQLManager; @@ -85,7 +86,7 @@ import mir.util.JDBCStringRoutines; * Treiber, Host, User und Passwort, ueber den der Zugriff auf die * Datenbank erfolgt. * - * @version $Id: Database.java,v 1.34 2003/02/23 05:00:12 zapata Exp $ + * @version $Id: Database.java,v 1.35 2003/03/04 22:00:52 zapata Exp $ * @author rk * */ @@ -695,7 +696,7 @@ public class Database implements StorageObject { private Entity makeEntityFromResultSet(ResultSet rs) throws StorageObjectFailure { /** @todo OS: get Pkey from ResultSet and consult ObjectStore */ - HashMap theResultHash = new HashMap(); + Map theResultHash = new HashMap(); String theResult = null; int theType; Entity returnEntity = null; diff --git a/source/mir/storage/store/ObjectStore.java b/source/mir/storage/store/ObjectStore.java index b50f0a88..e117bcf5 100755 --- a/source/mir/storage/store/ObjectStore.java +++ b/source/mir/storage/store/ObjectStore.java @@ -63,6 +63,7 @@ package mir.storage.store; import java.io.BufferedInputStream; import java.io.FileInputStream; +import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.MissingResourceException; @@ -76,7 +77,7 @@ import mir.log.LoggerWrapper; public class ObjectStore { private final static ObjectStore INSTANCE = new ObjectStore(); - private final static HashMap containerMap = new HashMap(); // StoreContainerType/StoreContainer + private final static Map containerMap = new HashMap(); // StoreContainerType/StoreContainer private static long storeHit = 0, storeMiss = 0; private Properties ostoreConf; private LoggerWrapper logger; diff --git a/source/mir/storage/store/StoreContainerType.java b/source/mir/storage/store/StoreContainerType.java index fe8b1491..dde90a69 100755 --- a/source/mir/storage/store/StoreContainerType.java +++ b/source/mir/storage/store/StoreContainerType.java @@ -47,6 +47,7 @@ package mir.storage.store; */ import java.util.HashMap; +import java.util.Map; import mir.misc.StringUtil; @@ -57,7 +58,7 @@ public class StoreContainerType { public final static int STOC_TYPE_ENTITYLIST = 1; public final static int STOC_TYPE_MAX = STOC_TYPE_ENTITYLIST; - private static HashMap[] uniqueTypes = new HashMap[STOC_TYPE_MAX + 1]; + private static Map[] uniqueTypes = new HashMap[STOC_TYPE_MAX + 1]; private static ObjectStore o_store = ObjectStore.getInstance(); private Class stocClass = null; private int stocType = STOC_TYPE_UNKNOWN; @@ -77,7 +78,7 @@ public class StoreContainerType { public static StoreContainerType valueOf(Class stoc_class, int stoc_type) { StoreContainerType returnStocType = null; if (stoc_type >= 0 && stoc_type <= STOC_TYPE_MAX) { - HashMap current = uniqueTypes[stoc_type]; + Map current = uniqueTypes[stoc_type]; if (current.containsKey(stoc_class)) returnStocType = (StoreContainerType) current.get(stoc_class); else { diff --git a/source/mircoders/entity/EntityAudio.java b/source/mircoders/entity/EntityAudio.java index 6de0502c..10ddfa01 100755 --- a/source/mircoders/entity/EntityAudio.java +++ b/source/mircoders/entity/EntityAudio.java @@ -32,7 +32,7 @@ package mircoders.entity; import java.sql.SQLException; -import java.util.HashMap; +import java.util.Map; import mir.storage.StorageObject; import mir.storage.StorageObjectFailure; @@ -41,7 +41,7 @@ import mir.storage.StorageObjectFailure; * This class handles storage of audio data and meta data * * @author mh - * @version $Id: EntityAudio.java,v 1.6 2003/02/23 05:00:13 zapata Exp $ + * @version $Id: EntityAudio.java,v 1.7 2003/03/04 22:00:52 zapata Exp $ */ @@ -66,7 +66,7 @@ public class EntityAudio extends EntityUploadedMedia } } - public void setValues(HashMap theStringValues) { + public void setValues(Map theStringValues) { if (theStringValues != null) { if (!theStringValues.containsKey("is_published")) theStringValues.put("is_published", "0"); diff --git a/source/mircoders/entity/EntityComment.java b/source/mircoders/entity/EntityComment.java index 0a8659b8..cfec128b 100755 --- a/source/mircoders/entity/EntityComment.java +++ b/source/mircoders/entity/EntityComment.java @@ -31,7 +31,7 @@ package mircoders.entity; -import java.util.HashMap; +import java.util.Map; import mir.entity.Entity; import mir.storage.StorageObject; @@ -39,8 +39,8 @@ import mir.storage.StorageObject; /** * This class maps one line of the comment-table to a java-object. * - * @author $Author: idfx $ - * @version $Revision: 1.13 $ $Date: 2003/01/25 17:50:34 $ + * @author $Author: zapata $ + * @version $Revision: 1.14 $ $Date: 2003/03/04 22:00:52 $ */ @@ -61,7 +61,7 @@ public class EntityComment extends Entity /** * overridden method setValues to patch creator_main_url */ - public void setValues(HashMap theStringValues) + public void setValues(Map theStringValues) { if (theStringValues != null) { if (!theStringValues.containsKey("is_published")) { diff --git a/source/mircoders/entity/EntityContent.java b/source/mircoders/entity/EntityContent.java index 87f63979..5c4f6da4 100755 --- a/source/mircoders/entity/EntityContent.java +++ b/source/mircoders/entity/EntityContent.java @@ -34,6 +34,7 @@ package mircoders.entity; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; +import java.util.Map; import java.util.HashMap; import freemarker.template.SimpleScalar; @@ -54,7 +55,7 @@ import mircoders.storage.DatabaseContentToTopics; * this class implements mapping of one line of the database table content * to a java object * - * @version $Id: EntityContent.java,v 1.15 2003/02/23 05:00:13 zapata Exp $ + * @version $Id: EntityContent.java,v 1.16 2003/03/04 22:00:53 zapata Exp $ * @author mir-coders group * */ @@ -71,7 +72,7 @@ public class EntityContent extends Entity //this should always be transient i.e it can never be stored in the db //or ObjectStore. (so the ObjectStore should only be caching what comes //directly out of the DB. @todo confirm this with rk. -mh - HashMap _entCache = new HashMap(); + Map _entCache = new HashMap(); Boolean _hasMedia = null; // constructors @@ -260,7 +261,7 @@ public class EntityContent extends Entity /** * overridden method setValues to patch creator_main_url */ - public void setValues(HashMap theStringValues) { + public void setValues(Map theStringValues) { if (theStringValues != null) { if (theStringValues.containsKey("creator_main_url")){ if (((String)theStringValues.get("creator_main_url")).equalsIgnoreCase("http://")){ diff --git a/source/mircoders/entity/EntityOther.java b/source/mircoders/entity/EntityOther.java index ba293d0c..0ec4ad08 100755 --- a/source/mircoders/entity/EntityOther.java +++ b/source/mircoders/entity/EntityOther.java @@ -1,78 +1,78 @@ -/* - * 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.sql.SQLException; -import java.util.HashMap; - -import mir.storage.StorageObject; -import mir.storage.StorageObjectFailure; - -/** - * This class handles storage of other data and meta data - * - * @author mh - * @version 11.11.2000 - */ - - -public class EntityOther extends EntityUploadedMedia -{ - public EntityOther() - { - super(); - } - - public EntityOther(StorageObject theStorage) { - this(); - setStorage(theStorage); - } - - public void update() throws StorageObjectFailure { - super.update(); - try { - theStorageObject.executeUpdate("update content set is_produced='0' where to_media="+getId()); - } catch (SQLException e) { - throwStorageObjectFailure(e, "EntityOther :: update :: failed!! "); - } - } - - public void setValues(HashMap theStringValues) - { - if (theStringValues != null) { - if (!theStringValues.containsKey("is_published")) - theStringValues.put("is_published","0"); - } - super.setValues(theStringValues); - } - -} +/* + * 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.sql.SQLException; +import java.util.Map; + +import mir.storage.StorageObject; +import mir.storage.StorageObjectFailure; + +/** + * This class handles storage of other data and meta data + * + * @author mh + * @version 11.11.2000 + */ + + +public class EntityOther extends EntityUploadedMedia +{ + public EntityOther() { + super(); + } + + public EntityOther(StorageObject theStorage) { + this(); + setStorage(theStorage); + } + + public void update() throws StorageObjectFailure { + super.update(); + try { + theStorageObject.executeUpdate( + "update content set is_produced='0' where to_media=" + getId()); + } + catch (SQLException e) { + throwStorageObjectFailure(e, "EntityOther :: update :: failed!! "); + } + } + + public void setValues(Map theStringValues) { + if (theStringValues != null) { + if (!theStringValues.containsKey("is_published")) + theStringValues.put("is_published", "0"); + } + super.setValues(theStringValues); + } + +} diff --git a/source/mircoders/entity/EntityUploadedMedia.java b/source/mircoders/entity/EntityUploadedMedia.java index 35da22b1..0ef98fb5 100755 --- a/source/mircoders/entity/EntityUploadedMedia.java +++ b/source/mircoders/entity/EntityUploadedMedia.java @@ -31,7 +31,7 @@ package mircoders.entity; -import java.util.HashMap; +import java.util.Map; import freemarker.template.SimpleList; import freemarker.template.SimpleScalar; @@ -53,7 +53,7 @@ import mircoders.storage.DatabaseUploadedMedia; /** * * @author mh, mir-coders group - * @version $Id: EntityUploadedMedia.java,v 1.20 2003/02/28 18:27:08 idfx Exp $ + * @version $Id: EntityUploadedMedia.java,v 1.21 2003/03/04 22:00:53 zapata Exp $ */ @@ -82,7 +82,7 @@ public class EntityUploadedMedia extends Entity { } } - public void setValues(HashMap theStringValues) { + public void setValues(Map theStringValues) { if (theStringValues != null) { if (!theStringValues.containsKey("is_published")) theStringValues.put("is_published", "0"); diff --git a/source/mircoders/entity/EntityVideo.java b/source/mircoders/entity/EntityVideo.java index c97b37ea..97cb75ae 100755 --- a/source/mircoders/entity/EntityVideo.java +++ b/source/mircoders/entity/EntityVideo.java @@ -32,7 +32,7 @@ package mircoders.entity; import java.sql.SQLException; -import java.util.HashMap; +import java.util.Map; import mir.storage.StorageObject; import mir.storage.StorageObjectFailure; @@ -73,7 +73,7 @@ public class EntityVideo extends EntityUploadedMedia } } - public void setValues(HashMap theStringValues) { + public void setValues(Map theStringValues) { if (theStringValues != null) { if (!theStringValues.containsKey("is_published")) theStringValues.put("is_published", "0"); diff --git a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java index 8f246ceb..fe7b59e0 100755 --- a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java @@ -353,7 +353,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer { public Object getValue(EntityAdapter anEntityAdapter) { try { return anEntityAdapter.getRelation( - "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)", + "is_published='t' and exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)", "id", definition); } diff --git a/source/mircoders/media/MediaRequest.java b/source/mircoders/media/MediaRequest.java index 2ae108b1..3142ca0a 100755 --- a/source/mircoders/media/MediaRequest.java +++ b/source/mircoders/media/MediaRequest.java @@ -32,7 +32,7 @@ package mircoders.media; import java.util.GregorianCalendar; -import java.util.HashMap; +import java.util.Map; import java.util.Iterator; import javax.servlet.ServletContext; @@ -64,7 +64,7 @@ import mircoders.storage.DatabaseMediaType; * appropriate media objects are set. * * @author mh - * @version $Id: MediaRequest.java,v 1.14 2003/02/28 18:27:08 idfx Exp $ + * @version $Id: MediaRequest.java,v 1.15 2003/03/04 22:00:53 zapata Exp $ * */ @@ -92,7 +92,7 @@ public class MediaRequest implements FileHandler * is_published parameter (from the upload form) is supplied. (for backwards * compatibility.) */ - public void setFile(FilePart filePart, int fileNum, HashMap mediaValues) + public void setFile(FilePart filePart, int fileNum, Map mediaValues) throws FileHandlerException, FileHandlerUserException { String mediaId=null; diff --git a/source/mircoders/module/ModuleComment.java b/source/mircoders/module/ModuleComment.java index c9a6e4aa..c57a920b 100755 --- a/source/mircoders/module/ModuleComment.java +++ b/source/mircoders/module/ModuleComment.java @@ -32,7 +32,7 @@ package mircoders.module; import java.io.PrintWriter; -import java.util.HashMap; +import java.util.Map; import mir.entity.Entity; import mir.log.LoggerToWriterAdapter; @@ -92,7 +92,7 @@ public class ModuleComment extends AbstractModule /** * setValues in the Entity and updates them on the StorageObject */ - public String set(HashMap theValues) throws ModuleException { + public String set(Map theValues) throws ModuleException { try { Entity theEntity = theStorage.selectById((String)theValues.get("id")); if (theEntity == null) diff --git a/source/mircoders/module/ModuleContent.java b/source/mircoders/module/ModuleContent.java index 0e5c305e..9c145256 100755 --- a/source/mircoders/module/ModuleContent.java +++ b/source/mircoders/module/ModuleContent.java @@ -31,7 +31,7 @@ package mircoders.module; -import java.util.HashMap; +import java.util.Map; import java.util.Iterator; import java.util.Set; import java.util.StringTokenizer; @@ -49,7 +49,7 @@ import mircoders.storage.DatabaseContentToMedia; /* * ContentObjekt - * - * @version $Id: ModuleContent.java,v 1.14 2003/01/25 17:50:35 idfx Exp $ + * @version $Id: ModuleContent.java,v 1.15 2003/03/04 22:00:53 zapata Exp $ * * @author RK, mir-coders * @@ -94,7 +94,7 @@ public class ModuleContent extends AbstractModule return returnList; } - public EntityList getContent(HashMap searchValues, boolean concat, int offset, EntityUsers user) + public EntityList getContent(Map searchValues, boolean concat, int offset, EntityUsers user) throws ModuleException { try { diff --git a/source/mircoders/module/ModuleTopics.java b/source/mircoders/module/ModuleTopics.java index 6629c4c0..2f30f64a 100755 --- a/source/mircoders/module/ModuleTopics.java +++ b/source/mircoders/module/ModuleTopics.java @@ -31,7 +31,7 @@ package mircoders.module; -import java.util.HashMap; +import java.util.Map; import freemarker.template.SimpleList; @@ -86,7 +86,7 @@ public class ModuleTopics extends AbstractModule { returnList = getByWhereClause("", "title", -1); } catch (Exception e) { - logger.warn("--getTopicsList: topics could not be fetched: " + e.getMessage()); + logger.warn("ModuleTopics.getTopicsList: topics could not be fetched: " + e.getMessage()); } return returnList; } @@ -98,22 +98,15 @@ public class ModuleTopics extends AbstractModule { * @return Id des eingef?gten Objekts * @exception ModuleException */ - public String set(HashMap theValues) throws ModuleException { + public String set(Map theValues) throws ModuleException { try { Entity theEntity = theStorage.selectById((String) theValues.get("id")); if (theEntity == null) { - throw new ModuleException("Kein Objekt mit id in Datenbank id: " + theValues.get("id")); + throw new ModuleException("No topic with id " + theValues.get("id") + " found"); } theEntity.setValues(theValues); - DatabaseContentToTopics db = DatabaseContentToTopics.getInstance(); - DatabaseContent dbc = DatabaseContent.getInstance(); - EntityList contentList = db.getContent((EntityTopics) theEntity); - if (contentList!=null) { - for (int i = 0; i < contentList.size(); i++) { - dbc.setUnproduced("id=" + ((EntityContent) contentList.elementAt(i)).getId()); - } - } theEntity.update(); + return theEntity.getId(); } catch (StorageObjectFailure e) { diff --git a/source/mircoders/producer/PDFPreFormattingProducerNode.java b/source/mircoders/producer/PDFPreFormattingProducerNode.java index 1ae82e34..7dd8d809 100755 --- a/source/mircoders/producer/PDFPreFormattingProducerNode.java +++ b/source/mircoders/producer/PDFPreFormattingProducerNode.java @@ -115,14 +115,14 @@ public class PDFPreFormattingProducerNode implements ProducerNode { theContent = StringUtil.convertNewline2Break(theContent); if (images == null){ - HashMap row = new HashMap(); + Map row = new HashMap(); row.put("text",theContent); row.put("hasImage","0"); brokenUpContent.add(row); } if (images != null){ //need to add checks for out of content! - HashMap row0 = new HashMap(); + Map row0 = new HashMap(); if (numCharsInAnImagelessRow>(theContent).length()){ row0.put("text",theContent); outOfText = true; @@ -137,8 +137,8 @@ public class PDFPreFormattingProducerNode implements ProducerNode { brokenUpContent.add(row0); aLogger.debug("CP1 is "+ currentPosition); while(images.hasNext()){ - HashMap row1 = new HashMap(); - HashMap row2 = new HashMap(); + Map row1 = new HashMap(); + Map row2 = new HashMap(); EntityImages currentImage=(EntityImages) images.next(); float img_width=(new Float(currentImage.getValue("img_width"))).floatValue(); float img_height=(new Float(currentImage.getValue("img_height"))).floatValue(); @@ -198,7 +198,7 @@ public class PDFPreFormattingProducerNode implements ProducerNode { aLogger.debug("CP3 is "+ currentPosition); } - HashMap row3 = new HashMap(); + Map row3 = new HashMap(); if (! outOfText){ row3.put("text",theContent.substring(currentPosition)); row3.put("hasImage","0"); diff --git a/source/mircoders/servlet/ServletModuleContent.java b/source/mircoders/servlet/ServletModuleContent.java index c44df637..478376af 100755 --- a/source/mircoders/servlet/ServletModuleContent.java +++ b/source/mircoders/servlet/ServletModuleContent.java @@ -33,6 +33,7 @@ package mircoders.servlet; import java.io.IOException; import java.util.GregorianCalendar; +import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -72,7 +73,7 @@ import freemarker.template.SimpleHash; * ServletModuleContent - * deliver html for the article admin form. * - * @version $Id: ServletModuleContent.java,v 1.37 2003/03/04 02:04:35 zapata Exp $ + * @version $Id: ServletModuleContent.java,v 1.38 2003/03/04 22:00:54 zapata Exp $ * @author rk, mir-coders * */ @@ -174,7 +175,7 @@ public class ServletModuleContent extends ServletModule //theLog.printDebugInfo(":: content :: trying to insert"); try { EntityUsers user = _getUser(req); - HashMap withValues = getIntersectingValues(req, DatabaseContent.getInstance()); + Map withValues = getIntersectingValues(req, DatabaseContent.getInstance()); String now = StringUtil.date2webdbDate(new GregorianCalendar()); withValues.put("date", now); @@ -320,7 +321,7 @@ public class ServletModuleContent extends ServletModule String idParam = aRequest.getParameter("id"); if (idParam == null) throw new ServletModuleException("Wrong call: (id) is missing"); - HashMap withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance()); + Map withValues = getIntersectingValues(aRequest, DatabaseContent.getInstance()); String[] topic_id = aRequest.getParameterValues("to_topic"); String content_id = aRequest.getParameter("id"); @@ -353,7 +354,7 @@ public class ServletModuleContent extends ServletModule * if the "id" parameter is null, it means show an empty form to add a new * article. */ - private void _showObject(String id, HttpServletRequest aRequest, HttpServletResponse aResponse) + public void _showObject(String id, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleException { try { diff --git a/source/mircoders/servlet/ServletModuleOpenIndy.java b/source/mircoders/servlet/ServletModuleOpenIndy.java index 0828b22b..e720bb90 100755 --- a/source/mircoders/servlet/ServletModuleOpenIndy.java +++ b/source/mircoders/servlet/ServletModuleOpenIndy.java @@ -42,6 +42,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.GregorianCalendar; +import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.ListIterator; @@ -120,7 +121,7 @@ import freemarker.template.TemplateModelRoot; * open-postings to the newswire * * @author mir-coders group - * @version $Id: ServletModuleOpenIndy.java,v 1.60 2003/02/28 18:27:08 idfx Exp $ + * @version $Id: ServletModuleOpenIndy.java,v 1.61 2003/03/04 22:00:54 zapata Exp $ * */ @@ -226,7 +227,7 @@ public class ServletModuleOpenIndy extends ServletModule { // ok, collecting data from form try { - HashMap withValues = getIntersectingValues(req, DatabaseComment.getInstance()); + Map withValues = getIntersectingValues(req, DatabaseComment.getInstance()); //no html in comments(for now) for (Iterator i=withValues.keySet().iterator(); i.hasNext(); ){ @@ -366,7 +367,7 @@ public class ServletModuleOpenIndy extends ServletModule throw new ServletModuleUserException(e.getMessage()); } - HashMap withValues = mp.getParameters(); + Map withValues = mp.getParameters(); //checking the onetimepasswd if(passwdProtection.equals("yes")){ @@ -755,7 +756,7 @@ public class ServletModuleOpenIndy extends ServletModule } else{ // then we'll sort by date! - HashMap dateToPosition = new HashMap(end,1.0F); //we know how big it will be + Map dateToPosition = new HashMap(end,1.0F); //we know how big it will be for(int i = start; i < end; i++) { String creationDate=(hits.doc(i)).get("creationDate"); // do a little dance in case two contents created at the same second! diff --git a/source/mircoders/servlet/ServletModuleUploadedMedia.java b/source/mircoders/servlet/ServletModuleUploadedMedia.java index ed4549d0..7d206473 100755 --- a/source/mircoders/servlet/ServletModuleUploadedMedia.java +++ b/source/mircoders/servlet/ServletModuleUploadedMedia.java @@ -1,389 +1,420 @@ -/* - * 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.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.util.HashMap; - -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.config.MirPropertiesConfiguration.PropertiesConfigExc; -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.FileHandlerException; -import mir.misc.FileHandlerUserException; -import mir.misc.WebdbMultipartRequest; -import mir.module.ModuleException; -import mir.servlet.ServletModule; -import mir.servlet.ServletModuleException; -import mir.servlet.ServletModuleUserException; -import mir.storage.StorageObjectFailure; -import mircoders.entity.EntityUploadedMedia; -import mircoders.entity.EntityUsers; -import mircoders.media.MediaRequest; -import mircoders.storage.DatabaseMediafolder; -import freemarker.template.SimpleHash; -import freemarker.template.SimpleList; - -/* - * ServletModuleBilder - - * liefert HTML fuer Bilder - * - * @version $Id: ServletModuleUploadedMedia.java,v 1.16 2003/02/23 05:00:15 zapata 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 ServletModuleException, ServletModuleUserException { - try { - EntityUsers user = _getUser(req); - MediaRequest mediaReq = new MediaRequest(user.getId(), false); - WebdbMultipartRequest mp = new WebdbMultipartRequest(req, (FileHandler)mediaReq); - EntityList mediaList = mediaReq.getEntityList(); - - 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 (FileHandlerUserException e) { - logger.error("ServletModuleUploadedMedia.insert: " + e.getMessage()); - throw new ServletModuleUserException(e.getMessage()); - } catch (FileHandlerException e) { - throw new ServletModuleException( - "upload -- media handling exception " + e.toString()); - } catch (StorageObjectFailure e) { - throw new ServletModuleException("upload -- storageobjectexception " - + e.toString()); - } catch (IOException e) { - throw new ServletModuleException("upload -- ioexception " + e.toString()); - } catch (PropertiesConfigExc e) { - throw new ServletModuleException("upload -- configexception " + e.toString()); - } - } - - public void update(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException { - - try { - EntityUsers user = _getUser(req); - WebdbMultipartRequest mp = new WebdbMultipartRequest(req, null); - HashMap 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 (IOException e) { - throw new ServletModuleException("upload -- ioexception " + e.toString()); - } - catch (ModuleException e) { - throw new ServletModuleException("upload -- moduleexception " + e.toString()); - } - catch (Exception e) { - throw new ServletModuleException("upload -- exception " + e.toString()); - } - - } - - - public void list(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { - // 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 (ModuleException e) { - throw new ServletModuleException(e.toString()); - } - catch (Exception e) { - throw new ServletModuleException(e.toString()); - } - } - - - public void add(HttpServletRequest req, HttpServletResponse res) - throws ServletModuleException { - try { - SimpleHash mergeData = new SimpleHash(); - mergeData.put("new", "1"); - SimpleHash popups = new SimpleHash(); - popups.put("mediafolderPopupData", DatabaseMediafolder.getInstance().getPopupData()); - String maxMedia = MirPropertiesConfiguration.instance().getString("ServletModule.OpenIndy.MaxMediaUploadItems"); - String numOfMedia = req.getParameter("medianum"); - 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 Integer.parseInt(maxMedia)) { + numOfMedia = maxMedia; + } + + int mediaNum = Integer.parseInt(numOfMedia); + SimpleList mediaFields = new SimpleList(); + for(int i =0; i
+ + + @@ -284,7 +285,8 @@ ${lang("content.audio")}: @@ -304,7 +306,8 @@ ${lang("content.video")}: @@ -323,7 +326,8 @@ ${lang("content.other")}: diff --git a/templates/admin/image.template b/templates/admin/image.template index 1e1baf6a..efc0d0ae 100755 --- a/templates/admin/image.template +++ b/templates/admin/image.template @@ -1,162 +1,173 @@ - - ${config["Mir.Name"]} | ${lang("image.htmltitle")} - - - - - - - - - - - -
@@ -30,6 +33,9 @@ function openWin(url) {
+ + + diff --git a/templates/admin/content.template b/templates/admin/content.template index 78c94945..7921f699 100755 --- a/templates/admin/content.template +++ b/templates/admin/content.template @@ -264,7 +264,8 @@ ${lang("content.images")}:
- ${lang("content.addimage")} + ${lang("content.addimage")} | + ${lang("content.uploadimage")}
- ${lang("content.addaudio")} + ${lang("content.addaudio")} | + ${lang("content.uploadaudio")}
- ${lang("content.addvideo")} + ${lang("content.addvideo")} | + ${lang("content.uploadvideo")}
- ${lang("content.addother")} + ${lang("content.addother")} | + ${lang("content.uploadother")}
- - - - -
- - ${lang("media.nr_of_media")}
-
-
-   -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - ${lang("media.created")}: ${data.webdb_create} / ${lang("media.changed")} ${data.webdb_lastchange}
- ${lang("media.published")}: ${data.publish_date} / ${data.publish_server}${data.publish_path}
- ${lang("media.format")}: ${data.media_descr} / ${data.img_width}x${data.img_height} / ${data.imgformatHashdata[to_img_format]["name"]} / ${data.imglayoutHashdata[to_img_layout]["name"]} / ${data.imgcolorHashdata[to_img_color]["name"]}
- ${lang("media.size")}: ${data.human_readable_size}
- ${lang("media.rights")}: ${data.rightsHashdata[to_rights]["name"]}
- ${lang("media.type")}: ${data.imgtypeHashdata[to_img_type]["name"]}
-
-
- ${lang("media.mediafolder")}: - -
- ${lang("media.description")}:
- ${lang("media.date")}: -
- ${lang("media.location")}:
- ${lang("media.creator")}: - -
- ${lang("media.keywords")}:
- ${lang("media.comment")}:
- ${lang("media.source")}:
- ${lang("media.is_published")} checked> -
- - ${lang("media.title")}: - - -
-
-
- ${lang("media.title")}: - - -
- - - - ${lang("media.is_published")} checked> - - -
- - + + ${config["Mir.Name"]} | ${lang("image.htmltitle")} + + + + + + + + + + +
+ + + + + + + + +
+ + ${lang("media.nr_of_media")}
+
+
+   +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + ${lang("media.created")}: ${data.webdb_create} / ${lang("media.changed")} ${data.webdb_lastchange}
+ ${lang("media.published")}: ${data.publish_date} / ${data.publish_server}${data.publish_path}
+ ${lang("media.format")}: ${data.media_descr} / ${data.img_width}x${data.img_height} / ${data.imgformatHashdata[to_img_format]["name"]} / ${data.imglayoutHashdata[to_img_layout]["name"]} / ${data.imgcolorHashdata[to_img_color]["name"]}
+ ${lang("media.size")}: ${data.human_readable_size}
+ ${lang("media.rights")}: ${data.rightsHashdata[to_rights]["name"]}
+ ${lang("media.type")}: ${data.imgtypeHashdata[to_img_type]["name"]}
+
+
+ ${lang("media.mediafolder")}: + +
+ ${lang("media.description")}:
+ ${lang("media.date")}: +
+ ${lang("media.location")}:
+ ${lang("media.creator")}: + +
+ ${lang("media.keywords")}:
+ ${lang("media.comment")}:
+ ${lang("media.source")}:
+ ${lang("media.is_published")} checked> +
+ + ${lang("media.title")}: + + + +
+
+
+ ${lang("media.title")}: + + +
+ + + + + ${lang("media.is_published")} checked> + + + +
+ + + diff --git a/templates/admin/media.template b/templates/admin/media.template index 987998d2..d6ecab9f 100755 --- a/templates/admin/media.template +++ b/templates/admin/media.template @@ -15,6 +15,9 @@ function openWin(url) {
+ + +
@@ -30,6 +33,9 @@ function openWin(url) {
+ + + diff --git a/templates/admin/video.template b/templates/admin/video.template index f89994a3..45f12d56 100755 --- a/templates/admin/video.template +++ b/templates/admin/video.template @@ -15,6 +15,9 @@ function openWin(url) { + + +
@@ -30,6 +33,9 @@ function openWin(url) {
+ + + -- 2.11.0