From 34c8a4c1455996bd3be1ed2862786f2f2218e683 Mon Sep 17 00:00:00 2001
From: Dorian Merz <merz@ub.uni-leipzig.de>
Date: Thu, 26 Aug 2021 15:02:46 +0200
Subject: [PATCH] refs #20242 [fid_bbi] add top Recommendation for latest
 releases

* do not provide link to empty search
* fix permission name

* adds info text
** ... for logged in users without access to licensed material
** fixes English translation

* stay in Releases search, inform user
* fix error concerning homepage search box using stored hidden filters
---
 fid_bbi/config/vufind/config.ini              |  9 ++++
 fid_bbi/config/vufind/searches.ini            |  6 +++
 themes/fid_bbi/languages/de.ini               | 10 ++++
 themes/fid_bbi/languages/en.ini               | 10 ++++
 themes/fid_bbi/scss/blocks/search.scss        | 14 +++++
 .../templates/Recommend/SwitchTab.phtml       | 52 +++++++++++++++++++
 .../templates/Recommend/TopFacets.phtml       |  0
 themes/fid_bbi/templates/header.phtml         | 11 ++++
 themes/fid_bbi/templates/layout/layout.phtml  | 10 ++--
 themes/fid_bbi/templates/search/results.phtml | 12 ++---
 .../fid_bbi/templates/search/searchbox.phtml  | 16 ++++--
 11 files changed, 131 insertions(+), 19 deletions(-)
 create mode 100644 themes/fid_bbi/templates/Recommend/SwitchTab.phtml
 delete mode 100644 themes/fid_bbi/templates/Recommend/TopFacets.phtml

diff --git a/fid_bbi/config/vufind/config.ini b/fid_bbi/config/vufind/config.ini
index 3587a841397..b3f1bca0a50 100644
--- a/fid_bbi/config/vufind/config.ini
+++ b/fid_bbi/config/vufind/config.ini
@@ -215,3 +215,12 @@ Infodata = "https://wtiweb.wti-frankfurt.de/fid-bbi"
 
 [ExternalDatabases]
 DBIS = true
+
+[SearchTabs]
+Solr:main = "All"
+Solr:Releases = "Releases"
+
+[SearchTabsFilters]
+Solr:Releases[] = 'facet_avail:Local'
+Solr:Releases[] = 'publishDateSort:2021'
+
diff --git a/fid_bbi/config/vufind/searches.ini b/fid_bbi/config/vufind/searches.ini
index 9a36cb10848..49eb36dfc05 100644
--- a/fid_bbi/config/vufind/searches.ini
+++ b/fid_bbi/config/vufind/searches.ini
@@ -88,3 +88,9 @@ author2_orig = "Alternative Author Name"
 author_corp_ref = "Alternative Corporate Name"
 author_corporate_orig = "Alternative Corporate Name"
 author_corporate2_orig = "Alternative Corporate Name"
+
+[SideRecommendations]
+AllFields[] = SideFacets:Results:CheckboxFacets
+
+[TopRecommendations]
+AllFields[] = SwitchTab
diff --git a/themes/fid_bbi/languages/de.ini b/themes/fid_bbi/languages/de.ini
index 315c09a272f..5a4b23f4a82 100644
--- a/themes/fid_bbi/languages/de.ini
+++ b/themes/fid_bbi/languages/de.ini
@@ -105,3 +105,13 @@ bbi_twitter_account = "https://twitter.com/FID_BBI"
 
 ; #20187 genderization
 Change Profile Data = "Kontodaten ändern"
