Index: include/includes/func/ic_mime_type.php
===================================================================
--- include/includes/func/ic_mime_type.php	(revision 0)
+++ include/includes/func/ic_mime_type.php	(revision 44)
@@ -0,0 +1,91 @@
+<?php
+
+/*
+
+Magic mime file interpreter
+Copyright (c) 2004 by Phillip Berndt
+Version 1.0
+
+*/
+
+function ic_mime_type ($file) {
+  if (!file_exists($file)) {
+    return ('application/x-object');
+  }
+  if(!isset($mimeData)) {
+   $mimeFile = array (
+      '0		string			PK\003\004		application/x-zip',
+      '0	string		Rar!		application/x-rar',
+      '257     string          ustar\0         application/x-tar       posix',
+      '257     string          ustar\040\040\0         application/x-tar       gnu',
+      '0	string		GIF		image/gif',
+      '0	beshort		0xffd8		image/jpeg',
+      '0	string		\137PNG			image/png',
+      '>30		string	Copyright\ 1989-1990\ PKWARE\ Inc.	application/x-zip',
+      '>30		string	PKLITE\ Copr.	application/x-zip',
+    );
+    foreach($mimeFile as $mimeLine) {
+      if($mimeLine[0] != '#' && trim($mimeLine)) {
+        if(preg_match('/^(\S+?)\s+(\S+?)\s+(\S+)(\s+(.+?))?$/si', $mimeLine, $regex_mimeDataSet)) {
+          $mimeDataSet['offset'] = str_replace('>', '', $regex_mimeDataSet[1]);
+          $indicator = $regex_mimeDataSet[3];
+          switch($regex_mimeDataSet[2]) {
+            case 'string':
+              $indicator = str_replace('\ ', ' ', $indicator);
+              $indicator = str_replace('\<', '<', $indicator);
+              $indicator = str_replace('\>', '>', $indicator);
+              $indicator = str_replace('\r', "\r", $indicator);
+              $indicator = str_replace('\n', "\n", $indicator);
+              $indicator = preg_replace('/\\\\([0-9]{3})/e', 'chr($1);', $indicator);
+              break;
+            case 'byte':
+              $indicator = pack('c', @eval('return '.$indicator.';'));
+              break;
+            case 'short':
+              $indicator = pack('s', @eval('return '.$indicator.';'));
+              break;
+            case 'beshort':
+              $indicator = pack('n', @eval('return '.$indicator.';'));
+              break;
+            case 'leshort':
+              $indicator = pack('v', @eval('return '.$indicator.';'));
+              break;
+            case 'belong':
+              $indicator = pack('N', @eval('return '.$indicator.';'));
+              break;
+            case 'lelong':
+              $indicator = pack('V', @eval('return '.$indicator.';'));
+              break;
+            case 'long':
+              $indicator = pack('l', @eval('return '.$indicator.';'));
+              break;
+          }
+
+          $mimeDataSet['indicator'] = $indicator;
+          $mimeDataSet['mime'] = str_replace("\r", '', $regex_mimeDataSet[5]);
+
+          $mimeData[] = $mimeDataSet;
+        }
+      }
+    }
+  }
+  $o = fopen ($file, "r");
+  $file_content = fgets($o, 4096);
+  fclose($o);
+  
+  $retVal = 'application/x-object';
+  foreach($mimeData as $key => $mimeTest) {
+    $testStr = substr($file_content, $mimeTest['offset'], strlen($mimeTest['indicator']));
+    if($testStr == $mimeTest['indicator']) {
+      $mimeType = $mimeTest['mime'];
+      if($mimeType == '') {
+        while($mimeType == '') {
+          $mimeType = $mimeData[++$key]['mime'];
+        }
+      }
+      $retVal = $mimeType;
+    }
+  }
+  return $retVal;
+}
+?>
\ No newline at end of file
Index: include/includes/loader.php
===================================================================
--- include/includes/loader.php	(revision 38)
+++ include/includes/loader.php	(working copy)
@@ -26,6 +26,7 @@
 require_once('include/includes/func/listen.php');
 require_once('include/includes/func/forum.php');
 require_once('include/includes/func/warsys.php'); 
+require_once('include/includes/func/ic_mime_type.php');
 
 # load something else
 require_once ('include/includes/lang/de.php');
Index: include/includes/lang/de.php
===================================================================
--- include/includes/lang/de.php	(revision 38)
+++ include/includes/lang/de.php	(working copy)
@@ -16,8 +16,8 @@
 'allow' => 'genehmigen',
 'allowed' => 'genehmigt',
 'and' => 'und',
-'answer' => 'Antworten',
-'answers' => 'Antw.',
+'answer' => 'Antwort erstellen',
+'answers' => 'Antworten',
 'astodo' => 'als Todo',
 'at' => 'um',
 'at2' => 'zu',
@@ -30,7 +30,7 @@
 'August' => 'August',
 'back' => 'zur&uuml;ck',
 'birthday' => 'Geburtstag',
