344 Zeilen
		
	
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			344 Zeilen
		
	
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**************************************************
 | |
|  * CONTENIDO MODULE - OUTPUT
 | |
|  *
 | |
|  * Modulname   :     w3concepts.form.v1
 | |
|  * Author      :     Andreas Kummer
 | |
|  * Copyright   :     mumprecht & kummer w3concepts
 | |
|  * Created     :     20-08-2004
 | |
|  * Modified    :     20-08-2004
 | |
|  * Modified    :     24-08-2013, Murat Purc, adapted to newer CONTENIDO (4.8) and PHP (5.3/5.4) versions
 | |
|  *************************************************/
 | |
| 
 | |
| class w3form {
 | |
| 
 | |
|     private $email;
 | |
|     private $unraveled = array();
 | |
|     private $form;
 | |
|     private $formField = array();
 | |
| 
 | |
|     public function __construct() {
 | |
|         $this->email = array(
 | |
|             'adresses' => '',
 | |
|             'from' => array(
 | |
|                 'name' => '',
 | |
|                 'email' => ''
 | |
|             ),
 | |
|             'message' => '',
 | |
|             'subject' => ''
 | |
|         );
 | |
| 
 | |
|         $this->form = array(
 | |
|             'form' => '',
 | |
|             'answer' => '',
 | |
|             'colorError' => ''
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     private function sendEmail() {
 | |
|         $this->unravel($this->suppress('sent'));
 | |
|         $this->generateEmailMessage();
 | |
|         mail(
 | |
|             $this->email['adresses'],
 | |
|             $this->email['subject'],
 | |
|             $this->email['message'],
 | |
|             sprintf(
 | |
|                 "From: %s <%s>\nReply-To: %s\nX-Mailer: PHP/%s",
 | |
|                 $this->email['from']['name'],
 | |
|                 $this->email['from']['email'],
 | |
|                 $this->email['from']['email'],
 | |
|                 phpversion()
 | |
|             )
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     private function unravel($toUnravel, $prefix = '') {
 | |
|         foreach ($toUnravel as $key => $value) {
 | |
|             if (is_array($value)) {
 | |
|                 $this->unravel($value, $key . ' ');
 | |
|             } else {
 | |
|                 $this->unraveled["{$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->unraveled)
 | |
|             foreach ($this->unraveled 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;
 | |
|     }
 | |
| 
 | |
|     public function formInterpretation(&$form) {
 | |
|         $fields = explode('###', $form);
 | |
|         $field = array();
 | |
| 
 | |
|         for ($i = 1; $i < count($fields); $i = $i + 2) {
 | |
|             $attributte = explode(';', trim($fields[$i]));
 | |
|             foreach ($attributte as $attribute) {
 | |
|                 $nameValue = explode(':', trim($attribute));
 | |
|                 if ($nameValue[0] != 'option' && $nameValue[0] != 'optionvalue') {
 | |
|                     $field["{$fields[$i]}"]["{$nameValue[0]}"] = $nameValue[1];
 | |
|                 } else {
 | |
|                     $field["{$fields[$i]}"]["{$nameValue[0]}"][] = $nameValue[1];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return $field;
 | |
|     }
 | |
| 
 | |
|     public function formOutput($sent = false) {
 | |
|         echo '<form action="" method="POST">';
 | |
|         echo '<input type="hidden" name="sent" value="true" />';
 | |
|         $form = $this->form['form'];
 | |
|         $formData = $this->formInterpretation($form);
 | |
|         $form = explode('###', $form);
 | |
| 
 | |
|         foreach ($form as $item) {
 | |
|             if (!empty($formData["{$item}"])) {
 | |
|                 $this->formField($formData["{$item}"], $sent);
 | |
|             } else {
 | |
|                 echo $item;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         echo '</form>';
 | |
|     }
 | |
| 
 | |
|     public function formField($attribute, $sent) {
 | |
|         $parameter = "name=\"{$attribute['name']}\"";
 | |
|         if ($sent && !$this->formFieldCorrect($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':
 | |
|                 $formId = preg_split('[\[|\]]', $attribute['name']);
 | |
|                 if ($sent) {
 | |
|                     if ($_POST["{$formId[0]}"]["{$formId[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 formComplete() {
 | |
|         $form = $this->form['form'];
 | |
|         $fields = $this->formInterpretation($form);
 | |
| 
 | |
|         foreach ($fields as $field) {
 | |
|             if (!$this->formFieldCorrect($field)) {
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     private function success() {
 | |
|         $this->sendEmail();
 | |
|         echo $this->form['answer'];
 | |
|     }
 | |
| 
 | |
|     private function formFieldCorrect(&$field) {
 | |
|         // prüfung, ob pflichtfeld vorhanden
 | |
|         if (!empty($field['mandatory']) && $field['mandatory'] == 'true' && empty($_POST["{$field['name']}"]))
 | |
|             return false;
 | |
| 
 | |
|         // wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
 | |
|         if (empty($_POST["{$field['name']}"]))
 | |
|             return true;
 | |
| 
 | |
|         // regular expression prüfungen
 | |
|         if (!empty($field['valid']) && $field['valid'] == 'simpletext' && !preg_match("/^[öäüéàèâêîça-z-]*$/i", $_POST["{$field['name']}"]))
 | |
|             return false;
 | |
|         if (!empty($field['valid']) && $field['valid'] == 'text' && !preg_match("/^[ .,;!?()öäüéàèâêîça-z-]*$/i", $_POST["{$field['name']}"]))
 | |
|             return false;
 | |
|         if (!empty($field['valid']) && $field['valid'] == 'integer' && !preg_match("/^[0-9]*$/", $_POST["{$field['name']}"]))
 | |
|             return false;
 | |
|         if (!empty($field['valid']) && $field['valid'] == 'float' && !preg_match("/^[0-9]*[.]{0,1}[0-9]*$/", $_POST["{$field['name']}"]))
 | |
|             return false;
 | |
|         if (!empty($field['valid']) && $field['valid'] == 'date' && !preg_match("/^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$/", $_POST["{$field['name']}"]))
 | |
|             return false;
 | |
|         if (!empty($field['valid']) && $field['valid'] == 'email' && !preg_match("/^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$/i", $_POST["{$field['name']}"]))
 | |
|             return false;
 | |
| 
 | |
|         // grössenbereich bei integer und float prüfen
 | |
|         if (!empty($field['minvalue']) && $_POST["{$field['name']}"] < $field['minvalue'])
 | |
|             return false;
 | |
|         if (!empty($field['maxvalue']) && $_POST["{$field['name']}"] > $field['maxvalue'])
 | |
|             return false;
 | |
| 
 | |
|         // längenbereich bei allen typen prüfen
 | |
|         if (!empty($field['minlength']) && strlen($_POST["{$field['name']}"]) < $field['minlength'])
 | |
|             return false;
 | |
|         if (!empty($field['maxlength']) && strlen($_POST["{$field['name']}"]) > $field['maxlength'])
 | |
|             return false;
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public function process() {
 | |
|         if (!isset($_POST['sent'])) {
 | |
|             $this->formOutput();
 | |
|         } elseif ($this->formComplete()) {
 | |
|             $this->success();
 | |
|         } else {
 | |
|             $this->formOutput(true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| if (isset($edit) && $edit) {
 | |
|     echo "<h1>" . mi18n("Formularkonfiguration") . "</h1>";
 | |
|     echo "<p>" . mi18n("Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:") . "</p>";
 | |
|     echo "CMS_HTML[0]";
 | |
|     echo "<p>" . mi18n("Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:") . "</p>";
 | |
|     echo "CMS_HTML[1]";
 | |
| } else {
 | |
|     $form = new w3form();
 | |
|     $form->addEmailAdress("CMS_VALUE[0]");
 | |
|     $form->setEmailSubject("CMS_VALUE[1]");
 | |
|     $form->setEmailFrom("CMS_VALUE[2]", "CMS_VALUE[3]");
 | |
|     $form->setBackgroundError("CMS_VALUE[4]");
 | |
|     $form->setForm("CMS_HTML[0]");
 | |
|     $form->setAnswer("CMS_HTML[1]");
 | |
|     $form->process();
 | |
| }
 | |
| 
 | |
| ?>
 |