1<?php 2/** 3 * Zend Framework (http://framework.zend.com/) 4 * 5 * @link http://github.com/zendframework/zf2 for the canonical source repository 6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 7 * @license http://framework.zend.com/license/new-bsd New BSD License 8 */ 9 10namespace Zend\Feed\Writer; 11 12/** 13*/ 14class Writer 15{ 16 /** 17 * Namespace constants 18 */ 19 const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#'; 20 const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom'; 21 const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'; 22 const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/'; 23 const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/'; 24 25 /** 26 * Feed type constants 27 */ 28 const TYPE_ANY = 'any'; 29 const TYPE_ATOM_03 = 'atom-03'; 30 const TYPE_ATOM_10 = 'atom-10'; 31 const TYPE_ATOM_ANY = 'atom'; 32 const TYPE_RSS_090 = 'rss-090'; 33 const TYPE_RSS_091 = 'rss-091'; 34 const TYPE_RSS_091_NETSCAPE = 'rss-091n'; 35 const TYPE_RSS_091_USERLAND = 'rss-091u'; 36 const TYPE_RSS_092 = 'rss-092'; 37 const TYPE_RSS_093 = 'rss-093'; 38 const TYPE_RSS_094 = 'rss-094'; 39 const TYPE_RSS_10 = 'rss-10'; 40 const TYPE_RSS_20 = 'rss-20'; 41 const TYPE_RSS_ANY = 'rss'; 42 43 /** 44 * @var ExtensionManagerInterface 45 */ 46 protected static $extensionManager = null; 47 48 /** 49 * Array of registered extensions by class postfix (after the base class 50 * name) across four categories - data containers and renderers for entry 51 * and feed levels. 52 * 53 * @var array 54 */ 55 protected static $extensions = array( 56 'entry' => array(), 57 'feed' => array(), 58 'entryRenderer' => array(), 59 'feedRenderer' => array(), 60 ); 61 62 /** 63 * Set plugin loader for use with Extensions 64 * 65 * @param ExtensionManagerInterface 66 */ 67 public static function setExtensionManager(ExtensionManagerInterface $extensionManager) 68 { 69 static::$extensionManager = $extensionManager; 70 } 71 72 /** 73 * Get plugin manager for use with Extensions 74 * 75 * @return ExtensionManagerInterface 76 */ 77 public static function getExtensionManager() 78 { 79 if (!isset(static::$extensionManager)) { 80 static::setExtensionManager(new ExtensionManager()); 81 } 82 return static::$extensionManager; 83 } 84 85 /** 86 * Register an Extension by name 87 * 88 * @param string $name 89 * @return void 90 * @throws Exception\RuntimeException if unable to resolve Extension class 91 */ 92 public static function registerExtension($name) 93 { 94 $feedName = $name . '\Feed'; 95 $entryName = $name . '\Entry'; 96 $feedRendererName = $name . '\Renderer\Feed'; 97 $entryRendererName = $name . '\Renderer\Entry'; 98 $manager = static::getExtensionManager(); 99 if (static::isRegistered($name)) { 100 if ($manager->has($feedName) 101 || $manager->has($entryName) 102 || $manager->has($feedRendererName) 103 || $manager->has($entryRendererName) 104 ) { 105 return; 106 } 107 } 108 if (!$manager->has($feedName) 109 && !$manager->has($entryName) 110 && !$manager->has($feedRendererName) 111 && !$manager->has($entryRendererName) 112 ) { 113 throw new Exception\RuntimeException('Could not load extension: ' . $name 114 . 'using Plugin Loader. Check prefix paths are configured and extension exists.'); 115 } 116 if ($manager->has($feedName)) { 117 static::$extensions['feed'][] = $feedName; 118 } 119 if ($manager->has($entryName)) { 120 static::$extensions['entry'][] = $entryName; 121 } 122 if ($manager->has($feedRendererName)) { 123 static::$extensions['feedRenderer'][] = $feedRendererName; 124 } 125 if ($manager->has($entryRendererName)) { 126 static::$extensions['entryRenderer'][] = $entryRendererName; 127 } 128 } 129 130 /** 131 * Is a given named Extension registered? 132 * 133 * @param string $extensionName 134 * @return bool 135 */ 136 public static function isRegistered($extensionName) 137 { 138 $feedName = $extensionName . '\Feed'; 139 $entryName = $extensionName . '\Entry'; 140 $feedRendererName = $extensionName . '\Renderer\Feed'; 141 $entryRendererName = $extensionName . '\Renderer\Entry'; 142 if (in_array($feedName, static::$extensions['feed']) 143 || in_array($entryName, static::$extensions['entry']) 144 || in_array($feedRendererName, static::$extensions['feedRenderer']) 145 || in_array($entryRendererName, static::$extensions['entryRenderer']) 146 ) { 147 return true; 148 } 149 return false; 150 } 151 152 /** 153 * Get a list of extensions 154 * 155 * @return array 156 */ 157 public static function getExtensions() 158 { 159 return static::$extensions; 160 } 161 162 /** 163 * Reset class state to defaults 164 * 165 * @return void 166 */ 167 public static function reset() 168 { 169 static::$extensionManager = null; 170 static::$extensions = array( 171 'entry' => array(), 172 'feed' => array(), 173 'entryRenderer' => array(), 174 'feedRenderer' => array(), 175 ); 176 } 177 178 /** 179 * Register core (default) extensions 180 * 181 * @return void 182 */ 183 public static function registerCoreExtensions() 184 { 185 static::registerExtension('DublinCore'); 186 static::registerExtension('Content'); 187 static::registerExtension('Atom'); 188 static::registerExtension('Slash'); 189 static::registerExtension('WellFormedWeb'); 190 static::registerExtension('Threading'); 191 static::registerExtension('ITunes'); 192 } 193 194 public static function lcfirst($str) 195 { 196 $str[0] = strtolower($str[0]); 197 return $str; 198 } 199} 200