-'board' => 'Forum',
+'board' => 'Forenbersicht',
 'bold' => 'Fett',
 'balance' => 'Kontostand',
 'change' => '&auml;ndern',
@@ -70,7 +70,7 @@
 'enter' => 'Eintragen',
 'entries' => 'Eintr&auml;ge',
 'newsletterinout' => 'Ein / Austragen',
-'faqs' => 'Faqs',
+'faqs' => 'FAQs',
 'favmap' => 'fav. Map',
 'female' => 'weiblich',
 'filename' => 'Dateiname',
@@ -94,7 +94,7 @@
 'guest' => 'Gast',
 'had' => 'hat',
 'hello' => 'Hallo',
-'hits' => 'Hits',
+'hits' => 'Ansichten',
 'homepage' => 'Homepage',
 'hometown' => 'Wohnort',
 'icq' => 'ICQ',
@@ -113,7 +113,7 @@
 'July' => 'Juli',
 'lastactivity' => 'Letzte Aktivit&auml;t',
 'lastfrom' => 'letzter von',
-'lastpost' => 'Last Post',
+'lastpost' => 'letzter Beitrag',
 'link' => 'Link',
 'linkor' => 'Link oder',
 'links' => 'Links',
@@ -175,19 +175,19 @@
 'picture' => 'Bild',
 'pictures' => 'Bilder',
 'pictureupload' => 'Bild hochladen',
-'picturedelete' => 'Bild geloescht',
+'picturedelete' => 'Bild gel&ouml;scht',
 'place' => 'Platz',
-'popupbynewmsg' => 'Popup bei neuer',
-'post' => 'Post',
+'popupbynewmsg' => 'Popup bei neuer PN',
+'post' => 'Beitr&auml;ge',
 'posts' => 'Beitr&auml;ge',
-'posts2' => 'Posts',
+'posts2' => 'Beitr&auml;ge',
 'present' => 'Anwesend',
 'preview' => 'Vorschau',
-'privatemessages' => 'PrivMsgs',
+'privatemessages' => 'PN',
 'profil' => 'Profil',
 'promise' => 'Zusagen',
 'quotation' => 'Zitat',
-'quote' => 'Zitieren',
+'quote' => 'zitieren',
 'rank' => 'Rang',
 'rules' => 'Regeln',
 'rating' => 'Wertung',
@@ -198,12 +198,12 @@
 'REGISTER' => 'R E G I S T R I E R E N',
 'registernow' => 'jetzt Registrieren',
 'regsince' => 'Dabei seit',
-'regtime' => 'Reg Time',
+'regtime' => 'Anmeldedatum',
 'reject' => 'ablehnen',
-'realydelete' => 'wirklich loeschen?',
+'realydelete' => 'wirklich l&ouml;schen?',
 'rejected' => 'abgelehnt',
 'remark' => 'Bemerkung',
-'rename' => 'Umbennen',
+'rename' => 'umbenennen',
 'repeat' => 'Wiederholen',
 'report' => 'Bericht',
 'reported' => 'gemeldet',
@@ -212,8 +212,8 @@
 'subject' => 'Betreff',
 'Saturday' => 'Samstag',
 'search' => 'Suchen',
-'second' => 'sekunde',
-'seconds' => 'sekunden',
+'second' => 'Sekunde',
+'seconds' => 'Sekunden',
 'seen' => 'Gesehen',
 'seenfrom' => 'Gesehen von',
 'send' => 'Senden',
@@ -222,7 +222,7 @@
 'sentby' => 'gesendet von',
 'sentto' => 'gesendet an',
 'sex' => 'Geschlecht',
-'shift' => 'Verschieben',
+'shift' => 'verschieben',
 'shortdesc' => 'kurze Beschr.',
 'signature' => 'Signatur',
 'signs' => 'Zeichen',
@@ -230,7 +230,7 @@
 'size' => 'Gr&ouml;&szlig;e',
 'skill' => 'Skill',
 'squad' => 'Team',
-'state' => 'Staat',
+'state' => 'Land',
 'status' => 'Status',
 'Sunday' => 'Sonntag',
 'support' => 'Support',
@@ -242,13 +242,13 @@
 'to2' => 'zum',
 'todos' => 'Todos',
 'tookplace' => 'statt',
-'topic' => 'Thema',
+'topic' => 'Themen',
 'today' => 'Heute',
 'yesterday' => 'Gestern',
 'topicclosed' => 'Thema geschlossen',
 'Tuesday' => 'Dienstag',
-'underlined' => 'Unterstrichen',
-'update' => 'Update',
+'underlined' => 'unterstrichen',
+'update' => 'letzter Beitrag',
 'upload' => 'Hochladen',
 'uptobeginning' => 'nach oben',
 'version' => 'Version',
