aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/simplepie/simplepie/src/Registry.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/simplepie/simplepie/src/Registry.php')
-rw-r--r--vendor/simplepie/simplepie/src/Registry.php181
1 files changed, 172 insertions, 9 deletions
diff --git a/vendor/simplepie/simplepie/src/Registry.php b/vendor/simplepie/simplepie/src/Registry.php
index 7aba9ca8e..1db2a619e 100644
--- a/vendor/simplepie/simplepie/src/Registry.php
+++ b/vendor/simplepie/simplepie/src/Registry.php
@@ -5,10 +5,7 @@
* A PHP-Based RSS and Atom Feed Framework.
* Takes the hard work out of managing a complete RSS/Atom solution.
*
- * Please note: This file is automatically generated by a build script. The
- * full original source is always available from http://simplepie.org/
- *
- * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
@@ -46,10 +43,176 @@
namespace SimplePie;
-class_exists('SimplePie_Registry');
+/**
+ * Handles creating objects and calling methods
+ *
+ * Access this via {@see \SimplePie\SimplePie::get_registry()}
+ *
+ * @package SimplePie
+ */
+class Registry
+{
+ /**
+ * Default class mapping
+ *
+ * Overriding classes *must* subclass these.
+ *
+ * @var array
+ */
+ protected $default = [
+ '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' => Content\Type\Sniffer::class,
+ 'Source' => Source::class,
+ 'Misc' => Misc::class,
+ 'XML_Declaration_Parser' => XML\Declaration\Parser::class,
+ 'Parse_Date' => Parse\Date::class,
+ ];
+
+ /**
+ * Class mapping
+ *
+ * @see register()
+ * @var array
+ */
+ protected $classes = [];
+
+ /**
+ * Legacy classes
+ *
+ * @see register()
+ * @var array
+ */
+ protected $legacy = [];
+
+ /**
+ * 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 (\false) {
- class Registry extends \SimplePie_Registry
- {
- }
+ 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 = [])
+ {
+ $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 = [$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 = [])
+ {
+ $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 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');