Beschreibung:
Code: Alles auswählen
w3concepts.form.v1 erweitert um:
1. Validierungstyp "phone" - Nutzung durch Angabe von "valid:phone"
mögliche Formate sind z.B.:
0123 456789
012/3456789
0123-456789
+49 123 456789
+49 986 4578-95
2. Versand der Daten zusätzlich als vCard, aktivierbar über die Templatekonfiguration der Kategorie. Die Nutzung entspricht der "Syntax der Formularfeldplatzhalter" von http://w3concepts.net/1/1/51/130.html:
vcard:vcardfeld
Mögliche Felder sind: name, vorname, organisation, titel, telefon, fax, strasse, plz, ort und email. Bei Aktivierung des vCard-Versands werden alle weiteren Felder des Formulars in die Notiz der vCard eingefügt.
3. Umstellung des Mailversands auf die in Contenido integrierte Mail-Klasse (phpmailer) um den Versand von Anhängen einfach zu ermöglichen
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : w3concepts.form.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 20-08-2004
* Modified : 22-10-2004 by Ingo van Peeren (www.van-peeren.de)
************************************************/
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"><tr valign=\"top\">";
echo "<tr><td>Zieladresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[0]\" value=\"CMS_VALUE[0]\" size=\"30\" /></td></tr>";
echo "<tr><td>Betreff:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=\"30\" /></td></tr>";
echo "<tr><td>Antwortadresse (alias@mydomain.com):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\" size=\"30\" /></td></tr>";
echo "<tr><td>Emailname (z.B. Vorname Name):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[3]\" value=\"CMS_VALUE[3]\" size=\"30\" /></td></tr>";
echo "<tr><td>Hintergrundfarbe bei Fehlern (z.B. red):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\" size=\"30\" /></td></tr>";
echo "<tr><td>Versand als vCard (z.B. für Outlook lesbar):</td>";
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[5]\" value=\"1\" ";
if("CMS_VALUE[5]" == 1) echo "checked";
echo "/></td></tr>";
echo "</table>";
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : w3concepts.form.v1
* Author : Andreas Kummer
* Copyright : mumprecht & kummer w3concepts
* Created : 20-08-2004
* Modified : 22-10-2004 by Ingo van Peeren (www.van-peeren.de)
************************************************/
//Integration der phpmailer-Klasse
include ("../contenido/classes/class.phpmailer.php");
class w3form {
var $email, $aufgedroeselt, $form, $formularFeld;
function w3form() {
}
// Umgestellt auf phpmailer und evtl. Aufruf der vCard-Erstellung und Anhang
// PRIVATE
function sendEmail() {
$this->aufdroeseln($this->suppress('sent', 'sent', 'vcard'));
$this->generateEmailMessage();
if (!$_POST['vcard']) {
$mail = new phpmailer();
$mail->AddAddress($this->email['adresses']);
$mail->From = $this->email['from']['email'];
$mail->FromName = $this->email['from']['name'];
$mail->Subject = $this->email['subject'];
$mail->Body = $this->email['message'];
if(!$mail->Send()){
$notsend .= $lngNews["mailcouldnotbesend1"].$to.$lngNews["mailcouldnotbesend2"] . "<br>";
}
}
else {
$datei_content = $this->generateVcard();
$mail = new phpmailer();
$mail->AddAddress($this->email['adresses']);
$mail->From = $this->email['from']['email'];
$mail->FromName = $this->email['from']['name'];
$mail->Subject = $this->email['subject'];
$mail->Body = $this->email['message'];
$mail->AddStringAttachment($datei_content,"Kontakt.vcf","base64","text/x-vcard");
if(!$mail->Send()){
$notsend .= $lngNews["mailcouldnotbesend1"].$to.$lngNews["mailcouldnotbesend2"] . "<br>";
}
//echo $notsend;
}
}
// 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);
}
}
// Erstellt eine vCard
// PRIVATE
function generateVcard() {
if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
if ($key == $_POST['vcard']['name']) $vcard_name = $value;
elseif ($key == $_POST['vcard']['vorname']) $vcard_vorname = $value;
elseif ($key == $_POST['vcard']['organisation']) $vcard_organisation = $value;
elseif ($key == $_POST['vcard']['titel']) $vcard_titel = $value;
elseif ($key == $_POST['vcard']['telefon']) $vcard_telefon = $value;
elseif ($key == $_POST['vcard']['fax']) $vcard_fax = $value;
elseif ($key == $_POST['vcard']['strasse']) $vcard_strasse = $value;
elseif ($key == $_POST['vcard']['plz']) $vcard_plz = $value;
elseif ($key == $_POST['vcard']['ort']) $vcard_ort = $value;
elseif ($key == $_POST['vcard']['email']) $vcard_email = $value;
else $vcard_notizen .= $key . " " . $value . "=0D=0A";
}
$vcard = "BEGIN:VCARD
VERSION:2.1
N:";
if ($vcard_vorname) $vcard .= $name . ';' . $vcard_vorname . '
FN:' . $vcard_vorname . ' ' . $vcard_name . '
';
else $vcard .= $vcard_name . '
FN:' . $vcard_name . '
';
if ($vcard_organisation) $vcard .= 'ORG:' . $vcard_organisation . '
';
if ($vcard_notizen) {
$vcard_notizen = str_replace ("\r\n", "=0D=0A", $vcard_notizen);
$vcard_notizen = str_replace ("\n", "=0D=0A", $vcard_notizen);
}
if ($vcard_notizen) $vcard .= "NOTE;ENCODING=QUOTED-PRINTABLE:" . $vcard_notizen. "=0D=0A
";
if ($vcard_telefon) $vcard .= "TEL;WORK;VOICE:" . $vcard_telefon. "
";
if ($vcard_fax) $vcard .= "TEL;WORK;FAX:" . $vcard_fax. "
";
$vcard .= "ADR;HOME:;;". $vcard_strasse . ";" . $vcard_ort . ";;" . $vcard_plz . ";
";
if ($vcard_email) $vcard .= "EMAIL;PREF;INTERNET:". $vcard_email . "
";
$vcard .= "REV:" . date("Ymd") . "T" . date("H:i:s") ."Z
END:VCARD";
return $vcard;
}
// 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) {
if ($sent) echo "<p><strong>Eine oder mehrere Eingaben von Ihnen fehlen oder sind nicht korrekt. Bitte überprüfen Sie die rot hinterlegten Felder!</strong></p>";
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':
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 "\" style=\"white-space: pre;\" $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 class=check type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input class=check type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
}
} else {
if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
echo "<input class=check type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input class=check type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
}
}
break;
case 'radio':
if (!empty($_POST["{$attribute['name']}"])) {
if ($_POST["{$attribute['name']}"] == $attribute['value']) {
echo "<input class=radio type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input class=radio type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
}
} else {
if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
echo "<input class=radio type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
} else {
echo "<input class=radio type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
}
}
break;
}
// Einfügen von versteckten Inputfeldern zur Übergabe der vCard-Felder
$vc = "CMS_VALUE[5]";
if ($vc) {
switch ($attribute['vcard']) {
case 'name':
echo "<input type=\"hidden\" name=\"vcard[name]\" value=\"".$attribute['name']."\">";
break;
case 'vorname':
echo "<input type=\"hidden\" name=\"vcard[vorname]\" value=\"".$attribute['name']."\">";
break;
case 'organisation':
echo "<input type=\"hidden\" name=\"vcard[organisation]\" value=\"".$attribute['name']."\">";
break;
case 'titel':
echo "<input type=\"hidden\" name=\"vcard[titel]\" value=\"".$attribute['name']."\">";
break;
case 'telefon':
echo "<input type=\"hidden\" name=\"vcard[telefon]\" value=\"".$attribute['name']."\">";
break;
case 'fax':
echo "<input type=\"hidden\" name=\"vcard[fax]\" value=\"".$attribute['name']."\">";
break;
case 'strasse':
echo "<input type=\"hidden\" name=\"vcard[strasse]\" value=\"".$attribute['name']."\">";
break;
case 'plz':
echo "<input type=\"hidden\" name=\"vcard[plz]\" value=\"".$attribute['name']."\">";
break;
case 'ort':
echo "<input type=\"hidden\" name=\"vcard[ort]\" value=\"".$attribute['name']."\">";
break;
case 'email':
echo "<input type=\"hidden\" name=\"vcard[email]\" value=\"".$attribute['name']."\">";
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;
// Test auf Telefonnummern - Validierungstyp "phone"
if (!empty($feld['valid']) && $feld['valid'] == 'phone' && !eregi("^([+][ ]?[1-9][0-9][ ]?[-]?[ ]?|[(]?[0][ ]?)[0-9]{2,4}[-)/ ]?[ ]?[1-9][-0-9 ]{3,16}$",$_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();
}
?>