web/lib/Zend/Gdata/Gapps/ServiceException.php
changeset 64 162c1de6545a
parent 19 1c2f13fd785c
child 68 ecaf28ffe26e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/Zend/Gdata/Gapps/ServiceException.php	Fri Mar 11 15:05:35 2011 +0100
@@ -0,0 +1,208 @@
+<?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_Gdata
+ * @subpackage Gapps
+ * @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: ServiceException.php 20096 2010-01-06 02:05:09Z bkarwin $
+ */
+
+
+/**
+ * Zend_Exception
+ */
+require_once 'Zend/Exception.php';
+
+/**
+ * Zend_Gdata_Gapps_Error
+ */
+require_once 'Zend/Gdata/Gapps/Error.php';
+
+/**
+ * Gdata Gapps Exception class. This is thrown when an
+ * AppsForYourDomainErrors message is received from the Google Apps
+ * servers.
+ *
+ * Several different errors may be represented by this exception. For a list
+ * of error codes available, see getErrorCode.
+ *
+ * @category   Zend
+ * @package    Zend_Gdata
+ * @subpackage Gapps
+ * @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_Gdata_Gapps_ServiceException extends Zend_Exception
+{
+
+    protected $_rootElement = "AppsForYourDomainErrors";
+
+    /**
+     * Array of Zend_Gdata_Error objects indexed by error code.
+     *
+     * @var array
+     */
+    protected $_errors = array();
+
+    /**
+     * Create a new ServiceException.
+     *
+     * @return array An array containing a collection of
+     *          Zend_Gdata_Gapps_Error objects.
+     */
+    public function __construct($errors = null) {
+        parent::__construct("Server errors encountered");
+        if ($errors !== null) {
+            $this->setErrors($errors);
+        }
+    }
+
+    /**
+     * Add a single Error object to the list of errors received by the
+     * server.
+     *
+     * @param Zend_Gdata_Gapps_Error $error An instance of an error returned
+     *          by the server. The error's errorCode must be set.
+     * @throws Zend_Gdata_App_Exception
+     */
+    public function addError($error) {
+        // Make sure that we don't try to index an error that doesn't
+        // contain an index value.
+        if ($error->getErrorCode() == null) {
+            require_once 'Zend/Gdata/App/Exception.php';
+            throw new Zend_Gdata_App_Exception("Error encountered without corresponding error code.");
+        }
+
+        $this->_errors[$error->getErrorCode()] = $error;
+    }
+
+    /**
+     * Set the list of errors as sent by the server inside of an
+     * AppsForYourDomainErrors tag.
+     *
+     * @param array $array An associative array containing a collection of
+     *          Zend_Gdata_Gapps_Error objects. All errors must have their
+     *          errorCode value set.
+     * @throws Zend_Gdata_App_Exception
+     */
+    public function setErrors($array) {
+        $this->_errors = array();
+        foreach ($array as $error) {
+            $this->addError($error);
+        }
+    }
+
+    /**
+     * Get the list of errors as sent by the server inside of an
+     * AppsForYourDomainErrors tag.
+     *
+     * @return array An associative array containing a collection of
+     *          Zend_Gdata_Gapps_Error objects, indexed by error code.
+     */
+    public function getErrors() {
+        return $this->_errors;
+    }
+
+    /**
+     * Return the Error object associated with a specific error code.
+     *
+     * @return Zend_Gdata_Gapps_Error The Error object requested, or null
+     *              if not found.
+     */
+    public function getError($errorCode) {
+        if (array_key_exists($errorCode, $this->_errors)) {
+            $result = $this->_errors[$errorCode];
+            return $result;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Check whether or not a particular error code was returned by the
+     * server.
+     *
+     * @param integer $errorCode The error code to check against.
+     * @return boolean Whether or not the supplied error code was returned
+     *          by the server.
+     */
+    public function hasError($errorCode) {
+        return array_key_exists($errorCode, $this->_errors);
+    }
+
+    /**
+     * Import an AppsForYourDomain error from XML.
+     *
+     * @param string $string The XML data to be imported
+     * @return Zend_Gdata_Gapps_ServiceException Provides a fluent interface.
+     * @throws Zend_Gdata_App_Exception
+     */
+    public function importFromString($string) {
+        if ($string) {
+            // Check to see if an AppsForYourDomainError exists
+            //
+            // track_errors is temporarily enabled so that if an error
+            // occurs while parsing the XML we can append it to an
+            // exception by referencing $php_errormsg
+            @ini_set('track_errors', 1);
+            $doc = new DOMDocument();
+            $success = @$doc->loadXML($string);
+            @ini_restore('track_errors');
+
+            if (!$success) {
+                require_once 'Zend/Gdata/App/Exception.php';
+                // $php_errormsg is automatically generated by PHP if
+                // an error occurs while calling loadXML(), above.
+                throw new Zend_Gdata_App_Exception("DOMDocument cannot parse XML: $php_errormsg");
+            }
+
+            // Ensure that the outermost node is an AppsForYourDomain error.
+            // If it isn't, something has gone horribly wrong.
+            $rootElement = $doc->getElementsByTagName($this->_rootElement)->item(0);
+            if (!$rootElement) {
+                require_once 'Zend/Gdata/App/Exception.php';
+                throw new Zend_Gdata_App_Exception('No root <' . $this->_rootElement . '> element found, cannot parse feed.');
+            }
+
+            foreach ($rootElement->childNodes as $errorNode) {
+                if (!($errorNode instanceof DOMText)) {
+                    $error = new Zend_Gdata_Gapps_Error();
+                    $error->transferFromDom($errorNode);
+                    $this->addError($error);
+                }
+            }
+            return $this;
+        } else {
+            require_once 'Zend/Gdata/App/Exception.php';
+            throw new Zend_Gdata_App_Exception('XML passed to transferFromXML cannot be null');
+        }
+
+    }
+
+    /**
+     * Get a human readable version of this exception.
+     *
+     * @return string
+     */
+    public function __toString() {
+        $result = "The server encountered the following errors processing the request:";
+        foreach ($this->_errors as $error) {
+            $result .= "\n" . $error->__toString();
+        }
+        return $result;
+    }
+}