<?php 
/* 
 * test_ajax_form.php 
 * 
 * @(#) $Header: /opt2/ena/metal/forms/test_ajax_form.php,v 1.7 2007/02/19 23:44:20 mlemos Exp $ 
 * 
 */ 
 
/* 
 * Include form class code. 
 */ 
    require("forms.php"); 
    require("form_ajax_submit.php"); 
 
/* 
 * Create a form object. 
 */ 
    $form=new form_class; 
    $form->NAME="subscription_form"; 
    $form->METHOD="POST"; 
    $form->ACTION=""; 
    $form->debug="error_log"; 
    $form->AddInput(array( 
        "TYPE"=>"text", 
        "NAME"=>"description", 
        "ID"=>"description", 
        "LABEL"=>"<u>D</u>escription", 
        "ACCESSKEY"=>"D", 
        "ValidateAsNotEmpty"=>1, 
        "ValidationErrorMessage"=>"It was not specified a valid description." 
    )); 
    $form->AddInput(array( 
        "TYPE"=>"file", 
        "NAME"=>"file", 
        "ID"=>"file", 
        "LABEL"=>"<u>F</u>ile", 
        "ACCESSKEY"=>"F", 
        "ValidateAsNotEmpty"=>1, 
        "ValidationErrorMessage"=>"It was not specified a valid file." 
    )); 
    $form->AddInput(array( 
        "TYPE"=>"submit", 
        "NAME"=>"doit", 
        "ID"=>"doit", 
        "VALUE"=>"Submit" 
    )); 
    $form->AddInput(array( 
        "TYPE"=>"custom", 
        "NAME"=>"sender", 
        "ID"=>"sender", 
        "CustomClass"=>"form_ajax_submit_class", 
        "FeedbackElement"=>"feedback", 
        "SubmitFeedback"=> 
            '<img src="indicator.gif" width="16" height="16" /> Submitting form ...', 
        "TimeoutFeedback"=>'The communication with the server has timed out.', 
        "Timeout"=>60, 
        "ONTIMEOUT"=>"", 
        "DebugConsole"=>"debug_console" 
    )); 
 
    /* 
     *  Connect the doit submit button to the sender AJAX submit input 
     */ 
    $form->Connect("doit", "sender", "ONCLICK", "Submit", array()); 
 
    /* 
     *  Handle client side events on the server side. 
     *  Do not output anything before these lines. 
     */ 
    $form->HandleEvent($processed); 
    if($processed) 
        exit; 
 
    /* 
     *  Did the AJAX submit post any notification message to the application? 
     */ 
    if($form->GetNextMessage($message)) 
    { 
 
        /* 
         *  Process and reply to notification messages 
         */ 
        do 
        { 
            switch($message["Event"]) 
            { 
                case "submit": 
 
                    $message["Actions"]=array(); 
                     
                    /* 
                     * Client side form submission request 
                     */ 
                    $form->LoadInputValues(); 
                    $error_message=$form->Validate($verify); 
 
/* 
                    $form->GetFileValues("file", $values); 
                    $form->SetInputProperty("sender", "Feedback", serialize($values)); 
                    sleep(3); 
*/ 
                    /* 
                     *  Are there any form validation errors? 
                     */ 
                    if(strlen($error_message)) 
                    { 
 
                        /* 
                         * Tell the form submitter input to send to the browser 
                         * an order to display validation error feedback message. 
                         */ 
                        $title = "Validation error"; 
                        $output = HtmlSpecialChars($error_message); 
                        $active = 0; 
                        $icon = ''; 
                        ob_start(); 
                        require('templates/message.html.php'); 
                        $content = ob_get_contents(); 
                        ob_end_clean(); 
                        $form->SetInputProperty("sender", "Feedback", $content); 
                    } 
                    else 
                    { 
 
                        /* 
                         *  The form was processed without errors. 
                         *  Lets execute the form processing actions 
                         *  and show some progress feedback. 
                         */ 
                        $active = 1; 
                        $title = "Status"; 
                        $output = '<center>Operation in progress: '. 
                            '<tt><span id="progress">0</span>%</tt></center>'; 
                        $icon = ' '; 
                        ob_start(); 
                        require('templates/message.html.php'); 
                        $content = ob_get_contents(); 
                        ob_end_clean(); 
 
                        /* 
                         *  Send an action order to replace the form contents 
                         *  by a progress feedback window. 
                         */ 
                        $form->SetInputProperty("sender", "FeedbackElement", 
                            "wholeform"); 
                        $form->SetInputProperty("sender", "Feedback", $content); 
                        $form->SetInputProperty("sender", "FeedbackElement", 
                            "progress"); 
                        for($progress = 1 ; $progress<=100; $progress++) 
                        { 
 
                            /* 
                             * Pretend to execute an operation that takes time to complete. 
                             * Here you would actually execute a a step of your 
                             * lengthy processing action. 
                             */ 
                            usleep(50000); 
 
                            /* 
                             *  Update the progress display. 
                             */ 
                            $form->SetInputProperty("sender", "Feedback", 
                                sprintf("%0d",$progress)); 
                        } 
                        /* 
                         * A little delay before the final message. 
                         */ 
                        sleep(1); 
                        $output = '<center><b>Operation completed!</b><br />'. 
                            'Going to redirect to the initial page in a few moments'. 
                            '...</center>'; 
                        ob_start(); 
                        require('templates/message.html.php'); 
                        $content = ob_get_contents(); 
                        ob_end_clean(); 
 
                        /* 
                         * Display the final message and wait a few more seconds 
                         */ 
                        $form->SetInputProperty("sender", "FeedbackElement", "wholeform"); 
                        $form->SetInputProperty("sender", "Feedback", $content); 
                        sleep(3); 
                         
                        /* 
                         * Redirect to the form start script page 
                         */ 
                        $redirect="/test_ajax_form.php"; 
 
                        /* 
                         * This is just for testing purposes 
                         */ 
                        if(defined('AJAX_REDIRECT_URI')) 
                            $redirect=AJAX_REDIRECT_URI; 
 
                        $message["Actions"][]=array( 
                            "Action"=>"Redirect", 
                            "URL"=>"http://".GetEnv("HTTP_HOST"). 
                                dirname(GetEnv("REQUEST_URI")).$redirect 
                        ); 
                    } 
                    break; 
            } 
 
            /* 
             * Reply to the form submit event to tell which actions the 
             * AJAX submit input should execute on the browser side. 
             */ 
            if(strlen($form->ReplyMessage($message, $processed))) 
                exit; 
        } 
        /* 
         * Loop until there are no more event messages 
         * or the processing was finished 
         */ 
        while(!$processed 
        && $form->GetNextMessage($message)); 
        if($processed) 
            exit; 
    } 
 
