From d7f77082fbd642d353d4ca87b92d76e29c9b6248 Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Fri, 14 Dec 2012 14:26:48 -0500 Subject: [PATCH] Made record router a service rather than a static class to enable dependency injection and easier overriding. --- module/VuFind/config/module.config.php | 1 + .../src/VuFind/Controller/AbstractBase.php | 10 ++++++++++ .../src/VuFind/Controller/AbstractRecord.php | 4 ++-- .../src/VuFind/Controller/AbstractSearch.php | 6 +++--- .../VuFind/Controller/MyResearchController.php | 4 ++-- .../VuFind/Controller/RecordsController.php | 3 +-- module/VuFind/src/VuFind/Record/Router.php | 10 +++++----- .../VuFind/Theme/Root/Helper/RecordLink.php | 18 ++++++++++++++---- 8 files changed, 38 insertions(+), 18 deletions(-) diff --git a/module/VuFind/config/module.config.php b/module/VuFind/config/module.config.php index 21bc531770a..e9aa7eba06b 100644 --- a/module/VuFind/config/module.config.php +++ b/module/VuFind/config/module.config.php @@ -450,6 +450,7 @@ $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/Controller/AbstractBase.php b/module/VuFind/src/VuFind/Controller/AbstractBase.php index f39cd369a12..601308f226f 100644 --- a/module/VuFind/src/VuFind/Controller/AbstractBase.php +++ b/module/VuFind/src/VuFind/Controller/AbstractBase.php @@ -209,6 +209,16 @@ class AbstractBase extends AbstractActionController return $this->getServiceLocator()->get('VuFind\RecordLoader'); } + /** + * Get the record router. + * + * @return \VuFind\Record\Router + */ + public function getRecordRouter() + { + return $this->getServiceLocator()->get('VuFind\RecordRouter'); + } + /** * Get the search manager. * diff --git a/module/VuFind/src/VuFind/Controller/AbstractRecord.php b/module/VuFind/src/VuFind/Controller/AbstractRecord.php index ba55d3a7a7a..7b0d6701713 100644 --- a/module/VuFind/src/VuFind/Controller/AbstractRecord.php +++ b/module/VuFind/src/VuFind/Controller/AbstractRecord.php @@ -27,7 +27,6 @@ */ namespace VuFind\Controller; use VuFind\Exception\Mail as MailException, VuFind\Export, - VuFind\Record\Router as RecordRouter, Zend\Session\Container as SessionContainer; /** @@ -529,7 +528,8 @@ class AbstractRecord extends AbstractBase */ protected function redirectToRecord($params = '', $tab = null) { - $details = RecordRouter::getTabRouteDetails($this->loadRecord(), $tab); + $details = $this->getRecordRouter() + ->getTabRouteDetails($this->loadRecord(), $tab); $target = $this->url()->fromRoute($details['route'], $details['params']); return $this->redirect()->toUrl($target . $params); } diff --git a/module/VuFind/src/VuFind/Controller/AbstractSearch.php b/module/VuFind/src/VuFind/Controller/AbstractSearch.php index 0fc54cb31cf..56bf8971da1 100644 --- a/module/VuFind/src/VuFind/Controller/AbstractSearch.php +++ b/module/VuFind/src/VuFind/Controller/AbstractSearch.php @@ -26,8 +26,7 @@ * @link http://www.vufind.org Main Page */ namespace VuFind\Controller; -use VuFind\Record\Router as RecordRouter, VuFind\Search\Memory, - Zend\Stdlib\Parameters; +use VuFind\Search\Memory, Zend\Stdlib\Parameters; /** * VuFind Search Controller @@ -267,7 +266,8 @@ class AbstractSearch extends AbstractBase // If we got this far, we have a valid parameter so we should redirect // and report success: - $details = RecordRouter::getTabRouteDetails($recordList[$jumpto - 1]); + $details = $this->getRecordRouter() + ->getTabRouteDetails($recordList[$jumpto - 1]); return $this->redirect()->toRoute($details['route'], $details['params']); } diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php index cfa1b1029d9..d71271339ea 100644 --- a/module/VuFind/src/VuFind/Controller/MyResearchController.php +++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php @@ -31,7 +31,7 @@ use VuFind\Config\Reader as ConfigReader, VuFind\Exception\Auth as AuthException, VuFind\Exception\ListPermission as ListPermissionException, VuFind\Exception\RecordMissing as RecordMissingException, - VuFind\Record\Router as RecordRouter, Zend\Stdlib\Parameters; + Zend\Stdlib\Parameters; /** * Controller for the user account area. @@ -586,7 +586,7 @@ class MyResearchController extends AbstractBase $recordId = $this->params()->fromQuery('recordId'); $recordSource = $this->params()->fromQuery('recordSource', 'VuFind'); if (!empty($recordId)) { - $details = RecordRouter::getActionRouteDetails( + $details = $this->getRecordRouter()->getActionRouteDetails( $recordSource . '|' . $recordId, 'Save' ); return $this->redirect() diff --git a/module/VuFind/src/VuFind/Controller/RecordsController.php b/module/VuFind/src/VuFind/Controller/RecordsController.php index 41dee21e40f..ac56e47aba7 100644 --- a/module/VuFind/src/VuFind/Controller/RecordsController.php +++ b/module/VuFind/src/VuFind/Controller/RecordsController.php @@ -26,7 +26,6 @@ * @link http://vufind.org Main Site */ namespace VuFind\Controller; -use VuFind\Record\Router as RecordRouter; /** * Records Controller @@ -59,7 +58,7 @@ class RecordsController extends AbstractSearch // If there is exactly one record, send the user directly there: $ids = $this->params()->fromQuery('id', array()); if (count($ids) == 1) { - $details = RecordRouter::getTabRouteDetails($ids[0]); + $details = $this->getRecordRouter()->getTabRouteDetails($ids[0]); $target = $this->url()->fromRoute($details['route'], $details['params']); // forward print param, if necessary: $print = $this->params()->fromQuery('print'); diff --git a/module/VuFind/src/VuFind/Record/Router.php b/module/VuFind/src/VuFind/Record/Router.php index 1d7d5e76dd5..eb5cafa4ccc 100644 --- a/module/VuFind/src/VuFind/Record/Router.php +++ b/module/VuFind/src/VuFind/Record/Router.php @@ -47,9 +47,9 @@ class Router * * @return array */ - public static function getActionRouteDetails($driver, $action) + public function getActionRouteDetails($driver, $action) { - return static::getRouteDetails($driver, '-' . strtolower($action)); + return $this->getRouteDetails($driver, '-' . strtolower($action)); } /** @@ -61,9 +61,9 @@ class Router * * @return array */ - public static function getTabRouteDetails($driver, $tab = null) + public function getTabRouteDetails($driver, $tab = null) { - $route = static::getRouteDetails( + $route = $this->getRouteDetails( $driver, '', empty($tab) ? array() : array('tab' => $tab) ); @@ -98,7 +98,7 @@ class Router * * @return array */ - public static function getRouteDetails($driver, $routeSuffix, + public function getRouteDetails($driver, $routeSuffix, $extraParams = array() ) { // Extract source and ID from driver or string: diff --git a/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php b/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php index 5da6905dfe0..05f3d748b21 100644 --- a/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php +++ b/module/VuFind/src/VuFind/Theme/Root/Helper/RecordLink.php @@ -26,7 +26,7 @@ * @link http://vufind.org/wiki/building_a_recommendations_module Wiki */ namespace VuFind\Theme\Root\Helper; -use VuFind\Record\Router as RecordRouter, Zend\View\Helper\AbstractHelper; +use Zend\View\Helper\AbstractHelper; /** * Record link view helper @@ -37,8 +37,18 @@ use VuFind\Record\Router as RecordRouter, Zend\View\Helper\AbstractHelper; * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License * @link http://vufind.org/wiki/building_a_recommendations_module Wiki */ -class RecordLink extends AbstractHelper +class RecordLink extends AbstractServiceLocator { + /** + * Get the record router. + * + * @return \VuFind\Record\Router + */ + protected function getRecordRouter() + { + return $this->getServiceLocator()->get('VuFind\RecordRouter'); + } + /** * Given an array representing a related record (which may be a bib ID or OCLC * number), this helper renders a URL linking to that record. @@ -100,7 +110,7 @@ class RecordLink extends AbstractHelper { // Build the URL: $urlHelper = $this->getView()->plugin('url'); - $details = RecordRouter::getActionRouteDetails($driver, $action); + $details = $this->getRecordRouter()->getActionRouteDetails($driver, $action); return $urlHelper($details['route'], $details['params']); } @@ -152,7 +162,7 @@ class RecordLink extends AbstractHelper { // Build the URL: $urlHelper = $this->getView()->plugin('url'); - $details = RecordRouter::getTabRouteDetails($driver, $tab); + $details = $this->getRecordRouter()->getTabRouteDetails($driver, $tab); return $urlHelper($details['route'], $details['params']); } -- GitLab