+
+; #20242
+Releases = Neuerscheinungen
+switchtab_info_releases = Diese Liste enthält nur Neuerscheinungen.
+switchtab_with_licenses = Sie können diese Werke kostenlos zur Leihe bestellen. Das Buch wird direkt vom Buchhändler an Sie geschickt. – Die Kosten übernimmt der FID BBI.
+switchtab_not_logged_in = Diese Werke können Forschende an deutschen Instituten (Nutzer*innengruppe 1) kostenlos zur Leihe bestellen. <br/>Noch keinen Account? <a href="%%registerUrl%%">Jetzt registrieren</a>.
+switchtab_without_licenses = Diese Werke können Forschende an deutschen Instituten (Nutzer*innengruppe 1) kostenlos zur Leihe bestellen.
+search_in_tab_releases = In Neuerscheinungen suchen
+search_in_tab_all = Im gesamten Katalog nach "%%lookfor%%" suchen
+search_everywhere = Neue Recherche im gesamten Katalog
\ No newline at end of file
diff --git a/themes/fid_bbi/languages/en.ini b/themes/fid_bbi/languages/en.ini
index 67ef1e93049..e2a0912377f 100644
--- a/themes/fid_bbi/languages/en.ini
+++ b/themes/fid_bbi/languages/en.ini
@@ -96,3 +96,13 @@ dbis_access_2 = "accessible via a single user license at your home library"
 bbi_blog_url = "https://www.fid-bbi.de/blog/"
 kvk_url = https://kvk.bibliothek.kit.edu/index.html?kataloge=K10PLUS&kataloge=BVB&kataloge=NRW&kataloge=HEBIS&kataloge=KOBV_SOLR&kataloge=DDB&kataloge=STABI_BERLIN&kataloge=TIB&kataloge=VD16&kataloge=VD17&kataloge=VD18&kataloge=BIBOPAC&kataloge=LBOE&kataloge=OENB&kataloge=ABES&kataloge=BASE&kataloge=DART_EUROPE&kataloge=DIGIBIB&kataloge=DFG_EBOOKS&kataloge=DFG_AUFSAETZE&kataloge=DOABOOKS&kataloge=DOAJ&kataloge=EROMM_WEBSEARCH&kataloge=EUROPEANA&kataloge=GOOGLE_BOOKS&kataloge=KUNST_HATHI&kataloge=ARCHIVE_ORG&kataloge=OAPEN&kataloge=ZVDD&kataloge=BHL&lang=en&digitalOnly=1&embedFulltitle=0&newTab=0
 bbi_twitter_account = "https://twitter.com/FID_BBI"
+
+; #20242
+Releases = "New Publications"
+switchtab_info_releases = This list only contains new publications
+switchtab_with_licenses = You can order these new publications for loan free of charge. The book will be sent to you directly from the bookseller. - The costs are covered by the FID BBI.
+switchtab_not_logged_in = Researchers at German institutes (user group 1) can order these publications for loan free of charge.<br/>No account yet? <a href="%%registerUrl%%">Register now.</a>
+switchtab_without_licenses = Researchers at German institutes (user group 1) can order these publications for loan free of charge.
+search_in_tab_releases = Search in new publications
+search_in_tab_all = "Search entire catalog for "%%lookfor%%""
+search_everywhere = New search in entire catalog
diff --git a/themes/fid_bbi/scss/blocks/search.scss b/themes/fid_bbi/scss/blocks/search.scss
index 49495611674..639a4eb9c37 100644
--- a/themes/fid_bbi/scss/blocks/search.scss
+++ b/themes/fid_bbi/scss/blocks/search.scss
@@ -156,6 +156,20 @@
   }
 }
 
