From 4a8bd53f85b2dc0bcddd415873ce4ab49e1e099c Mon Sep 17 00:00:00 2001 From: "ctrlaltca@gmail.com" <> Date: Sun, 5 Feb 2012 17:00:00 +0000 Subject: Make validators' FocusOnError play nice with TCheckBoxList and TRadioButtonList --- framework/TService.php | 164 +++++++++--------- framework/Web/UI/WebControls/TBaseValidator.php | 13 +- framework/Web/UI/WebControls/TRadioButtonList.php | 200 +++++++++++----------- 3 files changed, 194 insertions(+), 183 deletions(-) (limited to 'framework') diff --git a/framework/TService.php b/framework/TService.php index 9d1e6f84..b4c2b529 100644 --- a/framework/TService.php +++ b/framework/TService.php @@ -1,83 +1,83 @@ - - * @link http://www.pradosoft.com/ + + * @link http://www.pradosoft.com/ * @copyright Copyright © 2005-2011 PradoSoft - * @license http://www.pradosoft.com/license/ - * @version $Id$ - * @package System - */ - -/** - * TService class. - * - * TService implements the basic methods required by IService and may be - * used as the basic class for application services. - * - * @author Qiang Xue - * @version $Id$ - * @package System - * @since 3.0 - */ -abstract class TService extends TApplicationComponent implements IService -{ - /** - * @var string service id - */ - private $_id; - /** - * @var boolean whether the service is enabled - */ - private $_enabled=true; - - /** - * Initializes the service and attaches {@link run} to the RunService event of application. - * This method is required by IService and is invoked by application. - * @param TXmlElement module configuration - */ - public function init($config) - { - } - - /** - * @return string id of this service - */ - public function getID() - { - return $this->_id; - } - - /** - * @param string id of this service - */ - public function setID($value) - { - $this->_id=$value; - } - - /** - * @return boolean whether the service is enabled - */ - public function getEnabled() - { - return $this->_enabled; - } - - /** - * @param boolean whether the service is enabled - */ - public function setEnabled($value) - { - $this->_enabled=TPropertyValue::ensureBoolean($value); - } - - /** - * Runs the service. - */ - public function run() - { - } -} - + * @license http://www.pradosoft.com/license/ + * @version $Id$ + * @package System + */ + +/** + * TService class. + * + * TService implements the basic methods required by IService and may be + * used as the basic class for application services. + * + * @author Qiang Xue + * @version $Id$ + * @package System + * @since 3.0 + */ +abstract class TService extends TApplicationComponent implements IService +{ + /** + * @var string service id + */ + private $_id; + /** + * @var boolean whether the service is enabled + */ + private $_enabled=true; + + /** + * Initializes the service and attaches {@link run} to the RunService event of application. + * This method is required by IService and is invoked by application. + * @param TXmlElement module configuration + */ + public function init($config) + { + } + + /** + * @return string id of this service + */ + public function getID() + { + return $this->_id; + } + + /** + * @param string id of this service + */ + public function setID($value) + { + $this->_id=$value; + } + + /** + * @return boolean whether the service is enabled + */ + public function getEnabled() + { + return $this->_enabled; + } + + /** + * @param boolean whether the service is enabled + */ + public function setEnabled($value) + { + $this->_enabled=TPropertyValue::ensureBoolean($value); + } + + /** + * Runs the service. + */ + public function run() + { + } +} + diff --git a/framework/Web/UI/WebControls/TBaseValidator.php b/framework/Web/UI/WebControls/TBaseValidator.php index 6e4e8f71..30320c5f 100644 --- a/framework/Web/UI/WebControls/TBaseValidator.php +++ b/framework/Web/UI/WebControls/TBaseValidator.php @@ -416,7 +416,18 @@ abstract class TBaseValidator extends TLabel implements IValidator public function getFocusElementID() { if(($id=$this->getViewState('FocusElementID',''))==='') - $id=$this->getValidationTarget()->getClientID(); + { + $target=$this->getValidationTarget(); + /* Workaround: TCheckBoxList and TRadioButtonList nests the actual + * inputs inside a table; we ensure the first input gets focused + */ + if($target instanceof TCheckBoxList && $target->getItemCount()>0) + { + $id=$target->getClientID().'_c0'; + } else { + $id=$target->getClientID(); + } + } return $id; } diff --git a/framework/Web/UI/WebControls/TRadioButtonList.php b/framework/Web/UI/WebControls/TRadioButtonList.php index 88dff7dd..88d98881 100644 --- a/framework/Web/UI/WebControls/TRadioButtonList.php +++ b/framework/Web/UI/WebControls/TRadioButtonList.php @@ -1,101 +1,101 @@ - - * @link http://www.pradosoft.com/ + + * @link http://www.pradosoft.com/ * @copyright Copyright © 2005-2011 PradoSoft - * @license http://www.pradosoft.com/license/ - * @version $Id$ - * @package System.Web.UI.WebControls - */ - -/** - * Includes TRadioButton class - */ -Prado::using('System.Web.UI.WebControls.TRadioButton'); -/** - * Includes TCheckBoxList class - */ -Prado::using('System.Web.UI.WebControls.TCheckBoxList'); - -/** - * TRadioButtonList class - * - * TRadioButtonList displays a list of radiobuttons on a Web page. - * - * TRadioButtonList inherits all properties and events of {@link TCheckBoxList}. - * Each TRadioButtonList displays one group of radiobuttons, i.e., at most - * one radiobutton can be selected at a time. - * - * @author Qiang Xue - * @version $Id$ - * @package System.Web.UI.WebControls - * @since 3.0 - */ -class TRadioButtonList extends TCheckBoxList -{ - /** - * @return boolean whether this control supports multiple selection. Always false for radiobutton list. - */ - protected function getIsMultiSelect() - { - return false; - } - - /** - * Creates a control used for repetition (used as a template). - * @return TControl the control to be repeated - */ - protected function createRepeatedControl() - { - return new TRadioButton; - } - - /** - * Loads user input data. - * This method is primarly used by framework developers. - * @param string the key that can be used to retrieve data from the input data collection - * @param array the input data collection - * @return boolean whether the data of the control has been changed - */ - public function loadPostData($key,$values) - { - $value=isset($values[$key])?$values[$key]:''; - $oldSelection=$this->getSelectedIndex(); - $this->ensureDataBound(); - foreach($this->getItems() as $index=>$item) - { - if($item->getEnabled() && $item->getValue()===$value) - { - if($index===$oldSelection) - return false; - else - { - $this->setSelectedIndex($index); - return true; - } - } - } - return false; - } - - /** - * @throws TNotSupportedException if this method is invoked - */ - public function setSelectedIndices($indices) - { - throw new TNotSupportedException('radiobuttonlist_selectedindices_unsupported'); - } - - /** - * Gets the name of the javascript class responsible for performing postback for this control. - * This method overrides the parent implementation. - * @return string the javascript class name - */ - protected function getClientClassName() - { - return 'Prado.WebUI.TRadioButtonList'; - } -} - + * @license http://www.pradosoft.com/license/ + * @version $Id$ + * @package System.Web.UI.WebControls + */ + +/** + * Includes TRadioButton class + */ +Prado::using('System.Web.UI.WebControls.TRadioButton'); +/** + * Includes TCheckBoxList class + */ +Prado::using('System.Web.UI.WebControls.TCheckBoxList'); + +/** + * TRadioButtonList class + * + * TRadioButtonList displays a list of radiobuttons on a Web page. + * + * TRadioButtonList inherits all properties and events of {@link TCheckBoxList}. + * Each TRadioButtonList displays one group of radiobuttons, i.e., at most + * one radiobutton can be selected at a time. + * + * @author Qiang Xue + * @version $Id$ + * @package System.Web.UI.WebControls + * @since 3.0 + */ +class TRadioButtonList extends TCheckBoxList +{ + /** + * @return boolean whether this control supports multiple selection. Always false for radiobutton list. + */ + protected function getIsMultiSelect() + { + return false; + } + + /** + * Creates a control used for repetition (used as a template). + * @return TControl the control to be repeated + */ + protected function createRepeatedControl() + { + return new TRadioButton; + } + + /** + * Loads user input data. + * This method is primarly used by framework developers. + * @param string the key that can be used to retrieve data from the input data collection + * @param array the input data collection + * @return boolean whether the data of the control has been changed + */ + public function loadPostData($key,$values) + { + $value=isset($values[$key])?$values[$key]:''; + $oldSelection=$this->getSelectedIndex(); + $this->ensureDataBound(); + foreach($this->getItems() as $index=>$item) + { + if($item->getEnabled() && $item->getValue()===$value) + { + if($index===$oldSelection) + return false; + else + { + $this->setSelectedIndex($index); + return true; + } + } + } + return false; + } + + /** + * @throws TNotSupportedException if this method is invoked + */ + public function setSelectedIndices($indices) + { + throw new TNotSupportedException('radiobuttonlist_selectedindices_unsupported'); + } + + /** + * Gets the name of the javascript class responsible for performing postback for this control. + * This method overrides the parent implementation. + * @return string the javascript class name + */ + protected function getClientClassName() + { + return 'Prado.WebUI.TRadioButtonList'; + } +} + -- cgit v1.2.3