From 79da33cc65495fff3b366d3021693bc55f81be13 Mon Sep 17 00:00:00 2001
From: Oliver Schihin <oliver.schihin@unibas.ch>
Date: Tue, 24 Jun 2014 12:17:42 +0200
Subject: [PATCH] Display hierarchical place names (publication places, field
 752) * MARC-driver method to read fields and return display value * display
 content in description tab * title translated in en, fr, de, it

---
 languages/de.ini                              |  1 +
 languages/en.ini                              |  1 +
 languages/fr.ini                              |  3 ++-
 languages/it.ini                              |  1 +
 .../src/VuFind/RecordDriver/SolrDefault.php   | 11 ++++++++
 .../src/VuFind/RecordDriver/SolrMarc.php      | 26 +++++++++++++++++++
 .../templates/RecordTab/description.phtml     | 12 +++++++++
 .../templates/RecordTab/description.phtml     | 12 +++++++++
 .../templates/RecordTab/description.phtml     | 10 +++++++
 9 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/languages/de.ini b/languages/de.ini
index 9df0d159368..6d7119ac956 100644
--- a/languages/de.ini
+++ b/languages/de.ini
@@ -594,6 +594,7 @@ Provider = "Provider"
 Public = "Öffentlich"
 Publication = Verlag
 Publication Frequency = "Erscheinungshäufigkeit"
+Publication_Place = "Erscheinungsort"
 Published = Veröffentlicht
 Published in = "Veröffentlicht in"
 Publisher = Verlag
diff --git a/languages/en.ini b/languages/en.ini
index 3ba7cbf4d6c..5a5c8eee53e 100644
--- a/languages/en.ini
+++ b/languages/en.ini
@@ -668,6 +668,7 @@ Provider = Provider
 Public = Public
 Publication = Publication
 Publication Frequency = "Publication Frequency"
+Publication_Place = "Place of Publication"
 Publication Information = "Publication Information"
 Publication Type = "Publication Type"
 Published = Published
diff --git a/languages/fr.ini b/languages/fr.ini
index 878da4bce57..c0c5fe405cc 100644
--- a/languages/fr.ini
+++ b/languages/fr.ini
@@ -590,7 +590,8 @@ profile_update = "Votre profil a été mis à jour comme souhaité"
 Provider = Fournisseur
 Public = Publique
 Publication = Publication
-Publication Frequency = "Fréquence de publication" 
+Publication Frequency = "Fréquence de publication"
+Publication_Place = "Lieu de publication"
 Published = Publié
 Published in = "Publié dans"
 Publisher = Éditeur
diff --git a/languages/it.ini b/languages/it.ini
index fb344f22031..94485c1d6c0 100644
--- a/languages/it.ini
+++ b/languages/it.ini
@@ -591,6 +591,7 @@ Provider = Provider
 Public = Pubblico
 Publication = Pubblicazione
 Publication Frequency = "Frequenza della pubblicazione"
+Publication_Place = "Luogo di pubblicazione"
 Published = Pubblicazione
 Published in = "Pubblicato in"
 Publisher = Editore
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php b/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
index b31d4283706..d426f144b56 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrDefault.php
@@ -1188,6 +1188,17 @@ class SolrDefault extends AbstractBase
             ? $this->fields['contents'] : array();
     }
 
