annotate vendor/zendframework/zend-feed/src/Reader/ExtensionPluginManager.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents c2387f117808
children
rev   line source
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@12 23 class ExtensionPluginManager extends AbstractPluginManager implements ExtensionManagerInterface
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@12 34 'Atom\Entry' => Extension\Atom\Entry::class,
Chris@0 35 'atomfeed' => Extension\Atom\Feed::class,
Chris@0 36 'atomFeed' => Extension\Atom\Feed::class,
Chris@0 37 'AtomFeed' => Extension\Atom\Feed::class,
Chris@12 38 'Atom\Feed' => Extension\Atom\Feed::class,
Chris@0 39 'contententry' => Extension\Content\Entry::class,
Chris@0 40 'contentEntry' => Extension\Content\Entry::class,
Chris@0 41 'ContentEntry' => Extension\Content\Entry::class,
Chris@12 42 'Content\Entry' => Extension\Content\Entry::class,
Chris@0 43 'creativecommonsentry' => Extension\CreativeCommons\Entry::class,
Chris@0 44 'creativeCommonsEntry' => Extension\CreativeCommons\Entry::class,
Chris@0 45 'CreativeCommonsEntry' => Extension\CreativeCommons\Entry::class,
Chris@12 46 'CreativeCommons\Entry' => Extension\CreativeCommons\Entry::class,
Chris@0 47 'creativecommonsfeed' => Extension\CreativeCommons\Feed::class,
Chris@0 48 'creativeCommonsFeed' => Extension\CreativeCommons\Feed::class,
Chris@0 49 'CreativeCommonsFeed' => Extension\CreativeCommons\Feed::class,
Chris@12 50 'CreativeCommons\Feed' => Extension\CreativeCommons\Feed::class,
Chris@0 51 'dublincoreentry' => Extension\DublinCore\Entry::class,
Chris@0 52 'dublinCoreEntry' => Extension\DublinCore\Entry::class,
Chris@0 53 'DublinCoreEntry' => Extension\DublinCore\Entry::class,
Chris@12 54 'DublinCore\Entry' => Extension\DublinCore\Entry::class,
Chris@0 55 'dublincorefeed' => Extension\DublinCore\Feed::class,
Chris@0 56 'dublinCoreFeed' => Extension\DublinCore\Feed::class,
Chris@0 57 'DublinCoreFeed' => Extension\DublinCore\Feed::class,
Chris@12 58 'DublinCore\Feed' => Extension\DublinCore\Feed::class,
Chris@16 59 'googleplaypodcastentry' => Extension\GooglePlayPodcast\Entry::class,
Chris@16 60 'googlePlayPodcastEntry' => Extension\GooglePlayPodcast\Entry::class,
Chris@16 61 'GooglePlayPodcastEntry' => Extension\GooglePlayPodcast\Entry::class,
Chris@16 62 'GooglePlayPodcast\Entry' => Extension\GooglePlayPodcast\Entry::class,
Chris@16 63 'googleplaypodcastfeed' => Extension\GooglePlayPodcast\Feed::class,
Chris@16 64 'googlePlayPodcastFeed' => Extension\GooglePlayPodcast\Feed::class,
Chris@16 65 'GooglePlayPodcastFeed' => Extension\GooglePlayPodcast\Feed::class,
Chris@16 66 'GooglePlayPodcast\Feed' => Extension\GooglePlayPodcast\Feed::class,
Chris@0 67 'podcastentry' => Extension\Podcast\Entry::class,
Chris@0 68 'podcastEntry' => Extension\Podcast\Entry::class,
Chris@0 69 'PodcastEntry' => Extension\Podcast\Entry::class,
Chris@12 70 'Podcast\Entry' => Extension\Podcast\Entry::class,
Chris@0 71 'podcastfeed' => Extension\Podcast\Feed::class,
Chris@0 72 'podcastFeed' => Extension\Podcast\Feed::class,
Chris@0 73 'PodcastFeed' => Extension\Podcast\Feed::class,
Chris@12 74 'Podcast\Feed' => Extension\Podcast\Feed::class,
Chris@0 75 'slashentry' => Extension\Slash\Entry::class,
Chris@0 76 'slashEntry' => Extension\Slash\Entry::class,
Chris@0 77 'SlashEntry' => Extension\Slash\Entry::class,
Chris@12 78 'Slash\Entry' => Extension\Slash\Entry::class,
Chris@0 79 'syndicationfeed' => Extension\Syndication\Feed::class,
Chris@0 80 'syndicationFeed' => Extension\Syndication\Feed::class,
Chris@0 81 'SyndicationFeed' => Extension\Syndication\Feed::class,
Chris@12 82 'Syndication\Feed' => Extension\Syndication\Feed::class,
Chris@0 83 'threadentry' => Extension\Thread\Entry::class,
Chris@0 84 'threadEntry' => Extension\Thread\Entry::class,
Chris@0 85 'ThreadEntry' => Extension\Thread\Entry::class,
Chris@12 86 'Thread\Entry' => Extension\Thread\Entry::class,
Chris@0 87 'wellformedwebentry' => Extension\WellFormedWeb\Entry::class,
Chris@0 88 'wellFormedWebEntry' => Extension\WellFormedWeb\Entry::class,
Chris@0 89 'WellFormedWebEntry' => Extension\WellFormedWeb\Entry::class,
Chris@12 90 'WellFormedWeb\Entry' => Extension\WellFormedWeb\Entry::class,
Chris@0 91 ];
Chris@0 92
Chris@0 93 /**
Chris@0 94 * Factories for default set of extension classes
Chris@0 95 *
Chris@0 96 * @var array
Chris@0 97 */
Chris@0 98 protected $factories = [
Chris@0 99 Extension\Atom\Entry::class => InvokableFactory::class,
Chris@0 100 Extension\Atom\Feed::class => InvokableFactory::class,
Chris@0 101 Extension\Content\Entry::class => InvokableFactory::class,
Chris@0 102 Extension\CreativeCommons\Entry::class => InvokableFactory::class,
Chris@0 103 Extension\CreativeCommons\Feed::class => InvokableFactory::class,
Chris@0 104 Extension\DublinCore\Entry::class => InvokableFactory::class,
Chris@0 105 Extension\DublinCore\Feed::class => InvokableFactory::class,
Chris@16 106 Extension\GooglePlayPodcast\Entry::class => InvokableFactory::class,
Chris@16 107 Extension\GooglePlayPodcast\Feed::class => InvokableFactory::class,
Chris@0 108 Extension\Podcast\Entry::class => InvokableFactory::class,
Chris@0 109 Extension\Podcast\Feed::class => InvokableFactory::class,
Chris@0 110 Extension\Slash\Entry::class => InvokableFactory::class,
Chris@0 111 Extension\Syndication\Feed::class => InvokableFactory::class,
Chris@0 112 Extension\Thread\Entry::class => InvokableFactory::class,
Chris@0 113 Extension\WellFormedWeb\Entry::class => InvokableFactory::class,
Chris@0 114 // Legacy (v2) due to alias resolution; canonical form of resolved
Chris@0 115 // alias is used to look up the factory, while the non-normalized
Chris@0 116 // resolved alias is used as the requested name passed to the factory.
Chris@0 117 'zendfeedreaderextensionatomentry' => InvokableFactory::class,
Chris@0 118 'zendfeedreaderextensionatomfeed' => InvokableFactory::class,
Chris@0 119 'zendfeedreaderextensioncontententry' => InvokableFactory::class,
Chris@0 120 'zendfeedreaderextensioncreativecommonsentry' => InvokableFactory::class,
Chris@0 121 'zendfeedreaderextensioncreativecommonsfeed' => InvokableFactory::class,
Chris@0 122 'zendfeedreaderextensiondublincoreentry' => InvokableFactory::class,
Chris@0 123 'zendfeedreaderextensiondublincorefeed' => InvokableFactory::class,
Chris@16 124 'zendfeedreaderextensiongoogleplaypodcastentry' => InvokableFactory::class,
Chris@16 125 'zendfeedreaderextensiongoogleplaypodcastfeed' => InvokableFactory::class,
Chris@0 126 'zendfeedreaderextensionpodcastentry' => InvokableFactory::class,
Chris@0 127 'zendfeedreaderextensionpodcastfeed' => InvokableFactory::class,
Chris@0 128 'zendfeedreaderextensionslashentry' => InvokableFactory::class,
Chris@0 129 'zendfeedreaderextensionsyndicationfeed' => InvokableFactory::class,
Chris@0 130 'zendfeedreaderextensionthreadentry' => InvokableFactory::class,
Chris@0 131 'zendfeedreaderextensionwellformedwebentry' => InvokableFactory::class,
Chris@0 132 ];
Chris@0 133
Chris@0 134 /**
Chris@0 135 * Do not share instances (v2)
Chris@0 136 *
Chris@0 137 * @var bool
Chris@0 138 */
Chris@0 139 protected $shareByDefault = false;
Chris@0 140
Chris@0 141 /**
Chris@0 142 * Do not share instances (v3)
Chris@0 143 *
Chris@0 144 * @var bool
Chris@0 145 */
Chris@0 146 protected $sharedByDefault = false;
Chris@0 147
Chris@0 148 /**
Chris@0 149 * Validate the plugin
Chris@0 150 *
Chris@0 151 * Checks that the extension loaded is of a valid type.
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 validate($plugin)
Chris@0 158 {
Chris@0 159 if ($plugin instanceof Extension\AbstractEntry
Chris@0 160 || $plugin instanceof Extension\AbstractFeed
Chris@0 161 ) {
Chris@0 162 // we're okay
Chris@0 163 return;
Chris@0 164 }
Chris@0 165
Chris@0 166 throw new InvalidServiceException(sprintf(
Chris@0 167 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
Chris@0 168 . 'or %s\Extension\AbstractEntry',
Chris@0 169 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
Chris@0 170 __NAMESPACE__,
Chris@0 171 __NAMESPACE__
Chris@0 172 ));
Chris@0 173 }
Chris@0 174
Chris@0 175 /**
Chris@0 176 * Validate the plugin (v2)
Chris@0 177 *
Chris@0 178 * @param mixed $plugin
Chris@0 179 * @return void
Chris@0 180 * @throws Exception\InvalidArgumentException if invalid
Chris@0 181 */
Chris@0 182 public function validatePlugin($plugin)
Chris@0 183 {
Chris@0 184 try {
Chris@0 185 $this->validate($plugin);
Chris@0 186 } catch (InvalidServiceException $e) {
Chris@0 187 throw new Exception\InvalidArgumentException(sprintf(
Chris@0 188 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed '
Chris@0 189 . 'or %s\Extension\AbstractEntry',
Chris@0 190 (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
Chris@0 191 __NAMESPACE__,
Chris@0 192 __NAMESPACE__
Chris@0 193 ));
Chris@0 194 }
Chris@0 195 }
Chris@0 196 }