diff --git a/config/vufind/Summon.ini b/config/vufind/Summon.ini index fe5ffd8de07da32a17392994595777b0d0d0766f..325e3adbd4c2ec9cce69dcd289f420d958416a3d 100644 --- a/config/vufind/Summon.ini +++ b/config/vufind/Summon.ini @@ -225,6 +225,20 @@ orFacets = * ; below, no facets will be translated. translated_facets[] = ContentType +; These facets will be displayed on the Home Page. If this section is omitted, +; the [Advanced_Facets] section will be used instead. +[HomePage_Facets] +Language = "Language" +ContentType = "Format" + +; These settings affect the way the [HomePage] facets are displayed +; NOTE: To make changes take effect immediately, you may need to clear VuFind's +; cache after changing this section. +[HomePage_Facet_Settings] +; how many values should we load for each facet? depending on the column layout +; of the homepage facet lists, we may not display all loaded values for every facet +facet_limit = 100 + ; This section shows which search types will display in the basic search box at ; the top of Summon pages. The name of each setting below corresponds with an ; index defined in the Summon API. The value of each setting is the text to diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index ba4d224d29ff3f99908d46e54e6f4fe7cfe26352..84f123e8d96cd46123c20afe106790c34106dc8d 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -337,6 +337,7 @@ $config = [ 'VuFind\Search\BackendManager' => 'VuFind\Search\BackendManagerFactory', 'VuFind\Search\History' => 'VuFind\Search\HistoryFactory', 'VuFind\Search\Memory' => 'VuFind\Search\MemoryFactory', + 'VuFind\Search\FacetCache\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Options\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Params\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', 'VuFind\Search\Results\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory', @@ -486,6 +487,7 @@ $config = [ 'related' => [ /* See VuFind\Related\PluginManager for defaults */ ], 'resolver_driver' => [ /* See VuFind\Resolver\Driver\PluginManager for defaults */ ], 'search_backend' => [ /* See VuFind\Search\BackendRegistry for defaults */ ], + 'search_facetcache' => [ /* See VuFind\Search\FacetCache\PluginManager for defaults */ ], 'search_options' => [ /* See VuFind\Search\Options\PluginManager for defaults */ ], 'search_params' => [ /* See VuFind\Search\Params\PluginManager for defaults */ ], 'search_results' => [ /* See VuFind\Search\Results\PluginManager for defaults */ ], diff --git a/module/VuFind/src/VuFind/Controller/SearchController.php b/module/VuFind/src/VuFind/Controller/SearchController.php index 27b89921974c4544750276699bd13926efa9887f..8da9abd1427c3704c2c7b4719031fea5753c7e90 100644 --- a/module/VuFind/src/VuFind/Controller/SearchController.php +++ b/module/VuFind/src/VuFind/Controller/SearchController.php @@ -51,9 +51,10 @@ class SearchController extends AbstractSearch $view = parent::advancedAction(); // Set up facet information: - $view->facetList = $this->processAdvancedFacets( - $this->getAdvancedFacets(), $view->saved - ); + $facets = $this->serviceLocator + ->get('VuFind\Search\FacetCache\PluginManager')->get('Solr') + ->getList('Advanced'); + $view->facetList = $this->processAdvancedFacets($facets, $view->saved); $specialFacets = $this->parseSpecialFacetsSetting( $view->options->getSpecialAdvancedFacets() ); @@ -268,10 +269,12 @@ class SearchController extends AbstractSearch */ public function homeAction() { + $facetCache = $this->serviceLocator + ->get('VuFind\Search\FacetCache\PluginManager')->get('Solr'); return $this->createViewModel( [ - 'results' => $this->getResultsObjectWithHiddenFilters('Solr'), - 'facetList' => $this->getHomePageFacets(), + 'results' => $facetCache->getResults(), + 'facetList' => $facetCache->getList('HomePage'), 'hierarchicalFacets' => $this->getHierarchicalFacets(), 'hierarchicalFacetSortOptions' => $this->getHierarchicalFacetSortSettings() @@ -516,111 +519,6 @@ class SearchController extends AbstractSearch return parent::resultsAction(); } - /** - * Get active hidden filter settings. - * - * @return array - */ - protected function getActiveHiddenFilters() - { - return $this->serviceLocator->get('VuFind\Search\SearchTabsHelper') - ->getHiddenFilters($this->searchClassId); - } - - /** - * Create a results object with hidden filters pre-populated. - * - * @param string $backend ID of results object to create - * @param array $filters Hidden filter settings (null for defaults) - * - * @return \VuFind\Search\Base\Results - */ - protected function getResultsObjectWithHiddenFilters($backend, $filters = null) - { - if (null === $filters) { - $filters = $this->getActiveHiddenFilters(); - } - $results = $this->getResultsManager()->get($backend); - $params = $results->getParams(); - foreach ($filters as $key => $subFilters) { - foreach ($subFilters as $filter) { - $params->addHiddenFilter("$key:$filter"); - } - } - return $results; - } - - /** - * Return a Search Results object containing requested facet information. This - * data may come from the cache. - * - * @param string $initMethod Name of params method to use to request facets - * @param string $cacheName Cache key for facet data - * - * @return array - */ - protected function getFacetResults($initMethod, $cacheName) - { - // Check if we have facet results cached, and build them if we don't. - $cache = $this->serviceLocator->get('VuFind\Cache\Manager') - ->getCache('object'); - $language = $this->serviceLocator->get('Zend\Mvc\I18n\Translator') - ->getLocale(); - $hiddenFilters = $this->getActiveHiddenFilters(); - $hiddenFiltersHash = md5(json_encode($hiddenFilters)); - $cacheName .= "List-$hiddenFiltersHash-$language"; - if (!($list = $cache->getItem($cacheName))) { - // Use advanced facet settings to get summary facets on the front page; - // we may want to make this more flexible later. Also keep in mind that - // the template is currently looking for certain hard-coded fields; this - // should also be made smarter. - $results = $this->getResultsObjectWithHiddenFilters( - 'Solr', $hiddenFilters - ); - $params = $results->getParams(); - $params->$initMethod(); - - // Avoid a backend request if there are no facets configured by the given - // init method. - if (!empty($params->getFacetConfig())) { - // We only care about facet lists, so don't get any results (this - // helps prevent problems with serialized File_MARC objects in the - // cache): - $params->setLimit(0); - $list = $results->getFacetList(); - } else { - $list = []; - } - $cache->setItem($cacheName, $list); - } - - return $list; - } - - /** - * Return a Search Results object containing advanced facet information. This - * data may come from the cache. - * - * @return array - */ - protected function getAdvancedFacets() - { - return $this->getFacetResults( - 'initAdvancedFacets', 'solrSearchAdvancedFacets' - ); - } - - /** - * Return a Search Results object containing homepage facet information. This - * data may come from the cache. - * - * @return array - */ - protected function getHomePageFacets() - { - return $this->getFacetResults('initHomePageFacets', 'solrSearchHomeFacets'); - } - /** * Handle OpenSearch. * diff --git a/module/VuFind/src/VuFind/Controller/SummonController.php b/module/VuFind/src/VuFind/Controller/SummonController.php index d1d7e620edca68f7e054a33691e0086d40d2d6b9..c08b94260864e735032f0385931eae91a94b5609 100644 --- a/module/VuFind/src/VuFind/Controller/SummonController.php +++ b/module/VuFind/src/VuFind/Controller/SummonController.php @@ -105,9 +105,10 @@ class SummonController extends AbstractSearch $view = parent::advancedAction(); // Set up facet information: - $view->facetList = $this->processAdvancedFacets( - $this->getAdvancedFacets(), $view->saved - ); + $facets = $this->serviceLocator + ->get('VuFind\Search\FacetCache\PluginManager')->get('Summon') + ->getList('Advanced'); + $view->facetList = $this->processAdvancedFacets($facets, $view->saved); $specialFacets = $this->parseSpecialFacetsSetting( $view->options->getSpecialAdvancedFacets() ); @@ -129,10 +130,12 @@ class SummonController extends AbstractSearch */ public function homeAction() { + $facetCache = $this->serviceLocator + ->get('VuFind\Search\FacetCache\PluginManager')->get('Summon'); return $this->createViewModel( [ - 'results' => $this->getResultsManager()->get('Summon'), - 'facetList' => $this->getHomePageFacets(), + 'results' => $facetCache->getResults(), + 'facetList' => $facetCache->getList('HomePage'), ] ); } @@ -147,69 +150,6 @@ class SummonController extends AbstractSearch return $this->resultsAction(); } - /** - * Return a Search Results object containing advanced facet information. This - * data may come from the cache. - * - * @return array - */ - protected function getAdvancedFacets() - { - // Check if we have facet results cached, and build them if we don't. - $cache = $this->serviceLocator->get('VuFind\Cache\Manager') - ->getCache('object'); - $language = $this->serviceLocator->get('Zend\Mvc\I18n\Translator') - ->getLocale(); - $cacheKey = 'summonSearchAdvancedFacetsList-' . $language; - if (!($list = $cache->getItem($cacheKey))) { - $config = $this->serviceLocator->get('VuFind\Config\PluginManager') - ->get('Summon'); - $limit = isset($config->Advanced_Facet_Settings->facet_limit) - ? $config->Advanced_Facet_Settings->facet_limit : 100; - $results = $this->getResultsManager()->get('Summon'); - $params = $results->getParams(); - $facetsToShow = isset($config->Advanced_Facets) - ? $config->Advanced_Facets - : ['Language' => 'Language', 'ContentType' => 'Format']; - if (isset($config->Advanced_Facet_Settings->orFacets)) { - $orFields = array_map( - 'trim', explode(',', $config->Advanced_Facet_Settings->orFacets) - ); - } else { - $orFields = []; - } - foreach ($facetsToShow as $facet => $label) { - $useOr = (isset($orFields[0]) && $orFields[0] == '*') - || in_array($facet, $orFields); - $params->addFacet( - $facet . ',or,1,' . $limit, $label, $useOr - ); - } - - // We only care about facet lists, so don't get any results: - $params->setLimit(0); - - // force processing for cache - $list = $results->getFacetList(); - - $cache->setItem('summonSearchAdvancedFacetsList', $list); - } - - return $list; - } - - /** - * Return a Search Results object containing homepage facet information. This - * data may come from the cache. - * - * @return array - */ - protected function getHomePageFacets() - { - // For now, we'll use the same fields as the advanced search screen. - return $this->getAdvancedFacets(); - } - /** * Process the facets to be used as limits on the Advanced Search screen. * diff --git a/module/VuFind/src/VuFind/Search/Base/FacetCache.php b/module/VuFind/src/VuFind/Search/Base/FacetCache.php new file mode 100644 index 0000000000000000000000000000000000000000..740bb2f7734e8d819658e93bd0beb1e9a3cd896f --- /dev/null +++ b/module/VuFind/src/VuFind/Search/Base/FacetCache.php @@ -0,0 +1,156 @@ +<?php +/** + * Abstract Base FacetCache. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search_Base + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace VuFind\Search\Base; + +use VuFind\Cache\Manager as CacheManager; + +/** + * Solr FacetCache Factory. + * + * @category VuFind + * @package Search_Base + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +abstract class FacetCache +{ + /** + * Cache manager + * + * @var CacheManager + */ + protected $cacheManager; + + /** + * Currently selected language + * + * @var string + */ + protected $language; + + /** + * Search results object. + * + * @var Results + */ + protected $results; + + /** + * Constructor + * + * @param Results $r Search results object + * @param CacheManager $cm Cache manager + * @param string $language Active UI language + */ + public function __construct(Results $r, CacheManager $cm, $language = 'en') + { + $this->results = $r; + $this->cacheManager = $cm; + $this->language = $language; + } + + /** + * Get the namespace to use for caching facets. + * + * @return string + */ + abstract protected function getCacheNamespace(); + + /** + * Get the cache key for the provided method. + * + * @return string + */ + protected function getCacheKey() + { + $params = $this->results->getParams(); + $settings = [$params->getFacetConfig(), $params->getHiddenFilters()]; + return $this->language . md5(print_r($settings, true)); + } + + /** + * Perform the actual facet lookup. + * + * @param string $initMethod Name of params method to use to request facets + * + * @return array + */ + protected function getFacetResults($initMethod) + { + // Check if we have facet results cached, and build them if we don't. + $cache = $this->cacheManager->getCache('object', $this->getCacheNamespace()); + $params = $this->results->getParams(); + + // Note that we need to initialize the parameters BEFORE generating the + // cache key to ensure that the key is based on the proper settings. + $params->$initMethod(); + $cacheKey = $this->getCacheKey(); + if (!($list = $cache->getItem($cacheKey))) { + // Avoid a backend request if there are no facets configured by the given + // init method. + if (!empty($params->getFacetConfig())) { + // We only care about facet lists, so don't get any results (this + // improves performance): + $params->setLimit(0); + $list = $this->results->getFacetList(); + } else { + $list = []; + } + $cache->setItem($cacheKey, $list); + } + + return $list; + } + + /** + * Return facet information. This data may come from the cache. + * + * @param string $context Context of list to retrieve ('Advanced' or 'HomePage') + * + * @return array + */ + public function getList($context = 'Advanced') + { + if (!in_array($context, ['Advanced', 'HomePage'])) { + throw new \Exception('Invalid context: ' . $context); + } + // For now, all contexts are handled the same way. + return $this->getFacetResults('init' . $context . 'Facets'); + } + + /** + * Get results object used to retrieve facets. + * + * @return Results + */ + public function getResults() + { + return $this->results; + } +} diff --git a/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php b/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..7d938da90c31b1bccd60d45edd21806248e6d7e8 --- /dev/null +++ b/module/VuFind/src/VuFind/Search/Base/FacetCacheFactory.php @@ -0,0 +1,78 @@ +<?php +/** + * Abstract FacetCache Factory. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search_Base + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace VuFind\Search\Base; + +use Interop\Container\ContainerInterface; +use Zend\ServiceManager\Factory\FactoryInterface; + +/** + * Abstract FacetCache Factory. + * + * @category VuFind + * @package Search_Base + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +abstract class FacetCacheFactory implements FactoryInterface +{ + /** + * Create a results object with appropriate pre-populated values. + * + * @param ContainerInterface $container Service manager + * + * @return \VuFind\Search\Base\Results + */ + abstract protected function getResults(ContainerInterface $container); + + /** + * Create an object + * + * @param ContainerInterface $container Service manager + * @param string $requestedName Service being created + * @param null|array $options Extra options (optional) + * + * @return object + * + * @throws ServiceNotFoundException if unable to resolve the service. + * @throws ServiceNotCreatedException if an exception is raised when + * creating a service. + * @throws ContainerException if any other error occurs + */ + public function __invoke(ContainerInterface $container, $requestedName, + array $options = null + ) { + if (!empty($options)) { + throw new \Exception('Unexpected options sent to factory.'); + } + $results = $this->getResults($container); + $cacheManager = $container->get('VuFind\Cache\Manager'); + $language = $container->get('Zend\Mvc\I18n\Translator')->getLocale(); + return new $requestedName($results, $cacheManager, $language); + } +} diff --git a/module/VuFind/src/VuFind/Search/FacetCache/PluginManager.php b/module/VuFind/src/VuFind/Search/FacetCache/PluginManager.php new file mode 100644 index 0000000000000000000000000000000000000000..e5b51980fd227491e0e88801e0725c00695b5cd5 --- /dev/null +++ b/module/VuFind/src/VuFind/Search/FacetCache/PluginManager.php @@ -0,0 +1,72 @@ +<?php +/** + * Facet cache plugin manager + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development:plugins:record_drivers Wiki + */ +namespace VuFind\Search\FacetCache; + +/** + * Facet cache plugin manager + * + * @category VuFind + * @package Search + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development:plugins:record_drivers Wiki + */ +class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager +{ + /** + * Default plugin aliases. + * + * @var array + */ + protected $aliases = [ + 'solr' => 'VuFind\Search\Solr\FacetCache', + 'summon' => 'VuFind\Search\Summon\FacetCache', + ]; + + /** + * Default plugin factories. + * + * @var array + */ + protected $factories = [ + 'VuFind\Search\Solr\FacetCache' => 'VuFind\Search\Solr\FacetCacheFactory', + 'VuFind\Search\Summon\FacetCache' => + 'VuFind\Search\Summon\FacetCacheFactory', + ]; + + /** + * Return the name of the base class or interface that plug-ins must conform + * to. + * + * @return string + */ + protected function getExpectedInterface() + { + return 'VuFind\Search\Base\FacetCache'; + } +} diff --git a/module/VuFind/src/VuFind/Search/Solr/FacetCache.php b/module/VuFind/src/VuFind/Search/Solr/FacetCache.php new file mode 100644 index 0000000000000000000000000000000000000000..c3aab4c420e7c02afc849f3096daa3498e12fd6d --- /dev/null +++ b/module/VuFind/src/VuFind/Search/Solr/FacetCache.php @@ -0,0 +1,50 @@ +<?php +/** + * Solr FacetCache. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search_Solr + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace VuFind\Search\Solr; + +/** + * Solr FacetCache. + * + * @category VuFind + * @package Search_Solr + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +class FacetCache extends \VuFind\Search\Base\FacetCache +{ + /** + * Get the namespace to use for caching facets. + * + * @return string + */ + protected function getCacheNamespace() + { + return 'solr-facets'; + } +} diff --git a/module/VuFind/src/VuFind/Search/Solr/FacetCacheFactory.php b/module/VuFind/src/VuFind/Search/Solr/FacetCacheFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..7c1b065ee8bfe00e51bf18a83ddc81bf801594c6 --- /dev/null +++ b/module/VuFind/src/VuFind/Search/Solr/FacetCacheFactory.php @@ -0,0 +1,64 @@ +<?php +/** + * Solr FacetCache Factory. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search_Solr + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace VuFind\Search\Solr; + +use Interop\Container\ContainerInterface; + +/** + * Solr FacetCache Factory. + * + * @category VuFind + * @package Search_Solr + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +class FacetCacheFactory extends \VuFind\Search\Base\FacetCacheFactory +{ + /** + * Create a results object with hidden filters pre-populated. + * + * @param ContainerInterface $container Service manager + * + * @return \VuFind\Search\Base\Results + */ + protected function getResults(ContainerInterface $container) + { + $filters = $container->get('VuFind\Search\SearchTabsHelper') + ->getHiddenFilters('Solr'); + $results = $container->get('VuFind\Search\Results\PluginManager') + ->get('Solr'); + $params = $results->getParams(); + foreach ($filters as $key => $subFilters) { + foreach ($subFilters as $filter) { + $params->addHiddenFilter("$key:$filter"); + } + } + return $results; + } +} diff --git a/module/VuFind/src/VuFind/Search/Summon/FacetCache.php b/module/VuFind/src/VuFind/Search/Summon/FacetCache.php new file mode 100644 index 0000000000000000000000000000000000000000..11bffd4c2e591ee5e2141acc740e3b80f4433044 --- /dev/null +++ b/module/VuFind/src/VuFind/Search/Summon/FacetCache.php @@ -0,0 +1,50 @@ +<?php +/** + * Summon FacetCache. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search_Summon + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace VuFind\Search\Summon; + +/** + * Summon FacetCache. + * + * @category VuFind + * @package Search_Summon + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +class FacetCache extends \VuFind\Search\Base\FacetCache +{ + /** + * Get the namespace to use for caching facets. + * + * @return string + */ + protected function getCacheNamespace() + { + return 'summon-facets'; + } +} diff --git a/module/VuFind/src/VuFind/Search/Summon/FacetCacheFactory.php b/module/VuFind/src/VuFind/Search/Summon/FacetCacheFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..2e0f10ceeb0383c366fb165b51852ca2dbac1efe --- /dev/null +++ b/module/VuFind/src/VuFind/Search/Summon/FacetCacheFactory.php @@ -0,0 +1,54 @@ +<?php +/** + * Summon FacetCache Factory. + * + * PHP version 7 + * + * Copyright (C) Villanova University 2018. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * @category VuFind + * @package Search_Summon + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +namespace VuFind\Search\Summon; + +use Interop\Container\ContainerInterface; + +/** + * Summon FacetCache Factory. + * + * @category VuFind + * @package Search_Summon + * @author Demian Katz <demian.katz@villanova.edu> + * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License + * @link https://vufind.org/wiki/development Wiki + */ +class FacetCacheFactory extends \VuFind\Search\Base\FacetCacheFactory +{ + /** + * Create a results object. + * + * @param ContainerInterface $container Service manager + * + * @return \VuFind\Search\Base\Results + */ + protected function getResults(ContainerInterface $container) + { + return $container->get('VuFind\Search\Results\PluginManager')->get('Summon'); + } +} diff --git a/module/VuFind/src/VuFind/Search/Summon/Params.php b/module/VuFind/src/VuFind/Search/Summon/Params.php index 69cdcf0e5b2faa1f964e938eedd27ced7327a2ac..0e197984c0d7d0035c264d4758d342bc522b5db8 100644 --- a/module/VuFind/src/VuFind/Search/Summon/Params.php +++ b/module/VuFind/src/VuFind/Search/Summon/Params.php @@ -377,7 +377,30 @@ class Params extends \VuFind\Search\Base\Params */ public function initAdvancedFacets() { - $this->initFacetList('Advanced_Facets', 'Advanced_Facet_Settings', 'Summon'); + $success = $this + ->initFacetList('Advanced_Facets', 'Advanced_Facet_Settings', 'Summon'); + // If no configuration was found, set up defaults instead: + if (!$success) { + $defaults = ['Language' => 'Language', 'ContentType' => 'Format']; + foreach ($defaults as $key => $value) { + $this->addFacet($key, $value); + } + } + } + + /** + * Initialize facet settings for the home page. + * + * @return void + */ + public function initHomePageFacets() + { + // Load Advanced settings if HomePage settings are missing (legacy support): + $homeSuccess = $this + ->initFacetList('HomePage_Facets', 'HomePage_Facet_Settings', 'Summon'); + if (!$homeSuccess) { + $this->initAdvancedFacets(); + } } /** @@ -406,9 +429,11 @@ class Params extends \VuFind\Search\Base\Params // Based on preference, change the order of initialization to make sure // that preferred facet labels come in last. if ($preferredSection == 'Advanced') { + $this->initHomePageFacets(); $this->initBasicFacets(); $this->initAdvancedFacets(); } else { + $this->initHomePageFacets(); $this->initAdvancedFacets(); $this->initBasicFacets(); }