Initial revision
authoridfx <idfx>
Fri, 24 Aug 2001 13:05:25 +0000 (13:05 +0000)
committeridfx <idfx>
Fri, 24 Aug 2001 13:05:25 +0000 (13:05 +0000)
100 files changed:
build.sh [new file with mode: 0755]
build.xml [new file with mode: 0755]
dbscripts/create_pg.sql [new file with mode: 0755]
dbscripts/help_arttype.sql [new file with mode: 0755]
dbscripts/help_imgcolor.sql [new file with mode: 0755]
dbscripts/help_imgform.sql [new file with mode: 0755]
dbscripts/help_imglay.sql [new file with mode: 0755]
dbscripts/help_imgtype.sql [new file with mode: 0755]
dbscripts/help_lang.sql [new file with mode: 0755]
dbscripts/help_rights.sql [new file with mode: 0755]
dbscripts/help_users.sql [new file with mode: 0755]
dbscripts/lib/codec.pl [new file with mode: 0755]
dbscripts/lib/convert.pl [new file with mode: 0755]
dbscripts/lib/log.pl [new file with mode: 0755]
dbscripts/lib/property.pl [new file with mode: 0755]
dbscripts/lib/subst.pl [new file with mode: 0755]
dbscripts/mail.config [new file with mode: 0755]
dbscripts/mail2table.pl [new file with mode: 0755]
dbscripts/make_smsticker [new file with mode: 0755]
dbscripts/pg_imageimport.pl [new file with mode: 0755]
dbscripts/smsreceiver.config [new file with mode: 0755]
dbscripts/smsreceiver.pl [new file with mode: 0755]
dbscripts/table2html.pl [new file with mode: 0755]
dbscripts/table2mail.pl [new file with mode: 0755]
dbscripts/wiz_templates/show.template [new file with mode: 0755]
dbscripts/wizard.pl [new file with mode: 0755]
doc/CHANGES.txt [new file with mode: 0755]
doc/DC.txt [new file with mode: 0755]
doc/STRUKTUR.txt [new file with mode: 0755]
doc/TODO.txt [new file with mode: 0755]
etc/web.xml [new file with mode: 0755]
lib/README.txt [new file with mode: 0755]
lib/ant.jar [new file with mode: 0755]
lib/cos.jar [new file with mode: 0755]
lib/crimson.jar [new file with mode: 0755]
lib/dbconbroker.jar [new file with mode: 0755]
lib/freemarker.jar [new file with mode: 0755]
lib/gnu-regexp-1.0.8.jar [new file with mode: 0755]
lib/jai_codec.jar [new file with mode: 0755]
lib/jai_core.jar [new file with mode: 0755]
lib/jaxp.jar [new file with mode: 0755]
lib/mlibwrapper_jai.jar [new file with mode: 0755]
lib/mm.mysql-2.0.2-bin.jar [new file with mode: 0755]
lib/postgresql-jdbc.jar [new file with mode: 0755]
lib/saxon.jar [new file with mode: 0755]
lib/servlet-2.2.jar [new file with mode: 0755]
lib/xalan.jar [new file with mode: 0755]
lib/xerces.jar [new file with mode: 0755]
log/README [new file with mode: 0755]
source/Mir.java [new file with mode: 0755]
source/OpenMir.java [new file with mode: 0755]
source/config.properties [new file with mode: 0755]
source/config.properties-dist [new file with mode: 0755]
startxml.sh [new file with mode: 0755]
web/formate.css [new file with mode: 0755]
web/help/content.html [new file with mode: 0755]
web/help/content_datum.html [new file with mode: 0755]
web/help/content_freigeschaltet.html [new file with mode: 0755]
web/help/content_inhalt.html [new file with mode: 0755]
web/help/content_oldstyle.html [new file with mode: 0755]
web/help/content_ort.html [new file with mode: 0755]
web/help/content_termin.html [new file with mode: 0755]
web/help/content_terminname.html [new file with mode: 0755]
web/help/content_urheber.html [new file with mode: 0755]
web/help/help.html [new file with mode: 0755]
web/help/users.html [new file with mode: 0755]
web/img/extlink.gif [new file with mode: 0755]
web/img/head_small.gif [new file with mode: 0755]
web/img/help.gif [new file with mode: 0755]
web/img/intlink.gif [new file with mode: 0755]
web/img/maillink.gif [new file with mode: 0755]
web/img/pointgris.gif [new file with mode: 0755]
web/index.html [new file with mode: 0755]
web/produced/img/arrow_down.gif [new file with mode: 0755]
web/produced/img/audio_big.gif [new file with mode: 0755]
web/produced/img/audio_small.gif [new file with mode: 0755]
web/produced/img/bashcomp2.gif [new file with mode: 0755]
web/produced/img/cleft.gif [new file with mode: 0755]
web/produced/img/dot.gif [new file with mode: 0755]
web/produced/img/extlink.gif [new file with mode: 0755]
web/produced/img/h_m.gif [new file with mode: 0755]
web/produced/img/h_r.gif [new file with mode: 0755]
web/produced/img/h_slice.gif [new file with mode: 0755]
web/produced/img/head_left_logo.gif [new file with mode: 0755]
web/produced/img/head_small.gif [new file with mode: 0755]
web/produced/img/help.gif [new file with mode: 0755]
web/produced/img/intlink.gif [new file with mode: 0755]
web/produced/img/link_small.gif [new file with mode: 0755]
web/produced/img/logo_small.gif [new file with mode: 0755]
web/produced/img/mail_small.gif [new file with mode: 0755]
web/produced/img/maillink.gif [new file with mode: 0755]
web/produced/img/photo_big.gif [new file with mode: 0755]
web/produced/img/photo_small.gif [new file with mode: 0755]
web/produced/img/pointgris.gif [new file with mode: 0755]
web/produced/img/search_icon.gif [new file with mode: 0755]
web/produced/img/sp.gif [new file with mode: 0755]
web/produced/img/text_big.gif [new file with mode: 0755]
web/produced/img/text_small.gif [new file with mode: 0755]
web/produced/img/video_big.gif [new file with mode: 0755]
web/produced/img/video_small.gif [new file with mode: 0755]

