From 556fa285833a1002824db228ac5a3888159a2f7b Mon Sep 17 00:00:00 2001
From: Demian Katz <demian.katz@villanova.edu>
Date: Fri, 10 May 2013 09:30:57 -0400
Subject: [PATCH] Resolving VUFIND-763: configurable generator meta tag. Thanks
 to Tom Misilo for the suggestion.

---
 config/vufind/config.ini                      |  2 ++
 module/VuFind/src/VuFind/Config/Upgrade.php   |  7 ++++
 .../configs/customgenerator/config.ini        |  2 ++
 .../configs/defaultgenerator/config.ini       |  2 ++
 .../unit-tests/src/Config/UpgradeTest.php     | 34 ++++++++++++++++++-
 .../src/VuFindTheme/Initializer.php           |  7 ++++
 .../src/VuFindTheme/ResourceContainer.php     | 29 ++++++++++++++++
 .../View/Helper/HeadThemeResources.php        |  6 ++++
 8 files changed, 88 insertions(+), 1 deletion(-)
 create mode 100644 module/VuFind/tests/fixtures/configs/customgenerator/config.ini
 create mode 100644 module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini

diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index 43293286683..1d05cc463db 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -74,6 +74,8 @@ sidebarOnLeft = false
 showBookBag = false
 ; Set the maximum amount of items allowed in the Book Bag - Default is 100
 bookBagMaxSize = 100
+; Generator value to display in an HTML header <meta> tag:
+generator = "VuFind 2.0"
 
 ; This section allows you to configure the mechanism used for storing user
 ; sessions.  Available types: File, Memcache, Database.
diff --git a/module/VuFind/src/VuFind/Config/Upgrade.php b/module/VuFind/src/VuFind/Config/Upgrade.php
index 6f4817619ae..fb970256290 100644
--- a/module/VuFind/src/VuFind/Config/Upgrade.php
+++ b/module/VuFind/src/VuFind/Config/Upgrade.php
@@ -510,6 +510,13 @@ class Upgrade
             unset($newConfig['Statistics']['enabled']);
         }
 
+        // Update generator if it is default value:
+        if (isset($newConfig['Site']['generator'])
+            && $newConfig['Site']['generator'] == 'VuFind ' . $this->from
+        ) {
+            $newConfig['Site']['generator'] = 'VuFind ' . $this->to;
+        }
+
         // Deal with shard settings (which may have to be moved to another file):
         $this->upgradeShardSettings();
 
diff --git a/module/VuFind/tests/fixtures/configs/customgenerator/config.ini b/module/VuFind/tests/fixtures/configs/customgenerator/config.ini
new file mode 100644
index 00000000000..30491f29f9d
--- /dev/null
+++ b/module/VuFind/tests/fixtures/configs/customgenerator/config.ini
@@ -0,0 +1,2 @@
+[Site]
+generator = "Custom Generator"
\ No newline at end of file
diff --git a/module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini b/module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini
new file mode 100644
index 00000000000..8d71fe49a1b
--- /dev/null
+++ b/module/VuFind/tests/fixtures/configs/defaultgenerator/config.ini
@@ -0,0 +1,2 @@
+[Site]
+generator = "VuFind defaultgenerator"
\ No newline at end of file
diff --git a/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php b/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php
index 0e6ae3e8472..8940274523c 100644
--- a/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php
+++ b/module/VuFind/tests/unit-tests/src/Config/UpgradeTest.php
@@ -40,6 +40,13 @@ use VuFind\Config\Upgrade;
  */
 class UpgradeTest extends \VuFindTest\Unit\TestCase
 {
+    /**
+     * Target upgrade version
+     *
+     * @var string
+     */
+    protected $targetVersion = '2.0';
+
     /**
      * Get an upgrade object for the specified source version:
      *
@@ -51,7 +58,7 @@ class UpgradeTest extends \VuFindTest\Unit\TestCase
     {
         $oldDir = realpath(__DIR__ . '/../../../fixtures/configs/' . $version);
         $rawDir = realpath(__DIR__ . '/../../../../../../config/vufind');
-        return new Upgrade($version, '2.0', $oldDir, $rawDir);
+        return new Upgrade($version, $this->targetVersion, $oldDir, $rawDir);
     }
 
     /**
@@ -144,4 +151,29 @@ class UpgradeTest extends \VuFindTest\Unit\TestCase
     {
         $this->checkVersion('1.4');
     }
+
+    /**
+     * Test generator upgrade.
+     *
+     * @return void
+     */
+    public function testDefaultGenerator()
+    {
+        // We expect the upgrader to switch default values:
+        $upgrader = $this->getUpgrader('defaultgenerator');
+        $upgrader->run();
+        $results = $upgrader->getNewConfigs();
+        $this->assertEquals(
+            'VuFind ' . $this->targetVersion,
+            $results['config.ini']['Site']['generator']
+        );
+
+        // We expect the upgrader not to change custom values:
+        $upgrader = $this->getUpgrader('customgenerator');
+        $upgrader->run();
+        $results = $upgrader->getNewConfigs();
+        $this->assertEquals(
+            'Custom Generator', $results['config.ini']['Site']['generator']
+        );
+    }
 }
\ No newline at end of file
diff --git a/module/VuFindTheme/src/VuFindTheme/Initializer.php b/module/VuFindTheme/src/VuFindTheme/Initializer.php
index 0e3a1de337c..751ef013c21 100644
--- a/module/VuFindTheme/src/VuFindTheme/Initializer.php
+++ b/module/VuFindTheme/src/VuFindTheme/Initializer.php
@@ -91,6 +91,8 @@ class Initializer
      * selected through the user interface; each entry is a colon-separated
      * name:description pair, where name may be 'standard,' 'mobile,' or one of
      * the parameter-values from the alternate_themes array.</li>
+     *   <li>generator - a Generator value to display in the HTML header
+     * (optional)</li>
      * </ul>
      * @param MvcEvent $event  Zend MVC Event object
      */
@@ -320,6 +322,11 @@ class Initializer
         // Grab the resource manager for tracking CSS, JS, etc.:
         $resources = $this->serviceManager->get('VuFindTheme\ResourceContainer');
 
+        // Set generator if necessary:
+        if (isset($this->config->generator)) {
+            $resources->setGenerator($this->config->generator);
+        }
+
         // Apply the loaded theme settings in reverse for proper inheritance:
         foreach ($themes as $key=>$currentThemeInfo) {
             if (isset($currentThemeInfo['helpers'])) {
diff --git a/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php b/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
index 2fcef78e932..0743a3e28d5 100644
--- a/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
+++ b/module/VuFindTheme/src/VuFindTheme/ResourceContainer.php
@@ -66,6 +66,13 @@ class ResourceContainer
      */
     protected $encoding = 'UTF-8';
 
+    /**
+     * Generator value for <meta> tag
+     *
+     * @var string
+     */
+    protected $generator = '';
+
     /**
      * Add a CSS file.
      *
@@ -165,4 +172,26 @@ class ResourceContainer
     {
         return $this->favicon;
     }
+
+    /**
+     * Set the generator.
+     *
+     * @param string $generator New generator.
+     *
+     * @return void
+     */
+    public function setGenerator($generator)
+    {
+        $this->generator = $generator;
+    }
+
+    /**
+     * Get the generator.
+     *
+     * @return string
+     */
+    public function getGenerator()
+    {
+        return $this->generator;
+    }
 }
\ No newline at end of file
diff --git a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
index aefe2af4617..f20876903af 100644
--- a/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
+++ b/module/VuFindTheme/src/VuFindTheme/View/Helper/HeadThemeResources.php
@@ -68,6 +68,12 @@ class HeadThemeResources extends \Zend\View\Helper\AbstractHelper
             'Content-Type', 'text/html; charset=' . $this->container->getEncoding()
         );
 
+        // Set up generator:
+        $generator = $this->container->getGenerator();
+        if (!empty($generator)) {
+            $headMeta()->appendName('Generator', $generator);
+        }
+
         // Load CSS (make sure we prepend them in the appropriate order; theme
         // resources should load before extras added by individual templates):
         $headLink = $this->getView()->plugin('headlink');
-- 
GitLab