blob: 86e52f3ac8d576ded9ffe51885887d5ed693ca68 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
<?php
/**
* TJuiControlAdapter class file.
*
* @author Fabio Bas <ctrlaltca@gmail.com>
* @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:
* <code>
* $draggable = $param->getControl($param->getCallbackParameter()->draggable);
* </code>
*
* A shortcut __get() method is implemented, too:
* <code>
* $draggable = $param->DraggableControl;
* </code>
*
* @author Fabio Bas <ctrlaltca[at]gmail[dot]com>
* @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);
}
}
|