|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00026 require_once 'Zend/XmlRpc/Fault.php'; 00027 00028 00050 class Zend_XmlRpc_Server_Fault extends Zend_XmlRpc_Fault 00051 { 00055 protected $_exception; 00056 00060 protected static $_faultExceptionClasses = array('Zend_XmlRpc_Server_Exception' => true); 00061 00065 protected static $_observers = array(); 00066 00073 public function __construct(Exception $e) 00074 { 00075 $this->_exception = $e; 00076 $code = 404; 00077 $message = 'Unknown error'; 00078 $exceptionClass = get_class($e); 00079 00080 foreach (array_keys(self::$_faultExceptionClasses) as $class) { 00081 if ($e instanceof $class) { 00082 $code = $e->getCode(); 00083 $message = $e->getMessage(); 00084 break; 00085 } 00086 } 00087 00088 parent::__construct($code, $message); 00089 00090 // Notify exception observers, if present 00091 if (!empty(self::$_observers)) { 00092 foreach (array_keys(self::$_observers) as $observer) { 00093 call_user_func(array($observer, 'observe'), $this); 00094 } 00095 } 00096 } 00097 00104 public static function getInstance(Exception $e) 00105 { 00106 return new self($e); 00107 } 00108 00115 public static function attachFaultException($classes) 00116 { 00117 if (!is_array($classes)) { 00118 $classes = (array) $classes; 00119 } 00120 00121 foreach ($classes as $class) { 00122 if (is_string($class) && class_exists($class)) { 00123 self::$_faultExceptionClasses[$class] = true; 00124 } 00125 } 00126 } 00127 00134 public static function detachFaultException($classes) 00135 { 00136 if (!is_array($classes)) { 00137 $classes = (array) $classes; 00138 } 00139 00140 foreach ($classes as $class) { 00141 if (is_string($class) && isset(self::$_faultExceptionClasses[$class])) { 00142 unset(self::$_faultExceptionClasses[$class]); 00143 } 00144 } 00145 } 00146 00159 public static function attachObserver($class) 00160 { 00161 if (!is_string($class) 00162 || !class_exists($class) 00163 || !is_callable(array($class, 'observe'))) 00164 { 00165 return false; 00166 } 00167 00168 if (!isset(self::$_observers[$class])) { 00169 self::$_observers[$class] = true; 00170 } 00171 00172 return true; 00173 } 00174 00181 public static function detachObserver($class) 00182 { 00183 if (!isset(self::$_observers[$class])) { 00184 return false; 00185 } 00186 00187 unset(self::$_observers[$class]); 00188 return true; 00189 } 00190 00197 public function getException() 00198 { 00199 return $this->_exception; 00200 } 00201 }