From 3becb81798877dcf00eb63b4429ad0815269655a Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Fri, 14 Dec 2012 14:37:09 -0500 Subject: [PATCH] Made record router smart enough to figure out collection links even if not given a full record driver object. --- module/VuFind/config/module.config.php | 4 +++- module/VuFind/src/VuFind/Record/Router.php | 26 ++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index e9aa7eba06b..9ce63af369b 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -416,6 +416,9 @@ $config = array( $logger->setConfig(\VuFind\Config\Reader::getConfig()); return $logger; }, + 'VuFind\RecordRouter' => function ($sm) { + return new \VuFind\Record\Router($sm->get('VuFind\RecordLoader')); + }, 'VuFind\SMS' => 'VuFind\SMS\Factory', 'VuFind\Translator' => function ($sm) { $factory = new \Zend\I18n\Translator\TranslatorServiceFactory(); @@ -450,7 +453,6 @@ $config = array( 'VuFind\CacheManager' => 'VuFind\Cache\Manager', 'VuFind\Mailer' => 'VuFind\Mailer', 'VuFind\RecordLoader' => 'VuFind\Record\Loader', - 'VuFind\RecordRouter' => 'VuFind\Record\Router', 'VuFind\SearchSpecsReader' => 'VuFind\Config\SearchSpecsReader', 'VuFind\SessionManager' => 'Zend\Session\SessionManager', 'VuFind\WorldCatConnection' => 'VuFind\Connection\WorldCat', diff --git a/module/VuFind/src/VuFind/Record/Router.php b/module/VuFind/src/VuFind/Record/Router.php index eb5cafa4ccc..c38b74db088 100644 --- a/module/VuFind/src/VuFind/Record/Router.php +++ b/module/VuFind/src/VuFind/Record/Router.php @@ -38,6 +38,23 @@ namespace VuFind\Record; */ class Router { + /** + * Record loader + * + * @var \VuFind\Record\Loader + */ + protected $loader; + + /** + * Constructor + * + * @param \VuFind\Record\Loader $loader Record loader + */ + public function __construct(\VuFind\Record\Loader $loader) + { + $this->loader = $loader; + } + /** * Get routing details for a controller action. * @@ -75,12 +92,13 @@ class Router if (isset($config->Collections->collections) && $config->Collections->collections ) { - if (is_object($driver) - && true === $driver->tryMethod('isCollection') - ) { + if (!is_object($driver)) { + list($source, $id) = explode('|', $driver, 2); + $driver = $this->loader->load($id, $source); + } + if (true === $driver->tryMethod('isCollection')) { $route['route'] = 'collection'; } - // TODO: make routing work correctly in non-object $driver case } } return $route; -- GitLab