diff --git a/build.sh b/build.sh
new file mode 100755 (executable)
index 0000000..0ad6861
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+# build.sh -- Build Script NadirAktuell
+
+# Identify the custom class path components we need
+JAVA_HOME=/usr/lib/j2sdk1.3
+LIB_HOME=lib
+TOMCAT_HOME=/usr/share/tomcat
+CP=$LIB_HOME/ant.jar:$LIB_HOME/servlet-2.2.jar
+CP=$CP:$LIB_HOME/xerxes.jar:$TOMCAT_HOME/lib/tomcat.jar
+CP=$CP:$LIB_HOME/jaxp.jar:$LIB_HOME/xalan.jar:$LIB_HOME/crimson.jar
+CP=$CP:$LIB_HOME/gnu-regexp-1.0.8.jar
+CP=$CP:$LIB_HOME/freemarker.jar
+CP=$CP:$LIB_HOME/mm.mysql
+CP=$CP:$LIB_HOME/dbconbroker.jar
+CP=$CP:$LIB_HOME/cos.jar
+CP=$CP:$LIB_HOME/saxon.jar
+CP=$CP:$LIB_HOME/jai_codec.jar
+CP=$CP:$LIB_HOME/jai_core.jar
+CP=$CP:$JAVA_HOME/lib/tools.jar
+CP=$CP:$JAVA_HOME/lib/rt.jar
+
+# Execute ANT to perform the requested build target
+/usr/lib/j2sdk1.3/bin/java -classpath $CP:$CLASSPATH org.apache.tools.ant.Main \
+  -Dtomcat.home=$TOMCAT_HOME "$@"
diff --git a/build.xml b/build.xml
new file mode 100755 (executable)
index 0000000..875cb2f
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,152 @@
+<project name="Mir" default="compile" basedir=".">
+
+
+<!-- Property Definitions
+     app.name          Base name of this application, used to
+                       construct filenames and directories.
+
+     deploy.home       The name of the directory into which the
+                       deployment hierarchy will be created.
+                       Normally, this will be the name of a
+                       subdirectory under $TOMCAT_HOME/webapps.
+
+     dist.home        The name of the base directory in which
+                       distribution files are created.
+
+     dist.src          The name of the distribution JAR file
+                       containing the application source code,
+                       to be stored in the "dist.home" directory.
+                       This filename should end with ".jar".
+
+     dist.war          The name of the Web ARchive (WAR) file
+                       containing our deployable application.
+                       This filename should end with ".war".
+
+     javadoc.home      The name of the base directory in which
+                       the JavaDoc documentation for this application
+                       is generated.
+
+     tomcat.home       The name of the base directory in which
+                       Tomcat has been installed.  This value is
+                       normally set automatically from the value
+                       of the TOMCAT_HOME environment variable.
+-->
+
+  <property name="app.name"       value="Mir"/>
+  <property name="deploy.home"    value="../${app.name}"/>
+  <property name="dist.home"      value="${deploy.home}"/>
+  <property name="dist.src"       value="${app.name}.jar"/>
+  <property name="dist.war"       value="${app.name}.war"/>
+  <property name="javadoc.home"   value="${deploy.home}/javadoc"/>
+
+
+<!-- The "prepare" target is used to construct the deployment home
+     directory structure (if necessary), and to copy in static files
+     as required.  In the example below, Ant is instructed to create
+     the deployment directory, copy the contents of the "web/" source
+     hierarchy, and set up the WEB-INF subdirectory appropriately.
+-->
+
+  <target name="prepare">
+    <mkdir  dir="${deploy.home}"/>
+    <copy todir="${deploy.home}">
+      <fileset dir="web"/>
+    </copy>
+    <mkdir  dir="${deploy.home}/templates"/>
+    <copy todir="${deploy.home}/templates">
+      <fileset dir="templates"/>
+    </copy>
+    <mkdir  dir="${deploy.home}/src"/>
+    <copy todir="${deploy.home}/src">
+      <fileset dir="source"/>
+    </copy>
+
+    <mkdir  dir="${deploy.home}/WEB-INF"/>
+    <copy  file="etc/web.xml"          tofile="${deploy.home}/WEB-INF/web.xml"/>
+    <copy  file="etc/${app.name}.conf" tofile="${deploy.home}/WEB-INF/${app.name}.conf"/>
+    <mkdir  dir="${deploy.home}/WEB-INF/classes"/>
+    <mkdir  dir="${deploy.home}/WEB-INF/lib"/>
+    <copy todir="${deploy.home}/WEB-INF/lib">
+      <fileset dir="lib"/>
+    </copy>
+    <mkdir  dir="${javadoc.home}"/>
+    <mkdir  dir="${deploy.home}/log"/>
+
+  </target>
+
+
+<!-- The "clean" target removes the deployment home directory structure,
+     so that the next time the "compile" target is requested, it will need
+     to compile everything from scratch.
+-->
+
+
+  <target name="clean">
+    <delete dir="${deploy.home}"/>
+  </target>
+
+
+<!-- The "compile" target is used to compile (or recompile) the Java classes
+     that make up this web application.  The recommended source code directory
+     structure makes this very easy because the <javac> task automatically
+     works its way down a source code hierarchy and compiles any class that
+     has not yet been compiled, or where the source file is newer than the
+     class file.
+
+     Feel free to adjust the compilation option parameters (debug,
+     optimize, and deprecation) to suit your requirements.  It is also
+     possible to base them on properties, so that you can adjust this
+     behavior at runtime.
+
+     The "compile" task depends on the "prepare" task, so the deployment
+     home directory structure will be created if needed the first time.
+-->
+
+  <target name="compile" depends="prepare">
+    <javac srcdir="source" destdir="${deploy.home}/WEB-INF/classes"
+           classpath="${deploy.home}/WEB-INF/classes"
+           debug="on" optimize="off" deprecation="on"/>
+    <copy   todir="${deploy.home}/WEB-INF/classes">
+      <fileset dir="source" includes="**/*.properties"/>
+    </copy>
+  </target>
+
+
+<!-- The "javadoc" target is used to create the Javadoc API documentation
+     for the Java classes in this web application.  It is assumed that
+     this documentation is included in the deployed application, so the
+     example below generates the Javadoc HTML files in a subdirectory under
+     the deployment home directory.  Feel free to customize the options for
+     the JavaDoc task, after consulting the Ant documentation.
+-->
+
+  <target name="javadoc" depends="prepare">
+    <javadoc packagenames="mir.*, webdb.*"
+            sourcefiles="source/${app.name}.java"
+            sourcepath="source"
+             destdir="${javadoc.home}"/>
+  </target>
+
+
+<!-- The "all" target rebuilds everything by executing the "clean"
+     target first, which forces the "compile" target to compile all
+     source code instead of just the files that have been changed.
+-->
+
+  <target name="all" depends="clean,prepare,compile,javadoc"/>
+
+
+<!-- The "dist" target builds the distribution Web ARchive (WAR) file
+     for this application, suitable for distribution to sites that wish
+     to install your application.  It also creates a JAR file containing
+     the source code for this application, if you wish to distribute
+     that separately.
+-->
+
+  <target name="dist" depends="prepare,compile">
+    <jar jarfile="${dist.home}/${dist.src}"
+         basedir="./source"/>
+    <jar jarfile="${dist.home}/${dist.war}"
+         basedir="${deploy.home}"/>
+  </target>
+</project>
\ No newline at end of file
diff --git a/dbscripts/create_pg.sql b/dbscripts/create_pg.sql
new file mode 100755 (executable)
index 0000000..620353e
--- /dev/null
@@ -0,0 +1,221 @@
+\connect - postgres
+CREATE SEQUENCE "media_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"media_id_seq"');
+CREATE SEQUENCE "media_folder_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"media_folder_id_seq"');
+CREATE SEQUENCE "creator_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"creator_id_seq"');
+CREATE SEQUENCE "feature_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"feature_id_seq"');
+CREATE SEQUENCE "topic_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"topic_id_seq"');
+CREATE SEQUENCE "webdb_users_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"webdb_users_id_seq"');
+CREATE SEQUENCE "comment_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"comment_id_seq"');
+CREATE SEQUENCE "breaking_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"breaking_id_seq"');
+CREATE SEQUENCE "messages_id_seq" start 1 increment 1 maxvalue 2147483647 minvalue 1  cache 1 ;
+SELECT nextval ('"messages_id_seq"');
+CREATE TABLE "media_folder" (
+       "id" int4 DEFAULT nextval('media_folder_id_seq'::text) NOT NULL,
+       "name" character varying(255) NOT NULL,
+       "date" character(8) NOT NULL,
+       "place" character varying(80),
+       "keywords" text,
+       "comment" text,
+       "webdb_create" timestamp NOT NULL,
+       "webdb_lastchange" timestamp
+);
+CREATE TABLE "media_type" (
+       "id" int2 NOT NULL,
+       "name" character varying(80) NOT NULL,
+       "classname" character varying(80) NOT NULL,
+       "tablename" character varying(80) NOT NULL,
+       "dcname" character varying(20)
+);
+CREATE TABLE "img_format" (
+       "id" int2 NOT NULL,
+       "name" character varying(20) NOT NULL,
+       "extension" character varying(10) NOT NULL,
+       "mimetype" character varying(40) NOT NULL,
+       "commment" character varying(255)
+);
+CREATE TABLE "img_layout" (
+       "id" int2 NOT NULL,
+       "name" character varying(20) NOT NULL
+);
+CREATE TABLE "img_type" (
+       "id" int2 NOT NULL,
+       "name" character varying(30) NOT NULL
+);
+CREATE TABLE "img_color" (
+       "id" int2 NOT NULL,
+       "name" character varying(30) NOT NULL
+);
+CREATE TABLE "language" (
+       "id" int4 NOT NULL,
+       "name" character varying(40) NOT NULL,
+       "code" character varying(2) NOT NULL,
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "rights" (
+       "id" int4 NOT NULL,
+       "name" character varying(80) NOT NULL,
+       "description" text,
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "creator" (
+       "id" int4 DEFAULT nextval('creator_id_seq'::text) NOT NULL,
+       "name" character varying(80) NOT NULL,
+       "main_url" character varying(255),
+       "email" character varying(80),
+       "address" character varying(80),
+       "phone" character varying(20),
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "feature" (
+       "id" int4 DEFAULT nextval('feature_id_seq'::text) NOT NULL,
+       "title" character varying(80) NOT NULL,
+       "description" text,
+       "filename" character varying(20) NOT NULL,
+       "main_url" character varying(255),
+       "is_published" bool DEFAULT '0' NOT NULL,
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "webdb_users" (
+       "id" int4 DEFAULT nextval('webdb_users_id_seq'::text) NOT NULL,
+       "login" character varying(16) NOT NULL,
+       "password" character varying(16) NOT NULL,
+       "is_admin" bool DEFAULT '0' NOT NULL,
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "content_x_topic" (
+       "content_id" int4 NOT NULL,
+       "topic_id" int4 NOT NULL
+);
+CREATE TABLE "article_type" (
+       "id" int4 NOT NULL,
+       "name" character varying(20) NOT NULL
+);
+CREATE TABLE "topic" (
+       "id" int4 DEFAULT nextval('topic_id_seq'::text) NOT NULL,
+       "parent_id" int4 DEFAULT '0' NOT NULL,
+       "title" character varying(80) NOT NULL,
+       "description" text,
+       "filename" character varying(20) NOT NULL,
+       "main_url" character varying(255),
+       "archiv_url" character varying(255),
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "comment" (
+       "id" int4 DEFAULT nextval('comment_id_seq'::text) 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 NOT NULL,
+       "is_published" bool DEFAULT '1' NOT NULL,
+       "to_language" int4 DEFAULT '0' NOT NULL,
+       "to_media" int4 NOT NULL,
+       PRIMARY KEY ("id")
+);
+CREATE TABLE "media" (
+       "id" int4 DEFAULT nextval('media_id_seq'::text) NOT NULL,
+       "title" character varying(80) NOT NULL,
+       "subtitle" character varying(30),
+       "edittitle" character varying(30),
+       "date" character(8) NOT NULL,
+       "place" character varying(80),
+       "creator" character varying(80),
+       "creator_main_url" character varying(255),
+       "creator_email" character varying(80),
+       "creator_address" character varying(80),
+       "creator_phone" character varying(20),
+       "description" text,
+       "keywords" text,
+       "comment" text,
+       "source" character varying(255),
+       "publish_date" timestamp,
+       "publish_server" character varying(255),
+       "publish_path" character varying(255),
+       "is_published" bool DEFAULT '0' NOT NULL,
+       "to_feature" int4 DEFAULT '0' NOT NULL,
+       "to_media_folder" int4 DEFAULT '0' NOT NULL,
+       "to_media_type" int2 DEFAULT '0' NOT NULL,
+       "to_creator" int4 DEFAULT '0' NOT NULL,
+       "to_publisher" int4 NOT NULL,
+       "to_language" int4 DEFAULT '0',
+       "to_rights" int4 DEFAULT '0',
+       "webdb_create" timestamp NOT NULL,
+       "webdb_lastchange" timestamp,
+       "to_media" int4
+);
+CREATE TABLE "images" (
+       "image_data" oid,
+       "icon_data" oid,
+       "icon_path" character varying(255),
+       "icon_is_produced" bool DEFAULT '0' NOT NULL,
+       "year" character varying(40),
+       "img_width" int2,
+       "img_height" int2,
+       "to_img_format" int2 DEFAULT '0' NOT NULL,
+       "to_img_layout" int2 DEFAULT '0' NOT NULL,
+       "to_img_type" int2 DEFAULT '0' NOT NULL,
+       "to_img_color" int2 DEFAULT '0' NOT NULL,
+       "icon_width" int2,
+       "icon_height" int2
+)
+inherits ("media");
+CREATE TABLE "content" (
+       "content_data" text,
+       "link_url" character varying(255),
+       "date_from" character varying(8),
+       "date_to" character varying(8),
+       "date_name" character varying(255),
+       "is_html" bool DEFAULT '0' NOT NULL,
+       "is_produced" bool DEFAULT '0' NOT NULL,
+       "is_stored" bool DEFAULT '0' NOT NULL,
+       "is_mail_sent" bool DEFAULT '1' NOT NULL,
+       "is_digest_sent" bool DEFAULT '1' NOT NULL,
+       "to_article_type" int2 DEFAULT '0' NOT NULL
+)
+inherits ("media");
+CREATE TABLE "breaking" (
+       "id" int4 DEFAULT nextval('breaking_id_seq'::text) NOT NULL,
+       "text" character varying(255) NOT NULL,
+       "webdb_create" timestamp NOT NULL
+);
+CREATE TABLE "messages" (
+       "id" int4 DEFAULT nextval('messages_id_seq'::text) NOT NULL,
+       "title" character varying(30),
+       "description" character varying(255) NOT NULL,
+       "creator" character varying(30) NOT NULL,
+       "webdb_create" timestamp NOT NULL
+);
+CREATE TABLE "videos" (
+       "video_data" oid,
+       "to_video_type" int2 DEFAULT '0' NOT NULL
+)
+inherits ("media");
+CREATE FUNCTION "plpgsql_call_handler" ( ) RETURNS opaque AS '/usr/lib/postgresql/lib/plpgsql.so' LANGUAGE 'C';
+CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql' HANDLER "plpgsql_call_handler" LANCOMPILER 'PL/pgSQL';
+CREATE  INDEX "idx_comment_to_media" on "comment" using btree ( "to_media" "int4_ops" );
+CREATE  INDEX "idx_content_to_article_type" on "content" using btree ( "to_article_type" "int2_ops" );
+CREATE  INDEX "idx_content_is_produced" on "content" using btree ( "is_produced" "bool_ops" );
+CREATE  INDEX "idx_content_is_published__to_ar" on "content" using btree ( "is_published" "bool_ops", "to_article_type" "int2_ops" );
+CREATE  INDEX "idx_webdb_user_log_pas_is_admin" on "webdb_users" using btree ( "login" "varchar_ops", "password" "varchar_ops", "is_admin" "bool_ops" );
+CREATE  INDEX "idx_content_is_stored" on "content" using btree ( "is_stored" "bool_ops" );
+CREATE  INDEX "idx_content_is_published__id" on "content" using btree ( "is_published" "bool_ops", "id" "int4_ops" );
+CREATE UNIQUE INDEX "idx_content" on "content_x_topic" using btree ( "content_id" "int4_ops", "topic_id" "int4_ops" );
+CREATE  INDEX "idx_webdb_user_log_pas" on "webdb_users" using btree ( "login" "varchar_ops", "password" "varchar_ops" );
+CREATE UNIQUE INDEX "idx_topic" on "content_x_topic" using btree ( "topic_id" "int4_ops", "content_id" "int4_ops" );
+CREATE  INDEX "idx_topic_title" on "topic" using btree ( "title" "varchar_ops" );
+CREATE  INDEX "idx_images_is_published__icon_i" on "images" using btree ( "is_published" "bool_ops", "icon_is_produced" "bool_ops" );
+CREATE  INDEX "idx_content_is_pub__to_art__to_" on "content" using btree ( "is_published" "bool_ops", "to_article_type" "int2_ops", "id" "int4_ops" );
+CREATE UNIQUE INDEX "idx_images_id" on "images" using btree ( "id" "int4_ops" );
+CREATE UNIQUE INDEX "idx_content_id" on "content" using btree ( "id" "int4_ops" );
+CREATE UNIQUE INDEX "idx_topic_id" on "topic" using btree ( "id" "int4_ops" );
diff --git a/dbscripts/help_arttype.sql b/dbscripts/help_arttype.sql
new file mode 100755 (executable)
index 0000000..2c7680b
--- /dev/null
@@ -0,0 +1,12 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "article_type" VALUES (0,'OpenPosting');
+INSERT INTO "article_type" VALUES (1,'Newswire');
+INSERT INTO "article_type" VALUES (2,'Feature');
+INSERT INTO "article_type" VALUES (3,'Spezial (Topicpage)');
+INSERT INTO "article_type" VALUES (4,'Spezial (Startpage)');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_imgcolor.sql b/dbscripts/help_imgcolor.sql
new file mode 100755 (executable)
index 0000000..d4d08fd
--- /dev/null
@@ -0,0 +1,12 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "img_color" VALUES (0,'--');
+INSERT INTO "img_color" VALUES (3,'color (16)');
+INSERT INTO "img_color" VALUES (4,'color (256)');
+INSERT INTO "img_color" VALUES (1,'b/w');
+INSERT INTO "img_color" VALUES (2,'color');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_imgform.sql b/dbscripts/help_imgform.sql
new file mode 100755 (executable)
index 0000000..96e177c
--- /dev/null
@@ -0,0 +1,9 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "img_format" VALUES (0,'jpeg','jpg','image/jpg','jpeg nur vom original bearbeiten');
+INSERT INTO "img_format" VALUES (1,'gif','gif','image/gif',NULL);
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_imglay.sql b/dbscripts/help_imglay.sql
new file mode 100755 (executable)
index 0000000..9b7165f
--- /dev/null
@@ -0,0 +1,11 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "img_layout" VALUES (0,'--');
+INSERT INTO "img_layout" VALUES (1,'quer');
+INSERT INTO "img_layout" VALUES (2,'hoch');
+INSERT INTO "img_layout" VALUES (3,'quadrat');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_imgtype.sql b/dbscripts/help_imgtype.sql
new file mode 100755 (executable)
index 0000000..dc3c15a
--- /dev/null
@@ -0,0 +1,12 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "img_type" VALUES (0,'--');
+INSERT INTO "img_type" VALUES (1,'Plakat');
+INSERT INTO "img_type" VALUES (2,'Photo');
+INSERT INTO "img_type" VALUES (3,'Grafik');
+INSERT INTO "img_type" VALUES (4,'Kartenmaterial');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_lang.sql b/dbscripts/help_lang.sql
new file mode 100755 (executable)
index 0000000..ca3356c
--- /dev/null
@@ -0,0 +1,9 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "language" VALUES (0,'deutsch','de');
+INSERT INTO "language" VALUES (1,'english','en');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_rights.sql b/dbscripts/help_rights.sql
new file mode 100755 (executable)
index 0000000..ae5d787
--- /dev/null
@@ -0,0 +1,11 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "rights" VALUES (0,'keine angabe',NULL);
+INSERT INTO "rights" VALUES (1,'indymedia','rechte liegen bei indymedia');
+INSERT INTO "rights" VALUES (2,'rechte bei autor/innen',NULL);
+INSERT INTO "rights" VALUES (3,'frei ','keiner hat rechte dran');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/help_users.sql b/dbscripts/help_users.sql
new file mode 100755 (executable)
index 0000000..42cb663
--- /dev/null
@@ -0,0 +1,11 @@
+UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" !~ '^pg_';
+\connect - postgres
+INSERT INTO "webdb_users" VALUES (1,'open','','f');
+INSERT INTO "webdb_users" VALUES (2,'redaktion','indymedia','t');
+INSERT INTO "webdb_users" VALUES (3,'tollendorf','indymedia','t');
+INSERT INTO "webdb_users" VALUES (4,'admin','indymedia','t');
+BEGIN TRANSACTION;
+CREATE TEMP TABLE "tr" ("tmp_relname" name, "tmp_reltriggers" smallint);
+INSERT INTO "tr" SELECT C."relname", count(T."oid") FROM "pg_class" C, "pg_trigger" T WHERE C."oid" = T."tgrelid" AND C."relname" !~ '^pg_' GROUP BY 1;
+UPDATE "pg_class" SET "reltriggers" = TMP."tmp_reltriggers" FROM "tr" TMP WHERE "pg_class"."relname" = TMP."tmp_relname";
+COMMIT TRANSACTION;
diff --git a/dbscripts/lib/codec.pl b/dbscripts/lib/codec.pl
new file mode 100755 (executable)
index 0000000..9fb09d7
--- /dev/null
@@ -0,0 +1,156 @@
+#!/usr/bin/perl
+
+################################################################
+###    codec
+###
+### $VER: 2.1 (8bit,quoted-printable,perlish)$
+### USAGE: $codec=&Codec::new('perlish');
+###             $encoded=$codec->encode($clear);
+###             $clear=$codec->decode($encoded);       
+
+package Codec;
+
+
+$VERSION="1.1";
+
+sub new {
+       my($type)=shift;
+       my($res);
+       
+       return undef unless (defined $encode{$type});
+       
+       $$res{'encode'}=$encode{$type};
+       $$res{'decode'}=$decode{$type};
+       $$res{'type'}=$type;
+               
+       bless $res, "Codec";
+       
+       return $res;
+       }
+
+sub reset {
+       }
+
+sub encode {
+       my($obj,$str)=@_;
+       return &{$$obj{'encode'}}($str);
+       }
+       
+sub decode {   
+       my($obj,$str)=@_;
+       return &{$$obj{'decode'}}($str);
+       }
+
+sub name {
+       my($obj)=shift;
+       return $$obj{'type'};
+       }
+       
+################################################################
+###    local
+
+$crlf=pack("CC",13,10);
+
+################################################################
+###    id
+
+$encode{'8bit'}=sub { return $_[0]; };
+$decode{'8bit'}=sub { return $_[0]; };
+
+################################################################
+###    perlish
+
+sub quote_perlish {
+       my($str)=@_;
+       
+       $str=~s/\\/\\\\/g;
+       
+       $str=~s/\"/\\042/g;
+       $str=~s/\'/\\047/g;
+
+       $str=~s/\@/\\@/g;
+       $str=~s/([\x80-\xFF])/sprintf("\\x%02x",ord($1))/eg;
+       $str=~s/([\x00-\x20])/sprintf("\\x%02x",ord($1))/eg;
+       return $str;
+       }
+
+sub convert_perlish {
+       my($item)=shift;
+       my($type,$key,$value,@res,$entry);
+       
+       $type=ref($item);
+       
+       if ((!defined $type)||($type eq "")) {
+               return "\042".&quote_perlish($item)."\042";
+               }
+       else {
+               if ($type eq "HASH") {
+                       while (($key,$value)=each %$item) {
+                               $entry="\042".&quote_perlish($key)."\042";
+                               $entry.="=>";
+                               $entry.=&convert_perlish($value);
+                               push(@res,$entry);
+                               }
+                       return "{".join(",",@res)."}";  
+                       }
+               if ($type eq "ARRAY") {
+                       foreach $value (@$item) {
+                               push(@res,&convert_perlish($value));    
+                               }
+                       return "[".join(",",@res)."]";
+                       }
+               if ($type eq "SCALAR") {
+                       return "\042".&quote_perlish($item)."\042";
+                       }       
+               return "";
+               }
+       };
+       
+$encode{'perlish'}=\&convert_perlish;
+
+$decode{'perlish'}=sub {
+       my($str)=shift;
+       my($res);
+       
+       return eval($str);
+       };
+
+################################################################
+###    quoted-printable
+
+$encode{'quoted-printable'}=sub {
+       my($str)=shift;
+       my(@lines,$item);
+       
+       
+       $str=~s/=/=3D/g;
+       $str=~s/([\x00-\x1F\x80-\xFF])/sprintf("=%02X",ord($1))/eg;
+       
+       if (length($str)>75) {
+               while (length($str)>75) {
+                       if (substr($str,73,1) eq "=") {
+                               push(@lines,substr($str,0,73)."=");     ### soft break
+                               $str=substr($str,73);
+                               }
+                       elsif (substr($str,74,1) eq "=") {
+                               push(@lines,substr($str,0,74)."=");     ### soft break
+                               $str=substr($str,74);
+                               }
+                       else {
+                               push(@lines,substr($str,0,75)."=");     ### soft break
+                               $str=substr($str,75);
+                               }
+                       }
+               push(@lines,$str);      
+               $str=join($HTTP::crlf,@lines);
+               }
+               
+       return $str;    
+       };
+
+$decode{'quoted-printable'}=sub {
+       $_[0]=~s/=([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
+       $_[0]=~s/=$crlf//g;
+       return $_[0];
+       };
+1;
diff --git a/dbscripts/lib/convert.pl b/dbscripts/lib/convert.pl
new file mode 100755 (executable)
index 0000000..5da5c63
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# convert.pl
+#
+
+sub mk_workfile {
+       my($props)=shift;
+       local(*HANLDE);
+       my($now,$count,$dir,$prefix);
+
+       $dir=$$props{'convert'}{'work_dir'};
+       $prefix=$$props{'convert'}{'work_prefix'};
+       $now=time;
+       $count=0;
+       
+       while (-f $dir.$prefix.$now.".".$count) { $count++; }
+
+       ## fast touch
+       if (sysopen(HANDLE,$dir.$prefix.$now.".".$count,O_CREATE|O_RDWR)) { close(HANDLE); }
+
+       return $dir.$prefix.$now.".".$count;
+       }
+
+sub html_to_text {
+       my($props,$text)=@_;
+       local(*HANDLE);
+       my($file,$result);
+
+       $file=&mk_workfile($props);
+       if (open(HANDLE,">".$file)) {
+               print HANDLE $text;
+               close(HANDLE);
+               }
+       else {
+               ## error - do not convert
+               return $text;
+               }
+       if (open(HANDLE,$$props{'bin'}{'html_to_text'}.$file."|")) {
+               while (<HANDLE>) {
+                       $result.=$_;    
+                       }
+               close(HANDLE);  
+               unlink($file);
+               return $result;
+               }       
+       else {
+               unlink($file);
+               return $text;
+               }
+       }
+
+1;
diff --git a/dbscripts/lib/log.pl b/dbscripts/lib/log.pl
new file mode 100755 (executable)
index 0000000..279ff81
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+
+#
+#      Logfile Module (3.6.1998)       
+#
+#      USAGE: tie *HANDLE, 'Logfile', '<filename>', '<modulename';
+#
+#      $VER: 1.1$
+#
+
+package Logfile;
+
+$LOCK_EX=2;
+$LOCK_UN=8;
+
+sub mkname {
+       my($name)=shift;
+       my @timestr=localtime(time);
+       
+       $name=~s/\%d/$timestr[3]/eg;
+       $name=~s/\%m/$timestr[4]+1/eg;
+       $name=~s/\%y/$timestr[5]+1900/eg;
+       
+       return $name;
+       }
+
+# no reading from logfile
+sub READLINE { return undef; } 
+sub READ { return undef; }
+sub GETC { return undef; }
+
+sub PRINT {
+       my $obj=shift;
+       my @text=@_;
+       my @timestr=localtime(time);
+       
+       local(*OUT);
+       
+       if ((scalar(@text)>1) && ($text[0]=~/^\d+$/)) {
+               my($level)=shift(@text);
+               return if ($level<$$obj{'loglevel'});
+               }
+               
+       if (open(OUT,">>".$$obj{'filename'})) {
+               flock(OUT,$LOCK_EX);
+               seek(OUT,0,2);
+               printf OUT ("%02d.%02d.%s %02d:%02d:%02d [%d] %s: %s",
+                ($timestr[3]),
+                ($timestr[4]+1),
+                ($timestr[5]+1900),
+                $timestr[2],$timestr[1],$timestr[0],
+                $$,$$obj{'module'},
+                join("",@text));
+               flock(OUT,$LOCK_UN);
+               close(OUT);
+               }
+       }
+       
+sub TIEHANDLE {
+       my $obj;
+       shift;
+       $$obj{'filename'}=&mkname(shift);
+       $$obj{'module'}=shift;
+       $$obj{'loglevel'}=(shift || 0);
+        
+       bless $obj, 'Logfile';
+       
+       return $obj;
+       }       
+1;
diff --git a/dbscripts/lib/property.pl b/dbscripts/lib/property.pl
new file mode 100755 (executable)
index 0000000..8ddbabf
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+
+###########################################################
+### property module
+###
+### $VER: 2.1$ 
+
+package Property;
+
+sub compile {
+       my ($value)=shift;
+       $value=~s/\$\((\w+)\)/$ENV{$1}/e;
+       return $value;
+       }
+
+sub append {
+       my($hash,$file)=@_;
+       local(*FH);
+       my($line,$cat,$slot,$key,$value,$from,$to);
+       
+       $cat="public";
+       if (open(FH,$file)) {
+               while (<FH>) {
+                       s/[\r\n]+//g;
+                       next if /^\s*$/;
+                       next if /^#/;
+               
+                       if (/^\[(\w+)\]/) {
+                               $cat=$1;
+                               $$hash{$cat}{'_'}=$cat;
+                               next;
+                               }
+                       if (/^\[(\w+)\]\s*=\>\s*\[(\w+)\]$/) {
+                               $$hash{$2}=$$hash{$1};
+                               next;
+                               }
+                       if (/([^=\s]+)\s*=\s*(.*?)\s*$/) {
+                               $$hash{$cat}{$1}=$2;    
+                               next;
+                               }
+                       if (/([^=\s]+)\s*:\s*(.*)/) {
+                               $key=$1; $value=$2;
+                               $value=&compile($value);
+                               $$hash{$cat}{$key}=$value;      
+                               next;
+                               }
+                       if (/([^\<\s]+)\s*\<\<\s*(.*)/) {
+                               $slot=$1;
+                               undef @collect;
+                               while (<FH>) {
+                                       last if substr($_,0,2) eq "<<";
+                                       push(@collect,$_);
+                                       }
+                               $$hash{$cat}{$slot}=join("\n",@collect);        
+                               }
+                       }
+               close(FH);
+               }
+       else { print "CANNOT OPEN $file --- $!\n"; }
+       }
+       
+sub read { 
+       my($file)=shift;
+       my($hash)={}; 
+       
+       &append($hash,$file); 
+       return $hash; 
+       }       
+
+1;     
diff --git a/dbscripts/lib/subst.pl b/dbscripts/lib/subst.pl
new file mode 100755 (executable)
index 0000000..c45d74c
--- /dev/null
@@ -0,0 +1,446 @@
+#!/usr/bin/perl
+
+################################################################
+###    Preprocessor
+###
+### m
+###
+### $VER: 3.1.1 (% notation)$
+
+require "codec.pl";
+
+###########################################################    
+### token stuff
+
+package TokenStream;
+
+sub new {
+       local(*IN,$intro,$outro)=@_;
+       
+       $$stream{'handle'}=*IN;
+       $$stream{'buffer'}=[];
+       $$stream{'intro'}=$intro;
+       $$stream{'outro'}=$outro;
+       
+       bless $stream, "TokenStream";
+       
+       return $stream;
+       }
+       
+sub fetch {
+       my($stream)=shift;
+       my($token,$old);
+       local(*IN);
+       
+       if (defined ($token=shift(@{$$stream{'buffer'}}))) {
+               return $token;
+               }
+       else {
+               $old=$/;
+               $/=$$stream{'outro'};
+               *IN=$$stream{'handle'};
+               
+               $token=<IN>;
+               
+               if (($index=index($token,$$stream{'intro'}))>0) {
+                       push(@{$$stream{'buffer'}},substr($token,$index));
+                       $token=substr($token,0,$index);
+                       }
+               
+               $/=$old;
+               
+               return $token;
+               }       
+       }       
+
+sub feed {
+       my($stream,$value)=@_;
+       
+       if (ref $value) {
+               unshift(@{$$stream{'buffer'}},@$value);
+               }
+       else {
+               unshift(@{$$stream{'buffer'}},$value);  
+               }
+       }
+       
+###########################################################    
+### prepro stuff
+
+package Subst;
+       
+###########################################################    
+### local fun :-)
+       
+$localfun{'store'}=sub {
+       my($args,$env,$stream)=@_;
+       my($token,$field,$count);
+       
+       # print  "STORE $$args[1]\n";
+       
+       $field=$$args[1];
+       $count=0;
+       
+       $$env{$field}{'_data'}=[];
+       while (($token=$stream->fetch) && ($token ne "<%/store%>")) {
+               push(@{$$env{$field}{'_data'}},$token);
+               $count++;
+               }
+       $$env{$field}{'_pos'}=0;
+       $$env{$field}{'_size'}=$count;  
+       }; 
+       
+$localfun{'reset'}=sub {
+       my($args)=shift;
+       
+       $$env{$$args[1]}{'_pos'}=0;
+       };      
+       
+$localfun{'insert'}=sub {
+       my($args,$env,$stream)=@_;
+       
+       #print main::DEBUG "INSERT $$args[1] size=",scalar(@{$$env{$$args[1]}{'_data'}})," time=$$env{$$args[1]}{'_pos'}\n";
+       
+       $stream->feed($$env{$$args[1]}{'_data'});
+       $$env{$$args[1]}{'_pos'}++;
+       };      
+
+$localfun{'loop'}=sub {
+       my($args,$env,$stream)=@_;
+       my($token,@loop,$count);
+       
+       
+       $count=$$args[1];
+       #print "LOOP $count\n";
+       while (($token=$stream->fetch) && ($token ne "<%/loop%>")) {
+               push(@loop,$token);
+               }
+       while ($count--) {
+               $stream->feed(\@loop);
+               }       
+       };
+
+sub clone {
+       my(@data)=@_;
+       return \@data;
+       }
+       
+$localfun{'load'}=sub {
+       my($args,$env,$stream)=@_;
+       my(@temp,$count);
+       
+       # print "<!-- LOAD: $$args[2] into $$args[1] -->";
+       
+       $$env{$$args[1]}{'_data'}=[];
+       $count=0;
+       if (open(LOAD,$$args[2])) {
+               while (<LOAD>) {
+                       chomp;
+                       #print "ROW: $_\n";
+                       @temp=split(/\t/);
+                       push(@{$$env{$$args[1]}{'_data'}},&clone(@temp));
+                       undef @temp;
+                       $count++;
+                       }
+               close(LOAD);
+               }
+       $$env{$$args[1]}{'_size'}=$count;
+       $$env{$$args[1]}{'_pos'}=0;
+       
+       # print "LOAD $$args[2] into $$args[1] ($count)\n";
+       };
+
+$localfun{'loadvalues'}=sub {
+       my($args,$env,$stream)=@_;
+       local(*LOAD);
+       my($cat)="public";
+       my($slot,$key,$value,@collect);
+       
+       if (open(LOAD,$$args[1])) {
+               while (<LOAD>) {
+                       s/[\r\n]+//g;
+                       next if /^\s*$/;
+                       next if /^#/;
+                       
+                       if (/^\[(\w+)\]/) {
+                               $cat=$1;
+                               next;
+                               }
+                       if (/^\[(\w+)\]\s*=\>\s*\[(\w+)\]$/) {
+                               $$env{$2}=$$env{$1};
+                               next;
+                               }
+                       if (/([^=\s]+)\s*=\s*(.*?)\s*$/) {
+                               $$env{$cat}{$1}=$2;     
+                               next;
+                               }
+                       if (/([^=\s]+)\s*:\s*(.*)/) {
+                               $key=$1; $value=$2;
+                               $value=~s/\$\((\w+)\)/$ENV{$value}/e;
+                               $$env{$cat}{$key}=$value;       
+                               next;
+                               }
+                       if (/([^\<\s]+)\s*\<\<\s*(.*)/) {
+                               $slot=$1;
+                               undef @collect;
+                               while (<LOAD>) {
+                                       last if substr($_,0,2) eq "<<";
+                                       push(@collect,$_);
+                                       }
+                               $$env{$cat}{$slot}=join("\n",@collect); 
+                               }
+                       }
+               close(LOAD);    
+               }
+       else {
+               print "Cannot loadvalues ".$$args[1]."\n";
+               }
+       };
+       
+$localfun{'bind'}=sub {
+       my($args,$env,$stream)=@_;
+       my($temp,$name,$var,$t,$item);
+
+       shift(@$args);  # function name
+       $name=shift(@$args);
+       $var=shift(@$args);
+       
+       #print "BIND from $name [$$env{$name}{'_pos'}] to $var : ";
+       
+       if ($$env{$name}{'_pos'}<$$env{$name}{'_size'}) {
+               $t=0;
+               $temp=$$env{$name}{'_data'}[$$env{$name}{'_pos'}];
+               foreach $item (@$args) {
+                       #print "\t$item=$$temp[$t]\n";
+                       $$env{$var}{$item}=$$temp[$t++];
+                       }
+               $$env{$name}{'_pos'}++;
+               }
+       else {
+               undef $$env{$var};
+               }       
+       };      
+
+### version 3.1 functions
+
+$localfun{'incr'}=sub {
+       my($args)=shift;
+       
+       #print main::DEBUG "INCR $$args[1]\n";
+       
+       $$env{$$args[1]}{'_pos'}++;
+       };      
+
+$localfun{'alias'}=sub {
+       my($args,$env,$stream)=@_;
+       my($temp,$name,$var,$t,$item);
+
+       shift(@$args);  # function name
+       $name=shift(@$args);
+       $var=shift(@$args);
+       
+       #print main::DEBUG "ALIAS from $name [$$env{$name}{'_pos'}] to $var\n";
+       
+       if ($$env{$name}{'_pos'}<$$env{$name}{'_size'}) {
+               $$env{$var}=$$env{$name}{'_data'}[$$env{$name}{'_pos'}];
+               }
+       else {
+               undef $$env{$var};
+               }       
+       };      
+
+$localfun{'keyvalue'}=sub {
+       my($args,$env,$stream)=@_;
+       my($from,$to,@buffer,$key,$value);
+
+       shift(@$args);  # function name
+       $from=shift(@$args);
+       $to=shift(@$args);
+       
+       
+       while (($key,$value)=each %{$$env{$from}}) {
+               push(@buffer,{'key' => $key, 'value' => $value});
+               }
+       $$env{$to}{'_data'}=\@buffer;
+       $$env{$to}{'_pos'}=0;
+       $$env{$to}{'_size'}=scalar(@buffer);    
+       
+       #print main::DEBUG "keyvalue $from into $to ",scalar(@buffer),"\n";
+       };
+       
+$localfun{'set'}=sub {
+       my($args,$env,$stream)=@_;
+       my($name,$value);
+
+       shift(@$args);  # function name
+       $name=shift(@$args);
+       $value=shift(@$args);
+       
+       $$env{'_flags'}{$name}=$value;
+       };      
+       
+###########################################################    
+### if fun ??
+
+$iffun{'ifdef'}=sub {
+       my($args,$env)=@_;
+       return ((defined (&getvalue($env,$$args[1]))) ? 0 : 1);
+       };
+
+$iffun{'ifnz'}=sub {
+       my($args,$env)=@_;
+       return (&getvalue($env,$$args[1]) ? 0 : 1);
+       };
+       
+$iffun{'ifequal'}=sub {
+       my($args,$env)=@_;
+       return ((&getvalue($env,$$args[1]) eq $$args[2]) ? 0 : 1);
+       };      
+               
+$iffun{'ifmember'}=sub {
+       my($args,$env)=@_;
+       return ((index($$args[1],$$args[2])<0) ? 1 : 0);
+       };      
+               
+$iffun{'ifdecr'}=sub {
+       my($args,$env)=@_;
+       
+       if ($$args[1]=~/(\S+)\.(\S+)/) {
+               return (($$env{$1}{$2}-- > 0) ? 0 : 1);
+               }               
+       else { 
+               return (($$env{$$args[1]}-- > 0) ? 0 : 1);
+               }
+       };
+       
+$iffun{'ifiter'}=sub {
+       my($args,$env)=@_;
+       
+       if ($$args[2]=~/(\d+)\.(\d+)/) {
+               return (($$env{$$args[1]}{'_pos'} % $1) != $2);
+               }               
+       else { 
+               return (($$env{$$args[1]}{'_pos'} % $$argv[2]) != 0);
+               }
+       };
+
+
+### version 3.1 functions
+
+$iffun{'ifplus'}=sub {
+       my($args,$env)=@_;
+       return ((&getvalue($env,$$args[1])>0) ? 0 : 1);
+       };
+
+$iffun{'ifminus'}=sub {
+       my($args,$env)=@_;
+       return ((&getvalue($env,$$args[1])<0) ? 0 : 1);
+       };
+
+$iffun{'ifpluszero'}=sub {
+       my($args,$env)=@_;
+       return ((&getvalue($env,$$args[1])>=0) ? 0 : 1);
+       };
+       
+$iffun{'ifminuszero'}=sub {
+       my($args,$env)=@_;
+       return ((&getvalue($env,$$args[1])<=0) ? 0 : 1);
+       };
+
+       
+###########################################################    
+### process
+
+sub process {
+       local(*IN,*OUT,$env,$post)=@_;
+       my($token,$ignore,@temp,$templine,$stream);
+       
+       $logfile=$$env{'logfile'};
+       
+       $stream=&TokenStream::new(*IN,"<%","%>");
+       
+       return undef unless defined $stream;
+       
+       #if (!defined $post) { $post=sub { print OUT $_[0] unless $_[0]=~/^\s*$/; }; }
+       if (!defined $post) { $post=sub { print OUT $_[0]; }; }
+       
+       $ignore=0;
+       
+       while ($token=$stream->fetch) {
+               # if-endif
+               if      ($token eq "<%endif%>") {
+                       $ignore-- if $ignore>0; 
+                       next; 
+                       }
+
+               if (($ignore>0) && (substr($token,0,4) eq "<%if")) {
+                       $ignore++;
+                       next;
+                       }
+                       
+               if ($token eq "<%else%>") {
+                       ($ignore == 0) && ($ignore=1, next);
+                       ($ignore == 1) && ($ignore=0, next);
+                       }
+                               
+               next if $ignore;
+               
+               #$token=~s/\^(\'?[\w.]+)(\\)?/&getvalue($env,$1)/eg;
+               #$token=~s/\^(\[\w+\])?([\w.]+)(\\)?/&getvalue($env,$2,$1)/eg;
+               $token=~s/\^(\[\w+\])?([\w\x5b\x5d.]+)(\\)?/&getvalue($env,$2,$1)/eg;
+               
+               # handle none-special case
+               if (substr($token,0,2) ne "<%") {
+                       &$post($token);
+                       next;
+                       }
+               
+               @temp=split(/\s+/,substr($token,2,-2));
+               
+               if (defined $iffun{$temp[0]}) {
+                       $ignore=&{$iffun{$temp[0]}}(\@temp,$env);
+                       next;
+                       }
+                       
+               if (defined $localfun{$temp[0]}) {
+                       &{$localfun{$temp[0]}}(\@temp,$env,$stream);
+                       next;
+                       }
+               
+               &$post($token);
+               }       
+       }
+
+###########################################################
+### binding
+
+$perlish=&Codec::new('perlish');
+
+$convert{'[perl]'}=sub { return $perlish->encode(@_); };
+
+$convert{'[scalar]'}=sub { return scalar($_[0]); };
+
+$convert{'[javastyle]'}=sub {
+       my($value)=shift;
+       $value=lc($value);
+       substr($value,0,1)=uc(substr($value,0,1));
+       return $value;
+       };
+       
+sub getvalue {
+       my($env,$key,$fun)=@_;
+       my($convert,$value);
+       
+#      $key=~s/\./\'\}\{\'/g;
+#      $value=eval "\$\$env{'$key'}";
+       
+       $key=~s/\./\'\}\{\'/g;
+       $key="{'".$key."'}";
+       $key=~s/(\[\d+\])\'\}/\'\}$1/g;
+       $value=eval "\$\$env$key";
+
+       if ((defined $fun) && (defined $convert{$fun})) { return &{$convert{$fun}}($value); }
+       else              { return $value; }
+       }
+
+1;
diff --git a/dbscripts/mail.config b/dbscripts/mail.config
new file mode 100755 (executable)
index 0000000..79e4135
--- /dev/null
@@ -0,0 +1,21 @@
+#
+# MailerScript Konfigurationsdatei
+#
+
+[public]
+logfile=/tmp/mailer.log
+sendmail=/usr/lib/sendmail -t
+# sendmail=cat
+
+[db]
+dsn=DBI:mysql:database=nadiraktuell;host=search.nadir.org
+user=aktuell
+passwd=aktuell
+
+[mail]
+table=content_objekt
+
+to=nadir-aktuell-abo@nadir.org
+from=aktuell@nadir.org
+reply-to=aktuell@nadir.org
+
diff --git a/dbscripts/mail2table.pl b/dbscripts/mail2table.pl
new file mode 100755 (executable)
index 0000000..c8d06b5
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+use DBI;
+use POSIX qw(strftime);
+
+$db_user="aktuell";
+$db_password="aktuell";
+$dbi_string="DBI:mysql:hostname=192.168.4.8;database=nadiraktuell";
+
+die unless ($dbh=DBI->connect($dbi_string,$db_user,$db_password));
+
+
+### prepare
+$mo_insert_q="insert into content_objekt (titel, urheber, freigeschaltet, datum, ishtml, storage_path, thema_id, contentdata, created, lastchange, mail_sent) values (?,?,0,?,0,?,0,?,NOW(),NOW(),0)";
+$mo_insert_sth=$dbh->prepare($mo_insert_q);
+
+# setze datum
+
+$datum = &POSIX::strftime( '%Y%m%d', localtime time );
+$storage_path=&POSIX::strftime( '%Y/%m/%d', localtime time );  
+
+
+$headermode=1;
+$titel="";$from="";$contentdata="";
+while (<>) {
+       if($headermode==1) {
+               if (/^Subject: (.*)/) {
+                       $titel=$1;
+                       if (/^Subject: <nadir-aktuell> (.*)/) {
+                       $titel=$1;
+                       }
+               }
+               if (/^From: (.*)/) {
+                       $from = $1;
+               }
+               if (/^$/) {
+                print "Switched to Body\n";
+               $headermode=0;
+               }             
+    }
+       else {
+         $contentdata = $contentdata . $_;
+       }
+}
+    print "$datum $storage_path $from $titel \n";
+    $mo_insert_sth->execute($titel, $from, $datum, $storage_path, $contentdata);
+
+
+1;
+
diff --git a/dbscripts/make_smsticker b/dbscripts/make_smsticker
new file mode 100755 (executable)
index 0000000..e9cb6b1
--- /dev/null
@@ -0,0 +1 @@
+/usr/local/java/jdk/bin/java -classpath /www/nadiraktuell/source:/usr/local/java/freemarker:/usr/local/java/mm.mysql/mysql_uncomp.jar:/usr/local/java/jsdk/lib/jsdk.jar nadir.aktuell.producer.ProducerSMS
diff --git a/dbscripts/pg_imageimport.pl b/dbscripts/pg_imageimport.pl
new file mode 100755 (executable)
index 0000000..32088e5
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/local/bin/perl -w
+use Pg;
+
+if (!defined($ARGV[0])) {
+        print "Usage: $0 name_of_filelist_file\n";
+        exit 1;
+}
+
+$dump="$ARGV[0]";
+
+my $conn = Pg::connectdb("dbname=nadiraktuell user=postgres host=192.168.4.8");
+( PGRES_CONNECTION_OK eq $conn->status )
+    and print "Pg::connectdb ........... ok\n"
+    or  die   "Pg::connectdb ........... not ok: ", $conn->errorMessage;
+
+
+open(DUMP,"$dump") || die "can't open dump file $dump";
+
+$basedir="";
+
+while(<DUMP>) {
+        chomp;
+        next if (/^$/ || /^\s*$/);
+
+               # exception liste einlesen...
+                               $filename=$basedir.$_;
+                               $comment=$filename;
+                               $titel="unklassifiziert";
+                               $ort="unklassifiziert"; 
+                       
+                               $_ = `/usr/X11R6/bin/identify $filename`;
+                               /(\d+)x(\d+)/;
+                               $img_width=$1;
+                               $img_height=$2;
+                               
+                               $layout=0;                                              # undefined
+                               if ( $img_width>$img_height ) {$layout=1;}              # querformat
+                               if ( $img_width<$img_height ) {$layout=2;}              # hochformat
+                               if ( $img_width==$img_height) {$layout=3;}    # quadratisch
+
+                               # hier insert:
+                               print "making icon: $filename \n";
+                               `cp $filename /tmp/iconblob.jpg`;
+                               `/usr/X11R6/bin/mogrify -geometry 120x120 /tmp/iconblob.jpg`;
+                               
+                               print "trying to insert: $filename \n";
+                               
+                               $conn->exec("BEGIN");
+                               $oid= $conn->lo_import("$filename");
+                               print $conn->errorMessage."\n";
+                               print "trying to insert icon\n";
+                               $ioid= $conn->lo_import("/tmp/iconblob.jpg");
+                               print $conn->errorMessage."\n";
+                               $sql="INSERT INTO images (title,date,place,author,to_img_layout,to_img_type,is_classified,to_media_folder,to_img_color,comment,webdb_create,img_width,img_height,image_data,icon_data) ".
+                                        "VALUES ('".$titel."','20010109','".$ort.
+                                        "','Castor X4','".$layout."','1','0','3','2','".$comment."',now(),'".$img_width."','".$img_height.
+                                        "','".$oid."','".$ioid."')";
+                               print $sql."\n";
+                               $conn->exec( $sql );
+                               print $conn->errorMessage."\n";
+                               $conn->exec("END");
+       
+                       
+
+}
+# end of while
diff --git a/dbscripts/smsreceiver.config b/dbscripts/smsreceiver.config
new file mode 100755 (executable)
index 0000000..9ea6376
--- /dev/null
@@ -0,0 +1,16 @@
+#
+# MailerScript Konfigurationsdatei
+#
+
+[public]
+logfile=/tmp/mailer.log
+
+[db]
+# dsn=DBI:mysql:database=campticker;host=krabat.nadir.org
+dsn=DBI:mysql:database=nadiraktuell;host=192.168.4.8
+user=aktuell
+passwd=aktuell
+
+[mail]
+table=messsages
+
diff --git a/dbscripts/smsreceiver.pl b/dbscripts/smsreceiver.pl
new file mode 100755 (executable)
index 0000000..693e21c
--- /dev/null
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+
+use DBI;
+
+$0=~m#[^/]+$#;
+$cmdpath=$`;
+if ($cmdpath eq "") { $cmdpath="./"; }
+
+unshift(@INC,$cmdpath."lib");
+require "property.pl";
+require "log.pl";
+
+### configure here
+
+$config_file=$cmdpath."smsreceiver.config";
+
+### no configuration beyond this line
+
+$props=&Property::read($config_file);
+
+### connect logfile
+
+tie *LOGFILE, 'Logfile', $$props{'public'}{'logfile'}, 'SMSRECEIVER';
+
+print LOGFILE "Connecting to ".$$props{'db'}{'dsn'}." as user ".$$props{'db'}{'user'}."\n";
+
+
+### connect to db
+$dbh=DBI->connect($$props{'db'}{'dsn'},$$props{'db'}{'user'},$$props{'db'}{'passwd'});
+if (!defined $dbh) {
+       print LOGFILE "Error while connecting DB\n";
+       exit(0);
+       }
+$table=$$props{'mail'}{'table'};       
+
+### prepare
+$mo_insert_q="insert into $table (produced,type_sms,message,created) values (?,?,?,NOW())";
+$mo_insert_sth=$dbh->prepare($mo_insert_q);
+
+$headermode=1;
+while (<>) {
+       if($headermode==1) {
+               if (/^Subject: (.*)/i) {
+                       $subject=$1;
+                       }
+               if (/^From: (.*)/i) {
+                       $from = $1;
+                       }
+               if (/^Content-type:\s+(.*)/i) {
+                       $content_type=$1;
+                       }
+               if (/^$/) {
+                       $headermode=0;
+                       }             
+    }
+       else {
+         push(@contentdata,$_);
+       }
+}
+
+### filter out mime-crap
+
+if ((defined $content_type)&&($content_type!~m#^text/plain#i)) {
+       print LOGFILE "Got mime-mail: $from ($subject) ".localtime(time)."\n";
+       print LOGFILE "Content: ".join('',@contentdata)."\n";
+       exit();
+       }
+
+### try to identify sms
+
+if ($from=~/^\+?\d+\@/) {
+       ### coming from an emailaccount with a telefon number as user-part in From:
+       
+       ### sms is in first line of body
+       $text=shift(@contentdata);
+       
+       $type=1;
+       }
+else {
+       $text=join('',@contentdata);
+       $type=2;
+       }
+
+print LOGFILE "$type: $text\n";
+$mo_insert_sth->execute(0,$type,$text);
diff --git a/dbscripts/table2html.pl b/dbscripts/table2html.pl
new file mode 100755 (executable)
index 0000000..023db72
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/perl
+
+### extract
+
+use DBI;
+
+$db_user="root";
+$dbi_string="DBI:mysql:nadiraktuell";
+
+die "parameter [-form] tableName" if ($#ARGV>1 | $#ARGV==-1);
+die unless ($dbh=DBI->connect($dbi_string,$db_user));
+
+$form=0;
+
+if ($#ARGV == 1){
+    $form=1;
+    $tableName=$ARGV[1];
+}
+else {
+    $tableName=$ARGV[0];
+}
+
+$sth=$dbh->prepare(<<EO_QUERY);
+show fields from $tableName
+EO_QUERY
+
+$sth->execute;
+
+if (defined $sth) {
+    
+    print(<<HEAD);
+<html>
+<head>
+<title>
+nadiraktuell.$tableName
+</title>
+<head>
+
+<body>
+<B>nadiraktuell.$tableName</B><P>
+HEAD
+
+
+    if ($form==1) { 
+      print "<form action=\"/scripts/NadirAktuell\">
+\t<input type=hidden name=module value=$tableName>
+       <input type=\"hidden\" name=\"id\" value=\"\${id}\">
+       <if new>
+               <input type=\"hidden\" name=\"do\" value=\"insert\">
+       <else>
+               <input type=\"hidden\" name=\"do\" value=\"update\">
+       </if>
+
+<table border=\"0\">\n"; 
+    }
+#
+# Schleife
+
+    while (@data=$sth->fetchrow_array) {
+
+      print "\n<tr>\n<td align=\"right\"><B>$data[0]:</B></td>\n";
+      if ($form==1) {
+       print "<td><input type=\"text\" size=\"40\" name=\"$data[0]\" value=\"\$\{$data[0]\}\"></td>\n";
+      }
+      else {
+       print "<td><\$\{$data[0]\}></td>\n";
+      }
+      print "</tr>\n\n";
+    
+    }
+    
+    if ($form==1) {
+      print "<td colspan=\"2\" align=\"right\">
+<if new>
+<input type=\"submit\" name=\"save\" value=\"einfügen\">
+<else>
+<input type=\"submit\" name=\"save\" value=\"speichern\">
+</if>
+</td>
+</form>
+</table>";
+    }
+
+print(<<BODY);
+
+</body>
+</html>
+BODY
+}
+
+$sth->finish;
+$dbh->disconnect;
+
diff --git a/dbscripts/table2mail.pl b/dbscripts/table2mail.pl
new file mode 100755 (executable)
index 0000000..c23834a
--- /dev/null
@@ -0,0 +1,112 @@
+#!/usr/bin/perl
+
+use DBI;
+
+$0=~m#[^/]+$#;
+$cmdpath=$`;
+if ($cmdpath eq "") { $cmdpath="./"; }
+
+unshift(@INC,$cmdpath."lib");
+require "property.pl";
+require "log.pl";
+require "convert.pl";
+
+### configure here
+
+$config_file=$cmdpath."mail.config";
+# print $config_file,"\n";
+
+### no configuration beyond this line
+
+$props=&Property::read($config_file);
+
+### connect logfile
+
+tie *LOGFILE, 'Logfile', $$props{'public'}{'logfile'}, 'MAIL';
+print LOGFILE "starting: ".localtime(time)."\n";
+
+# print $$props{'db'}{'dsn'},$$props{'db'}{'user'},$$props{'db'}{'passwd'},"\n";
+
+
+### connect to db
+$dbh=DBI->connect($$props{'db'}{'dsn'},$$props{'db'}{'user'},$$props{'db'}{'passwd'});
+if ($dbh->errstr ne "") {
+       print LOGFILE "Error while connecting DB - ".$dbh->error."\n";
+       exit(0);
+       }
+       
+### prepare some statements
+
+$select_unsend=$dbh->prepare("select id,ort,titel,urheber,urheber_id,date_format(datum,'%d.%m.%Y') as pdatum,contentdata,abstract,islink,ishtml,link_url from ".$$props{'mail'}{'table'}." where mail_sent=0 and freigeschaltet=1 and adddate(lastchange,interval 30 MINUTE) < current_timestamp()");
+$select_urheber=$dbh->prepare("select name,email,homepage from gruppen where id=?");
+$update_unsend=$dbh->prepare("update ".$$props{'mail'}{'table'}." set mail_sent=1 where id=?");
+
+$select_unsend->execute;
+while ($hash=$select_unsend->fetchrow_hashref) {
+       if (open(MAILER,"|".$$props{'public'}{'sendmail'})) {
+               print MAILER "To: ".$$props{'mail'}{'to'}."\n";
+               print MAILER "From: ".$$props{'mail'}{'from'}."\n";
+               print MAILER "Reply-To: ".$$props{'mail'}{'reply-to'}."\n";
+               print MAILER "Subject: ".$$hash{'ort'}.": ".$$hash{'titel'}."\n";
+               
+               print MAILER "\n"; # end of header
+               
+               print MAILER $$hash{'titel'}."\n";
+       
+               $urheber="";
+               $u_email="";
+               $u_homepage="";
+               if ($$hash{'urheber'} eq "") {
+                       if ($$hash{'urheber_id'} != 0) {
+                               $select_urheber->execute($$hash{'urheber_id'});
+                               if ($line=$select_urheber->fetchrow_hashref()) {
+                                       $urheber=$$line{'name'};
+                                       $u_email=$$line{'email'};
+                                       $u_hompage=$$line{'homepage'};
+                                       }
+                               }
+                       }
+               else {
+                       $urheber=$$hash{'urheber'};
+                       }
+               
+               if ($urheber ne "") { print MAILER "Von  : ".$urheber."\n"; }
+               if ($u_email ne "") { print MAILER "Email: ".$u_email."\n"; }
+               if ($u_homepage ne "") { print MAILER "Page  : ".$u_homepage."\n"; }
+       
+               print MAILER "Ort  : ".$$hash{'ort'}."\n";
+               print MAILER "Datum: ".$$hash{'pdatum'}."\n";
+               if ($$hash{'islink'} == 1) {
+                       print MAILER "\n\n".$$hash{'abstract'}."\n";
+                       }
+               else {
+                       if ($$hash{'ishtml'}>0) {
+                               print MAILER "\n\n".&html_to_text($props,$$hash{'contentdata'})."\n";
+                               }
+                       else {
+                               print MAILER "\n\n".$$hash{'contentdata'}."\n";
+                               }
+                       }
+
+               if ($$hash{'link_url'} ne "") {
+                       print MAILER "Weiteres: ";
+                       if (substr($$hash{'link_url'},0,1) eq "/") {
+                               print MAILER "http://www.nadir.org";
+                               }
+                       print MAILER $$hash{'link_url'}."\n";
+                       }
+               ### footer
+               print MAILER "\n*** $LIST -- Aboliste mit Nachrichten von http://www.nadir.org\n";
+               print MAILER "*** Beitraege: nadir-aktuell\@nadir.org / Redaktion: nadir-aktuell-red\@nadir.org\n";
+               print MAILER "*** Unsubscribe: majordomo\@nadir.org mit unsubscribe $LIST im body\n";
+       
+               close(MAILER);
+               
+               $update_unsend->execute($$hash{'id'});
+               print LOGFILE "[".$$hash{'id'}."] send\n"
+               }
+       else {
+               print LOGFILE "Error cannot open ".$$props{'public'}{'sendmail'}." - $!\n";
+               }       
+       }
+
diff --git a/dbscripts/wiz_templates/show.template b/dbscripts/wiz_templates/show.template
new file mode 100755 (executable)
index 0000000..c0c613e
--- /dev/null
@@ -0,0 +1,42 @@
+<html>
+<head>
+<title>
+^tablename
+</title>
+<head>
+
+<body bgcolor="#FFFFFF">
+<include "head.template">
+<form method="post" action="${actionRoot}">
+       <input type=hidden name=module value=^tablename_javastyle>
+       <input type="hidden" name="id" value="${id}">
+       <if new>
+               <input type="hidden" name="do" value="insert">
+       <else>
+               <input type="hidden" name="do" value="update">
+       </if>
+<table border="0">
+
+
+<!list metadata>
+  <tr> 
+    <td align="right" bgcolor="#000000"><font color="#ffffff"><B>^metadata.name :</B></font></td>
+    <td>
+      <input type="text" size="40" name="^metadata.name" value="${^metadata.name}">
+    </td>
+  </tr>
+<end-list>
+  
+  
+  <tr> 
+    <td colspan="2" align="right"> <font color="#ffffff"><if new> 
+      <input type="submit" name="save" value="einfügen">
+    <else> 
+    <input type="submit" name="save" value="speichern">
+    </if> </font></form></font>
+    </td>
+  <tr>
+</table>
+<include "foot.template">
+</body>
+</html>
diff --git a/dbscripts/wizard.pl b/dbscripts/wizard.pl
new file mode 100755 (executable)
index 0000000..adfe77f
--- /dev/null
@@ -0,0 +1,83 @@
+#!/usr/bin/perl
+
+#
+# wizard
+#
+
+use DBI;
+
+$0=~m#[^/]+$#;
+$cmdpath=$`;
+if ($cmdpath eq "") { $cmdpath="./"; }
+unshift(@INC,$cmdpath."lib");
+
+require "codec.pl";
+require "subst.pl";
+
+sub USAGE {
+       print "USAGE: wizard.pl dsn user passwd table dir\n";
+       exit(0);
+       }
+
+$dsn=shift(@ARGV) || &USAGE;
+if (($dsn eq "-h") || ($dsn eq "--help")) { &USAGE; }
+$user=shift(@ARGV) || &USAGE;
+$passwd=shift(@ARGV) || &USAGE;
+if ($passwd eq "-") { $passwd=""; }
+$table=shift(@ARGV) || &USAGE;
+$dir=shift(@ARGV) || &USAGE;
+
+$dbh=DBI->connect($dsn,$user,$passwd);
+if (!defined $dsn) {
+       print "Error: cannot connect $dsn\n";
+       &USAGE;
+       }
+
+$tables=$dbh->table_info;
+while ($hash=$tables->fetchrow_hashref) {
+       #print $$hash{'TABLE_NAME'}."\n";
+
+       if ($$hash{'TABLE_NAME'} eq $table) {
+
+               $sth=$dbh->prepare("show fields from ".$$hash{'TABLE_NAME'});
+               $sth->execute;
+               while ($fieldhash=$sth->fetchrow_hashref) {
+                       #print "\t".$$fieldhash{'Field'}.":".$$fieldhash{'Type'}."\n";
+                       push(@data,[$$fieldhash{'Field'},$$fieldhash{'Type'}]);
+                       }
+               $sth->finish;   
+               }
+       }
+
+$$env{'fields'}{'_data'}=\@data;
+$$env{'fields'}{'_pos'}=0;
+$$env{'fields'}{'_size'}=scalar(@data);
+
+$$env{'tablename'}=$table;
+
+print "prosessing files in $dir\n";
+
+chdir $dir;
+
+if (opendir(DIR,".")) {
+       while ($file=readdir(DIR)) {
+               next unless (-f $file);
+               if ($file=~/\.template$/) {
+                       $newfile=$`;
+                       print "\t$file -> $newfile\n";
+                       if (open(IN,$file)) {
+                               if (open(OUT,">$newfile")) {
+                                       &Subst::process(*IN,*OUT,$env);
+                                       close(OUT);
+                                       }
+                               close(IN);      
+                               }
+                       }
+               }
+       closedir(DIR);
+       }                       
+
+
+
+       
+
diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt
new file mode 100755 (executable)
index 0000000..3a860b1
--- /dev/null
@@ -0,0 +1,3 @@
+-----------------------------------------------------------------------
+-- CHANGES - v2001.02.20
+-----------------------------------------------------------------------
diff --git a/doc/DC.txt b/doc/DC.txt
new file mode 100755 (executable)
index 0000000..d251178
--- /dev/null
@@ -0,0 +1,128 @@
+Dublin Core (http://purl.org/DC)
+----------------------------------------------------------------
+
+Bei der Dublin Core Metadata Initiative handelt es sich um ein 
+Projekt, dass einen "common core of semantics for resource 
+description" schafft. Selbstdarstellung unter 
+
+       http://purl.org/DC/about/index.htm
+
+
+Die Datenbankstruktur von Webdb/NA von der Bennenung soweit moeglich
+an das
+
+ "Dublin Core Metadata Element Set, Version 1.1: Reference Description
+  Beschreibung unter http://purl.org/DC/documents/rec-dces-19990702.htm"
+
+angelehnt. Dublin Core Metadaten werden entsprechend untenstehendem Matching
+in die Header der produzierten Seiten geschrieben...
+
+
+Matching:
+
+Dublin Core umfasst 15 Attribute. Beschreibung der Attribute siehe oben.
+Angaben in eckigen Klammern beziehen sich auf Funktionalitaeten, die z.Z.
+noch nicht implementiert sind.
+
+Im folgenden, wie die DC-Attribute in den Tabellen repraesentiert sind:
+
+MEDIA/IMAGE Tabelle:
+
+1.     DC Element: Title  
+       MEDIA Element: title
+
+2.     DC Element: Creator
+       MEDIA Element: creator / to_creator
+
+3.     DC Element: Subject
+       MEDIA Element: keywords [/ keywords n:m]
+
+4.     DC Element: Description
+       MEDIA Element: desciption
+
+5.     DC Element: Publisher
+       MEDIA Element: to_publisher
+
+6.     DC Element: Contributor
+       MEDIA Element: to_publisher
+
+7.     DC Element: Date
+       MEDIA Element: publish_date
+
+8.     DC Element: Type
+       MEDIA Element: to_media_type.dcname
+
+9.     DC Element: Format
+       MEDIA Element: to_img_format.mimetype
+       [fuer video/audio dann analog]
+
+10.    Element: Identifier
+       MEDIA Element: publish_server + publish_path
+
+11.    DC Element: Source
+       MEDIA Element: source
+
+12.    DC Element: Language
+       MEDIA Element to_lang
+
+13.    DC Element: Relation
+       MEDIA Element: to_media_folder
+
+14.    DC Element: Coverage
+       MEDIA Element: place [ / to_place]
+
+15.    DC Element: Rights
+       MEDIA Element: to_rights
+
+-------------------------------------------------------------------------
+
+
+CONTENT Tabelle:
+MEDIA/IMAGE Tabelle:
+
+1.     DC Element: Title  
+       MEDIA Element: title
+
+2.     DC Element: Creator
+       MEDIA Element: creator / to_creator
+
+3.     DC Element: Subject
+       MEDIA Element: keywords [/ keywords n:m]
+
+4.     DC Element: Description
+       MEDIA Element: desciption
+
+5.     DC Element: Publisher
+       MEDIA Element: to_publisher
+
+6.     DC Element: Contributor
+       MEDIA Element: to_publisher
+
+7.     DC Element: Date
+       MEDIA Element: publish_date
+
+8.     DC Element: Type
+       MEDIA Element: to_media_type.dcname
+
+9.     DC Element: Format
+       MEDIA Element: to_img_format.mimetype
+       [fuer video/audio dann analog]
+
+10.    Element: Identifier
+       MEDIA Element: publish_server + publish_path
+
+11.    DC Element: Source
+       MEDIA Element: source
+
+12.    DC Element: Language
+       MEDIA Element to_lang
+
+13.    DC Element: Relation
+       MEDIA Element: to_media_folder
+
+14.    DC Element: Coverage
+       MEDIA Element: place [ / to_place]
+
+15.    DC Element: Rights
+       MEDIA Element: to_rights
+
diff --git a/doc/STRUKTUR.txt b/doc/STRUKTUR.txt
new file mode 100755 (executable)
index 0000000..42f664c
--- /dev/null
@@ -0,0 +1,14 @@
+1. Database / Entity Klassen
+
+Die zugrundeliegende Speicherungsschicht wird von den StorageObjekten realisiert. StorageObjekt ist eine generische Klasse, die zur Zeit nur als Datenbankablage realisiert ist. Es waere jedoch mehr oder weniger einfach auch eine Ablage im Filesystem zu implementieren, womit offline-Arbeit mit dem Produktionssystem denkbar waere.
+
+Die Databaseklassen sind als Singletons (es gibt fuer jede Tabelle nur ein Database-Objekt) implementiert und kuemmern sich um den Zugriff auf eine Tabelle in der Datenbank.
+Wird von der Database-Klasse eine Zeile aus der Datenbank ausgelesen, so wird die Zeile als entsprechendes Entity-Objekt repraesentiert. Eine Entity ist also die Objektversion einer Datenbankzeile.
+
+2. Module Klassen
+
+Die ueber der Speicherungsschicht liegende Programmebene sind die Module-Klassen. Ein jeweiliges Module legt die eingentliche Schnittstelle zwischen Zugriff und Ablage fest, und ist von beiden jeweils abstahiert (wenn das ganze sauber programmiert waere :)
+
+3. ServletModule Klassen
+
+Die ServletModule Klassen implementieren bislang die einzige Zugriffsschicht nach aussen. Vorstellbar waeren auch Applikationen und Applets, ueber die das Produktionssystem steuerbar waere, oder java-Standaloneprogramme, die bspw. einen Datenbankimport machen....
\ No newline at end of file
diff --git a/doc/TODO.txt b/doc/TODO.txt
new file mode 100755 (executable)
index 0000000..da45367
--- /dev/null
@@ -0,0 +1,61 @@
+------------------------------------------------------------
+todoliste indy produktionssystem
+------------------------------------------------------------
+
+So, die Todoliste ist in folgende Berreiche aufgeteilt:
+
+0. TODO - was steht aktuell an
+1. BUGS - aktuelle buglist
+2. DOKU - was muss dokumentiert werden
+3. TMPL - woran mangelst den templates
+4. DATA - was muss an der datenbanl
+5. FEAT - aktuelle features-todo
+6. INTG - was fehlt noch an integrationen
+
+------------------------------------------------------------
+0. TODO ----------------------------------------------------
+
++ kommentarfunktion
+  - entityrelation orderkriterium muss "date" sein.
+  - orderkriterium datum/artikel fuer redaktion
+  - artikel.title anzeigen in liste
++ umleiten des freemarlker outstream in saxon in-stream
+
+------------------------------------------------------------
+1. BUGS ----------------------------------------------------
+
++ kommentarfunktion
+  - einpflegedatum ist ohne uhrzeit
+  - einpflege eines neuen kommentar funktioniert nicht
+  - suche nach inhalt funktioniert nicht.
+
+------------------------------------------------------------
+2. DOKU ----------------------------------------------------
+
+- dokumentation der internen eingabemasken
+
+------------------------------------------------------------
+3. TMPL ----------------------------------------------------
+
+- interne html/freemarker templates auf einheitliches
+  indymedia-desing
+- content-producer-template: images auf server preview
+
+------------------------------------------------------------
+4. DATA ----------------------------------------------------
+
+
+------------------------------------------------------------
+5. FEAT ----------------------------------------------------
+
+- producer als daemon / cache / push auf heissen server
+- open posting
+- mediaupload
+
+------------------------------------------------------------
+6. INTG ----------------------------------------------------
+
+- wap
+- upload von medienfiles auf indymedia-server
+- hotfolder fuer xml-import in die datenbank
+- fop-pdf-produktion
\ No newline at end of file
diff --git a/etc/web.xml b/etc/web.xml
new file mode 100755 (executable)
index 0000000..0269b29
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE web-app
+    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
+    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+
+<web-app>
+    <servlet>
+        <servlet-name>
+            Mir
+        </servlet-name>
+        <servlet-class>
+            Mir
+        </servlet-class>
+
+        <init-param>
+            <param-name>Config</param-name>
+            <param-value>config</param-value>
+        </init-param>
+
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>
+            Mir
+        </servlet-name>
+        <url-pattern>
+            Mir
+        </url-pattern>
+    </servlet-mapping>
+
+
+
+
+    <servlet>
+        <servlet-name>
+            OpenMir
+        </servlet-name>
+        <servlet-class>
+            OpenMir
+        </servlet-class>
+
+        <init-param>
+            <param-name>Config</param-name>
+            <param-value>config</param-value>
+        </init-param>
+
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>OpenMir</servlet-name>
+        <url-pattern>OpenMir</url-pattern>
+    </servlet-mapping>
+
+
+    <taglib>
+        <taglib-uri>
+          http://java.apache.org/tomcat/examples-taglib
+        </taglib-uri>
+        <taglib-location>
+           /WEB-INF/jsp/example-taglib.tld
+        </taglib-location>
+    </taglib>
+
+    <security-constraint>
+      <web-resource-collection>
+         <web-resource-name>Protected Area</web-resource-name>
+        <!-- Define the context-relative URL(s) to be protected -->
+         <url-pattern>/jsp/security/protected/*</url-pattern>
+        <!-- If you list http methods, only those methods are protected -->
+        <http-method>DELETE</http-method>
+         <http-method>GET</http-method>
+         <http-method>POST</http-method>
+        <http-method>PUT</http-method>
+      </web-resource-collection>
+      <auth-constraint>
+         <!-- Anyone with one of the listed roles may access this area -->
+         <role-name>tomcat</role-name>
+        <role-name>role1</role-name>
+      </auth-constraint>
+    </security-constraint>
+
+    <!-- Default login configuration uses BASIC authentication -->
+    <!--
+    <login-config>
+      <auth-method>BASIC</auth-method>
+      <realm-name>Example Basic Authentication Area</realm-name>
+    </login-config>
+    -->
+
+    <!-- Form-based login is enabled by default.  If you wish to
+         try Basic authentication, comment out the <login-config>
+         section below and uncomment the one above. -->
+    <login-config>
+      <auth-method>FORM</auth-method>
+      <realm-name>Example Form-Based Authentication Area</realm-name>
+      <form-login-config>
+        <form-login-page>/jsp/security/login/login.jsp</form-login-page>
+        <form-error-page>/jsp/security/login/error.jsp</form-error-page>
+      </form-login-config>
+    </login-config>
+
+</web-app>
diff --git a/lib/README.txt b/lib/README.txt
new file mode 100755 (executable)
index 0000000..46d4227
--- /dev/null
@@ -0,0 +1,34 @@
+In this folder you have to link all the necessary
+java-libraries
+
+The jar-files in this directory are compiled for linux.
+If you want to use an other os you have to replace them.
+
+1. Java Advanced Imaging
+
+   jai_core.jar
+   jai_codec.jar
+
+3. Freemarker HTML-Templatelibraries
+
+   freemarker.jar
+
+4. Oreilly Servlets
+
+   cos.jar
+
+5. DBConnectionBroker
+
+   dbconnectionbroker.jar
+
+6. JDBC-Driver
+
+   for example postgresql-jdbc.jar
+
+7. Gnu regexp java-libraries
+
+   gnuregexp.jar
+
+8. Apache-Ant (a java-based replacement for make)
+
+   ant.jar
\ No newline at end of file
diff --git a/lib/ant.jar b/lib/ant.jar
new file mode 100755 (executable)
index 0000000..376607e
Binary files /dev/null and b/lib/ant.jar differ
diff --git a/lib/cos.jar b/lib/cos.jar
new file mode 100755 (executable)
index 0000000..7065337
Binary files /dev/null and b/lib/cos.jar differ
diff --git a/lib/crimson.jar b/lib/crimson.jar
new file mode 100755 (executable)
index 0000000..a734d42
Binary files /dev/null and b/lib/crimson.jar differ
diff --git a/lib/dbconbroker.jar b/lib/dbconbroker.jar
new file mode 100755 (executable)
index 0000000..cb926c7
Binary files /dev/null and b/lib/dbconbroker.jar differ
diff --git a/lib/freemarker.jar b/lib/freemarker.jar
new file mode 100755 (executable)
index 0000000..14e4fbd
Binary files /dev/null and b/lib/freemarker.jar differ
diff --git a/lib/gnu-regexp-1.0.8.jar b/lib/gnu-regexp-1.0.8.jar
new file mode 100755 (executable)
index 0000000..2541582
Binary files /dev/null and b/lib/gnu-regexp-1.0.8.jar differ
diff --git a/lib/jai_codec.jar b/lib/jai_codec.jar
new file mode 100755 (executable)
index 0000000..da5a14c
Binary files /dev/null and b/lib/jai_codec.jar differ
diff --git a/lib/jai_core.jar b/lib/jai_core.jar
new file mode 100755 (executable)
index 0000000..ef3ef91
Binary files /dev/null and b/lib/jai_core.jar differ
diff --git a/lib/jaxp.jar b/lib/jaxp.jar
new file mode 100755 (executable)
index 0000000..d79e6b5
Binary files /dev/null and b/lib/jaxp.jar differ
diff --git a/lib/mlibwrapper_jai.jar b/lib/mlibwrapper_jai.jar
new file mode 100755 (executable)
index 0000000..fecef01
Binary files /dev/null and b/lib/mlibwrapper_jai.jar differ
diff --git a/lib/mm.mysql-2.0.2-bin.jar b/lib/mm.mysql-2.0.2-bin.jar
new file mode 100755 (executable)
index 0000000..3edf94e
Binary files /dev/null and b/lib/mm.mysql-2.0.2-bin.jar differ
diff --git a/lib/postgresql-jdbc.jar b/lib/postgresql-jdbc.jar
new file mode 100755 (executable)
index 0000000..7e5c066
Binary files /dev/null and b/lib/postgresql-jdbc.jar differ
diff --git a/lib/saxon.jar b/lib/saxon.jar
new file mode 100755 (executable)
index 0000000..1254eae
Binary files /dev/null and b/lib/saxon.jar differ
diff --git a/lib/servlet-2.2.jar b/lib/servlet-2.2.jar
new file mode 100755 (executable)
index 0000000..18ca666
Binary files /dev/null and b/lib/servlet-2.2.jar differ
diff --git a/lib/xalan.jar b/lib/xalan.jar
new file mode 100755 (executable)
index 0000000..7a3d3d7
Binary files /dev/null and b/lib/xalan.jar differ
diff --git a/lib/xerces.jar b/lib/xerces.jar
new file mode 100755 (executable)
index 0000000..4f6de65
Binary files /dev/null and b/lib/xerces.jar differ
diff --git a/log/README b/log/README
new file mode 100755 (executable)
index 0000000..e77a249
--- /dev/null
@@ -0,0 +1,3 @@
+Dies ist das Logverzeichnis, in dem die Klassen ihre Logfiles
+schreiben.
+
diff --git a/source/Mir.java b/source/Mir.java
new file mode 100755 (executable)
index 0000000..c8bb32d
--- /dev/null
@@ -0,0 +1,210 @@
+import java.io.*;
+import java.util.*;
+import java.net.*;
+import java.lang.reflect.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.sql.*;
+
+import freemarker.template.*;
+
+import webdb.misc.*;
+import webdb.servlet.*;
+
+import mir.servlet.*;
+import mir.module.*;
+import mir.entity.*;
+import mir.storage.*;
+
+/**
+ *  Mir.java - main servlet, that dispatches to servletmodules
+ *
+ *  @author RK 1999-2001
+ *
+ */
+
+
+public class Mir extends AbstractServlet
+{
+
+       private static ModuleUsers usersModule=null;
+       private static ModuleMessage messageModule=null;
+       private static boolean confed=false;
+
+
+       public void doGet(HttpServletRequest req, HttpServletResponse res)
+               throws ServletException, IOException {
+               doPost(req,res);
+       }
+
+       public void doPost(HttpServletRequest req, HttpServletResponse res)
+               throws ServletException, IOException {
+
+               long            startTime = (new java.util.Date()).getTime();
+               Class           theServletModule;
+               ServletModule   smod;
+               long            sessionConnectTime=0;
+               String          http="";
+
+               // get the configration
+    if (!confed){
+      confed = getConfig(req);
+    }
+
+
+               if (req.getServerPort() == 443) http="https";   else http="http";
+               res.setContentType("text/html");
+               String moduleName = req.getParameter("module");
+    HttpSession session = req.getSession(true);
+
+    if(session.getAttribute("Language")==null){
+      setLanguage(req,getAcceptLanguage(req));
+    }
+
+               // Authentifizierung
+               if (moduleName!=null && moduleName.equals("login")) {
+                       String user=req.getParameter("login");
+                       String passwd= req.getParameter("password");
+      String lang = req.getParameter("lang");
+                       theLog.printDebugInfo("--login: evaluating for user: "+user);
+                       EntityUsers userEntity = allowedUser(user,passwd);
+                       if (userEntity==null) {
+                               // login failed: redirecting to login
+                               theLog.printWarning("--login: failed!");
+                               _sendLoginPage(req,res.getWriter());
+                               return;
+                       }       else {
+                               // login successful
+
+        //if accept-language!=selected language change language
+        if(!getLanguage(req).equals(lang)){
+          setLanguage(req,lang);
+        }
+
+                               theLog.printInfo("--login: successful! setting uid: " + userEntity.getId());
+                               session.setAttribute("login.uid", userEntity);
+                               theLog.printDebugInfo("--login: trying to retrieve login.target");
+                               String target = (String)session.getAttribute("login.target");
+                               if (target != null) {
+                                       theLog.printDebugInfo("Redirect: "+target);
+                                       res.getWriter().println("<html><head><meta http-equiv=refresh content=\0421;URL="
+                                                                       + res.encodeURL(http +"://" + req.getServerName()+ target)
+                                                                       + "\"></head><body>going " + target + "</body></html>");
+                               } else {
+                                       // redirecting to default target
+                                       //theLog.printDebugInfo("--login: no target - redirecting to default");
+                                       _sendStartPage(req, res.getWriter(),userEntity);
+                               }
+                               return;
+                       } // if login succesful
+               } // if login
+
+               if (moduleName!=null && moduleName.equals("logout")) {
+                       theLog.printDebugInfo("--logout");
+                       session.invalidate();
+                       _sendLoginPage(req,res.getWriter());
+                       return;
+               }
+
+               // Check if authed!
+               EntityUsers userEntity = (EntityUsers)session.getAttribute("login.uid");
+               if (userEntity == null) {
+                       // redirect to loginpage
+                       String redirectString = req.getRequestURI();
+                       if (req.getQueryString()!=null) redirectString += "?" + req.getQueryString();
+                       theLog.printDebugInfo("STORING: " + redirectString);
+                       session.setAttribute("login.target", redirectString);
+                       _sendLoginPage(req,res.getWriter());
+                       return;
+               }
+
+               // Bei blossem Serveltaufruf redirect auf Standardstarttemplate
+               if (moduleName == null || moduleName.equals("")) {
+                       _sendStartPage(req, res.getWriter(),userEntity);
+                       return;
+               }
+
+               //From now on normal Dispatching...
+               try {
+                       try {
+        theServletModule = Class.forName("mir.servlet.ServletModule" + moduleName);
+                       } catch (ClassNotFoundException e) {
+        // searching Servlet webdb.servlet-classes
+        theServletModule = Class.forName("webdb.servlet.ServletModule" + moduleName);
+                       }
+      //Instanciate the ServletModule
+                       Method m = theServletModule.getMethod("getInstance",null);
+                       smod = (ServletModule)m.invoke(null,null);
+                       ServletModuleDispatch.dispatch(smod,req,res);
+               }
+               catch (NoSuchMethodException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " getInstance() nicht gefunden."); }
+               catch (InvocationTargetException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " target nicht gefunden."); }
+               catch (ClassNotFoundException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " nicht gefunden."); }
+               catch (IllegalArgumentException e) { handleError( res.getWriter(), "ServletModule" + moduleName + " nicht gefunden."); }
+               catch (ServletModuleException e){ handleError(res.getWriter(), "ServletException in Module ServletModule" + moduleName + " -- " + e.toString()); }
+               catch (IllegalAccessException e){
+                               handleError(res.getWriter(), "Kein Zugriff auf Klasse ServletModule" + moduleName + " -- " + e.toString()); }
+
+               // timing...
+               sessionConnectTime = new java.util.Date().getTime() - startTime;
+               theLog.printInfo("EXECTIME (" + moduleName + "): " + sessionConnectTime + " ms");
+       }
+
+       private void handleError(PrintWriter out, String errorString) {
+               try {
+                       theLog.printError(errorString);
+                       SimpleHash modelRoot = new SimpleHash();
+                       modelRoot.put("errorstring", new SimpleScalar(errorString));
+                       modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar())));
+                       HTMLTemplateProcessor.process(Configuration.getProperty("Mir.ErrorTemplate"),modelRoot,out);
+                       out.close();
+               }
+               catch (Exception e) {
+                       System.err.println("Fehler in ErrorTemplate");
+               }
+       }
+
+       /**
+        *  evaluate login for user / password
+        */
+       protected EntityUsers allowedUser(String user, String password) {
+               try {
+                       if (usersModule == null) usersModule = new ModuleUsers(DatabaseUsers.getInstance());
+                       return usersModule.getUserForLogin(user, password);
+               }
+               catch(Exception e) { theLog.printDebugInfo(e.toString()); return null; }
+       }
+
+       // Redirect-methods
+       private void _sendLoginPage(HttpServletRequest req, PrintWriter out) {
+    String loginTemplate = "login.template";
+               try {
+      theLog.printDebugInfo("login: "+lang);
+                       if(lang==null){
+                               lang=getAcceptLanguage(req);
+                       }
+                       HTMLTemplateProcessor.process(lang+"/"+loginTemplate, new SimpleHash(), out);
+               }       catch(HTMLParseException e) {
+                       handleError( out, "fehler in logintemplate.");
+               }
+       }
+
+       private void _sendStartPage(HttpServletRequest req,PrintWriter out, EntityUsers userEntity) {
+               String startTemplate = "start_admin.template";
+               try {
+                       // merge with logged in user and messages
+                       SimpleHash mergeData = new SimpleHash();
+                       mergeData.put("login_user", HTMLTemplateProcessor.makeSimpleHash(userEntity));
+                       if (messageModule == null) messageModule = new ModuleMessage(DatabaseMessages.getInstance());
+                       mergeData.put("messages", HTMLTemplateProcessor.makeSimpleList(messageModule.getByWhereClause(null, "webdb_create desc",0,10)));
+                       HTMLTemplateProcessor.process(getLanguage(req)+"/"+startTemplate, mergeData,out);
+               }
+               catch(Exception e) {
+                       handleError( out, "error while trying to send startpage. " + e.toString());
+               }
+       }
+
+       public String getServletInfo(){ return "Mir 1.0 rev02 multilanguage"; }
+
+}
+
diff --git a/source/OpenMir.java b/source/OpenMir.java
new file mode 100755 (executable)
index 0000000..3613683
--- /dev/null
@@ -0,0 +1,82 @@
+import java.io.*;
+import java.util.*;
+import java.net.*;
+import java.lang.reflect.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.sql.*;
+
+import freemarker.template.*;
+
+import webdb.misc.*;
+import webdb.servlet.*;
+
+import mir.servlet.*;
+import mir.module.*;
+import mir.entity.*;
+import mir.storage.*;
+
+/**
+ *  OpenMir.java - main servlet for open posting and comment feature to articles
+ *
+ *  @author RK 1999-2001
+ *
+ */
+
+
+public class OpenMir extends AbstractServlet
+{
+       private static Logfile                theLog;
+       private static boolean                confed=false;
+       private static String   lang;
+
+       public void doGet(HttpServletRequest req, HttpServletResponse res)
+               throws ServletException, IOException {
+               doPost(req,res);
+       }
+
+       public void doPost(HttpServletRequest req, HttpServletResponse res)
+               throws ServletException, IOException {
+
+               long            startTime = (new java.util.Date()).getTime();
+               long            sessionConnectTime=0;
+
+    if (!confed){
+      confed = getConfig(req);
+    }
+
+               HttpSession session = req.getSession(true);
+    if(session.getAttribute("Language")==null){
+      setLanguage(req,getAcceptLanguage(req));
+    }
+
+               res.setContentType("text/html");
+               try {
+                       ServletModuleDispatch.dispatch(ServletModuleOpenIndy.getInstance(),req,res);
+               }
+               catch (ServletModuleException e){ handleError(res.getWriter(), "OpenIndy :: ServletException in Module ServletModule -- " + e.toString()); }
+               // timing...
+               sessionConnectTime = new java.util.Date().getTime() - startTime;
+               theLog.printInfo("EXECTIME (ServletModuleOpenIndy): " + sessionConnectTime + " ms");
+       }
+
+       private void handleError(PrintWriter out, String errorString) {
+
+               try {
+                       theLog.printError(errorString);
+                       SimpleHash modelRoot = new SimpleHash();
+                       modelRoot.put("errorstring", new SimpleScalar(errorString));
+                       modelRoot.put("date", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar())));
+                       HTMLTemplateProcessor.process(Configuration.getProperty("Mir.ErrorTemplate"),modelRoot,out);
+                       out.close();
+               }
+               catch (Exception e) {
+                       System.err.println("Fehler in ErrorTemplate");
+               }
+
+       }
+
+       public String getServletInfo(){ return "OpenIndy 1.0 rev01"; }
+
+}
+
diff --git a/source/config.properties b/source/config.properties
new file mode 100755 (executable)
index 0000000..edcbeba
--- /dev/null
@@ -0,0 +1,209 @@
+#
+# edit this to suit your needs (here with sampleuser idfx)
+
+Home=/var/www/Mir/
+HTMLTemplateProcessor.ActionRoot=/Mir/servlet/Mir
+HTMLTemplateProcessor.DocRoot=/Mir
+
+ClearXslCache=no
+StandardLanguage=de
+
+Producer.StorageRoot=/var/www/sites/work.indymedia.de
+Producer.ProductionHost=https://work.indymedia.de
+Producer.OpenAction=https://work.indymedia.de/idfx/servlet/OpenMir
+Producer.DocRoot=/user/idfx/produced
+Producer.ImageRoot=/user/idfx/produced/img
+Producer.ImageHost=http://work.indymedia.de/images
+Producer.VideoHost=http://work.indymedia.de/video
+Producer.AudioHost=http://work.indymedia.de/audio
+
+Producer.Image.Host=https://work.indymedia.de
+
+# image specific storage folders
+Producer.Image.Path=/media/images
+Producer.Image.IconPath=/icon
+
+#
+# edit with caution below this line
+######################################################################
+
+#
+# specify your database
+
+Database.poolMin=1
+Database.poolMax=10
+Database.poolResetTime=1.0
+Database.PoolLog=log/pool.log
+Database.Limit=20
+Database.Username=postgres
+Database.Password=
+Database.Host=localhost
+
+#
+# this sets the adaptor to be used
+
+Database.Adaptor=webdb.storage.DatabaseAdaptorPostgresql
+Database.Logfile=log/dbentity.log
+
+#
+# configuration for adaptor mysql
+
+Adaptor.MySQL.URL=jdbc:mysql://localhost:3306/indy
+Adaptor.MySQL.Driver=org.gjt.mm.mysql.Driver
+
+#
+# configuration for adaptor postgres
+
+Adaptor.PostgreSQL.URL=jdbc:postgresql://localhost:5432/indy3
+Adaptor.PostgreSQL.Driver=org.postgresql.Driver
+
+#
+# should be explained .)
+#
+
+Lists.Max.Items=10
+
+HTMLTemplateProcessor.Logfile=log/htmlprocess.log
+HTMLTemplateProcessor.Dir=templates
+
+ServletModule.Producer.Logfile=log/producer.log
+Entity.Logfile=log/dbentity.log
+
+
+#
+# Servlet / Module configurations
+#
+
+Mir.Logfile=log/mir.log
+Mir.ErrorTemplate=fehler.template
+
+ServletModule.Schwerpunkt.ConfirmTemplate=confirm.template
+ServletModule.Schwerpunkt.ObjektTemplate=schwerpunkt.template
+ServletModule.Schwerpunkt.ListTemplate=schwerpunktlist.template
+ServletModule.Schwerpunkt.Logfile=log/nadiraktuell.log
+Module.Schwerpunkt.Logfile=log/nadiraktuell.log
+
+ServletModule.Feature.ConfirmTemplate=confirm.template
+ServletModule.Feature.ObjektTemplate=schwerpunkt.template
+ServletModule.Feature.ListTemplate=schwerpunktlist.template
+ServletModule.Feature.Logfile=log/nadiraktuell.log
+Module.Feature.Logfile=log/nadiraktuell.log
+
+ServletModule.Themen.ConfirmTemplate=confirm.template
+ServletModule.Themen.ObjektTemplate=themen.template
+ServletModule.Themen.ListTemplate=themenlist.template
+ServletModule.Themen.Logfile=log/nadiraktuell.log
+Module.Themen.Logfile=log/nadiraktuell.log
+
+ServletModule.Gruppen.ConfirmTemplate=confirm.template
+ServletModule.Gruppen.ObjektTemplate=gruppen.template
+ServletModule.Gruppen.ListTemplate=gruppenlist.template
+ServletModule.Gruppen.Logfile=log/nadiraktuell.log
+Module.Gruppen.Logfile=log/nadiraktuell.log
+
+ServletModule.Users.ConfirmTemplate=confirm.template
+ServletModule.Users.ObjektTemplate=users.template
+ServletModule.Users.ListTemplate=userslist.template
+ServletModule.Users.Logfile=log/nadiraktuell.log
+Module.Users.Logfile=log/nadiraktuell.log
+
+ServletModule.Bilder.ConfirmTemplate=confirm.template
+ServletModule.Bilder.ObjektTemplate=bilder.template
+ServletModule.Bilder.ListTemplate=bilderlist.template
+ServletModule.Bilder.Logfile=log/nadiraktuell.log
+Module.Bilder.Logfile=log/nadiraktuell.log
+
+ServletModule.Content.ConfirmTemplate=confirm.template
+ServletModule.Content.ObjektTemplate=content.template
+ServletModule.Content.OpTemplate=oplist.template
+ServletModule.Content.ListTemplate=contentlist.template
+ServletModule.Content.Logfile=log/nadiraktuell.log
+Module.Content.Logfile=log/nadiraktuell.log
+
+ServletModule.Mediafolder.ConfirmTemplate=confirm.template
+ServletModule.Mediafolder.ObjektTemplate=mediafolder.template
+ServletModule.Mediafolder.ListTemplate=mediafolderlist.template
+ServletModule.Mediafolder.Logfile=log/nadiraktuell.log
+Module.Mediafolder.Logfile=log/nadiraktuell.log
+
+#
+# config used for OpenIndy
+ServletModule.OpenIndy.CommentTemplate=open/comment.template
+ServletModule.OpenIndy.CommentDoneTemplate=open/comment_done.template
+ServletModule.OpenIndy.PostingTemplate=open/posting.template
+ServletModule.OpenIndy.PostingDoneTemplate=open/posting_done.template
+ServletModule.OpenIndy.Logfile=log/openindy.log
+
+#
+# config for ServletModuleComment - browsing/editing/deleting comments
+Module.Comment.Logfile=log/comment.log
+ServletModule.Comment.Logfile=log/comment.log
+ServletModule.Comment.ConfirmTemplate=confirm.template
+ServletModule.Comment.ObjektTemplate=comment.template
+ServletModule.Comment.ListTemplate=commentlist.template
+
+#
+# config for Breaking - browsing/editing/deleting breaking news
+Module.Breaking.Logfile=log/breaking.log
+ServletModule.Breaking.Logfile=log/comment.log
+ServletModule.Breaking.ConfirmTemplate=confirm.template
+ServletModule.Breaking.ObjektTemplate=breaking.template
+ServletModule.Breaking.ListTemplate=breakinglist.template
+
+
+#
+# config for messages - browsing/editing/deleting internal messages
+Module.Messages.Logfile=log/message.log
+ServletModule.Messages.Logfile=log/comment.log
+ServletModule.Messages.ConfirmTemplate=confirm.template
+ServletModule.Messages.ObjektTemplate=message.template
+ServletModule.Messages.ListTemplate=messagelist.template
+
+#
+# producer-related configs below
+#
+
+Producer.ExtLinkName=extlink.gif
+Producer.IntLinkName=intlink.gif
+Producer.MailLinkName=maillink.gif
+Producer.Logfile=log/producer.log
+
+Producer.Content.Template=producer/content.template
+Producer.Content.Batchsize=20
+
+Producer.Startseite.Template=producer/startseite.template
+Producer.Startseite.Entries=7
+Producer.Startseite.Pages=10
+Producer.Startseite.Termine=5
+
+Producer.Themen.Template=producer/themen.template
+Producer.Themen.Entries=7
+Producer.Themen.Pages=3
+
+Producer.Schwerpunkte.Template=producer/schwerpunkte.template
+Producer.Schwerpunkte.Entries=7
+Producer.Schwerpunkte.Pages=3
+
+Producer.Overview.MonthTemplate=producer/ov_month.template
+Producer.Overview.YearTemplate=producer/ov_year.template
+
+Producer.List.Template=producer/list.template
+Producer.TopicList.Template=producer/topiclist.template
+Producer.OpenPosting.Template=producer/openposting.template
+Producer.FeatureList.Template=producer/featurelist.template
+
+Producer.StartPage.Template=producer/startpage.template
+Producer.StartPage.Items=10
+Producer.StartPage.Newswire=30
+
+Producer.Wap.Template=producer/wap.template
+Producer.Wap.Items=10
+
+Xsl.Content=producer/content.xsl
+Xsl.Fo.Content=producer/frontpage_fo.xsl
+Xsl.StartPage=producer/index.xsl
+Xsl.TopicList=producer/topic.xsl
+Xsl.OpenList=producer/open.xsl
+Xsl.Wap=producer/wml2.xsl
+
+Sync.Script.Path=/var/www/bin/rsync-copy
\ No newline at end of file
diff --git a/source/config.properties-dist b/source/config.properties-dist
new file mode 100755 (executable)
index 0000000..5a5459e
--- /dev/null
@@ -0,0 +1,209 @@
+#
+# edit this to suit your needs (here with sampleuser idfx)
+
+Home=/var/work/idfx/Indy/
+HTMLTemplateProcessor.ActionRoot=/idfx/servlet/Mir
+HTMLTemplateProcessor.DocRoot=/idfx
+
+ClearXslCache=no
+StandardLanguage=de
+
+Producer.StorageRoot=/var/www/sites/work.indymedia.de
+Producer.ProductionHost=https://work.indymedia.de
+Producer.OpenAction=https://work.indymedia.de/idfx/servlet/OpenMir
+Producer.DocRoot=/user/idfx/produced
+Producer.ImageRoot=/user/idfx/produced/img
+Producer.ImageHost=http://work.indymedia.de/images
+Producer.VideoHost=http://work.indymedia.de/video
+Producer.AudioHost=http://work.indymedia.de/audio
+
+Producer.Image.Host=https://work.indymedia.de
+
+# image specific storage folders
+Producer.Image.Path=/media/images
+Producer.Image.IconPath=/icon
+
+#
+# edit with caution below this line
+######################################################################
+
+#
+# specify your database
+
+Database.poolMin=1
+Database.poolMax=10
+Database.poolResetTime=1.0
+Database.PoolLog=log/pool.log
+Database.Limit=20
+Database.Username=postgres
+Database.Password=
+Database.Host=localhost
+
+#
+# this sets the adaptor to be used
+
+Database.Adaptor=webdb.storage.DatabaseAdaptorPostgresql
+Database.Logfile=log/dbentity.log
+
+#
+# configuration for adaptor mysql
+
+Adaptor.MySQL.URL=jdbc:mysql://localhost:3306/indy
+Adaptor.MySQL.Driver=org.gjt.mm.mysql.Driver
+
+#
+# configuration for adaptor postgres
+
+Adaptor.PostgreSQL.URL=jdbc:postgresql://localhost:5432/indy3
+Adaptor.PostgreSQL.Driver=org.postgresql.Driver
+
+#
+# should be explained .)
+#
+
+Lists.Max.Items=10
+
+HTMLTemplateProcessor.Logfile=log/htmlprocess.log
+HTMLTemplateProcessor.Dir=templates
+
+ServletModule.Producer.Logfile=log/producer.log
+Entity.Logfile=log/dbentity.log
+
+
+#
+# Servlet / Module configurations
+#
+
+Mir.Logfile=log/mir.log
+Mir.ErrorTemplate=fehler.template
+
+ServletModule.Schwerpunkt.ConfirmTemplate=confirm.template
+ServletModule.Schwerpunkt.ObjektTemplate=schwerpunkt.template
+ServletModule.Schwerpunkt.ListTemplate=schwerpunktlist.template
+ServletModule.Schwerpunkt.Logfile=log/nadiraktuell.log
+Module.Schwerpunkt.Logfile=log/nadiraktuell.log
+
+ServletModule.Feature.ConfirmTemplate=confirm.template
+ServletModule.Feature.ObjektTemplate=schwerpunkt.template
+ServletModule.Feature.ListTemplate=schwerpunktlist.template
+ServletModule.Feature.Logfile=log/nadiraktuell.log
+Module.Feature.Logfile=log/nadiraktuell.log
+
+ServletModule.Themen.ConfirmTemplate=confirm.template
+ServletModule.Themen.ObjektTemplate=themen.template
+ServletModule.Themen.ListTemplate=themenlist.template
+ServletModule.Themen.Logfile=log/nadiraktuell.log
+Module.Themen.Logfile=log/nadiraktuell.log
+
+ServletModule.Gruppen.ConfirmTemplate=confirm.template
+ServletModule.Gruppen.ObjektTemplate=gruppen.template
+ServletModule.Gruppen.ListTemplate=gruppenlist.template
+ServletModule.Gruppen.Logfile=log/nadiraktuell.log
+Module.Gruppen.Logfile=log/nadiraktuell.log
+
+ServletModule.Users.ConfirmTemplate=confirm.template
+ServletModule.Users.ObjektTemplate=users.template
+ServletModule.Users.ListTemplate=userslist.template
+ServletModule.Users.Logfile=log/nadiraktuell.log
+Module.Users.Logfile=log/nadiraktuell.log
+
+ServletModule.Bilder.ConfirmTemplate=confirm.template
+ServletModule.Bilder.ObjektTemplate=bilder.template
+ServletModule.Bilder.ListTemplate=bilderlist.template
+ServletModule.Bilder.Logfile=log/nadiraktuell.log
+Module.Bilder.Logfile=log/nadiraktuell.log
+
+ServletModule.Content.ConfirmTemplate=confirm.template
+ServletModule.Content.ObjektTemplate=content.template
+ServletModule.Content.OpTemplate=oplist.template
+ServletModule.Content.ListTemplate=contentlist.template
+ServletModule.Content.Logfile=log/nadiraktuell.log
+Module.Content.Logfile=log/nadiraktuell.log
+
+ServletModule.Mediafolder.ConfirmTemplate=confirm.template
+ServletModule.Mediafolder.ObjektTemplate=mediafolder.template
+ServletModule.Mediafolder.ListTemplate=mediafolderlist.template
+ServletModule.Mediafolder.Logfile=log/nadiraktuell.log
+Module.Mediafolder.Logfile=log/nadiraktuell.log
+
+#
+# config used for OpenIndy
+ServletModule.OpenIndy.CommentTemplate=open/comment.template
+ServletModule.OpenIndy.CommentDoneTemplate=open/comment_done.template
+ServletModule.OpenIndy.PostingTemplate=open/posting.template
+ServletModule.OpenIndy.PostingDoneTemplate=open/posting_done.template
+ServletModule.OpenIndy.Logfile=log/openindy.log
+
+#
+# config for ServletModuleComment - browsing/editing/deleting comments
+Module.Comment.Logfile=log/comment.log
+ServletModule.Comment.Logfile=log/comment.log
+ServletModule.Comment.ConfirmTemplate=confirm.template
+ServletModule.Comment.ObjektTemplate=comment.template
+ServletModule.Comment.ListTemplate=commentlist.template
+
+#
+# config for Breaking - browsing/editing/deleting breaking news
+Module.Breaking.Logfile=log/breaking.log
+ServletModule.Breaking.Logfile=log/comment.log
+ServletModule.Breaking.ConfirmTemplate=confirm.template
+ServletModule.Breaking.ObjektTemplate=breaking.template
+ServletModule.Breaking.ListTemplate=breakinglist.template
+
+
+#
+# config for messages - browsing/editing/deleting internal messages
+Module.Messages.Logfile=log/message.log
+ServletModule.Messages.Logfile=log/comment.log
+ServletModule.Messages.ConfirmTemplate=confirm.template
+ServletModule.Messages.ObjektTemplate=message.template
+ServletModule.Messages.ListTemplate=messagelist.template
+
+#
+# producer-related configs below
+#
+
+Producer.ExtLinkName=extlink.gif
+Producer.IntLinkName=intlink.gif
+Producer.MailLinkName=maillink.gif
+Producer.Logfile=log/producer.log
+
+Producer.Content.Template=producer/content.template
+Producer.Content.Batchsize=20
+
+Producer.Startseite.Template=producer/startseite.template
+Producer.Startseite.Entries=7
+Producer.Startseite.Pages=10
+Producer.Startseite.Termine=5
+
+Producer.Themen.Template=producer/themen.template
+Producer.Themen.Entries=7
+Producer.Themen.Pages=3
+
+Producer.Schwerpunkte.Template=producer/schwerpunkte.template
+Producer.Schwerpunkte.Entries=7
+Producer.Schwerpunkte.Pages=3
+
+Producer.Overview.MonthTemplate=producer/ov_month.template
+Producer.Overview.YearTemplate=producer/ov_year.template
+
+Producer.List.Template=producer/list.template
+Producer.TopicList.Template=producer/topiclist.template
+Producer.OpenPosting.Template=producer/openposting.template
+Producer.FeatureList.Template=producer/featurelist.template
+
+Producer.StartPage.Template=producer/startpage.template
+Producer.StartPage.Items=10
+Producer.StartPage.Newswire=30
+
+Producer.Wap.Template=producer/wap.template
+Producer.Wap.Items=10
+
+Xsl.Content=producer/content.xsl
+Xsl.Fo.Content=producer/frontpage_fo.xsl
+Xsl.StartPage=producer/index.xsl
+Xsl.TopicList=producer/topic.xsl
+Xsl.OpenList=producer/open.xsl
+Xsl.Wap=producer/wml2.xsl
+
+Sync.Script.Path=/var/www/bin/rsync-copy
\ No newline at end of file
diff --git a/startxml.sh b/startxml.sh
new file mode 100755 (executable)
index 0000000..a295518
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+# startxml.sh -- indy.offline.xmlparser
+
+# Identify the custom class path components we need
+JAVA_HOME=/usr/lib/j2sdk1.3
+APP_HOME=/var/work/admin/Indy
+XML_HOME=/home/transfer/offline/
+LIB_HOME=${APP_HOME}/WEB-INF/lib
+CLASSPATH=${APP_HOME}/WEB-INF/classes
+CP=$LIB_HOME/gnu-regexp-1.0.8.jar
+CP=$CP:$LIB_HOME/freemarker.jar
+CP=$CP:$LIB_HOME/mm.mysql
+CP=$CP:$LIB_HOME/dbconbroker.jar
+CP=$CP:$LIB_HOME/saxon.jar
+CP=$CP:$LIB_HOME/postgresql-jdbc.jar
+
+# Execute
+/usr/lib/j2sdk1.3/bin/java -classpath $CP:$CLASSPATH \
+       org.indy.input.XmlInputParser $XML_HOME > /dev/null 2>&1
diff --git a/web/formate.css b/web/formate.css
new file mode 100755 (executable)
index 0000000..f81ecaa
--- /dev/null
@@ -0,0 +1,126 @@
+<STYLE TYPE="text/css">   
+
+   <!--
+
+   a:link  {
+
+       color : #006600;
+
+       text-decoration : none;
+
+   }
+
+   
+
+   a:visited  {
+
+       color : #009900;
+
+       text-decoration : none;
+
+   }
+
+   
+
+   a:active  {
+
+       color : White;
+
+       text-decoration : none;
+
+       background-color : #006600;
+
+   }
+
+   
+
+   a:hover  {
+
+       color : White;
+
+       text-decoration : none;
+
+       background-color : #006600;
+
+   }
+
+   
+
+   body,ol,div,td,th,address,blockquote,nobr,form  {
+
+       font-family : Trebuchet MS, Verdana, Arial, Helvetica, sans-serif;
+
+   }
+
+   
+
+   h1,h2,h4  {
+
+       font-family : Trebuchet MS, Verdana, Arial, Helvetica,sans-serif;
+
+   }
+
+   
+
+   h3  {
+
+       font-family : Trebuchet MS, Verdana, Arial, Helvetica, sans-serif;
+
+       font-size : 11pt;
+
+   }
+
+   
+
+   pre  {
+
+       font-family : Courier New, Courier, mono, Arial, Helvetica, sans-serif;
+
+       font-size : 8pt;
+
+   }
+
+   
+
+   ul,li,p,ol,b,i  {
+
+       font-family : Trebuchet MS, Verdana, Arial, Helvetica, sans-serif;
+
+   }
+
+   
+
+   p.small  {
+
+       font-family : Trebuchet MS, Verdana, Arial, Helvetica, sans-serif;
+
+       font-size : 8pt;
+
+   }
+
+   
+
+   p.dir  {
+
+       font-family : Trebuchet MS, Verdana, Arial, Helvetica, sans-serif;
+
+       font-size : 10pt;
+
+       margin-top : 0cm;
+
+       margin-bottom : 0cm;
+
+   }
+
+   
+
+   a.black  {
+
+       color : Black;
+
+   }
+
+   -->
+
+   </STYLE>
+
diff --git a/web/help/content.html b/web/help/content.html
new file mode 100755 (executable)
index 0000000..9cd40d5
--- /dev/null
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+    <p>
+      <a name="datum"><b>datum</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Als Datum sollte immer das Datum der Einspielung angegeben werden.
+       Das aktuelle Datum ist immer auch schon in die Maske eingetragen.
+       In Ausnahmefaellen koennen auch Artikel rueckdatiert werden.
+       Bei der Bearbeitung von Zuschriften findet ihr das Datum der Mail
+       in diesem Feld.
+       Die Datumsangabe (auch bei <a href="#termin">termin (von/bis)</a>
+      muss immer im format <i>yyyymmdd</i> sein.</font>
+    </p>
+       
+           <p>
+      <a name="ort"><b>ort</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Bei "ort" sollen immmer nur geographische Orte eingetragen
+       werden. Also nicht so etwas wie "bundesweit", "netz" oder
+       "ueberall". Der Ort wird beim Produzieren der Seiten immer vor
+       den Titel gestellt. Bitte achtet darauf, dass es zu keiner
+       Doppelnennungen des Ortes kommt.</font>
+    </p>
+
+    <p>
+      <a name="urheber"><b>urheber</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Wenn ein Urheber im Textfeld angegeben ist, so hat dieser Vorrang 
+       vor dem Popup. Bei einem neuen Artikel seid ihr immer als Urheber
+       voreingestellt. Bei einer Nachricht, die per Mail ins nadir-aktuell
+       System gekommen ist, befindet sich im Textfeld die Absenderin der
+       Mail. Bitte achtet darauf, dass nicht Namen, bzw. Mailadressen zur
+       Veroeffentlichung kommen, wo das nicht gewuenscht ist. In dem Feld
+       sollte sowieso keine Mailadresse stehen. Bei Privatpersonen sollte
+       immer die Zeile "anonym zugesandt" aus dem Popup benutzt werden und
+       die entsprechende Person aus dem Textfeld entfernt werden. Gruppen,
+       die oefter Artikel zusenden, sollten als Gruppen incl. Mailadresse
+       und Homepage in "Gruppen" eingetragen werden.</font>
+    </p>
+
+    <p>
+      <a name="inhalt"><b>inhalt / html</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Hier steht die eigentliche Nachricht. Mit dem Umschaltknopf
+       "html" koennt ihr festlegen, ob es sich um eine vorformatierte
+       Nachricht mit maximal 80 Zeichen pro Zeile handelt, oder ob der
+       Inhalt der Nachricht aus HTML besteht.<br>
+       Aus der Nachricht sollten alle Quotezeichen ">", die unnoetigen
+       Header und Footer entfernt werden.<br>
+       Weiteres zu den inhaltlichen Richtlinien
+       findet ihr in der <a href="../faq.html">faq</a></font>
+    </p>
+
+    <p>
+      <a name="termin"><b>termin</b><br>
+    <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Die Datumsangabe bei <i>termin (von/bis)</i> legt fest, das eine
+       Nachricht f&uuml;r eine bestimmte Zeit noch im Terminbereich
+       der Startseite von nadir-aktuell sichtbar bleibt.</font>
+    </p>
+
+    <p>
+      <a name="termin_name"><b>termin name</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Ist ein Terminname angegeben, so erscheint dieser in der rechten
+       Navigation auf den Startseiten, ansonsten wird der wirkliche Titel 
+       der Nachricht verwendet.</font>
+    </p>
+
+    <p>
+      <a name="oldstyle"><b>oldstyle</b><br>
+         <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+      Der Umschaltknopf <i>oldstyle</i> gibt an, ob es sich um automatisch
+      eingespielte Daten aus dem alten Aktuell-System handelt, bei einer
+      entsprechenden Bearbeitung von Nachrichten aus dem alten System 
+      sollte der Knopf deselektiert werden (und freigeschaltet) selektiert.
+         </font>
+    </p>
+
+    <p>
+      <a name="freigeschaltet"><b>freigeschaltet</b><br>
+      <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+         Der Umschaltknopf <i>freigeschaltet</i> gibt an, ob die Nachricht aktiv
+       ist, d.h. also, da&szlig; bei der naechsten Produktion der HTML-Seiten
+       aus der Datenbank die Nachricht in die Aktuellstruktur eingespielt wird.
+       </font>
+    </p>
+
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_datum.html b/web/help/content_datum.html
new file mode 100755 (executable)
index 0000000..c17a58f
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+    <p>
+      <a name="datum"><b>datum</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Als Datum sollte immer das Datum der Einspielung angegeben werden.
+       Das aktuelle Datum ist immer auch schon in die Maske eingetragen.
+       In Ausnahmefaellen koennen auch Artikel rueckdatiert werden.
+       Bei der Bearbeitung von Zuschriften findet ihr das Datum der Mail
+       in diesem Feld.
+       Die Datumsangabe (auch bei <a href="#termin">termin (von/bis)</a>
+      muss immer im format <i>yyyymmdd</i> sein.</font>
+    </p>
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_freigeschaltet.html b/web/help/content_freigeschaltet.html
new file mode 100755 (executable)
index 0000000..0e79a87
--- /dev/null
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+    <p>
+      <a name="freigeschaltet"><b>freigeschaltet</b><br>
+      <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+         Der Umschaltknopf <i>freigeschaltet</i> gibt an, ob die Nachricht aktiv
+       ist, d.h. also, da&szlig; bei der naechsten Produktion der HTML-Seiten
+       aus der Datenbank die Nachricht in die Aktuellstruktur eingespielt wird.
+       </font>
+    </p>
+
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_inhalt.html b/web/help/content_inhalt.html
new file mode 100755 (executable)
index 0000000..ed2f3e6
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+    <p>
+      <a name="inhalt"><b>inhalt / html</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Hier steht die eigentliche Nachricht. Mit dem Umschaltknopf
+       "html" koennt ihr festlegen, ob es sich um eine vorformatierte
+       Nachricht mit maximal 80 Zeichen pro Zeile handelt, oder ob der
+       Inhalt der Nachricht aus HTML besteht.<br>
+       Aus der Nachricht sollten alle Quotezeichen ">", die unnoetigen
+       Header und Footer entfernt werden.<br>
+       Weiteres zu den inhaltlichen Richtlinien
+       findet ihr in der <a href="../faq.html">faq</a></font>
+    </p>
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_oldstyle.html b/web/help/content_oldstyle.html
new file mode 100755 (executable)
index 0000000..7a75ce6
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+    <p>
+      <a name="oldstyle"><b>oldstyle</b><br>
+      <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+      Der Umschaltknopf <i>oldstyle</i> gibt an, ob es sich um automatisch
+      eingespielte Daten aus dem alten Aktuell-System handelt, bei einer
+      entsprechenden Bearbeitung von Nachrichten aus dem alten System 
+      sollte der Knopf deselektiert werden (und freigeschaltet) selektiert.
+      </font>
+    </p>
+
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_ort.html b/web/help/content_ort.html
new file mode 100755 (executable)
index 0000000..4ef202e
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+       
+    <p>
+      <a name="ort"><b>ort</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Bei "ort" sollen immmer nur geographische Orte eingetragen
+       werden. Also nicht so etwas wie "bundesweit", "netz" oder
+       "ueberall". Der Ort wird beim Produzieren der Seiten immer vor
+       den Titel gestellt. Bitte achtet darauf, dass es zu keiner
+       Doppelnennungen des Ortes kommt.</font>
+    </p>
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_termin.html b/web/help/content_termin.html
new file mode 100755 (executable)
index 0000000..6361b31
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+    <p>
+      <a name="termin"><b>termin</b><br>
+    <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Die Datumsangabe bei <i>termin (von/bis)</i> legt fest, das eine
+       Nachricht f&uuml;r eine bestimmte Zeit noch im Terminbereich
+       der Startseite von nadir-aktuell sichtbar bleibt.</font>
+    </p>
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_terminname.html b/web/help/content_terminname.html
new file mode 100755 (executable)
index 0000000..00c1afe
--- /dev/null
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+    <p>
+      <a name="termin_name"><b>termin name</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Ist ein Terminname angegeben, so erscheint dieser in der rechten
+       Navigation auf den Startseiten, ansonsten wird der wirkliche Titel 
+       der Nachricht verwendet.</font>
+    </p>
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/content_urheber.html b/web/help/content_urheber.html
new file mode 100755 (executable)
index 0000000..3dfd7ff
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Content</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Content</font></h1>
+
+    <p>
+      <a name="urheber"><b>urheber</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Wenn ein Urheber im Textfeld angegeben ist, so hat dieser Vorrang 
+       vor dem Popup. Bei einem neuen Artikel seid ihr immer als Urheber
+       voreingestellt. Bei einer Nachricht, die per Mail ins nadir-aktuell
+       System gekommen ist, befindet sich im Textfeld die Absenderin der
+       Mail. Bitte achtet darauf, dass nicht Namen, bzw. Mailadressen zur
+       Veroeffentlichung kommen, wo das nicht gewuenscht ist. In dem Feld
+       sollte sowieso keine Mailadresse stehen. Bei Privatpersonen sollte
+       immer die Zeile "anonym zugesandt" aus dem Popup benutzt werden und
+       die entsprechende Person aus dem Textfeld entfernt werden. Gruppen,
+       die oefter Artikel zusenden, sollten als Gruppen incl. Mailadresse
+       und Homepage in "Gruppen" eingetragen werden.</font>
+    </p>
+
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/help/help.html b/web/help/help.html
new file mode 100755 (executable)
index 0000000..6657008
--- /dev/null
@@ -0,0 +1,14 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+       <title>indymedia.de | globalhelp</title>
+</head>
+
+<body>
+tobe done
+
+
+</body>
+</html>
+
diff --git a/web/help/users.html b/web/help/users.html
new file mode 100755 (executable)
index 0000000..93aff1c
--- /dev/null
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Hilfe: Users</title>
+  </head>
+
+  <body>
+    <h1><font face="Verdana, Arial, Helvetica, sans-serif" size="-1">Hilfe: Users</font></h1>
+
+    <p>
+      <a name="#admin"><b>admin</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Ist das admin-Flag gesetzt, bekommt der User beim login die
+       Maske mit den vollen Zugriffsmoeglichkeiten auf nadir-aktuell.</font>
+    </p>       
+       
+    <p>
+      <a name="#poster"><b>poster</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Ist das poster-Flag gesetzt, hat der User die Moeglichkeit
+       die eingehende Post zu bearbeiten.
+       Das poster-Flag bezieht sich immer nur auf User, die keine 
+       admins sind.</font>
+    </p>
+
+    <p>
+      <a name="#gruppen"><b>assoziiert mit</b><br>
+       <font face="Verdana, Arial, Helvetica, sans-serif" size="-1">
+       Hier wird angegeben, welche Gruppe beim anlegen einer neuen 
+       Nachricht voreingestellt ist.</font>
+    </p>
+       
+    <hr>
+    <address><a href="mailto:webdb-l@mail.nadir.org">webdb-l@mail.nadir.org</a></address>
+  </body>
+</html>
diff --git a/web/img/extlink.gif b/web/img/extlink.gif
new file mode 100755 (executable)
index 0000000..4366ee6
Binary files /dev/null and b/web/img/extlink.gif differ
diff --git a/web/img/head_small.gif b/web/img/head_small.gif
new file mode 100755 (executable)
index 0000000..9f3a35b
Binary files /dev/null and b/web/img/head_small.gif differ
diff --git a/web/img/help.gif b/web/img/help.gif
new file mode 100755 (executable)
index 0000000..6dce45f
Binary files /dev/null and b/web/img/help.gif differ
diff --git a/web/img/intlink.gif b/web/img/intlink.gif
new file mode 100755 (executable)
index 0000000..bc10b45
Binary files /dev/null and b/web/img/intlink.gif differ
diff --git a/web/img/maillink.gif b/web/img/maillink.gif
new file mode 100755 (executable)
index 0000000..1c2e50d
Binary files /dev/null and b/web/img/maillink.gif differ
diff --git a/web/img/pointgris.gif b/web/img/pointgris.gif
new file mode 100755 (executable)
index 0000000..ef2d09f
Binary files /dev/null and b/web/img/pointgris.gif differ
diff --git a/web/index.html b/web/index.html
new file mode 100755 (executable)
index 0000000..1c0016e
--- /dev/null
@@ -0,0 +1,11 @@
+<HTML>
+<head>
+    <title>indymedia.de</title>
+    <meta http-equiv="refresh" content="0;url=servlet/Mir">
+</head>
+<body>
+wenn du nicht automatisch weitergeleitet wirst klicke <a href="servlet/Mir">hier</a><br>
+<br>
+</body>
+</HTML>
+
diff --git a/web/produced/img/arrow_down.gif b/web/produced/img/arrow_down.gif
new file mode 100755 (executable)
index 0000000..b2b5e2f
Binary files /dev/null and b/web/produced/img/arrow_down.gif differ
diff --git a/web/produced/img/audio_big.gif b/web/produced/img/audio_big.gif
new file mode 100755 (executable)
index 0000000..e1473c6
Binary files /dev/null and b/web/produced/img/audio_big.gif differ
diff --git a/web/produced/img/audio_small.gif b/web/produced/img/audio_small.gif
new file mode 100755 (executable)
index 0000000..4a2677f
Binary files /dev/null and b/web/produced/img/audio_small.gif differ
diff --git a/web/produced/img/bashcomp2.gif b/web/produced/img/bashcomp2.gif
new file mode 100755 (executable)
index 0000000..5288065
Binary files /dev/null and b/web/produced/img/bashcomp2.gif differ
diff --git a/web/produced/img/cleft.gif b/web/produced/img/cleft.gif
new file mode 100755 (executable)
index 0000000..5a3f14a
Binary files /dev/null and b/web/produced/img/cleft.gif differ
diff --git a/web/produced/img/dot.gif b/web/produced/img/dot.gif
new file mode 100755 (executable)
index 0000000..d80b7f4
Binary files /dev/null and b/web/produced/img/dot.gif differ
diff --git a/web/produced/img/extlink.gif b/web/produced/img/extlink.gif
new file mode 100755 (executable)
index 0000000..4366ee6
Binary files /dev/null and b/web/produced/img/extlink.gif differ
diff --git a/web/produced/img/h_m.gif b/web/produced/img/h_m.gif
new file mode 100755 (executable)
index 0000000..b128fcd
Binary files /dev/null and b/web/produced/img/h_m.gif differ
diff --git a/web/produced/img/h_r.gif b/web/produced/img/h_r.gif
new file mode 100755 (executable)
index 0000000..61f76dd
Binary files /dev/null and b/web/produced/img/h_r.gif differ
diff --git a/web/produced/img/h_slice.gif b/web/produced/img/h_slice.gif
new file mode 100755 (executable)
index 0000000..b7db168
Binary files /dev/null and b/web/produced/img/h_slice.gif differ
diff --git a/web/produced/img/head_left_logo.gif b/web/produced/img/head_left_logo.gif
new file mode 100755 (executable)
index 0000000..b300d24
Binary files /dev/null and b/web/produced/img/head_left_logo.gif differ
diff --git a/web/produced/img/head_small.gif b/web/produced/img/head_small.gif
new file mode 100755 (executable)
index 0000000..70f6c24
Binary files /dev/null and b/web/produced/img/head_small.gif differ
diff --git a/web/produced/img/help.gif b/web/produced/img/help.gif
new file mode 100755 (executable)
index 0000000..f177ee2
Binary files /dev/null and b/web/produced/img/help.gif differ
diff --git a/web/produced/img/intlink.gif b/web/produced/img/intlink.gif
new file mode 100755 (executable)
index 0000000..bc10b45
Binary files /dev/null and b/web/produced/img/intlink.gif differ
diff --git a/web/produced/img/link_small.gif b/web/produced/img/link_small.gif
new file mode 100755 (executable)
index 0000000..600a830
Binary files /dev/null and b/web/produced/img/link_small.gif differ
diff --git a/web/produced/img/logo_small.gif b/web/produced/img/logo_small.gif
new file mode 100755 (executable)
index 0000000..f34786d
Binary files /dev/null and b/web/produced/img/logo_small.gif differ
diff --git a/web/produced/img/mail_small.gif b/web/produced/img/mail_small.gif
new file mode 100755 (executable)
index 0000000..13cc859
Binary files /dev/null and b/web/produced/img/mail_small.gif differ
diff --git a/web/produced/img/maillink.gif b/web/produced/img/maillink.gif
new file mode 100755 (executable)
index 0000000..1c2e50d
Binary files /dev/null and b/web/produced/img/maillink.gif differ
diff --git a/web/produced/img/photo_big.gif b/web/produced/img/photo_big.gif
new file mode 100755 (executable)
index 0000000..1481a4e
Binary files /dev/null and b/web/produced/img/photo_big.gif differ
diff --git a/web/produced/img/photo_small.gif b/web/produced/img/photo_small.gif
new file mode 100755 (executable)
index 0000000..5f1796c
Binary files /dev/null and b/web/produced/img/photo_small.gif differ
diff --git a/web/produced/img/pointgris.gif b/web/produced/img/pointgris.gif
new file mode 100755 (executable)
index 0000000..ef2d09f
Binary files /dev/null and b/web/produced/img/pointgris.gif differ
diff --git a/web/produced/img/search_icon.gif b/web/produced/img/search_icon.gif
new file mode 100755 (executable)
index 0000000..5f34ea5
Binary files /dev/null and b/web/produced/img/search_icon.gif differ
diff --git a/web/produced/img/sp.gif b/web/produced/img/sp.gif
new file mode 100755 (executable)
index 0000000..35d42e8
Binary files /dev/null and b/web/produced/img/sp.gif differ
diff --git a/web/produced/img/text_big.gif b/web/produced/img/text_big.gif
new file mode 100755 (executable)
index 0000000..2a31faa
Binary files /dev/null and b/web/produced/img/text_big.gif differ
diff --git a/web/produced/img/text_small.gif b/web/produced/img/text_small.gif
new file mode 100755 (executable)
index 0000000..ec24bd6
Binary files /dev/null and b/web/produced/img/text_small.gif differ
diff --git a/web/produced/img/video_big.gif b/web/produced/img/video_big.gif
new file mode 100755 (executable)
index 0000000..03a683a
Binary files /dev/null and b/web/produced/img/video_big.gif differ
diff --git a/web/produced/img/video_small.gif b/web/produced/img/video_small.gif
new file mode 100755 (executable)
index 0000000..d61cd29
Binary files /dev/null and b/web/produced/img/video_small.gif differ