308 Zeilen
		
	
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			308 Zeilen
		
	
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /***********************************************
 | |
|  * CONTENIDO MODUL - OUTPUT
 | |
|  *
 | |
|  * Modulname   :     w3concepts.form.v1
 | |
|  * Author      :     Andreas Kummer
 | |
|  * Copyright   :     mumprecht & kummer w3concepts
 | |
|  * Created     :     20-08-2004
 | |
|  * Modified    :     20-08-2004
 | |
|  ************************************************/
 | |
| 
 | |
| class w3form {
 | |
| 
 | |
|     var $email, $aufgedroeselt, $form, $formularFeld;
 | |
| 
 | |
|     function w3form() {
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function sendEmail() {
 | |
|         $this->aufdroeseln($this->suppress('sent'));
 | |
|         $this->generateEmailMessage();
 | |
|         mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function aufdroeseln($aufzudroeseln,$prefix = '') {
 | |
|         foreach ($aufzudroeseln as $key => $value) {
 | |
|             if (is_array($value)) {
 | |
|                 $this->aufdroeseln($value,$key." ");
 | |
|             } else {
 | |
|                 $this->aufgedroeselt["{$prefix}{$key}"] = $value;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function add2Message($key,$value) {
 | |
|         if (strlen($key) > 25 OR strlen($value) > 54) {
 | |
|             $this->email['message'] .= "$key\n$value\n";
 | |
|         } else {
 | |
|             $this->email['message'] .= $key;
 | |
|             $this->email['message'] .= str_repeat(' ',25-strlen($key));
 | |
|             $this->email['message'] .= "$value\n";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function generateEmailMessage() {
 | |
|         if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
 | |
|             $this->add2Message($key,$value);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function suppress() {
 | |
|         $suppress = func_get_args();
 | |
|         foreach ($_POST as $key => $value) {
 | |
|             if (array_search($key,$suppress) === false) $fields[$key] = $value;
 | |
|         }
 | |
|         return $fields;
 | |
|     }
 | |
| 
 | |
| 
 | |
| 
 | |
|     // PUBLIC
 | |
|     function addEmailAdress($email) {
 | |
|         if (empty($this->emailAdresses)) {
 | |
|             $this->email['adresses'] .= "$email";
 | |
|         } else {
 | |
|             $this->email['adresses'] .= ", $email";
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // PUBLIC
 | |
|     function setEmailSubject($subject) {
 | |
|         $this->email['subject'] = $subject;
 | |
|     }
 | |
| 
 | |
|     // PUBLIC
 | |
|     function setEmailFrom($email,$name) {
 | |
|         $this->email['from']['email'] = $email;
 | |
|         $this->email['from']['name'] = $name;
 | |
|     }
 | |
| 
 | |
|     // PUBLIC
 | |
|     function setForm($form) {
 | |
|         $this->form['form'] = $form;
 | |
|     }
 | |
| 
 | |
|     // PUBLIC
 | |
|     function setAnswer($answer) {
 | |
|         $this->form['answer'] = $answer;
 | |
|     }
 | |
| 
 | |
|     // PUBLIC
 | |
|     function setBackgroundError($color) {
 | |
|         $this->form['colorError'] = $color;
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function formularInterpretation(&$formular) {
 | |
|         $felder = split('###',$formular);
 | |
|         for ($i=1;$i<count($felder);$i=$i+2) {
 | |
|             $attributte = split(';',trim($felder[$i]));
 | |
|             foreach ($attributte as $attribut) {
 | |
|                 $namewert = split(':',trim($attribut));
 | |
|                 if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
 | |
|                     $feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
 | |
|                 } else {
 | |
|                     $feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return $feld;
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function formularAusgabe($sent = false) {
 | |
|         echo '<form action="" method="post">';
 | |
|         echo '<input type="hidden" name="sent" value="true" />';
 | |
|         $formular = $this->form['form'];
 | |
|         $formulardaten = $this->formularInterpretation(&$formular);
 | |
|         $formular = split('###',$formular);
 | |
|         foreach ($formular as $formularteil) {
 | |
|             if (!empty($formulardaten["{$formularteil}"])) {
 | |
|                 $this->formularFeld($formulardaten["{$formularteil}"],$sent);
 | |
|             } else {
 | |
|                 echo $formularteil;
 | |
|             }
 | |
|         }
 | |
|         echo '</form>';
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function formularFeld($attribute,$sent) {
 | |
|         $parameter = "name=\"{$attribute['name']}\"";
 | |
|         if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
 | |
|         switch ($attribute['type']) {
 | |
|             case 'select':
 | |
|             case 'password':
 | |
|             case 'text':
 | |
|                 if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
 | |
|                 break;
 | |
|         }
 | |
|         switch ($attribute['type']) {
 | |
|             case 'textarea':
 | |
|             case 'text':
 | |
|                 if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
 | |
|                 if (!empty($attribute['value'])) $value = $attribute['value'];
 | |
|                 if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
 | |
|                 break;
 | |
|         }
 | |
|         switch ($attribute['type']) {
 | |
|             case 'text':
 | |
|                 echo "<input type=\"text\" $parameter value=\"$value\" $style />";
 | |
|                 break;
 | |
|             case 'password':
 | |
|                 echo "<input type=\"password\" $parameter value=\"$value\" $style />";
 | |
|                 break;
 | |
|             case 'textarea':
 | |
|                 echo "<textarea name=\"{$attribute['name']}\" cols=\"";
 | |
|                 echo (empty($attribute['cols']))?('20'):($attribute['cols']);
 | |
|                 echo "\" rows=\"";
 | |
|                 echo (empty($attribute['rows']))?('2'):($attribute['rows']);
 | |
|                 echo "\" wrap=\"virtual\" $style>$value</textarea>";
 | |
|                 break;
 | |
|             case 'select':
 | |
|                 echo "<select $parameter $style>";
 | |
|                 for ($i=0;$i<count($attribute['option']);$i++) {
 | |
|                     if (!empty($attribute['optionvalue'][$i])) {
 | |
|                         if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
 | |
|                             echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
 | |
|                         } else {
 | |
|                             if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
 | |
|                                 echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
 | |
|                             } else {
 | |
|                                 echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
 | |
|                             }
 | |
|                         }
 | |
|                     } else {
 | |
|                         if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
 | |
|                             echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
 | |
|                         } else {
 | |
|                             if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
 | |
|                                 echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
 | |
|                             } else {
 | |
|                                 echo "<option>{$attribute['option'][$i]}</option>\n";
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 echo "</select>";
 | |
|                 break;
 | |
|             case 'checkbox':
 | |
|                 $formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
 | |
|                 if ($sent) {
 | |
|                     if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
 | |
|                         echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
 | |
|                     } else {
 | |
|                         echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
 | |
|                     }
 | |
|                 } else {
 | |
|                     if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
 | |
|                         echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
 | |
|                     } else {
 | |
|                         echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
 | |
|                     }
 | |
|                 }
 | |
|                 break;
 | |
|             case 'radio':
 | |
|                 if (!empty($_POST["{$attribute['name']}"])) {
 | |
|                     if ($_POST["{$attribute['name']}"] == $attribute['value']) {
 | |
|                         echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
 | |
|                     } else {
 | |
|                         echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
 | |
|                     }
 | |
|                 } else {
 | |
|                     if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
 | |
|                         echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
 | |
|                     } else {
 | |
|                         echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
 | |
|                     }
 | |
|                 }
 | |
|                 break;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function formularVollstaendig() {
 | |
| 
 | |
|         $formular = $this->form['form'];
 | |
| 
 | |
|         $felder = $this->formularInterpretation(&$formular);
 | |
| 
 | |
|         foreach ($felder as $feld) {
 | |
|             if (!$this->formularFeldKorrekt(&$feld)) return false;
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function success() {
 | |
|         $this->sendEmail();
 | |
|         echo $this->form['answer'];
 | |
|     }
 | |
| 
 | |
|     // PRIVATE
 | |
|     function formularFeldKorrekt(&$feld) {
 | |
| 
 | |
|         // prüfung, ob pflichtfeld vorhanden
 | |
|         if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;
 | |
| 
 | |
|         // wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
 | |
|         if (empty($_POST["{$feld['name']}"])) return true;
 | |
| 
 | |
|         // regular expression prüfungen
 | |
|         if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
 | |
|         if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
 | |
|         if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
 | |
|         if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
 | |
|         if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
 | |
|         if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;
 | |
| 
 | |
|         // grössenbereich bei integer und float prüfen
 | |
|         if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
 | |
|         if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;
 | |
| 
 | |
|         // längenbereich bei allen typen prüfen
 | |
|         if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
 | |
|         if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     //PUBLIC
 | |
|     function process() {
 | |
|         if (!isset($_POST['sent'])) {
 | |
|             $this->formularAusgabe();
 | |
|         } elseif ($this->formularVollstaendig()) {
 | |
|             $this->success();
 | |
|         } else {
 | |
|             $this->formularAusgabe(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| if ($edit) {
 | |
|     echo "<h1>Formularkonfiguration</h1>";
 | |
|     echo "<p>Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</p>";
 | |
|     echo "CMS_HTML[0]";
 | |
|     echo "<p>Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:</p>";
 | |
|     echo "CMS_HTML[1]";
 | |
| } else {
 | |
|     $formular = new w3form();
 | |
|     $formular->addEmailAdress("CMS_VALUE[0]");
 | |
|     $formular->setEmailSubject("CMS_VALUE[1]");
 | |
|     $formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
 | |
|     $formular->setBackgroundError("CMS_VALUE[4]");
 | |
|     $formular->setForm("CMS_HTML[0]");
 | |
|     $formular->setAnswer("CMS_HTML[1]");
 | |
|     $formular->process();
 | |
| }
 | |
| 
 | |
| ?>
 |