@@ -287,33 +287,33 @@
 'amailhasbeensenttoyouwithmailandpass' => 'Dir wurde eine E-Mail mit dem Passwort und allem weiteren geschickt',
 'avatarisnopicture' => 'Bitte nur Bilder als Avatar hochladen.',
 'avatarcannotupload' => 'Das Bild ist entweder zu hoch zu breit oder zu gro&szlig;.',
-'awaycalnewenquiry' => 'Es ist ein neuer Away-Termin eingetragen worden, bitte puefen!!!',
+'awaycalnewenquiry' => 'Es ist ein neuer Away-Termin eingetragen worden, bitte p&uml;fen!!!',
 'awaycalchangedenquiry' => 'Ein Away Termin wurde bearbeitet, bitte pr&uuml;fen',
-'awaycalstatuschanged' => 'Der Status deines Antrags wurde geandert, bitte pruefen!',
-'changedthemail' => "Hallo,\nSie haben gerade Ihre eMail geaendert. Diese bitte mit dem nachfolgenden Link bestaetigen...\n\n",
+'awaycalstatuschanged' => 'Der Status deines Antrags wurde ge&auml;ndert, bitte pr&uuml;fen!',
+'changedthemail' => "Hallo,\nSie haben gerade Ihre eMail ge&auml;ndert. Diese bitte mit dem nachfolgenden Link best&auml;tigen...\n\n",
 'confirmfailure' => 'Kein Eintrag gefunden. Evtl. ist es schon zu lange her und der Eintrag wurde gel&ouml;scht oder du bist einfach zweimal mit dem selben Link auf diese Seite gekommen.',
 'confirmpassword' => 'Das neue Passwort wurde erfolgreich best&auml;tigt, du kannst dich jetzt damit <a href="index.php?user-login">einloggen</a>.',
 'confirmemail' => 'Die eMail wurde erfolgreich best&auml;tigt...',
 'confirmregist' => 'Erfolgreich best&auml;tigt, du kannst dich jetzt mit den in der eMail geschickten Daten <a href="index.php?user-login">einloggen</a>.',
-'confirmregistfailed' => 'da war wohl einer schneller, der Name ist leider vergeben. Bitte neu <a href="index.php?user-regist">Registrieren</a>',
+'confirmregistfailed' => 'da war wohl einer schneller, der Name ist leider vergeben. Bitte neu <a href="index.php?user-regist">registrieren</a>',
 'diashowstartstop' => 'Diashow starten / stoppen',
 'dateform' => 'Termin Formular',
 'dateformat' => '&nbsp;Format: JJJJ-MM-TT (Jahr-Monat-Tag)',
 'datemanage' => 'Termine verwalten',
-'doyoureallydelthispost' => 'M&ouml;chtest du diesen Eintrag wirklich l&ouml;schen',
+'doyoureallydelthispost' => 'M&ouml;chtest du diesen Eintrag wirklich l&ouml;schen?',
 'donotpostsofast' => 'Bitte nicht so oft/schnell schreiben...',
 'editthispost' => 'diesen Beitrag ver&auml;ndern',
 'edityoutpost' => 'deinen Beitrag ver&auml;ndern',
 'emailsuccessfullsend' => 'Die E-Mail wurde erfolgreich versendet.',
-'emailcouldnotsend' => 'Die eMail konnte nicht verschickt werden. Die Angaben werden ganz simpel geprueft, stimmt irgendwas nicht wird die eMail nicht verschickt.',
+'emailcouldnotsend' => 'Die eMail konnte nicht verschickt werden. Die Angaben werden ganz simpel gep&uuml;eft, stimmt irgendwas nicht wird die eMail nicht verschickt.',
 'fightusrequest' => "\n\ndie Anfrage kannst du im Adminbereich, als Nextwar &uuml;bernehmen... Vergiss aber nicht, Kontakt mit dem Clan aufzunehmen ;)",
 'guestsonline,ofthem' => 'Besucher online, davon',
 'wholevisitor' => 'Besucher gesamt',
 'weeksum' => 'Wochen Summe',
 'gbooktexttolong' => 'Der Text ist l&auml;nger als %s erlaubte Zeichen',
-'inserthereaname' => 'Hier einen Namen eingeben, das Zeichen * kann als Joker benutzer werden, wird es komplett alleine benutzt werden alle User angezeigt.',
-'login3failure' => 'Du hast leider schon 3 mal ohne Erfolg versucht dich einzuloggen!<br>Aus Sicherheits Gr&uuml;nden ist es nur 3 mal erlaubt zu versuchen sich einzuloggen. Komme bitte sp&auml;ter wieder und lass dir dein <a href="?user-13">  Passwort zuschicken</a>, wenn du das derzeitige vergessen haben solltest.',
-'leaderofxalert' => 'Der Leader von %s wurde benachrichtig.',
+'inserthereaname' => 'Hier einen Namen eingeben, das Zeichen * kann als Joker benutzt werden, wird es komplett alleine benutzt werden alle User angezeigt.',
+'login3failure' => 'Du hast leider schon 3 mal ohne Erfolg versucht dich einzuloggen!<br>Aus Sicherheitsgr&uuml;nden ist es nur 3 mal erlaubt zu versuchen sich einzuloggen. Komme bitte sp&auml;ter wieder und lass dir dein <a href="?user-13">  Passwort zuschicken</a>, wenn du das derzeitige vergessen haben solltest.',
+'leaderofxalert' => 'Der Leader von %s wurde benachrichtigt.',
 'logoutsuccessful' => 'Du wurdest erfolgreich ausgeloggt, alle Cookies wurden gel&ouml;scht!',
 'membershaveritten' => 'Mitglieder haben',
 'memberwhohavebeenplayed' => 'Member die gespielt haben',
