Security update for Core, with self-updated composer
[yaffs-website] / vendor / zendframework / zend-feed / src / Writer / ExtensionPluginManager.php
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
10 namespace Zend\Feed\Writer;
11
12 use Zend\ServiceManager\AbstractPluginManager;
13 use Zend\ServiceManager\Exception\InvalidServiceException;
14 use Zend\ServiceManager\Factory\InvokableFactory;
15
16 /**
17  * Plugin manager implementation for feed writer extensions
18  *
19  * Validation checks that we have an Entry, Feed, or Extension\AbstractRenderer.
20  */
21 class ExtensionPluginManager extends AbstractPluginManager implements ExtensionManagerInterface
22 {
23     /**
24      * Aliases for default set of extension classes
25      *
26      * @var array
27      */
28     protected $aliases = [
29         'atomrendererfeed'           => Extension\Atom\Renderer\Feed::class,
30         'atomRendererFeed'           => Extension\Atom\Renderer\Feed::class,
31         'AtomRendererFeed'           => Extension\Atom\Renderer\Feed::class,
32         'AtomRenderer\Feed'          => Extension\Atom\Renderer\Feed::class,
33         'Atom\Renderer\Feed'         => Extension\Atom\Renderer\Feed::class,
34         'contentrendererentry'       => Extension\Content\Renderer\Entry::class,
35         'contentRendererEntry'       => Extension\Content\Renderer\Entry::class,
36         'ContentRendererEntry'       => Extension\Content\Renderer\Entry::class,
37         'ContentRenderer\Entry'      => Extension\Content\Renderer\Entry::class,
38         'Content\Renderer\Entry'     => Extension\Content\Renderer\Entry::class,
39         'dublincorerendererentry'    => Extension\DublinCore\Renderer\Entry::class,
40         'dublinCoreRendererEntry'    => Extension\DublinCore\Renderer\Entry::class,
41         'DublinCoreRendererEntry'    => Extension\DublinCore\Renderer\Entry::class,
42         'DublinCoreRenderer\Entry'   => Extension\DublinCore\Renderer\Entry::class,
43         'DublinCore\Renderer\Entry'  => Extension\DublinCore\Renderer\Entry::class,
44         'dublincorerendererfeed'     => Extension\DublinCore\Renderer\Feed::class,
45         'dublinCoreRendererFeed'     => Extension\DublinCore\Renderer\Feed::class,
46         'DublinCoreRendererFeed'     => Extension\DublinCore\Renderer\Feed::class,
47         'DublinCoreRenderer\Feed'    => Extension\DublinCore\Renderer\Feed::class,
48         'DublinCore\Renderer\Feed'   => Extension\DublinCore\Renderer\Feed::class,
49         'itunesentry'                => Extension\ITunes\Entry::class,
50         'itunesEntry'                => Extension\ITunes\Entry::class,
51         'iTunesEntry'                => Extension\ITunes\Entry::class,
52         'ItunesEntry'                => Extension\ITunes\Entry::class,
53         'Itunes\Entry'               => Extension\ITunes\Entry::class,
54         'ITunes\Entry'               => Extension\ITunes\Entry::class,
55         'itunesfeed'                 => Extension\ITunes\Feed::class,
56         'itunesFeed'                 => Extension\ITunes\Feed::class,
57         'iTunesFeed'                 => Extension\ITunes\Feed::class,
58         'ItunesFeed'                 => Extension\ITunes\Feed::class,
59         'Itunes\Feed'                => Extension\ITunes\Feed::class,
60         'ITunes\Feed'                => Extension\ITunes\Feed::class,
61         'itunesrendererentry'        => Extension\ITunes\Renderer\Entry::class,
62         'itunesRendererEntry'        => Extension\ITunes\Renderer\Entry::class,
63         'iTunesRendererEntry'        => Extension\ITunes\Renderer\Entry::class,
64         'ItunesRendererEntry'        => Extension\ITunes\Renderer\Entry::class,
65         'ItunesRenderer\Entry'       => Extension\ITunes\Renderer\Entry::class,
66         'ITunes\Renderer\Entry'      => Extension\ITunes\Renderer\Entry::class,
67         'itunesrendererfeed'         => Extension\ITunes\Renderer\Feed::class,
68         'itunesRendererFeed'         => Extension\ITunes\Renderer\Feed::class,
69         'iTunesRendererFeed'         => Extension\ITunes\Renderer\Feed::class,
70         'ItunesRendererFeed'         => Extension\ITunes\Renderer\Feed::class,
71         'ItunesRenderer\Feed'        => Extension\ITunes\Renderer\Feed::class,
72         'ITunes\Renderer\Feed'       => Extension\ITunes\Renderer\Feed::class,
73         'slashrendererentry'         => Extension\Slash\Renderer\Entry::class,
74         'slashRendererEntry'         => Extension\Slash\Renderer\Entry::class,
75         'SlashRendererEntry'         => Extension\Slash\Renderer\Entry::class,
76         'SlashRenderer\Entry'        => Extension\Slash\Renderer\Entry::class,
77         'Slash\Renderer\Entry'       => Extension\Slash\Renderer\Entry::class,
78         'threadingrendererentry'     => Extension\Threading\Renderer\Entry::class,
79         'threadingRendererEntry'     => Extension\Threading\Renderer\Entry::class,
80         'ThreadingRendererEntry'     => Extension\Threading\Renderer\Entry::class,
81         'ThreadingRenderer\Entry'    => Extension\Threading\Renderer\Entry::class,
82         'Threading\Renderer\Entry'   => Extension\Threading\Renderer\Entry::class,
83         'wellformedwebrendererentry' => Extension\WellFormedWeb\Renderer\Entry::class,
84         'wellFormedWebRendererEntry' => Extension\WellFormedWeb\Renderer\Entry::class,
85         'WellFormedWebRendererEntry' => Extension\WellFormedWeb\Renderer\Entry::class,
86         'WellFormedWebRenderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class,
87         'WellFormedWeb\Renderer\Entry' => Extension\WellFormedWeb\Renderer\Entry::class,
88     ];
89
90     /**
91      * Factories for default set of extension classes
92      *
93      * @var array
94      */
95     protected $factories = [
96         Extension\Atom\Renderer\Feed::class           => InvokableFactory::class,
97         Extension\Content\Renderer\Entry::class       => InvokableFactory::class,
98         Extension\DublinCore\Renderer\Entry::class    => InvokableFactory::class,
99         Extension\DublinCore\Renderer\Feed::class     => InvokableFactory::class,
100         Extension\ITunes\Entry::class                 => InvokableFactory::class,
101         Extension\ITunes\Feed::class                  => InvokableFactory::class,
102         Extension\ITunes\Renderer\Entry::class        => InvokableFactory::class,
103         Extension\ITunes\Renderer\Feed::class         => InvokableFactory::class,
104         Extension\Slash\Renderer\Entry::class         => InvokableFactory::class,
105         Extension\Threading\Renderer\Entry::class     => InvokableFactory::class,
106         Extension\WellFormedWeb\Renderer\Entry::class => InvokableFactory::class,
107         // Legacy (v2) due to alias resolution; canonical form of resolved
108         // alias is used to look up the factory, while the non-normalized
109         // resolved alias is used as the requested name passed to the factory.
110         'zendfeedwriterextensionatomrendererfeed'           => InvokableFactory::class,
111         'zendfeedwriterextensioncontentrendererentry'       => InvokableFactory::class,
112         'zendfeedwriterextensiondublincorerendererentry'    => InvokableFactory::class,
113         'zendfeedwriterextensiondublincorerendererfeed'     => InvokableFactory::class,
114         'zendfeedwriterextensionitunesentry'                => InvokableFactory::class,
115         'zendfeedwriterextensionitunesfeed'                 => InvokableFactory::class,
116         'zendfeedwriterextensionitunesrendererentry'        => InvokableFactory::class,
117         'zendfeedwriterextensionitunesrendererfeed'         => InvokableFactory::class,
118         'zendfeedwriterextensionslashrendererentry'         => InvokableFactory::class,
119         'zendfeedwriterextensionthreadingrendererentry'     => InvokableFactory::class,
120         'zendfeedwriterextensionwellformedwebrendererentry' => InvokableFactory::class,
121     ];
122
123     /**
124      * Do not share instances (v2)
125      *
126      * @var bool
127      */
128     protected $shareByDefault = false;
129
130     /**
131      * Do not share instances (v3)
132      *
133      * @var bool
134      */
135     protected $sharedByDefault = false;
136
137     /**
138      * Validate the plugin (v3)
139      *
140      * Checks that the extension loaded is of a valid type.
141      *
142      * @param  mixed $plugin
143      * @return void
144      * @throws InvalidServiceException if invalid
145      */
146     public function validate($plugin)
147     {
148         if ($plugin instanceof Extension\AbstractRenderer) {
149             // we're okay
150             return;
151         }
152
153         if ('Feed' == substr(get_class($plugin), -4)) {
154             // we're okay
155             return;
156         }
157
158         if ('Entry' == substr(get_class($plugin), -5)) {
159             // we're okay
160             return;
161         }
162
163         throw new InvalidServiceException(sprintf(
164             'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface '
165             . 'or the classname must end in "Feed" or "Entry"',
166             (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
167             __NAMESPACE__
168         ));
169     }
170
171     /**
172      * Validate plugin (v2)
173      *
174      * @param mixed $plugin
175      * @return void
176      * @throws Exception\InvalidArgumentException when invalid
177      */
178     public function validatePlugin($plugin)
179     {
180         try {
181             $this->validate($plugin);
182         } catch (InvalidServiceException $e) {
183             throw new Exception\InvalidArgumentException(sprintf(
184                 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface '
185                 . 'or the classname must end in "Feed" or "Entry"',
186                 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
187                 __NAMESPACE__
188             ));
189         }
190     }
191 }