From 029fc2dd3565b795b84dd3d7bedf6611b9e1de82 Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Tue, 6 Nov 2012 13:08:04 -0500
Subject: [PATCH] Added mechanism for passing request object to tab classes.

---
 .../src/VuFind/Controller/AbstractRecord.php  |  4 ++-
 .../src/VuFind/RecordTab/AbstractBase.php     | 30 +++++++++++++++++++
 .../src/VuFind/RecordTab/PluginManager.php    | 12 ++++++--
 3 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/module/VuFind/src/VuFind/Controller/AbstractRecord.php b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
index a0176ad9df0..28fcf35d3bd 100644
--- a/module/VuFind/src/VuFind/Controller/AbstractRecord.php
+++ b/module/VuFind/src/VuFind/Controller/AbstractRecord.php
@@ -516,10 +516,12 @@ class AbstractRecord extends AbstractBase
     protected function getAllTabs()
     {
         if (null === $this->allTabs) {
+            $driver = $this->loadRecord();
             $cfg = $this->getServiceLocator()->get('Config');
+            $request = $this->getRequest();
             $this->allTabs = $this->getServiceLocator()
                 ->get('VuFind\RecordTabPluginManager')
-                ->getTabsForRecord($this->loadRecord(), $cfg['recorddriver_tabs']);
+                ->getTabsForRecord($driver, $cfg['recorddriver_tabs'], $request);
         }
         return $this->allTabs;
     }
diff --git a/module/VuFind/src/VuFind/RecordTab/AbstractBase.php b/module/VuFind/src/VuFind/RecordTab/AbstractBase.php
index c77ca39b1e2..db509b6a067 100644
--- a/module/VuFind/src/VuFind/RecordTab/AbstractBase.php
+++ b/module/VuFind/src/VuFind/RecordTab/AbstractBase.php
@@ -45,6 +45,13 @@ abstract class AbstractBase implements TabInterface
      */
     protected $driver = null;
 
+    /**
+     * User request associated with the tab (false for none)
+     *
+     * @var \Zend\Http\Request|bool
+     */
+    protected $request = false;
+
     /**
      * Is this tab active?
      *
@@ -82,4 +89,27 @@ abstract class AbstractBase implements TabInterface
         }
         return $this->driver;
     }
+
+    /**
+     * Set the user request
+     *
+     * @param \Zend\Http\Request $request Request
+     *
+     * @return AbstractBase
+     */
+    public function setRequest(\Zend\Http\Request $request)
+    {
+        $this->request = $request;
+        return $this;
+    }
+
+    /**
+     * Get the user request (or false if unavailable)
+     *
+     * @return \Zend\Http\Request|bool
+     */
+    protected function getRequest()
+    {
+        return $this->request;
+    }
 }
\ No newline at end of file
diff --git a/module/VuFind/src/VuFind/RecordTab/PluginManager.php b/module/VuFind/src/VuFind/RecordTab/PluginManager.php
index 76560042652..cfaf2925679 100644
--- a/module/VuFind/src/VuFind/RecordTab/PluginManager.php
+++ b/module/VuFind/src/VuFind/RecordTab/PluginManager.php
@@ -81,14 +81,15 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
     /**
      * Get an array of valid tabs for the provided record driver.
      *
-     * @param \VuFind\RecordDriver\AbstractBase $driver Record driver
-     * @param array                             $config Tab configuration (map of
+     * @param \VuFind\RecordDriver\AbstractBase $driver  Record driver
+     * @param array                             $config  Tab configuration (map of
      * driver class => tab service name
+     * @param \Zend\Http\Request                $request User request (optional)
      *
      * @return array                                    service name => tab object
      */
     public function getTabsForRecord(\VuFind\RecordDriver\AbstractBase $driver,
-        array $config
+        array $config, $request = null
     ) {
         $tabs = array();
         foreach ($this->getTabServiceNames($driver, $config) as $tabKey => $svc) {
@@ -99,6 +100,11 @@ class PluginManager extends \VuFind\ServiceManager\AbstractPluginManager
             if (method_exists($newTab, 'setRecordDriver')) {
                 $newTab->setRecordDriver($driver);
             }
+            if ($request instanceof \Zend\Http\Request
+                && method_exists($newTab, 'setRequest')
+            ) {
+                $newTab->setRequest($request);
+            }
             if ($newTab->isActive()) {
                 $tabs[$tabKey] = $newTab;
             }
-- 
GitLab