diff -r 48c4eec2b7e6 -r 8c2e4d02f4ef wp/wp-includes/SimplePie/src/Registry.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wp/wp-includes/SimplePie/src/Registry.php Fri Sep 05 18:52:52 2025 +0200 @@ -0,0 +1,271 @@ + + */ + protected $default = [ + Cache::class => Cache::class, + Locator::class => Locator::class, + Parser::class => Parser::class, + File::class => File::class, + Sanitize::class => Sanitize::class, + Item::class => Item::class, + Author::class => Author::class, + Category::class => Category::class, + Enclosure::class => Enclosure::class, + Caption::class => Caption::class, + Copyright::class => Copyright::class, + Credit::class => Credit::class, + Rating::class => Rating::class, + Restriction::class => Restriction::class, + Sniffer::class => Sniffer::class, + Source::class => Source::class, + Misc::class => Misc::class, + DeclarationParser::class => DeclarationParser::class, + Date::class => Date::class, + ]; + + /** + * Class mapping + * + * @see register() + * @var array + */ + protected $classes = []; + + /** + * Legacy classes + * + * @see register() + * @var array + */ + protected $legacy = []; + + /** + * Legacy types + * + * @see register() + * @var array + */ + private $legacyTypes = [ + 'Cache' => Cache::class, + 'Locator' => Locator::class, + 'Parser' => Parser::class, + 'File' => File::class, + 'Sanitize' => Sanitize::class, + 'Item' => Item::class, + 'Author' => Author::class, + 'Category' => Category::class, + 'Enclosure' => Enclosure::class, + 'Caption' => Caption::class, + 'Copyright' => Copyright::class, + 'Credit' => Credit::class, + 'Rating' => Rating::class, + 'Restriction' => Restriction::class, + 'Content_Type_Sniffer' => Sniffer::class, + 'Source' => Source::class, + 'Misc' => Misc::class, + 'XML_Declaration_Parser' => DeclarationParser::class, + 'Parse_Date' => Date::class, + ]; + + /** + * Constructor + * + * No-op + */ + public function __construct() + { + } + + /** + * Register a class + * + * @param string $type See {@see $default} for names + * @param class-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 (array_key_exists($type, $this->legacyTypes)) { + // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED); + + $type = $this->legacyTypes[$type]; + } + + if (!array_key_exists($type, $this->default)) { + return false; + } + + if (!class_exists($class)) { + return false; + } + + /** @var string */ + $base_class = $this->default[$type]; + + if (!is_subclass_of($class, $base_class)) { + 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 + * + * @template T + * @param class-string $type + * @return class-string|null + */ + public function get_class($type) + { + if (array_key_exists($type, $this->legacyTypes)) { + // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED); + + $type = $this->legacyTypes[$type]; + } + + if (!array_key_exists($type, $this->default)) { + return null; + } + + $class = $this->default[$type]; + + if (array_key_exists($type, $this->classes)) { + $class = $this->classes[$type]; + } + + return $class; + } + + /** + * Create a new instance of a given type + * + * @template T class-string $type + * @param class-string $type + * @param array $parameters Parameters to pass to the constructor + * @return T Instance of class + */ + public function &create($type, $parameters = []) + { + $class = $this->get_class($type); + + if (!method_exists($class, '__construct')) { + $instance = new $class(); + } else { + $reflector = new \ReflectionClass($class); + $instance = $reflector->newInstanceArgs($parameters); + } + + if ($instance instanceof RegistryAware) { + $instance->set_registry($this); + } elseif (method_exists($instance, 'set_registry')) { + trigger_error(sprintf('Using the method "set_registry()" without implementing "%s" is deprecated since SimplePie 1.8.0, implement "%s" in "%s".', RegistryAware::class, RegistryAware::class, $class), \E_USER_DEPRECATED); + $instance->set_registry($this); + } + return $instance; + } + + /** + * Call a static method for a type + * + * @param class-string $type + * @param string $method + * @param array $parameters + * @return mixed + */ + public function &call($type, $method, $parameters = []) + { + $class = $this->get_class($type); + + if (in_array($class, $this->legacy)) { + switch ($type) { + case Cache::class: + // For backwards compatibility with old non-static + // Cache::create() methods in PHP < 8.0. + // No longer supported as of PHP 8.0. + if ($method === 'get_handler') { + $result = @call_user_func_array([$class, 'create'], $parameters); + return $result; + } + break; + } + } + + $result = call_user_func_array([$class, $method], $parameters); + return $result; + } +} + +class_alias('SimplePie\Registry', 'SimplePie_Registry');