diff options
Diffstat (limited to 'framework/web/form/CFormButtonElement.php')
| -rw-r--r-- | framework/web/form/CFormButtonElement.php | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/framework/web/form/CFormButtonElement.php b/framework/web/form/CFormButtonElement.php new file mode 100644 index 0000000..36a4d70 --- /dev/null +++ b/framework/web/form/CFormButtonElement.php @@ -0,0 +1,139 @@ +<?php +/** + * CFormButtonElement class file. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2011 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CFormButtonElement represents a form button element. + * + * CFormButtonElement can represent the following types of button based on {@link type} property: + * <ul> + * <li>htmlButton: a normal button generated using {@link CHtml::htmlButton}</li> + * <li>htmlReset a reset button generated using {@link CHtml::htmlButton}</li> + * <li>htmlSubmit: a submit button generated using {@link CHtml::htmlButton}</li> + * <li>submit: a submit button generated using {@link CHtml::submitButton}</li> + * <li>button: a normal button generated using {@link CHtml::button}</li> + * <li>image: an image button generated using {@link CHtml::imageButton}</li> + * <li>reset: a reset button generated using {@link CHtml::resetButton}</li> + * <li>link: a link button generated using {@link CHtml::linkButton}</li> + * </ul> + * The {@link type} property can also be a class name or a path alias to the class. In this case, + * the button is generated using a widget of the specified class. Note, the widget must + * have a property called "name". + * + * Because CFormElement is an ancestor class of CFormButtonElement, a value assigned to a non-existing property will be + * stored in {@link attributes} which will be passed as HTML attribute values to the {@link CHtml} method + * generating the button or initial values of the widget properties. + * + * @property string $on Scenario names separated by commas. Defaults to null. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id: CFormButtonElement.php 3426 2011-10-25 00:01:09Z alexander.makarow $ + * @package system.web.form + * @since 1.1 + */ +class CFormButtonElement extends CFormElement +{ + /** + * @var array Core button types (alias=>CHtml method name) + */ + public static $coreTypes=array( + 'htmlButton'=>'htmlButton', + 'htmlSubmit'=>'htmlButton', + 'htmlReset'=>'htmlButton', + 'button'=>'button', + 'submit'=>'submitButton', + 'reset'=>'resetButton', + 'image'=>'imageButton', + 'link'=>'linkButton', + ); + + /** + * @var string the type of this button. This can be a class name, a path alias of a class name, + * or a button type alias (submit, button, image, reset, link, htmlButton, htmlSubmit, htmlReset). + */ + public $type; + /** + * @var string name of this button + */ + public $name; + /** + * @var string the label of this button. This property is ignored when a widget is used to generate the button. + */ + public $label; + + private $_on; + + /** + * Returns a value indicating under which scenarios this button is visible. + * If the value is empty, it means the button is visible under all scenarios. + * Otherwise, only when the model is in the scenario whose name can be found in + * this value, will the button be visible. See {@link CModel::scenario} for more + * information about model scenarios. + * @return string scenario names separated by commas. Defaults to null. + */ + public function getOn() + { + return $this->_on; + } + + /** + * @param string $value scenario names separated by commas. + */ + public function setOn($value) + { + $this->_on=preg_split('/[\s,]+/',$value,-1,PREG_SPLIT_NO_EMPTY); + } + + /** + * Returns this button. + * @return string the rendering result + */ + public function render() + { + $attributes=$this->attributes; + if(isset(self::$coreTypes[$this->type])) + { + $method=self::$coreTypes[$this->type]; + if($method==='linkButton') + { + if(!isset($attributes['params'][$this->name])) + $attributes['params'][$this->name]=1; + } + else if($method==='htmlButton') + { + $attributes['type']=$this->type==='htmlSubmit' ? 'submit' : ($this->type==='htmlReset' ? 'reset' : 'button'); + $attributes['name']=$this->name; + } + else + $attributes['name']=$this->name; + if($method==='imageButton') + return CHtml::imageButton(isset($attributes['src']) ? $attributes['src'] : '',$attributes); + else + return CHtml::$method($this->label,$attributes); + } + else + { + $attributes['name']=$this->name; + ob_start(); + $this->getParent()->getOwner()->widget($this->type, $attributes); + return ob_get_clean(); + } + } + + /** + * Evaluates the visibility of this element. + * This method will check the {@link on} property to see if + * the model is in a scenario that should have this string displayed. + * @return boolean whether this element is visible. + */ + protected function evaluateVisible() + { + return empty($this->_on) || in_array($this->getParent()->getModel()->getScenario(),$this->_on); + } +} |
