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\Reader;
|
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 reader extensions based on the
|
Chris@0
|
18 * AbstractPluginManager.
|
Chris@0
|
19 *
|
Chris@0
|
20 * Validation checks that we have an Extension\AbstractEntry or
|
Chris@0
|
21 * Extension\AbstractFeed.
|
Chris@0
|
22 */
|
Chris@0
|
23 class ExtensionPluginManager extends AbstractPluginManager
|
Chris@0
|
24 {
|
Chris@0
|
25 /**
|
Chris@0
|
26 * Aliases for default set of extension classes
|
Chris@0
|
27 *
|
Chris@0
|
28 * @var array
|
Chris@0
|
29 */
|
Chris@0
|
30 protected $aliases = [
|
Chris@0
|
31 'atomentry' => Extension\Atom\Entry::class,
|
Chris@0
|
32 'atomEntry' => Extension\Atom\Entry::class,
|
Chris@0
|
33 'AtomEntry' => Extension\Atom\Entry::class,
|
Chris@0
|
34 'atomfeed' => Extension\Atom\Feed::class,
|
Chris@0
|
35 'atomFeed' => Extension\Atom\Feed::class,
|
Chris@0
|
36 'AtomFeed' => Extension\Atom\Feed::class,
|
Chris@0
|
37 'contententry' => Extension\Content\Entry::class,
|
Chris@0
|
38 'contentEntry' => Extension\Content\Entry::class,
|
Chris@0
|
39 'ContentEntry' => Extension\Content\Entry::class,
|
Chris@0
|
40 'creativecommonsentry' => Extension\CreativeCommons\Entry::class,
|
Chris@0
|
41 'creativeCommonsEntry' => Extension\CreativeCommons\Entry::class,
|
Chris@0
|
42 'CreativeCommonsEntry' => Extension\CreativeCommons\Entry::class,
|
Chris@0
|
43 'creativecommonsfeed' => Extension\CreativeCommons\Feed::class,
|
Chris@0
|
44 'creativeCommonsFeed' => Extension\CreativeCommons\Feed::class,
|
Chris@0
|
45 'CreativeCommonsFeed' => Extension\CreativeCommons\Feed::class,
|
Chris@0
|
46 'dublincoreentry' => Extension\DublinCore\Entry::class,
|
Chris@0
|
47 'dublinCoreEntry' => Extension\DublinCore\Entry::class,
|
Chris@0
|
48 'DublinCoreEntry' => Extension\DublinCore\Entry::class,
|
Chris@0
|
49 'dublincorefeed' => Extension\DublinCore\Feed::class,
|
Chris@0
|
50 'dublinCoreFeed' => Extension\DublinCore\Feed::class,
|
Chris@0
|
51 'DublinCoreFeed' => Extension\DublinCore\Feed::class,
|
Chris@0
|
52 'podcastentry' => Extension\Podcast\Entry::class,
|
Chris@0
|
53 'podcastEntry' => Extension\Podcast\Entry::class,
|
Chris@0
|
54 'PodcastEntry' => Extension\Podcast\Entry::class,
|
Chris@0
|
55 'podcastfeed' => Extension\Podcast\Feed::class,
|
Chris@0
|
56 'podcastFeed' => Extension\Podcast\Feed::class,
|
Chris@0
|
57 'PodcastFeed' => Extension\Podcast\Feed::class,
|
Chris@0
|
58 'slashentry' => Extension\Slash\Entry::class,
|
Chris@0
|
59 'slashEntry' => Extension\Slash\Entry::class,
|
Chris@0
|
60 'SlashEntry' => Extension\Slash\Entry::class,
|
Chris@0
|
61 'syndicationfeed' => Extension\Syndication\Feed::class,
|
Chris@0
|
62 'syndicationFeed' => Extension\Syndication\Feed::class,
|
Chris@0
|
63 'SyndicationFeed' => Extension\Syndication\Feed::class,
|
Chris@0
|
64 'threadentry' => Extension\Thread\Entry::class,
|
Chris@0
|
65 'threadEntry' => Extension\Thread\Entry::class,
|
Chris@0
|
66 'ThreadEntry' => Extension\Thread\Entry::class,
|
Chris@0
|
67 'wellformedwebentry' => Extension\WellFormedWeb\Entry::class,
|
Chris@0
|
68 'wellFormedWebEntry' => Extension\WellFormedWeb\Entry::class,
|
Chris@0
|
69 'WellFormedWebEntry' => Extension\WellFormedWeb\Entry::class,
|
Chris@0
|
70 ];
|
Chris@0
|
71
|
Chris@0
|
72 /**
|
Chris@0
|
73 * Factories for default set of extension classes
|
Chris@0
|
74 *
|
Chris@0
|
75 * @var array
|
Chris@0
|
76 */
|
Chris@0
|
77 protected $factories = [
|
Chris@0
|
78 Extension\Atom\Entry::class => InvokableFactory::class,
|
Chris@0
|
79 Extension\Atom\Feed::class => InvokableFactory::class,
|
Chris@0
|
80 Extension\Content\Entry::class => InvokableFactory::class,
|
Chris@0
|
81 Extension\CreativeCommons\Entry::class => InvokableFactory::class,
|
Chris@0
|
82 Extension\CreativeCommons\Feed::class => InvokableFactory::class,
|
Chris@0
|
83 Extension\DublinCore\Entry::class => InvokableFactory::class,
|
Chris@0
|
84 Extension\DublinCore\Feed::class => InvokableFactory::class,
|
Chris@0
|
85 Extension\Podcast\Entry::class => InvokableFactory::class,
|
Chris@0
|
86 Extension\Podcast\Feed::class => InvokableFactory::class,
|
Chris@0
|
87 Extension\Slash\Entry::class => InvokableFactory::class,
|
Chris@0
|
88 Extension\Syndication\Feed::class => InvokableFactory::class,
|
Chris@0
|
89 Extension\Thread\Entry::class => InvokableFactory::class,
|
Chris@0
|
90 Extension\WellFormedWeb\Entry::class => InvokableFactory::class,
|
Chris@0
|
91 // Legacy (v2) due to alias resolution; canonical form of resolved
|
Chris@0
|
92 // alias is used to look up the factory, while the non-normalized
|
Chris@0
|
93 // resolved alias is used as the requested name passed to the factory.
|
Chris@0
|
94 'zendfeedreaderextensionatomentry' => InvokableFactory::class,
|
Chris@0
|
95 'zendfeedreaderextensionatomfeed' => InvokableFactory::class,
|
Chris@0
|
96 'zendfeedreaderextensioncontententry' => InvokableFactory::class,
|
Chris@0
|
97 'zendfeedreaderextensioncreativecommonsentry' => InvokableFactory::class,
|
Chris@0
|
98 'zendfeedreaderextensioncreativecommonsfeed' => InvokableFactory::class,
|
Chris@0
|
99 'zendfeedreaderextensiondublincoreentry' => InvokableFactory::class,
|
Chris@0
|
100 'zendfeedreaderextensiondublincorefeed' => InvokableFactory::class,
|
Chris@0
|
101 'zendfeedreaderextensionpodcastentry' => InvokableFactory::class,
|
Chris@0
|
102 'zendfeedreaderextensionpodcastfeed' => InvokableFactory::class,
|
Chris@0
|
103 'zendfeedreaderextensionslashentry' => InvokableFactory::class,
|
Chris@0
|
104 'zendfeedreaderextensionsyndicationfeed' => InvokableFactory::class,
|
Chris@0
|
105 'zendfeedreaderextensionthreadentry' => InvokableFactory::class,
|
Chris@0
|
106 'zendfeedreaderextensionwellformedwebentry' => InvokableFactory::class,
|
Chris@0
|
107 ];
|
Chris@0
|
108
|
Chris@0
|
109 /**
|
Chris@0
|
110 * Do not share instances (v2)
|
Chris@0
|
111 *
|
Chris@0
|
112 * @var bool
|
Chris@0
|
113 */
|
Chris@0
|
114 protected $shareByDefault = false;
|
Chris@0
|
115
|
Chris@0
|
116 /**
|
Chris@0
|
117 * Do not share instances (v3)
|
Chris@0
|
118 *
|
Chris@0
|
119 * @var bool
|
Chris@0
|
120 */
|
Chris@0
|
121 protected $sharedByDefault = false;
|
Chris@0
|
122
|
Chris@0
|
123 /**
|
Chris@0
|
124 * Validate the plugin
|
Chris@0
|
125 *
|
Chris@0
|
126 * Checks that the extension loaded is of a valid type.
|
Chris@0
|
127 *
|
Chris@0
|
128 * @param mixed $plugin
|
Chris@0
|
129 * @return void
|
Chris@0
|
130 * @throws Exception\InvalidArgumentException if invalid
|
Chris@0
|
131 */
|
Chris@0
|
132 public function validate($plugin)
|
Chris@0
|
133 {
|
Chris@0
|
134 if ($plugin instanceof Extension\AbstractEntry
|
Chris@0
|
135 || $plugin instanceof Extension\AbstractFeed
|
Chris@0
|
136 ) {
|
Chris@0
|
137 // we're okay
|
Chris@0
|
138 return;
|
Chris@0
|
139 }
|
Chris@0
|
140
|
Chris@0
|
141 throw new InvalidServiceException(sprintf(
|
Chris@0
|
142 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
|
Chris@0
|
143 . 'or %s\Extension\AbstractEntry',
|
Chris@0
|
144 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
|
Chris@0
|
145 __NAMESPACE__,
|
Chris@0
|
146 __NAMESPACE__
|
Chris@0
|
147 ));
|
Chris@0
|
148 }
|
Chris@0
|
149
|
Chris@0
|
150 /**
|
Chris@0
|
151 * Validate the plugin (v2)
|
Chris@0
|
152 *
|
Chris@0
|
153 * @param mixed $plugin
|
Chris@0
|
154 * @return void
|
Chris@0
|
155 * @throws Exception\InvalidArgumentException if invalid
|
Chris@0
|
156 */
|
Chris@0
|
157 public function validatePlugin($plugin)
|
Chris@0
|
158 {
|
Chris@0
|
159 try {
|
Chris@0
|
160 $this->validate($plugin);
|
Chris@0
|
161 } catch (InvalidServiceException $e) {
|
Chris@0
|
162 throw new Exception\InvalidArgumentException(sprintf(
|
Chris@0
|
163 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
|
Chris@0
|
164 . 'or %s\Extension\AbstractEntry',
|
Chris@0
|
165 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
|
Chris@0
|
166 __NAMESPACE__,
|
Chris@0
|
167 __NAMESPACE__
|
Chris@0
|
168 ));
|
Chris@0
|
169 }
|
Chris@0
|
170 }
|
Chris@0
|
171 }
|