@@ -334,10 +334,10 @@
 'passwortchanged' => 'Das Passwort wurde erfolgreich ge&auml;ndert',
 'passwortwrong' => 'Das Passwort stimmt leider nicht!',
 'passwortnotequal' => 'Die beiden neuen Passw&ouml;rter m&uuml;ssen &uuml;bereinstimmen',
-'postsin' => 'Posts in',
+'postsin' => 'Beitr&auml;ge in',
 'readandok' => 'gelesen und einverstanden',
 'readwholenews' => 'ganzen Artikel lesen',
-'registconfirm' => 'Damit Sie sich endgueltig anmelden koennen muessen Sie noch den folgenden Link bestaetigen:',
+'registconfirm' => 'Damit Sie sich endg&uuml;ltig anmelden k&ouml;nnen m&uuml;ssen Sie noch den folgenden Link best&auml;tigen:',
 'registconfirmlink' => 'http://%s?user-confirm&check=%s',
 'registredand' => 'registrierter und',
 'registrededand' => 'registrierte und',
@@ -352,7 +352,7 @@
 'newtopicssincelastvisit' => 'neue Themen seit dem letzten Besuch',
 'topicidnotfound' => 'Die Themen ID wurde nicht gefunden',
 'forumidnotfound' => 'Die Foren ID wurde nicht gefunden',
-'whereyouwrite' => 'Wohin willst du schreiben',
+'whereyouwrite' => 'An wen willst du schreiben?',
 'writeanewtopic' => 'neues Thema schreiben',
 'mailonreply' => 'Bei einer Antwort zu diesem Thema eine eMail erhalten',
 'nomailonreply' => 'Bei einer Antwort zu diesem Thema <b>keine</b> eMail mehr erhalten',
@@ -363,16 +363,16 @@
 'youhavereceivedaemail' => 'Ihnen wurde soeben eine eMail mit dem Link gesendet um das neue Passwort zu best&auml;tigen.',
 'yourareloged' => 'Du bist eingeloggt',
 'yourregistrationwassuccessful' => 'Deine Anmeldung war erfolgreich',
-'topicalertmessage' => "Hallo %s\n\nIm Thema \"%s\" ist gerade ein neuer Beitrag geschrieben worden...\n\nLink zum Thema: http://%s?forum-showposts-%s-topicalert\n\nWenn du keine neuen eMails bei einer Antwort erhalten moechtest kannst du dich in dem Beitrag ganz unten austragen (wenn du eingeloggt bist)",
-'registemail' => "Hallo %s,\n\nWillkommen auf dieser Seite!\n\n%s\n\nIhre Zugangsdaten:\n- - - - - - - -\nName     : %s\nPassword : %s\n- - - - - - - -\n\nDa Ihr Passwort nur verschluesselt in der Datebank gespeichert wurde, heben Sie es bitte gut auf.\n\nMit freundlichen Gruessen\nAdministrator",
-'newpasswordmail' => "Hallo %s,\n\num das neue Passwort zu bestaetigen einfach auf den folgenden Link klicken\n\n%s\n\nDein neues Passwort: %s\n\nWenn das Passwort nicht gewnscht ist, kann diese eMail einfach ignoriert werden.\n\nAdministrator",
-'nowvoteavailable' => 'keine Vote vorhanden',
+'topicalertmessage' => "Hallo %s\n\nIm Thema \"%s\" ist gerade ein neuer Beitrag geschrieben worden...\n\nLink zum Thema: http://%s?forum-showposts-%s-topicalert\n\nWenn du keine neuen eMails bei einer Antwort erhalten mchtest kannst du dich in dem Beitrag ganz unten austragen (wenn du eingeloggt bist)",
+'registemail' => "Hallo %s,\n\nWillkommen auf dieser Seite!\n\n%s\n\nIhre Zugangsdaten:\n- - - - - - - -\nName     : %s\nPassword : %s\n- - - - - - - -\n\nDa Ihr Passwort nur verschlsselt in der Datenbank gespeichert wurde, heben Sie es bitte gut auf.\n\nMit freundlichen Grssen\nAdministrator",
+'newpasswordmail' => "Hallo %s,\n\num das neue Passwort zu besttigen einfach auf den folgenden Link klicken\n\n%s\n\nDein neues Passwort: %s\n\nWenn das Passwort nicht gewnscht ist, kann diese eMail einfach ignoriert werden.\n\nAdministrator",
+'nowvoteavailable' => 'keine Umfrage vorhanden',
 'vote' => 'Umfrage',
