From 55f98d937f3e7844dd6fad0f31096b53700fed95 Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Fri, 19 Oct 2012 09:03:38 -0400 Subject: [PATCH] Make record drivers non-shared plugins in order to eliminate clone() calls throughout the code. --- .../VuFind/Controller/MyResearchController.php | 2 +- module/VuFind/src/VuFind/Record/Loader.php | 2 +- .../src/VuFind/RecordDriver/PluginManager.php | 17 +++++++++++++++++ .../VuFind/src/VuFind/Search/Solr/Results.php | 2 +- .../src/VuFind/Search/SolrAuth/Results.php | 2 +- .../src/VuFind/Search/SolrReserves/Results.php | 2 +- .../VuFind/src/VuFind/Search/Summon/Results.php | 2 +- .../src/VuFind/Search/WorldCat/Results.php | 2 +- 8 files changed, 24 insertions(+), 7 deletions(-) diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php index a71a6456bbd..d3503b55387 100644 --- a/module/VuFind/src/VuFind/Controller/MyResearchController.php +++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php @@ -744,7 +744,7 @@ class MyResearchController extends AbstractBase ->getResults()->getRecord($current['id']); } catch (RecordMissingException $e) { $factory = $this->getServiceLocator()->get('RecordDriverPluginManager'); - $record = clone($factory->get('Missing')); + $record = $factory->get('Missing'); $record->setRawData( array('id' => isset($current['id']) ? $current['id'] : null) ); diff --git a/module/VuFind/src/VuFind/Record/Loader.php b/module/VuFind/src/VuFind/Record/Loader.php index 853eb850161..6ed4c6040fd 100644 --- a/module/VuFind/src/VuFind/Record/Loader.php +++ b/module/VuFind/src/VuFind/Record/Loader.php @@ -134,7 +134,7 @@ class Loader implements ServiceLocatorAwareInterface $fields['id'] = $details['id']; $factory = $this->getServiceLocator() ->get('RecordDriverPluginManager'); - $retVal[$i] = clone($factory->get('Missing')); + $retVal[$i] = $factory->get('Missing'); $retVal[$i]->setRawData($fields); $retVal[$i]->setResourceSource($details['source']); } diff --git a/module/VuFind/src/VuFind/RecordDriver/PluginManager.php b/module/VuFind/src/VuFind/RecordDriver/PluginManager.php index 6c61443e1c0..bd4e63a20bf 100644 --- a/module/VuFind/src/VuFind/RecordDriver/PluginManager.php +++ b/module/VuFind/src/VuFind/RecordDriver/PluginManager.php @@ -38,6 +38,23 @@ namespace VuFind\RecordDriver; */ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager { + /** + * Constructor + * + * Make sure table gateways are properly initialized. + * + * @param null|ConfigInterface $configuration Configuration settings (optional) + */ + public function __construct( + \Zend\ServiceManager\ConfigInterface $configuration = null + ) { + parent::__construct($configuration); + + // Record drivers are not meant to be shared -- every time we retrieve one, + // we are building a brand new object. + $this->setShareByDefault(false); + } + /** * Return the name of the base class or interface that plug-ins must conform * to. diff --git a/module/VuFind/src/VuFind/Search/Solr/Results.php b/module/VuFind/src/VuFind/Search/Solr/Results.php index 3e5b0bf6ed2..1e9e6a280a3 100644 --- a/module/VuFind/src/VuFind/Search/Solr/Results.php +++ b/module/VuFind/src/VuFind/Search/Solr/Results.php @@ -543,7 +543,7 @@ class Results extends BaseResults $recordType = $factory->has($key) ? $key : 'SolrDefault'; // Build the object: - $driver = clone($factory->get($recordType)); + $driver = $factory->get($recordType); $driver->setRawData($data); return $driver; } diff --git a/module/VuFind/src/VuFind/Search/SolrAuth/Results.php b/module/VuFind/src/VuFind/Search/SolrAuth/Results.php index d391bc9793e..35fb26ebb19 100644 --- a/module/VuFind/src/VuFind/Search/SolrAuth/Results.php +++ b/module/VuFind/src/VuFind/Search/SolrAuth/Results.php @@ -64,7 +64,7 @@ class Results extends \VuFind\Search\Solr\Results protected function initRecordDriver($data) { $factory = $this->getServiceLocator()->get('RecordDriverPluginManager'); - $driver = clone($factory->get('SolrAuth')); + $driver = $factory->get('SolrAuth'); $driver->setRawData($data); return $driver; } diff --git a/module/VuFind/src/VuFind/Search/SolrReserves/Results.php b/module/VuFind/src/VuFind/Search/SolrReserves/Results.php index 104bcef35dd..0b3038b7d5b 100644 --- a/module/VuFind/src/VuFind/Search/SolrReserves/Results.php +++ b/module/VuFind/src/VuFind/Search/SolrReserves/Results.php @@ -66,7 +66,7 @@ class Results extends \VuFind\Search\Solr\Results protected function initRecordDriver($data) { $factory = $this->getServiceLocator()->get('RecordDriverPluginManager'); - $driver = clone($factory->get('SolrReserves')); + $driver = $factory->get('SolrReserves'); $driver->setRawData($data); return $driver; } diff --git a/module/VuFind/src/VuFind/Search/Summon/Results.php b/module/VuFind/src/VuFind/Search/Summon/Results.php index 8bf28e69283..efe1dce981f 100644 --- a/module/VuFind/src/VuFind/Search/Summon/Results.php +++ b/module/VuFind/src/VuFind/Search/Summon/Results.php @@ -161,7 +161,7 @@ class Results extends BaseResults protected function initRecordDriver($data) { $factory = $this->getServiceLocator()->get('RecordDriverPluginManager'); - $driver = clone($factory->get('Summon')); + $driver = $factory->get('Summon'); $driver->setRawData($data); return $driver; } diff --git a/module/VuFind/src/VuFind/Search/WorldCat/Results.php b/module/VuFind/src/VuFind/Search/WorldCat/Results.php index f5cd79d3ee2..bd219419d7c 100644 --- a/module/VuFind/src/VuFind/Search/WorldCat/Results.php +++ b/module/VuFind/src/VuFind/Search/WorldCat/Results.php @@ -125,7 +125,7 @@ class Results extends BaseResults protected function initRecordDriver($data) { $factory = $this->getServiceLocator()->get('RecordDriverPluginManager'); - $driver = clone($factory->get('WorldCat')); + $driver = $factory->get('WorldCat'); $driver->setRawData($data); return $driver; } -- GitLab