web/Zend/Gdata/Gapps/ServiceException.php
changeset 0 4eba9c11703f
equal deleted inserted replaced
-1:000000000000 0:4eba9c11703f
       
     1 <?php
       
     2 
       
     3 /**
       
     4  * Zend Framework
       
     5  *
       
     6  * LICENSE
       
     7  *
       
     8  * This source file is subject to the new BSD license that is bundled
       
     9  * with this package in the file LICENSE.txt.
       
    10  * It is also available through the world-wide-web at this URL:
       
    11  * http://framework.zend.com/license/new-bsd
       
    12  * If you did not receive a copy of the license and are unable to
       
    13  * obtain it through the world-wide-web, please send an email
       
    14  * to license@zend.com so we can send you a copy immediately.
       
    15  *
       
    16  * @category   Zend
       
    17  * @package    Zend_Gdata
       
    18  * @subpackage Gapps
       
    19  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    20  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    21  * @version    $Id: ServiceException.php 20096 2010-01-06 02:05:09Z bkarwin $
       
    22  */
       
    23 
       
    24 
       
    25 /**
       
    26  * Zend_Exception
       
    27  */
       
    28 require_once 'Zend/Exception.php';
       
    29 
       
    30 /**
       
    31  * Zend_Gdata_Gapps_Error
       
    32  */
       
    33 require_once 'Zend/Gdata/Gapps/Error.php';
       
    34 
       
    35 /**
       
    36  * Gdata Gapps Exception class. This is thrown when an
       
    37  * AppsForYourDomainErrors message is received from the Google Apps
       
    38  * servers.
       
    39  *
       
    40  * Several different errors may be represented by this exception. For a list
       
    41  * of error codes available, see getErrorCode.
       
    42  *
       
    43  * @category   Zend
       
    44  * @package    Zend_Gdata
       
    45  * @subpackage Gapps
       
    46  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
       
    47  * @license    http://framework.zend.com/license/new-bsd     New BSD License
       
    48  */
       
    49 class Zend_Gdata_Gapps_ServiceException extends Zend_Exception
       
    50 {
       
    51 
       
    52     protected $_rootElement = "AppsForYourDomainErrors";
       
    53 
       
    54     /**
       
    55      * Array of Zend_Gdata_Error objects indexed by error code.
       
    56      *
       
    57      * @var array
       
    58      */
       
    59     protected $_errors = array();
       
    60 
       
    61     /**
       
    62      * Create a new ServiceException.
       
    63      *
       
    64      * @return array An array containing a collection of
       
    65      *          Zend_Gdata_Gapps_Error objects.
       
    66      */
       
    67     public function __construct($errors = null) {
       
    68         parent::__construct("Server errors encountered");
       
    69         if ($errors !== null) {
       
    70             $this->setErrors($errors);
       
    71         }
       
    72     }
       
    73 
       
    74     /**
       
    75      * Add a single Error object to the list of errors received by the
       
    76      * server.
       
    77      *
       
    78      * @param Zend_Gdata_Gapps_Error $error An instance of an error returned
       
    79      *          by the server. The error's errorCode must be set.
       
    80      * @throws Zend_Gdata_App_Exception
       
    81      */
       
    82     public function addError($error) {
       
    83         // Make sure that we don't try to index an error that doesn't
       
    84         // contain an index value.
       
    85         if ($error->getErrorCode() == null) {
       
    86             require_once 'Zend/Gdata/App/Exception.php';
       
    87             throw new Zend_Gdata_App_Exception("Error encountered without corresponding error code.");
       
    88         }
       
    89 
       
    90         $this->_errors[$error->getErrorCode()] = $error;
       
    91     }
       
    92 
       
    93     /**
       
    94      * Set the list of errors as sent by the server inside of an
       
    95      * AppsForYourDomainErrors tag.
       
    96      *
       
    97      * @param array $array An associative array containing a collection of
       
    98      *          Zend_Gdata_Gapps_Error objects. All errors must have their
       
    99      *          errorCode value set.
       
   100      * @throws Zend_Gdata_App_Exception
       
   101      */
       
   102     public function setErrors($array) {
       
   103         $this->_errors = array();
       
   104         foreach ($array as $error) {
       
   105             $this->addError($error);
       
   106         }
       
   107     }
       
   108 
       
   109     /**
       
   110      * Get the list of errors as sent by the server inside of an
       
   111      * AppsForYourDomainErrors tag.
       
   112      *
       
   113      * @return array An associative array containing a collection of
       
   114      *          Zend_Gdata_Gapps_Error objects, indexed by error code.
       
   115      */
       
   116     public function getErrors() {
       
   117         return $this->_errors;
       
   118     }
       
   119 
       
   120     /**
       
   121      * Return the Error object associated with a specific error code.
       
   122      *
       
   123      * @return Zend_Gdata_Gapps_Error The Error object requested, or null
       
   124      *              if not found.
       
   125      */
       
   126     public function getError($errorCode) {
       
   127         if (array_key_exists($errorCode, $this->_errors)) {
       
   128             $result = $this->_errors[$errorCode];
       
   129             return $result;
       
   130         } else {
       
   131             return null;
       
   132         }
       
   133     }
       
   134 
       
   135     /**
       
   136      * Check whether or not a particular error code was returned by the
       
   137      * server.
       
   138      *
       
   139      * @param integer $errorCode The error code to check against.
       
   140      * @return boolean Whether or not the supplied error code was returned
       
   141      *          by the server.
       
   142      */
       
   143     public function hasError($errorCode) {
       
   144         return array_key_exists($errorCode, $this->_errors);
       
   145     }
       
   146 
       
   147     /**
       
   148      * Import an AppsForYourDomain error from XML.
       
   149      *
       
   150      * @param string $string The XML data to be imported
       
   151      * @return Zend_Gdata_Gapps_ServiceException Provides a fluent interface.
       
   152      * @throws Zend_Gdata_App_Exception
       
   153      */
       
   154     public function importFromString($string) {
       
   155         if ($string) {
       
   156             // Check to see if an AppsForYourDomainError exists
       
   157             //
       
   158             // track_errors is temporarily enabled so that if an error
       
   159             // occurs while parsing the XML we can append it to an
       
   160             // exception by referencing $php_errormsg
       
   161             @ini_set('track_errors', 1);
       
   162             $doc = new DOMDocument();
       
   163             $success = @$doc->loadXML($string);
       
   164             @ini_restore('track_errors');
       
   165 
       
   166             if (!$success) {
       
   167                 require_once 'Zend/Gdata/App/Exception.php';
       
   168                 // $php_errormsg is automatically generated by PHP if
       
   169                 // an error occurs while calling loadXML(), above.
       
   170                 throw new Zend_Gdata_App_Exception("DOMDocument cannot parse XML: $php_errormsg");
       
   171             }
       
   172 
       
   173             // Ensure that the outermost node is an AppsForYourDomain error.
       
   174             // If it isn't, something has gone horribly wrong.
       
   175             $rootElement = $doc->getElementsByTagName($this->_rootElement)->item(0);
       
   176             if (!$rootElement) {
       
   177                 require_once 'Zend/Gdata/App/Exception.php';
       
   178                 throw new Zend_Gdata_App_Exception('No root <' . $this->_rootElement . '> element found, cannot parse feed.');
       
   179             }
       
   180 
       
   181             foreach ($rootElement->childNodes as $errorNode) {
       
   182                 if (!($errorNode instanceof DOMText)) {
       
   183                     $error = new Zend_Gdata_Gapps_Error();
       
   184                     $error->transferFromDom($errorNode);
       
   185                     $this->addError($error);
       
   186                 }
       
   187             }
       
   188             return $this;
       
   189         } else {
       
   190             require_once 'Zend/Gdata/App/Exception.php';
       
   191             throw new Zend_Gdata_App_Exception('XML passed to transferFromXML cannot be null');
       
   192         }
       
   193 
       
   194     }
       
   195 
       
   196     /**
       
   197      * Get a human readable version of this exception.
       
   198      *
       
   199      * @return string
       
   200      */
       
   201     public function __toString() {
       
   202         $result = "The server encountered the following errors processing the request:";
       
   203         foreach ($this->_errors as $error) {
       
   204             $result .= "\n" . $error->__toString();
       
   205         }
       
   206         return $result;
       
   207     }
       
   208 }