XOOPS 2.5.6  Final
 All Classes Namespaces Files Functions Variables Pages
xmlrpcparser.php
Go to the documentation of this file.
1 <?php
2 // $Id: xmlrpcparser.php 8066 2011-11-06 05:09:33Z beckmi $
3 // ------------------------------------------------------------------------ //
4 // XOOPS - PHP Content Management System //
5 // Copyright (c) 2000 XOOPS.org //
6 // <http://www.xoops.org/> //
7 // ------------------------------------------------------------------------ //
8 // This program is free software; you can redistribute it and/or modify //
9 // it under the terms of the GNU General Public License as published by //
10 // the Free Software Foundation; either version 2 of the License, or //
11 // (at your option) any later version. //
12 // //
13 // You may not change or alter any portion of this comment or credits //
14 // of supporting developers from this source code or any supporting //
15 // source code which is considered copyrighted (c) material of the //
16 // original comment or credit authors. //
17 // //
18 // This program is distributed in the hope that it will be useful, //
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
21 // GNU General Public License for more details. //
22 // //
23 // You should have received a copy of the GNU General Public License //
24 // along with this program; if not, write to the Free Software //
25 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
26 // ------------------------------------------------------------------------ //
27 // Author: Kazumi Ono (AKA onokazu) //
28 // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ //
29 // Project: The XOOPS Project //
30 // ------------------------------------------------------------------------- //
31 if (!defined('XOOPS_ROOT_PATH')) {
32  die("XOOPS root path not defined");
33 }
34 require_once XOOPS_ROOT_PATH.'/class/xml/saxparser.php';
35 require_once XOOPS_ROOT_PATH.'/class/xml/xmltaghandler.php';
36 
51 {
52 
61  var $_param;
62 
72 
82 
92 
102 
112 
122 
131  var $_workingLevel = array();
132 
133 
144  function XoopsXmlRpcParser(&$input)
145  {
146  $this->SaxParser($input);
147  $this->addTagHandler(new RpcMethodNameHandler());
148  $this->addTagHandler(new RpcIntHandler());
149  $this->addTagHandler(new RpcDoubleHandler());
150  $this->addTagHandler(new RpcBooleanHandler());
151  $this->addTagHandler(new RpcStringHandler());
152  $this->addTagHandler(new RpcDateTimeHandler());
153  $this->addTagHandler(new RpcBase64Handler());
154  $this->addTagHandler(new RpcNameHandler());
155  $this->addTagHandler(new RpcValueHandler());
156  $this->addTagHandler(new RpcMemberHandler());
157  $this->addTagHandler(new RpcStructHandler());
158  $this->addTagHandler(new RpcArrayHandler());
159  }
160 
170  function setTempName($name)
171  {
172  $this->_tempName[$this->getWorkingLevel()] = $name;
173  }
174 
184  function getTempName()
185  {
186  return $this->_tempName[$this->getWorkingLevel()];
187  }
188 
198  function setTempValue($value)
199  {
200  if (is_array($value)) {
201  settype($this->_tempValue, 'array');
202  foreach ($value as $k => $v) {
203  $this->_tempValue[$k] = $v;
204  }
205  } elseif (is_string($value)) {
206  if (isset($this->_tempValue)) {
207  if (is_string($this->_tempValue)) {
208  $this->_tempValue .= $value;
209  }
210  } else {
211  $this->_tempValue = $value;
212  }
213  } else {
214  $this->_tempValue = $value;
215  }
216  }
217 
227  function getTempValue()
228  {
229  return $this->_tempValue;
230  }
231 
241  function resetTempValue()
242  {
243  unset($this->_tempValue);
244  }
245 
255  function setTempMember($name, $value)
256  {
257  $this->_tempMember[$this->getWorkingLevel()][$name] = $value;
258  }
259 
269  function getTempMember()
270  {
271  return $this->_tempMember[$this->getWorkingLevel()];
272  }
273 
283  function resetTempMember()
284  {
285  $this->_tempMember[$this->getCurrentLevel()] = array();
286  }
287 
297  function setWorkingLevel()
298  {
299  array_push($this->_workingLevel, $this->getCurrentLevel());
300  }
301 
311  function getWorkingLevel()
312  {
313  return $this->_workingLevel[count($this->_workingLevel) - 1];
314  }
315 
326  {
327  array_pop($this->_workingLevel);
328  }
329 
339  function setTempStruct($member)
340  {
341  $key = key($member);
342  $this->_tempStruct[$this->getWorkingLevel()][$key] = $member[$key];
343  }
344 
354  function getTempStruct()
355  {
356  return $this->_tempStruct[$this->getWorkingLevel()];
357  }
358 
368  function resetTempStruct()
369  {
370  $this->_tempStruct[$this->getCurrentLevel()] = array();
371  }
372 
382  function setTempArray($value)
383  {
384  $this->_tempArray[$this->getWorkingLevel()][] = $value;
385  }
386 
396  function getTempArray()
397  {
398  return $this->_tempArray[$this->getWorkingLevel()];
399  }
400 
410  function resetTempArray()
411  {
412  $this->_tempArray[$this->getCurrentLevel()] = array();
413  }
414 
424  function setMethodName($methodName)
425  {
426  $this->_methodName = $methodName;
427  }
428 
438  function getMethodName()
439  {
440  return $this->_methodName;
441  }
442 
452  function setParam($value)
453  {
454  $this->_param[] = $value;
455  }
456 
466  function &getParam()
467  {
468  return $this->_param;
469  }
470 }
471 
472 
474 {
475 
485  function getName()
486  {
487  return 'methodName';
488  }
489 
499  function handleCharacterData(&$parser, &$data)
500  {
501  $parser->setMethodName($data);
502  }
503 }
504 
506 {
507 
517  function getName()
518  {
519  return array('int', 'i4');
520  }
521 
531  function handleCharacterData(&$parser, &$data)
532  {
533  $parser->setTempValue(intval($data));
534  }
535 }
536 
538 {
539 
549  function getName()
550  {
551  return 'double';
552  }
553 
563  function handleCharacterData(&$parser, &$data)
564  {
565  $data = (float)$data;
566  $parser->setTempValue($data);
567  }
568 }
569 
571 {
572 
582  function getName()
583  {
584  return 'boolean';
585  }
586 
596  function handleCharacterData(&$parser, &$data)
597  {
598  $data = (boolean)$data;
599  $parser->setTempValue($data);
600  }
601 }
602 
604 {
605 
615  function getName()
616  {
617  return 'string';
618  }
619 
629  function handleCharacterData(&$parser, &$data)
630  {
631  $parser->setTempValue(strval($data));
632  }
633 }
634 
636 {
637 
647  function getName()
648  {
649  return 'dateTime.iso8601';
650  }
651 
661  function handleCharacterData(&$parser, &$data)
662  {
663  $matches = array();
664  if (!preg_match("/^([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})$/", $data, $matches)) {
665  $parser->setTempValue(time());
666  } else {
667  $parser->setTempValue(gmmktime($matches[4], $matches[5], $matches[6], $matches[2], $matches[3], $matches[1]));
668  }
669  }
670 }
671 
673 {
674 
684  function getName()
685  {
686  return 'base64';
687  }
688 
698  function handleCharacterData(&$parser, &$data)
699  {
700  $parser->setTempValue(base64_decode($data));
701  }
702 }
703 
705 {
706 
716  function getName()
717  {
718  return 'name';
719  }
720 
730  function handleCharacterData(&$parser, &$data)
731  {
732  switch ($parser->getParentTag()) {
733  case 'member':
734  $parser->setTempName($data);
735  break;
736  default:
737  break;
738  }
739  }
740 }
741 
742 
744 {
745 
755  function getName()
756  {
757  return 'value';
758  }
759 
769  function handleCharacterData(&$parser, &$data)
770  {
771  switch ($parser->getParentTag()) {
772  case 'member':
773  $parser->setTempValue($data);
774  break;
775  case 'data':
776  case 'array':
777  $parser->setTempValue($data);
778  break;
779  default:
780  break;
781  }
782  }
783 
793  function handleBeginElement(&$parser, &$attributes)
794  {
795  //$parser->resetTempValue();
796  }
797 
808  {
809  switch ($parser->getCurrentTag()) {
810  case 'member':
811  $parser->setTempMember($parser->getTempName(), $parser->getTempValue());
812  break;
813  case 'array':
814  case 'data':
815  $parser->setTempArray($parser->getTempValue());
816  break;
817  default:
818  $parser->setParam($parser->getTempValue());
819  break;
820  }
821  $parser->resetTempValue();
822  }
823 }
824 
826 {
827 
837  function getName()
838  {
839  return 'member';
840  }
841 
851  function handleBeginElement(&$parser, &$attributes)
852  {
853  $parser->setWorkingLevel();
854  $parser->resetTempMember();
855  }
856 
867  {
868  $member =& $parser->getTempMember();
869  $parser->releaseWorkingLevel();
870  $parser->setTempStruct($member);
871  }
872 }
873 
875 {
876 
886  function getName()
887  {
888  return 'array';
889  }
890 
900  function handleBeginElement(&$parser, &$attributes)
901  {
902  $parser->setWorkingLevel();
903  $parser->resetTempArray();
904  }
905 
916  {
917  $parser->setTempValue($parser->getTempArray());
918  $parser->releaseWorkingLevel();
919  }
920 }
921 
923 {
924 
934  function getName()
935  {
936  return 'struct';
937  }
938 
948  function handleBeginElement(&$parser, &$attributes)
949  {
950  $parser->setWorkingLevel();
951  $parser->resetTempStruct();
952  }
953 
964  {
965  $parser->setTempValue($parser->getTempStruct());
966  $parser->releaseWorkingLevel();
967  }
968 }
969 ?>