1: <?php
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: if (!defined ('XAJAX_EVENT')) define ('XAJAX_EVENT', 'xajax event');
31: if (!defined ('XAJAX_EVENT_HANDLER')) define ('XAJAX_EVENT_HANDLER', 'xajax event handler');
32:
33:
34: require dirname(__FILE__) . '/support/xajaxEvent.inc.php';
35:
36:
37: 38: 39: 40: 41: 42:
43: class xajaxEventPlugin extends xajaxRequestPlugin
44: {
45: 46: 47:
48: var $aEvents;
49:
50: 51: 52:
53: var $sXajaxPrefix;
54:
55: 56: 57:
58: var $sEventPrefix;
59:
60: 61: 62:
63: var $sDefer;
64:
65: var $bDeferScriptGeneration;
66:
67: 68: 69:
70: var $sRequestedEvent;
71:
72: 73: 74:
75: function xajaxEventPlugin()
76: {
77: $this->aEvents = array();
78:
79: $this->sXajaxPrefix = 'xajax_';
80: $this->sEventPrefix = 'event_';
81: $this->sDefer = '';
82: $this->bDeferScriptGeneration = false;
83:
84: $this->sRequestedEvent = NULL;
85:
86: if (isset($_GET['xjxevt'])) $this->sRequestedEvent = $_GET['xjxevt'];
87: if (isset($_POST['xjxevt'])) $this->sRequestedEvent = $_POST['xjxevt'];
88: }
89:
90: 91: 92:
93: function configure($sName, $mValue)
94: {
95: if ('wrapperPrefix' == $sName) {
96: $this->sXajaxPrefix = $mValue;
97: } else if ('eventPrefix' == $sName) {
98: $this->sEventPrefix = $mValue;
99: } else if ('scriptDefferal' == $sName) {
100: if (true === $mValue) $this->sDefer = 'defer ';
101: else $this->sDefer = '';
102: } else if ('deferScriptGeneration' == $sName) {
103: if (true === $mValue || false === $mValue)
104: $this->bDeferScriptGeneration = $mValue;
105: else if ('deferred' === $mValue)
106: $this->bDeferScriptGeneration = $mValue;
107: }
108: }
109:
110: 111: 112: 113: 114: 115: 116: 117:
118: function register($aArgs)
119: {
120: if (1 < count($aArgs))
121: {
122: $sType = $aArgs[0];
123:
124: if (XAJAX_EVENT == $sType)
125: {
126: $sEvent = $aArgs[1];
127:
128: if (false === isset($this->aEvents[$sEvent]))
129: {
130: $xe = new xajaxEvent($sEvent);
131:
132: if (2 < count($aArgs))
133: if (is_array($aArgs[2]))
134: foreach ($aArgs[2] as $sKey => $sValue)
135: $xe->configure($sKey, $sValue);
136:
137: $this->aEvents[$sEvent] =& $xe;
138:
139: return $xe->generateRequest($this->sXajaxPrefix, $this->sEventPrefix);
140: }
141: }
142:
143: if (XAJAX_EVENT_HANDLER == $sType)
144: {
145: $sEvent = $aArgs[1];
146:
147: if (isset($this->aEvents[$sEvent]))
148: {
149: if (isset($aArgs[2]))
150: {
151: $xuf =& $aArgs[2];
152:
153: if (false === ($xuf instanceof xajaxUserFunction))
154: $xuf = new xajaxUserFunction($xuf);
155:
156: $objEvent =& $this->aEvents[$sEvent];
157: $objEvent->addHandler($xuf);
158:
159: return true;
160: }
161: }
162: }
163: }
164:
165: return false;
166: }
167:
168: 169: 170:
171: function generateClientScript()
172: {
173: if (false === $this->bDeferScriptGeneration || 'deferred' === $this->bDeferScriptGeneration)
174: {
175: if (0 < count($this->aEvents))
176: {
177: echo "\n<script type='text/javascript' ";
178: echo $this->sDefer;
179: echo "charset='UTF-8'>\n";
180: echo "/* <![CDATA[ */\n";
181:
182: foreach (array_keys($this->aEvents) as $sKey)
183: $this->aEvents[$sKey]->generateClientScript($this->sXajaxPrefix, $this->sEventPrefix);
184:
185: echo "/* ]]> */\n";
186: echo "</script>\n";
187: }
188: }
189: }
190:
191: 192: 193:
194: function canProcessRequest()
195: {
196: if (NULL == $this->sRequestedEvent)
197: return false;
198:
199: return true;
200: }
201:
202: 203: 204:
205: function processRequest()
206: {
207: if (NULL == $this->sRequestedEvent)
208: return false;
209:
210: $objArgumentManager =& xajaxArgumentManager::getInstance();
211: $aArgs = $objArgumentManager->process();
212:
213:
214:
215: foreach (array_keys($this->aEvents) as $sKey)
216: {
217: $objEvent =& $this->aEvents[$sKey];
218:
219: if ($objEvent->getName() == $this->sRequestedEvent)
220: {
221: $objEvent->fire($aArgs);
222: return true;
223: }
224: }
225:
226: return 'Invalid event request received; no event was registered with this name.';
227: }
228: }
229:
230: $objPluginManager =& xajaxPluginManager::getInstance();
231: $objPluginManager->registerPlugin(new xajaxEventPlugin(), 103);