<?php /* * test_ajax_form.php * * @(#) $Header: /home/mlemos/cvsroot/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>
|