XOOPS  2.6.0
xmlrpcparser.php
Go to the documentation of this file.
1 <?php
2 /*
3  You may not change or alter any portion of this comment or credits
4  of supporting developers from this source code or any supporting source code
5  which is considered copyrighted (c) material of the original comment or credit authors.
6 
7  This program is distributed in the hope that it will be useful,
8  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 */
11 
35 {
36 
41  protected $_param;
42 
47  protected $_methodName;
48 
53  protected $_tempName;
54 
59  protected $_tempValue;
60 
65  protected $_tempMember;
66 
71  protected $_tempStruct;
72 
77  protected $_tempArray;
78 
83  protected $_workingLevel = array();
84 
85 
92  public function __construct(&$input)
93  {
94  parent::__construct($input);
95  $this->addTagHandler(new RpcMethodNameHandler());
96  $this->addTagHandler(new RpcIntHandler());
97  $this->addTagHandler(new RpcDoubleHandler());
98  $this->addTagHandler(new RpcBooleanHandler());
99  $this->addTagHandler(new RpcStringHandler());
100  $this->addTagHandler(new RpcDateTimeHandler());
101  $this->addTagHandler(new RpcBase64Handler());
102  $this->addTagHandler(new RpcNameHandler());
103  $this->addTagHandler(new RpcValueHandler());
104  $this->addTagHandler(new RpcMemberHandler());
105  $this->addTagHandler(new RpcStructHandler());
106  $this->addTagHandler(new RpcArrayHandler());
107  }
108 
113  public function setTempName($name)
114  {
115  $this->_tempName[$this->getWorkingLevel()] = $name;
116  }
117 
121  public function getTempName()
122  {
123  return $this->_tempName[$this->getWorkingLevel()];
124  }
125 
130  public function setTempValue($value)
131  {
132  if (is_array($value)) {
133  settype($this->_tempValue, 'array');
134  foreach ($value as $k => $v) {
135  $this->_tempValue[$k] = $v;
136  }
137  } elseif (is_string($value)) {
138  if (isset($this->_tempValue)) {
139  if (is_string($this->_tempValue)) {
140  $this->_tempValue .= $value;
141  }
142  } else {
143  $this->_tempValue = $value;
144  }
145  } else {
146  $this->_tempValue = $value;
147  }
148  }
149 
153  public function getTempValue()
154  {
155  return $this->_tempValue;
156  }
157 
161  public function resetTempValue()
162  {
163  $this->_tempValue = null;
164  }
165 
171  public function setTempMember($name, $value)
172  {
173  $this->_tempMember[$this->getWorkingLevel()][$name] = $value;
174  }
175 
179  public function getTempMember()
180  {
181  return $this->_tempMember[$this->getWorkingLevel()];
182  }
183 
187  public function resetTempMember()
188  {
189  $this->_tempMember[$this->getWorkingLevel()] = array();
190  }
191 
195  public function setWorkingLevel()
196  {
197  array_push($this->_workingLevel, $this->getCurrentLevel());
198  }
199 
203  public function getWorkingLevel()
204  {
205  return (count($this->_workingLevel) > 0)
206  ? $this->_workingLevel[count($this->_workingLevel) - 1]
207  : null;
208  }
209 
213  public function releaseWorkingLevel()
214  {
215  array_pop($this->_workingLevel);
216  }
217 
222  public function setTempStruct(array $member)
223  {
224  $key = key($member);
225  $this->_tempStruct[$this->getWorkingLevel()][$key] = $member[$key];
226  }
227 
231  public function getTempStruct()
232  {
233  return $this->_tempStruct[$this->getWorkingLevel()];
234  }
235 
239  public function resetTempStruct()
240  {
241  $this->_tempStruct[$this->getWorkingLevel()] = array();
242  }
243 
248  public function setTempArray($value)
249  {
250  $this->_tempArray[$this->getWorkingLevel()][] = $value;
251  }
252 
256  public function getTempArray()
257  {
258  return $this->_tempArray[$this->getWorkingLevel()];
259  }
260 
264  public function resetTempArray()
265  {
266  $this->_tempArray[$this->getWorkingLevel()] = array();
267  }
268 
273  public function setMethodName($methodName)
274  {
275  $this->_methodName = $methodName;
276  }
277 
281  public function getMethodName()
282  {
283  return $this->_methodName;
284  }
285 
290  public function setParam($value)
291  {
292  $this->_param[] = $value;
293  }
294 
298  public function getParam()
299  {
300  return $this->_param;
301  }
302 }
303 
304 
306 {
307 
311  public function getName()
312  {
313  return 'methodName';
314  }
315 
321  public function handleCharacterData(SaxParser &$parser, &$data)
322  {
323  if (!is_a($parser,'XoopsXmlRpcParser')) return;
324  $parser->setMethodName($data);
325  }
326 }
327 
329 {
330 
334  public function getName()
335  {
336  return array('int', 'i4');
337  }
338 
344  public function handleCharacterData(SaxParser &$parser, &$data)
345  {
346  if (!is_a($parser,'XoopsXmlRpcParser')) return;
347  $parser->setTempValue(intval($data));
348  }
349 }
350 
352 {
353 
357  public function getName()
358  {
359  return 'double';
360  }
361 
367  public function handleCharacterData(SaxParser &$parser, &$data)
368  {
369  if (!is_a($parser,'XoopsXmlRpcParser')) return;
370  $data = (float)$data;
371  $parser->setTempValue($data);
372  }
373 }
374 
376 {
377 
381  public function getName()
382  {
383  return 'boolean';
384  }
385 
391  public function handleCharacterData(SaxParser &$parser, &$data)
392  {
393  if (!is_a($parser,'XoopsXmlRpcParser')) return;
394  $data = (boolean)$data;
395  $parser->setTempValue($data);
396  }
397 }
398 
400 {
401 
405  public function getName()
406  {
407  return 'string';
408  }
409 
415  public function handleCharacterData(SaxParser &$parser, &$data)
416  {
417  if (!is_a($parser,'XoopsXmlRpcParser')) return;
418  $parser->setTempValue(strval($data));
419  }
420 }
421 
423 {
424 
428  public function getName()
429  {
430  return 'dateTime.iso8601';
431  }
432 
438  public function handleCharacterData(SaxParser &$parser, &$data)
439  {
440  if (!is_a($parser,'XoopsXmlRpcParser')) return;
441  $matches = array();
442  if (!preg_match("/^([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$/", $data, $matches)) {
443  $parser->setTempValue(time());
444  } else {
445  $parser->setTempValue(gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]));
446  }
447  }
448 }
449 
451 {
452 
456  public function getName()
457  {
458  return 'base64';
459  }
460 
466  public function handleCharacterData(SaxParser &$parser, &$data)
467  {
468  if (!is_a($parser,'XoopsXmlRpcParser')) return;
469  $parser->setTempValue(base64_decode($data));
470  }
471 }
472 
474 {
475 
479  public function getName()
480  {
481  return 'name';
482  }
483 
489  public function handleCharacterData(SaxParser &$parser, &$data)
490  {
491  if (!is_a($parser,'XoopsXmlRpcParser')) return;
492  switch ($parser->getParentTag()) {
493  case 'member':
494  $parser->setTempName($data);
495  break;
496  default:
497  break;
498  }
499  }
500 }
501 
502 
504 {
505 
509  public function getName()
510  {
511  return 'value';
512  }
513 
519  public function handleCharacterData(SaxParser &$parser, &$data)
520  {
521  if (!is_a($parser,'XoopsXmlRpcParser')) return;
522  switch ($parser->getParentTag()) {
523  case 'member':
524  $parser->setTempValue($data);
525  break;
526  case 'data':
527  case 'array':
528  $parser->setTempValue($data);
529  break;
530  default:
531  break;
532  }
533  }
534 
540  public function handleBeginElement(SaxParser &$parser, &$attributes)
541  {
542  if (!is_a($parser,'XoopsXmlRpcParser')) return;
543  //$parser->resetTempValue();
544  }
545 
550  public function handleEndElement(SaxParser &$parser)
551  {
552  if (!is_a($parser,'XoopsXmlRpcParser')) return;
553  switch ($parser->getCurrentTag()) {
554  case 'member':
555  $parser->setTempMember($parser->getTempName(), $parser->getTempValue());
556  break;
557  case 'array':
558  case 'data':
559  $parser->setTempArray($parser->getTempValue());
560  break;
561  default:
562  $parser->setParam($parser->getTempValue());
563  break;
564  }
565  $parser->resetTempValue();
566  }
567 }
568 
570 {
571 
575  public function getName()
576  {
577  return 'member';
578  }
579 
585  public function handleBeginElement(SaxParser &$parser, &$attributes)
586  {
587  if (!is_a($parser,'XoopsXmlRpcParser')) return;
588  $parser->setWorkingLevel();
589  $parser->resetTempMember();
590  }
591 
596  public function handleEndElement(SaxParser &$parser)
597  {
598  if (!is_a($parser,'XoopsXmlRpcParser')) return;
599  $member = $parser->getTempMember();
600  $parser->releaseWorkingLevel();
601  $parser->setTempStruct($member);
602  }
603 }
604 
606 {
607 
611  public function getName()
612  {
613  return 'array';
614  }
615 
621  public function handleBeginElement(SaxParser &$parser, &$attributes)
622  {
623  if (!is_a($parser,'XoopsXmlRpcParser')) return;
624  $parser->setWorkingLevel();
625  $parser->resetTempArray();
626  }
627 
632  public function handleEndElement(SaxParser &$parser)
633  {
634  if (!is_a($parser,'XoopsXmlRpcParser')) return;
635  $parser->setTempValue($parser->getTempArray());
636  $parser->releaseWorkingLevel();
637  }
638 }
639 
641 {
642 
646  public function getName()
647  {
648  return 'struct';
649  }
650 
656  public function handleBeginElement(SaxParser &$parser, &$attributes)
657  {
658  if (!is_a($parser,'XoopsXmlRpcParser')) return;
659  $parser->setWorkingLevel();
660  $parser->resetTempStruct();
661  }
662 
667  public function handleEndElement(SaxParser &$parser)
668  {
669  if (!is_a($parser,'XoopsXmlRpcParser')) return;
670  $parser->setTempValue($parser->getTempStruct());
671  $parser->releaseWorkingLevel();
672  }
673 }
handleBeginElement(SaxParser &$parser, &$attributes)
handleCharacterData(SaxParser &$parser, &$data)
addTagHandler(XmlTagHandler &$tagHandler)
Definition: saxparser.php:192
getCurrentLevel()
Definition: saxparser.php:64
handleEndElement(SaxParser &$parser)
setMethodName($methodName)
handleCharacterData(SaxParser &$parser, &$data)
handleBeginElement(SaxParser &$parser, &$attributes)
handleCharacterData(SaxParser &$parser, &$data)
handleCharacterData(SaxParser &$parser, &$data)
handleCharacterData(SaxParser &$parser, &$data)
setTempMember($name, $value)
handleEndElement(SaxParser &$parser)
handleBeginElement(SaxParser &$parser, &$attributes)
handleEndElement(SaxParser &$parser)
setTempStruct(array $member)
handleCharacterData(SaxParser &$parser, &$data)
getParentTag()
Definition: saxparser.php:120
handleCharacterData(SaxParser &$parser, &$data)
getCurrentTag()
Definition: saxparser.php:115
handleCharacterData(SaxParser &$parser, &$data)
handleCharacterData(SaxParser &$parser, &$data)
handleBeginElement(SaxParser &$parser, &$attributes)
__construct(&$input)
handleEndElement(SaxParser &$parser)