|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00026 require_once 'Zend/Amf/Value/Messaging/AcknowledgeMessage.php'; 00030 require_once 'Zend/Amf/Value/Messaging/AsyncMessage.php'; 00034 require_once 'Zend/Amf/Value/Messaging/CommandMessage.php'; 00038 require_once 'Zend/Amf/Value/Messaging/ErrorMessage.php'; 00042 require_once 'Zend/Amf/Value/Messaging/RemotingMessage.php'; 00043 00053 final class Zend_Amf_Parse_TypeLoader 00054 { 00058 public static $callbackClass; 00059 00063 public static $classMap = array ( 00064 'flex.messaging.messages.AcknowledgeMessage' => 'Zend_Amf_Value_Messaging_AcknowledgeMessage', 00065 'flex.messaging.messages.ErrorMessage' => 'Zend_Amf_Value_Messaging_AsyncMessage', 00066 'flex.messaging.messages.CommandMessage' => 'Zend_Amf_Value_Messaging_CommandMessage', 00067 'flex.messaging.messages.ErrorMessage' => 'Zend_Amf_Value_Messaging_ErrorMessage', 00068 'flex.messaging.messages.RemotingMessage' => 'Zend_Amf_Value_Messaging_RemotingMessage', 00069 'flex.messaging.io.ArrayCollection' => 'Zend_Amf_Value_Messaging_ArrayCollection', 00070 ); 00071 00075 protected static $_defaultClassMap = array( 00076 'flex.messaging.messages.AcknowledgeMessage' => 'Zend_Amf_Value_Messaging_AcknowledgeMessage', 00077 'flex.messaging.messages.ErrorMessage' => 'Zend_Amf_Value_Messaging_AsyncMessage', 00078 'flex.messaging.messages.CommandMessage' => 'Zend_Amf_Value_Messaging_CommandMessage', 00079 'flex.messaging.messages.ErrorMessage' => 'Zend_Amf_Value_Messaging_ErrorMessage', 00080 'flex.messaging.messages.RemotingMessage' => 'Zend_Amf_Value_Messaging_RemotingMessage', 00081 'flex.messaging.io.ArrayCollection' => 'Zend_Amf_Value_Messaging_ArrayCollection', 00082 ); 00083 00087 protected static $_resourceLoader = null; 00088 00089 00096 public static function loadType($className) 00097 { 00098 $class = self::getMappedClassName($className); 00099 if(!$class) { 00100 $class = str_replace('.', '_', $className); 00101 } 00102 if (!class_exists($class)) { 00103 return "stdClass"; 00104 } 00105 return $class; 00106 } 00107 00114 public static function getMappedClassName($className) 00115 { 00116 $mappedName = array_search($className, self::$classMap); 00117 00118 if ($mappedName) { 00119 return $mappedName; 00120 } 00121 00122 $mappedName = array_search($className, array_flip(self::$classMap)); 00123 00124 if ($mappedName) { 00125 return $mappedName; 00126 } 00127 00128 return false; 00129 } 00130 00142 public static function setMapping($asClassName, $phpClassName) 00143 { 00144 self::$classMap[$asClassName] = $phpClassName; 00145 } 00146 00152 public static function resetMap() 00153 { 00154 self::$classMap = self::$_defaultClassMap; 00155 } 00156 00162 public static function setResourceLoader(Zend_Loader_PluginLoader_Interface $loader) 00163 { 00164 self::$_resourceLoader = $loader; 00165 } 00166 00173 public static function addResourceDirectory($prefix, $dir) 00174 { 00175 if(self::$_resourceLoader) { 00176 self::$_resourceLoader->addPrefixPath($prefix, $dir); 00177 } 00178 } 00179 00186 public static function getResourceParser($resource) 00187 { 00188 if(self::$_resourceLoader) { 00189 $type = preg_replace("/[^A-Za-z0-9_]/", " ", get_resource_type($resource)); 00190 $type = str_replace(" ","", ucwords($type)); 00191 return self::$_resourceLoader->load($type); 00192 } 00193 return false; 00194 } 00195 00202 public static function handleResource($resource) 00203 { 00204 if(!self::$_resourceLoader) { 00205 require_once 'Zend/Amf/Exception.php'; 00206 throw new Zend_Amf_Exception('Unable to handle resources - resource plugin loader not set'); 00207 } 00208 try { 00209 while(is_resource($resource)) { 00210 $resclass = self::getResourceParser($resource); 00211 if(!$resclass) { 00212 require_once 'Zend/Amf/Exception.php'; 00213 throw new Zend_Amf_Exception('Can not serialize resource type: '. get_resource_type($resource)); 00214 } 00215 $parser = new $resclass(); 00216 if(is_callable(array($parser, 'parse'))) { 00217 $resource = $parser->parse($resource); 00218 } else { 00219 require_once 'Zend/Amf/Exception.php'; 00220 throw new Zend_Amf_Exception("Could not call parse() method on class $resclass"); 00221 } 00222 } 00223 return $resource; 00224 } catch(Zend_Amf_Exception $e) { 00225 throw new Zend_Amf_Exception($e->getMessage(), $e->getCode(), $e); 00226 } catch(Exception $e) { 00227 require_once 'Zend/Amf/Exception.php'; 00228 throw new Zend_Amf_Exception('Can not serialize resource type: '. get_resource_type($resource), 0, $e); 00229 } 00230 } 00231 }