diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index 4e976ef563d19e28fa27413a509424cca44793cd..fc4f62739148ce618f688d5ab9e098b089a681e2 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -411,6 +411,7 @@ $config = [ 'VuFind\Search\History' => 'VuFind\Search\HistoryFactory', 'VuFind\Search\Memory' => 'VuFind\Search\MemoryFactory', 'VuFind\Search\FacetCache\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', + 'VuFind\Search\Factory\UrlQueryHelperFactory' => 'Zend\ServiceManager\Factory\InvokableFactory', 'VuFind\Search\Options\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Params\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Results\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', diff --git a/module/VuFind/src/VuFind/Controller/SearchController.php b/module/VuFind/src/VuFind/Controller/SearchController.php index cddf5e7da4c863ced8fa657637da9d85b38be30e..b3cf701f282f41027a5a455bc81c3b66c573f92b 100644 --- a/module/VuFind/src/VuFind/Controller/SearchController.php +++ b/module/VuFind/src/VuFind/Controller/SearchController.php @@ -74,7 +74,7 @@ class SearchController extends AbstractSolrSearch // Retrieve and manipulate the parameters: $searchHelper = $this->getViewRenderer()->plugin('searchMemory'); $params = $searchHelper->getLastSearchParams($searchClassId); - $factory = new UrlQueryHelperFactory(); + $factory = $this->serviceLocator->get(UrlQueryHelperFactory::class); $initialParams = $factory->fromParams($params); if ($removeAllFilters) { diff --git a/module/VuFind/src/VuFind/Search/Base/Results.php b/module/VuFind/src/VuFind/Search/Base/Results.php index 6b99ea6604805cbb67007981d7f009ca034dfebe..032870307d04e8ce663446192cf4b669dfb557dd 100644 --- a/module/VuFind/src/VuFind/Search/Base/Results.php +++ b/module/VuFind/src/VuFind/Search/Base/Results.php @@ -151,6 +151,13 @@ abstract class Results */ protected $recordLoader; + /** + * URL query helper factory + * + * @var UrlQueryHelperFactory + */ + protected $urlQueryHelperFactory = null; + /** * Constructor * @@ -231,7 +238,7 @@ abstract class Results { // Set up URL helper: if (!isset($this->helpers['urlQuery'])) { - $factory = new UrlQueryHelperFactory(); + $factory = $this->getUrlQueryHelperFactory(); $this->helpers['urlQuery'] = $factory->fromParams( $this->getParams(), $this->getUrlQueryHelperOptions() ); @@ -595,6 +602,31 @@ abstract class Results ); } + /** + * Get URL query helper factory + * + * @return UrlQueryHelperFactory + */ + protected function getUrlQueryHelperFactory() + { + if (null === $this->urlQueryHelperFactory) { + $this->urlQueryHelperFactory = new UrlQueryHelperFactory(); + } + return $this->urlQueryHelperFactory; + } + + /** + * Set URL query helper factory + * + * @param UrlQueryHelperFactory $factory UrlQueryHelperFactory object + * + * @return void + */ + public function setUrlQueryHelperFactory(UrlQueryHelperFactory $factory) + { + $this->urlQueryHelperFactory = $factory; + } + /** * Get complete facet counts for several index fields * diff --git a/module/VuFind/src/VuFind/Search/Factory/UrlQueryHelperFactory.php b/module/VuFind/src/VuFind/Search/Factory/UrlQueryHelperFactory.php index edb9aaf2efcf648821866b5bbab888b5f7ab0a3f..21bf2fd0559394a2feec7f2e52867d6c1141c525 100644 --- a/module/VuFind/src/VuFind/Search/Factory/UrlQueryHelperFactory.php +++ b/module/VuFind/src/VuFind/Search/Factory/UrlQueryHelperFactory.php @@ -41,6 +41,13 @@ use VuFind\Search\UrlQueryHelper; */ class UrlQueryHelperFactory { + /** + * Name of class built by factory. + * + * @var string + */ + protected $helperClass = UrlQueryHelper::class; + /** * Extract default settings from the search parameters. * @@ -158,7 +165,7 @@ class UrlQueryHelperFactory public function fromParams(Params $params, array $config = []) { $finalConfig = $this->addDefaultsToConfig($params, $config); - return new UrlQueryHelper( + return new $this->helperClass( $this->getUrlParams($params, $finalConfig), $params->getQuery(), $finalConfig diff --git a/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php b/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php index cc7bf07726fe131d0fe852ebd94292d3e14cbb40..cddcfeb579755b181a3e3af869620d4d81cb97cd 100644 --- a/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php +++ b/module/VuFind/src/VuFind/Search/Results/ResultsFactory.php @@ -28,6 +28,7 @@ namespace VuFind\Search\Results; use Interop\Container\ContainerInterface; +use VuFind\Search\Factory\UrlQueryHelperFactory; use Zend\ServiceManager\Factory\FactoryInterface; /** @@ -64,8 +65,12 @@ class ResultsFactory implements FactoryInterface ->get($paramsService); $searchService = $container->get(\VuFindSearch\Service::class); $recordLoader = $container->get(\VuFind\Record\Loader::class); - return new $requestedName( + $results = new $requestedName( $params, $searchService, $recordLoader, ...($options ?: []) ); + $results->setUrlQueryHelperFactory( + $container->get(UrlQueryHelperFactory::class) + ); + return $results; } } diff --git a/module/VuFind/src/VuFindTest/Unit/TestCase.php b/module/VuFind/src/VuFindTest/Unit/TestCase.php index eed2055534bf532694622cdb8dd858780b752557..4ceead7268a231c5da4303f29a3e2a3b18f8e7c0 100644 --- a/module/VuFind/src/VuFindTest/Unit/TestCase.php +++ b/module/VuFind/src/VuFindTest/Unit/TestCase.php @@ -28,6 +28,8 @@ */ namespace VuFindTest\Unit; +use VuFind\Search\Factory\UrlQueryHelperFactory; + /** * Abstract base class for PHPUnit test cases. * @@ -215,6 +217,9 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase \Zend\Mvc\I18n\Translator::class, $factory->createService($this->serviceManager) ); + $this->serviceManager->setService( + UrlQueryHelperFactory::class, new UrlQueryHelperFactory() + ); } return $this->serviceManager; }