| 
<?php
/*============================================================================*/
 /* Copyright 2003 All Rights Reserved - Wolvesbane Designs                    */
 /*                                                                                                                                                            */
 /* Title:    MorphForm v1.0                                                   */
 /* Purpose:  This class provides flexible, generic form processing with       */
 /*           configurable output. It allows for form data to be emailed,      */
 /*           written out to a file, or displayed to a browser. It will also   */
 /*           accept combinations of the above, for example you could write    */
 /*           the data to a log file and send emails to the admin and the user */
 /*----------------------------------------------------------------------------*/
 /* Author:   Shawn Conlin                                                     */
 /* Company:  Wolvesbane Designs                                               */
 /* Web Site: http://www.wolvesbanedesigns.com                                 */
 /* Email:    [email protected]                                    */
 /*----------------------------------------------------------------------------*/
 /* Software License                                                           */
 /* This software is free to use and distribute provided all headers are left  */
 /* intact and unmodified. It is distributed AS IS and without warranty. If    */
 /* you wish to use this code as a base for a new class or you wish to write   */
 /* an extension to this class, please contact the author (he would like to    */
 /* see your ideas to improve the functionality).                                                               */
 /*============================================================================*/
 
 class MorphForm {
 /* Internal Variables */
 var $VarArr = array();
 var $ConfigFields = array();
 var $MissingValues = array();
 var $BadEmails = array();
 var $BadPhones = array();
 var $BadDigits = array();
 
 /* Internal Methods */
 Function GetPrefix($FieldName) {
 /* Captures the prefixes from field names */
 $Pos = strpos($FieldName, "_");
 If ($Pos === False) {
 Return ("");
 } else {
 Return(strtolower(substr($FieldName,0,$Pos)));
 }
 }
 
 function ValPhone($phone) {
 /* Validates Phone Numbers */
 if ($phone == "") {
 return(true);
 } else {
 $checkphone = preg_replace( '/[^0123456789]/' , '' , $phone );
 if ($checkphone == "" or strlen($checkphone) < 10) {
 return (false);
 } else {
 return(True);
 }
 }
 }
 
 function FormatPhone($phone) {
 /* Formats phone numbers as (123) 456-7890 */
 $checkphone = preg_replace( '/[^0123456789]/' , '' , $phone );
 return(ereg_replace("([0-9]{3})([0-9]{3})([0-9]{4})", "(\\1) \\2-\\3", $checkphone));
 }
 
 function IsEmail($value) {
 /* Verifies that email addresses are in the form [email protected] */
 $pattern = "/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/";
 if (preg_match($pattern, $value)) {
 return true;
 } else {
 return false;
 }
 }
 
 Function ProcessForm() {
 /* Processes field entries according to their prefixes and captures any   */
 /* data errors                                                            */
 Foreach($this->VarArr as $Key => $Item){
 $Prefix = $this->GetPrefix($Key);
 If ($Prefix != "" ) {
 If (strpos($Prefix, "r")!== False) {
 If ($Item == "") {
 $this->MissingValues[] = $Key;
 }
 }
 }
 If (strpos($Prefix, "e")!== False) {
 If ($this->IsEmail($Item)) {
 
 } else {
 $this->BadEmails[] = $Key;
 }
 }
 If (strpos($Prefix, "p")!== False) {
 If ($this->ValPhone($Item)){
 $this->VarArr[$Key] = $this->FormatPhone($Item);
 } else {
 $this->BadPhones[] = $Key;
 }
 }
 If (strpos($Prefix, "n")!== False) {
 If (Is_Numeric($Item)) {
 
 } else {
 $this->BadDigits[] = $Key;
 }
 }
 }
 }
 
 Function ReadConfigFile($FilePath) {
 /* Reads the specified configuration file into an array */
 If ($FilePath != "" and file_exists($FilePath)) {
 $FileArray = file($FilePath);
 return $FileArray;
 }
 }
 
 /* External Methods */
 Function OutputForm() {
 /* Outputs the form data as specified in the configuration fields and files */
 Foreach($this->ConfigFields as $Key => $Item) {
 $LineCnt = 0;
 $ConfigFile = $this->ReadConfigFile($Item);
 Foreach ($ConfigFile as $Line => $Text) {
 $LineCnt++;
 }
 
 For ($Cnt=0; $Cnt < $LineCnt; $Cnt++) {
 $ConfigFile[$Cnt] = trim($ConfigFile[$Cnt]);
 ForEach ($this->VarArr as $VKey => $Value) {
 $ConfigFile[$Cnt] = str_replace("[$VKey]", $Value, $ConfigFile[$Cnt]);
 }
 }
 
 if (strpos(strtolower($Key), "outfile") !== False) {
 $FName = $ConfigFile[0];
 If (file_exists($FName)) {
 $FP = fopen($FName, "a");
 if ($FP) {
 For ($Cnt=1; $Cnt < $LineCnt; $Cnt++) {
 fputs($FP, $ConfigFile[$Cnt]."\n");
 }
 fclose($FP);
 }
 }
 }
 
 if (strpos(strtolower($Key), "email") !== False) {
 $From = "From: " . $ConfigFile[0] ."\r\n";
 $To = $ConfigFile[1];
 $CC = "CC: " . $ConfigFile[2] ."\r\n";
 $BCC = "BCC: " . $ConfigFile[3] ."\r\n";
 $Subject = $ConfigFile[4];
 $Msg = "";
 
 For ($Cnt=5; $Cnt < $LineCnt; $Cnt++) {
 $Msg .= $ConfigFile[$Cnt]."\n";
 }
 
 $Headers = $From . $CC . $BCC;
 mail($To, $Subject, $Msg, $Headers);
 }
 
 if (strpos(strtolower($Key), "browser") !== False) {
 For ($Cnt=0; $Cnt < $LineCnt; $Cnt++) {
 Echo $ConfigFile[$Cnt]."\n";
 }
 }
 }
 }
 
 Function CheckForErrors() {
 /* Returns true if errors were found */
 If ($this->MissingValues or $this->BadEmails or $this->BadPhones or $this->BadDigits) {
 Return(True);
 } else {
 Return(False);
 }
 }
 
 Function ProcessErrors() {
 /* Displays all of the data errors that were found */
 $ErrMsg = "";
 if ($this->MissingValues) {
 $ErrMsg .= "The following required fields need to be completed:<br>\n";
 For ($Cnt=0; $Cnt <= Count($this->MissingValues); $Cnt++) {
 $ErrMsg .= $this->MissingValues[$Cnt] . "<br>\n";
 }
 $ErrMsg .= "<br>\n";
 }
 if ($this->BadEmails) {
 $ErrMsg .= "The following fields require valid email addresses:<br>\n";
 For ($Cnt=0; $Cnt <= Count($this->BadEmails); $Cnt++) {
 $ErrMsg .= $this->BadEmails[$Cnt] . "<br>\n";
 }
 $ErrMsg .= "<br>\n";
 }
 if ($this->BadPhones) {
 $ErrMsg .= "The following fields require valid phone numbers:<br>\n";
 For ($Cnt=0; $Cnt <= Count($this->BadPhones); $Cnt++) {
 $ErrMsg .= $this->BadPhones[$Cnt] . "<br>\n";
 }
 $ErrMsg .= "<br>\n";
 }
 if ($this->BadDigits) {
 $ErrMsg .= "The following fields may contain only numbers:<br>\n";
 For ($Cnt=0; $Cnt <= Count($this->BadDigits); $Cnt++) {
 $ErrMsg .= $this->BadDigits[$Cnt] . "<br>\n";
 }
 $ErrMsg .= "<br>\n";
 }
 
 Echo $ErrMsg;
 }
 
 Function MorphForm ($Arr) {
 /* Class Constructor */
 
 /* Separate Configuration Variables and Form Variables */
 Foreach($Arr as $Key => $Item) {
 $Prefix = strtolower(substr($Key,0,3));
 If ($Prefix == "mf_") {
 $this->ConfigFields[$Key] = $Item;
 } else {
 $this->VarArr[$Key] = $Item;
 }
 }
 
 /* Process the Form Variables */
 $this->ProcessForm();
 }
 }
 ?>
 
 
 |