File size: 2.1Kb
<?php
/**
* CFilterWidget class file.
*
* @author Qiang Xue <[email protected]>
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-2011 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* CFilterWidget is the base class for widgets that can also be used as filters.
*
* Derived classes may need to override the following methods:
* <ul>
* <li>{@link CWidget::init()} : called when this is object is used as a widget and needs initialization.</li>
* <li>{@link CWidget::run()} : called when this is object is used as a widget.</li>
* <li>{@link filter()} : the filtering method called when this object is used as an action filter.</li>
* </ul>
*
* CFilterWidget provides all properties and methods of {@link CWidget} and {@link CFilter}.
*
* @property boolean $isFilter Whether this widget is used as a filter.
*
* @author Qiang Xue <[email protected]>
* @package system.web.widgets
* @since 1.0
*/
class CFilterWidget extends CWidget implements IFilter
{
/**
* @var boolean whether to stop the action execution when this widget is used as a filter.
* This property should be changed only in {@link CWidget::init} method.
* Defaults to false, meaning the action should be executed.
*/
public $stopAction=false;
private $_isFilter;
/**
* Constructor.
* @param CBaseController $owner owner/creator of this widget. It could be either a widget or a controller.
*/
public function __construct($owner=null)
{
parent::__construct($owner);
$this->_isFilter=($owner===null);
}
/**
* @return boolean whether this widget is used as a filter.
*/
public function getIsFilter()
{
return $this->_isFilter;
}
/**
* Performs the filtering.
* The default implementation simply calls {@link init()},
* {@link CFilterChain::run()} and {@link run()} in order
* Derived classes may want to override this method to change this behavior.
* @param CFilterChain $filterChain the filter chain that the filter is on.
*/
public function filter($filterChain)
{
$this->init();
if(!$this->stopAction)
{
$filterChain->run();
$this->run();
}
}
}