/framework/vendor/zend/Zend/Rest/Client/Result.php
http://zoop.googlecode.com/ · PHP · 236 lines · 120 code · 22 blank · 94 comment · 28 complexity · 8451ff363dfc37a7cee1eac727db97c9 MD5 · raw file
- <?php
- /**
- * Zend Framework
- *
- * LICENSE
- *
- * This source file is subject to the new BSD license that is bundled
- * with this package in the file LICENSE.txt.
- * It is also available through the world-wide-web at this URL:
- * http://framework.zend.com/license/new-bsd
- * If you did not receive a copy of the license and are unable to
- * obtain it through the world-wide-web, please send an email
- * to license@zend.com so we can send you a copy immediately.
- *
- * @category Zend
- * @package Zend_Rest
- * @subpackage Client
- * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- * @version $Id: Result.php 20096 2010-01-06 02:05:09Z bkarwin $
- */
- /**
- * @category Zend
- * @package Zend_Rest
- * @subpackage Client
- * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
- class Zend_Rest_Client_Result implements IteratorAggregate {
- /**
- * @var SimpleXMLElement
- */
- protected $_sxml;
- /**
- * error information
- * @var string
- */
- protected $_errstr;
- /**
- * Constructor
- *
- * @param string $data XML Result
- * @return void
- */
- public function __construct($data)
- {
- set_error_handler(array($this, 'handleXmlErrors'));
- $this->_sxml = simplexml_load_string($data);
- restore_error_handler();
- if($this->_sxml === false) {
- if ($this->_errstr === null) {
- $message = "An error occured while parsing the REST response with simplexml.";
- } else {
- $message = "REST Response Error: " . $this->_errstr;
- $this->_errstr = null;
- }
- require_once "Zend/Rest/Client/Result/Exception.php";
- throw new Zend_Rest_Client_Result_Exception($message);
- }
- }
- /**
- * Temporary error handler for parsing REST responses.
- *
- * @param int $errno
- * @param string $errstr
- * @param string $errfile
- * @param string $errline
- * @param array $errcontext
- * @return true
- */
- public function handleXmlErrors($errno, $errstr, $errfile = null, $errline = null, array $errcontext = null)
- {
- $this->_errstr = $errstr;
- return true;
- }
- /**
- * Casts a SimpleXMLElement to its appropriate PHP value
- *
- * @param SimpleXMLElement $value
- * @return mixed
- */
- public function toValue(SimpleXMLElement $value)
- {
- $node = dom_import_simplexml($value);
- return $node->nodeValue;
- }
- /**
- * Get Property Overload
- *
- * @param string $name
- * @return null|SimpleXMLElement|array Null if not found, SimpleXMLElement if only one value found, array of Zend_Rest_Client_Result objects otherwise
- */
- public function __get($name)
- {
- if (isset($this->_sxml->{$name})) {
- return $this->_sxml->{$name};
- }
- $result = $this->_sxml->xpath("//$name");
- $count = count($result);
- if ($count == 0) {
- return null;
- } elseif ($count == 1) {
- return $result[0];
- } else {
- return $result;
- }
- }
- /**
- * Cast properties to PHP values
- *
- * For arrays, loops through each element and casts to a value as well.
- *
- * @param string $method
- * @param array $args
- * @return mixed
- */
- public function __call($method, $args)
- {
- if (null !== ($value = $this->__get($method))) {
- if (!is_array($value)) {
- return $this->toValue($value);
- } else {
- $return = array();
- foreach ($value as $element) {
- $return[] = $this->toValue($element);
- }
- return $return;
- }
- }
- return null;
- }
- /**
- * Isset Overload
- *
- * @param string $name
- * @return boolean
- */
- public function __isset($name)
- {
- if (isset($this->_sxml->{$name})) {
- return true;
- }
- $result = $this->_sxml->xpath("//$name");
- if (sizeof($result) > 0) {
- return true;
- }
- return false;
- }
- /**
- * Implement IteratorAggregate::getIterator()
- *
- * @return SimpleXMLIterator
- */
- public function getIterator()
- {
- return $this->_sxml;
- }
- /**
- * Get Request Status
- *
- * @return boolean
- */
- public function getStatus()
- {
- $status = $this->_sxml->xpath('//status/text()');
- $status = strtolower($status[0]);
- if (ctype_alpha($status) && $status == 'success') {
- return true;
- } elseif (ctype_alpha($status) && $status != 'success') {
- return false;
- } else {
- return (bool) $status;
- }
- }
- public function isError()
- {
- $status = $this->getStatus();
- if ($status) {
- return false;
- } else {
- return true;
- }
- }
- public function isSuccess()
- {
- $status = $this->getStatus();
- if ($status) {
- return true;
- } else {
- return false;
- }
- }
- /**
- * toString overload
- *
- * Be sure to only call this when the result is a single value!
- *
- * @return string
- */
- public function __toString()
- {
- if (!$this->getStatus()) {
- $message = $this->_sxml->xpath('//message');
- return (string) $message[0];
- } else {
- $result = $this->_sxml->xpath('//response');
- if (sizeof($result) > 1) {
- return (string) "An error occured.";
- } else {
- return (string) $result[0];
- }
- }
- }
- }