* @link http://www.pradosoft.com/ * @copyright Copyright © 2013-2014 PradoSoft * @license http://www.pradosoft.com/license/ * @package Prado\Web\UI\JuiControls */ namespace Prado\Web\UI\JuiControls; use Prado\Prado; use Prado\Web\Services\TPageService; use Prado\Web\UI\ActiveControls\TCallbackEventParameter; use Prado\Web\UI\TControl; /** * TJuiEventParameter class * * TJuiEventParameter encapsulate the parameters for callback * events of TJui* components. * Any parameter representing a control is identified by its * clientside ID. * TJuiEventParameter contains a {@link getControl} helper method * that retrieves an existing PRADO control on che current page from its * clientside ID as returned by the callback. * For example, if the parameter contains a "draggable" item (as returned in * {@link TJuiDroppable}::OnDrop event), the relative PRADO control can be * retrieved using: * * $draggable = $param->getControl($param->getCallbackParameter()->draggable); * * * A shortcut __get() method is implemented, too: * * $draggable = $param->DraggableControl; * * * @author Fabio Bas * @license http://www.pradosoft.com/license * @package Prado\Web\UI\JuiControls */ class TJuiEventParameter extends TCallbackEventParameter { /** * getControl * * Compatibility method to get a control from its clientside id * @return TControl control, or null if not found */ public function getControl($id) { $control=null; $service=prado::getApplication()->getService(); if ($service instanceof TPageService) { // Find the control // Warning, this will not work if you have a '_' in your control Id ! $controlId=str_replace(TControl::CLIENT_ID_SEPARATOR,TControl::ID_SEPARATOR,$id); $control=$service->getRequestedPage()->findControl($controlId); } return $control; } /** * Gets a control instance named after a returned control id. * Example: if a $param->draggable control id is returned from clientside, * calling $param->DraggableControl will return the control instance * @return mixed control or null if not set. */ public function __get($name) { $pos=strpos($name, 'Control',1); $name=strtolower(substr($name, 0, $pos)); $cp=$this->getCallbackParameter(); if(!isset($cp->$name) || $cp->$name=='') return null; return $this->getControl($cp->$name); } }