/* 
 * Normal non-AJAX form processing 
 */ 
 
/* 
 * Load form input values eventually from the submitted form. 
 */ 
    $form->LoadInputValues($form->WasSubmitted("doit")); 
 
    $verify=array(); 
 
    if($form->WasSubmitted("doit")) 
    { 
 
        if(($error_message=$form->Validate($verify))=="") 
        { 
 
            /* 
             *  Process the form if it was submitted without validation errors. 
             */ 
            $doit=1; 
 
        } 
        else 
        { 
            $doit=0; 
            $error_message=HtmlEntities($error_message); 
        } 
    } 
    else 
    { 
        $error_message=""; 
        $doit=0; 
    } 
  if($doit) 
  { 
      $form->ReadOnly=1; 
  } 
 
    $form->StartLayoutCapture(); 
    $title="Form class AJAX submit test"; 
    $body_template="form_ajax_body.html.php"; 
    require("templates/form_frame.html.php"); 
     $form->EndLayoutCapture(); 
     $form->AddInputPart('sender'); 
 
    if(!$doit) 
    { 
        if(strlen($error_message)) 
        { 
            Reset($verify); 
            $focus=Key($verify); 
        } 
        else 
            $focus='description'; 
        $form->ConnectFormToInput($focus, 'ONLOAD', 'Focus', array()); 
    } 
 
    $onload=HtmlSpecialChars($form->PageLoad()); 
 
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>Test for Manuel Lemos' PHP form class 
using the AJAX form submit plug-in</title> 
</head> 
<body onload="<?php    echo $onload; ?>" bgcolor="#cccccc"> 
<center><h1>Test for Manuel Lemos' PHP form class 
using the AJAX form submit plug-in</h1></center> 
<hr /> 
<?php 
    $form->DisplayOutput(); 
?> 
<div id="debug_console"></div> 
<hr /> 
</body> 
</html> 
 
 |