-'newtopic' => 'Neues Thema',
+'newtopic' => 'neues Thema erstellen',
 
 'postlastchangedby' => 'Zuletzt modifiziert von',
-'createtopicsuccessful' => 'Thema wurde erfolgreich erstellt',
-'createpostsuccessful' => 'Beitrag erfolgreich erstellt',
+'createtopicsuccessful' => 'Dein Thema wurde erfolgreich erstellt',
+'createpostsuccessful' => 'Dein Beitrag wurde erfolgreich erstellt',
 'changepostsuccessful' => 'Der Beitrag wurde erfolgreich ge&auml;ndert',
 'backtotopic' => 'zur&uuml;ck zum Thema',
 'backtotopicoverview' => 'zur Themen &Uuml;bersicht',
@@ -389,7 +389,7 @@
 'otherinfo'=>'Sonstige Informationen',
 'clantag'=>'Clank&uuml;rzel',
 
-'joinusprivmsg' => "Hallo,\n%s moechte %s beitreten.\n\nFolgende Angaben hat er gemacht:\nSkill: %s\neMail: %s\nWohnort: %s\nAlter: %s\nICQ: %s\nFav.Map: %s\nGrund: %s\n\nEr hat die Regeln akzeptiert: %s\n\nWurde direkt als User registriert: %s\nWenn dort nein steht dann war er zum Zeitpunkt der Anfrage schon User.\n\nIm Adminmenu unter Teams kannst du ihn freischalten, oder die Anfrage loeschen. Wenn er als User registriert wurde, muss er die Registrierung jenach Einstellung erst bestaetigen.",
+'joinusprivmsg' => "Hallo,\n%s m&ouml;chte %s beitreten.\n\nFolgende Angaben hat er gemacht:\nSkill: %s\neMail: %s\nWohnort: %s\nAlter: %s\nICQ: %s\nFav.Map: %s\nGrund: %s\n\nEr hat die Regeln akzeptiert: %s\n\nWurde direkt als User registriert: %s\nWenn dort nein steht dann war er zum Zeitpunkt der Anfrage schon User.\n\nIm Adminmenu unter Teams kannst du ihn freischalten, oder die Anfrage l&ouml;schen. Wenn er als User registriert wurde, muss er die Registrierung jenach Einstellung erst best&auml;tigen.",
 
 'ende' => 'ende'
 );
@@ -398,4 +398,4 @@
 #foreach ($lang as $k => $v) { $x[$k] = 'NIX'; }
 #$lang = $x;
 
-?>
+?>
\ No newline at end of file
Index: include/includes/class/design.php
===================================================================
--- include/includes/class/design.php	(revision 38)
+++ include/includes/class/design.php	(working copy)
@@ -18,7 +18,7 @@
     global $allgAr;
     
     if (!is_null($file)) {
-		  echo '<div style="display: block; background-color: #FFFFFF; border: 2px solid #ff0000;">!!Man konnte in einer PHP Datei eine spezielle Index angeben. Damit das Design fuer diese Datei anders aussieht. Diese Funktion wurde ersetzt. Weitere Informationen im Forum auf ilch.de ... </div>';
+		  echo '<div style="display: block; background-color: #FFFFFF; border: 2px solid #ff0000;">!!Man konnte in einer PHP Datei eine spezielle Index angeben. Damit das Design fuer diese Datei anders aussieht. Diese Funktion wurde ersetzt. Weitere Informationen im Forum auf ilch.de ... Thema: <a href="http://www.ilch.de/forum-showposts-13758-p1.html#108812">http://www.ilch.de/forum-showposts-13758-p1.html#108812</a></div>';
 		}
 		
 		$this->vars = array();
@@ -95,14 +95,20 @@
 	  global $menu;
 	  $ma = $menu->get_string_ar();
 		$ia = array();
-		if (file_exists('include/designs/'.$this->design.'/design.ini')) {
-		  $ia = parse_ini_file ('include/designs/'.$this->design.'/design.ini');
-		}
+		if (!file_exists('include/designs/'.$this->design.'/design.ini')) {
+      return (false);
+    }
+		$ia = parse_ini_file ('include/designs/'.$this->design.'/design.ini');
 		arsort($ma);
