Added the Search API Synonym module to deal specifically with licence and license...
[yaffs-website] / vendor / zendframework / zend-feed / src / Reader / 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\Reader;
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 reader extensions based on the
18  * AbstractPluginManager.
19  *
20  * Validation checks that we have an Extension\AbstractEntry or
21  * Extension\AbstractFeed.
22  */
23 class ExtensionPluginManager extends AbstractPluginManager implements ExtensionManagerInterface
24 {
25     /**
26      * Aliases for default set of extension classes
27      *
28      * @var array
29      */
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,
91     ];
92
93     /**
94      * Factories for default set of extension classes
95      *
96      * @var array
97      */
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,
132     ];
133
134     /**
135      * Do not share instances (v2)
136      *
137      * @var bool
138      */
139     protected $shareByDefault = false;
140
141     /**
142      * Do not share instances (v3)
143      *
144      * @var bool
145      */
146     protected $sharedByDefault = false;
147
148     /**
149      * Validate the plugin
150      *
151      * Checks that the extension loaded is of a valid type.
152      *
153      * @param  mixed $plugin
154      * @return void
155      * @throws Exception\InvalidArgumentException if invalid
156      */
157     public function validate($plugin)
158     {
159         if ($plugin instanceof Extension\AbstractEntry
160             || $plugin instanceof Extension\AbstractFeed
161         ) {
162             // we're okay
163             return;
164         }
165
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)),
170             __NAMESPACE__,
171             __NAMESPACE__
172         ));
173     }
174
175     /**
176      * Validate the plugin (v2)
177      *
178      * @param  mixed $plugin
179      * @return void
180      * @throws Exception\InvalidArgumentException if invalid
181      */
182     public function validatePlugin($plugin)
183     {
184         try {
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)),
191                 __NAMESPACE__,
192                 __NAMESPACE__
193             ));
194         }
195     }
196 }