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