+    /**
+     * Get hierarchical place names
+     *
+     * @return array
+     */
+    public function getHierarchicalPlaceNames()
+    {
+        // Not currently stored in the Solr index
+        return array();
+    }
+
     /**
      * Return an array of associative URL arrays with one or more of the following
      * keys:
diff --git a/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php b/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
index 79457125d18..4d8b18c7f43 100644
--- a/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
+++ b/module/VuFind/src/VuFind/RecordDriver/SolrMarc.php
@@ -653,6 +653,32 @@ class SolrMarc extends SolrDefault
         return $toc;
     }
 
+    /**
+     * Get hierarchical place names (MARC field 752)
+     *
+     * returns an array of formatted hierarchical place names, consisting of all
+     * alpha-subfields, concatenated for display
+     *
+     * @return array
+     */
+    public function getHierarchicalPlaceNames()
+    {
+        $placeNames = array();
+        if ($fields = $this->marcRecord->getFields('752')) {
+            foreach ($fields as $field) {
+                $subfields = $field->getSubfields();
+                $current = array();
+                foreach ($subfields as $subfield) {
+                    if (!is_numeric($subfield->getCode())) {
+                        $current[] = $subfield->getData();
+                    }
+                }
+                $placeNames[] = implode(' -- ', $current);
+            }
+        }
+        return $placeNames;
+    }
+
     /**
      * Return an array of associative URL arrays with one or more of the following
      * keys:
diff --git a/themes/blueprint/templates/RecordTab/description.phtml b/themes/blueprint/templates/RecordTab/description.phtml
index 0f968597e70..c665704ce89 100644
--- a/themes/blueprint/templates/RecordTab/description.phtml
+++ b/themes/blueprint/templates/RecordTab/description.phtml
@@ -203,6 +203,18 @@
     </tr>
   <? endif; ?>
 
+  <? $publicationPlaces = $this->driver->getHierarchicalPlaceNames(); if (!empty($publicationPlaces)): ?>
+    <? $contentDisplayed = true; ?>
+      <tr valign="top">
+          <th><?=$this->transEsc('Publication_Place')?>: </th>
+          <td>
+              <? foreach ($publicationPlaces as $field): ?>
+                  <?=$this->escapeHtml($field)?><br/>
+              <? endforeach; ?>
+          </td>
+      </tr>
+  <? endif; ?>
+
   <? $authorNotes = empty($isbn) ? array() : $this->authorNotes($isbn); if (!empty($authorNotes)): ?>
     <? $contentDisplayed = true; ?>
     <tr valign="top">
diff --git a/themes/bootstrap/templates/RecordTab/description.phtml b/themes/bootstrap/templates/RecordTab/description.phtml
index 6f5532be3b6..14efbab9151 100644
--- a/themes/bootstrap/templates/RecordTab/description.phtml
+++ b/themes/bootstrap/templates/RecordTab/description.phtml
@@ -203,6 +203,18 @@
     </tr>
   <? endif; ?>
 
+  <? $publicationPlaces = $this->driver->getHierarchicalPlaceNames(); if (!empty($publicationPlaces)): ?>
+    <? $contentDisplayed = true; ?>
+    <tr valign="top">
+      <th><?=$this->transEsc('Publication_Place')?>: </th>
+      <td>
+        <? foreach ($publicationPlaces as $field): ?>
+          <?=$this->escapeHtml($field)?><br/>
+        <? endforeach; ?>
+      </td>
+    </tr>
+  <? endif; ?>
+
   <? $authorNotes = empty($isbn) ? array() : $this->authorNotes($isbn); if (!empty($authorNotes)): ?>
     <? $contentDisplayed = true; ?>
     <tr valign="top">
diff --git a/themes/jquerymobile/templates/RecordTab/description.phtml b/themes/jquerymobile/templates/RecordTab/description.phtml
index 6b33128ee56..dce6e5909d9 100644
--- a/themes/jquerymobile/templates/RecordTab/description.phtml
+++ b/themes/jquerymobile/templates/RecordTab/description.phtml
@@ -171,6 +171,16 @@
     </dd>
   <? endif; ?>
 
+  <? $publicationPlaces = $this->driver->getHierarchicalPlaceNames(); if (!empty($publicationPlaces)): ?>
+    <? $contentDisplayed = true; ?>
+    <dt><?=$this->transEsc('Publication_Place')?>: </dt>
+    <dd>
+      <? foreach ($publicationPlaces as $field): ?>
+         <p><?=$this->escapeHtml($field)?></p>
+      <? endforeach; ?>
+    </dd>
+    <? endif; ?>
+
   <? if (!isset($contentDisplayed) || !$contentDisplayed): // Avoid errors if there were no rows above ?>
     <dd><p><?=$this->transEsc('no_description')?></p></dd>
   <? endif; ?>
-- 
GitLab