diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index c2940062d09b02957911a904e715dd6a845c6d26..796604f4daea201a6886f9526e02ba6334e09bf6 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -416,12 +416,7 @@ $config = [ 'content_toc' => [ /* see VuFind\Content\TOC\PluginManager for defaults */ ], 'db_row' => [ /* see VuFind\Db\Row\PluginManager for defaults */ ], 'db_table' => [ /* see VuFind\Db\Table\PluginManager for defaults */ ], - 'hierarchy_driver' => [ - 'factories' => [ - 'default' => 'VuFind\Hierarchy\Driver\Factory::getHierarchyDefault', - 'flat' => 'VuFind\Hierarchy\Driver\Factory::getHierarchyFlat', - ], - ], + 'hierarchy_driver' => [ /* see VuFind\Hierarchy\Driver\PluginManager for defaults */ ], 'hierarchy_treedataformatter' => [ 'invokables' => [ 'json' => 'VuFind\Hierarchy\TreeDataFormatter\Json', diff --git a/module/VuFind/src/VuFind/Hierarchy/Driver/Factory.php b/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php similarity index 69% rename from module/VuFind/src/VuFind/Hierarchy/Driver/Factory.php rename to module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php index 945d9fad70d01d47af0edfa08401bbb6f82f9bf3..2318d3f27f281dddb62c6ebced73e3dc27448185 100644 --- a/module/VuFind/src/VuFind/Hierarchy/Driver/Factory.php +++ b/module/VuFind/src/VuFind/Hierarchy/Driver/ConfigurationBasedFactory.php @@ -42,20 +42,28 @@ use Zend\ServiceManager\ServiceManager; * * @codeCoverageIgnore */ -class Factory +class ConfigurationBasedFactory { /** * This constructs a hierarchy driver using VuFind's service setup. * - * @param \Zend\ServiceManager\ServiceManager $sm Top-level service manager - * @param string $config Name of config to load - * @param string $class Name of driver class + * @param \Zend\ServiceManager\ServiceManager $sm Top-level service m. + * @param string $requestedName Service being built + * @param array|null $options Name of driver class * * @return object + * + * @throws Exception if options is populated */ - public static function get(ServiceManager $sm, $config, - $class = 'VuFind\Hierarchy\Driver\ConfigurationBased' + public function __invoke(ServiceManager $sm, $requestedName, + array $options = null ) { + if (!empty($options)) { + throw new \Exception('Unexpected options passed to factory.'); + } + // Get config name from requestedName + $parts = explode('\\', $requestedName); + $config = end($parts); // Set up options based on global VuFind settings: $configReader = $sm->get('VuFind\Config'); $globalConfig = $configReader->get('config'); @@ -68,35 +76,11 @@ class Factory $driverConfig = $configReader->get($config); // Build object: - return new $class( + return new ConfigurationBased( $driverConfig, $sm->get('VuFind\HierarchyTreeDataSourcePluginManager'), $sm->get('VuFind\HierarchyTreeRendererPluginManager'), $options ); } - - /** - * Factory for HierarchyDefault to be called from module.config.php. - * - * @param ServiceManager $sm Service manager. - * - * @return HierarchyDefault - */ - public static function getHierarchyDefault(ServiceManager $sm) - { - return static::get($sm, 'HierarchyDefault'); - } - - /** - * Factory for HierarchyFlat to be called from module.config.php. - * - * @param ServiceManager $sm Service manager. - * - * @return HierarchyFlat - */ - public static function getHierarchyFlat(ServiceManager $sm) - { - return static::get($sm, 'HierarchyFlat'); - } } diff --git a/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php b/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php index 53fbe1ef4bb1668135193af6584894b16255a72c..41c23b3ff2db0c0995f925005c3742474419108c 100644 --- a/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php +++ b/module/VuFind/src/VuFind/Hierarchy/Driver/PluginManager.php @@ -38,6 +38,28 @@ namespace VuFind\Hierarchy\Driver; */ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager { + /** + * Default plugin aliases. + * + * @var array + */ + protected $aliases = [ + 'default' => 'VuFind\Hierarchy\Driver\HierarchyDefault', + 'flat' => 'VuFind\Hierarchy\Driver\HierarchyFlat', + ]; + + /** + * Default plugin factories. + * + * @var array + */ + protected $factories = [ + 'VuFind\Hierarchy\Driver\HierarchyDefault' => + 'VuFind\Hierarchy\Driver\ConfigurationBasedFactory', + 'VuFind\Hierarchy\Driver\HierarchyFlat' => + 'VuFind\Hierarchy\Driver\ConfigurationBasedFactory', + ]; + /** * Return the name of the base class or interface that plug-ins must conform * to.