From 582877ac98b59393454c3122c4e9499428f1ec42 Mon Sep 17 00:00:00 2001 From: "o.pinke" Date: Fri, 29 Apr 2022 17:37:52 +0200 Subject: [PATCH] init module with w3concepts.form.v1 --- css/.hold | 1 + image/.hold | 1 + js/.hold | 1 + lang/.hold | 1 + php/cl_contactform_input.php | 38 ++++ php/cl_contactform_output.php | 344 ++++++++++++++++++++++++++++++++++ template/.hold | 1 + xml/.hold | 1 + 8 files changed, 388 insertions(+) create mode 100644 css/.hold create mode 100644 image/.hold create mode 100644 js/.hold create mode 100644 lang/.hold create mode 100644 php/cl_contactform_input.php create mode 100644 php/cl_contactform_output.php create mode 100644 template/.hold create mode 100644 xml/.hold diff --git a/css/.hold b/css/.hold new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/css/.hold @@ -0,0 +1 @@ + diff --git a/image/.hold b/image/.hold new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/image/.hold @@ -0,0 +1 @@ + diff --git a/js/.hold b/js/.hold new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/js/.hold @@ -0,0 +1 @@ + diff --git a/lang/.hold b/lang/.hold new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/lang/.hold @@ -0,0 +1 @@ + diff --git a/php/cl_contactform_input.php b/php/cl_contactform_input.php new file mode 100644 index 0000000..dcce82a --- /dev/null +++ b/php/cl_contactform_input.php @@ -0,0 +1,38 @@ +?> + + " . mi18n("Zieladresse (alias@mydomain.com):") . " + + + + " . mi18n("Betreff:") . " + + + + " . mi18n("Antwortadresse (alias@mydomain.com):") . " + + + + " . mi18n("Emailname (z.B. Vorname Name):") . " + + + + " . mi18n("Hintergrundfarbe bei Fehlern (z.B. red):") . " + + + + "; +?>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 '
'; + echo ''; + $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 '
'; + } + + 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 ""; + break; + case 'password': + echo ""; + break; + case 'textarea': + echo ""; + break; + case 'select': + echo ""; + break; + case 'checkbox': + $formId = preg_split('[\[|\]]', $attribute['name']); + if ($sent) { + if ($_POST["{$formId[0]}"]["{$formId[1]}"] == $attribute['value']) { + echo ""; + } else { + echo ""; + } + } else { + if (!empty($attribute['selected']) && $attribute['selected'] == 'true') { + echo ""; + } else { + echo ""; + } + } + break; + case 'radio': + if (!empty($_POST["{$attribute['name']}"])) { + if ($_POST["{$attribute['name']}"] == $attribute['value']) { + echo ""; + } else { + echo ""; + } + } else { + if (!empty($attribute['selected']) && $attribute['selected'] == 'true') { + echo ""; + } else { + echo ""; + } + } + 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 "

" . mi18n("Formularkonfiguration") . "

"; + echo "

" . mi18n("Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:") . "

"; + echo "CMS_HTML[0]"; + echo "

" . mi18n("Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:") . "

"; + 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(); + } + + ?> \ No newline at end of file diff --git a/template/.hold b/template/.hold new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/template/.hold @@ -0,0 +1 @@ + diff --git a/xml/.hold b/xml/.hold new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/xml/.hold @@ -0,0 +1 @@ +