+ * @version v1.0, last update on 2004/08/13 21:44:52
+ * @package System.Web.UI.WebControls
+ */
+class TServerValidateEventParameter extends TEventParameter
+{
+ /**
+ * the value to be validated
+ * @var string
+ */
+ public $value='';
+ /**
+ * whether the value is valid
+ * @var boolean
+ */
+ public $isValid=true;
+}
+?>
\ No newline at end of file
diff --git a/framework/Web/UI/WebControls/TRegularExpressionValidator.php b/framework/Web/UI/WebControls/TRegularExpressionValidator.php
new file mode 100644
index 00000000..9fe0f778
--- /dev/null
+++ b/framework/Web/UI/WebControls/TRegularExpressionValidator.php
@@ -0,0 +1,97 @@
+
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright © 2005 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ */
+
+/**
+ * Using TBaseValidator class
+ */
+Prado::using('System.Web.UI.WebControls.TBaseValidator');
+
+/**
+ * TRegularExpressionValidator class
+ *
+ * TRegularExpressionValidator validates whether the value of an associated
+ * input component matches the pattern specified by a regular expression.
+ *
+ * You can specify the regular expression by setting the RegularExpression
+ * property. Some commonly used regular expressions include:
+ *
+ * French Phone Number: (0( \d|\d ))?\d\d \d\d(\d \d| \d\d )\d\d
+ * French Postal Code: \d{5}
+ * German Phone Number: ((\(0\d\d\) |(\(0\d{3}\) )?\d )?\d\d \d\d \d\d|\(0\d{4}\) \d \d\d-\d\d?)
+ * German Postal Code: (D-)?\d{5}
+ * Email Address: \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
+ * Internal URL: http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
+ * Japanese Phone Number: (0\d{1,4}-|\(0\d{1,4}\) ?)?\d{1,4}-\d{4}
+ * Japanese Postal Code: \d{3}(-(\d{4}|\d{2}))?
+ * P.R.C. Phone Number: (\(\d{3}\)|\d{3}-)?\d{8}
+ * P.R.C. Postal Code: \d{6}
+ * P.R.C. Social Security Number: \d{18}|\d{15}
+ * U.S. Phone Number: ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}
+ * U.S. ZIP Code: \d{5}(-\d{4})?
+ * U.S. Social Security Number: \d{3}-\d{2}-\d{4}
+ *
+ *
+ * @author Qiang Xue
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ * @since 3.0
+ */
+class TRegularExpressionValidator extends TBaseValidator
+{
+ /**
+ * @return string the regular expression that determines the pattern used to validate a field.
+ */
+ public function getRegularExpression()
+ {
+ return $this->getViewState('RegularExpression','');
+ }
+
+ /**
+ * Sets the regular expression that determines the pattern used to validate a field.
+ * @param string the regular expression
+ */
+ public function setRegularExpression($value)
+ {
+ $this->setViewState('RegularExpression',$value,'');
+ }
+
+ /**
+ * This method overrides the parent's implementation.
+ * The validation succeeds if the input data matches the regular expression.
+ * The validation always succeeds if ControlToValidate is not specified
+ * or the regular expression is empty, or the input data is empty.
+ * @return boolean whether the validation succeeds
+ */
+ public function evaluateIsValid()
+ {
+ if(($control=$this->getValidationTarget())!==null)
+ {
+ if(($value=$this->getValidationValue($control))==='')
+ return true;
+ if(($expression=$this->getRegularExpression())!=='')
+ return preg_match("/^$expression\$/",$value);
+ else
+ return true;
+ }
+ else
+ throw new TInvalidDataValueException('regularexpressionvalidator_controltovalidate_invalid');
+ }
+
+ protected function getClientScriptOptions()
+ {
+ $options = parent::getClientScriptOptions();
+ $options['validationexpression']=$this->getRegularExpression();
+ return $options;
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/framework/Web/UI/WebControls/TRequiredFieldValidator.php b/framework/Web/UI/WebControls/TRequiredFieldValidator.php
index b30de607..c937abf8 100644
--- a/framework/Web/UI/WebControls/TRequiredFieldValidator.php
+++ b/framework/Web/UI/WebControls/TRequiredFieldValidator.php
@@ -1,5 +1,29 @@
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright © 2005 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ */
+/**
+ * Using TBaseValidator class
+ */
+Prado::using('System.Web.UI.WebControls.TBaseValidator');
+
+/**
+ * TRequiredFieldValidator class
+ *
+ *
+ * @author Qiang Xue
+ * @version $Revision: $ $Date: $
+ * @package System.Web.UI.WebControls
+ * @since 3.0
+ */
class TRequiredFieldValidator extends TBaseValidator
{
public function getInitialValue()
@@ -14,8 +38,13 @@ class TRequiredFieldValidator extends TBaseValidator
protected function evaluateIsValid()
{
- $value=$this->getValidationValue($this->getValidationTarget());
- return trim($value)!==trim($this->getInitialValue());
+ if(($control=$this->getValidationTarget())!==null)
+ {
+ $value=$this->getValidationValue($control);
+ return trim($value)!==trim($this->getInitialValue());
+ }
+ else
+ throw new TInvalidDataValueException('requiredfieldvalidator_controltovalidate_invalid');
}
protected function getClientScriptOptions()
diff --git a/framework/Web/UI/WebControls/TValidationSummary.php b/framework/Web/UI/WebControls/TValidationSummary.php
new file mode 100644
index 00000000..3810901b
--- /dev/null
+++ b/framework/Web/UI/WebControls/TValidationSummary.php
@@ -0,0 +1,405 @@
+
+ * @version $Revision: 1.20 $ $Date: 2005/11/21 07:39:41 $
+ * @package System.Web.UI.WebControls
+ */
+
+/**
+ * TValidationSummary class
+ *
+ * TValidationSummary displays a summary of all validation errors inline on a Web page,
+ * in a message box, or both. The summary can be displayed as a list, as a bulleted list,
+ * or as a single paragraph based on the DisplayMode property.
+ * The summary can be displayed on the Web page and in a message box by setting
+ * the ShowSummary and ShowMessageBox properties, respectively.
+ *
+ * Namespace: System.Web.UI.WebControls
+ *
+ * Properties
+ * - DisplayMode, string, default=BulletList, kept in viewstate
+ *
Gets or sets the display mode (BulletList, List, SingleParagraph) of the validation summary.
+ * - HeaderText, string, kept in viewstate
+ *
Gets or sets the header text displayed at the top of the summary.
+ * - EnableClientScript, boolean, default=true, kept in viewstate
+ *
Gets or sets a value indicating whether the TValidationSummary component
+ * updates itself using client-side script.
+ * - ShowMessageBox, boolean, default=false, kept in viewstate
+ *
Gets or sets a value indicating whether the validation summary is displayed in a message box.
+ * If EnableClientScript is false, this property has no effect.
+ * - ShowSummary, boolean, default=true, kept in viewstate
+ *
Gets or sets a value indicating whether the validation summary is displayed inline.
+ * - Group, string, kept in viewstate
+ *
Gets or sets the validation group ID.
+ *
+ * @author Qiang Xue
+ * @version v1.0, last update on 2004/08/13 21:44:52
+ * @package System.Web.UI.WebControls
+ */
+class TValidationSummary extends TWebControl
+{
+
+ protected static $currentGroup;
+
+ public static function setCurrentGroup($group)
+ {
+ self::$currentGroup = $group;
+ }
+
+ public static function getCurrentGroup()
+ {
+ return self::$currentGroup;
+ }
+
+ /**
+ * Overrides parent implementation to disable body addition.
+ * @param mixed the object to be added
+ * @return boolean
+ */
+ public function allowBody($object)
+ {
+ return false;
+ }
+
+ /**
+ * @return string the header text displayed at the top of the summary
+ */
+ public function getHeaderText()
+ {
+ return $this->getViewState('HeaderText','');
+ }
+
+ /**
+ * Sets the header text to be displayed at the top of the summary
+ * @param string the header text
+ */
+ public function setHeaderText($value)
+ {
+ $this->setViewState('HeaderText',$value,'');
+ }
+
+ /**
+ * @return string the display mode (BulletList, List, SingleParagraph) of the validation summary.
+ */
+ public function getDisplayMode()
+ {
+ return $this->getViewState('DisplayMode','BulletList');
+ }
+
+ /**
+ * Sets the display mode (BulletList, List, SingleParagraph) of the validation summary.
+ * @param string the display mode (BulletList, List, SingleParagraph)
+ */
+ public function setDisplayMode($value)
+ {
+ if($value!='List' && $value!='SingleParagraph')
+ $value='BulletList';
+ $this->setViewState('DisplayMode',$value,'BulletList');
+ }
+
+ /**
+ * @return boolean whether the TValidationSummary component updates itself using client-side script.
+ */
+ public function isClientScriptEnabled()
+ {
+ return $this->getViewState('EnableClientScript',true);
+ }
+
+ /**
+ * Sets the value whether the TValidationSummary component updates itself using client-side script.
+ * @param boolean whether the TValidationSummary component updates itself using client-side script.
+ */
+ public function enableClientScript($value)
+ {
+ $this->setViewState('EnableClientScript',$value,true);
+ }
+
+ /**
+ * @return boolean whether the validation summary is displayed in a message box.
+ */
+ public function isShowMessageBox()
+ {
+ return $this->getViewState('ShowMessageBox',false);
+ }
+
+ /**
+ * Sets the value whether the validation summary is displayed in a message box.
+ * @param boolean whether the validation summary is displayed in a message box.
+ */
+ public function setShowMessageBox($value)
+ {
+ $this->setViewState('ShowMessageBox',$value,false);
+ }
+
+ /**
+ * @return boolean whether the validation summary is displayed inline.
+ */
+ public function isShowSummary()
+ {
+ return $this->getViewState('ShowSummary',true);
+ }
+
+ /**
+ * Sets the value whether the validation summary is displayed inline.
+ * @param boolean whether the validation summary is displayed inline.
+ */
+ public function setShowSummary($value)
+ {
+ $this->setViewState('ShowSummary',$value,true);
+ }
+
+ /**
+ * @return boolean whether the validation summary should be anchored.
+ */
+ public function isShowAnchor()
+ {
+ return $this->getViewState('ShowAnchor',false);
+ }
+
+ /**
+ * Sets the value whether the validation summary should be anchored.
+ * @param boolean whether the validation summary should be anchored.
+ */
+ public function setShowAnchor($value)
+ {
+ $this->setViewState('ShowAnchor',$value,false);
+ }
+
+ /**
+ * Gets the valiation group.
+ * @param string validation group ID.
+ */
+ public function getGroup()
+ {
+ return $this->getViewState('Group', '');
+ }
+
+ /**
+ * Sets the validation group.
+ * @param string ID of the validation group.
+ */
+ public function setGroup($value)
+ {
+ $this->setViewState('Group', $value, '');
+ }
+
+ /**
+ * Sets the summary to auto-update on the client-side
+ * @param boolean true for automatic summary updates.
+ */
+ public function setAutoUpdate($value)
+ {
+ $this->setViewState('AutoUpdate', $value, true);
+ }
+
+ /**
+ * Gets the auto-update for this summary.
+ * @return boolean automatic client-side summary updates.
+ */
+ public function isAutoUpdate()
+ {
+ return $this->getViewState('AutoUpdate', true);
+ }
+
+ /**
+ * @return string the group which this validator belongs to
+ */
+ public function getValidationGroup()
+ {
+ return $this->getViewState('ValidationGroup','');
+ }
+
+ /**
+ * @param string the group which this validator belongs to
+ */
+ public function setValidationGroup($value)
+ {
+ $this->setViewState('ValidationGroup',$value,'');
+ }
+
+ /**
+ * Get a list of validators considering the validation groups.
+ * @return array list of validators.
+ */
+ protected function getValidators()
+ {
+ $groupID = $this->getGroup();
+ if(empty($groupID)) return $this->getPage()->getValidators();
+
+ $parent = $this->getParent();
+ $group = $parent->findObject($groupID);
+
+ $validators = array();
+
+ foreach($group->getMembers() as $member)
+ {
+ $control = $parent->findObject($member);
+ if(!is_null($control))
+ $validators[] = $control;
+ }
+ return $validators;
+ }
+
+ /**
+ * Render the javascript for validation summary.
+ * @param array list of options for validation summary.
+ */
+ protected function renderJsSummary($options)
+ {
+ if(!$this->isEnabled() || !$this->isClientScriptEnabled())
+ return;
+ $option = TJavascript::toList($options);
+ $script = "new Prado.Validation.Summary({$option});";
+ $this->Page->registerEndScript($this->ClientID, $script);
+ }
+
+ /**
+ * Get a list of options for the client-side javascript validation summary.
+ * @return array list of options for the summary
+ */
+ protected function getJsOptions()
+ {
+ $options['id'] = $this->ClientID;
+ $options['form'] = $this->Page->Form->ClientID;
+ if($this->isShowMessageBox())
+ $options['showmessagebox']='True';
+ if(!$this->isShowSummary())
+ $options['showsummary']='False';
+
+ $options['headertext']=$this->getHeaderText();
+ $options['displaymode']=$this->getDisplayMode();
+
+ $group = $this->getGroup();
+ if(!empty($group))
+ $options['group'] = $this->getParent()->findObject($group)->ClientID;
+
+ $options['refresh'] = $this->isAutoUpdate();
+ $options['validationgroup'] = $this->getValidationGroup();
+ return $options;
+ }
+
+ /**
+ * Get the list of validation error messages.
+ * @return array list of validator error messages.
+ */
+ protected function getMessages()
+ {
+ $validators=$this->getValidators();
+ $messages = array();
+ foreach(array_keys($validators) as $i)
+ {
+ if(!$validators[$i]->isValid())
+ {
+ $msg = $validators[$i]->getErrorMessage();
+ if(strlen($msg))
+ $messages[] = $validators[$i]->getAnchoredMessage($msg);
+ }
+ }
+ return $messages;
+ }
+
+ /**
+ * Overrides parent implementation by rendering TValidationSummary-specific presentation.
+ * @return string the rendering result
+ */
+ public function render()
+ {
+
+ $this->renderJsSummary($this->getJsOptions());
+
+ $content = "";
+ if($this->isRenderSummary())
+ {
+ $this->setStyle('display:block');
+ $messages = $this->getMessages();
+ $headerText = $this->getHeaderText();
+ switch($this->getDisplayMode())
+ {
+ case 'List':
+ $content = $this->renderList($messages, $headerText);
+ break;
+ case 'SingleParagraph':
+ $content = $this->renderSingleParagraph($messages, $headerText);
+ break;
+ case 'BulletList':
+ default:
+ $content = $this->renderBulletList($messages, $headerText);
+ }
+ }
+ return "renderAttributes()}>{$content}
";
+ }
+
+ protected function isRenderSummary()
+ {
+ $group = $this->getGroup();
+ $active = TValidatorGroup::isGroupValidation() ? false : true;
+ if(!empty($group))
+ $active = $this->getParent()->findObject($group)->isActive();
+ $render = $this->isEnabled() && $active;
+ $render = $render && !$this->Page->isValid() && $this->isShowSummary();
+ $current = self::getCurrentGroup();
+ if(!is_null($current))
+ $render = $render && $this->getValidationGroup() == $current;
+ return $render;
+ }
+
+ /**
+ * Render the validation summary as a simple list.
+ * @param array list of messages
+ * @param string the header text
+ * @return string summary list
+ */
+ protected function renderList($messages, $header)
+ {
+ $content = '';
+ if(strlen($header))
+ $content.= $header."
\n";
+ foreach($messages as $message)
+ $content.="$message
\n";
+ return $content;
+ }
+
+ /**
+ * Render the validation summary as a paragraph.
+ * @param array list of messages
+ * @param string the header text
+ * @return string summary paragraph
+ */
+ protected function renderSingleParagraph($messages, $header)
+ {
+ $content = $header;
+ foreach($messages as $message)
+ $content.= ' '.$message;
+ return $content;
+ }
+
+ /**
+ * Render the validation summary as a bullet list.
+ * @param array list of messages
+ * @param string the header text
+ * @return string summary bullet list
+ */
+ protected function renderBulletList($messages, $header)
+ {
+ $content = $header;
+ $show = count($messages) > 0;
+ if($show) $content .= "\n";
+ foreach($messages as $message)
+ $content.= '- '.$message."
\n";
+ if($show) $content .= "
\n";
+ return $content;
+ }
+}
+
+?>
\ No newline at end of file
--
cgit v1.2.3