225 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			225 lines
		
	
	
	
		
			5.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * SimplePie
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * A PHP-Based RSS and Atom Feed Framework.
							 | 
						||
| 
								 | 
							
								 * Takes the hard work out of managing a complete RSS/Atom solution.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
							 | 
						||
| 
								 | 
							
								 * All rights reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Redistribution and use in source and binary forms, with or without modification, are
							 | 
						||
| 
								 | 
							
								 * permitted provided that the following conditions are met:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 	* Redistributions of source code must retain the above copyright notice, this list of
							 | 
						||
| 
								 | 
							
								 * 	  conditions and the following disclaimer.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
							 | 
						||
| 
								 | 
							
								 * 	  of conditions and the following disclaimer in the documentation and/or other materials
							 | 
						||
| 
								 | 
							
								 * 	  provided with the distribution.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
							 | 
						||
| 
								 | 
							
								 * 	  to endorse or promote products derived from this software without specific prior
							 | 
						||
| 
								 | 
							
								 * 	  written permission.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
							 | 
						||
| 
								 | 
							
								 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
							 | 
						||
| 
								 | 
							
								 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
							 | 
						||
| 
								 | 
							
								 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
							 | 
						||
| 
								 | 
							
								 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
							 | 
						||
| 
								 | 
							
								 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
							 | 
						||
| 
								 | 
							
								 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
							 | 
						||
| 
								 | 
							
								 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
							 | 
						||
| 
								 | 
							
								 * POSSIBILITY OF SUCH DAMAGE.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package SimplePie
							 | 
						||
| 
								 | 
							
								 * @version 1.3.1
							 | 
						||
| 
								 | 
							
								 * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
							 | 
						||
| 
								 | 
							
								 * @author Ryan Parman
							 | 
						||
| 
								 | 
							
								 * @author Geoffrey Sneddon
							 | 
						||
| 
								 | 
							
								 * @author Ryan McCue
							 | 
						||
| 
								 | 
							
								 * @link http://simplepie.org/ SimplePie
							 | 
						||
| 
								 | 
							
								 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Handles creating objects and calling methods
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Access this via {@see SimplePie::get_registry()}
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package SimplePie
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class SimplePie_Registry
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Default class mapping
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * Overriding classes *must* subclass these.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @var array
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									protected $default = array(
							 | 
						||
| 
								 | 
							
										'Cache' => 'SimplePie_Cache',
							 | 
						||
| 
								 | 
							
										'Locator' => 'SimplePie_Locator',
							 | 
						||
| 
								 | 
							
										'Parser' => 'SimplePie_Parser',
							 | 
						||
| 
								 | 
							
										'File' => 'SimplePie_File',
							 | 
						||
| 
								 | 
							
										'Sanitize' => 'SimplePie_Sanitize',
							 | 
						||
| 
								 | 
							
										'Item' => 'SimplePie_Item',
							 | 
						||
| 
								 | 
							
										'Author' => 'SimplePie_Author',
							 | 
						||
| 
								 | 
							
										'Category' => 'SimplePie_Category',
							 | 
						||
| 
								 | 
							
										'Enclosure' => 'SimplePie_Enclosure',
							 | 
						||
| 
								 | 
							
										'Caption' => 'SimplePie_Caption',
							 | 
						||
| 
								 | 
							
										'Copyright' => 'SimplePie_Copyright',
							 | 
						||
| 
								 | 
							
										'Credit' => 'SimplePie_Credit',
							 | 
						||
| 
								 | 
							
										'Rating' => 'SimplePie_Rating',
							 | 
						||
| 
								 | 
							
										'Restriction' => 'SimplePie_Restriction',
							 | 
						||
| 
								 | 
							
										'Content_Type_Sniffer' => 'SimplePie_Content_Type_Sniffer',
							 | 
						||
| 
								 | 
							
										'Source' => 'SimplePie_Source',
							 | 
						||
| 
								 | 
							
										'Misc' => 'SimplePie_Misc',
							 | 
						||
| 
								 | 
							
										'XML_Declaration_Parser' => 'SimplePie_XML_Declaration_Parser',
							 | 
						||
| 
								 | 
							
										'Parse_Date' => 'SimplePie_Parse_Date',
							 | 
						||
| 
								 | 
							
									);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Class mapping
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @see register()
							 | 
						||
| 
								 | 
							
									 * @var array
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									protected $classes = array();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Legacy classes
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @see register()
							 | 
						||
| 
								 | 
							
									 * @var array
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									protected $legacy = array();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Constructor
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * No-op
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function __construct() { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Register a class
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @param string $type See {@see $default} for names
							 | 
						||
| 
								 | 
							
									 * @param string $class Class name, must subclass the corresponding default
							 | 
						||
| 
								 | 
							
									 * @param bool $legacy Whether to enable legacy support for this class
							 | 
						||
| 
								 | 
							
									 * @return bool Successfulness
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function register($type, $class, $legacy = false)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (!is_subclass_of($class, $this->default[$type]))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											return false;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$this->classes[$type] = $class;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if ($legacy)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											$this->legacy[] = $class;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return true;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Get the class registered for a type
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * Where possible, use {@see create()} or {@see call()} instead
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @param string $type
							 | 
						||
| 
								 | 
							
									 * @return string|null
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function get_class($type)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (!empty($this->classes[$type]))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											return $this->classes[$type];
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										if (!empty($this->default[$type]))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											return $this->default[$type];
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Create a new instance of a given type
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @param string $type
							 | 
						||
| 
								 | 
							
									 * @param array $parameters Parameters to pass to the constructor
							 | 
						||
| 
								 | 
							
									 * @return object Instance of class
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function &create($type, $parameters = array())
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$class = $this->get_class($type);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (in_array($class, $this->legacy))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											switch ($type)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												case 'locator':
							 | 
						||
| 
								 | 
							
													// Legacy: file, timeout, useragent, file_class, max_checked_feeds, content_type_sniffer_class
							 | 
						||
| 
								 | 
							
													// Specified: file, timeout, useragent, max_checked_feeds
							 | 
						||
| 
								 | 
							
													$replacement = array($this->get_class('file'), $parameters[3], $this->get_class('content_type_sniffer'));
							 | 
						||
| 
								 | 
							
													array_splice($parameters, 3, 1, $replacement);
							 | 
						||
| 
								 | 
							
													break;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (!method_exists($class, '__construct'))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											$instance = new $class;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											$reflector = new ReflectionClass($class);
							 | 
						||
| 
								 | 
							
											$instance = $reflector->newInstanceArgs($parameters);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (method_exists($instance, 'set_registry'))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											$instance->set_registry($this);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return $instance;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Call a static method for a type
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @param string $type
							 | 
						||
| 
								 | 
							
									 * @param string $method
							 | 
						||
| 
								 | 
							
									 * @param array $parameters
							 | 
						||
| 
								 | 
							
									 * @return mixed
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function &call($type, $method, $parameters = array())
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$class = $this->get_class($type);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (in_array($class, $this->legacy))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											switch ($type)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												case 'Cache':
							 | 
						||
| 
								 | 
							
													// For backwards compatibility with old non-static
							 | 
						||
| 
								 | 
							
													// Cache::create() methods
							 | 
						||
| 
								 | 
							
													if ($method === 'get_handler')
							 | 
						||
| 
								 | 
							
													{
							 | 
						||
| 
								 | 
							
														$result = @call_user_func_array(array($class, 'create'), $parameters);
							 | 
						||
| 
								 | 
							
														return $result;
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													break;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$result = call_user_func_array(array($class, $method), $parameters);
							 | 
						||
| 
								 | 
							
										return $result;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |