| 
<?php
 /*
 * CONTACT FORM EXAMPLE FOR PTCFORMS.PHP CLASS WITH EVENT HANDLERS
 * THIS EXAMPLES REQUIRES THE PTCEVENT COMPONENT
 * REMOVE COMMENT FROM LINE 144 FOR UI-PLUGINS
 */
 
 ### PARAMETERS FOR THE EXAMPLE ##################
 $email_address = '[email protected]';
 $mail_subject = 'TEST CONTACT FORM';
 #########################################
 
 require_once( '../PtcForm.php' );
 require_once( '../PtcEvent.php' );
 
 /* EXTENDING THE CLASS TO HANDLE EVENTS */
 class contactForm extends PtcForm
 {
 /* OVERRIDING DEFAULT OPTIONS PROPERTY */
 protected $_options = array
 (
 'add_class_validator'    =>    true ,
 'form_width'        =>    '400px' ,
 'labels_align'        =>    'right' ,
 'spacer_height'        =>    '10px'
 );
 
 /* USING THE BOOT METHOD TO ADD EVENT LISTENERS TO THE CLASS */
 public function boot( )
 {
 $this->observe( );  // we need to initialize the event listners
 }
 
 /* METHOD THAT WILL BUILD THE FIELDS , WILL BE CALLED BY CONSTRUCTOR */
 public function formFields( )
 {
 /* ADDING A TEXT FIELD */
 $this->addElement( array
 (
 'name'    =>        'ct_firstname',
 'label'        =>        'Firstname:*',
 'validate'    =>        'required'
 ) );
 
 /* ADDING A TEXT FIELD */
 $this->addElement( array
 (
 'name'    =>        'ct_lastname',
 'label'        =>        'Lastname:*',
 'validate'    =>        'required'
 ) );
 
 /* ADDING A TEXT FIELD */
 $this->addElement( array
 (
 'name'    =>        'ct_email',
 'label'        =>        'Your email:*',
 'validate'    =>        array( 'required' , 'email' )
 ) );
 
 /* ADDING A TEXT FIELD */
 $this->addElement( array
 (
 'name'    =>        'ct_phone',
 'label'        =>        'Your phone:*',
 'validate'    =>        'required'
 ) );
 
 /* ADDING A SELECT FIELD */
 $this->addElement( array
 (
 'type'        =>    'select' ,
 'name'    =>    'ct_reason' ,
 'label'        =>    'Contact reason:*' ,
 'values'    =>    array
 (
 ''             => 'Choose' ,
 'enquiry'         => 'Enquiry' ,
 'information'     => 'Information' ,
 'billing'         => 'Billing' ,
 'other'         => 'Other'
 ) ,
 'validate'    =>    'required'
 ) );
 
 /* ADDING A TEXTAREA FIELD */
 $this->addElement( array
 (
 'type'        =>        'textarea' ,
 'name'        =>        'ct_message' ,
 'label'        =>        'Write message:*' ,
 'attributes'    =>        array( 'rows' => 7 ) ,
 'validate'        =>        'required'
 ) );
 
 /* ADDING A SUBMIT BUTTON */
 $this->addElement( array
 (
 'type'        =>    'submit' ,
 'name'        =>    'ct_contact_me' ,
 'value'        =>    'Submit' ,
 'parentEl'        =>    array( 'style' => 'text-align:right;' )
 ) );
 }
 
 /* OBSERVER EVENTS, STATIC METHODS ARE USED, COULD BE IN A SEPARATE CLASS FILE */
 public static function submit( $fieldName , $obj ) // form submit event, run validator here
 {
 $obj->validate( );
 }
 public static function error( $result , $errMsg , $obj ) // form is not valid, add an error msg
 {
 $errMsg = '<div class="errMsg" style="text-align:center;width:' . $obj->getOption( 'form_width' ) .
 '">Something went wrong. Please review the form!</div><br>';
 }
 public static function valid( $result , $msg , $obj ) // form is valid, let's redirect the user to the login area
 {
 global $email_address , $mail_subject;
 $mail_body = "Firstname: " . $_POST[ 'ct_firstname' ] . "\n";
 $mail_body .= "Lastname: " . $_POST[ 'ct_lastname' ] . "\n";
 $mail_body .= "Email: " . $_POST[ 'ct_email' ] . "\n";
 $mail_body .= "Phone: " . $_POST[ 'ct_phone' ] . "\n";
 $mail_body .= "Reason: " . $_POST[ 'ct_reason' ] . "\n";
 $mail_body .= "Message: " . $_POST[ 'ct_message' ] . "\n";
 mail( $email_address , $mail_subject , $mail_body );
 $msg = '<div class="errMsg" style="text-align:center;width:' . $obj->getOption( 'form_width' ) .
 '">Form has been sent!</div><br>';
 }
 public static function rendering( $container , $obj ) // before render event
 {
 // do something before the html is printed
 $title = '<div style="text-align:center;width:' . $obj->getOption( 'form_width' ) .
 '"><h1>Contact Form</h1></div>';
 $container = $title . $container;
 }
 }
 
 $form = new ContactForm( );
 
 echo '<!DOCTYPE html><html><head>';
 
 /* (OPTIONAL) INCLUDE JS FOR JQUERY VALIDATOR AND UI STYLES  PLUGINS */
 //require_once("ptcforms-ui-plugins.php");
 
 /* MINIMAL CSS FOR THE EXAMPLE */
 echo '<style>
 body{font:normal .85em "trebuchet ms",arial,sans-serif;color:#555;}
 input[type=text], select, textarea{width:220px;}
 .errMsg{color:red;}
 </style>';
 echo'</head><body>';
 
 /* FINALLY RENDER THE FORM */
 $form->render( );
 
 echo '</body></html>';
 
 |