From 2e3cb966cf729fa51db6d6fb192dc3788a02d55e Mon Sep 17 00:00:00 2001 From: "o.pinke" Date: Fri, 29 Apr 2022 17:40:44 +0200 Subject: [PATCH] init module with w3concepts.form.v1 --- xml/KontaktForm_Valid_package.xml | 398 ++++++++++++++++++++++++++++++ 1 file changed, 398 insertions(+) create mode 100644 xml/KontaktForm_Valid_package.xml diff --git a/xml/KontaktForm_Valid_package.xml b/xml/KontaktForm_Valid_package.xml new file mode 100644 index 0000000..bcbf183 --- /dev/null +++ b/xml/KontaktForm_Valid_package.xml @@ -0,0 +1,398 @@ + + +a:5:{s:7:"jsfiles";a:0:{}s:8:"tplfiles";a:0:{}s:8:"cssfiles";a:0:{}s:7:"layouts";a:0:{}s:12:"translations";a:0:{}} +KontaktForm_Valid +<Ihre Modulbeschreibung> + +Autor: +Version + +?><?php + + /************************************************** + * CONTENIDO MODULE - INPUT + * + * 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) version + *************************************************/ + + echo " + <table cellspacing='0' cellpadding='10' border='0'> + <tr> + <td>" . mi18n("Zieladresse (alias@mydomain.com):") . "</td> + <td><input type='text' name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size='30' /></td> + </tr> + <tr> + <td>" . mi18n("Betreff:") . "</td> + <td><input type='text' name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size='30' /></td> + </tr> + <tr> + <td>" . mi18n("Antwortadresse (alias@mydomain.com):") . "</td> + <td><input type='text' name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size='30' /></td> + </tr> + <tr> + <td>" . mi18n("Emailname (z.B. Vorname Name):") . "</td> + <td><input type='text' name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size='30' /></td> + </tr> + <tr> + <td>" . mi18n("Hintergrundfarbe bei Fehlern (z.B. red):") . "</td> + <td><input type='text' name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size='30' /></td> + </tr> + </table> + "; + +<?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 '<div class="textItem secondItem"><form action="" method="POST" class="form-horizontal">'; + 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></div>'; + } + + 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(); + } + + ?> + + + + + + +