1
0
Fork 0
feedizer-php/htdocs/libraries/formsgeneration/test_smarty3_form.php
2015-11-13 23:51:46 +01:00

521 lines
14 KiB
PHP
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
* test_smarty_form.php
*
* @(#) $Header: /opt2/ena/metal/forms/test_smarty3_form.php,v 1.3 2012/03/11 11:55:10 mlemos Exp $
*
*/
/*
* Include Smarty template engine class. Make sure the class file is in
* your include path.
*
*/
// ini_set('include_path', '.:/path/to/Smarty-3/libs');
require('Smarty.class.php');
/*
* Include Smarty template prefilter plugin function
*
*/
require("smarty/3/plugins/prefilter.form.php");
/*
* Include form class code.
*/
require("forms.php");
/*
* Create a form object.
*/
$form=new form_class;
/*
* Define the name of the form to be used for example in Javascript validation
* code generated by the class.
*/
$form->NAME="subscription_form";
/*
* Use the GET method if you want to see the submitted values in the form
* processing URL, or POST otherwise.
*/
$form->METHOD="GET";
/*
* Make the form be displayed and also processed by this script.
*/
$form->ACTION="";
/*
* Specify a debug output function you really want to output any programming errors.
*/
$form->debug="trigger_error";
/*
* Define a warning message to display by Javascript code when the user
* attempts to submit the this form again from the same page.
*/
$form->ResubmitConfirmMessage="Are you sure you want to submit this form again?";
/*
* Output previously set password values
*/
$form->OutputPasswordValues=1;
/*
* Output multiple select options values separated by line breaks
*/
$form->OptionsSeparator="<br>\n";
/*
* Output all validation errors at once.
*/
$form->ShowAllErrors=1;
/*
* CSS class to apply to all invalid inputs.
* Set to a non-empty string to specify the invalid input CSS class
*/
$form->InvalidCLASS='invalid';
/*
* Define the form field properties even if they may not be displayed.
*/
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"email",
"ID"=>"email",
"MAXLENGTH"=>100,
"Capitalization"=>"lowercase",
"ValidateAsEmail"=>1,
"ValidationErrorMessage"=>"It was not specified a valid e-mail address.",
"LABEL"=>"<u>E</u>-mail address",
"ACCESSKEY"=>"E"
));
$form->AddInput(array(
"TYPE"=>"select",
"NAME"=>"credit_card_type",
"ID"=>"credit_card_type",
"VALUE"=>"unknown",
"SIZE"=>2,
"OPTIONS"=>array(
"unknown"=>"Unknown",
"mastercard"=>"Master Card",
"visa"=>"Visa",
"amex"=>"American Express",
"dinersclub"=>"Diners Club",
"carteblanche"=>"Carte Blanche",
"discover"=>"Discover",
"enroute"=>"enRoute",
"jcb"=>"JCB"
),
"ValidationErrorMessage"=>"It was not specified a valid credit card type.",
"LABEL"=>"Credit card t<u>y</u>pe",
"ACCESSKEY"=>"y"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"credit_card_number",
"ID"=>"credit_card_number",
"SIZE"=>20,
"ValidateOptionalValue"=>"",
"ValidateAsCreditCard"=>"field",
"ValidationCreditCardTypeField"=>"credit_card_type",
"ValidationErrorMessage"=>"It wasn't specified a valid credit card number.",
"LABEL"=>"Credit card <u>n</u>umber",
"ACCESSKEY"=>"n"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"user_name",
"ID"=>"user_name",
"MAXLENGTH"=>60,
"ValidateAsNotEmpty"=>1,
"ValidationErrorMessage"=>"It was not specified a valid name.",
"LABEL"=>"<u>P</u>ersonal name",
"ACCESSKEY"=>"P"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"age",
"ID"=>"age",
"ValidateAsInteger"=>1,
"ValidationLowerLimit"=>18,
"ValidationUpperLimit"=>65,
"ValidationErrorMessage"=>"It was not specified a valid age.",
"LABEL"=>"<u>A</u>ge",
"ACCESSKEY"=>"A"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"weight",
"ID"=>"weight",
"ValidateAsFloat"=>1,
"ValidationLowerLimit"=>10,
"ValidationErrorMessage"=>"It was not specified a valid weight.",
"LABEL"=>"<u>W</u>eight",
"ACCESSKEY"=>"W"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"home_page",
"ID"=>"home_page",
"ReplacePatterns"=>array(
"^\\s+"=>"", /* trim whitespace at the beginning of the text value */
"\\s+\$"=>"", /* trim whitespace at the end of the text value */
"^([wW]{3}\\.)"=>"http://\\1", /* Assume that URLs starting with www. start with http://www. */
"^([^:]+)\$"=>"http://\\1", /* Assume that URLs that do not have a : in them are http:// */
"^(http|https)://(([-!#\$%&'*+.0-9=?A-Z^_`a-z{|}~]+\.)+[A-Za-z]{2,6}(:[0-9]+)?)\$"=>"\\1://\\2/" /* Assume at least / as URI . */
),
"ValidateRegularExpression"=>'^(http|https)\://(([-!#\$%&\'*+.0-9=?A-Z^_`a-z{|}~]+\.)+[A-Za-z]{2,6})(\:[0-9]+)?(/)?/',
"ValidationErrorMessage"=>"It was not specified a valid home page URL.",
"LABEL"=>"H<u>o</u>me page",
"ACCESSKEY"=>"o"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"alias",
"ID"=>"alias",
"MAXLENGTH"=>20,
"Capitalization"=>"uppercase",
"ValidateRegularExpression"=>"^[a-zA-Z0-9]+$",
"ValidateRegularExpressionErrorMessage"=>"The alias may only contain letters and digits.",
"ValidateAsNotEmpty"=>1,
"ValidateAsNotEmptyErrorMessage"=>"It was not specified the alias.",
"ValidateMinimumLength"=>5,
"ValidateMinimumLengthErrorMessage"=>"It was not specified an alias shorter than 5 characters.",
"LABEL"=>"Acce<u>s</u>s name",
"ACCESSKEY"=>"s"
));
$form->AddInput(array(
"TYPE"=>"password",
"NAME"=>"password",
"ID"=>"password",
"ONCHANGE"=>"if(value.toLowerCase) value=value.toLowerCase()",
"ValidateAsNotEmpty"=>1,
"ValidationErrorMessage"=>"It was not specified a valid password.",
"LABEL"=>"Passwor<u>d</u>",
"ACCESSKEY"=>"d",
"ReadOnlyMark"=>"********"
));
$form->AddInput(array(
"TYPE"=>"password",
"NAME"=>"confirm_password",
"ID"=>"confirm_password",
"ONCHANGE"=>"if(value.toLowerCase) value=value.toLowerCase()",
"ValidateAsEqualTo"=>"password",
"ValidationErrorMessage"=>"The password is not equal to the confirmation.",
"LABEL"=>"<u>C</u>onfirm password",
"ACCESSKEY"=>"C",
"ReadOnlyMark"=>"********"
));
$form->AddInput(array(
"TYPE"=>"text",
"NAME"=>"reminder",
"ID"=>"reminder",
"ValidateAsNotEmpty"=>1,
"ValidateAsNotEmptyErrorMessage"=>"It was not specified a reminder phrase.",
"ValidateAsDifferentFrom"=>"password",
"ValidateAsDifferentFromErrorMessage"=>"The reminder phrase may not be equal to the password.",
"LABEL"=>"Password <u>r</u>eminder",
"ACCESSKEY"=>"r"
));
$form->AddInput(array(
"TYPE"=>"select",
"MULTIPLE"=>1,
"NAME"=>"interests",
"ID"=>"interests",
"SELECTED"=>array(
"other"
),
"SIZE"=>4,
"OPTIONS"=>array(
"arts"=>"Arts",
"business"=>"Business",
"computers"=>"Computers",
"education"=>"Education",
"entertainment"=>"Entertainment",
"health"=>"Health",
"news"=>"News",
"politics"=>"Politics",
"sports"=>"Sports",
"science"=>"Science",
"other"=>"Other"
),
"ValidateAsSet"=>1,
"ValidationErrorMessage"=>"It were not specified any interests.",
"LABEL"=>"<u>I</u>nterests",
"ACCESSKEY"=>"I"
));
$form->AddInput(array(
"TYPE"=>"checkbox",
"NAME"=>"notification",
"ID"=>"email_notification",
"VALUE"=>"email",
"CHECKED"=>0,
"MULTIPLE"=>1,
"ValidateAsSet"=>1,
"ValidateAsSetErrorMessage"=>"It were not specified any types of notification.",
"LABEL"=>"E-<u>m</u>ail",
"ACCESSKEY"=>"m",
"ReadOnlyMark"=>"[X]"
));
$form->AddInput(array(
"TYPE"=>"checkbox",
"NAME"=>"notification",
"ID"=>"phone_notification",
"VALUE"=>"phone",
"CHECKED"=>0,
"MULTIPLE"=>1,
"LABEL"=>"P<u>h</u>one",
"ACCESSKEY"=>"h",
"ReadOnlyMark"=>"[X]"
));
$form->AddInput(array(
"TYPE"=>"radio",
"NAME"=>"subscription_type",
"VALUE"=>"administrator",
"ID"=>"administrator_subscription",
"ValidateAsSet"=>1,
"ValidateAsSetErrorMessage"=>"It was not specified the subscription type.",
"LABEL"=>"Adm<u>i</u>nistrator",
"ACCESSKEY"=>"i",
"ReadOnlyMark"=>"[X]"
));
$form->AddInput(array(
"TYPE"=>"radio",
"NAME"=>"subscription_type",
"VALUE"=>"user",
"ID"=>"user_subscription",
"LABEL"=>"<u>U</u>ser",
"ACCESSKEY"=>"U",
"ReadOnlyMark"=>"[X]"
));
$form->AddInput(array(
"TYPE"=>"radio",
"NAME"=>"subscription_type",
"VALUE"=>"guest",
"ID"=>"guest_subscription",
"LABEL"=>"<u>G</u>uest",
"ACCESSKEY"=>"G",
"ReadOnlyMark"=>"[X]"
));
$form->AddInput(array(
"TYPE"=>"button",
"NAME"=>"toggle",
"ID"=>"toggle",
"VALUE"=>"On",
"ONCLICK"=>"this.value=(this.value=='On' ? 'Off' : 'On'); alert('The button is '+this.value);",
"LABEL"=>"Toggle <u>b</u>utton",
"ACCESSKEY"=>"b"
));
$form->AddInput(array(
"TYPE"=>"checkbox",
"NAME"=>"agree",
"ID"=>"agree",
"VALUE"=>"Yes",
"ValidateAsSet"=>1,
"ValidateAsSetErrorMessage"=>"You have not agreed with the subscription terms.",
"LABEL"=>"Agree with the <u>t</u>erms",
"ACCESSKEY"=>"t"
));
$form->AddInput(array(
"TYPE"=>"submit",
"ID"=>"button_subscribe",
"VALUE"=>"Submit subscription",
"ACCESSKEY"=>"u"
));
$form->AddInput(array(
"TYPE"=>"image",
"ID"=>"image_subscribe",
"SRC"=>"http://files.phpclasses.org/graphics/add.gif",
"ALT"=>"Submit subscription",
"STYLE"=>"border-width: 0px;"
));
$form->AddInput(array(
"TYPE"=>"submit",
"ID"=>"button_subscribe_with_content",
"ACCESSKEY"=>"c",
"Content"=>"<img src=\"http://files.phpclasses.org/graphics/add.gif\" style=\"border-width: 0px;\" /> Submit button with <u>c</u>ontent",
));
/*
* Give a name to hidden input field so you can tell whether the form is to
* be outputted for the first or otherwise it was submitted by the user.
*/
$form->AddInput(array(
"TYPE"=>"hidden",
"NAME"=>"doit",
"VALUE"=>1
));
/*
* Hidden fields can be used to pass context values between form pages,
* like for instance database record identifiers or other information
* that may help your application form processing scripts determine
* the context of the information being submitted with this form.
*
* You are encouraged to use the DiscardInvalidValues argument to help
* preventing security exploits performed by attackers that may spoof
* invalid values that could be used for instance in SQL injection attacks.
*
* In this example, any value that is not an integer is discarded. If the
* value was meant to be used in a SQL query, with this attack prevention
* measure an attacker cannot submit SQL code that could be used to make
* your SQL query retrieve unauthorized information to abuse your system.
*/
$form->AddInput(array(
"TYPE"=>"hidden",
"NAME"=>"user_track",
"VALUE"=>"0",
"ValidateAsInteger"=>1,
"DiscardInvalidValues"=>1
));
/*
* Load form input values eventually from the submitted form.
*/
$form->LoadInputValues($form->WasSubmitted("doit"));
/*
* Empty the array that will list the values with invalid field after validation.
*/
$verify=array();
/*
* Check if the global array variable corresponding to hidden input field is
* defined, meaning that the form was submitted as opposed to being displayed
* for the first time.
*/
if($form->WasSubmitted("doit"))
{
/*
* Therefore we need to validate the submitted form values.
*/
if(($error_message=$form->Validate($verify))=="")
{
/*
* It's valid, set the $doit flag variable to 1 to tell the form is ready to
* processed.
*/
$doit=1;
}
else
{
/*
* It's invalid, set the $doit flag to 0 and encode the returned error message
* to escape any non-ASCII ISO-latin 1 characters and HTML special characters.
*/
$doit=0;
$error_message=HtmlEntities($error_message);
}
}
else
{
/*
* The form is being displayed for the first time, so it is not ready to be processed
* and there is no error message to display.
*/
$error_message="";
$doit=0;
}
if($doit)
{
/*
* The form is ready to be processed, just output it again as read only to
* display the submitted values. A real form processing script usually may
* do something else like storing the form values in a database.
*/
$form->ReadOnly=1;
}
/*
* Create the Smarty engine object to process the form template first
*
* NOTE: the form template needs to be processed separately from any other
* page templates to prevent that the form prefilter interferes with the
* normal processing of the other templates
*/
$smarty=new Smarty;
$smarty->addPluginsDir('smarty/3/plugins');
$smarty->compile_dir = 'smarty/3/templates_c';
$smarty->cache_dir = 'smarty/3/cache';
if($smarty->templateExists("form.tpl"))
{
$smarty->assign("form",$form);
$smarty->assign("title","Form class test");
$smarty->assign("error_message",$error_message);
$smarty->assignByRef("verify",$verify);
$smarty->assign("doit",$doit);
$smarty->assign("mark","[Verify]");
$smarty->assign("credit_card_field","credit_card_number");
$smarty->registerFilter('pre', 'smarty_prefilter_form');
$smarty->fetch("form.tpl");
$smarty->unregisterFilter('pre', 'smarty_prefilter_form');
}
else
{
$form->AddDataPart("<h2><center>Please copy the template file <tt>templates/form.tpl</tt> to your Smarty <tt>templates</tt> directory.</center></h2>\n");
$doit=1;
}
/*
* If the form was not submitted or was not valid, make the page ONLOAD
* event give the focus to the first form field or the first invalid field.
*/
if(!$doit)
{
if(strlen($error_message))
{
/*
* If there is at least one field with invalid values, get the name of the
* first field in error to make it get the input focus when the page is
* loaded.
*/
Reset($verify);
$focus=Key($verify);
}
else
{
/*
* Make the email field get the input focus when the page is loaded
* if there was no previous validation error.
*/
$focus='email';
}
/*
* Connect the form to the field to get the input focus when the page
* loads.
*/
$form->ConnectFormToInput($focus, 'ONLOAD', 'Focus', array());
}
/*
* Output the form within a page using a Smarty page template
*/
if($smarty->templateExists("mypage.tpl"))
{
$onload=HtmlSpecialChars($form->PageLoad());
$smarty->assign("form", $form->FetchOutput());
$smarty->assign("title", "Test for Manuel Lemos' PHP form class");
$smarty->assign("onload", $onload);
$smarty->assign('styles', '.invalid { border-color: #ff0000; background-color: #ffcccc; }');
$smarty->display("mypage.tpl");
}
else
echo "<html>\n<head>\n<title>Missing template file</title>\n</head>\n<body><h1><center>Please copy the template file <tt>templates/mypage.tpl</tt> to your Smarty <tt>templates</tt> directory.</center></h1>\n</body>\n</html>\n";
?>