-		foreach ($ma as $k => $v) {
-		  if (isset($ia[$k]) AND file_exists('include/designs/'.$this->design.'/'.$ia[$k])) {
-			  return ($ia[$k]);
-			}
+		krsort ($ia);
+		foreach ($ia as $k => $v) {
+      $k = preg_replace("/[^a-zA-Z0-9-*]/", "", $k);
+		  $k = str_replace('*', '[^-]+', $k);
+		  foreach ($ma as $k1 => $v1) {
+		    if (preg_match("/".$k."/", $k1) AND file_exists('include/designs/'.$this->design.'/'.$v)) {
+          return ($v);
+			  }
+		  }
 		}
 		return (false);
 	}
Index: include/contents/downloads.php
===================================================================
--- include/contents/downloads.php	(revision 38)
+++ include/contents/downloads.php	(working copy)
@@ -58,8 +58,82 @@
 	return ( $zges );
 }
 
+function icUpload () {
+	    
+      $name = escape($_POST['name'],'string');
+	    $version = escape($_POST['version'],'string');
+	    $autor = escape($_POST['autor'],'string');
+	    $surl = escape($_POST['surl'],'string');
+	    $ssurl = escape($_POST['ssurl'],'string');
+      $url = ( empty($_POST['url']) ? '' : escape($_POST['url'],'string') );
+	    $desc = escape($_POST['desc'],'string');
+	    $descl = escape($_POST['descl'],'textarea');
+      
+      if (empty($name)) {
+        return ('keinen Namen angegeben.');
+      }
 
+      if (empty($desc) or empty($descl)) {
+        return ('kein langer oder/und kein kurzer Text angegeben.');
+      }
+      
+      if (empty($url) AND empty($_FILES['file']['name'])) {
+        return ('Keine Datei oder Link angegeben.');
+      }
+  
+	    if (!empty ($_FILES['file']['name']) ) {
+		    $type  = trim($_FILES['file']['type']);
+		    $rtype = trim(ic_mime_type ($_FILES['file']['tmp_name']));
+        $fname = escape($_FILES['file']['name'],'string');
+        $fende = preg_replace("/.+\.([a-zA-Z]+)$/", "\\1", $fname);
+        
+        if (
+		      ($fende != 'rar' AND $fende != 'zip' AND $fende != 'tar')
+          
+          OR (
+          $type != 'application/zip' AND
+		    	$type != 'application/rar' AND
+		    	$type != 'application/x-rar-compressed' AND
+		    	$type != 'application/x-zip-compressed' AND
+          $type != 'application/x-rar' AND
+          $type != 'application/x-zip' AND
+          $type != 'application/x-tar')
+          
+          OR (
+          $rtype != 'application/x-rar' AND
+          $rtype != 'application/x-zip' AND
+          $rtype != 'application/x-tar')
 
+		    ) {
+          return ('Die Datei darf nur die Endungen: .zip, .tar oder .rar haben.');
+        }
+        
+        $fname = str_replace ('.'.$fende, '', $fname);
+        $fname = preg_replace("/[^a-zA-Z0-9]/", "", $fname);
+        $fname = $fname.'.'.$fende;
+          
+		    if ( $_FILES['file']['size'] > 2097000 ) { # 2 mb (2 097 152)
+          return ('Die Datei darf NICHT gr&ouml;sser als 2 MBytes sein.');
+        }
+        
+        if (file_exists( 'include/downs/downloads/user_upload/'.$fname ) ) {
+          return ('Die Datei existiert bereits und kann nicht &uuml;berschrieben werden.');
+        }
+        
+        if ( move_uploaded_file($_FILES['file']['tmp_name'], 'include/downs/downloads/user_upload/'.$fname) ) {
+          $url = 'include/downs/downloads/user_upload/'.$fname;
+			  }
+      }
+        
+      if (empty($url)) {
+        return ('Keine Datei oder Link angegeben');
+      }
+        
+      db_query("INSERT INTO prefix_downloads (`time`,`cat`,`creater`,`version`,`url`,surl,`ssurl`,`name`,`desc`,`descl`,pos) VALUES (NOW(),-1,'".$autor."','".$version."','".$url."','".$surl."','".$ssurl."','".$name."','".$desc."','".$descl."','0')");
+        
+      return (true);
+}
+
 switch ( $menu->get(1) ) {
   default :
 		$cid = ( $menu->get(1) ? escape($menu->get(1), 'integer') : 0 );
@@ -206,76 +280,13 @@
       $design = new design ( $title , $hmenu );
 	    $design->header();
       
-	    $finsert = false;
-	    $uinsert = true;
-	
-	    $name = escape($_POST['name'],'string');
-	    $version = escape($_POST['version'],'string');
-	    $autor = escape($_POST['autor'],'string');
-	    $surl = escape($_POST['surl'],'string');
-	    $ssurl = escape($_POST['ssurl'],'string');
-      $url = ( empty($_POST['url']) ? '' : escape($_POST['url'],'string') );
-	    $desc = escape($_POST['desc'],'string');
-	    $descl = escape($_POST['descl'],'textarea');
-	    if ( !empty($name) AND !empty($desc) AND !empty($descl) ) {
-	      $finsert = true;
-	    }
-  
-	    if ( !empty ($_FILES['file']['name']) ) {
-        $uinsert = false;
-		    $type = $_FILES['file']['type'];
-		    $fname = escape($_FILES['file']['name'],'string');
-		    $fname = str_replace(' ','',$fname);
-        if (
-		      $type == 'application/zip' OR
-		    	$type == 'application/rar' OR
-		    	$type == 'application/x-rar-compressed' OR
-		    	$type == 'application/x-zip-compressed' OR
-          $type == 'application/x-rar' OR
-          $type == 'application/x-zip' OR
-          $type == 'application/octet-stream'
-		 
-		    ) {
-		      if ( $_FILES['file']['size'] <= 2097000 ) { # 2 mb (2 097 152)
-			      if ( !file_exists( 'include/downs/downloads/user_upload/'.$fname ) ) {
-			        if ( move_uploaded_file($_FILES['file']['tmp_name'], 'include/downs/downloads/user_upload/'.$fname) ) {
-			          $uinsert = true;
-			    		  $url = 'include/downs/downloads/user_upload/'.$fname;
-			        }
-			    	} else {
-			    	  $exists = true;
-			    	}
-			    }
-		    }
-	    } else {
-		    if ( empty($url) ) {
-		      $finsert = false;
-		    }
-	    }
-	
-	    if ( $finsert AND $uinsert ) {
-	      db_query("INSERT INTO prefix_downloads (`time`,`cat`,`creater`,`version`,`url`,surl,`ssurl`,`name`,`desc`,`descl`,pos) VALUES (NOW(),-1,'".$autor."','".$version."','".$url."','".$surl."','".$ssurl."','".$name."','".$desc."','".$descl."','0')");
-		    echo 'Erfolgreich eingetragen! ... ein Moderator oder Admin dieser Seite wird den Download in n&auml;chster Zeit freischalten.';
-	    } else {
-	      ?>
-		      Es ist ein Fehler aufgetreten!<br /><br />
-		    	- Folgende Felder sind Pflicht:<br />
-		    	- - Name<br />
-		    	- - Kurz Besch.<br />
-		    	- - Beschreibung<br />
-		    	- - Link oder Upload Datei<br /><br />
-			
-			    - Wenn eine Datei hochgeladen wird:<br />
-		    	- - Die Datei darf NICHT gr&ouml;sser als 2 MBytes sein.<br />
-		    	- - Die Datei darf nur die Endungen: .zip oder .rar haben.<br /><br />
-		    	<?php
-			    if ( isset ($exists) ) {
-			      echo ' - - <b>Grund f&uuml;r den Abbruch:</b> Die Datei existiert bereits und kann nicht &uuml;berschrieben werden.<br />';
-			    }
-			    ?>
-			    <a href="javascript:history.back()">zur&uuml;ck</a>
-		    <?php
+      $re = icUpload(); 
+	    if ($re === true) {
+        echo 'Erfolgreich eingetragen! ... ein Moderator oder Admin dieser Seite wird den Download in n&auml;chster Zeit freischalten.';
+      } else {
+        echo '<b>Error:</b><br />'.$re;
       }
+      
       $design->footer();
     }
     break;
Index: include/contents/user/usergallery.php
===================================================================
--- include/contents/user/usergallery.php	(revision 38)
+++ include/contents/user/usergallery.php	(working copy)
@@ -62,12 +62,11 @@
 }
 
 # bild hochladen
