4844 lines
No EOL
161 KiB
PHP
4844 lines
No EOL
161 KiB
PHP
<?php
|
||
if(!defined("PHP_LIBRARY_FORMS"))
|
||
{
|
||
define("PHP_LIBRARY_FORMS",1);
|
||
|
||
/*
|
||
* forms.php
|
||
*
|
||
* @(#) $Header: /opt2/ena/metal/forms/forms.php,v 1.346 2014/08/11 03:47:04 mlemos Exp $
|
||
*
|
||
* This LICENSE is in the BSD license style.
|
||
*
|
||
*
|
||
* Copyright (c) 1999-2008, Manuel Lemos
|
||
* All rights reserved.
|
||
*
|
||
* Redistribution and use in source and binary forms, with or without
|
||
* modification, are permitted provided that the following conditions
|
||
* are met:
|
||
*
|
||
* Redistributions of source code must retain the above copyright
|
||
* notice, this list of conditions and the following disclaimer.
|
||
*
|
||
* Redistributions in binary form must reproduce the above copyright
|
||
* notice, this list of conditions and the following disclaimer in the
|
||
* documentation and/or other materials provided with the distribution.
|
||
*
|
||
* Neither the name of Manuel Lemos nor the names of his contributors
|
||
* may be used to endorse or promote products derived from this software
|
||
* without specific prior written permission.
|
||
*
|
||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
*
|
||
*/
|
||
|
||
Function FormAppendOutput($output)
|
||
{
|
||
global $form_output;
|
||
|
||
$form_output.=$output;
|
||
}
|
||
|
||
Function FormDisplayOutput($output)
|
||
{
|
||
echo $output;
|
||
}
|
||
|
||
class form_custom_class
|
||
{
|
||
var $input;
|
||
var $custom_class='';
|
||
var $valid_marks=array();
|
||
var $format="";
|
||
var $focus_input="";
|
||
var $mark_start="{";
|
||
var $mark_end="}";
|
||
var $client_validate=0;
|
||
var $server_validate=1;
|
||
var $use_focus_input_label = 1;
|
||
|
||
var $format_data;
|
||
var $format_marks;
|
||
var $children=array();
|
||
var $connections=array();
|
||
var $events=array();
|
||
|
||
Function GenerateInputID(&$form, $input, $kind)
|
||
{
|
||
return("p_".$input."_".$kind);
|
||
}
|
||
|
||
Function ParseFormat($format, $valid_marks, &$data, &$marks)
|
||
{
|
||
$mark_start_length=strlen($this->mark_start);
|
||
$mark_end_length=strlen($this->mark_end);
|
||
for($last_data=0, $data=$marks=array(), $length=strlen($format), $position=0; $position<$length;)
|
||
{
|
||
if(GetType($next=strpos($format,$this->mark_start,$position))=="integer")
|
||
{
|
||
$block=substr($format,$position,$next-$position);
|
||
if($last_data)
|
||
$data[count($data)-1].=$block;
|
||
else
|
||
$data[]=$block;
|
||
if(GetType($following=strpos($format,$this->mark_end,$next+$mark_start_length))=="integer")
|
||
{
|
||
$mark=substr($format,$next+$mark_start_length,$following-$next-$mark_start_length);
|
||
if(IsSet($valid_marks["input"][$mark]))
|
||
{
|
||
$marks[]=array(1, $valid_marks["input"][$mark]);
|
||
$last_data=0;
|
||
}
|
||
elseif(IsSet($valid_marks["dynamicinput"][$mark]))
|
||
{
|
||
$marks[]=array(2, $valid_marks["dynamicinput"][$mark]);
|
||
$last_data=0;
|
||
}
|
||
elseif(IsSet($valid_marks["data"][$mark]))
|
||
{
|
||
$data[count($data)-1].=$valid_marks["data"][$mark];
|
||
$last_data=1;
|
||
}
|
||
elseif(IsSet($valid_marks["dynamicdata"][$mark]))
|
||
{
|
||
$marks[]=array(3, $valid_marks["dynamicdata"][$mark]);
|
||
$last_data=0;
|
||
}
|
||
elseif(IsSet($valid_marks["label"][$mark]))
|
||
{
|
||
$marks[]=array(4, $valid_marks["label"][$mark]);
|
||
$last_data=0;
|
||
}
|
||
elseif(IsSet($valid_marks["dynamiclabel"][$mark]))
|
||
{
|
||
$marks[]=array(5, $valid_marks["dynamiclabel"][$mark]);
|
||
$last_data=0;
|
||
}
|
||
elseif(IsSet($valid_marks["template"][$mark]))
|
||
{
|
||
$marks[]=array(6, $valid_marks["template"][$mark]);
|
||
$last_data=0;
|
||
}
|
||
else
|
||
return("it was specified an invalid format mark (".$mark.") at position ".$next);
|
||
$position=$following+$mark_end_length;
|
||
}
|
||
else
|
||
return("it was specified an unfinished format mark at position ".$next);
|
||
}
|
||
else
|
||
{
|
||
$block=substr($format,$position);
|
||
if($last_data)
|
||
$data[count($data)-1].=$block;
|
||
else
|
||
$data[]=$block;
|
||
break;
|
||
}
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function ParseInputFormat()
|
||
{
|
||
if(!IsSet($this->format_data)
|
||
&& strlen($error=$this->ParseFormat($this->format, $this->valid_marks, $this->format_data, $this->format_marks)))
|
||
{
|
||
UnSet($this->format_data);
|
||
return($error);
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function ParseNewInputFormat()
|
||
{
|
||
UnSet($this->format_data);
|
||
UnSet($this->format_marks);
|
||
if(strlen($error=$this->ParseInputFormat()))
|
||
{
|
||
UnSet($this->format_data);
|
||
UnSet($this->format_marks);
|
||
}
|
||
return($error);
|
||
}
|
||
|
||
/*
|
||
* $f - form
|
||
* $d - data
|
||
* $m - marks
|
||
* $h - hidden
|
||
* $r - read only
|
||
* $y - dynamic
|
||
*
|
||
*/
|
||
|
||
Function AddFormattedDynamicPart(&$f, $d, $m, $h, $r, $y)
|
||
{
|
||
$c=count($d);
|
||
$k=count($m);
|
||
for($p=0;$p<$c;$p++)
|
||
{
|
||
if((strlen($d[$p])
|
||
&& strlen($e=$f->AddDataPart($d[$p]))))
|
||
return($e);
|
||
if($p<$k)
|
||
{
|
||
$v=$m[$p][1];
|
||
switch($m[$p][0])
|
||
{
|
||
case 1:
|
||
$e=($h ? $f->AddInputHiddenPart($v) : ($r ? $f->AddInputReadOnlyPart($v) : $f->AddInputPart($v)));
|
||
break;
|
||
case 2:
|
||
$e=(IsSet($y[$v]) ? ($h ? $f->AddInputHiddenPart($y[$v]) : ($r ? $f->AddInputReadOnlyPart($y[$v]) : $f->AddInputPart($y[$v]))) : $v.' is not a valid dynamic parameter for an input');
|
||
break;
|
||
case 3:
|
||
$e=(IsSet($y[$v]) ? $f->AddDataPart($y[$v]) : $v.' is not a valid dynamic parameter for a form output data part');
|
||
break;
|
||
case 4:
|
||
$e=$f->AddLabelPart(array('FOR'=>$v));
|
||
break;
|
||
case 5:
|
||
$e=(IsSet($y[$v]) ? $f->AddLabelPart(array('FOR'=>$y[$v])) : $v.' is not a valid dynamic parameter for an input label');
|
||
break;
|
||
case 6:
|
||
if(strlen($e = $this->ParseFormat($v['format'], $v['marks'], $data, $marks)))
|
||
return($e);
|
||
if(strlen($e = $this->AddFormattedDynamicPart($f, $data, $marks, $h, $r, array())))
|
||
return($e);
|
||
break;
|
||
}
|
||
if(strlen($e))
|
||
return($e);
|
||
}
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function AddFormattedPart(&$form, $data, $marks, $hidden, $read_only = 0)
|
||
{
|
||
return($this->AddFormattedDynamicPart($form, $data, $marks, $hidden, $read_only, array()));
|
||
}
|
||
|
||
Function AddInput(&$form, $arguments)
|
||
{
|
||
return("form input custom class does not implement the AddInput function");
|
||
}
|
||
|
||
Function AddInputPart(&$form)
|
||
{
|
||
if(count($this->valid_marks)==0
|
||
|| strlen($this->format)==0)
|
||
return("form input custom class does not implement the AddInputPart function");
|
||
if(strlen($error=$this->ParseInputFormat()))
|
||
return($error);
|
||
return($this->AddFormattedPart($form, $this->format_data, $this->format_marks, 0));
|
||
}
|
||
|
||
Function AddInputHiddenPart(&$form)
|
||
{
|
||
if(count($this->valid_marks)==0
|
||
|| strlen($this->format)==0)
|
||
return("form input custom class does not implement the AddInputHiddenPart function");
|
||
if(strlen($error=$this->ParseInputFormat()))
|
||
return($error);
|
||
return($this->AddFormattedPart($form, $this->format_data, $this->format_marks, 1));
|
||
}
|
||
|
||
Function AddInputReadOnlyPart(&$form)
|
||
{
|
||
if(count($this->valid_marks)==0
|
||
|| strlen($this->format)==0)
|
||
return("form input custom class does not implement the AddInputReadOnlyPart function");
|
||
if(strlen($error=$this->ParseInputFormat()))
|
||
return($error);
|
||
return($this->AddFormattedPart($form, $this->format_data, $this->format_marks, 1));
|
||
}
|
||
|
||
Function AddLabelPart(&$form, $arguments)
|
||
{
|
||
if(strlen($this->focus_input)==0)
|
||
return("form input custom class does not implement the AddLabelPart function");
|
||
$for=$arguments["FOR"]=$this->focus_input;
|
||
if(!IsSet($arguments["LABEL"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["LABEL"]))
|
||
&& IsSet($form->inputs[$this->input]["LABEL"]))
|
||
$arguments["LABEL"]=$form->inputs[$this->input]["LABEL"];
|
||
if(!IsSet($arguments["ACCESSKEY"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["ACCESSKEY"]))
|
||
&& IsSet($form->inputs[$this->input]["ACCESSKEY"]))
|
||
$arguments["ACCESSKEY"]=$form->inputs[$this->input]["ACCESSKEY"];
|
||
if(!IsSet($arguments["STYLE"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["LabelSTYLE"]))
|
||
&& IsSet($form->inputs[$this->input]["LabelSTYLE"]))
|
||
$arguments["STYLE"]=$form->inputs[$this->input]["LabelSTYLE"];
|
||
if(!IsSet($arguments["CLASS"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["LabelCLASS"]))
|
||
&& IsSet($form->inputs[$this->input]["LabelCLASS"]))
|
||
$arguments["CLASS"]=$form->inputs[$this->input]["LabelCLASS"];
|
||
if(!IsSet($arguments["ID"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["LabelID"]))
|
||
&& IsSet($form->inputs[$this->input]["LabelID"]))
|
||
$arguments["ID"]=$form->inputs[$this->input]["LabelID"];
|
||
if(!IsSet($arguments["TITLE"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["LabelTITLE"]))
|
||
&& IsSet($form->inputs[$this->input]["LabelTITLE"]))
|
||
$arguments["TITLE"]=$form->inputs[$this->input]["LabelTITLE"];
|
||
if(!IsSet($arguments["ExtraAttributes"])
|
||
&& (!$this->use_focus_input_label
|
||
|| !IsSet($form->inputs[$for]["LabelExtraAttributes"]))
|
||
&& IsSet($form->inputs[$this->input]["LabelExtraAttributes"]))
|
||
$arguments["ExtraAttributes"]=$form->inputs[$this->input]["LabelExtraAttributes"];
|
||
return($form->AddLabelPart($arguments));
|
||
}
|
||
|
||
Function ValidateInput(&$form)
|
||
{
|
||
return("form input custom class does not implement the Validate function");
|
||
}
|
||
|
||
Function DefaultSetInputProperty(&$form, $property, $value)
|
||
{
|
||
switch($property)
|
||
{
|
||
case "Format":
|
||
$this->format=$value;
|
||
if(strlen($error=$this->ParseNewInputFormat()))
|
||
return($error);
|
||
for($mark=0; $mark<count($this->format_marks) && $this->format_marks[$mark][0]!=1; $mark++);
|
||
if($mark>=count($this->format_marks))
|
||
{
|
||
$this->focus_input="";
|
||
return("the input format does not specify any fixed inputs");
|
||
}
|
||
$this->focus_input=$this->format_marks[$mark][1];
|
||
break;
|
||
case "Accessible":
|
||
case "SubForm":
|
||
for($child=0;$child<count($this->children);$child++)
|
||
{
|
||
$error=$form->SetInputProperty($this->children[$child], $property, $value);
|
||
if(strlen($error))
|
||
return($error);
|
||
}
|
||
break;
|
||
default:
|
||
return($property." is not a changeable form ".$this->input." input property");
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function SetInputProperty(&$form, $property, $value)
|
||
{
|
||
return($this->DefaultSetInputProperty($form, $property, $value));
|
||
}
|
||
|
||
Function DefaultGetInputProperty(&$form, $property, &$value)
|
||
{
|
||
switch($property)
|
||
{
|
||
case "LABEL":
|
||
if(strlen($this->focus_input)
|
||
&& (strlen($error=$form->GetInputProperty($this->focus_input, "LABEL", $value))
|
||
|| IsSet($value)))
|
||
return($error);
|
||
if(IsSet($form->inputs[$this->input]["LABEL"]))
|
||
$value=$form->inputs[$this->input]["LABEL"];
|
||
else
|
||
Unset($value);
|
||
return('');
|
||
}
|
||
return("GetInputProperty is not implemented for form ".$this->input." input property ".$property);
|
||
}
|
||
|
||
Function GetInputProperty(&$form, $property, &$value)
|
||
{
|
||
return($this->DefaultGetInputProperty($form, $property, $value));
|
||
}
|
||
|
||
Function GetInputValue(&$form)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function GetCheckedState(&$form)
|
||
{
|
||
$form->OutputDebug("GetCheckedState is not implemented for form input ".$this->input);
|
||
return(0);
|
||
}
|
||
|
||
Function SetCheckedState(&$form, $checked)
|
||
{
|
||
return("SetCheckedState is not implemented for form input ".$this->input);
|
||
}
|
||
|
||
Function GetCheckable(&$form, &$checkable)
|
||
{
|
||
$checkable = 0;
|
||
return('');
|
||
}
|
||
|
||
Function AddFunction(&$form, $arguments)
|
||
{
|
||
if(strlen($this->focus_input)==0)
|
||
return("form input custom class does not implement the AddFunction function");
|
||
$arguments["Element"]=$this->focus_input;
|
||
return($form->AddFunction($arguments));
|
||
}
|
||
|
||
Function LoadInputValues(&$form, $submitted)
|
||
{
|
||
return('');
|
||
}
|
||
|
||
Function GetJavascriptValidations(&$form, $form_object, &$validations)
|
||
{
|
||
$validations=array();
|
||
return("");
|
||
}
|
||
|
||
Function GetJavascriptInputValue(&$form, $form_object)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function GetJavascriptSelectedOption(&$form, $form_object)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function GetJavascriptSetInputProperty(&$form, $form_object, $property, $value)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function GetJavascriptCheckedState(&$form, $form_object)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function GetJavascriptSetCheckedState(&$form, $form_object, $checked)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function AddChild(&$form, $name)
|
||
{
|
||
$this->children[]=$name;
|
||
return("");
|
||
}
|
||
|
||
Function DefaultHandleEvent(&$form, $event, $parameters, &$processed)
|
||
{
|
||
return("form input custom class is not ready to handle ".$event." events");
|
||
}
|
||
|
||
Function HandleEvent(&$form, $event, $parameters, &$processed)
|
||
{
|
||
return($this->DefaultHandleEvent($form,$event,$parameters,$processed));
|
||
}
|
||
|
||
Function GetEventActions(&$form, $form_object, $event)
|
||
{
|
||
if(IsSet($this->events[$event]))
|
||
{
|
||
$actions=trim($this->events[$event]);
|
||
if(($last=strlen($actions))
|
||
&& strcmp($actions[$last-1], ";"))
|
||
$actions.=";";
|
||
}
|
||
else
|
||
$actions="";
|
||
if(!IsSet($this->connections[$event]))
|
||
return($actions);
|
||
for($c=0; $c <count($this->connections[$event]); $c++)
|
||
{
|
||
$error=$form->GetJavascriptConnectionAction($form_object, $this->input, $this->connections[$event][$c]["To"], $event, $this->connections[$event][$c]["Action"], $this->connections[$event][$c]["Context"], $javascript);
|
||
if(strlen($error))
|
||
$form->OutputError($error, $this->input);
|
||
elseif(strlen($javascript))
|
||
{
|
||
if(strlen($actions))
|
||
$actions.="; ";
|
||
$actions.=$javascript;
|
||
}
|
||
}
|
||
return($actions);
|
||
}
|
||
|
||
Function DefaultConnect(&$form, $to, $event, $action, &$context)
|
||
{
|
||
if(!IsSet($form->inputs[$to]))
|
||
return("it was not specified a valid event connection destination input");
|
||
if(!IsSet($this->connections[$event]))
|
||
return("form input custom class does not implement the Connect function for event ".$event);
|
||
$this->connections[$event][]=array(
|
||
"To"=>$to,
|
||
"Action"=>$action,
|
||
"Context"=>$context
|
||
);
|
||
if(!IsSet($this->events[$event]))
|
||
$this->events[$event]="";
|
||
return("");
|
||
}
|
||
|
||
Function Connect(&$form, $to, $event, $action, &$context)
|
||
{
|
||
return($this->DefaultConnect($form, $to, $event, $action, $context));
|
||
}
|
||
|
||
Function DefaultGetJavascriptConnectionAction(&$form, $form_object, $from, $event, $action, &$context, &$javascript)
|
||
{
|
||
if(strlen($this->focus_input))
|
||
{
|
||
switch($action)
|
||
{
|
||
case 'Focus':
|
||
case 'Click':
|
||
case 'MarkValidated':
|
||
return($form->GetJavascriptConnectionAction($form_object, $from, $this->focus_input, $event, $action, $context, $javascript));
|
||
}
|
||
}
|
||
$javascript="";
|
||
return(strcmp($action, 'MarkValidated') ? 'form input custom class does not implement the GetJavascriptConnectionAction function for action '.$action : '');
|
||
}
|
||
|
||
Function GetJavascriptConnectionAction(&$form, $form_object, $from, $event, $action, &$context, &$javascript)
|
||
{
|
||
return($this->DefaultGetJavascriptConnectionAction($form, $form_object, $from, $event, $action, $context, $javascript));
|
||
}
|
||
|
||
Function SetSelectOptions(&$form, $options, $selected)
|
||
{
|
||
return("form input custom class does not implement the SetSelectOptions function");
|
||
}
|
||
|
||
Function ReplyMessage(&$form, $message, &$processed)
|
||
{
|
||
return("form input custom class does not implement the ReplyMessage function");
|
||
}
|
||
|
||
Function ClassPageHead(&$form)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function PageHead(&$form)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function PageLoad(&$form)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function PageUnload(&$form)
|
||
{
|
||
return("");
|
||
}
|
||
|
||
Function DefaultPostMessage(&$form, $message, &$processed)
|
||
{
|
||
return($form->ReplyMessage($message, $processed));
|
||
}
|
||
|
||
Function PostMessage(&$form, $message, &$processed)
|
||
{
|
||
return($this->DefaultPostMessage($form, $message, $processed));
|
||
}
|
||
|
||
Function WasSubmitted(&$form, $input='')
|
||
{
|
||
if(strlen($input))
|
||
$form->OutputError('form input custom class does not implement the WasSubmitted function', $this->input);
|
||
return('');
|
||
}
|
||
|
||
Function GetContainedInputs(&$form, $kind, &$contained)
|
||
{
|
||
$contained = $form->GetInputs($this->input);
|
||
$contained[] = $this->input;
|
||
return('');
|
||
}
|
||
};
|
||
|
||
class form_class
|
||
{
|
||
var $parts=array();
|
||
var $inputs=array();
|
||
var $types=array();
|
||
var $ID="";
|
||
var $NAME="";
|
||
var $METHOD="";
|
||
var $ACTION="";
|
||
var $TARGET="";
|
||
var $ONSUBMIT="";
|
||
var $ONSUBMITTING="";
|
||
var $ENCTYPE="";
|
||
var $ONRESET="";
|
||
var $ONERROR="";
|
||
var $ExtraAttributes=array();
|
||
var $encoding="iso-8859-1";
|
||
var $ValidationFunctionName="ValidateForm";
|
||
var $ValidationErrorFunctionName="ValidationError";
|
||
var $ValidateAsEmail="ValidateEmail";
|
||
var $ValidateAsCreditCard="ValidateCreditCard";
|
||
var $ValidateOnlyOnServerSide = false;
|
||
var $ReadOnly=0;
|
||
var $OutputPasswordValues=0;
|
||
var $Changes=array();
|
||
var $Invalid=array();
|
||
var $InvalidCLASS='';
|
||
var $InvalidSTYLE='';
|
||
var $OptionsSeparator="\n";
|
||
var $ShowAllErrors=0;
|
||
var $ShowAlertOnError=1;
|
||
var $ErrorMessagePrefix="";
|
||
var $ErrorMessageSuffix="";
|
||
var $DisableReadOnlyInputs=0;
|
||
var $sub_form_variable_name="sub_form";
|
||
var $email_regular_expression="^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,6}\$";
|
||
var $float_regular_expression="^-?[0-9]+(\\.[0-9]*)?([Ee][+-]?[0-9]+)?\$";
|
||
var $decimal_regular_expression="^-?[0-9]+(\\.[0-9]{0,PLACES})?\$";
|
||
var $client_validate=0;
|
||
var $server_validate=0;
|
||
var $accessibility_tab_index="";
|
||
var $debug="";
|
||
var $end_of_line="\n";
|
||
var $input_parts=array();
|
||
var $input_elements=array();
|
||
var $functions=array();
|
||
var $toupper_function="strtoupper";
|
||
var $tolower_function="strtolower";
|
||
var $form_submitted_variable_name="form_submitted";
|
||
var $form_submitted_test_variable_name="form_submitted_test";
|
||
var $event_parameter="___event";
|
||
var $input_parameter="___input";
|
||
var $ResubmitConfirmMessage="";
|
||
var $allow_used_access_keys=1;
|
||
var $label_access_keys=array();
|
||
var $reserved_access_keys=array();
|
||
var $hidden_parts=0;
|
||
var $accessible_parts=0;
|
||
var $file_parts=0;
|
||
var $error="";
|
||
var $capturing=0;
|
||
var $checkbox_inputs;
|
||
var $radio_inputs;
|
||
var $current_parent="";
|
||
var $messages = array();
|
||
var $connections=array();
|
||
var $flagged_inputs=array();
|
||
var $was_processed = 0;
|
||
var $register_globals;
|
||
var $register_long_arrays;
|
||
var $php_version;
|
||
var $default_encoding;
|
||
|
||
Function DetectPHPVersion()
|
||
{
|
||
if(IsSet($this->php_version))
|
||
{
|
||
$version = explode('.', php_version());
|
||
$this->php_version = intval($version[0] * 10000 + $version[1] * 100 + $version[2]);
|
||
}
|
||
return $this->php_version;
|
||
}
|
||
|
||
Function DetectRegisterVariables()
|
||
{
|
||
if(!function_exists('ini_get'))
|
||
$this->register_globals = $this->register_long_arrays = 1;
|
||
else
|
||
{
|
||
$this->register_globals = intval(ini_get('register_globals'));
|
||
$this->register_long_arrays = ($this->DetectPHPVersion() < 50000 ? 1 : intval(ini_get('register_long_arrays')));
|
||
}
|
||
}
|
||
|
||
Function EncodeJavascriptString($s)
|
||
{
|
||
$l=strlen($s=strval($s));
|
||
if($l==0)
|
||
return("''");
|
||
$n=!strcmp(strtolower($this->encoding),"iso-8859-1");
|
||
$e=array(
|
||
"\n"=>"\\n",
|
||
"\r"=>"\\r",
|
||
"\t"=>"\\t"
|
||
);
|
||
for($d=0, $j="", $c=0; $c<$l; $c++)
|
||
{
|
||
$t = $s[$c];
|
||
$a = Ord($t);
|
||
if($a<32
|
||
|| $t=='<'
|
||
|| ($a>126
|
||
&& $n))
|
||
{
|
||
if(IsSet($e[$t]))
|
||
{
|
||
if($c==0
|
||
|| $d)
|
||
{
|
||
if($c!=0)
|
||
$j.='+';
|
||
$j.="'".$e[$t];
|
||
$d=0;
|
||
}
|
||
else
|
||
$j.=$e[$t];
|
||
}
|
||
else
|
||
{
|
||
if($c!=0)
|
||
{
|
||
if(!$d)
|
||
$j.="'";
|
||
$j.="+";
|
||
}
|
||
$j.="unescape('";
|
||
for(;$c<$l; $c++)
|
||
{
|
||
$t = $s[$c];
|
||
$a = Ord($t);
|
||
if($a<32
|
||
|| $t=='<'
|
||
|| $t=='%'
|
||
|| ($a>126
|
||
&& $n))
|
||
{
|
||
if(IsSet($e[$t]))
|
||
$j.=$e[$t];
|
||
else
|
||
$j.="%".DecHex($a);
|
||
}
|
||
else
|
||
{
|
||
if($t=="'"
|
||
|| $t=="\\")
|
||
$j.="\\";
|
||
$j.=$t;
|
||
}
|
||
}
|
||
$j.="')";
|
||
$d=1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if($d)
|
||
$j.="+'";
|
||
else
|
||
{
|
||
if($c==0)
|
||
$j.="'";
|
||
}
|
||
if($t=="'"
|
||
|| $t=="\\")
|
||
$j.="\\";
|
||
$j.=$t;
|
||
$d=0;
|
||
}
|
||
}
|
||
if(!$d)
|
||
$j.="'";
|
||
return($j);
|
||
}
|
||
|
||
Function EncodeHTMLString($string)
|
||
{
|
||
$version = $this->DetectPHPVersion();
|
||
if($version < 50400)
|
||
return(strtolower($this->encoding) == 'iso-8859-1' ? HtmlEntities($string) : HtmlSpecialChars($string));
|
||
if(!IsSet($this->default_encoding))
|
||
$this->default_encoding = ($version < 50600 ? 'utf-8' : strtolower(ini_get('default_charset')));
|
||
return(strtolower($this->encoding) == $this->default_encoding ? HtmlEntities($string, ENT_COMPAT | ENT_HTML401, $this->encoding) : HtmlSpecialChars($string, ENT_COMPAT | ENT_HTML401, $this->encoding));
|
||
}
|
||
|
||
Function EscapeJavascriptRegularExpressions($expression)
|
||
{
|
||
return($this->EncodeJavascriptString($expression));
|
||
}
|
||
|
||
Function OutputDebug($message)
|
||
{
|
||
if(strlen($function=$this->debug))
|
||
$function($message);
|
||
}
|
||
|
||
Function OutputError($error,$scope="")
|
||
{
|
||
$this->error=(strcmp($scope,"") ? $scope.": ".$error : $error);
|
||
if(strcmp($function=$this->debug,"")
|
||
&& strcmp($this->error,""))
|
||
$this->OutputDebug($this->error);
|
||
return($this->error);
|
||
}
|
||
|
||
Function SetSelectedOptions($name, &$input, &$options, &$value)
|
||
{
|
||
if(!IsSet($options)
|
||
|| strcmp(GetType($options),"array")
|
||
|| count($options)==0)
|
||
return($this->OutputError("it was not defined a valid options array",$name));
|
||
if(IsSet($input["MULTIPLE"]))
|
||
{
|
||
$selected=array();
|
||
if(strcmp(GetType($value),"array"))
|
||
return($this->OutputError("it was not defined a valid selected options array",$name));
|
||
for($option=0;$option<count($value);$option++)
|
||
{
|
||
$option_value=$value[$option];
|
||
if(!IsSet($options[$option_value]))
|
||
return($this->OutputError("it specified a selected value that is not a valid option",$name));
|
||
if(IsSet($selected[$option_value]))
|
||
return($this->OutputError("it specified a repeated selected option value",$name));
|
||
$selected[$option_value]=1;
|
||
}
|
||
$input["SELECTED"]=$selected;
|
||
}
|
||
else
|
||
{
|
||
if(!IsSet($value)
|
||
|| (strcmp(GetType($value),"string")
|
||
&& strcmp(GetType($value),"integer")
|
||
&& strcmp(GetType($value),"double"))
|
||
|| !IsSet($options[strval($value)]))
|
||
return($this->OutputError("it was not defined a valid input value",$name));
|
||
$input["VALUE"]=strval($value);
|
||
}
|
||
$input["OPTIONS"]=$options;
|
||
return("");
|
||
}
|
||
|
||
Function AddInput($arguments)
|
||
{
|
||
if(strcmp(GetType($arguments),"array"))
|
||
return($this->OutputError("it was not specified a valid arguments array","AddInput"));
|
||
$input=array();
|
||
$name="";
|
||
if(IsSet($arguments["NAME"])
|
||
&& strcmp($arguments["NAME"],""))
|
||
$name=$input["NAME"]=$arguments["NAME"];
|
||
if(IsSet($arguments["ID"])
|
||
&& strcmp($arguments["ID"],""))
|
||
$name=$input["ID"]=$arguments["ID"];
|
||
if(!strcmp($name,""))
|
||
return($this->OutputError("it was not specified a valid input name","AddInput"));
|
||
if(IsSet($this->inputs[$name]))
|
||
return($this->OutputError("it was specified the name of an already defined input",$name));
|
||
if(!IsSet($arguments["TYPE"]))
|
||
return($this->OutputError("it was not defined the type of form input element",$name));
|
||
$needs_client_error_message=$needs_server_error_message=0;
|
||
if(IsSet($arguments["ValidateAsEmail"]))
|
||
{
|
||
if(IsSet($arguments["ValidateAsEmailErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsEmailErrorMessage"],""))
|
||
$input["ValidateAsEmailErrorMessage"]=$arguments["ValidateAsEmailErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=$input["ValidateAsEmail"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsCreditCard"]))
|
||
{
|
||
switch($arguments["ValidateAsCreditCard"])
|
||
{
|
||
case "field":
|
||
$field=(IsSet($arguments["ValidationCreditCardTypeField"]) ? $arguments["ValidationCreditCardTypeField"] : "");
|
||
$field_type=(IsSet($this->inputs[$field]) ? $this->inputs[$field]["TYPE"] : "");
|
||
switch($field_type)
|
||
{
|
||
case "text":
|
||
case "select":
|
||
break;
|
||
case "radio":
|
||
case "password":
|
||
case "submit":
|
||
case "image":
|
||
case "reset":
|
||
case "button":
|
||
case "textarea":
|
||
case "checkbox":
|
||
case "hidden":
|
||
default:
|
||
return($this->OutputError("it was not specified valid validation credit card type field",$name));
|
||
}
|
||
$input["ValidationCreditCardTypeField"]=$arguments["ValidationCreditCardTypeField"];
|
||
case "mastercard":
|
||
case "visa":
|
||
case "amex":
|
||
case "dinersclub":
|
||
case "carteblanche":
|
||
case "discover":
|
||
case "enroute":
|
||
case "jcb":
|
||
case "unknown":
|
||
$input["ValidateAsCreditCard"]=$arguments["ValidateAsCreditCard"];
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not specified valid credit card type",$name));
|
||
}
|
||
if(IsSet($arguments["ValidateAsCreditCardErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsCreditCardErrorMessage"],""))
|
||
$input["ValidateAsCreditCardErrorMessage"]=$arguments["ValidateAsCreditCardErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateRegularExpression"]))
|
||
{
|
||
if(GetType($arguments["ValidateRegularExpression"])=="array")
|
||
{
|
||
$regular_expression=$arguments["ValidateRegularExpression"];
|
||
if(IsSet($arguments["ValidateRegularExpressionErrorMessage"]))
|
||
{
|
||
if(count($arguments["ValidateRegularExpressionErrorMessage"])!=count($arguments["ValidateRegularExpression"]))
|
||
return($this->OutputError("it was a matching number of regular expression validation error messages",$name));
|
||
$input["ValidateRegularExpressionErrorMessage"]=$arguments["ValidateRegularExpressionErrorMessage"];
|
||
}
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$regular_expression=array(strval($arguments["ValidateRegularExpression"]));
|
||
if(IsSet($arguments["ValidateRegularExpressionErrorMessage"])
|
||
&& strcmp($arguments["ValidateRegularExpressionErrorMessage"],""))
|
||
$input["ValidateRegularExpressionErrorMessage"]=array($arguments["ValidateRegularExpressionErrorMessage"]);
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
}
|
||
$input["ValidateRegularExpression"]=$regular_expression;
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsNotRegularExpression"]))
|
||
{
|
||
if(GetType($arguments["ValidateAsNotRegularExpression"])=="array")
|
||
{
|
||
$regular_expression=$arguments["ValidateAsNotRegularExpression"];
|
||
if(IsSet($arguments["ValidateAsNotRegularExpressionErrorMessage"]))
|
||
{
|
||
if(count($arguments["ValidateAsNotRegularExpressionErrorMessage"])!=count($arguments["ValidateAsNotRegularExpression"]))
|
||
return($this->OutputError("it was a matching number of regular expression validation error messages",$name));
|
||
$input["ValidateAsNotRegularExpressionErrorMessage"]=$arguments["ValidateAsNotRegularExpressionErrorMessage"];
|
||
}
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$regular_expression=array(strval($arguments["ValidateAsNotRegularExpression"]));
|
||
if(IsSet($arguments["ValidateAsNotRegularExpressionErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsNotRegularExpressionErrorMessage"],""))
|
||
$input["ValidateAsNotRegularExpressionErrorMessage"]=array($arguments["ValidateAsNotRegularExpressionErrorMessage"]);
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
}
|
||
$input["ValidateAsNotRegularExpression"]=$regular_expression;
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsNotEmpty"]))
|
||
{
|
||
if(IsSet($arguments["ValidateAsNotEmptyErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsNotEmptyErrorMessage"],""))
|
||
$input["ValidateAsNotEmptyErrorMessage"]=$arguments["ValidateAsNotEmptyErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=$input["ValidateAsNotEmpty"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateMinimumLength"]))
|
||
{
|
||
$minimum_length=intval($arguments["ValidateMinimumLength"]);
|
||
if(strcmp(strval($minimum_length),$arguments["ValidateMinimumLength"])
|
||
|| $minimum_length<=0)
|
||
return($this->OutputError("it was not specified a valid minimum field length to validate",$name));
|
||
$input["ValidateMinimumLength"]=$minimum_length;
|
||
if(IsSet($arguments["ValidateMinimumLengthErrorMessage"])
|
||
&& strcmp($arguments["ValidateMinimumLengthErrorMessage"],""))
|
||
$input["ValidateMinimumLengthErrorMessage"]=$arguments["ValidateMinimumLengthErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsEqualTo"]))
|
||
{
|
||
if(!strcmp($arguments["ValidateAsEqualTo"],""))
|
||
return($this->OutputError("it was not specified a valid comparision field",$name));
|
||
$input["ValidateAsEqualTo"]=$arguments["ValidateAsEqualTo"];
|
||
if(IsSet($arguments["ValidateAsEqualToErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsEqualToErrorMessage"],""))
|
||
$input["ValidateAsEqualToErrorMessage"]=$arguments["ValidateAsEqualToErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsDifferentFrom"]))
|
||
{
|
||
if(!strcmp($arguments["ValidateAsDifferentFrom"],""))
|
||
return($this->OutputError("it was not specified a valid comparision field",$name));
|
||
$input["ValidateAsDifferentFrom"]=$arguments["ValidateAsDifferentFrom"];
|
||
if(IsSet($arguments["ValidateAsDifferentFromErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsDifferentFromErrorMessage"],""))
|
||
$input["ValidateAsDifferentFromErrorMessage"]=$arguments["ValidateAsDifferentFromErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsDifferentFromText"]))
|
||
{
|
||
$input["ValidateAsDifferentFromText"]=$arguments["ValidateAsDifferentFromText"];
|
||
if(IsSet($arguments["ValidateAsDifferentFromTextErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsDifferentFromTextErrorMessage"],""))
|
||
$input["ValidateAsDifferentFromTextErrorMessage"]=$arguments["ValidateAsDifferentFromTextErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsSet"]))
|
||
{
|
||
switch($arguments["TYPE"])
|
||
{
|
||
case "radio":
|
||
case "checkbox":
|
||
case "custom":
|
||
break;
|
||
case "select":
|
||
if(IsSet($arguments["MULTIPLE"]))
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not specified a valid field for as set validation",$name));
|
||
}
|
||
$input["ValidateAsSet"]=$arguments["ValidateAsSet"];
|
||
if(IsSet($arguments["ValidateAsSetErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsSetErrorMessage"],""))
|
||
$input["ValidateAsSetErrorMessage"]=$arguments["ValidateAsSetErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsInteger"]))
|
||
{
|
||
if(IsSet($arguments["ValidationLowerLimit"]))
|
||
{
|
||
if(strcmp(GetType($limit=$arguments["ValidationLowerLimit"]),"integer"))
|
||
return($this->OutputError("it was not specified a valid lower limit value",$name));
|
||
$input["ValidationLowerLimit"]=$limit;
|
||
}
|
||
if(IsSet($arguments["ValidationUpperLimit"]))
|
||
{
|
||
if(strcmp(GetType($limit=$arguments["ValidationUpperLimit"]),"integer")
|
||
|| $limit<$input["ValidationLowerLimit"])
|
||
return($this->OutputError("it was not specified a valid upper limit value",$name));
|
||
$input["ValidationUpperLimit"]=$limit;
|
||
}
|
||
if(IsSet($arguments["ValidateAsIntegerErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsIntegerErrorMessage"],""))
|
||
$input["ValidateAsIntegerErrorMessage"]=$arguments["ValidateAsIntegerErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=$input["ValidateAsInteger"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidateAsFloat"]))
|
||
{
|
||
if(IsSet($arguments["ValidationLowerLimit"]))
|
||
{
|
||
$limit_type=GetType($limit=$arguments["ValidationLowerLimit"]);
|
||
if(strcmp($limit_type,"double")
|
||
&& strcmp($limit_type,"integer"))
|
||
return($this->OutputError("it was not specified a valid lower limit value",$name));
|
||
$input["ValidationLowerLimit"]=$limit;
|
||
}
|
||
if(IsSet($arguments["ValidationUpperLimit"]))
|
||
{
|
||
$limit_type=GetType($limit=$arguments["ValidationUpperLimit"]);
|
||
if((strcmp($limit_type,"double")
|
||
&& strcmp($limit_type,"integer"))
|
||
|| $limit<$input["ValidationLowerLimit"])
|
||
return($this->OutputError("it was not specified a valid upper limit value",$name));
|
||
$input["ValidationUpperLimit"]=$limit;
|
||
}
|
||
if(IsSet($arguments["ValidationDecimalPlaces"]))
|
||
{
|
||
if((strcmp(GetType($places=$arguments["ValidationDecimalPlaces"]),"integer")))
|
||
return($this->OutputError("it was not specified a valid number of decimal places",$name));
|
||
$input["ValidationDecimalPlaces"]=$places;
|
||
}
|
||
if(IsSet($arguments["ValidateAsFloatErrorMessage"])
|
||
&& strcmp($arguments["ValidateAsFloatErrorMessage"],""))
|
||
$input["ValidateAsFloatErrorMessage"]=$arguments["ValidateAsFloatErrorMessage"];
|
||
else
|
||
{
|
||
$needs_client_error_message++;
|
||
$needs_server_error_message++;
|
||
}
|
||
$input["ServerValidate"]=$input["ClientValidate"]=$input["ValidateAsFloat"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidationClientFunction"]))
|
||
{
|
||
if(!strcmp($arguments["ValidationClientFunction"],""))
|
||
return($this->OutputError("it was not specified a valid client validatation function",$name));
|
||
$input["ValidationClientFunction"]=$arguments["ValidationClientFunction"];
|
||
if(IsSet($arguments["ValidationClientFunctionErrorMessage"])
|
||
&& strcmp($arguments["ValidationClientFunctionErrorMessage"],""))
|
||
$input["ValidationClientFunctionErrorMessage"]=$arguments["ValidationClientFunctionErrorMessage"];
|
||
else
|
||
$needs_client_error_message++;
|
||
$input["ClientValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["ValidationServerFunction"]))
|
||
{
|
||
if(function_exists('is_callable'))
|
||
$valid = is_callable($arguments["ValidationServerFunction"]);
|
||
else
|
||
$valid = strcmp($arguments["ValidationServerFunction"], "");
|
||
if(!$valid)
|
||
return($this->OutputError("it was not specified a valid server validation function",$name));
|
||
$input["ValidationServerFunction"]=$arguments["ValidationServerFunction"];
|
||
if(IsSet($arguments["ValidationServerFunctionErrorMessage"])
|
||
&& strcmp($arguments["ValidationServerFunctionErrorMessage"],""))
|
||
$input["ValidationServerFunctionErrorMessage"]=$arguments["ValidationServerFunctionErrorMessage"];
|
||
else
|
||
$needs_server_error_message++;
|
||
$input["ServerValidate"]=1;
|
||
}
|
||
if(IsSet($arguments["DependentValidation"]))
|
||
{
|
||
$dependent = $arguments["DependentValidation"];
|
||
if(!IsSet($this->inputs[$dependent]))
|
||
return($this->OutputError("it was specified dependent validation input ".$dependent." that is not defined",$name));
|
||
switch($this->inputs[$dependent]["TYPE"])
|
||
{
|
||
case "checkbox":
|
||
case "radio":
|
||
case "custom":
|
||
$input["DependentValidation"] = $dependent;
|
||
break;
|
||
default:
|
||
return($this->OutputError("it is not possible to perform validation dependent on an input of type ".$this->inputs[$dependent]["TYPE"], $name));
|
||
}
|
||
}
|
||
if(IsSet($arguments["DiscardInvalidValues"]))
|
||
$input["DiscardInvalidValues"]=!!$arguments["DiscardInvalidValues"];
|
||
if(IsSet($arguments["ValidationErrorMessage"])
|
||
&& strcmp($arguments["ValidationErrorMessage"],""))
|
||
$input["ValidationErrorMessage"]=$arguments["ValidationErrorMessage"];
|
||
else
|
||
{
|
||
if((!IsSet($input["DiscardInvalidValues"])
|
||
|| !$input["DiscardInvalidValues"])
|
||
&& ($needs_client_error_message>0
|
||
|| $needs_server_error_message>0))
|
||
return($this->OutputError("it was not specified a valid validate error message",$name));
|
||
}
|
||
$validate_only_on_client_side=(IsSet($arguments["ValidateOnlyOnClientSide"]) && $arguments["ValidateOnlyOnClientSide"]);
|
||
$validate_only_on_server_side=(IsSet($arguments["ValidateOnlyOnServerSide"]) && $arguments["ValidateOnlyOnServerSide"]);
|
||
if($validate_only_on_client_side
|
||
&& $validate_only_on_server_side)
|
||
return($this->OutputError("it was specified to validate the input field value either only on client side and only on server side",$name));
|
||
$validate_value = 1;
|
||
switch(($input["TYPE"]=$arguments["TYPE"]))
|
||
{
|
||
case "file":
|
||
if(IsSet($arguments["ACCEPT"]))
|
||
$input["ACCEPT"]=$arguments["ACCEPT"];
|
||
case "text":
|
||
if(IsSet($arguments["MAXLENGTH"]))
|
||
$input["MAXLENGTH"]=intval($arguments["MAXLENGTH"]);
|
||
if(IsSet($arguments["SIZE"]))
|
||
$input["SIZE"]=intval($arguments["SIZE"]);
|
||
break;
|
||
case "password":
|
||
if(IsSet($arguments["MAXLENGTH"]))
|
||
$input["MAXLENGTH"]=intval($arguments["MAXLENGTH"]);
|
||
if(IsSet($arguments["SIZE"]))
|
||
$input["SIZE"]=intval($arguments["SIZE"]);
|
||
if(IsSet($arguments["Encoding"]))
|
||
{
|
||
if(!strcmp($input["Encoding"]=$arguments["Encoding"],""))
|
||
return($this->OutputError("it was not defined a valid password encoding function",$name));
|
||
if(IsSet($arguments["EncodedField"]))
|
||
{
|
||
if(!strcmp($input["EncodedField"]=$arguments["EncodedField"],""))
|
||
return($this->OutputError("it was not defined a valid password encoded field",$name));
|
||
}
|
||
if(IsSet($arguments["EncodingFunctionVerification"]))
|
||
{
|
||
if(!strcmp($input["EncodingFunctionVerification"]=$arguments["EncodingFunctionVerification"],""))
|
||
return($this->OutputError("it was not defined a valid password encoding function verification",$name));
|
||
}
|
||
else
|
||
$input["EncodingFunctionVerification"]=$arguments["Encoding"];
|
||
if(IsSet($arguments["EncodingFunctionScriptFile"]))
|
||
{
|
||
if(!strcmp($input["EncodingFunctionScriptFile"]=$arguments["EncodingFunctionScriptFile"],""))
|
||
return($this->OutputError("it was not defined a valid password encoding function script file",$name));
|
||
}
|
||
}
|
||
break;
|
||
case "checkbox":
|
||
if(IsSet($arguments["MULTIPLE"])
|
||
&& $arguments["MULTIPLE"])
|
||
$input["MULTIPLE"]=1;
|
||
case "radio":
|
||
if(IsSet($arguments["CHECKED"])
|
||
&& $arguments["CHECKED"])
|
||
$input["CHECKED"]=1;
|
||
break;
|
||
case "image":
|
||
if(!IsSet($arguments["SRC"]))
|
||
return($this->OutputError("it was not defined a valid image button source",$name));
|
||
$input["SRC"]=$arguments["SRC"];
|
||
if(IsSet($arguments["ALT"]))
|
||
$input["ALT"]=$arguments["ALT"];
|
||
if(IsSet($arguments["ALIGN"]))
|
||
$input["ALIGN"]=$arguments["ALIGN"];
|
||
break;
|
||
case "submit":
|
||
case "reset":
|
||
case "button":
|
||
if(IsSet($arguments["Content"]))
|
||
$input["Content"]=$arguments["Content"];
|
||
break;
|
||
case "hidden":
|
||
break;
|
||
case "textarea":
|
||
if(IsSet($arguments["ROWS"]))
|
||
{
|
||
$value=$arguments["ROWS"];
|
||
if(strcmp(GetType($value),"integer")
|
||
|| $value<=0)
|
||
return($this->OutputError("it was not defined a valid number of ROWS",$name));
|
||
$input["ROWS"]=$value;
|
||
}
|
||
if(IsSet($arguments["COLS"]))
|
||
{
|
||
$value=$arguments["COLS"];
|
||
if(strcmp(GetType($value),"integer")
|
||
|| $value<=0)
|
||
return($this->OutputError("it was not defined a valid number of COLS",$name));
|
||
$input["COLS"]=$value;
|
||
}
|
||
break;
|
||
case "select":
|
||
if(IsSet($arguments["MULTIPLE"])
|
||
&& $arguments["MULTIPLE"])
|
||
{
|
||
$input["MULTIPLE"]=1;
|
||
$error=$this->SetSelectedOptions($name, $input, $arguments["OPTIONS"], $arguments["SELECTED"]);
|
||
}
|
||
else
|
||
$error=$this->SetSelectedOptions($name, $input, $arguments["OPTIONS"], $arguments["VALUE"]);
|
||
if(strlen($error))
|
||
return($error);
|
||
if(IsSet($arguments["SIZE"]))
|
||
$input["SIZE"]=intval($arguments["SIZE"]);
|
||
$validate_value = 0;
|
||
break;
|
||
case "custom":
|
||
if(!IsSet($arguments["CustomClass"]))
|
||
return($this->OutputError("it was not defined the custom input class",$name));
|
||
if(function_exists("class_exists")
|
||
&& !class_exists($arguments["CustomClass"]))
|
||
return($this->OutputError("it was specified an inexisting the custom input class ".$arguments["CustomClass"],$name));
|
||
$validate_value = 0;
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not defined a supported input element",$name));
|
||
}
|
||
if(IsSet($arguments['VALUE'])
|
||
&& $validate_value)
|
||
{
|
||
switch($type = GetType($arguments['VALUE']))
|
||
{
|
||
case 'string':
|
||
$input["VALUE"]=$arguments["VALUE"];
|
||
break;
|
||
case 'integer':
|
||
case 'double':
|
||
case 'boolean':
|
||
$input["VALUE"]=strval($arguments["VALUE"]);
|
||
break;
|
||
default:
|
||
return($this->OutputError('it was specified an input value of an invalid type ('.$type.')',$name));
|
||
}
|
||
}
|
||
if(IsSet($arguments["ReadOnlyMark"]))
|
||
$input["ReadOnlyMark"]=$arguments["ReadOnlyMark"];
|
||
if(IsSet($arguments["ReadOnlyMarkUnchecked"]))
|
||
$input["ReadOnlyMarkUnchecked"]=$arguments["ReadOnlyMarkUnchecked"];
|
||
if(IsSet($arguments["TITLE"]))
|
||
$input["TITLE"]=$arguments["TITLE"];
|
||
if(IsSet($arguments["TABINDEX"]))
|
||
$input["TABINDEX"]=intval($arguments["TABINDEX"]);
|
||
if(IsSet($arguments["STYLE"]))
|
||
$input["STYLE"]=$arguments["STYLE"];
|
||
if(IsSet($arguments["InvalidSTYLE"]))
|
||
$input["InvalidSTYLE"]=$arguments["InvalidSTYLE"];
|
||
if(IsSet($arguments["InvalidCLASS"]))
|
||
$input["InvalidCLASS"]=$arguments["InvalidCLASS"];
|
||
if(IsSet($arguments["CLASS"]))
|
||
$input["CLASS"]=$arguments["CLASS"];
|
||
if(IsSet($arguments["ApplicationData"]))
|
||
$input["ApplicationData"]=$arguments["ApplicationData"];
|
||
if(IsSet($arguments['IgnoreAnonymousSubmitCheck'])
|
||
&& $arguments['IgnoreAnonymousSubmitCheck'])
|
||
$input['IgnoreAnonymousSubmitCheck']=1;
|
||
if(IsSet($arguments['DisableResubmitCheck'])
|
||
&& $arguments['DisableResubmitCheck'])
|
||
$input['DisableResubmitCheck']=1;
|
||
|
||
$events=array(
|
||
"ONBLUR",
|
||
"ONCHANGE",
|
||
"ONCLICK",
|
||
"ONDBLCLICK",
|
||
"ONFOCUS",
|
||
"ONKEYDOWN",
|
||
"ONKEYPRESS",
|
||
"ONKEYUP",
|
||
"ONMOUSEDOWN",
|
||
"ONMOUSEMOVE",
|
||
"ONMOUSEOUT",
|
||
"ONMOUSEOVER",
|
||
"ONMOUSEUP",
|
||
"ONSELECT"
|
||
);
|
||
for($e=0; $e<count($events); $e++)
|
||
{
|
||
$n=$events[$e];
|
||
if(IsSet($arguments[$n]))
|
||
$input["EVENTS"][$n]=$arguments[$n];
|
||
}
|
||
|
||
if(IsSet($arguments["ReplacePatterns"]))
|
||
{
|
||
if(GetType($arguments["ReplacePatterns"])!="array")
|
||
return($this->OutputError("it was not specified valid ReplacePatterns array argument",$name));
|
||
$input["ReplacePatterns"]=$arguments["ReplacePatterns"];
|
||
if(IsSet($arguments["ReplacePatternsOnlyOnServerSide"])
|
||
&& $arguments["ReplacePatternsOnlyOnServerSide"])
|
||
$input["ReplacePatternsOnlyOnServerSide"]=$arguments["ReplacePatternsOnlyOnServerSide"];
|
||
elseif(IsSet($arguments["ReplacePatternsOnlyOnClientSide"])
|
||
&& $arguments["ReplacePatternsOnlyOnClientSide"])
|
||
$input["ReplacePatternsOnlyOnClientSide"]=$arguments["ReplacePatternsOnlyOnClientSide"];
|
||
}
|
||
if(IsSet($arguments["Capitalization"]))
|
||
{
|
||
switch($arguments["Capitalization"])
|
||
{
|
||
case "uppercase":
|
||
case "lowercase":
|
||
case "words":
|
||
$input["Capitalization"]=$arguments["Capitalization"];
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not defined valid capitalization method attribute",$name));
|
||
}
|
||
}
|
||
if(IsSet($arguments["LABEL"]))
|
||
{
|
||
if(strlen($arguments["LABEL"])==0)
|
||
return($this->OutputError("it was not defined valid input LABEL",$name));
|
||
$input["LABEL"]=$arguments["LABEL"];
|
||
}
|
||
if(IsSet($arguments["ACCESSKEY"]))
|
||
{
|
||
if(strlen($arguments["ACCESSKEY"])==0)
|
||
return($this->OutputError("it was not defined valid input ACCESSKEY",$name));
|
||
$input["ACCESSKEY"]=$arguments["ACCESSKEY"];
|
||
}
|
||
if(IsSet($arguments["PLACEHOLDER"]))
|
||
{
|
||
if(strlen($arguments["PLACEHOLDER"])==0)
|
||
return($this->OutputError("it was not defined valid input PLACEHOLDER",$name));
|
||
$input["PLACEHOLDER"]=$arguments["PLACEHOLDER"];
|
||
}
|
||
if(IsSet($arguments["LabelID"]))
|
||
{
|
||
if(strlen($arguments["LabelID"])==0)
|
||
return($this->OutputError("it was not defined valid input LabelID",$name));
|
||
$input["LabelID"]=$arguments["LabelID"];
|
||
}
|
||
if(IsSet($arguments["LabelTITLE"]))
|
||
{
|
||
if(strlen($arguments["LabelTITLE"])==0)
|
||
return($this->OutputError("it was not defined valid input LabelTITLE",$name));
|
||
$input["LabelTITLE"]=$arguments["LabelTITLE"];
|
||
}
|
||
if(IsSet($arguments["LabelCLASS"]))
|
||
{
|
||
if(strlen($arguments["LabelCLASS"])==0)
|
||
return($this->OutputError("it was not defined valid input LabelCLASS",$name));
|
||
$input["LabelCLASS"]=$arguments["LabelCLASS"];
|
||
}
|
||
if(IsSet($arguments["LabelSTYLE"]))
|
||
{
|
||
if(strlen($arguments["LabelSTYLE"])==0)
|
||
return($this->OutputError("it was not defined valid input LabelSTYLE",$name));
|
||
$input["LabelSTYLE"]=$arguments["LabelSTYLE"];
|
||
}
|
||
if(IsSet($arguments["LabelExtraAttributes"]))
|
||
$input["LabelExtraAttributes"]=$arguments["LabelExtraAttributes"];
|
||
if(IsSet($arguments["ExtraAttributes"]))
|
||
$input["ExtraAttributes"]=$arguments["ExtraAttributes"];
|
||
if(IsSet($arguments["ClientScript"]))
|
||
$input["ClientScript"]=$arguments["ClientScript"];
|
||
if(IsSet($arguments["ValidateOptionalValue"]))
|
||
$input["ValidateOptionalValue"]=$arguments["ValidateOptionalValue"];
|
||
$current_parent=$this->current_parent;
|
||
if(strlen($current_parent)
|
||
&& (!IsSet($arguments['NoParent'])
|
||
|| !$arguments['NoParent']))
|
||
{
|
||
$input["parent"]=$current_parent;
|
||
if(IsSet($this->inputs[$this->current_parent]["Accessible"])
|
||
&& !IsSet($arguments["Accessible"]))
|
||
$arguments["Accessible"]=$this->inputs[$this->current_parent]["Accessible"];
|
||
if(strlen($this->inputs[$this->current_parent]["SubForm"])
|
||
&& !IsSet($arguments["SubForm"]))
|
||
$arguments["SubForm"]=$this->inputs[$this->current_parent]["SubForm"];
|
||
}
|
||
if(IsSet($arguments["Accessible"]))
|
||
$input["Accessible"]=$arguments["Accessible"];
|
||
$input["SubForm"]=(IsSet($arguments["SubForm"]) ? $arguments["SubForm"] : "");
|
||
$this->inputs[$name]=$input;
|
||
if(!strcmp($input["TYPE"],"custom"))
|
||
{
|
||
$this->inputs[$name]["object"]=new $arguments["CustomClass"];
|
||
$this->inputs[$name]["object"]->custom_class=$arguments["CustomClass"];
|
||
$this->inputs[$name]["object"]->input=$name;
|
||
$this->current_parent=$name;
|
||
$error=$this->inputs[$name]["object"]->AddInput($this, $arguments);
|
||
$this->current_parent=$current_parent;
|
||
if(strlen($error))
|
||
{
|
||
$this->OutputError($error,$name);
|
||
UnSet($this->inputs[$name]);
|
||
return($error);
|
||
}
|
||
$this->inputs[$name]["ClientValidate"]=$this->inputs[$name]["object"]->client_validate;
|
||
$this->inputs[$name]["ServerValidate"]=$this->inputs[$name]["object"]->server_validate;
|
||
}
|
||
if(!IsSet($this->inputs[$name]["ClientValidate"])
|
||
|| $validate_only_on_server_side)
|
||
$this->inputs[$name]["ClientValidate"]=0;
|
||
if(!IsSet($this->inputs[$name]["ServerValidate"])
|
||
|| $validate_only_on_client_side)
|
||
$this->inputs[$name]["ServerValidate"]=0;
|
||
if($this->inputs[$name]["ServerValidate"])
|
||
$this->server_validate=1;
|
||
if(strlen($current_parent))
|
||
$this->inputs[$current_parent]["object"]->AddChild($this, $name);
|
||
return("");
|
||
}
|
||
|
||
Function AddDataPart($data)
|
||
{
|
||
if($this->capturing)
|
||
{
|
||
$data=ob_get_contents().$data;
|
||
ob_end_clean();
|
||
if(!$this->capturing=ob_start())
|
||
return($this->OutputError("could not resume layout capturing","AddDataPart"));
|
||
}
|
||
if(strlen($data))
|
||
{
|
||
$this->parts[]=$data;
|
||
$this->types[]="DATA";
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function SetInputElement($element)
|
||
{
|
||
if(IsSet($this->inputs[$element]["NAME"]))
|
||
{
|
||
$name=$this->inputs[$element]["NAME"];
|
||
if(IsSet($this->input_elements[$name]))
|
||
{
|
||
$input_element="elements[".$this->EncodeJavascriptString($name)."]";
|
||
if(count($this->input_elements[$name])==1)
|
||
$this->inputs[$this->input_elements[$name][0]]["InputElement"]="elements[".$this->EncodeJavascriptString($this->inputs[$this->input_elements[$name][0]]["NAME"])."][0]";
|
||
$input_element.="[".count($this->input_elements[$name])."]";
|
||
$this->input_elements[$name][]=$element;
|
||
}
|
||
else
|
||
{
|
||
$input_element=$name;
|
||
$this->input_elements[$name]=array($element);
|
||
}
|
||
$this->inputs[$element]["InputElement"]=$input_element;
|
||
}
|
||
else
|
||
{
|
||
if(strcmp($this->inputs[$element]["TYPE"],"custom")
|
||
&& $this->inputs[$element]["ClientValidate"])
|
||
return($this->OutputError("it was specified an unnamed input to validate",$element));
|
||
if(IsSet($this->inputs[$element]["Encoding"]))
|
||
return($this->OutputError("it was specified an unnamed input to encode",$element));
|
||
$this->inputs[$element]["InputElement"]="";
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function AddInputPart($input)
|
||
{
|
||
if($this->capturing)
|
||
$this->AddDataPart("");
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom")
|
||
&& strlen($error=$this->inputs[$input]["object"]->AddInputPart($this)))
|
||
{
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
if(IsSet($this->inputs[$input]["Accessible"]))
|
||
{
|
||
if(($read_only=!$this->inputs[$input]["Accessible"]))
|
||
$type="READ_ONLY_INPUT";
|
||
else
|
||
{
|
||
$type="ACCESSIBLE_INPUT";
|
||
$this->accessible_parts++;
|
||
}
|
||
}
|
||
else
|
||
$type=(($read_only=$this->ReadOnly) ? "READ_ONLY_INPUT" : "INPUT");
|
||
if(!$read_only)
|
||
{
|
||
if(strcmp($error=$this->SetInputElement($input),""))
|
||
return($error);
|
||
$this->input_parts[]=$input;
|
||
if($this->inputs[$input]["ClientValidate"])
|
||
$this->client_validate=1;
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"file"))
|
||
$this->file_parts++;
|
||
}
|
||
$this->inputs[$input]["Part"]=count($this->parts);
|
||
$this->parts[]=$input;
|
||
$this->types[]=$type;
|
||
return("");
|
||
}
|
||
|
||
Function AddInputHiddenPart($input)
|
||
{
|
||
if($this->capturing)
|
||
$this->AddDataPart("");
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom")
|
||
&& strlen($error=$this->inputs[$input]["object"]->AddInputHiddenPart($this)))
|
||
{
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
if(strcmp($error=$this->SetInputElement($input),""))
|
||
return($error);
|
||
$this->inputs[$input]["Part"]=count($this->parts);
|
||
$this->input_parts[]=$input;
|
||
$this->parts[]=$input;
|
||
$this->types[]="HIDDEN_INPUT";
|
||
$this->hidden_parts++;
|
||
return("");
|
||
}
|
||
|
||
Function AddInputReadOnlyPart($input)
|
||
{
|
||
if($this->capturing)
|
||
$this->AddDataPart("");
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom")
|
||
&& strlen($error=$this->inputs[$input]["object"]->AddInputReadOnlyPart($this)))
|
||
{
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
if(strcmp($error=$this->SetInputElement($input),""))
|
||
return($error);
|
||
$this->inputs[$input]["Part"]=count($this->parts);
|
||
$this->input_parts[]=$input;
|
||
$this->parts[]=$input;
|
||
$this->types[]="HIDDEN_INPUT";
|
||
$this->hidden_parts++;
|
||
$this->parts[]=$input;
|
||
$this->types[]="READ_ONLY_INPUT";
|
||
return("");
|
||
}
|
||
|
||
Function AddLabelPart($arguments)
|
||
{
|
||
if(!IsSet($arguments["FOR"])
|
||
|| !strcmp($for=$arguments["FOR"],"")
|
||
|| !IsSet($this->inputs[$for]))
|
||
return($this->OutputError("it was not specified a valid label FOR input ID","AddLabelPart"));
|
||
if(!strcmp($this->inputs[$for]["TYPE"],"custom"))
|
||
{
|
||
if(strlen($error=$this->inputs[$for]["object"]->AddLabelPart($this, $arguments)))
|
||
{
|
||
$this->OutputError($error, $for);
|
||
return($error);
|
||
}
|
||
return("");
|
||
}
|
||
$label=array("FOR"=>$for);
|
||
if(IsSet($arguments["LABEL"]))
|
||
$label["LABEL"]=$arguments["LABEL"];
|
||
else
|
||
{
|
||
if(IsSet($this->inputs[$for]["LABEL"]))
|
||
$label["LABEL"]=$this->inputs[$for]["LABEL"];
|
||
else
|
||
$label["LABEL"]="";
|
||
}
|
||
if(IsSet($arguments["ACCESSKEY"]))
|
||
$label["ACCESSKEY"]=$arguments["ACCESSKEY"];
|
||
else
|
||
{
|
||
if(IsSet($this->inputs[$for]["ACCESSKEY"]))
|
||
$label["ACCESSKEY"]=$this->inputs[$for]["ACCESSKEY"];
|
||
else
|
||
$label["ACCESSKEY"]="";
|
||
}
|
||
if(strlen($label["ACCESSKEY"])==0)
|
||
Unset($label["ACCESSKEY"]);
|
||
else
|
||
{
|
||
$lower=$this->tolower_function;
|
||
$key=$lower($label["ACCESSKEY"]);
|
||
if(!$this->allow_used_access_keys)
|
||
{
|
||
if(IsSet($this->label_access_keys[$key]))
|
||
return($this->OutputError("it was specified label FOR input \"".$label["FOR"]."\" that was already specified for input \"".$this->label_access_keys[$key]."\"",$for));
|
||
}
|
||
if(IsSet($this->reserved_access_keys[$key]))
|
||
return($this->OutputError("it was specified label FOR input \"".$label["FOR"]."\" that is already reserved for \"".$this->reserved_access_keys[$key]."\"",$for));
|
||
$this->label_access_keys[$key]=$for;
|
||
}
|
||
if(strlen($label["LABEL"])==0)
|
||
return($this->OutputError("it was not specified a valid label",$for));
|
||
if(IsSet($arguments["ID"]))
|
||
$label["ID"]=$arguments["ID"];
|
||
elseif(IsSet($this->inputs[$for]["LabelID"]))
|
||
$label["ID"]=$this->inputs[$for]["LabelID"];
|
||
if(IsSet($arguments["TITLE"]))
|
||
$label["TITLE"]=$arguments["TITLE"];
|
||
elseif(IsSet($this->inputs[$for]["LabelTITLE"]))
|
||
$label["TITLE"]=$this->inputs[$for]["LabelTITLE"];
|
||
if(IsSet($arguments["STYLE"]))
|
||
$label["STYLE"]=$arguments["STYLE"];
|
||
elseif(IsSet($this->inputs[$for]["LabelSTYLE"]))
|
||
$label["STYLE"]=$this->inputs[$for]["LabelSTYLE"];
|
||
if(IsSet($arguments["CLASS"]))
|
||
$label["CLASS"]=$arguments["CLASS"];
|
||
elseif(IsSet($this->inputs[$for]["LabelCLASS"]))
|
||
$label["CLASS"]=$this->inputs[$for]["LabelCLASS"];
|
||
if(IsSet($arguments["ExtraAttributes"]))
|
||
$label["ExtraAttributes"]=$arguments["ExtraAttributes"];
|
||
elseif(IsSet($this->inputs[$for]["LabelExtraAttributes"]))
|
||
$label["ExtraAttributes"]=$this->inputs[$for]["LabelExtraAttributes"];
|
||
if($this->capturing)
|
||
$this->AddDataPart("");
|
||
$this->parts[]=$label;
|
||
$this->types[]=(($this->ReadOnly && (!IsSet($this->inputs[$for]["Accessible"]) || !$this->inputs[$for]["Accessible"])) ? "READ_ONLY_LABEL" : "LABEL");
|
||
return("");
|
||
}
|
||
|
||
Function AddFunction($arguments)
|
||
{
|
||
if(!IsSet($arguments["Function"])
|
||
|| !strcmp($name=$arguments["Function"],""))
|
||
return($this->OutputError("it was not specified a valid function name",$name));
|
||
if(IsSet($this->functions[$name]))
|
||
return($this->OutputError("it was specified an already existing function",$name));
|
||
$function=array();
|
||
switch($function["Type"]=(IsSet($arguments["Type"]) ? $arguments["Type"] : ""))
|
||
{
|
||
case "focus":
|
||
case "select":
|
||
case "select_focus":
|
||
case "disable":
|
||
case "enable":
|
||
if(IsSet($arguments["Element"])
|
||
&& IsSet($this->inputs[$input=$arguments["Element"]]))
|
||
{
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom"))
|
||
{
|
||
if(strlen($error=$this->inputs[$input]["object"]->AddFunction($this, $arguments)))
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
if(IsSet($this->inputs[$input]["InputElement"])
|
||
&& strcmp($this->inputs[$input]["InputElement"],""))
|
||
{
|
||
$function["Element"]=$input;
|
||
break;
|
||
}
|
||
}
|
||
return($this->OutputError("it was not specified a valid named form element to define a function", $input));
|
||
case "void":
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not specified a valid function type",$name));
|
||
}
|
||
$this->functions[$name]=$function;
|
||
return("");
|
||
}
|
||
|
||
Function RemoveFunction($name)
|
||
{
|
||
if(!IsSet($this->functions[$name]))
|
||
return($this->OutputError("it was not specified an existing function name",$name));
|
||
Unset($this->functions[$name]);
|
||
return("");
|
||
}
|
||
|
||
Function GetFormObject()
|
||
{
|
||
if(strlen($this->ID))
|
||
return('document.getElementById('.$this->EncodeJavascriptString($this->ID).')');
|
||
elseif(strlen($this->NAME))
|
||
return('document.forms['.$this->EncodeJavascriptString($this->NAME).']');
|
||
else
|
||
return('');
|
||
}
|
||
|
||
Function GetJavascriptConnectionAction($form_object, $from, $to, $event, $action, &$context, &$javascript)
|
||
{
|
||
$javascript="";
|
||
if(!IsSet($this->inputs[$to]))
|
||
{
|
||
$this->OutputError("it was not specified a valid connection destination input",$to);
|
||
return("");
|
||
}
|
||
$type=$this->inputs[$to]["TYPE"];
|
||
$error="it was requested an unsupported action ".$action." for ".$type." type inputs";
|
||
if(strlen($form_object)==0)
|
||
{
|
||
$form_object=$this->GetFormObject();
|
||
if(strlen($form_object)==0)
|
||
{
|
||
$this->OutputError("it was not specified a valid form object expression",$to);
|
||
return("");
|
||
}
|
||
}
|
||
switch($type)
|
||
{
|
||
case "button":
|
||
case "checkbox":
|
||
case "image":
|
||
case "radio":
|
||
case "reset":
|
||
case "password":
|
||
case "select":
|
||
case "submit":
|
||
case "text":
|
||
case "textarea":
|
||
case "file":
|
||
switch($action)
|
||
{
|
||
case 'Click':
|
||
case 'Focus':
|
||
case 'Select':
|
||
case 'Select_focus':
|
||
case 'Enable':
|
||
case 'Disable':
|
||
case 'MarkValidated':
|
||
if(!$this->GetInputAction($form_object, $to, $action, $condition, $javascript))
|
||
break;
|
||
if(strlen($condition))
|
||
$javascript='if('.$condition.') '.$javascript;
|
||
return('');
|
||
}
|
||
break;
|
||
case "custom":
|
||
if(strlen($error=$this->inputs[$to]["object"]->GetJavascriptConnectionAction($this, $form_object, $from, $event, $action, $context, $javascript))==0)
|
||
return("");
|
||
break;
|
||
}
|
||
$this->OutputError($error,$to);
|
||
return("");
|
||
}
|
||
|
||
Function GetFormEventActions($form_object, $event)
|
||
{
|
||
if(!IsSet($this->connections[$event]))
|
||
return("");
|
||
for($actions="", $c=0; $c <count($this->connections[$event]); $c++)
|
||
{
|
||
$to = $this->connections[$event][$c]["To"];
|
||
$error=$this->GetJavascriptConnectionAction($form_object, '', $to, $event, $this->connections[$event][$c]["Action"], $this->connections[$event][$c]["Context"], $javascript);
|
||
if(strlen($error))
|
||
$form->OutputError($error, $to);
|
||
elseif(strlen($javascript))
|
||
{
|
||
if(strlen($actions))
|
||
$actions.="; ";
|
||
$actions.=$javascript;
|
||
}
|
||
}
|
||
return($actions);
|
||
}
|
||
|
||
Function GetEventActions($form_object, $from, $event)
|
||
{
|
||
if(!IsSet($this->inputs[$from]["Connections"][$event]))
|
||
return("");
|
||
for($actions="", $c=0; $c <count($this->inputs[$from]["Connections"][$event]); $c++)
|
||
{
|
||
$error=$this->GetJavascriptConnectionAction($form_object, $from, $this->inputs[$from]["Connections"][$event][$c]["To"], $event, $this->inputs[$from]["Connections"][$event][$c]["Action"], $this->inputs[$from]["Connections"][$event][$c]["Context"], $javascript);
|
||
if(strlen($error))
|
||
$form->OutputError($error, $from);
|
||
elseif(strlen($javascript))
|
||
{
|
||
if(strlen($actions))
|
||
$actions.="; ";
|
||
$actions.=$javascript;
|
||
}
|
||
}
|
||
return($actions);
|
||
}
|
||
|
||
Function OutputEventHandlingAttributes(&$input, $input_id, $onclick, $function)
|
||
{
|
||
$onchange="";
|
||
if(IsSet($input["Capitalization"]))
|
||
{
|
||
switch($input["Capitalization"])
|
||
{
|
||
case "uppercase":
|
||
$onchange.="if(new_value.toUpperCase) new_value=new_value.toUpperCase() ; ";
|
||
break;
|
||
case "lowercase":
|
||
$onchange.="if(new_value.toLowerCase) new_value=new_value.toLowerCase() ; ";
|
||
break;
|
||
case "words":
|
||
$onchange.="if(new_value.toLowerCase && new_value.toUpperCase) { for(var capitalize=true, position=0, capitalized_value='' ; position<new_value.length; position++) { character=new_value.charAt(position) ; if(character==' ' || character=='\\t' || character=='\\n' || character=='\\r') { capitalize=true } else { character=(capitalize ? character.toUpperCase() : character.toLowerCase()) ; capitalize=false } ; capitalized_value+=character } new_value=capitalized_value } ; ";
|
||
break;
|
||
}
|
||
}
|
||
if(IsSet($input["ReplacePatterns"])
|
||
&& count($input["ReplacePatterns"])
|
||
&& !IsSet($input["ReplacePatternsOnlyOnServerSide"]))
|
||
{
|
||
for($value="new_value",$pattern=0,Reset($input["ReplacePatterns"]);$pattern<count($input["ReplacePatterns"]);Next($input["ReplacePatterns"]),$pattern++)
|
||
{
|
||
$expression=Key($input["ReplacePatterns"]);
|
||
$replacement=preg_replace('/\\\\([0-9])/','$\\1',$input["ReplacePatterns"][$expression]);
|
||
$value=$value.".replace(new RegExp(".$this->EscapeJavascriptRegularExpressions($expression).",'g'), ".$this->EncodeJavascriptString($replacement).")";
|
||
}
|
||
$onchange.="if(new_value.replace) { new_value=".$value."; } ; ";
|
||
}
|
||
if(strlen($onchange))
|
||
$onchange="new_value=value; ".$onchange." if(new_value!=value) value=new_value ;";
|
||
if(IsSet($input["EVENTS"]["ONCHANGE"]))
|
||
$onchange.=$input["EVENTS"]["ONCHANGE"];
|
||
if(strlen($actions=$this->GetEventActions("this.form", $input_id,"ONCHANGE")))
|
||
{
|
||
if(strlen($onchange))
|
||
$onchange.="; ";
|
||
$onchange.=$actions;
|
||
}
|
||
if(strlen($onchange))
|
||
$function(" onchange=\"".$this->EncodeHtmlString($onchange)."\"");
|
||
|
||
if(IsSet($input["EVENTS"]["ONCLICK"]))
|
||
{
|
||
if(strlen($onclick))
|
||
$onclick.=" ; ";
|
||
$onclick.=$input["EVENTS"]["ONCLICK"];
|
||
}
|
||
if(strlen($actions=$this->GetEventActions("this.form", $input_id,"ONCLICK")))
|
||
{
|
||
if(strlen($onclick))
|
||
$onclick.="; ";
|
||
$onclick.=$actions;
|
||
}
|
||
if(strlen($onclick))
|
||
$function(" onclick=\"".$this->EncodeHtmlString($onclick)." ; return true\"");
|
||
|
||
if(IsSet($input["EVENTS"]))
|
||
{
|
||
for($event=0, Reset($input["EVENTS"]);$event<count($input["EVENTS"]); $event++, Next($input["EVENTS"]))
|
||
{
|
||
$name=Key($input["EVENTS"]);
|
||
switch($name)
|
||
{
|
||
case "ONCHANGE":
|
||
case "ONCLICK":
|
||
break;
|
||
default:
|
||
$action=$input["EVENTS"][$name];
|
||
if(strlen($actions=$this->GetEventActions("this.form", $input_id,$name)))
|
||
{
|
||
if(strlen($action))
|
||
$action.="; ";
|
||
$action.=$actions;
|
||
}
|
||
if(strlen($action))
|
||
$function(" ".strtolower($name)."=\"".$this->EncodeHtmlString($action)."\"");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
Function MergeStyles($style_1, $style_2)
|
||
{
|
||
if(strlen($style_1)==0)
|
||
return($style_2);
|
||
$length=strlen($style_2=trim($style_2));
|
||
if($length
|
||
&& strcmp(substr($style_2, $length-1),";"))
|
||
$style_2.="; ";
|
||
return($style_2.$style_1);
|
||
}
|
||
|
||
Function OutputStyleAttributes(&$input, $function, $id)
|
||
{
|
||
if(IsSet($input["TITLE"]))
|
||
$function(" title=\"".$this->EncodeHTMLString($input["TITLE"])."\"");
|
||
$invalid=IsSet($this->Invalid[$id]);
|
||
if($invalid
|
||
&& IsSet($input["InvalidCLASS"]))
|
||
$class=$input["InvalidCLASS"];
|
||
elseif($invalid
|
||
&& strlen($this->InvalidCLASS))
|
||
$class= $this->InvalidCLASS;
|
||
elseif(IsSet($input["CLASS"]))
|
||
$class=$input["CLASS"];
|
||
else
|
||
$class="";
|
||
if(strlen($class))
|
||
$function(" class=\"".$this->EncodeHTMLString($class)."\"");
|
||
if($invalid
|
||
&& IsSet($input["InvalidSTYLE"]))
|
||
$style=$input["InvalidSTYLE"];
|
||
elseif($invalid
|
||
&& strlen($this->InvalidSTYLE))
|
||
$style=$this->InvalidSTYLE;
|
||
else
|
||
$style="";
|
||
if(IsSet($input["STYLE"]))
|
||
$style=$this->MergeStyles($style, $input["STYLE"]);
|
||
if(strlen($style))
|
||
$function(" style=\"".$this->EncodeHTMLString($style)."\"");
|
||
}
|
||
|
||
Function OutputExtraAttributes(&$attributes,$function)
|
||
{
|
||
if(IsSet($attributes))
|
||
{
|
||
for(Reset($attributes),$attribute=0;$attribute<count($attributes);Next($attributes),$attribute++)
|
||
{
|
||
$attribute_name=Key($attributes);
|
||
$function(" ".$attribute_name."=\"".$this->EncodeHTMLString($attributes[$attribute_name])."\"");
|
||
}
|
||
}
|
||
}
|
||
|
||
Function OutputInput(&$input, $input_id, $input_read_only, $function, $eol, &$resubmit_condition)
|
||
{
|
||
switch($input["TYPE"])
|
||
{
|
||
case "textarea":
|
||
if($input_read_only
|
||
&& (!$this->DisableReadOnlyInputs
|
||
|| IsSet($input["ReadOnlyMark"])))
|
||
{
|
||
if(IsSet($input["ReadOnlyMark"]))
|
||
$function($input["ReadOnlyMark"]);
|
||
else
|
||
{
|
||
$function("<span");
|
||
if(IsSet($input["ID"]))
|
||
$function(" id=\"".$this->EncodeHtmlString($input["ID"])."\"");
|
||
$this->OutputExtraAttributes($input["ExtraAttributes"],$function);
|
||
$this->OutputStyleAttributes($input, $function, $input_id);
|
||
$function(">");
|
||
if(IsSet($input["VALUE"]))
|
||
$function($this->EncodeHTMLString($input["VALUE"]));
|
||
$function("</span>");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$function("<textarea name=\"".$this->EncodeHtmlString($input["NAME"])."\"");
|
||
if(IsSet($input["ROWS"]))
|
||
$function(" rows=\"".$input["ROWS"]."\"");
|
||
if(IsSet($input["COLS"]))
|
||
$function(" cols=\"".$input["COLS"]."\"");
|
||
$this->OutputEventHandlingAttributes($input, $input_id, "", $function);
|
||
if(IsSet($input["ID"]))
|
||
$function(" id=\"".$this->EncodeHtmlString($input["ID"])."\"");
|
||
if(IsSet($input["TABINDEX"])
|
||
|| strcmp($tab_index_function=$this->accessibility_tab_index,""))
|
||
$function(" tabindex=\"".(IsSet($input["TABINDEX"]) ? $input["TABINDEX"] : intval($tab_index_function($input_id)))."\"");
|
||
if(IsSet($input["ACCESSKEY"]))
|
||
$function(" accesskey=\"".$this->EncodeHtmlString($input["ACCESSKEY"])."\"");
|
||
if(IsSet($input["PLACEHOLDER"]))
|
||
$function(" placeholder=\"".$this->EncodeHtmlString($input["PLACEHOLDER"])."\"");
|
||
if($input_read_only)
|
||
$function(" disabled=\"disabled\"");
|
||
$this->OutputExtraAttributes($input["ExtraAttributes"],$function);
|
||
$this->OutputStyleAttributes($input, $function, $input_id);
|
||
$function(">");
|
||
if(IsSet($input["VALUE"]))
|
||
$function($this->EncodeHTMLString($input["VALUE"]));
|
||
$function("</textarea>");
|
||
}
|
||
break;
|
||
case "select":
|
||
if($input_read_only
|
||
&& (!$this->DisableReadOnlyInputs
|
||
|| IsSet($input["ReadOnlyMark"])))
|
||
{
|
||
if(IsSet($input["ReadOnlyMark"]))
|
||
{
|
||
$function($input["ReadOnlyMark"]);
|
||
break;
|
||
}
|
||
$function("<span".(IsSet($input["ID"]) ? " id=\"".$this->EncodeHtmlString($input["ID"])."\"" : ""));
|
||
$this->OutputStyleAttributes($input, $function, $input_id);
|
||
$function(">");
|
||
}
|
||
else
|
||
{
|
||
$function("<select name=\"".$this->EncodeHtmlString($input["NAME"]));
|
||
if(IsSet($input["MULTIPLE"]))
|
||
$function("[]\" multiple=\"multiple\"");
|
||
else
|
||
$function("\"");
|
||
$this->OutputEventHandlingAttributes($input, $input_id, "", $function);
|
||
if(IsSet($input["ID"]))
|
||
$function(" id=\"".$this->EncodeHtmlString($input["ID"])."\"");
|
||
if(IsSet($input["SIZE"]))
|
||
$function(" size=\"".$input["SIZE"]."\"");
|
||
if(IsSet($input["TABINDEX"])
|
||
|| strcmp($tab_index_function=$this->accessibility_tab_index,""))
|
||
$function(" tabindex=\"".(IsSet($input["TABINDEX"]) ? $input["TABINDEX"] : intval($tab_index_function($input_id)))."\"");
|
||
if($input_read_only)
|
||
$function(" disabled=\"disabled\"");
|
||
$this->OutputStyleAttributes($input, $function, $input_id);
|
||
$this->OutputExtraAttributes($input["ExtraAttributes"],$function);
|
||
$function(">$eol");
|
||
}
|
||
$options=$input["OPTIONS"];
|
||
$read_only=($input_read_only && !$this->DisableReadOnlyInputs);
|
||
for($space="",$option=0,Reset($options);$option<count($options);Next($options),$option++)
|
||
{
|
||
$o=Key($options);
|
||
if(!$read_only)
|
||
$function("<option value=\"".$this->EncodeHTMLString($o)."\"");
|
||
if(IsSet($input["MULTIPLE"]))
|
||
{
|
||
if(IsSet($input["SELECTED"][$o]))
|
||
{
|
||
$function($read_only ? $space.$this->EncodeHTMLString($options[$o]) : " selected=\"selected\"");
|
||
if($input_read_only)
|
||
$space=$this->OptionsSeparator;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(IsSet($input["VALUE"])
|
||
&& !strcmp($input["VALUE"],$o))
|
||
$function($read_only ? $this->EncodeHTMLString($options[$o]) : " selected=\"selected\"");
|
||
}
|
||
if(!$read_only)
|
||
$function(">".(strlen($options[$o]) ? $this->EncodeHTMLString($options[$o]) : "<!-- -->")."</option>$eol");
|
||
}
|
||
if($input_read_only
|
||
&& (!$this->DisableReadOnlyInputs
|
||
|| IsSet($input["ReadOnlyMark"])))
|
||
$function("</span>");
|
||
else
|
||
$function("</select>");
|
||
break;
|
||
case "custom":
|
||
break;
|
||
default:
|
||
if($input_read_only
|
||
&& (!$this->DisableReadOnlyInputs
|
||
|| IsSet($input["ReadOnlyMark"])
|
||
|| IsSet($input["ReadOnlyMarkUnchecked"])))
|
||
{
|
||
$output="";
|
||
switch($input["TYPE"])
|
||
{
|
||
case "hidden":
|
||
break;
|
||
case "submit":
|
||
case "image":
|
||
case "reset":
|
||
case "button":
|
||
if(IsSet($input["ReadOnlyMark"]))
|
||
$output=$input["ReadOnlyMark"];
|
||
break;
|
||
case "checkbox":
|
||
case "radio":
|
||
if(IsSet($input["CHECKED"]))
|
||
$output=(IsSet($input["ReadOnlyMark"]) ? $input["ReadOnlyMark"] : (IsSet($input["VALUE"]) ? $this->EncodeHTMLString($input["VALUE"]) : "On"));
|
||
else
|
||
$output=(IsSet($input["ReadOnlyMarkUnchecked"]) ? $input["ReadOnlyMarkUnchecked"] : "");
|
||
break;
|
||
default:
|
||
$output=(IsSet($input["ReadOnlyMark"]) ? $input["ReadOnlyMark"] : (IsSet($input["VALUE"]) ? $this->EncodeHTMLString($input["VALUE"]) : ''));
|
||
break;
|
||
}
|
||
if(strlen($output))
|
||
{
|
||
$function("<span".(IsSet($input["ID"]) ? " id=\"".$this->EncodeHtmlString($input["ID"])."\"" : ""));
|
||
$this->OutputStyleAttributes($input, $function, $input_id);
|
||
$function(">".$output."</span>");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$is_button = IsSet($input['Content']);
|
||
$function("<".($is_button ? "button" : "input")." type=\"".$input["TYPE"]."\"");
|
||
if(IsSet($input["NAME"]))
|
||
{
|
||
$name=$input["NAME"];
|
||
if(!strcmp($input["TYPE"],"checkbox")
|
||
&& IsSet($input["MULTIPLE"]))
|
||
$name.="[]";
|
||
$function(" name=\"".$this->EncodeHTMLString($name)."\"");
|
||
}
|
||
$accessible_input=0;
|
||
$onclick="";
|
||
switch($input["TYPE"])
|
||
{
|
||
case "password":
|
||
case "text":
|
||
if(($input["TYPE"]!="password"
|
||
|| $this->OutputPasswordValues)
|
||
&& IsSet($input["VALUE"]))
|
||
$function(" value=\"".$this->EncodeHTMLString($input["VALUE"])."\"");
|
||
case "file":
|
||
if(IsSet($input["ACCEPT"]))
|
||
$function(" accept=\"".$this->EncodeHtmlString($input["ACCEPT"])."\"");
|
||
if(IsSet($input["MAXLENGTH"]))
|
||
$function(" maxlength=\"".$input["MAXLENGTH"]."\"");
|
||
if(IsSet($input["SIZE"]))
|
||
$function(" size=\"".$input["SIZE"]."\"");
|
||
$accessible_input=1;
|
||
break;
|
||
case "checkbox":
|
||
case "radio":
|
||
if(IsSet($input["VALUE"]))
|
||
$function(" value=\"".$this->EncodeHTMLString($input["VALUE"])."\"");
|
||
if(IsSet($input["CHECKED"]))
|
||
$function(" checked=\"checked\"");
|
||
$accessible_input=1;
|
||
break;
|
||
case "image":
|
||
$function(" src=\"".$this->EncodeHtmlString($input["SRC"])."\"");
|
||
if(IsSet($input["ALT"]))
|
||
$function(" alt=\"".$this->EncodeHTMLString($input["ALT"])."\"");
|
||
if(IsSet($input["ALIGN"]))
|
||
$function(" align=\"".$this->EncodeHTMLString($input["ALIGN"])."\"");
|
||
case "submit":
|
||
if(strcmp($resubmit_condition,"")
|
||
&& !IsSet($input['DisableResubmitCheck']))
|
||
$onclick="if(this.disabled || typeof(this.disabled)=='boolean') this.disabled=true ; ".$this->form_submitted_test_variable_name."=".$this->form_submitted_variable_name." ; ".$this->form_submitted_variable_name."=true ; ".$this->form_submitted_variable_name."=".$resubmit_condition." ; if(this.disabled || typeof(this.disabled)=='boolean') this.disabled=false";
|
||
if(IsSet($input["SubForm"]))
|
||
{
|
||
if(strcmp($onclick,""))
|
||
$onclick.=" ; ";
|
||
if($this->client_validate
|
||
&& !$this->ValidateOnlyOnServerSide)
|
||
$onclick.=$this->GetJavascriptSetFormProperty('', 'SubForm', $this->EncodeJavascriptString($input["SubForm"]));
|
||
}
|
||
case "reset":
|
||
case "button":
|
||
$accessible_input=1;
|
||
if(IsSet($input["VALUE"]))
|
||
$function(" value=\"".$this->EncodeHtmlString($input["VALUE"])."\"");
|
||
break;
|
||
case "hidden":
|
||
$function(" value=\"".(IsSet($input["VALUE"]) ? $this->EncodeHTMLString($input["VALUE"]) : "")."\"");
|
||
break;
|
||
}
|
||
$this->OutputEventHandlingAttributes($input, $input_id, $onclick, $function);
|
||
if(IsSet($input["ID"]))
|
||
$function(" id=\"".$this->EncodeHtmlString($input["ID"])."\"");
|
||
if($accessible_input
|
||
&& (IsSet($input["TABINDEX"])
|
||
|| strcmp($tab_index_function=$this->accessibility_tab_index,"")))
|
||
$function(" tabindex=\"".(IsSet($input["TABINDEX"]) ? $input["TABINDEX"] : intval($tab_index_function($input_id)))."\"");
|
||
if(strcmp($input["TYPE"],"hidden")
|
||
&& IsSet($input["ACCESSKEY"]))
|
||
$function(" accesskey=\"".$this->EncodeHtmlString($input["ACCESSKEY"])."\"");
|
||
if(IsSet($input["PLACEHOLDER"]))
|
||
$function(" placeholder=\"".$this->EncodeHtmlString($input["PLACEHOLDER"])."\"");
|
||
if($input_read_only)
|
||
$function(" disabled=\"disabled\"");
|
||
$this->OutputStyleAttributes($input, $function, $input_id);
|
||
$this->OutputExtraAttributes($input["ExtraAttributes"],$function);
|
||
$function($is_button ? '>'.$input['Content'].'</button>' : ' />');
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
Function GetInputAction($form_object, $input, $action, &$condition, &$javascript)
|
||
{
|
||
$element=$form_object.'['.$this->EncodeJavascriptString($input).']';
|
||
$condition='';
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case 'submit':
|
||
case 'image':
|
||
case 'reset':
|
||
case 'button':
|
||
$check=1;
|
||
break;
|
||
default:
|
||
$check=0;
|
||
break;
|
||
}
|
||
switch($action)
|
||
{
|
||
case 'Click':
|
||
$condition=$element.'.click';
|
||
$javascript=$element.'.click()';
|
||
break;
|
||
case 'Focus':
|
||
if($check)
|
||
$condition=$element.'.focus';
|
||
$javascript=$element.'.focus()';
|
||
break;
|
||
case 'Select':
|
||
if($check)
|
||
$condition=$element.'.select';
|
||
$javascript=$element.'.select()';
|
||
break;
|
||
case 'Select_focus':
|
||
if($check)
|
||
$condition=$element.'.select && '.$element.'.focus';
|
||
$javascript=$element.'.select(); '.$element.'.focus()';
|
||
break;
|
||
case 'Disable':
|
||
case 'Enable':
|
||
if($check)
|
||
$condition=$element.'.disabled || typeof('.$element.'.disabled)==\'boolean\'';
|
||
$javascript=$element.'.disabled='.(strcmp($action, 'Enable') ? 'true' : 'false');
|
||
break;
|
||
case 'MarkValidated':
|
||
$javascript = $this->ErrorStyleJavascript($input, $element, ';', '', IsSet($this->Invalid[$input]));
|
||
return(1);
|
||
default:
|
||
$javascript='';
|
||
return(0);
|
||
}
|
||
return(1);
|
||
}
|
||
|
||
Function ErrorStyleJavascript($input_id, $field, $jseol, $tab = "\t", $invalid = 1)
|
||
{
|
||
$o='';
|
||
if($invalid)
|
||
{
|
||
if(IsSet($this->inputs[$input_id]['InvalidCLASS']))
|
||
$class=$this->inputs[$input_id]['InvalidCLASS'];
|
||
elseif(strlen($this->InvalidCLASS))
|
||
$class= $this->InvalidCLASS;
|
||
else
|
||
$class = '';
|
||
if(IsSet($this->inputs[$input_id]['InvalidSTYLE']))
|
||
$style=$this->inputs[$input_id]['InvalidSTYLE'];
|
||
elseif(strlen($this->InvalidSTYLE))
|
||
$style=$this->InvalidSTYLE;
|
||
else
|
||
$style = '';
|
||
if(IsSet($this->inputs[$input_id]['STYLE']))
|
||
$style=$this->MergeStyles($style, $this->inputs[$input_id]['STYLE']);
|
||
}
|
||
else
|
||
{
|
||
$style = (IsSet($this->inputs[$input_id]['STYLE']) ? $this->inputs[$input_id]['STYLE'] : '');
|
||
$class = (IsSet($this->inputs[$input_id]['CLASS']) ? $this->inputs[$input_id]['CLASS'] : '');
|
||
}
|
||
if(strlen($style)
|
||
|| strlen($class))
|
||
{
|
||
$o.=$tab.$tab.'r='.$field.$jseol;
|
||
if(strlen($class))
|
||
$o.=$tab.$tab.'r.className='.$this->EncodeJavascriptString($class).$jseol;
|
||
if(strlen($style))
|
||
{
|
||
$style=$this->EncodeJavascriptString($style);
|
||
$o.=$tab.$tab.'s='.$style.$jseol.$tab.$tab.'if(r.currentStyle)'.$jseol.$tab.$tab.$tab.'r.style.cssText=s'.$jseol.$tab.$tab.'else'.$jseol.$tab.$tab.$tab.'r.setAttribute("style", s)'.$jseol;
|
||
}
|
||
}
|
||
return($o);
|
||
}
|
||
|
||
Function OutputValidation(&$last_test, $last_optional_value_set, $last_optional_value, $last_field_value, $needs_sub_form, &$last_subform, $jseol, $field, $last_error_message, $resubmit_condition, $input_id)
|
||
{
|
||
if(!strlen($last_test))
|
||
return("");
|
||
$o="";
|
||
if($last_optional_value_set)
|
||
$last_test=$last_field_value."!=".$this->EncodeJavascriptString($last_optional_value).$jseol."\t&& (".$last_test.")";
|
||
if($this->ShowAllErrors)
|
||
$last_test="!i[".$this->EncodeJavascriptString($input_id)."]".$jseol."\t&& (".$last_test.")";
|
||
if(IsSet($this->inputs[$input_id]["DependentValidation"]))
|
||
$last_test=$this->GetJavascriptCheckedState("theform", $this->inputs[$input_id]["DependentValidation"]).$jseol."\t&& (".$last_test.")";
|
||
if($needs_sub_form
|
||
|| strcmp($last_subform,""))
|
||
{
|
||
$sub_form_test=$this->sub_form_variable_name."==".$this->EncodeJavascriptString($last_subform);
|
||
if(strcmp($last_subform,""))
|
||
$sub_form_test="(".$this->sub_form_variable_name."==''".$jseol."\t|| ".$sub_form_test.")";
|
||
$last_test=$sub_form_test.$jseol."\t&& (".$last_test.")";
|
||
}
|
||
$o.=$last_test.")".$jseol."\t{".$jseol;
|
||
$o.=$this->ErrorStyleJavascript($input_id, $field, $jseol);
|
||
if($this->ShowAllErrors)
|
||
{
|
||
$o.="\t\tif(e=='')".$jseol;
|
||
$o.="\t\t\tf=".$this->EncodeJavascriptString($input_id).$jseol;
|
||
$o.="\t\telse".$jseol;
|
||
$o.="\t\t\te+=".$this->EncodeJavascriptString($jseol).$jseol;
|
||
$o.="\t\te+=(i[".$this->EncodeJavascriptString($input_id)."]=".$this->EncodeJavascriptString($this->ErrorMessagePrefix.$last_error_message.$this->ErrorMessageSuffix).')'.$jseol;
|
||
}
|
||
else
|
||
{
|
||
$input_id_value = $this->EncodeJavascriptString($input_id);
|
||
$o.="\t\te=".$this->EncodeJavascriptString($this->ErrorMessagePrefix.$last_error_message.$this->ErrorMessageSuffix).$jseol;
|
||
$o.="\t\t".$this->ValidationErrorFunctionName.'(theform, {'.$input_id_value.': e }, e, '.$input_id_value.')'.$jseol;
|
||
if(strcmp($resubmit_condition,""))
|
||
$o.="\t\t".$this->form_submitted_variable_name."=false".$jseol;
|
||
$o.="\t\treturn false".$jseol;
|
||
}
|
||
$o.="\t}".$jseol;
|
||
$last_test=$last_subform="";
|
||
return($o);
|
||
}
|
||
|
||
Function Output($arguments)
|
||
{
|
||
$function="Output";
|
||
if(!IsSet($arguments["Function"])
|
||
|| !strcmp($function=$arguments["Function"],""))
|
||
return($this->OutputError("it was not specified a valid output function",$function));
|
||
if($this->client_validate
|
||
&& !$this->ValidateOnlyOnServerSide
|
||
&& !strcmp($this->ValidationFunctionName,""))
|
||
return($this->OutputError("it was not specified a valid client validation function name","Output"));
|
||
if(count($this->functions)
|
||
&& !strcmp($this->NAME,""))
|
||
return($this->OutputError("it was not specified a valid form name","Output"));
|
||
$eol=(IsSet($arguments["EndOfLine"]) ? $arguments["EndOfLine"] : "");
|
||
$resubmit_condition="";
|
||
if(!$this->ReadOnly
|
||
|| $this->hidden_parts
|
||
|| $this->accessible_parts)
|
||
{
|
||
$method=strtolower($this->METHOD);
|
||
$action=$this->ACTION;
|
||
$encoding_type=$this->ENCTYPE;
|
||
if($this->file_parts)
|
||
{
|
||
if(strcmp($method,"post"))
|
||
$method="post";
|
||
if(strlen($encoding_type)==0)
|
||
$encoding_type="multipart/form-data";
|
||
}
|
||
if(strlen($method)==0)
|
||
$method="post";
|
||
$onsubmit=$this->ONSUBMIT;
|
||
if(strlen($actions=$this->GetFormEventActions('this', 'ONSUBMIT')))
|
||
{
|
||
if(strlen($onsubmit))
|
||
$onsubmit.='; ';
|
||
$onsubmit.=$actions;
|
||
}
|
||
$onsubmitting=$this->ONSUBMITTING;
|
||
if(strlen($actions=$this->GetFormEventActions('this', 'ONSUBMITTING')))
|
||
{
|
||
if(strlen($onsubmitting))
|
||
$onsubmitting.='; ';
|
||
$onsubmitting.=$actions;
|
||
}
|
||
$onreset=$this->ONRESET;
|
||
if(strlen($actions=$this->GetFormEventActions('this', 'ONRESET')))
|
||
{
|
||
if(strlen($onreset))
|
||
$onreset.='; ';
|
||
$onreset.=$actions;
|
||
}
|
||
$function("<form method=\"".$this->EncodeHtmlString($method)."\" action=\"".$this->EncodeHtmlString($action)."\"");
|
||
if(strcmp($this->ID,""))
|
||
$function(" id=\"".$this->EncodeHtmlString($this->ID)."\"");
|
||
if(strcmp($this->NAME,""))
|
||
$function(" name=\"".$this->EncodeHtmlString($this->NAME)."\"");
|
||
if(strcmp($this->TARGET,""))
|
||
$function(" target=\"".$this->EncodeHtmlString($this->TARGET)."\"");
|
||
if(strcmp($encoding_type,""))
|
||
$function(" enctype=\"".$this->EncodeHtmlString($encoding_type)."\"");
|
||
if(strcmp($this->form_submitted_variable_name,"")
|
||
&& strcmp($this->form_submitted_test_variable_name,"")
|
||
&& strcmp($this->ResubmitConfirmMessage,""))
|
||
$resubmit_condition="(!".$this->form_submitted_test_variable_name." || confirm(".$this->EncodeJavascriptString($this->ResubmitConfirmMessage)."))";
|
||
if(strlen($onsubmitting))
|
||
$onsubmitting=(($this->client_validate && !$this->ValidateOnlyOnServerSide) ? "if(".$this->ValidationFunctionName."(this)==false) return false; " : "").$onsubmitting."; return true";
|
||
else
|
||
$onsubmitting=(($this->client_validate && !$this->ValidateOnlyOnServerSide) ? "return ".$this->ValidationFunctionName."(this)" : "");
|
||
if(strlen($onsubmitting))
|
||
$onsubmit.=(strlen($onsubmit) ? '; ' : '').$onsubmitting;
|
||
if(strlen($onsubmit))
|
||
$function(' onsubmit="'.$this->EncodeHTMLString($onsubmit).'"');
|
||
if(strlen($onreset))
|
||
$function(' onreset='.$this->EncodeHTMLString($this->ONRESET).'"');
|
||
$this->OutputExtraAttributes($this->ExtraAttributes,$function);
|
||
$function(">$eol");
|
||
}
|
||
if(($this->client_validate
|
||
&& !$this->ValidateOnlyOnServerSide)
|
||
|| strcmp($resubmit_condition,"")
|
||
|| count($this->functions))
|
||
{
|
||
$jseol=(!strcmp($eol,"") ? "\n" : $eol);
|
||
if(count($this->parts)
|
||
&& $this->client_validate
|
||
&& !$this->ValidateOnlyOnServerSide)
|
||
{
|
||
for($script_files=$password_fields=array(),$input_part=0;$input_part<count($this->input_parts);$input_part++)
|
||
{
|
||
$input=$this->inputs[$this->input_parts[$input_part]];
|
||
$part_type=$this->types[$input["Part"]];
|
||
if(!strcmp($input["TYPE"],"password")
|
||
&& IsSet($input["Encoding"])
|
||
&& (!strcmp($part_type,"INPUT")
|
||
|| !strcmp($part_type,"ACCESSIBLE_INPUT")))
|
||
{
|
||
$password_fields[]=$this->input_parts[$input_part];
|
||
if(IsSet($input["EncodingFunctionScriptFile"])
|
||
&& !IsSet($script_files[$input["EncodingFunctionScriptFile"]]))
|
||
{
|
||
$function("<script type=\"text/javascript\" defer=\"defer\" src=\"".$this->EncodeHtmlString($input["EncodingFunctionScriptFile"])."\">\n</script>\n");
|
||
$script_files[$input["EncodingFunctionScriptFile"]]=$this->input_parts[$input_part];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
$function("<script type=\"text/javascript\" defer=\"defer\">$eol<!--$jseol");
|
||
if(strcmp($resubmit_condition,""))
|
||
$function($this->form_submitted_variable_name."=false$jseol");
|
||
if(count($this->parts)
|
||
&& $this->client_validate
|
||
&& !$this->ValidateOnlyOnServerSide)
|
||
{
|
||
for($needs_sub_form=0,$validate_as_email="",$validate_as_credit_card="",$part=0;$part<count($this->parts);$part++)
|
||
{
|
||
switch($this->types[$part])
|
||
{
|
||
case "INPUT":
|
||
case "ACCESSIBLE_INPUT":
|
||
if(IsSet($this->inputs[$this->parts[$part]]["ClientScript"]))
|
||
$function($jseol.$this->inputs[$this->parts[$part]]["ClientScript"].$jseol);
|
||
break;
|
||
}
|
||
}
|
||
for($validate_as_email="",$validate_as_credit_card="",$part=0;$part<count($this->parts);$part++)
|
||
{
|
||
switch($this->types[$part])
|
||
{
|
||
case "INPUT":
|
||
case "ACCESSIBLE_INPUT":
|
||
$input=$this->inputs[$this->parts[$part]];
|
||
if($input["ClientValidate"])
|
||
{
|
||
if(strcmp($input["SubForm"],""))
|
||
$needs_sub_form=1;
|
||
If(IsSet($input["ValidateAsEmail"]))
|
||
{
|
||
if(!strcmp($validate_as_email,""))
|
||
{
|
||
if(!IsSet($this->ValidateAsEmail)
|
||
|| !strcmp($this->ValidateAsEmail,""))
|
||
return($this->OutputError("it was not specified a valid validation as email function name","Output"));
|
||
$validate_as_email=$this->ValidateAsEmail;
|
||
$function("function ".$validate_as_email."(theinput)".$jseol."{".$jseol);
|
||
$function("\tvar s=theinput.value".$jseol."\tif(s.search)".$jseol."\t{".$jseol."\t\treturn (0<=s.search(new RegExp(".$this->EscapeJavascriptRegularExpressions($this->email_regular_expression).",'gi')))".$jseol."\t}".$jseol);
|
||
$function("\tif(s.indexOf)".$jseol."\t{".$jseol."\t\tvar at_character=s.indexOf('@')".$jseol."\t\tif(at_character<=0 || s.length<at_character+4)".$jseol."\t\t\treturn false".$jseol."\t}".$jseol);
|
||
$function("\tif(s.length<6)".$jseol."\t\treturn false".$jseol."\telse".$jseol."\t\treturn true".$jseol."}".$jseol);
|
||
}
|
||
}
|
||
If(IsSet($input["ValidateAsCreditCard"]))
|
||
{
|
||
if(!strcmp($validate_as_credit_card,""))
|
||
{
|
||
if(!IsSet($this->ValidateAsCreditCard)
|
||
|| !strcmp($this->ValidateAsCreditCard,""))
|
||
return($this->OutputError("it was not specified a valid validation as credit card function name","Output"));
|
||
$validate_as_credit_card=$this->ValidateAsCreditCard;
|
||
$function("function ".$validate_as_credit_card."(theinput,cardtype)".$jseol."{".$jseol);
|
||
$function("\tvar first, second, third, val=theinput.value".$jseol."\tvar len=val.length".$jseol."\tfor(var position=0; position<len; )".$jseol."\t{".$jseol."\t\tif(val.charAt(position)==' ' || val.charAt(position)=='.' || val.charAt(position)=='-')".$jseol."\t\t{".$jseol.$jseol."\t\t\tval=val.substring(0,position)+val.substring(position+1,len)".$jseol."\t\t\tlen=len-1".$jseol."\t\t}".$jseol."\t\telse".$jseol."\t\t\tposition++".$jseol."\t}".$jseol."\tif(len<13)".$jseol."\t\treturn false".$jseol);
|
||
$function("\tif(cardtype!='unknown')".$jseol."\t{".$jseol);
|
||
$function("\t\tif(isNaN(first=parseInt(val.charAt(0),10)))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif(isNaN(second=parseInt(val.charAt(1),10)))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif(isNaN(third=parseInt(val.charAt(2),10)))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='mastercard') && (len!=16 || first!=5 || second<1 || 5<second))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='visa') && ((len!=16 && len!=13) || first!=4))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='amex') && (len!=15 || first!=3 || (second!=4 && second!=7)))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='dinersclub' || cardtype=='carteblanche') && (len!=14 || first!=3 || ((second!=0 || third<0 || 5<third) && second!=6 && second!=8)))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='discover') && (len!=16 || ((first!=5 || second<1 || 5<second) && val.substring(0,4)!='6011')))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='enroute') && (len!=15 || (val.substring(0,4)!='2014' && val.substring(0,4)!='2149')))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif((cardtype=='jcb') && ((len!=16 || first!=3) && (len!=15 || (val.substring(0,4)!='2031' && val.substring(0,4)!='1800'))))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t}".$jseol);
|
||
$function("\tfor(var check=0,position=1;position<=len;position++)".$jseol."\t{".$jseol);
|
||
$function("\t\tif(isNaN(digit=parseInt(val.charAt(len-position),10)))".$jseol."\t\t\treturn false".$jseol);
|
||
$function("\t\tif(!(position % 2))".$jseol."\t\t\tvar digit=parseInt('0246813579'.charAt(digit),10)".$jseol."\t\tcheck+=digit".$jseol);
|
||
$function("\t}".$jseol."\treturn((check % 10)==0)".$jseol."}".$jseol);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if((!strcmp($input["TYPE"],"submit")
|
||
|| !strcmp($input["TYPE"],"image"))
|
||
&& strcmp($input["SubForm"],""))
|
||
$needs_sub_form=1;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
if($needs_sub_form)
|
||
$function($jseol.$this->GetJavascriptSetFormProperty('', 'SubForm', "''").$jseol.$jseol);
|
||
$function('function '.$this->ValidationErrorFunctionName.'(form, Invalid, error_message, focus)'.$eol.'{'.$eol);
|
||
$onerror=$this->ONERROR;
|
||
if(strlen($actions = $this->GetFormEventActions('form', 'ONERROR')))
|
||
{
|
||
if(strlen($onerror))
|
||
$onerror.='; ';
|
||
$onerror.=$actions;
|
||
}
|
||
if(strlen($onerror))
|
||
$function("\t".$onerror.$jseol);
|
||
if($this->ShowAlertOnError)
|
||
$function("\t".'alert(error_message)'.$jseol);
|
||
$function("\t".'if(form[focus].focus)'.$jseol);
|
||
$function("\t\t".'form[focus].focus()'.$jseol);
|
||
$function("}".$eol.$eol);
|
||
$function("function ".$this->ValidationFunctionName."(theform)".$eol."{".$eol);
|
||
$o="";
|
||
for($invalid_styles=$custom=array(),$input_part=0;$input_part<count($this->input_parts);$input_part++)
|
||
{
|
||
$input_id=$this->input_parts[$input_part];
|
||
if(!strcmp($this->inputs[$input_id]["TYPE"],"custom"))
|
||
{
|
||
if($this->inputs[$input_id]["ClientValidate"])
|
||
$custom[]=$input_id;
|
||
continue;
|
||
}
|
||
$input=$this->inputs[$input_id];
|
||
$part_type=$this->types[$input["Part"]];
|
||
if($input["ClientValidate"]
|
||
&& (!strcmp($part_type,"INPUT")
|
||
|| !strcmp($part_type,"ACCESSIBLE_INPUT")))
|
||
{
|
||
$validations=array("ValidateAsNotEmpty", "ValidateAsDifferentFromText", "ValidateMinimumLength", "ValidateRegularExpression", "ValidateAsNotRegularExpression", "ValidateAsInteger", "ValidateAsFloat", "ValidateAsEmail", "ValidateAsCreditCard", "ValidateAsEqualTo", "ValidateAsDifferentFrom", "ValidateAsSet", "ValidationClientFunction");
|
||
for($last_optional_value_set = 0, $last_optional_value = $last_field_value = $last_test = $last_subform = $last_error_message = $last_field = $last_input_id = '', $validation = 0; $validation < count($validations); ++$validation)
|
||
{
|
||
if(IsSet($input[$validations[$validation]]))
|
||
{
|
||
$error_message=array(IsSet($input["ValidationErrorMessage"]) ? $input["ValidationErrorMessage"] : "");
|
||
$input_id=$this->input_parts[$input_part];
|
||
$field=$this->GetJavascriptInputObject("theform", $input_id);
|
||
$field_value=$this->GetJavascriptInputValue("theform", $input_id);
|
||
switch($validations[$validation])
|
||
{
|
||
case "ValidateRegularExpression":
|
||
$e=$error_message[0];
|
||
for($test=$error_message=array(), $r=0; $r<count($input["ValidateRegularExpression"]); $r++)
|
||
{
|
||
$test[$r]="(".$field.".value.search".$jseol."\t&& ".$field.".value.search(new RegExp(".$this->EscapeJavascriptRegularExpressions($input["ValidateRegularExpression"][$r]).",'g'))==-1)";
|
||
$error_message[$r]=(IsSet($input["ValidateRegularExpressionErrorMessage"]) ? $input["ValidateRegularExpressionErrorMessage"][$r] : $e);
|
||
}
|
||
break;
|
||
case "ValidateAsNotRegularExpression":
|
||
$e=$error_message[0];
|
||
for($test=$error_message=array(), $r=0; $r<count($input["ValidateAsNotRegularExpression"]); $r++)
|
||
{
|
||
$test[$r]="(".$field.".value.search".$jseol."\t&& ".$field.".value.search(new RegExp(".$this->EscapeJavascriptRegularExpressions($input["ValidateAsNotRegularExpression"][$r]).",'g'))!=-1)";
|
||
$error_message[$r]=(IsSet($input["ValidateAsNotRegularExpressionErrorMessage"]) ? $input["ValidateAsNotRegularExpressionErrorMessage"][$r] : $e);
|
||
}
|
||
break;
|
||
case "ValidateAsNotEmpty":
|
||
if($input["TYPE"]=="select")
|
||
$test=array($field.".selectedIndex==-1 || ".$field_value."==''");
|
||
else
|
||
$test=array($field_value."==''");
|
||
if(IsSet($input["ValidateAsNotEmptyErrorMessage"]))
|
||
$error_message=array($input["ValidateAsNotEmptyErrorMessage"]);
|
||
break;
|
||
case "ValidateAsDifferentFromText":
|
||
$test=array($field_value."==".$this->EncodeJavascriptString($input["ValidateAsDifferentFromText"]));
|
||
if(IsSet($input["ValidateAsDifferentFromTextErrorMessage"]))
|
||
$error_message=array($input["ValidateAsDifferentFromTextErrorMessage"]);
|
||
break;
|
||
case "ValidateMinimumLength":
|
||
if($input["TYPE"]=="select")
|
||
$test=array($field.".selectedIndex==-1 || ".$field_value.".length<".$input["ValidateMinimumLength"]);
|
||
else
|
||
$test=array($field_value.".length<".$input["ValidateMinimumLength"]);
|
||
if(IsSet($input["ValidateMinimumLengthErrorMessage"]))
|
||
$error_message=array($input["ValidateMinimumLengthErrorMessage"]);
|
||
break;
|
||
case "ValidateAsEqualTo":
|
||
$test=array($field_value."!=".$this->GetJavascriptInputValue("theform", $input["ValidateAsEqualTo"]));
|
||
if(IsSet($input["ValidateAsEqualToErrorMessage"]))
|
||
$error_message=array($input["ValidateAsEqualToErrorMessage"]);
|
||
break;
|
||
case "ValidateAsDifferentFrom":
|
||
$test=array($field_value."==".$this->GetJavascriptInputValue("theform", $input["ValidateAsDifferentFrom"]));
|
||
if(IsSet($input["ValidateAsDifferentFromErrorMessage"]))
|
||
$error_message=array($input["ValidateAsDifferentFromErrorMessage"]);
|
||
break;
|
||
case "ValidateAsSet":
|
||
switch($input["TYPE"])
|
||
{
|
||
case "radio":
|
||
for($t="",$set_part=$validate_input=0;$validate_input<count($this->input_parts);$validate_input++)
|
||
{
|
||
$set_input=$this->inputs[$this->input_parts[$validate_input]];
|
||
if(!strcmp($set_input["TYPE"],"radio")
|
||
&& IsSet($set_input["NAME"])
|
||
&& !strcmp($set_input["NAME"],$input["NAME"]))
|
||
{
|
||
if($set_part>0)
|
||
$t.=" && ";
|
||
$t.=$this->GetJavascriptCheckedState("theform", $this->input_parts[$validate_input])."==false";
|
||
$set_part++;
|
||
}
|
||
}
|
||
break;
|
||
case "checkbox":
|
||
if(IsSet($input["MULTIPLE"]))
|
||
{
|
||
for($t="",$set_part=$validate_input=0;$validate_input<count($this->input_parts);$validate_input++)
|
||
{
|
||
$id=$this->input_parts[$validate_input];
|
||
$set_input=$this->inputs[$id];
|
||
if(!strcmp($set_input["TYPE"],"checkbox")
|
||
&& IsSet($set_input["MULTIPLE"])
|
||
&& IsSet($set_input["NAME"])
|
||
&& !strcmp($set_input["NAME"],$input["NAME"]))
|
||
{
|
||
if($set_part>0)
|
||
$t.=" && ";
|
||
$t.=$this->GetJavascriptCheckedState("theform", $id)."==false";
|
||
$set_part++;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
$t=$this->GetJavascriptCheckedState("theform", $input_id)."==false";
|
||
break;
|
||
case "select":
|
||
if(IsSet($input["MULTIPLE"]))
|
||
$t=$field.".selectedIndex==-1";
|
||
break;
|
||
}
|
||
$test=array($t);
|
||
if(IsSet($input["ValidateAsSetErrorMessage"]))
|
||
$error_message=array($input["ValidateAsSetErrorMessage"]);
|
||
break;
|
||
case "ValidateAsInteger":
|
||
$t="parseInt(".$field_value.",10).toString()!=".$field_value;
|
||
if(IsSet($input["ValidationLowerLimit"]))
|
||
$t.="$jseol\t|| parseInt(".$field_value.",10) < ".$input["ValidationLowerLimit"];
|
||
if(IsSet($input["ValidationUpperLimit"]))
|
||
$t.="$jseol\t|| ".$input["ValidationUpperLimit"]." < parseInt(".$field_value.",10)";
|
||
$test=array($t);
|
||
if(IsSet($input["ValidateAsIntegerErrorMessage"]))
|
||
$error_message=array($input["ValidateAsIntegerErrorMessage"]);
|
||
break;
|
||
case "ValidateAsFloat":
|
||
$t="(".$field_value.".search".$jseol."\t&& ".$field_value.".search(new RegExp(".$this->EscapeJavascriptRegularExpressions(IsSet($input["ValidationDecimalPlaces"]) ? str_replace("PLACES", intval($input["ValidationDecimalPlaces"]), $this->decimal_regular_expression) : $this->float_regular_expression).",'g'))<0)".$jseol."\t|| "."isNaN(parseFloat(".$field_value."))";
|
||
if(IsSet($input["ValidationLowerLimit"]))
|
||
$t.="$jseol\t|| parseFloat(".$field_value.") < ".$input["ValidationLowerLimit"];
|
||
if(IsSet($input["ValidationUpperLimit"]))
|
||
$t.="$jseol\t|| ".$input["ValidationUpperLimit"]." < parseFloat(".$field_value.")";
|
||
$test=array($t);
|
||
if(IsSet($input["ValidateAsFloatErrorMessage"]))
|
||
$error_message=array($input["ValidateAsFloatErrorMessage"]);
|
||
break;
|
||
case "ValidateAsCreditCard":
|
||
if(strcmp($input["ValidateAsCreditCard"],"field"))
|
||
$card_type=$this->EncodeJavascriptString($input["ValidateAsCreditCard"]);
|
||
else
|
||
{
|
||
$card_type_field=$input["ValidationCreditCardTypeField"];
|
||
$card_type=$this->GetJavascriptInputValue("theform", $card_type_field);
|
||
}
|
||
$test=array($validate_as_credit_card."(".$field.",".$card_type.")==false");
|
||
if(IsSet($input["ValidateAsCreditCardErrorMessage"]))
|
||
$error_message=array($input["ValidateAsCreditCardErrorMessage"]);
|
||
break;
|
||
case "ValidateAsEmail":
|
||
$test=array($validate_as_email."(".$field.")==false");
|
||
if(IsSet($input["ValidateAsEmailErrorMessage"]))
|
||
$error_message=array($input["ValidateAsEmailErrorMessage"]);
|
||
break;
|
||
case "ValidationClientFunction":
|
||
$test=array($input["ValidationClientFunction"]."(".$field.")==false");
|
||
if(IsSet($input["ValidationClientFunctionErrorMessage"]))
|
||
$error_message=array($input["ValidationClientFunctionErrorMessage"]);
|
||
break;
|
||
}
|
||
$subform=(strcmp($input["SubForm"],"") ? $input["SubForm"] : "");
|
||
$optional_value_set=IsSet($input["ValidateOptionalValue"]);
|
||
$optional_value=($optional_value_set ? $input["ValidateOptionalValue"] : "");
|
||
for($t=0; $t<count($test); $t++)
|
||
{
|
||
$test_condition = $test[$t];
|
||
if(strcmp($last_error_message,$error_message[$t])
|
||
|| strcmp($last_field,$field))
|
||
{
|
||
$o.=$this->OutputValidation($last_test, $last_optional_value_set, $last_optional_value, $last_field_value, $needs_sub_form, $last_subform, $jseol, $last_field, $last_error_message, $resubmit_condition, $last_input_id);
|
||
$o.="\tif(";
|
||
$last_error_message=$error_message[$t];
|
||
$last_field=$field;
|
||
$last_input_id=$input_id;
|
||
$conditions=0;
|
||
$last_test .= $test_condition;
|
||
}
|
||
else
|
||
{
|
||
if($conditions>0)
|
||
$last_test = '('.$last_test.')'.$jseol."\t|| (".$test_condition.')';
|
||
else
|
||
$last_test .= $test_condition;
|
||
}
|
||
$conditions++;
|
||
$last_subform=$subform;
|
||
$last_optional_value_set=$optional_value_set;
|
||
$last_optional_value=$optional_value;
|
||
$last_field_value=$field_value;
|
||
}
|
||
if(!IsSet($invalid_styles[$input_id])
|
||
&& (strlen($this->InvalidSTYLE)
|
||
|| IsSet($this->inputs[$input_id]["InvalidSTYLE"])
|
||
|| strlen($this->InvalidCLASS)
|
||
|| IsSet($this->inputs[$input_id]["InvalidCLASS"])))
|
||
$invalid_styles[$input_id]=$field;
|
||
}
|
||
}
|
||
$o.=$this->OutputValidation($last_test, $last_optional_value_set, $last_optional_value, $last_field_value, $needs_sub_form, $last_subform, $jseol, $field, $last_error_message, $resubmit_condition, $input_id);
|
||
}
|
||
}
|
||
for($last_optional_value_set=0,$last_optional_value=$last_field_value=$last_test=$last_subform=$last_error_message=$last_field=$last_input_id="", $input_part=0;$input_part<count($custom);$input_part++)
|
||
{
|
||
$input=$custom[$input_part];
|
||
if(strlen($error=$this->inputs[$input]["object"]->GetJavascriptValidations($this, "theform", $validations)))
|
||
{
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
for($commands='', $validation=0;$validation<count($validations);$validation++)
|
||
{
|
||
if(IsSet($validations[$validation]["Commands"]))
|
||
{
|
||
for($command=0; $command<count($validations[$validation]["Commands"]); $command++)
|
||
{
|
||
if(strlen($validations[$validation]["Commands"][$command]))
|
||
$commands.="\t".$validations[$validation]["Commands"][$command].$jseol;
|
||
}
|
||
}
|
||
if(strlen($validations[$validation]["Condition"]))
|
||
{
|
||
if(strlen($validations[$validation]["ErrorMessage"])==0)
|
||
{
|
||
$this->OutputError($error="custom input did not generate a validation error message",$input);
|
||
return($error);
|
||
}
|
||
$subform=(strcmp($this->inputs[$input]["SubForm"],"") ? $this->inputs[$input]["SubForm"] : "");
|
||
$optional_value_set=0;
|
||
$optional_value="";
|
||
$input_id=(IsSet($validations[$validation]["Focus"]) ? $validations[$validation]["Focus"] : $this->inputs[$input]["object"]->focus_input);
|
||
$field=$this->GetJavascriptInputObject("theform",$input_id);
|
||
$field_value=$this->GetJavascriptInputValue("theform",$input_id);
|
||
$test_condition = $validations[$validation]["Condition"];
|
||
if(strcmp($last_error_message, $validations[$validation]["ErrorMessage"])
|
||
|| strcmp($last_field, $field)
|
||
|| strlen($commands))
|
||
{
|
||
$o.=$this->OutputValidation($last_test, $last_optional_value_set, $last_optional_value, $last_field_value, $needs_sub_form, $last_subform, $jseol, $last_field, $last_error_message, $resubmit_condition, $last_input_id);
|
||
$o.=$commands;
|
||
$o.="\tif(";
|
||
$last_error_message=$validations[$validation]["ErrorMessage"];
|
||
$last_field=$field;
|
||
$last_input_id=$input_id;
|
||
$commands='';
|
||
$conditions=0;
|
||
$last_test .= $test_condition;
|
||
}
|
||
else
|
||
{
|
||
if($conditions>0)
|
||
$last_test = '('.$last_test.')'.$jseol."\t|| (".$test_condition.')';
|
||
else
|
||
$last_test .= $test_condition;
|
||
}
|
||
$conditions++;
|
||
$last_subform=$subform;
|
||
$last_optional_value_set=$optional_value_set;
|
||
$last_optional_value=$optional_value;
|
||
$last_field_value=$field_value;
|
||
if(!IsSet($invalid_styles[$input_id])
|
||
&& (strlen($this->InvalidSTYLE)
|
||
|| IsSet($this->inputs[$input_id]["InvalidSTYLE"])
|
||
|| strlen($this->InvalidCLASS)
|
||
|| IsSet($this->inputs[$input_id]["InvalidCLASS"])))
|
||
$invalid_styles[$input_id]=$field;
|
||
}
|
||
}
|
||
$o.=$this->OutputValidation($last_test, $last_optional_value_set, $last_optional_value, $last_field_value, $needs_sub_form, $last_subform, $jseol, $field, $last_error_message, $resubmit_condition, $input_id);
|
||
$o.=$commands;
|
||
}
|
||
$c=count($invalid_styles);
|
||
$function("\tvar e");
|
||
if($this->ShowAllErrors)
|
||
{
|
||
$function("='', i={}, f=''");
|
||
if($c)
|
||
$function(", r, s");
|
||
}
|
||
$function($jseol);
|
||
if($c)
|
||
{
|
||
for($s="", $i=0, Reset($invalid_styles); $i<$c; Next($invalid_styles), $i++)
|
||
{
|
||
$input=Key($invalid_styles);
|
||
$field=$invalid_styles[$input];
|
||
$function("\tr=".$field.$jseol);
|
||
if(strlen($this->InvalidCLASS)
|
||
|| IsSet($this->inputs[$input]["InvalidCLASS"]))
|
||
{
|
||
$class=(IsSet($this->inputs[$input]["CLASS"]) ? $this->inputs[$input]["CLASS"] : "");
|
||
$function("\tr.className=".$this->EncodeJavascriptString($class).$jseol);
|
||
}
|
||
if(strlen($this->InvalidSTYLE)
|
||
|| IsSet($this->inputs[$input]["InvalidSTYLE"]))
|
||
{
|
||
$field=$invalid_styles[$input];
|
||
$style=(IsSet($this->inputs[$input]["STYLE"]) ? $this->inputs[$input]["STYLE"] : "");
|
||
if(!strlen($style))
|
||
$style=";";
|
||
$style=$this->EncodeJavascriptString($style);
|
||
if(strcmp($s, $style))
|
||
{
|
||
$function("\ts=".$style.$jseol);
|
||
$s=$style;
|
||
}
|
||
$function("\tif(r.currentStyle)".$jseol."\t\tr.style.cssText=s".$jseol."\telse".$jseol."\t\tr.setAttribute('style', s)".$jseol);
|
||
}
|
||
}
|
||
}
|
||
$function($o);
|
||
if($this->ShowAllErrors)
|
||
{
|
||
$function("\tif(e!='')".$jseol);
|
||
$function("\t{".$jseol);
|
||
$function("\t\t".$this->ValidationErrorFunctionName.'(theform, i, e, f)'.$jseol);
|
||
if(strcmp($resubmit_condition,""))
|
||
$function("\t\t".$this->form_submitted_variable_name."=false".$jseol);
|
||
$function("\t\treturn false".$jseol);
|
||
$function("\t}".$jseol);
|
||
}
|
||
for($input_part=0;$input_part<count($password_fields);$input_part++)
|
||
{
|
||
$input=$this->inputs[$password_fields[$input_part]];
|
||
$element_name="theform.".$input["InputElement"].".value";
|
||
$function("\tif(".$input["EncodingFunctionVerification"].")\n");
|
||
if(IsSet($input["EncodedField"]))
|
||
{
|
||
$encoded_field=$input["EncodedField"];
|
||
if(!IsSet($this->inputs[$encoded_field]))
|
||
return($this->OutputError("it was not defined the specified password encoded field",$encoded_field));
|
||
if(!IsSet($this->inputs[$encoded_field]["InputElement"]))
|
||
return($this->OutputError("it was not added the specified password encoded field",$encoded_field));
|
||
if(!strcmp($this->inputs[$encoded_field]["InputElement"],""))
|
||
return($this->OutputError("it was specified an unnamed password encoded field",$encoded_field));
|
||
$function("\t{\n\t\ttheform.".$this->inputs[$encoded_field]["InputElement"].".value=".$input["Encoding"]."(".$element_name.")\n\t\t".$element_name."=''\n\t}\n");
|
||
}
|
||
else
|
||
$function("\t{\n\t\t".$element_name."=".$input["Encoding"]."(".$element_name.")\n\t}\n");
|
||
}
|
||
$function("\treturn true".$jseol."}".$jseol);
|
||
}
|
||
if(count($this->functions))
|
||
{
|
||
$form_object=$this->GetFormObject();
|
||
for($function_number=0,Reset($this->functions);$function_number<count($this->functions);Next($this->functions),$function_number++)
|
||
{
|
||
$function($jseol."function ".Key($this->functions)."()".$jseol."{".$jseol);
|
||
$function_data=$this->functions[Key($this->functions)];
|
||
if(strcmp($function_data["Type"],"void"))
|
||
{
|
||
if($this->GetInputAction($form_object, $function_data['Element'], ucfirst($function_data['Type']), $condition, $javascript))
|
||
{
|
||
if(strlen($condition))
|
||
$function("\t".'if('.$condition.')'.$jseol);
|
||
$function("\t\t".$javascript.$jseol);
|
||
}
|
||
else
|
||
return($this->OutputError('function of type "'.$function_data['Type'].'" is not yet supported', Key($this->functions)));
|
||
}
|
||
$function("}".$jseol);
|
||
}
|
||
}
|
||
$function("// -->".$eol."</script>".$eol."<noscript>".$eol."<div style=\"display: none\"><!-- dummy comment for user agents without Javascript support enabled --></div>".$eol."</noscript>".$eol);
|
||
}
|
||
for($part=0;$part<count($this->parts);$part++)
|
||
{
|
||
switch($this->types[$part])
|
||
{
|
||
case "DATA":
|
||
$function($this->parts[$part]);
|
||
break;
|
||
case "ACCESSIBLE_INPUT":
|
||
case "READ_ONLY_INPUT":
|
||
case "INPUT":
|
||
switch($this->types[$part])
|
||
{
|
||
case "ACCESSIBLE_INPUT":
|
||
$input_read_only=0;
|
||
break;
|
||
case "READ_ONLY_INPUT":
|
||
$input_read_only=1;
|
||
break;
|
||
case "INPUT":
|
||
$input_read_only=$this->ReadOnly;
|
||
break;
|
||
}
|
||
$this->OutputInput($this->inputs[$this->parts[$part]], $this->parts[$part], $input_read_only, $function, $eol, $resubmit_condition);
|
||
break;
|
||
case "HIDDEN_INPUT":
|
||
$input=$this->inputs[$this->parts[$part]];
|
||
Unset($value);
|
||
$name=$input["NAME"];
|
||
switch($input["TYPE"])
|
||
{
|
||
case "textarea":
|
||
case "text":
|
||
case "select":
|
||
case "submit":
|
||
case "image":
|
||
case "reset":
|
||
case "button":
|
||
case "hidden":
|
||
case "password":
|
||
$value=(IsSet($input["VALUE"]) ? $input["VALUE"] : "");
|
||
break;
|
||
case "checkbox":
|
||
if(IsSet($input["MULTIPLE"]))
|
||
$name=$name.="[]";
|
||
case "radio":
|
||
if(IsSet($input["CHECKED"]))
|
||
$value=(IsSet($input["VALUE"]) ? $input["VALUE"] : "on");
|
||
break;
|
||
}
|
||
if(IsSet($value))
|
||
{
|
||
$function("<input type=\"hidden\"");
|
||
if(IsSet($input["ID"]))
|
||
$function(" id=\"".$this->EncodeHtmlString($input["ID"])."\"");
|
||
if(IsSet($input["NAME"]))
|
||
$function(" name=\"".$this->EncodeHtmlString($name)."\"");
|
||
$function(" value=\"".$this->EncodeHTMLString($value)."\" />");
|
||
}
|
||
break;
|
||
case "LABEL":
|
||
case "READ_ONLY_LABEL":
|
||
$label=$this->parts[$part];
|
||
$style=(IsSet($label["ID"]) ? " id=\"".$this->EncodeHTMLString($label["ID"])."\"" : "").(IsSet($label["CLASS"]) ? " class=\"".$this->EncodeHTMLString($label["CLASS"])."\"" : "").(IsSet($label["STYLE"]) ? " style=\"".$this->EncodeHTMLString($label["STYLE"])."\"" : "").(IsSet($label["TITLE"]) ? " title=\"".$this->EncodeHTMLString($label["TITLE"])."\"" : "");
|
||
if(IsSet($label["ExtraAttributes"]))
|
||
{
|
||
$attributes=$label["ExtraAttributes"];
|
||
for(Reset($attributes),$attribute=0;$attribute<count($attributes);Next($attributes),$attribute++)
|
||
{
|
||
$attribute_name=Key($attributes);
|
||
$style.=" ".$attribute_name."=\"".$this->EncodeHTMLString($attributes[$attribute_name])."\"";
|
||
}
|
||
}
|
||
$for = $label["FOR"];
|
||
$input_part = (IsSet($this->inputs[$for]["Part"]) ? $this->types[$this->inputs[$for]["Part"]] : '');
|
||
if((($this->ReadOnly
|
||
|| !strcmp($this->types[$part], "READ_ONLY_LABEL")
|
||
|| $input_part=="READ_ONLY_INPUT")
|
||
&& $input_part!="ACCESSIBLE_INPUT")
|
||
|| !IsSet($this->inputs[$for]['ID']))
|
||
$function(strlen($style) ? "<span".$style.">".$this->parts[$part]["LABEL"]."</span>" : $this->parts[$part]["LABEL"]);
|
||
else
|
||
$function("<label for=\"".$this->EncodeHtmlString($for)."\"".(IsSet($label["ACCESSKEY"]) ? " accesskey=\"".$this->EncodeHtmlString($label["ACCESSKEY"])."\"" : "").$style.">".$label["LABEL"]."</label>");
|
||
break;
|
||
}
|
||
}
|
||
if(!$this->ReadOnly
|
||
|| $this->hidden_parts
|
||
|| $this->accessible_parts)
|
||
$function("</form>$eol");
|
||
return("");
|
||
}
|
||
|
||
Function IsSetValue($variable,$file)
|
||
{
|
||
global $HTTP_POST_FILES,$HTTP_POST_VARS,$HTTP_GET_VARS;
|
||
|
||
if(!IsSet($this->register_globals))
|
||
$this->DetectRegisterVariables();
|
||
return(($file ? (IsSet($_FILES[$variable]) || ($this->register_long_arrays && IsSet($HTTP_POST_FILES[$variable]))) : (IsSet($_GET[$variable]) || ($this->register_long_arrays && IsSet($HTTP_GET_VARS[$variable])) || IsSet($_POST[$variable]) || ($this->register_long_arrays && IsSet($HTTP_POST_VARS[$variable])))) || ($this->register_globals && IsSet($GLOBALS[$variable])));
|
||
}
|
||
|
||
Function GetValue($variable,$file,$multiple=0)
|
||
{
|
||
global $HTTP_SERVER_VARS,$HTTP_POST_FILES,$HTTP_POST_VARS,$HTTP_GET_VARS;
|
||
|
||
if(!IsSet($this->register_globals))
|
||
$this->DetectRegisterVariables();
|
||
if($file)
|
||
{
|
||
if(IsSet($_FILES[$variable]))
|
||
return($_FILES[$variable]["tmp_name"]);
|
||
if($this->register_long_arrays
|
||
&& IsSet($HTTP_POST_FILES[$variable]))
|
||
return($HTTP_POST_FILES[$variable]["tmp_name"]);
|
||
}
|
||
switch(IsSet($_SERVER["REQUEST_METHOD"]) ? $_SERVER["REQUEST_METHOD"] : (($this->register_long_arrays && IsSet($HTTP_SERVER_VARS["REQUEST_METHOD"])) ? $HTTP_SERVER_VARS["REQUEST_METHOD"] : ""))
|
||
{
|
||
case "POST":
|
||
if(IsSet($_POST[$variable]))
|
||
{
|
||
$value=$_POST[$variable];
|
||
break;
|
||
}
|
||
if($this->register_long_arrays
|
||
&& IsSet($HTTP_POST_VARS[$variable]))
|
||
{
|
||
$value=$HTTP_POST_VARS[$variable];
|
||
break;
|
||
}
|
||
case "GET":
|
||
if(IsSet($_GET[$variable]))
|
||
{
|
||
$value=$_GET[$variable];
|
||
break;
|
||
}
|
||
if($this->register_long_arrays
|
||
&& IsSet($HTTP_GET_VARS[$variable]))
|
||
{
|
||
$value=$HTTP_GET_VARS[$variable];
|
||
break;
|
||
}
|
||
default:
|
||
$value=(($this->register_globals && IsSet($GLOBALS[$variable])) ? $GLOBALS[$variable] : "");
|
||
break;
|
||
}
|
||
if($multiple)
|
||
{
|
||
if(GetType($value)!="array")
|
||
return(array());
|
||
}
|
||
else
|
||
{
|
||
if(GetType($value)!="string")
|
||
return("");
|
||
}
|
||
if(function_exists("ini_get")
|
||
&& intval(ini_get("magic_quotes_gpc")))
|
||
{
|
||
if($multiple)
|
||
{
|
||
for($key=0;$key<count($value);$key++)
|
||
$value[$key]=StripSlashes($value[$key]);
|
||
}
|
||
else
|
||
$value=StripSlashes($value);
|
||
}
|
||
return($value);
|
||
}
|
||
|
||
Function SetValue($variable,$value)
|
||
{
|
||
global $HTTP_SERVER_VARS,$HTTP_POST_VARS,$HTTP_GET_VARS;
|
||
|
||
if(!IsSet($this->register_globals))
|
||
$this->DetectRegisterVariables();
|
||
switch(IsSet($_SERVER["REQUEST_METHOD"]) ? $_SERVER["REQUEST_METHOD"] : ($this->register_long_arrays ? $HTTP_SERVER_VARS["REQUEST_METHOD"] : ''))
|
||
{
|
||
case "POST":
|
||
if(IsSet($_POST[$variable]))
|
||
$_POST[$variable]=$value;
|
||
if($this->register_long_arrays
|
||
&& IsSet($HTTP_POST_VARS[$variable]))
|
||
$HTTP_POST_VARS[$variable]=$value;
|
||
break;
|
||
case "GET":
|
||
if(IsSet($_GET[$variable]))
|
||
$_GET[$variable]=$value;
|
||
if($this->register_long_arrays
|
||
&& IsSet($HTTP_GET_VARS[$variable]))
|
||
$HTTP_GET_VARS[$variable]=$value;
|
||
break;
|
||
}
|
||
if($this->register_globals
|
||
&& IsSet($GLOBALS[$variable]))
|
||
$GLOBALS[$variable]=$value;
|
||
return("");
|
||
}
|
||
|
||
Function GetFileValues($input,&$values)
|
||
{
|
||
global $HTTP_POST_FILES;
|
||
|
||
if($this->inputs[$input]
|
||
&& $this->inputs[$input]["TYPE"]=="file")
|
||
{
|
||
if(!IsSet($this->register_globals))
|
||
$this->DetectRegisterVariables();
|
||
$values=(IsSet($_FILES[$input]) ? $_FILES[$input] : (($this->register_long_arrays && IsSet($HTTP_POST_FILES[$input])) ? $HTTP_POST_FILES[$input] : (($this->register_globals && IsSet($GLOBALS[$input])) ? $GLOBALS[$input] : array())));
|
||
if(GetType($values) == 'array'
|
||
&& IsSet($values["tmp_name"])
|
||
&& is_uploaded_file($values["tmp_name"])
|
||
&& IsSet($values["name"]))
|
||
return($values["name"]);
|
||
}
|
||
$values=array();
|
||
return("");
|
||
}
|
||
|
||
Function GetBooleanInputs()
|
||
{
|
||
for($this->checkbox_inputs=$this->radio_inputs=array(),$input_number=0,Reset($this->inputs);$input_number<count($this->inputs);Next($this->inputs),$input_number++)
|
||
{
|
||
$id=Key($this->inputs);
|
||
switch($this->inputs[$id]["TYPE"])
|
||
{
|
||
case "radio":
|
||
$this->radio_inputs[]=$id;
|
||
break;
|
||
case "checkbox":
|
||
if(IsSet($this->inputs[$id]["MULTIPLE"]))
|
||
$this->checkbox_inputs[]=$id;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
Function ValidateInput($field, &$field_value, $sub_form="")
|
||
{
|
||
$input=$this->inputs[$field];
|
||
$default_error=(IsSet($input["ValidationErrorMessage"]) ? $input["ValidationErrorMessage"] : "error");
|
||
$input_error="";
|
||
switch($input["TYPE"])
|
||
{
|
||
case "submit":
|
||
case "image":
|
||
case "reset":
|
||
case "button":
|
||
$value="";
|
||
break;
|
||
default:
|
||
switch($input["TYPE"])
|
||
{
|
||
case "checkbox":
|
||
case "radio":
|
||
$value=(IsSet($field_value) ? $field_value : "on");
|
||
break;
|
||
default:
|
||
$value=(IsSet($field_value) ? $field_value : "");
|
||
break;
|
||
}
|
||
/*
|
||
$value=($this->IsSetValue($input["NAME"],$input["TYPE"]=="file") ? $value : "");
|
||
*/
|
||
break;
|
||
}
|
||
if((!strcmp($input["TYPE"],"select")
|
||
|| $input["ServerValidate"])
|
||
&& ((!$this->ReadOnly
|
||
&& !IsSet($input["Accessible"]))
|
||
|| (IsSet($input["Accessible"])
|
||
&& $input["Accessible"]))
|
||
&& (!strcmp($sub_form,"")
|
||
|| !strcmp($sub_form,$input["SubForm"])))
|
||
{
|
||
switch(GetType($value))
|
||
{
|
||
case "integer":
|
||
case "double":
|
||
$value=strval($value);
|
||
case "string":
|
||
break;
|
||
default:
|
||
$value="";
|
||
break;
|
||
}
|
||
if(IsSet($input["ValidateOptionalValue"])
|
||
&& !strcmp($input["ValidateOptionalValue"],$value))
|
||
return("");
|
||
$validations=array("ValidateAsNotEmpty", "ValidateAsDifferentFromText", "ValidateMinimumLength", "ValidateRegularExpression", "ValidateAsNotRegularExpression", "ValidateAsInteger", "ValidateAsFloat", "ValidateAsEmail", "ValidateAsCreditCard", "ValidateAsEqualTo", "ValidateAsDifferentFrom", "ValidateAsSet", "ValidationServerFunction");
|
||
for($validation=0;$validation<count($validations);$validation++)
|
||
{
|
||
if(IsSet($input[$validations[$validation]]))
|
||
{
|
||
switch($validations[$validation])
|
||
{
|
||
case "ValidateAsEmail":
|
||
if(!preg_match('/'.str_replace('/', '\\/', $this->email_regular_expression).'/i',$value))
|
||
$input_error=(IsSet($input["ValidateAsEmailErrorMessage"]) ? $input["ValidateAsEmailErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsCreditCard":
|
||
$value=preg_replace('/[- .]/', '', $value);
|
||
$len=strlen($value);
|
||
$check=0;
|
||
$input_error="";
|
||
if(!strcmp($validation_type=$input["ValidateAsCreditCard"],"field"))
|
||
{
|
||
$type_field=$input["ValidationCreditCardTypeField"];
|
||
$validation_type=(IsSet($this->inputs[$type_field]["VALUE"]) ? $this->inputs[$type_field]["VALUE"] : "");
|
||
}
|
||
else
|
||
$type_field="";
|
||
if($check==0
|
||
&& $len<13)
|
||
$check=1;
|
||
else
|
||
{
|
||
$first=Ord($value[0])-Ord("0");
|
||
$second=Ord($value[1])-Ord("0");
|
||
$third=Ord($value[2])-Ord("0");
|
||
switch($validation_type)
|
||
{
|
||
case "mastercard":
|
||
if($len!=16
|
||
|| $first!=5
|
||
|| $second<1
|
||
|| $second>5)
|
||
$check=1;
|
||
break;
|
||
case "visa":
|
||
if(($len!=16
|
||
&& $len!=13)
|
||
|| $first!=4)
|
||
$check=1;
|
||
break;
|
||
case "amex":
|
||
if($len!=15
|
||
|| $first!=3
|
||
|| ($second!=4
|
||
&& $second!=7))
|
||
$check=1;
|
||
break;
|
||
case "carteblanche":
|
||
case "dinersclub":
|
||
if($len!=14
|
||
|| $first!=3
|
||
|| (($second!=0
|
||
|| $third<0
|
||
|| $third>5)
|
||
&& $second!=6
|
||
&& $second!=8))
|
||
$check=1;
|
||
break;
|
||
case "discover":
|
||
if($len!=16
|
||
|| (($first!=5
|
||
|| $second<1
|
||
|| $second>5)
|
||
&& strcmp(substr($value,0,4),"6011")))
|
||
$check=1;
|
||
break;
|
||
case "enroute":
|
||
if($len!=15
|
||
|| (substr($value,0,4)!="2014"
|
||
&& substr($value,0,4)!="2149"))
|
||
$check=1;
|
||
break;
|
||
case "jcb":
|
||
if(($len!=16
|
||
|| $first!=3)
|
||
&& ($len!=15
|
||
|| (substr($value,0,4)!="2031"
|
||
&& substr($value,0,4)!="1800")))
|
||
$check=1;
|
||
break;
|
||
case "unknown":
|
||
break;
|
||
default:
|
||
if(strcmp($type_field,""))
|
||
{
|
||
$type_input=$this->inputs[$type_field];
|
||
$input_error=(IsSet($type_input["ValidationErrorMessage"]) ? $type_input["ValidationErrorMessage"] : "error");
|
||
}
|
||
$check=1;
|
||
break;
|
||
}
|
||
}
|
||
if($check==0)
|
||
{
|
||
for($odd="0246813579",$zero=Ord("0"),$position=1;$position<=$len;$position++)
|
||
{
|
||
if(($digit=Ord($value[$len-$position])-$zero)>9
|
||
|| $digit<0)
|
||
{
|
||
$check=1;
|
||
break;
|
||
}
|
||
if(!($position % 2))
|
||
$digit=intval($odd[$digit]);
|
||
$check+=$digit;
|
||
}
|
||
$check%=10;
|
||
}
|
||
if($check
|
||
&& !strcmp($input_error,""))
|
||
$input_error=(IsSet($input["ValidateAsCreditCardErrorMessage"]) ? $input["ValidateAsCreditCardErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateRegularExpression":
|
||
for($r=0; $r<count($input["ValidateRegularExpression"]); $r++)
|
||
{
|
||
if(!preg_match('/'.str_replace('/', '\\/', $input["ValidateRegularExpression"][$r]).'/', $value))
|
||
{
|
||
$input_error=(IsSet($input["ValidateRegularExpressionErrorMessage"]) ? $input["ValidateRegularExpressionErrorMessage"][$r] : $default_error);
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case "ValidateAsNotRegularExpression":
|
||
for($r=0; $r<count($input["ValidateAsNotRegularExpression"]); $r++)
|
||
{
|
||
if(preg_match('/'.str_replace('/', '\\/', $input["ValidateAsNotRegularExpression"][$r]).'/', $value))
|
||
{
|
||
$input_error=(IsSet($input["ValidateAsNotRegularExpressionErrorMessage"]) ? $input["ValidateAsNotRegularExpressionErrorMessage"][$r] : $default_error);
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case "ValidateAsNotEmpty":
|
||
if($input["TYPE"]=="file" ? (strlen($this->GetFileValues($input["NAME"],$file_values))==0 || $file_values["size"]==0) : (strlen($value)==0))
|
||
$input_error=(IsSet($input["ValidateAsNotEmptyErrorMessage"]) ? $input["ValidateAsNotEmptyErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsDifferentFromText":
|
||
if(!strcmp($value, $input["ValidateAsDifferentFromText"]))
|
||
$input_error=(IsSet($input["ValidateAsDifferentFromTextErrorMessage"]) ? $input["ValidateAsDifferentFromTextErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateMinimumLength":
|
||
if(strlen($value)<$input["ValidateMinimumLength"])
|
||
$input_error=(IsSet($input["ValidateMinimumLengthErrorMessage"]) ? $input["ValidateMinimumLengthErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsEqualTo":
|
||
$compare=(IsSet($this->inputs[$input["ValidateAsEqualTo"]]["VALUE"]) ? $this->inputs[$input["ValidateAsEqualTo"]]["VALUE"] : "");
|
||
if(strcmp($compare,$value))
|
||
$input_error=(IsSet($input["ValidateAsEqualToErrorMessage"]) ? $input["ValidateAsEqualToErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsDifferentFrom":
|
||
$compare=(IsSet($this->inputs[$input["ValidateAsDifferentFrom"]]["VALUE"]) ? $this->inputs[$input["ValidateAsDifferentFrom"]]["VALUE"] : "");
|
||
if(!strcmp($compare,$value))
|
||
$input_error=(IsSet($input["ValidateAsDifferentFromErrorMessage"]) ? $input["ValidateAsDifferentFromErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsSet":
|
||
$invalid=0;
|
||
switch($input["TYPE"])
|
||
{
|
||
case "radio":
|
||
if(IsSet($input["CHECKED"]))
|
||
break;
|
||
if(!IsSet($this->radio_inputs))
|
||
$this->GetBooleanInputs();
|
||
for($validate_input=0;$validate_input<count($this->radio_inputs);$validate_input++)
|
||
{
|
||
$set_input=$this->inputs[$this->radio_inputs[$validate_input]];
|
||
if(IsSet($set_input["NAME"])
|
||
&& !strcmp($set_input["NAME"],$input["NAME"])
|
||
&& IsSet($set_input["CHECKED"]))
|
||
break;
|
||
}
|
||
if($validate_input>=count($this->radio_inputs))
|
||
$invalid=1;
|
||
break;
|
||
case "checkbox":
|
||
if(IsSet($input["MULTIPLE"]))
|
||
{
|
||
if(IsSet($input["CHECKED"]))
|
||
break;
|
||
if(!IsSet($this->checkbox_inputs))
|
||
$this->GetBooleanInputs();
|
||
for($validate_input=0;$validate_input<count($this->checkbox_inputs);$validate_input++)
|
||
{
|
||
$set_input=$this->inputs[$this->checkbox_inputs[$validate_input]];
|
||
if(IsSet($set_input["NAME"])
|
||
&& !strcmp($set_input["NAME"],$input["NAME"])
|
||
&& IsSet($set_input["CHECKED"]))
|
||
break;
|
||
}
|
||
if($validate_input>=count($this->checkbox_inputs))
|
||
$invalid=1;
|
||
break;
|
||
}
|
||
default:
|
||
if(!$this->IsSetValue($input["NAME"],0))
|
||
$invalid=1;
|
||
break;
|
||
}
|
||
if($invalid)
|
||
$input_error=(IsSet($input["ValidateAsSetErrorMessage"]) ? $input["ValidateAsSetErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsInteger":
|
||
$integer_value=intval($value);
|
||
if(strcmp($value,strval($integer_value))
|
||
|| (IsSet($input["ValidationLowerLimit"])
|
||
&& $integer_value<$input["ValidationLowerLimit"])
|
||
|| (IsSet($input["ValidationUpperLimit"])
|
||
&& $integer_value>$input["ValidationUpperLimit"]))
|
||
$input_error=(IsSet($input["ValidateAsIntegerErrorMessage"]) ? $input["ValidateAsIntegerErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidateAsFloat":
|
||
$float_value=doubleval($value);
|
||
if(!preg_match('/'.str_replace('/', '\\/', IsSet($input["ValidationDecimalPlaces"]) ? str_replace("PLACES", intval($input["ValidationDecimalPlaces"]), $this->decimal_regular_expression) : $this->float_regular_expression).'/', $value)
|
||
|| (IsSet($input["ValidationLowerLimit"])
|
||
&& $float_value<$input["ValidationLowerLimit"])
|
||
|| (IsSet($input["ValidationUpperLimit"])
|
||
&& $float_value>$input["ValidationUpperLimit"]))
|
||
$input_error=(IsSet($input["ValidateAsFloatErrorMessage"]) ? $input["ValidateAsFloatErrorMessage"] : $default_error);
|
||
break;
|
||
case "ValidationServerFunction":
|
||
if(function_exists('call_user_func'))
|
||
$success = call_user_func($input["ValidationServerFunction"], $value);
|
||
else
|
||
$success = $input["ValidationServerFunction"]($value);
|
||
if(!$success)
|
||
$input_error=(IsSet($input["ValidationServerFunctionErrorMessage"]) ? $input["ValidationServerFunctionErrorMessage"] : $default_error);
|
||
break;
|
||
}
|
||
if(strcmp($input_error,""))
|
||
break;
|
||
}
|
||
}
|
||
if(!strcmp($input_error,"")
|
||
&& !strcmp($input["TYPE"],"select"))
|
||
{
|
||
if(IsSet($input["MULTIPLE"]))
|
||
{
|
||
if(IsSet($input["ValidateAsSet"])
|
||
&& (!IsSet($input["SELECTED"])
|
||
|| count($input["SELECTED"])==0))
|
||
$input_error=(IsSet($input["ValidateAsSetErrorMessage"]) ? $input["ValidateAsSetErrorMessage"] : $default_error);
|
||
}
|
||
else
|
||
{
|
||
if($this->IsSetValue($input["NAME"],0)
|
||
&& !IsSet($input["OPTIONS"][$this->GetValue($input["NAME"],0)])
|
||
&& IsSet($input["ValidationErrorMessage"]))
|
||
$input_error=$default_error;
|
||
}
|
||
}
|
||
}
|
||
return($input_error);
|
||
}
|
||
|
||
Function FlagInvalidInput($input, $error)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError('it was attempted to flag invalid an inexisting input', $input);
|
||
return('');
|
||
}
|
||
$this->Invalid[$input]=$error;
|
||
$sub_form=IsSet($this->inputs[$input]['SubForm']) ? $this->inputs[$input]['SubForm'] : '';
|
||
$this->flagged_inputs[$input]=$sub_form;
|
||
return($sub_form);
|
||
}
|
||
|
||
Function Validate(&$verify,$sub_form="")
|
||
{
|
||
$this->Invalid = array();
|
||
for($inputs=array(), $input_number=0, Reset($this->inputs);$input_number<count($this->inputs);Next($this->inputs), $input_number++)
|
||
$inputs[]=Key($this->inputs);
|
||
if($this->ShowAllErrors)
|
||
{
|
||
$prefix = $this->ErrorMessagePrefix;
|
||
$suffix = $this->ErrorMessageSuffix;
|
||
}
|
||
else
|
||
$prefix = $suffix = '';
|
||
for($invalid_parents=$custom=array(),$error="",$input_number=0;$input_number<count($inputs);$input_number++)
|
||
{
|
||
$field=$inputs[$input_number];
|
||
if(IsSet($this->inputs[$field]["DependentValidation"])
|
||
&& !$this->GetCheckedState($this->inputs[$field]["DependentValidation"]))
|
||
continue;
|
||
if(strcmp($this->inputs[$field]["TYPE"],"custom"))
|
||
{
|
||
if(!IsSet($this->inputs[$field]["DiscardInvalidValues"])
|
||
|| !$this->inputs[$field]["DiscardInvalidValues"])
|
||
{
|
||
$input_error=$this->ValidateInput($field, $this->inputs[$field]["VALUE"], $sub_form);
|
||
if(strlen($input_error))
|
||
{
|
||
if(IsSet($this->inputs[$field]["parent"]))
|
||
{
|
||
$parent=$this->inputs[$field]["parent"];
|
||
$invalid_parents[$parent]=$field;
|
||
$invalid_field=$parent;
|
||
}
|
||
else
|
||
$invalid_field=$field;
|
||
if(strlen($error)==0)
|
||
$error=$prefix.$input_error.$suffix;
|
||
elseif($this->ShowAllErrors)
|
||
$error.=$this->end_of_line.$prefix.$input_error.$suffix;
|
||
$verify[$invalid_field]=$this->FlagInvalidInput($invalid_field, $input_error);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
$custom[]=$field;
|
||
}
|
||
for($input_number=0;$input_number<count($custom);$input_number++)
|
||
{
|
||
$field=$custom[$input_number];
|
||
if(!IsSet($invalid_parents[$field])
|
||
&& (!IsSet($this->inputs[$field]["DiscardInvalidValues"])
|
||
|| !$this->inputs[$field]["DiscardInvalidValues"])
|
||
&& $this->inputs[$field]["ServerValidate"])
|
||
{
|
||
$this->flagged_inputs=array();
|
||
$input_error=$this->inputs[$field]["object"]->ValidateInput($this);
|
||
if(strlen($input_error))
|
||
{
|
||
if(strlen($error)==0)
|
||
$error=$prefix.$input_error.$suffix;
|
||
elseif($this->ShowAllErrors)
|
||
$error.=$this->end_of_line.$prefix.$input_error.$suffix;
|
||
$verify[$field]=$this->FlagInvalidInput($field, $input_error);
|
||
}
|
||
if(count($this->flagged_inputs))
|
||
{
|
||
for($f=0, Reset($this->flagged_inputs); $f<count($this->flagged_inputs); Next($this->flagged_inputs), $f++)
|
||
{
|
||
$i=Key($this->flagged_inputs);
|
||
if(!strcmp($i, $field))
|
||
continue;
|
||
$input_error=$this->Invalid[$i];
|
||
if(strlen($error)==0)
|
||
$error=$this->ErrorMessagePrefix.$input_error.$this->ErrorMessageSuffix;
|
||
elseif($this->ShowAllErrors)
|
||
$error.=$this->end_of_line.$this->ErrorMessagePrefix.$input_error.$this->ErrorMessageSuffix;
|
||
$verify[$i]=$this->flagged_inputs[$i];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return($error);
|
||
}
|
||
|
||
Function LoadInputValue($input, $submitted, $radio, $store = 1, $default = '')
|
||
{
|
||
if((IsSet($this->inputs[$input]["Accessible"]) ? !$this->inputs[$input]["Accessible"] : $this->ReadOnly))
|
||
return($default);
|
||
$name=(IsSet($this->inputs[$input]["NAME"]) ? $this->inputs[$input]["NAME"] : '');
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "submit":
|
||
case "image":
|
||
case "reset":
|
||
case "button":
|
||
return('');
|
||
case "radio":
|
||
if(!$store)
|
||
return($default);
|
||
$radio_value=(IsSet($this->inputs[$input]["VALUE"]) ? $this->inputs[$input]["VALUE"] : "on");
|
||
if($this->IsSetValue($name,0))
|
||
{
|
||
$value=$this->GetValue($name,0);
|
||
if(!strcmp(strtolower($value),strtolower($radio_value)))
|
||
{
|
||
if(!IsSet($this->inputs[$input]["CHECKED"]))
|
||
$this->Changes[$input]="";
|
||
$this->inputs[$input]["CHECKED"]=1;
|
||
}
|
||
else
|
||
{
|
||
if(IsSet($radio[$name][$value]))
|
||
{
|
||
if(IsSet($this->inputs[$input]["CHECKED"]))
|
||
$this->Changes[$input]=$radio_value;
|
||
Unset($this->inputs[$input]["CHECKED"]);
|
||
}
|
||
}
|
||
}
|
||
elseif($submitted
|
||
&& IsSet($this->inputs[$input]["CHECKED"]))
|
||
{
|
||
$this->Changes[$input]=$radio_value;
|
||
Unset($this->inputs[$input]["CHECKED"]);
|
||
}
|
||
break;
|
||
case "checkbox":
|
||
if(!$store)
|
||
return($default);
|
||
$checkbox_value=(IsSet($this->inputs[$input]["VALUE"]) ? $this->inputs[$input]["VALUE"] : "on");
|
||
if(IsSet($this->inputs[$input]["MULTIPLE"]))
|
||
{
|
||
$value=($this->IsSetValue($name,0) ? $this->GetValue($name,0,1) : array());
|
||
if(GetType($value)=="array")
|
||
{
|
||
$checked=0;
|
||
$tv = count($value);
|
||
for($v = 0; $v < $tv; ++$v)
|
||
{
|
||
if(IsSet($value[$v]))
|
||
{
|
||
$item = $value[$v];
|
||
if(GetType($item) == 'string'
|
||
&& !strcmp($item, $checkbox_value))
|
||
{
|
||
$checked=1;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
$checked=$this->IsSetValue($name,0);
|
||
if($checked)
|
||
{
|
||
if(!IsSet($this->inputs[$input]["CHECKED"]))
|
||
$this->Changes[$input]="";
|
||
$this->inputs[$input]["CHECKED"]=1;
|
||
}
|
||
else
|
||
{
|
||
if($submitted)
|
||
{
|
||
if(IsSet($this->inputs[$input]["CHECKED"]))
|
||
$this->Changes[$input]=$checkbox_value;
|
||
Unset($this->inputs[$input]["CHECKED"]);
|
||
}
|
||
}
|
||
break;
|
||
case "select":
|
||
if(IsSet($this->inputs[$input]["MULTIPLE"]))
|
||
{
|
||
if($submitted)
|
||
{
|
||
$selected=array();
|
||
$changes=$this->inputs[$input]["SELECTED"];
|
||
for($value_key=0, Reset($changes); $value_key<count($changes); Next($changes), $value_key++)
|
||
$changes[Key($changes)]=0;
|
||
$value=($this->IsSetValue($name,0) ? $this->GetValue($name,0,1) : array());
|
||
if(GetType($value)=="array")
|
||
{
|
||
for($value_key=0,Reset($value);$value_key<count($value);Next($value),$value_key++)
|
||
{
|
||
$entry_value=$value[Key($value)];
|
||
if(IsSet($this->inputs[$input]["OPTIONS"][$entry_value])
|
||
|| (IsSet($this->inputs[$input]["DiscardInvalidValues"])
|
||
&& !$this->inputs[$input]["DiscardInvalidValues"]))
|
||
{
|
||
if(IsSet($changes[$entry_value]))
|
||
Unset($changes[$entry_value]);
|
||
else
|
||
$changes[$entry_value]=1;
|
||
$selected[$entry_value]=1;
|
||
}
|
||
}
|
||
}
|
||
if($store)
|
||
{
|
||
$this->inputs[$input]["SELECTED"]=$selected;
|
||
if(count($changes)==0)
|
||
Unset($this->Changes[$input]);
|
||
else
|
||
$this->Changes[$input]=$changes;
|
||
}
|
||
else
|
||
return($selected);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$previous_value=$this->inputs[$input]["VALUE"];
|
||
if($this->IsSetValue($name,0))
|
||
{
|
||
$value=$this->GetValue($name,0);
|
||
if(IsSet($this->inputs[$input]["OPTIONS"][$value])
|
||
|| (IsSet($this->inputs[$input]["DiscardInvalidValues"])
|
||
&& !$this->inputs[$input]["DiscardInvalidValues"]))
|
||
{
|
||
if($store)
|
||
$this->inputs[$input]["VALUE"]=$value;
|
||
else
|
||
return($value);
|
||
}
|
||
}
|
||
if(strcmp($this->inputs[$input]["VALUE"],$previous_value))
|
||
$this->Changes[$input]=$previous_value;
|
||
}
|
||
break;
|
||
case "custom":
|
||
break;
|
||
default:
|
||
if($this->IsSetValue($name,$this->inputs[$input]["TYPE"]=="file"))
|
||
{
|
||
$value=$this->GetValue($name,$this->inputs[$input]["TYPE"]=="file");
|
||
switch(GetType($value))
|
||
{
|
||
case "string":
|
||
case "integer":
|
||
case "double":
|
||
case "boolean":
|
||
$set_value=0;
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "text":
|
||
case "file":
|
||
case "password":
|
||
if(IsSet($this->inputs[$input]["MAXLENGTH"]))
|
||
{
|
||
|
||
$max_length=$this->inputs[$input]["MAXLENGTH"];
|
||
if(strlen($value)>$max_length)
|
||
{
|
||
$value=substr($value,0,$max_length);
|
||
$set_value=1;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
if(IsSet($this->inputs[$input]["Capitalization"]))
|
||
{
|
||
switch($this->inputs[$input]["Capitalization"])
|
||
{
|
||
case "uppercase":
|
||
$function=$this->toupper_function;
|
||
$value=$function($value);
|
||
$set_value=1;
|
||
break;
|
||
case "lowercase":
|
||
$function=$this->tolower_function;
|
||
$value=$function($value);
|
||
$set_value=1;
|
||
break;
|
||
case "words":
|
||
$lower_function=$this->tolower_function;
|
||
$upper_function=$this->toupper_function;
|
||
for($word=1,$position=0;$position<strlen($value);$position++)
|
||
{
|
||
switch($character=$value[$position])
|
||
{
|
||
case " ":
|
||
case "\t":
|
||
case "\n":
|
||
case "\r":
|
||
$word=1;
|
||
break;
|
||
default:
|
||
$value[$position]=($word ? $upper_function($character) : $lower_function($character));
|
||
$word=0;
|
||
break;
|
||
}
|
||
}
|
||
$set_value=1;
|
||
break;
|
||
}
|
||
}
|
||
if(IsSet($this->inputs[$input]["ReplacePatterns"])
|
||
&& count($this->inputs[$input]["ReplacePatterns"])
|
||
&& !IsSet($this->inputs[$input]["ReplacePatternsOnlyOnClientSide"]))
|
||
{
|
||
for($pattern=0,Reset($this->inputs[$input]["ReplacePatterns"]);$pattern<count($this->inputs[$input]["ReplacePatterns"]);Next($this->inputs[$input]["ReplacePatterns"]),$pattern++)
|
||
{
|
||
$expression=Key($this->inputs[$input]["ReplacePatterns"]);
|
||
$value=preg_replace('/'.str_replace('/', '\\/', $expression).'/',$this->inputs[$input]['ReplacePatterns'][$expression], $value);
|
||
$set_value=1;
|
||
}
|
||
}
|
||
if($store)
|
||
{
|
||
if(IsSet($this->inputs[$input]["DiscardInvalidValues"])
|
||
&& $this->inputs[$input]["DiscardInvalidValues"])
|
||
{
|
||
$input_error=$this->ValidateInput($input,$value);
|
||
if(strlen($input_error))
|
||
{
|
||
if(IsSet($this->inputs[$input]["VALUE"]))
|
||
$this->SetValue($name,$this->inputs[$input]["VALUE"]);
|
||
break;
|
||
}
|
||
}
|
||
$previous_value=(IsSet($this->inputs[$input]["VALUE"]) ? $this->inputs[$input]["VALUE"] : "");
|
||
if(strcmp($value,$previous_value))
|
||
$this->Changes[$input]=$previous_value;
|
||
$this->inputs[$input]["VALUE"]=$value;
|
||
if($set_value)
|
||
$this->SetValue($name,$value);
|
||
}
|
||
else
|
||
return($value);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return($default);
|
||
}
|
||
|
||
Function LoadInputValues($submitted=0)
|
||
{
|
||
for($radio=array(),$input_number=0,Reset($this->inputs);$input_number<count($this->inputs);Next($this->inputs),$input_number++)
|
||
{
|
||
$key=Key($this->inputs);
|
||
if(!strcmp($this->inputs[$key]["TYPE"],"radio"))
|
||
{
|
||
$name=$this->inputs[$key]["NAME"];
|
||
$value=(IsSet($this->inputs[$key]["VALUE"]) ? $this->inputs[$key]["VALUE"] : "on");
|
||
if(IsSet($radio[$name]))
|
||
$radio[$name][$value]=$key;
|
||
else
|
||
$radio[$name]=array($value=>$key);
|
||
}
|
||
}
|
||
for($custom=$this->Changes=array(),$input_number=0,Reset($this->inputs);$input_number<count($this->inputs);Next($this->inputs),$input_number++)
|
||
{
|
||
$key=Key($this->inputs);
|
||
if(strcmp($this->inputs[$key]['TYPE'], 'custom'))
|
||
$this->LoadInputValue($key, $submitted, $radio);
|
||
else
|
||
$custom[]=$key;
|
||
}
|
||
$tc = count($custom);
|
||
for($i = 0; $i < $tc; ++$i)
|
||
if(strlen($error = $this->inputs[$custom[$i]]["object"]->LoadInputValues($this, $submitted)))
|
||
return($error);
|
||
return('');
|
||
}
|
||
|
||
Function GetSubmittedValue($input, $default='')
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError('it was not specified a valid input', $input);
|
||
return($default);
|
||
}
|
||
return($this->LoadInputValue($input, 1, array(), 0, $default));
|
||
}
|
||
|
||
Function SetSelectOptions($input, $options, $selected)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "select":
|
||
if(!IsSet($this->inputs[$input]["MULTIPLE"]))
|
||
{
|
||
if(GetType($selected)!="array"
|
||
|| count($selected)!=1
|
||
|| !IsSet($selected[0]))
|
||
return($this->OutputError("it was not specified an array with a single selected value",$input));
|
||
$selected=$selected[0];
|
||
}
|
||
return($this->SetSelectedOptions($input, $this->inputs[$input], $options, $selected));
|
||
case "custom":
|
||
if(strlen($error=$this->inputs[$input]["object"]->SetSelectOptions($this, $options, $selected)))
|
||
return($this->OutputError($error,$input));
|
||
return("");
|
||
default:
|
||
return($this->OutputError("it was not specified a valid input to set its options",$property));
|
||
}
|
||
}
|
||
|
||
Function SetInputProperty($input,$property,$value)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
switch($property)
|
||
{
|
||
case "ApplicationData":
|
||
$this->inputs[$input][$property]=$value;
|
||
return("");
|
||
}
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom"))
|
||
{
|
||
if(strlen($error=$this->inputs[$input]["object"]->SetInputProperty($this, $property, $value)))
|
||
$this->OutputError($error,$input);
|
||
return("");
|
||
}
|
||
switch($property)
|
||
{
|
||
case "ONBLUR":
|
||
case "ONCHANGE":
|
||
case "ONCLICK":
|
||
case "ONDBLCLICK":
|
||
case "ONFOCUS":
|
||
case "ONKEYDOWN":
|
||
case "ONKEYPRESS":
|
||
case "ONKEYUP":
|
||
case "ONMOUSEDOWN":
|
||
case "ONMOUSEMOVE":
|
||
case "ONMOUSEOUT":
|
||
case "ONMOUSEOVER":
|
||
case "ONMOUSEUP":
|
||
case "ONSELECT":
|
||
$this->inputs[$input]["EVENTS"][$property]=$value;
|
||
return("");
|
||
case "ValidationServerFunctionErrorMessage":
|
||
if(!IsSet($this->inputs[$input]["ValidationServerFunction"]))
|
||
return($this->OutputError("this input is not set to validate on the server side with a custom function",$property));
|
||
break;
|
||
case "ACCEPT":
|
||
case "ALT":
|
||
case "SRC":
|
||
case "Accessible":
|
||
case "Capitalization":
|
||
case "ClientScript":
|
||
case "LABEL":
|
||
case "SubForm":
|
||
case "STYLE":
|
||
case "CLASS":
|
||
case "ReadOnlyMark":
|
||
case "ReadOnlyMarkUnchecked":
|
||
case "Content":
|
||
break;
|
||
case "DependentValidation":
|
||
if(!IsSet($this->inputs[$value]))
|
||
return($this->OutputError("it was specified dependent validation input ".$value." that is not defined",$input));
|
||
$this->inputs[$input]["DependentValidation"] = $value;
|
||
break;
|
||
case "COLS":
|
||
case "MAXLENGTH":
|
||
case "ROWS":
|
||
case "SIZE":
|
||
case "TABINDEX":
|
||
$value=intval($value);
|
||
break;
|
||
case "VALUE":
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"select"))
|
||
return($this->SetSelectOptions($input, $this->inputs[$input]['OPTIONS'], IsSet($this->inputs[$input]["MULTIPLE"]) ? $value : array($value)));
|
||
break;
|
||
case "ExtraAttributes":
|
||
if(GetType($value) != 'array')
|
||
return($this->OutputError("it was not specified a valid array to set the input property",$property));
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not specified a valid settable input property",$property));
|
||
}
|
||
$this->inputs[$input][$property]=$value;
|
||
return("");
|
||
}
|
||
|
||
Function SetInputValue($input,$value)
|
||
{
|
||
return($this->SetInputProperty($input,"VALUE",$value));
|
||
}
|
||
|
||
Function GetInputValue($input)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "custom":
|
||
return($this->inputs[$input]["object"]->GetInputValue($this));
|
||
case "select":
|
||
if(IsSet($this->inputs[$input]["MULTIPLE"]))
|
||
{
|
||
$value=array();
|
||
for(Reset($this->inputs[$input]["SELECTED"]),$selected=0;$selected<count($this->inputs[$input]["SELECTED"]);Next($this->inputs[$input]["SELECTED"]),$selected++)
|
||
$value[]=Key($this->inputs[$input]["SELECTED"]);
|
||
return($value);
|
||
}
|
||
default:
|
||
return(IsSet($this->inputs[$input]["VALUE"]) ? $this->inputs[$input]["VALUE"] : "");
|
||
}
|
||
}
|
||
|
||
Function GetInputProperty($input, $property, &$value)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input",$input));
|
||
switch($property)
|
||
{
|
||
case "VALUE":
|
||
$value=$this->GetInputValue($input);
|
||
return("");
|
||
case "TYPE":
|
||
case "ApplicationData":
|
||
$value=$this->inputs[$input][$property];
|
||
return("");
|
||
default:
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "custom":
|
||
$error = $this->inputs[$input]["object"]->GetInputProperty($this, $property, $value);
|
||
if(strlen($error))
|
||
return($this->OutputError($error, $input));
|
||
return($error);
|
||
case "select":
|
||
switch($property)
|
||
{
|
||
case "SelectedOption":
|
||
if(!IsSet($this->inputs[$input]["MULTIPLE"])
|
||
&& IsSet($this->inputs[$input]["VALUE"]))
|
||
{
|
||
$value=$this->inputs[$input]["OPTIONS"][$this->inputs[$input]["VALUE"]];
|
||
return("");
|
||
}
|
||
return($this->OutputError("GetInputProperty is not implemented for form input property ".$property,$input));
|
||
}
|
||
default:
|
||
switch($property)
|
||
{
|
||
case 'LABEL':
|
||
if(IsSet($this->inputs[$input]["LABEL"]))
|
||
$value=$this->inputs[$input]["LABEL"];
|
||
else
|
||
Unset($value);
|
||
return("");
|
||
}
|
||
return($this->OutputError("GetInputProperty is not implemented for form input property ".$property,$input));
|
||
}
|
||
}
|
||
}
|
||
|
||
Function GetJavascriptInputObject($form_object, $input)
|
||
{
|
||
return($form_object."[".$this->EncodeJavascriptString($input)."]");
|
||
}
|
||
|
||
Function GetJavascriptInputValue($form_object, $input)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError("it was not passed a valid input", $input);
|
||
return("");
|
||
}
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "select":
|
||
if(strlen($field=$this->GetJavascriptInputObject($form_object, $input))==0)
|
||
return("");
|
||
return($field.".options[".$field.".selectedIndex].value");
|
||
case "custom":
|
||
if(strlen($javascript=$this->inputs[$input]["object"]->GetJavascriptInputValue($this, $form_object)))
|
||
return($javascript);
|
||
$this->OutputError("could not retrieve the Javascript input value", $input);
|
||
return("");
|
||
default:
|
||
if(strlen($field=$this->GetJavascriptInputObject($form_object, $input))==0)
|
||
return("");
|
||
return($field.".value");
|
||
}
|
||
}
|
||
|
||
Function GetJavascriptSelectedOption($form_object, $input)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError("it was not passed a valid input", $input);
|
||
return("");
|
||
}
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "select":
|
||
if(strlen($field=$this->GetJavascriptInputObject($form_object, $input))==0)
|
||
return("");
|
||
return($field.".options[".$field.".selectedIndex].text");
|
||
case "custom":
|
||
if(strlen($javascript=$this->inputs[$input]["object"]->GetJavascriptSelectedOption($this, $form_object)))
|
||
return($javascript);
|
||
$this->OutputError("could not retrieve the Javascript input selected option", $input);
|
||
return("");
|
||
default:
|
||
$this->OutputError("it was not passed a valid selected input option", $input);
|
||
return("");
|
||
}
|
||
}
|
||
|
||
Function GetJavascriptSetInputProperty($form_object, $input, $property, $value)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError('it was not specified a valid input', $input);
|
||
return("");
|
||
}
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "custom":
|
||
if(strlen($javascript=$this->inputs[$input]["object"]->GetJavascriptSetInputProperty($this, $form_object, $property, $value)))
|
||
return($javascript);
|
||
$this->OutputError("could not retrieve the Javascript for setting the property ".$property, $input);
|
||
return("");
|
||
case "select":
|
||
default:
|
||
if(strcmp($property,"VALUE"))
|
||
{
|
||
$this->OutputError("it setting this input ".$property." value is not yet supported", $input);
|
||
return("");
|
||
}
|
||
if(strlen($field=$this->GetJavascriptInputObject($form_object, $input))==0)
|
||
return("");
|
||
return($field.".value=".$value.";");
|
||
}
|
||
}
|
||
|
||
Function GetJavascriptSetInputValue($form_object, $input, $value)
|
||
{
|
||
return($this->GetJavascriptSetInputProperty($form_object, $input, "VALUE", $value));
|
||
}
|
||
|
||
Function GetJavascriptSetFormProperty($form_object, $property, $value)
|
||
{
|
||
switch($property)
|
||
{
|
||
case "SubForm":
|
||
return($this->sub_form_variable_name."=".$value);
|
||
default:
|
||
$this->OutputError($property." is not a valid form property to set", "");
|
||
return("");
|
||
}
|
||
}
|
||
|
||
Function SetCheckedState($input,$checked)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input to set the checked state",$input));
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "radio":
|
||
case "checkbox":
|
||
if($checked)
|
||
$this->inputs[$input]["CHECKED"]=1;
|
||
else
|
||
Unset($this->inputs[$input]["CHECKED"]);
|
||
break;
|
||
case "custom":
|
||
if(strlen($error=$this->inputs[$input]["object"]->SetCheckedState($this, $checked)))
|
||
return($this->OutputError($error,$input));
|
||
break;
|
||
default:
|
||
return($this->OutputError("it was not specified a valid type of input to set the checked state",$input));
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function GetJavascriptSetCheckedState($form_object, $input, $checked)
|
||
{
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "radio":
|
||
case "checkbox":
|
||
if(strlen($field=$this->GetJavascriptInputObject($form_object, $input))==0)
|
||
return("");
|
||
return($field.".checked=".$checked.";");
|
||
case "custom":
|
||
if(strlen($javascript=$this->inputs[$input]["object"]->GetJavascriptSetCheckedState($this, $form_object, $checked)))
|
||
return($javascript);
|
||
$this->OutputError("could not retrieve the Javascript for setting the checked state ", $input);
|
||
return("");
|
||
default:
|
||
$this->OutputError("it is not possible to set the checked state of inputs of type ".$this->inputs[$input]["TYPE"], $input);
|
||
return("");
|
||
}
|
||
}
|
||
|
||
Function GetCheckedState($input)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input to check the state",$input));
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "radio":
|
||
case "checkbox":
|
||
return(IsSet($this->inputs[$input]["CHECKED"]));
|
||
case "custom":
|
||
return($this->inputs[$input]["object"]->GetCheckedState($this));
|
||
default:
|
||
return($this->OutputError("it was not specified a valid type of input to get the checked state",$input));
|
||
}
|
||
}
|
||
|
||
Function GetJavascriptCheckedState($form_object, $input)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError("it was not specified a valid input to get the Javascript check the state", $input);
|
||
return('');
|
||
}
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "checkbox":
|
||
case "radio":
|
||
if(strlen($field=$this->GetJavascriptInputObject($form_object, $input))==0)
|
||
return("");
|
||
return($field.".checked");
|
||
case "custom":
|
||
if(strlen($javascript=$this->inputs[$input]["object"]->GetJavascriptCheckedState($this, $form_object)))
|
||
return($javascript);
|
||
$this->OutputError("could not retrieve the Javascript input checked state", $input);
|
||
return("");
|
||
default:
|
||
$this->OutputError("it is not possible to get the checked state of inputs of type ".$this->inputs[$input]["TYPE"], $input);
|
||
return("");
|
||
}
|
||
}
|
||
|
||
Function SetCheckedRadio($name, $value)
|
||
{
|
||
for($radio="", $i=0, Reset($this->inputs); $i < count($this->inputs) ; $i++, Next($this->inputs))
|
||
{
|
||
$input=Key($this->inputs);
|
||
if(IsSet($this->inputs[$input]["NAME"])
|
||
&& !strcmp($this->inputs[$input]["NAME"],$name))
|
||
{
|
||
if(strcmp($this->inputs[$input]["TYPE"], "radio"))
|
||
{
|
||
$this->OutputError("the input of NAME \"".$name."\" is not a valid radio input");
|
||
return("");
|
||
}
|
||
if(strcmp($this->inputs[$input]["VALUE"], $value))
|
||
Unset($this->inputs[$input]["CHECKED"]);
|
||
else
|
||
{
|
||
$radio = $input;
|
||
$this->inputs[$input]["CHECKED"]=1;
|
||
}
|
||
}
|
||
}
|
||
if(strlen($radio)==0)
|
||
$this->OutputError("there is no radio input with NAME \"".$name."\" and value \"".$value."\"");
|
||
return($radio);
|
||
}
|
||
|
||
Function GetCheckedRadio($name)
|
||
{
|
||
for($i=0, Reset($this->inputs); $i < count($this->inputs) ; $i++, Next($this->inputs))
|
||
{
|
||
$input=Key($this->inputs);
|
||
if(IsSet($this->inputs[$input]["NAME"])
|
||
&& !strcmp($this->inputs[$input]["NAME"],$name))
|
||
{
|
||
if($this->inputs[$input]["TYPE"]!="radio")
|
||
{
|
||
$this->OutputError("the input of NAME \"$name\" is not a valid radio input");
|
||
return("");
|
||
}
|
||
if(IsSet($this->inputs[$input]["CHECKED"]))
|
||
return($input);
|
||
}
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function GetCheckedRadioValue($name,$default="")
|
||
{
|
||
return(strlen($input=$this->GetCheckedRadio($name)) ? $this->inputs[$input]["VALUE"] : $default);
|
||
}
|
||
|
||
Function GetJavascriptCheckedRadioValue($form_object, $name, $default = '')
|
||
{
|
||
for($value = $this->EncodeJavascriptString($default), $i=0, Reset($this->inputs); $i < count($this->inputs) ; $i++, Next($this->inputs))
|
||
{
|
||
$input=Key($this->inputs);
|
||
if(IsSet($this->inputs[$input]['NAME'])
|
||
&& !strcmp($this->inputs[$input]['NAME'], $name))
|
||
{
|
||
if($this->inputs[$input]['TYPE']!='radio')
|
||
{
|
||
$this->OutputError('the input with NAME "'.$name.'" is not a valid radio input');
|
||
return("");
|
||
}
|
||
$object = $this->GetJavascriptInputObject($form_object, $input);
|
||
$value = $object.'.checked ? '.$object.'.value : ('.$value.')';
|
||
}
|
||
}
|
||
return('('.$value.')');
|
||
}
|
||
|
||
Function GetCheckable($input, &$checkable)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid input to determine if it is checkable", $input));
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "radio":
|
||
case "checkbox":
|
||
$checkable = 1;
|
||
break;
|
||
case "custom":
|
||
return($this->inputs[$input]["object"]->GetCheckable($this, $checkable));
|
||
default:
|
||
$checkable = 0;
|
||
break;
|
||
}
|
||
return('');
|
||
}
|
||
|
||
Function ResetFormParts()
|
||
{
|
||
for($input=0,Reset($this->inputs);$input<count($this->inputs);Next($this->inputs),$input++)
|
||
{
|
||
$input_name=Key($this->inputs);
|
||
Unset($this->inputs[$input_name]["InputElement"]);
|
||
Unset($this->inputs[$input_name]["Part"]);
|
||
}
|
||
$this->parts=$this->types=$this->input_parts=$this->input_elements=$this->functions=$this->label_access_keys=array();
|
||
$this->client_validate=0;
|
||
$this->hidden_parts=$this->accessible_parts=$this->file_parts=0;
|
||
}
|
||
|
||
Function AddHiddenInputs($inputs)
|
||
{
|
||
for($input=0,Reset($inputs);$input<count($inputs);Next($inputs),$input++)
|
||
{
|
||
$name=Key($inputs);
|
||
if(strcmp($error=$this->AddInput(array(
|
||
"TYPE"=>"hidden",
|
||
"NAME"=>$name,
|
||
"VALUE"=>$inputs[$name]
|
||
)),""))
|
||
return($error);
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function AddHiddenInputsParts($inputs)
|
||
{
|
||
for($input=0,Reset($inputs);$input<count($inputs);Next($inputs),$input++)
|
||
{
|
||
$name=Key($inputs);
|
||
if(strcmp($error=$this->SetInputValue($name,$inputs[$name]),"")
|
||
|| strcmp($error=$this->AddInputHiddenPart($name),""))
|
||
return($error);
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function WasSubmitted($input="")
|
||
{
|
||
if(strcmp($input,""))
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
{
|
||
$this->OutputError("it was not specified an existing input",$input);
|
||
return("");
|
||
}
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom"))
|
||
return($this->inputs[$input]["object"]->WasSubmitted($this, $input));
|
||
$name=(IsSet($this->inputs[$input]["NAME"]) ? $this->inputs[$input]["NAME"] : $input);
|
||
if($this->inputs[$input]["TYPE"]=="image")
|
||
return(($this->IsSetValue($name."_x",0) && $this->IsSetValue($name."_y",0)) ? $input : "");
|
||
return($this->IsSetValue($name,$this->inputs[$input]["TYPE"]=="file") ? $input : "");
|
||
}
|
||
for($field=0,Reset($this->inputs);$field<count($this->inputs);Next($this->inputs),$field++)
|
||
{
|
||
$input=Key($this->inputs);
|
||
if(IsSet($this->inputs[$input]['IgnoreAnonymousSubmitCheck']))
|
||
continue;
|
||
$name=(IsSet($this->inputs[$input]["NAME"]) ? $this->inputs[$input]["NAME"] : $input);
|
||
switch($this->inputs[$input]["TYPE"])
|
||
{
|
||
case "submit":
|
||
if($this->IsSetValue($name,0))
|
||
return($input);
|
||
break;
|
||
case "image":
|
||
if($this->IsSetValue($name."_x",0)
|
||
&& $this->IsSetValue($name."_y",0))
|
||
return($input);
|
||
break;
|
||
case "custom":
|
||
if(strlen($submitted=$this->inputs[$input]["object"]->WasSubmitted($this, '')))
|
||
return($submitted);
|
||
break;
|
||
}
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function StartLayoutCapture()
|
||
{
|
||
if($this->capturing)
|
||
return($this->OutputError("the form layout is already being captured","StartLayoutCapture"));
|
||
if(!$this->capturing=ob_start())
|
||
return($this->OutputError("could not start capturing the form layout","StartLayoutCapture"));
|
||
return("");
|
||
}
|
||
|
||
Function EndLayoutCapture()
|
||
{
|
||
if(!$this->capturing)
|
||
return($this->OutputError("the form layout was not being captured","EndLayoutCapture"));
|
||
$data=ob_get_contents();
|
||
ob_end_clean();
|
||
$this->capturing=0;
|
||
$this->AddDataPart($data);
|
||
return("");
|
||
}
|
||
|
||
Function FetchOutput()
|
||
{
|
||
global $form_output;
|
||
|
||
$form_output="";
|
||
$arguments=array(
|
||
"Function"=>"FormAppendOutput",
|
||
"EndOfLine"=>$this->end_of_line
|
||
);
|
||
return(strlen($this->OutputError($this->Output($arguments))) ? "" : $form_output);
|
||
}
|
||
|
||
Function DisplayOutput()
|
||
{
|
||
$arguments=array(
|
||
"Function"=>"FormDisplayOutput",
|
||
"EndOfLine"=>$this->end_of_line
|
||
);
|
||
return($this->Output($arguments));
|
||
}
|
||
|
||
Function GetInputEventURL($input,$event,$parameters,&$url)
|
||
{
|
||
if(strlen($action=$this->ACTION)==0)
|
||
{
|
||
if(GetType($mark=strpos($uri=GetEnv('REQUEST_URI'),"?"))=="integer")
|
||
$action=substr($uri, $mark);
|
||
}
|
||
$url=$action.(GetType(strpos($action,"?"))=="integer" ? "&" : "?").UrlEncode($this->event_parameter)."=".UrlEncode($event)."&".UrlEncode($this->input_parameter)."=".UrlEncode($input);
|
||
for($parameter=0, Reset($parameters) ; $parameter<count($parameters); $parameter++, Next($parameters))
|
||
{
|
||
$key=Key($parameters);
|
||
$url.=("&".UrlEncode($key)."=".UrlEncode($parameters[$key]));
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function HandleEvent(&$processed)
|
||
{
|
||
global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_SERVER_VARS;
|
||
|
||
$processed=0;
|
||
if(!$this->IsSetValue($this->event_parameter,0)
|
||
|| !$this->IsSetValue($this->input_parameter,0))
|
||
return("");
|
||
$input=$this->GetValue($this->input_parameter,0);
|
||
$event=$this->GetValue($this->event_parameter,0);
|
||
if(!IsSet($this->inputs[$input])
|
||
|| strcmp($this->inputs[$input]["TYPE"],"custom"))
|
||
return("");
|
||
if(!IsSet($this->register_globals))
|
||
$this->DetectRegisterVariables();
|
||
switch(IsSet($_SERVER["REQUEST_METHOD"]) ? $_SERVER["REQUEST_METHOD"] : (($this->register_long_arrays && IsSet($HTTP_SERVER_VARS["REQUEST_METHOD"])) ? $HTTP_SERVER_VARS["REQUEST_METHOD"] : ""))
|
||
{
|
||
case "POST":
|
||
if(IsSet($_POST))
|
||
{
|
||
$parameters=$_POST;
|
||
break;
|
||
}
|
||
elseif($this->register_long_arrays
|
||
&& IsSet($HTTP_POST_VARS))
|
||
{
|
||
$parameters=$HTTP_POST_VARS;
|
||
break;
|
||
}
|
||
case "GET":
|
||
if(IsSet($_GET))
|
||
{
|
||
$parameters=$_GET;
|
||
break;
|
||
}
|
||
elseif($this->register_long_arrays
|
||
&& IsSet($HTTP_GET_VARS))
|
||
{
|
||
$parameters=$HTTP_GET_VARS;
|
||
break;
|
||
}
|
||
default:
|
||
$parameters=array();
|
||
break;
|
||
}
|
||
if(strlen($error=$this->inputs[$input]["object"]->HandleEvent($this, $event, $parameters, $processed)))
|
||
{
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
if($processed)
|
||
{
|
||
$this->was_processed = 1;
|
||
return("");
|
||
}
|
||
$error = $this->PostInputMessages($processed);
|
||
if($processed)
|
||
$this->was_processed = 1;
|
||
elseif($this->was_processed)
|
||
$processed = 1;
|
||
return($error);
|
||
}
|
||
|
||
Function Connect($from, $to, $event, $action, $context)
|
||
{
|
||
if(!IsSet($this->inputs[$from]))
|
||
return($this->OutputError("it was not specified a valid event connection origin input",$from));
|
||
if(!IsSet($this->inputs[$to]))
|
||
return($this->OutputError("it was not specified a valid event connection destination input",$to));
|
||
if(strcmp($this->inputs[$from]["TYPE"],"custom"))
|
||
{
|
||
switch($event)
|
||
{
|
||
case "ONBLUR":
|
||
case "ONCHANGE":
|
||
case "ONCLICK":
|
||
case "ONDBLCLICK":
|
||
case "ONFOCUS":
|
||
case "ONKEYDOWN":
|
||
case "ONKEYPRESS":
|
||
case "ONKEYUP":
|
||
case "ONMOUSEDOWN":
|
||
case "ONMOUSEMOVE":
|
||
case "ONMOUSEOUT":
|
||
case "ONMOUSEOVER":
|
||
case "ONMOUSEUP":
|
||
case "ONSELECT":
|
||
break;
|
||
default:
|
||
return($this->OutputError($event." is not a supported event connection type",$from));
|
||
}
|
||
if(!IsSet($this->inputs[$from]["Connections"]))
|
||
$this->inputs[$from]["Connections"][$event]=array();
|
||
$this->inputs[$from]["Connections"][$event][]=array(
|
||
"To"=>$to,
|
||
"Action"=>$action,
|
||
"Context"=>$context
|
||
);
|
||
if(!IsSet($this->inputs[$from]["EVENTS"][$event]))
|
||
$this->inputs[$from]["EVENTS"][$event]="";
|
||
return("");
|
||
}
|
||
else
|
||
{
|
||
if(strlen($error=$this->inputs[$from]["object"]->Connect($this, $to, $event, $action, $context)))
|
||
$this->OutputError($error, $to);
|
||
return($error);
|
||
}
|
||
}
|
||
|
||
Function ConnectFormToInput($input, $event, $action, $context)
|
||
{
|
||
if(!IsSet($this->inputs[$input]))
|
||
return($this->OutputError("it was not specified a valid event connection destination input", $input));
|
||
switch($event)
|
||
{
|
||
case "ONSUBMITTING":
|
||
case "ONSUBMIT":
|
||
case "ONRESET":
|
||
case "ONLOAD":
|
||
case "ONUNLOAD":
|
||
case "ONERROR":
|
||
break;
|
||
default:
|
||
return($this->OutputError($event." is not a supported event connection type", $input));
|
||
}
|
||
if(!IsSet($this->connections))
|
||
$this->connections[$event]=array();
|
||
$this->connections[$event][]=array(
|
||
"To"=>$input,
|
||
"Action"=>$action,
|
||
"Context"=>$context
|
||
);
|
||
return("");
|
||
}
|
||
|
||
Function PostMessage($message)
|
||
{
|
||
if(IsSet($message["Target"]))
|
||
{
|
||
$target=$message["Target"];
|
||
if(!IsSet($this->inputs[$target])
|
||
|| strcmp($this->inputs[$target]["TYPE"],"custom"))
|
||
return($this->OutputError("it was not specified a valid posted message target input",$target));
|
||
if(count($this->messages) == 0)
|
||
{
|
||
$this->messages[]=$message;
|
||
if(strlen($error = $this->PostInputMessages($processed)))
|
||
return($error);
|
||
if($processed)
|
||
$this->was_processed = 1;
|
||
}
|
||
}
|
||
$this->messages[]=$message;
|
||
return("");
|
||
}
|
||
|
||
Function PostInputMessages(&$processed)
|
||
{
|
||
if($this->was_processed)
|
||
$processed = 1;
|
||
if($processed)
|
||
return('');
|
||
while(count($this->messages))
|
||
{
|
||
Reset($this->messages);
|
||
$first = Key($this->messages);
|
||
if(!IsSet($this->messages[$first]["Target"]))
|
||
return("");
|
||
$target=$this->messages[$first]["Target"];
|
||
$message = $this->messages[$first];
|
||
UnSet($this->messages[$first]);
|
||
if(!IsSet($this->inputs[$target])
|
||
|| strcmp($this->inputs[$target]["TYPE"],"custom"))
|
||
return($this->OutputError("it was not specified a valid posted message target input",$target));
|
||
if(strlen($error=$this->inputs[$target]["object"]->PostMessage($this, $message, $processed)))
|
||
{
|
||
$this->OutputError($error, $target);
|
||
return($error);
|
||
}
|
||
if($this->was_processed)
|
||
$processed = 1;
|
||
elseif($processed)
|
||
$this->was_processed = 1;
|
||
if($processed)
|
||
return("");
|
||
}
|
||
return("");
|
||
}
|
||
|
||
Function GetNextMessage(&$message)
|
||
{
|
||
if(count($this->messages)==0)
|
||
return(0);
|
||
Reset($this->messages);
|
||
$first = Key($this->messages);
|
||
$message = $this->messages[$first];
|
||
UnSet($this->messages[$first]);
|
||
return(1);
|
||
}
|
||
|
||
Function ReplyMessage($message, &$processed)
|
||
{
|
||
if(!IsSet($message["ReplyTo"]))
|
||
return($this->OutputError("the message did not specify the reply destination input"));
|
||
$input=$message["ReplyTo"];
|
||
if(strcmp($this->inputs[$input]["TYPE"],"custom"))
|
||
return($this->OutputError("the message reply destination is not custom input", $input));
|
||
if(strlen($error=$this->inputs[$input]["object"]->ReplyMessage($this, $message, $processed)))
|
||
{
|
||
$this->OutputError($error,$input);
|
||
return($error);
|
||
}
|
||
if($processed)
|
||
return("");
|
||
return($this->PostInputMessages($processed));
|
||
}
|
||
|
||
Function PageHead()
|
||
{
|
||
$t=count($this->inputs);
|
||
for($i=array(), $f=0, Reset($this->inputs); $f<$t; Next($this->inputs),$f++)
|
||
{
|
||
$input=Key($this->inputs);
|
||
if(!strcmp($this->inputs[$input]["TYPE"],"custom"))
|
||
$i[]=$input;
|
||
}
|
||
$t=count($i);
|
||
for($classes=array(), $h="", $f=0; $f<$t; $f++)
|
||
{
|
||
$input=$i[$f];
|
||
$custom_class=$this->inputs[$input]["object"]->custom_class;
|
||
if(!IsSet($classes[$custom_class]))
|
||
{
|
||
$h.=$this->inputs[$input]["object"]->ClassPageHead($this);
|
||
$classes[$custom_class]="";
|
||
}
|
||
$h.=$this->inputs[$input]["object"]->PageHead($this);
|
||
}
|
||
return($h);
|
||
}
|
||
|
||
Function PageLoad()
|
||
{
|
||
$t=count($this->inputs);
|
||
for($i=array(), $f=0, Reset($this->inputs); $f<$t; Next($this->inputs),$f++)
|
||
{
|
||
$c=Key($this->inputs);
|
||
if(!strcmp($this->inputs[$c]["TYPE"],"custom"))
|
||
$i[]=$c;
|
||
}
|
||
$t=count($i);
|
||
for($l="", $f=0; $f<$t; $f++)
|
||
{
|
||
$c=$i[$f];
|
||
$input_prolog=$this->inputs[$c]["object"]->PageLoad($this);
|
||
$l.=$input_prolog;
|
||
}
|
||
if(IsSet($this->connections['ONLOAD'])
|
||
&& count($this->connections['ONLOAD']))
|
||
{
|
||
$form_object=$this->GetFormObject();
|
||
if(strlen($form_object))
|
||
{
|
||
if(strlen($a=$this->GetFormEventActions($form_object, 'ONLOAD')))
|
||
{
|
||
if(strlen($l))
|
||
{
|
||
if(strcmp($l[strlen($l)-1],';'))
|
||
$l.=';';
|
||
$l.=' ';
|
||
}
|
||
$l.=$a;
|
||
}
|
||
}
|
||
else
|
||
$this->OutputError("it was not possible to define a form object expression to generate page load actions", '');
|
||
}
|
||
return($l);
|
||
}
|
||
|
||
Function PageUnload()
|
||
{
|
||
$t=count($this->inputs);
|
||
for($i=array(), $f=0, Reset($this->inputs); $f<$t; Next($this->inputs),$f++)
|
||
{
|
||
$c=Key($this->inputs);
|
||
if(!strcmp($this->inputs[$c]["TYPE"],"custom"))
|
||
$i[]=$c;
|
||
}
|
||
$t=count($i);
|
||
for($u="", $f=0; $f<$t; $f++)
|
||
{
|
||
$c=$i[$f];
|
||
$input_prolog=$this->inputs[$c]["object"]->PageUnload($this);
|
||
$u.=$input_prolog;
|
||
}
|
||
if(IsSet($this->connections['ONUNLOAD'])
|
||
&& count($this->connections['ONUNLOAD']))
|
||
{
|
||
$form_object=$this->GetFormObject();
|
||
if(strlen($form_object))
|
||
{
|
||
if(strlen($a=$this->GetFormEventActions($form_object, 'ONUNLOAD')))
|
||
{
|
||
if(strlen($u))
|
||
{
|
||
if(strcmp($u[strlen($u)-1],';'))
|
||
$u.=';';
|
||
$u.=' ';
|
||
}
|
||
$u.=$a;
|
||
}
|
||
}
|
||
else
|
||
$this->OutputError("it was not possible to define a form object expression to generate page unload actions", '');
|
||
}
|
||
return($u);
|
||
}
|
||
|
||
Function GetInputs($parent = '')
|
||
{
|
||
$t=count($this->inputs);
|
||
for($i = array(), $f=0, Reset($this->inputs); $f<$t; Next($this->inputs),$f++)
|
||
{
|
||
$c=Key($this->inputs);
|
||
$p = (IsSet($this->inputs[$c]['parent']) ? $this->inputs[$c]['parent'] : '');
|
||
if(!strcmp($parent, $p))
|
||
$i[]=$c;
|
||
}
|
||
return($i);
|
||
}
|
||
|
||
Function GetContainedInputs($container, $kind, &$contained)
|
||
{
|
||
if(!IsSet($this->inputs[$container]))
|
||
return($this->OutputError('it was not specified a valid container input', $container));
|
||
switch($kind)
|
||
{
|
||
case '':
|
||
if(strcmp($this->inputs[$container]['TYPE'], 'custom'))
|
||
$contained = array($container);
|
||
elseif(strlen($error = $this->inputs[$container]["object"]->GetContainedInputs($this, $kind, $contained)))
|
||
return($this->OutputError($error, $container));
|
||
break;
|
||
default:
|
||
return($this->OutputError('getting contained '.$kind.' inputs is not yet supported', $container));
|
||
}
|
||
return('');
|
||
}
|
||
};
|
||
|
||
Function FormCaptureOutput(&$form,$arguments)
|
||
{
|
||
global $form_output;
|
||
|
||
$form_output="";
|
||
$arguments["Function"]="FormAppendOutput";
|
||
return($form->OutputError($form->Output($arguments)) ? "" : $form_output);
|
||
}
|
||
|
||
}
|
||
?>
|