139 lines
4.4 KiB
PHP
139 lines
4.4 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* CFormButtonElement class file.
|
||
|
*
|
||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||
|
* @link http://www.yiiframework.com/
|
||
|
* @copyright 2008-2013 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>
|
||
|
* @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;
|
||
|
}
|
||
|
elseif($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);
|
||
|
}
|
||
|
}
|