Security update for Core, with self-updated composer
[yaffs-website] / vendor / zendframework / zend-feed / src / Reader / StandaloneExtensionManager.php
index 9d9fcad9ff5b2e23a52a966e060068ab000c3087..7b8c61c04163c4bd6fff4f98901a58d9ec0cec12 100644 (file)
@@ -9,22 +9,24 @@
 
 namespace Zend\Feed\Reader;
 
+use Zend\Feed\Reader\Exception\InvalidArgumentException;
+
 class StandaloneExtensionManager implements ExtensionManagerInterface
 {
     private $extensions = [
-        'Atom\Entry'            => 'Zend\Feed\Reader\Extension\Atom\Entry',
-        'Atom\Feed'             => 'Zend\Feed\Reader\Extension\Atom\Feed',
-        'Content\Entry'         => 'Zend\Feed\Reader\Extension\Content\Entry',
-        'CreativeCommons\Entry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry',
-        'CreativeCommons\Feed'  => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed',
-        'DublinCore\Entry'      => 'Zend\Feed\Reader\Extension\DublinCore\Entry',
-        'DublinCore\Feed'       => 'Zend\Feed\Reader\Extension\DublinCore\Feed',
-        'Podcast\Entry'         => 'Zend\Feed\Reader\Extension\Podcast\Entry',
-        'Podcast\Feed'          => 'Zend\Feed\Reader\Extension\Podcast\Feed',
-        'Slash\Entry'           => 'Zend\Feed\Reader\Extension\Slash\Entry',
-        'Syndication\Feed'      => 'Zend\Feed\Reader\Extension\Syndication\Feed',
-        'Thread\Entry'          => 'Zend\Feed\Reader\Extension\Thread\Entry',
-        'WellFormedWeb\Entry'   => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry',
+        'Atom\Entry'            => Extension\Atom\Entry::class,
+        'Atom\Feed'             => Extension\Atom\Feed::class,
+        'Content\Entry'         => Extension\Content\Entry::class,
+        'CreativeCommons\Entry' => Extension\CreativeCommons\Entry::class,
+        'CreativeCommons\Feed'  => Extension\CreativeCommons\Feed::class,
+        'DublinCore\Entry'      => Extension\DublinCore\Entry::class,
+        'DublinCore\Feed'       => Extension\DublinCore\Feed::class,
+        'Podcast\Entry'         => Extension\Podcast\Entry::class,
+        'Podcast\Feed'          => Extension\Podcast\Feed::class,
+        'Slash\Entry'           => Extension\Slash\Entry::class,
+        'Syndication\Feed'      => Extension\Syndication\Feed::class,
+        'Thread\Entry'          => Extension\Thread\Entry::class,
+        'WellFormedWeb\Entry'   => Extension\WellFormedWeb\Entry::class,
     ];
 
     /**
@@ -49,4 +51,40 @@ class StandaloneExtensionManager implements ExtensionManagerInterface
         $class = $this->extensions[$extension];
         return new $class();
     }
+
+    /**
+     * Add an extension.
+     *
+     * @param string $name
+     * @param string $class
+     */
+    public function add($name, $class)
+    {
+        if (is_string($class)
+            && (
+                is_a($class, Extension\AbstractEntry::class, true)
+                || is_a($class, Extension\AbstractFeed::class, true)
+            )
+        ) {
+            $this->extensions[$name] = $class;
+            return;
+        }
+
+        throw new InvalidArgumentException(sprintf(
+            'Plugin of type %s is invalid; must implement %2$s\Extension\AbstractFeed '
+            . 'or %2$s\Extension\AbstractEntry',
+            $class,
+            __NAMESPACE__
+        ));
+    }
+
+    /**
+     * Remove an extension.
+     *
+     * @param string $name
+     */
+    public function remove($name)
+    {
+        unset($this->extensions[$name]);
+    }
 }