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