-if (is_writeable('include/images/usergallery') AND loggedin() AND $uid == $_SESSION['authid']) {
+if (!empty($_FILES['file']['name']) AND is_writeable('include/images/usergallery') AND loggedin() AND $uid == $_SESSION['authid'] AND substr ( ic_mime_type($_FILES['file']['tmp_name']) , 0 , 6 ) == 'image/') {
   require_once('include/includes/func/gallery.php');
-  
   $size = @getimagesize ($_FILES['file']['tmp_name']);
-  
-  if (!empty($_FILES['file']['name']) AND ($size[2] == 2 OR $size[2] == 3)) {
+  $fende = preg_replace("/.+\.([a-zA-Z]+)$/", "\\1", $_FILES['file']['name']);
+  if (!empty($_FILES['file']['name']) AND $size[0] > 10 AND $size[1] > 10 AND ($size[2] == 2 OR $size[2] == 3 OR $size[2] == 1) AND ($fende == 'gif' OR $fende == 'jpg' OR $fende == 'jpeg' OR $fende == 'png')) {
     $name = $_FILES['file']['name'];
     $tmp = explode('.',$name);
     $tm1 = count($tmp) -1;
Index: include/contents/user/profil_edit.php
===================================================================
--- include/contents/user/profil_edit.php	(revision 38)
+++ include/contents/user/profil_edit.php	(working copy)
@@ -70,16 +70,17 @@
 			$avatar_sql_update = '';
       if ( !empty ( $_FILES['avatarfile']['name'] ) ) {
 				$file_tmpe = $_FILES['avatarfile']['tmp_name'];
+        $rile_type = ic_mime_type ($_FILES['avatarfile']['tmp_name']);
 				$file_type = $_FILES['avatarfile']['type'];
 				$file_size = $_FILES['avatarfile']['size'];
-				$file_name = $_FILES['avatarfile']['name'];
-        $fmsg = $lang['avatarisnopicture']; 
-				if ( substr ( $file_type , 0 , 6 ) == 'image/' ) {
-				  $endung = preg_replace("/.*\.([^\.]+)/", "\\1", $file_name);
-				  $size   = getimagesize($file_tmpe);
+        $fmsg = $lang['avatarisnopicture'];
+        $size  = @getimagesize ($file_tmpe);
+        $endar = array (1 => 'gif', 2 => 'jpg', 3 => 'png');
+				if ( ($size[2] == 1 OR $size[2] == 2 OR $size[2] == 3) AND $size[0] > 10 AND $size[1] > 10 AND substr ( $file_type , 0 , 6 ) == 'image/' AND substr ( $rile_type , 0 , 6 ) == 'image/' ) {
+				  $endung = $endar[$size[2]];
           $breite = $size[0];
           $hoehe  = $size[1];
-          $fmsg   = $lang['avatarcannotupload']; 
+          $fmsg = $lang['avatarcannotupload'];
 				  if ( $file_size <= $allgAr['Fasize'] AND $breite <= $allgAr['Fabreite'] AND $hoehe <=  $allgAr['Fahohe'] ) {
 					  $neuer_name = 'include/images/avatars/'.$_SESSION['authid'].'.'.$endung;
 						@unlink (db_result(db_query("SELECT avatar FROM prefix_user WHERE id = ".$_SESSION['authid']),0));
@@ -93,7 +94,6 @@
         @unlink (db_result(db_query("SELECT avatar FROM prefix_user WHERE id = ".$_SESSION['authid']),0));
         $avatar_sql_update = "avatar = '',";
       }
-  
   # avatar speichern ENDE
   
   
Index: include/contents/self.php
===================================================================
--- include/contents/self.php	(revision 38)
+++ include/contents/self.php	(working copy)
@@ -5,6 +5,7 @@
 
 defined ('main') or die ( 'no direct access' );
 
+
 # liest die <!--@..=..@--> in den ersten 1024 Zeichen in ein Array aus
 function get_properties($file){
       $handle = fopen ($file, 'r');
Index: include/admin/templates/selfbp.htm
===================================================================
--- include/admin/templates/selfbp.htm	(revision 38)
+++ include/admin/templates/selfbp.htm	(working copy)
@@ -13,6 +13,7 @@
     document.location.href="?selfbp=0&del=" + akl;
   }
 }
+
 //-->
 </script>
 <form name="form" action="?selfbp" method="POST">
Index: include/admin/selfbp.php
===================================================================
--- include/admin/selfbp.php	(revision 38)
+++ include/admin/selfbp.php	(working copy)
@@ -9,6 +9,7 @@
 $design = new design ( 'Admins Area', 'Admins Area', 2 );
 $design->header();
 
+
 # liest die <!--@..=..@--> in den ersten 1024 Zeichen in ein Array aus
 function get_properties($t){
       preg_match_all("|(?:<!--@(?P<name>[^=]*)=(?P<value>.*)@-->)|U",$t, $out, PREG_SET_ORDER);
Index: include/admin/admin.php
===================================================================
--- include/admin/admin.php	(revision 38)
+++ include/admin/admin.php	(working copy)
@@ -12,7 +12,7 @@
 
 # script version 
 $scriptVersion = 11;
-$scriptUpdate = 'D';
+$scriptUpdate = 'E';
 
 # statistik wird bereinigt.
 $mon = date('n');
Index: include/designs/ilchClan/design.ini
===================================================================
--- include/designs/ilchClan/design.ini	(revision 38)
+++ include/designs/ilchClan/design.ini	(working copy)
@@ -10,5 +10,10 @@
 ; was also immmer wenn die details des team 2 angezeigt wuerden die index_team2 als design vorlage verwendet
 ; wenn z.b. teams und teams-2 angegeben ist wird erst geschaut ob geraede teams-2 aufgerufen wird und erst dann
 ; wenn es sich als falsch rausstellt ob teams aufgerufen wird ...
+; dann ist es noch moeglich zu sagen, egal welches team ich anschaue, in den team-details soll immer eine
+; andere datei verwendet werden das erreicht man durch:
+; teams-* = "index_teamdetails.htm
+; jetzt wird also egal ob teams-1 oder teams-2 aufgerufen wird immer die datei index_teamdetails.htm verwendet
+; das * steht also fuer beliebigezeichen bis wieder ein bindestrich kommt.
 
 forum = "index_forum.htm"
\ No newline at end of file
