Skip to content
Snippets Groups Projects
Commit bcda02a2 authored by Demian Katz's avatar Demian Katz Committed by Robert Lange
Browse files

Make UrlQueryHelper more extensible. (#1523)

parent 0ada6213
Branches
Tags
No related merge requests found
...@@ -411,6 +411,7 @@ $config = [ ...@@ -411,6 +411,7 @@ $config = [
'VuFind\Search\History' => 'VuFind\Search\HistoryFactory', 'VuFind\Search\History' => 'VuFind\Search\HistoryFactory',
'VuFind\Search\Memory' => 'VuFind\Search\MemoryFactory', 'VuFind\Search\Memory' => 'VuFind\Search\MemoryFactory',
'VuFind\Search\FacetCache\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\FacetCache\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
'VuFind\Search\Factory\UrlQueryHelperFactory' => 'Zend\ServiceManager\Factory\InvokableFactory',
'VuFind\Search\Options\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Options\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
'VuFind\Search\Params\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Params\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
'VuFind\Search\Results\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Results\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
......
...@@ -74,7 +74,7 @@ class SearchController extends AbstractSolrSearch ...@@ -74,7 +74,7 @@ class SearchController extends AbstractSolrSearch
// Retrieve and manipulate the parameters: // Retrieve and manipulate the parameters:
$searchHelper = $this->getViewRenderer()->plugin('searchMemory'); $searchHelper = $this->getViewRenderer()->plugin('searchMemory');
$params = $searchHelper->getLastSearchParams($searchClassId); $params = $searchHelper->getLastSearchParams($searchClassId);
$factory = new UrlQueryHelperFactory(); $factory = $this->serviceLocator->get(UrlQueryHelperFactory::class);
$initialParams = $factory->fromParams($params); $initialParams = $factory->fromParams($params);
if ($removeAllFilters) { if ($removeAllFilters) {
......
...@@ -151,6 +151,13 @@ abstract class Results ...@@ -151,6 +151,13 @@ abstract class Results
*/ */
protected $recordLoader; protected $recordLoader;
/**
* URL query helper factory
*
* @var UrlQueryHelperFactory
*/
protected $urlQueryHelperFactory = null;
/** /**
* Constructor * Constructor
* *
...@@ -231,7 +238,7 @@ abstract class Results ...@@ -231,7 +238,7 @@ abstract class Results
{ {
// Set up URL helper: // Set up URL helper:
if (!isset($this->helpers['urlQuery'])) { if (!isset($this->helpers['urlQuery'])) {
$factory = new UrlQueryHelperFactory(); $factory = $this->getUrlQueryHelperFactory();
$this->helpers['urlQuery'] = $factory->fromParams( $this->helpers['urlQuery'] = $factory->fromParams(
$this->getParams(), $this->getUrlQueryHelperOptions() $this->getParams(), $this->getUrlQueryHelperOptions()
); );
...@@ -595,6 +602,31 @@ abstract class Results ...@@ -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 * Get complete facet counts for several index fields
* *
......
...@@ -41,6 +41,13 @@ use VuFind\Search\UrlQueryHelper; ...@@ -41,6 +41,13 @@ use VuFind\Search\UrlQueryHelper;
*/ */
class UrlQueryHelperFactory class UrlQueryHelperFactory
{ {
/**
* Name of class built by factory.
*
* @var string
*/
protected $helperClass = UrlQueryHelper::class;
/** /**
* Extract default settings from the search parameters. * Extract default settings from the search parameters.
* *
...@@ -158,7 +165,7 @@ class UrlQueryHelperFactory ...@@ -158,7 +165,7 @@ class UrlQueryHelperFactory
public function fromParams(Params $params, array $config = []) public function fromParams(Params $params, array $config = [])
{ {
$finalConfig = $this->addDefaultsToConfig($params, $config); $finalConfig = $this->addDefaultsToConfig($params, $config);
return new UrlQueryHelper( return new $this->helperClass(
$this->getUrlParams($params, $finalConfig), $this->getUrlParams($params, $finalConfig),
$params->getQuery(), $params->getQuery(),
$finalConfig $finalConfig
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
namespace VuFind\Search\Results; namespace VuFind\Search\Results;
use Interop\Container\ContainerInterface; use Interop\Container\ContainerInterface;
use VuFind\Search\Factory\UrlQueryHelperFactory;
use Zend\ServiceManager\Factory\FactoryInterface; use Zend\ServiceManager\Factory\FactoryInterface;
/** /**
...@@ -64,8 +65,12 @@ class ResultsFactory implements FactoryInterface ...@@ -64,8 +65,12 @@ class ResultsFactory implements FactoryInterface
->get($paramsService); ->get($paramsService);
$searchService = $container->get(\VuFindSearch\Service::class); $searchService = $container->get(\VuFindSearch\Service::class);
$recordLoader = $container->get(\VuFind\Record\Loader::class); $recordLoader = $container->get(\VuFind\Record\Loader::class);
return new $requestedName( $results = new $requestedName(
$params, $searchService, $recordLoader, ...($options ?: []) $params, $searchService, $recordLoader, ...($options ?: [])
); );
$results->setUrlQueryHelperFactory(
$container->get(UrlQueryHelperFactory::class)
);
return $results;
} }
} }
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
*/ */
namespace VuFindTest\Unit; namespace VuFindTest\Unit;
use VuFind\Search\Factory\UrlQueryHelperFactory;
/** /**
* Abstract base class for PHPUnit test cases. * Abstract base class for PHPUnit test cases.
* *
...@@ -215,6 +217,9 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase ...@@ -215,6 +217,9 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
\Zend\Mvc\I18n\Translator::class, \Zend\Mvc\I18n\Translator::class,
$factory->createService($this->serviceManager) $factory->createService($this->serviceManager)
); );
$this->serviceManager->setService(
UrlQueryHelperFactory::class, new UrlQueryHelperFactory()
);
} }
return $this->serviceManager; return $this->serviceManager;
} }
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment