From 58880262364bceefe3e208819ac241d71dc1b4c6 Mon Sep 17 00:00:00 2001 From: Ortwin Pinke Date: Wed, 14 Aug 2024 20:00:56 +0200 Subject: [PATCH] add org code and modify output --- php/cl_contactform_output.php | 23 ++- php/form.org.php | 308 ++++++++++++++++++++++++++++++ php/murat_input.php | 37 ++++ php/murat_output.php | 344 ++++++++++++++++++++++++++++++++++ 4 files changed, 700 insertions(+), 12 deletions(-) create mode 100644 php/form.org.php create mode 100644 php/murat_input.php create mode 100644 php/murat_output.php diff --git a/php/cl_contactform_output.php b/php/cl_contactform_output.php index 1283fb2..77a3b5f 100644 --- a/php/cl_contactform_output.php +++ b/php/cl_contactform_output.php @@ -8,8 +8,6 @@ * modified and adapted to Contenido 4.8 under PHP 5.x by Murat Purc (2013-08-24) */ -use PHPMailer\PHPMailer\PHPMailer; - $sFrontEndPath = cRegistry::getClientConfig(cRegistry::getClientId())['path']['frontend'] . 'securimage' . DIRECTORY_SEPARATOR; $captchaInstalled = false; if (is_readable($sFrontEndPath)) { @@ -162,7 +160,7 @@ class w3form echo $item; } } - + echo ''; echo ''; } @@ -170,16 +168,16 @@ class w3form { $style = ''; $value = ''; - $parameter = "name=\"{$attribute['name']}\""; + $parameter = 'name="' . $attribute['name'] . '"'; if ($sent && !$this->formFieldCorrect($attribute)) - $style = "style=\"background-color:{$this->form['colorError']};\""; + $style = 'style="background-color: ' . $this->form['colorError'] . ';"'; switch ($attribute['type']) { case 'select': case 'password': case 'text': if (!empty($attribute['size'])) - $parameter .= " size=\"{$attribute['size']}\""; + $parameter .= ' size="' . $attribute['size'] . '"'; break; } @@ -187,7 +185,7 @@ class w3form case 'textarea': case 'text': if (!empty($attribute['size'])) - $parameter .= " size=\"{$attribute['size']}\""; + $parameter .= ' size="' . $attribute['size'] . '"'; if (!empty($attribute['value'])) $value = $attribute['value']; if (!empty($_POST["{$attribute['name']}"])) @@ -435,20 +433,21 @@ class w3form } -if (isset($edit) && $edit) { +if (cRegistry::isBackendEditMode()) { 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 "CMS_HTML[100]"; echo "

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

"; - echo "CMS_HTML[1]"; + echo "CMS_HTML[101]"; } else { $form = new w3form($captchaInstalled); $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->setForm("CMS_HTML[100]"); + $form->setAnswer("CMS_HTML[101]"); $form->process(); } + ?> \ No newline at end of file diff --git a/php/form.org.php b/php/form.org.php new file mode 100644 index 0000000..cd8edac --- /dev/null +++ b/php/form.org.php @@ -0,0 +1,308 @@ +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'; + echo ''; + $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 ''; + } + + // 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 ""; + break; + case 'password': + echo ""; + break; + case 'textarea': + echo ""; + break; + case 'select': + echo ""; + break; + case 'checkbox': + $formularbezeichner = preg_split('[\[|\]]',$attribute['name']); + if ($sent) { + if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[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 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 "

Formularkonfiguration

"; + echo "

Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:

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

Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:

"; + 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(); +} + +?> diff --git a/php/murat_input.php b/php/murat_input.php new file mode 100644 index 0000000..2faece5 --- /dev/null +++ b/php/murat_input.php @@ -0,0 +1,37 @@ +?> + + " . 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):") . " + + + +"; diff --git a/php/murat_output.php b/php/murat_output.php new file mode 100644 index 0000000..ae3b81d --- /dev/null +++ b/php/murat_output.php @@ -0,0 +1,344 @@ +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(); +} + +?>