Chris@0: [], Chris@0: 'feed' => [], Chris@0: 'entryRenderer' => [], Chris@0: 'feedRenderer' => [], Chris@0: ]; Chris@0: Chris@0: /** Chris@0: * Set plugin loader for use with Extensions Chris@0: * Chris@0: * @param ExtensionManagerInterface Chris@0: */ Chris@0: public static function setExtensionManager(ExtensionManagerInterface $extensionManager) Chris@0: { Chris@0: static::$extensionManager = $extensionManager; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get plugin manager for use with Extensions Chris@0: * Chris@0: * @return ExtensionManagerInterface Chris@0: */ Chris@0: public static function getExtensionManager() Chris@0: { Chris@12: if (! isset(static::$extensionManager)) { Chris@0: static::setExtensionManager(new ExtensionManager()); Chris@0: } Chris@0: return static::$extensionManager; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Register an Extension by name Chris@0: * Chris@0: * @param string $name Chris@0: * @return void Chris@0: * @throws Exception\RuntimeException if unable to resolve Extension class Chris@0: */ Chris@0: public static function registerExtension($name) Chris@0: { Chris@16: if (! static::hasExtension($name)) { Chris@0: throw new Exception\RuntimeException(sprintf( Chris@16: 'Could not load extension "%s" using Plugin Loader.' Chris@16: . ' Check prefix paths are configured and extension exists.', Chris@0: $name Chris@0: )); Chris@0: } Chris@16: Chris@16: if (static::isRegistered($name)) { Chris@16: return; Chris@16: } Chris@16: Chris@16: $manager = static::getExtensionManager(); Chris@16: Chris@16: $feedName = $name . '\Feed'; Chris@0: if ($manager->has($feedName)) { Chris@0: static::$extensions['feed'][] = $feedName; Chris@0: } Chris@16: Chris@16: $entryName = $name . '\Entry'; Chris@0: if ($manager->has($entryName)) { Chris@0: static::$extensions['entry'][] = $entryName; Chris@0: } Chris@16: Chris@16: $feedRendererName = $name . '\Renderer\Feed'; Chris@0: if ($manager->has($feedRendererName)) { Chris@0: static::$extensions['feedRenderer'][] = $feedRendererName; Chris@0: } Chris@16: Chris@16: $entryRendererName = $name . '\Renderer\Entry'; Chris@0: if ($manager->has($entryRendererName)) { Chris@0: static::$extensions['entryRenderer'][] = $entryRendererName; Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Is a given named Extension registered? Chris@0: * Chris@0: * @param string $extensionName Chris@0: * @return bool Chris@0: */ Chris@0: public static function isRegistered($extensionName) Chris@0: { Chris@0: $feedName = $extensionName . '\Feed'; Chris@0: $entryName = $extensionName . '\Entry'; Chris@0: $feedRendererName = $extensionName . '\Renderer\Feed'; Chris@0: $entryRendererName = $extensionName . '\Renderer\Entry'; Chris@0: if (in_array($feedName, static::$extensions['feed']) Chris@0: || in_array($entryName, static::$extensions['entry']) Chris@0: || in_array($feedRendererName, static::$extensions['feedRenderer']) Chris@0: || in_array($entryRendererName, static::$extensions['entryRenderer']) Chris@0: ) { Chris@0: return true; Chris@0: } Chris@0: return false; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Get a list of extensions Chris@0: * Chris@0: * @return array Chris@0: */ Chris@0: public static function getExtensions() Chris@0: { Chris@0: return static::$extensions; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reset class state to defaults Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: public static function reset() Chris@0: { Chris@0: static::$extensionManager = null; Chris@0: static::$extensions = [ Chris@0: 'entry' => [], Chris@0: 'feed' => [], Chris@0: 'entryRenderer' => [], Chris@0: 'feedRenderer' => [], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Register core (default) extensions Chris@0: * Chris@0: * @return void Chris@0: */ Chris@0: public static function registerCoreExtensions() Chris@0: { Chris@0: static::registerExtension('DublinCore'); Chris@0: static::registerExtension('Content'); Chris@0: static::registerExtension('Atom'); Chris@0: static::registerExtension('Slash'); Chris@0: static::registerExtension('WellFormedWeb'); Chris@0: static::registerExtension('Threading'); Chris@0: static::registerExtension('ITunes'); Chris@16: Chris@16: // Added in 2.10.0; check for it conditionally Chris@16: static::hasExtension('GooglePlayPodcast') Chris@16: ? static::registerExtension('GooglePlayPodcast') Chris@16: : trigger_error( Chris@16: sprintf( Chris@16: 'Please update your %1$s\ExtensionManagerInterface implementation to add entries for' Chris@16: . ' %1$s\Extension\GooglePlayPodcast\Entry,' Chris@16: . ' %1$s\Extension\GooglePlayPodcast\Feed,' Chris@16: . ' %1$s\Extension\GooglePlayPodcast\Renderer\Entry,' Chris@16: . ' and %1$s\Extension\GooglePlayPodcast\Renderer\Feed.', Chris@16: __NAMESPACE__ Chris@16: ), Chris@16: \E_USER_NOTICE Chris@16: ); Chris@0: } Chris@0: Chris@18: /** Chris@18: * @deprecated This method is deprecated and will be removed with version 3.0 Chris@18: * Use PHP's lcfirst function instead. @see https://php.net/manual/function.lcfirst.php Chris@18: * @param string $str Chris@18: * @return string Chris@18: */ Chris@0: public static function lcfirst($str) Chris@0: { Chris@18: return lcfirst($str); Chris@0: } Chris@16: Chris@16: /** Chris@16: * Does the extension manager have the named extension? Chris@16: * Chris@16: * This method exists to allow us to test if an extension is present in the Chris@16: * extension manager. It may be used by registerExtension() to determine if Chris@16: * the extension has items present in the manager, or by Chris@16: * registerCoreExtension() to determine if the core extension has entries Chris@16: * in the extension manager. In the latter case, this can be useful when Chris@16: * adding new extensions in a minor release, as custom extension manager Chris@16: * implementations may not yet have an entry for the extension, which would Chris@16: * then otherwise cause registerExtension() to fail. Chris@16: * Chris@16: * @param string $name Chris@16: * @return bool Chris@16: */ Chris@16: protected static function hasExtension($name) Chris@16: { Chris@16: $manager = static::getExtensionManager(); Chris@16: Chris@16: $feedName = $name . '\Feed'; Chris@16: $entryName = $name . '\Entry'; Chris@16: $feedRendererName = $name . '\Renderer\Feed'; Chris@16: $entryRendererName = $name . '\Renderer\Entry'; Chris@16: Chris@16: return $manager->has($feedName) Chris@16: || $manager->has($entryName) Chris@16: || $manager->has($feedRendererName) Chris@16: || $manager->has($entryRendererName); Chris@16: } Chris@0: }