3 * Zend Framework (http://framework.zend.com/)
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
10 namespace Zend\Feed\Reader
;
12 use Zend\ServiceManager\AbstractPluginManager
;
13 use Zend\ServiceManager\Exception\InvalidServiceException
;
14 use Zend\ServiceManager\Factory\InvokableFactory
;
17 * Plugin manager implementation for feed reader extensions based on the
18 * AbstractPluginManager.
20 * Validation checks that we have an Extension\AbstractEntry or
21 * Extension\AbstractFeed.
23 class ExtensionPluginManager
extends AbstractPluginManager
implements ExtensionManagerInterface
26 * Aliases for default set of extension classes
30 protected $aliases = [
31 'atomentry' => Extension\Atom\Entry
::class,
32 'atomEntry' => Extension\Atom\Entry
::class,
33 'AtomEntry' => Extension\Atom\Entry
::class,
34 'Atom\Entry' => Extension\Atom\Entry
::class,
35 'atomfeed' => Extension\Atom\Feed
::class,
36 'atomFeed' => Extension\Atom\Feed
::class,
37 'AtomFeed' => Extension\Atom\Feed
::class,
38 'Atom\Feed' => Extension\Atom\Feed
::class,
39 'contententry' => Extension\Content\Entry
::class,
40 'contentEntry' => Extension\Content\Entry
::class,
41 'ContentEntry' => Extension\Content\Entry
::class,
42 'Content\Entry' => Extension\Content\Entry
::class,
43 'creativecommonsentry' => Extension\CreativeCommons\Entry
::class,
44 'creativeCommonsEntry' => Extension\CreativeCommons\Entry
::class,
45 'CreativeCommonsEntry' => Extension\CreativeCommons\Entry
::class,
46 'CreativeCommons\Entry' => Extension\CreativeCommons\Entry
::class,
47 'creativecommonsfeed' => Extension\CreativeCommons\Feed
::class,
48 'creativeCommonsFeed' => Extension\CreativeCommons\Feed
::class,
49 'CreativeCommonsFeed' => Extension\CreativeCommons\Feed
::class,
50 'CreativeCommons\Feed' => Extension\CreativeCommons\Feed
::class,
51 'dublincoreentry' => Extension\DublinCore\Entry
::class,
52 'dublinCoreEntry' => Extension\DublinCore\Entry
::class,
53 'DublinCoreEntry' => Extension\DublinCore\Entry
::class,
54 'DublinCore\Entry' => Extension\DublinCore\Entry
::class,
55 'dublincorefeed' => Extension\DublinCore\Feed
::class,
56 'dublinCoreFeed' => Extension\DublinCore\Feed
::class,
57 'DublinCoreFeed' => Extension\DublinCore\Feed
::class,
58 'DublinCore\Feed' => Extension\DublinCore\Feed
::class,
59 'googleplaypodcastentry' => Extension\GooglePlayPodcast\Entry
::class,
60 'googlePlayPodcastEntry' => Extension\GooglePlayPodcast\Entry
::class,
61 'GooglePlayPodcastEntry' => Extension\GooglePlayPodcast\Entry
::class,
62 'GooglePlayPodcast\Entry' => Extension\GooglePlayPodcast\Entry
::class,
63 'googleplaypodcastfeed' => Extension\GooglePlayPodcast\Feed
::class,
64 'googlePlayPodcastFeed' => Extension\GooglePlayPodcast\Feed
::class,
65 'GooglePlayPodcastFeed' => Extension\GooglePlayPodcast\Feed
::class,
66 'GooglePlayPodcast\Feed' => Extension\GooglePlayPodcast\Feed
::class,
67 'podcastentry' => Extension\Podcast\Entry
::class,
68 'podcastEntry' => Extension\Podcast\Entry
::class,
69 'PodcastEntry' => Extension\Podcast\Entry
::class,
70 'Podcast\Entry' => Extension\Podcast\Entry
::class,
71 'podcastfeed' => Extension\Podcast\Feed
::class,
72 'podcastFeed' => Extension\Podcast\Feed
::class,
73 'PodcastFeed' => Extension\Podcast\Feed
::class,
74 'Podcast\Feed' => Extension\Podcast\Feed
::class,
75 'slashentry' => Extension\Slash\Entry
::class,
76 'slashEntry' => Extension\Slash\Entry
::class,
77 'SlashEntry' => Extension\Slash\Entry
::class,
78 'Slash\Entry' => Extension\Slash\Entry
::class,
79 'syndicationfeed' => Extension\Syndication\Feed
::class,
80 'syndicationFeed' => Extension\Syndication\Feed
::class,
81 'SyndicationFeed' => Extension\Syndication\Feed
::class,
82 'Syndication\Feed' => Extension\Syndication\Feed
::class,
83 'threadentry' => Extension\Thread\Entry
::class,
84 'threadEntry' => Extension\Thread\Entry
::class,
85 'ThreadEntry' => Extension\Thread\Entry
::class,
86 'Thread\Entry' => Extension\Thread\Entry
::class,
87 'wellformedwebentry' => Extension\WellFormedWeb\Entry
::class,
88 'wellFormedWebEntry' => Extension\WellFormedWeb\Entry
::class,
89 'WellFormedWebEntry' => Extension\WellFormedWeb\Entry
::class,
90 'WellFormedWeb\Entry' => Extension\WellFormedWeb\Entry
::class,
94 * Factories for default set of extension classes
98 protected $factories = [
99 Extension\Atom\Entry
::class => InvokableFactory
::class,
100 Extension\Atom\Feed
::class => InvokableFactory
::class,
101 Extension\Content\Entry
::class => InvokableFactory
::class,
102 Extension\CreativeCommons\Entry
::class => InvokableFactory
::class,
103 Extension\CreativeCommons\Feed
::class => InvokableFactory
::class,
104 Extension\DublinCore\Entry
::class => InvokableFactory
::class,
105 Extension\DublinCore\Feed
::class => InvokableFactory
::class,
106 Extension\GooglePlayPodcast\Entry
::class => InvokableFactory
::class,
107 Extension\GooglePlayPodcast\Feed
::class => InvokableFactory
::class,
108 Extension\Podcast\Entry
::class => InvokableFactory
::class,
109 Extension\Podcast\Feed
::class => InvokableFactory
::class,
110 Extension\Slash\Entry
::class => InvokableFactory
::class,
111 Extension\Syndication\Feed
::class => InvokableFactory
::class,
112 Extension\Thread\Entry
::class => InvokableFactory
::class,
113 Extension\WellFormedWeb\Entry
::class => InvokableFactory
::class,
114 // Legacy (v2) due to alias resolution; canonical form of resolved
115 // alias is used to look up the factory, while the non-normalized
116 // resolved alias is used as the requested name passed to the factory.
117 'zendfeedreaderextensionatomentry' => InvokableFactory
::class,
118 'zendfeedreaderextensionatomfeed' => InvokableFactory
::class,
119 'zendfeedreaderextensioncontententry' => InvokableFactory
::class,
120 'zendfeedreaderextensioncreativecommonsentry' => InvokableFactory
::class,
121 'zendfeedreaderextensioncreativecommonsfeed' => InvokableFactory
::class,
122 'zendfeedreaderextensiondublincoreentry' => InvokableFactory
::class,
123 'zendfeedreaderextensiondublincorefeed' => InvokableFactory
::class,
124 'zendfeedreaderextensiongoogleplaypodcastentry' => InvokableFactory
::class,
125 'zendfeedreaderextensiongoogleplaypodcastfeed' => InvokableFactory
::class,
126 'zendfeedreaderextensionpodcastentry' => InvokableFactory
::class,
127 'zendfeedreaderextensionpodcastfeed' => InvokableFactory
::class,
128 'zendfeedreaderextensionslashentry' => InvokableFactory
::class,
129 'zendfeedreaderextensionsyndicationfeed' => InvokableFactory
::class,
130 'zendfeedreaderextensionthreadentry' => InvokableFactory
::class,
131 'zendfeedreaderextensionwellformedwebentry' => InvokableFactory
::class,
135 * Do not share instances (v2)
139 protected $shareByDefault = false;
142 * Do not share instances (v3)
146 protected $sharedByDefault = false;
149 * Validate the plugin
151 * Checks that the extension loaded is of a valid type.
153 * @param mixed $plugin
155 * @throws Exception\InvalidArgumentException if invalid
157 public function validate($plugin)
159 if ($plugin instanceof Extension\AbstractEntry
160 ||
$plugin instanceof Extension\AbstractFeed
166 throw new InvalidServiceException(sprintf(
167 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
168 . 'or %s\Extension\AbstractEntry',
169 (is_object($plugin) ?
get_class($plugin) : gettype($plugin)),
176 * Validate the plugin (v2)
178 * @param mixed $plugin
180 * @throws Exception\InvalidArgumentException if invalid
182 public function validatePlugin($plugin)
185 $this->validate($plugin);
186 } catch (InvalidServiceException
$e) {
187 throw new Exception\
InvalidArgumentException(sprintf(
188 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
189 . 'or %s\Extension\AbstractEntry',
190 (is_object($plugin) ?
get_class($plugin) : gettype($plugin)),