* @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;
}
}
?>