<?php
error_reporting(E_ALL ^E_NOTICE);
/**
* @desc Konfigurationsdatei f?r das Kontaktformular
* @author Thomas Wicht, Ludwigstrasse 38 , 23554 L?beck
* @Copyright 2009
* @version 1.04
* @Link http://www.xqhq.de
*/
session_cache_expire(120); 
session_start('kontaktformular');
// Einbinden der ben?tigten Klassen und Funktionen
require_once("class/tpl.php");  
require_once("class/function.php");
require_once("config.php"); 
include("class/email.class.php");
// Template Klassen instanzieren
$form   = new tpl(); 
$header = new tpl();
$footer = new tpl();

$header->open("header.html");
$footer->open("footer.html"); 
// Content laden    
$form->open('anfrage.html');
$errorMsg = array();

// Formulardaten verarbeiten und die jeweiligen Felder auswerten    
if($_POST['gesendet'] == true)
{
    foreach($pflichtfelder as $key => $value){
        if(empty($_POST[$key])){
            $form->setFormularFehler($key);
            $errorMsg[$key] = $pflichtfelder[$key];                
        }
    }
    
    // Prüfen der Formular Eingaben
    foreach($_POST as $key => $value)
    {
        // Soll die Sicherheitsabfrage validiert werden
        if(array_key_exists("securitybox",$pflichtfelder) && $key == 'securitybox')
        {
            if($_SESSION['securitybox'] != $_POST['securitybox'] || empty($_POST['securitybox'])){
                $form->setFormularFehler('securitybox');
                $errorMsg[$key] = $pflichtfelder['securitybox'];
            } 
        }       
        // Feld E-Mail Adresse prüfen
        if(array_key_exists("email",$pflichtfelder) && $key == 'email')
        {
            if(!validateEmail($value))
            {
                $form->setFormularFehler($key);
                $errorMsg[$key] = $pflichtfelder[$key];
            } 
        }      
        // Restliche Pflichtfelder prüfen, ob diese ausgefüllt sind
        if(array_key_exists($key,$pflichtfelder) && $key != 'securitybox' && $key != 'email')
        {
            if(empty($value))
            {
                $form->setFormularFehler($key);
                $errorMsg[$key] = $pflichtfelder[$key];                
            }
        } 
        
        // Restliche mindesl?ngen pr?fen
        if(array_key_exists($key,$mindestLaenge))
        {
            if(strlen($value) < $mindestLaenge[$key]['mindestlaenge'])
            {
                $form->setFormularFehler($key);
                $errorMsg[$key] = $mindestLaenge[$key]['fehlernachricht'];                
            }
        } 
        
        // Restliche maximal l?ngen pr?fen
        if(array_key_exists($key,$maximalLaenge))
        {
            if(strlen($value) > $maximalLaenge[$key]['maximallaenge'])
            {
                $form->setFormularFehler($key);
                $errorMsg[$key] = $maximalLaenge[$key]['fehlernachricht'];                
            }
        }   
    }    
    // Sollten Fehler bei den Formulardaten aufgetreten sein
    // werden wir diese dem Benutzer ausgeben
    if(count($errorMsg) > 0)
    {
        $errorMsg = makeHtmlList($headline,$errorMsg,'hilfstexterror');
        
        // Falls eine Kopie dieser Nachricht gew?nscht wurde
        // setzen wir die Checkbox auf aktiviert
        if($_POST['emailkopie'] == true)
        {       
            $form->makeData('emailkopie','checked="checked"');
        } 
        
        // Setzen der Fehlerliste im Formular
        $form->makeData('system_message',"<hr size='1'>".$errorMsg."<hr size='1'>");
        
        // Eingaben die der Benutzer bereits gemacht hat
        // werden an das Formular zur?ckgegeben
        foreach($_POST AS $key => $value)
        {
            // SELECT Felder
            $form->makeData("select_{$key}_{$value}",  "selected=\"selected\"");
            // Checkbox
            $form->makeData("checkbox_{$key}_{$value}","checked=\"checked\"");
            // Radio Button
            $form->makeData("radio_{$key}_{$value}",   "checked=\"checked\""); 
            
            $form->makeData("$key",htmlentities(stripslashes($value)));
        }     
    }    
    else
    {
        // Erzeugen von Datum, Uhrzeit, aufrufende Adresse und IP
        $_POST['ip']    = $_SERVER['REMOTE_ADDR'];
        $_POST['datum'] = makeGermanDate();
        $_POST['url']   = $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
        
        // Erzeugen des E-Mail Templates f?r den Admin
        $mailAdmin = new tpl();
        $mailAdmin->open('anfrage_mail_admin.html');
        
        $mailAdmin_textVersion = new tpl();
        $mailAdmin_textVersion->open('anfrage_mail_admin_textVersion.html');
        
        foreach($_POST AS $key => $value)
        {
            $mailAdmin->makeData($key,nl2br(htmlentities(stripslashes($value))));
            $mailAdmin_textVersion->makeData($key,$value);
        }
        
        $mime_boundary     = md5(time()); 
        $mailHeader        = "";
        $emailContentAdmin = "";
        
        
        
        $email = new email();
        $email->eol = EOL;
        
        $email->message_html   = $mailAdmin->getData();
        $email->message_text   = strip_tags($mailAdmin_textVersion->getData());
        
        $email->subject        = $_POST['subject'];
        $email->sender_email   = $_POST['email'];
        
        $email->nameOfSender   = "{$_POST['vorname']} {$_POST['nachname']}";
        $email->receiver_email = $emailOfAdmin;
        $email->returnPath     = $_POST['email']; 
        $email->charset        = 'ISO-8859-1';
        
        $content_type = "multipart/alternative";
        
        // Auf einen m?glichen Dateianhang pr?fen
        foreach($uploadFelder as $uploadName)
        {
            if(strlen($_FILES[$uploadName]['tmp_name']) > 0)
            {
                $content = file_get_contents($_FILES[$uploadName]['tmp_name']);
                
                $email->appendAttachment($_FILES[$uploadName]['name'],$content);
                $content_type = "multipart/attachment"; 
            }            
        }      
        // Falls der Benutzer keinen Betreff angegeben hat
        // wird ein Default Betreff eingesetzt
        if(empty($_POST['betreff']) || $betreffUeaberschreiben)
        {
            $_POST['betreff'] = $betreffEmailAdmin;
        }
          
        $emailAdmin = $email->buildMail($content_type);
        
        // E-Mail konnte aus technischen Gründen nicht gesendet werden
        if(!mail($emailOfAdmin,$email->getEncodedLineString($_POST['betreff'],$charset,'b'),'',$emailAdmin)){
         
             // Setzen der Best?tigungsseite f?r den Benutzer
            $form = new tpl();
            $form->open('anfrage_fehler.html');
                       
        }else{
            // Wuenscht der Benutzer eine Kopie, laden wir das Template f?r Ihn 
            if($_POST['emailkopie'] == true && !empty($_POST['email']))
            {
                $mailUser = new tpl();
                $mailUser->open('anfrage_mail_user.html');
                
                $mailUser_textVersion = new tpl(); 
                $mailUser_textVersion->open('anfrage_mail_user_textVersion.html');
                
                foreach($_POST AS $key => $value)
                {
                    $mailUser->makeData($key,nl2br(htmlentities(stripslashes($value))));
                    $mailUser_textVersion->makeData($key,$value);
                }
                
                $email = new email();
                $email->eol = EOL;
                
                $email->message_html   = $mailUser->getData();
                $email->message_text   = strip_tags($mailUser_textVersion->getData());
                
                $email->subject        = $betreffEmailKopieAnUser;
                $email->sender_email   = $emailOfAdmin;
                
                $email->nameOfSender   = "";
                $email->receiver_email = $_POST['email'];
                //$email->returnPath     = $_POST['email']; 
                $email->charset        = $charset;
                
                $content_type = "multipart/alternative";     
                $mailHeader = $email->buildMail($content_type);

                @mail($_POST['email'],$email->getEncodedLineString($betreffEmailKopieAnUser,$charset,'b'),false,$mailHeader);
            }
            
            // Setzen der Best?tigungsseite f?r den Benutzer
            $form = new tpl();
            $form->open('anfrage_bestaetigung.html');

            session_destroy();
            unset($_POST);            
        }
    }
}
// Setzen der IP Adresse des Besuchers, sowei Datum und Uhrzeit
    $form->makeData('ip',   $_SERVER['REMOTE_ADDR']);
    $form->makeData('datum',makeGermanDate());
    
    print $header->getData();
    $form->getSize();
    print $form->getData();
    print $footer->getData();
         
?>