+.switchtab-links {
+  li {
+    margin: g(.25);
+
+    &::before {
+      content: none;
+    }
+  }
+
+  .icon {
+    color: currentColor;
+  }
+}
+
 // Only used on default layout
 .search-menu {
   margin: g() 0 0;
diff --git a/themes/fid_bbi/templates/Recommend/SwitchTab.phtml b/themes/fid_bbi/templates/Recommend/SwitchTab.phtml
new file mode 100644
index 00000000000..01b0ed946b4
--- /dev/null
+++ b/themes/fid_bbi/templates/Recommend/SwitchTab.phtml
@@ -0,0 +1,52 @@
+<?php
+  $tabConfig = is_object($this->params)
+    ? $this->searchTabs()->getTabConfigForParams($this->params) : [];
+  $activeTab = $this->recommend->getActiveTab($tabConfig)["label"] ?? "All";
+  if (count($tabConfig) > 0 && $activeTab !== "All"): ?>
+<!-- fid_bbi: Recommend - SwitchTabs -->
+  <div class="alert alert-info">
+    <?php if (count($tabConfig) > 0): ?>
+      <?=$this->transEsc('switchtab_info_'.strtolower($activeTab))?>
+      <div class="switchtab-links"><ul>
+        <li><a class="-icon" href="<?=$this->url('search-home')?>">
+          <?=$this->icon('arrow-right')?>
+          <?=$this->translate('search_everywhere')?>
+        </a></li>
+        <?php $lookfor = $this->results->getParams()->getQuery()->getString();
+          if (!empty($lookfor)): ?>
+          <?php $inactiveTabs = $this->recommend->getInactiveTabs($tabConfig); ?>
+          <?php foreach ($inactiveTabs as $tab): ?>
+            <?php if (!$tab['selected']): ?>
+              <li>
+                <a class="-icon" href="<?=$this->escapeHtmlAttr($tab['url'])?>">
+                  <?=$this->icon('arrow-right')?>
+                  <?=$this->transEsc(
+                    'search_in_tab_'.strtolower($tab['label']),
+                    [
+                      '%%lookfor%%' => $lookfor,
+                    ]
+                  ); ?>
+                </a>
+              </li>
+            <?php endif; ?>
+          <?php endforeach; ?>
+        <?php endif; ?>
+      </ul></div>
+    <?php endif; ?>
+
+    <?php if ($this->permission()->allowDisplay('fid.Acquisitions')):?>
+        <?=$this->translate('switchtab_with_licenses')?>
+    <?php elseif ($this->permission()->allowDisplay('fid.LimitedAccess')):?>
+        <?=$this->translate('switchtab_without_licenses')?>
+    <?php else: ?>
+        <?=$this->translate(
+          'switchtab_not_logged_in',
+            [
+              '%%registerUrl%%' =>
+                $this->url('myresearch-account',[],['query'=>['auth_method'=>'fid']])
+            ]
+          )?>
+    <?php endif; ?>
+  </div>
+<!-- fid_bbi: Recommend - SwitchTabs - END -->
+<?php endif; ?>
diff --git a/themes/fid_bbi/templates/Recommend/TopFacets.phtml b/themes/fid_bbi/templates/Recommend/TopFacets.phtml
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/themes/fid_bbi/templates/header.phtml b/themes/fid_bbi/templates/header.phtml
index 6c0e3173d5e..eecc5943e21 100644
--- a/themes/fid_bbi/templates/header.phtml
+++ b/themes/fid_bbi/templates/header.phtml
@@ -59,6 +59,17 @@
                     <?=$this->translate('Advanced Search')?>
                   </a>
                 </li>
+                    <?php $tabConfig = $this->searchTabs()->getTabConfig('Solr', null, null);
+                        foreach ($tabConfig['tabs'] as $tab):
+                            if ($tab['id'] !== 'Solr:main'):
+                    ?>
+                  <li>
+                  <a class="-icon" href="<?=$tab['url']?>">
+                    <?=$this->icon('arrow-right')?>
+                    <?=$this->translate($tab['label'])?>
+                  </a>
+                </li>
+                  <?php endif; endforeach;?>
               </ul>
             </div>
           <?php else: ?>
diff --git a/themes/fid_bbi/templates/layout/layout.phtml b/themes/fid_bbi/templates/layout/layout.phtml
index 118c33a1897..99ecdef2b63 100644
--- a/themes/fid_bbi/templates/layout/layout.phtml
+++ b/themes/fid_bbi/templates/layout/layout.phtml
@@ -4,18 +4,14 @@
 <!-- fid_bbi: layout - layout -->
 <?php $isHome = $this->templateDir === 'search' && $this->templateName === 'home'; ?>
 <body class="layout <?=$isHome ? '-home' : '-default'?>">
-  <?php // Set up the search box -- there are three possible cases:
-// 1. No search box was set; we should default to the normal box
-// 2. It was set to false; we should display nothing
-// 3. It is set to a custom string; we should display the provided version
-// Set up default search box if no data was provided from the template;
-// this covers case 1.  Cases 2 and 3 are then covered by logic below.
+  <?php
     if (
         $this->templateName === 'advanced'
         || $this->templateDir === 'records'
         || !isset($this->layout()->searchbox)
     ) {
-      $this->layout()->searchbox = $this->render('search/searchbox.phtml');
+      // reset searchbox in case we did leave the results page
+      $this->layout()->searchbox = $this->render('search/searchbox.phtml', ['ignoreHiddenFilterMemory' => true]);
     }
   ?>
   <?php // Add landmark role to avoid 'all content must be inside landmarks error', CK ?>
diff --git a/themes/fid_bbi/templates/search/results.phtml b/themes/fid_bbi/templates/search/results.phtml
index 70b8d0fc5f3..01a8e3c463a 100644
--- a/themes/fid_bbi/templates/search/results.phtml
+++ b/themes/fid_bbi/templates/search/results.phtml
@@ -77,6 +77,10 @@ $this->headScript()->appendFile("check_save_statuses.js");
 
     <?=$this->flashmessages()?>
 
+    <?php foreach ($top = $this->results->getRecommendations('top') as $index => $current): ?>
+      <?=$this->recommend($current, 'top', $index)?>
+    <?php endforeach; ?>
+
     <div class="results-header">
       <?php if ($this->params->getSearchType() === 'advanced'):?>
         <?=$this->render('search/advanced-search-info.phtml');?>
@@ -102,10 +106,6 @@ $this->headScript()->appendFile("check_save_statuses.js");
         <p class="alert alert-danger"><?=$this->transEsc('nohit_parse_error')?></p>
       <?php endif; ?>
 
-      <?php foreach (($top = $this->results->getRecommendations('top')) as $index => $current): ?>
-        <?=$this->recommend($current, 'top', $index)?>
-      <?php endforeach; ?>
-
       <?php foreach ($this->results->getRecommendations('noresults') as $index => $current): ?>
         <?php if (!in_array($current, $top)): ?>
           <?=$this->recommend($current, 'noresults', $index)?>
@@ -208,10 +208,6 @@ $this->headScript()->appendFile("check_save_statuses.js");
             <?php endif; ?>
           <?php endif; ?>
         </div>
-
-        <?php foreach ($this->results->getRecommendations('top') as $index => $current): ?>
-          <?=$this->recommend($current, 'top', $index)?>
-        <?php endforeach; ?>
       <?php endif; ?>
 
       <?php foreach ($this->results->getRecommendations('side') as $index => $current): ?>
diff --git a/themes/fid_bbi/templates/search/searchbox.phtml b/themes/fid_bbi/templates/search/searchbox.phtml
index b5c3baa15cd..bfa917d964c 100644
--- a/themes/fid_bbi/templates/search/searchbox.phtml
+++ b/themes/fid_bbi/templates/search/searchbox.phtml
@@ -51,8 +51,6 @@ $tabConfig = $this->searchTabs()->getTabConfig(
 );
 ?>
 
-<?php // TODO: Use longer placeholder on large screen, like in the mockup? ?>
-<?php $placeholder = $this->translate('search_terms'); ?>
 <form
   action="<?=$this->url($basicSearch)?>"
   autocomplete="off"
@@ -66,8 +64,12 @@ $tabConfig = $this->searchTabs()->getTabConfig(
     isset($this->filterList) && is_array($this->filterList) ? $this->filterList : [],
     isset($this->checkboxFilters) && is_array($this->checkboxFilters) ? $this->checkboxFilters : []
   );
-  $filterActive = !empty($filterDetails)
-    || (($tabConfig['tabs'][0]['label'] ?? '') !== ($tabConfig['selected']['label'] ?? ''));
+  $filterActive = !empty($filterDetails);
+  $searchTab = $tabConfig['selected']['label'] ?? '';
+  $searchTabsActive = $searchTab !== ($tabConfig['tabs'][0]['label'] ?? '');
+  $placeholder = $searchTabsActive
+      ? $this->translate('search_in_tab_'.strtolower($searchTab))
+      : $this->translate('search_terms');
   ?>
 
   <input
@@ -132,6 +134,12 @@ $tabConfig = $this->searchTabs()->getTabConfig(
     </div>
   <?php endif; ?>
 
+  <?php foreach ($hiddenFilters as $key => $filter): ?>
+    <?php foreach ($filter as $value): ?>
+      <input type="hidden" name="hiddenFilters[]" value="<?=$this->escapeHtmlAttr($key) . ':' . $this->escapeHtmlAttr($value)?>" />
+    <?php endforeach; ?>
+  <?php endforeach; ?>
+
   <button class="search-submit" type="submit">
     <?=$this->icon('magnifier')?>
     <?=$this->transEsc('Find')?>
-- 
GitLab