From 4982c20455e58979905f09c2df0fdf050c2b3660 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuli=20Sillanp=C3=A4=C3=A4?=
 <samuli.sillanpaa@helsinki.fi>
Date: Fri, 20 Dec 2019 13:42:30 +0200
Subject: [PATCH] FeedbackForms: handle redirect of logged-out users in
 controller. (#1528)

- Previous version used data-lightbox-onclose and did not work with external
login method (for example Shibboleth).
---
 languages/ar.ini                              |  1 -
 languages/bn.ini                              |  1 -
 languages/ca.ini                              |  1 -
 languages/cs.ini                              |  1 -
 languages/cy.ini                              |  1 -
 languages/da.ini                              |  1 -
 languages/de.ini                              |  1 -
 languages/el.ini                              |  1 -
 languages/en.ini                              |  1 -
 languages/es.ini                              |  1 -
 languages/eu.ini                              |  1 -
 languages/fi.ini                              |  1 -
 languages/fr.ini                              |  1 -
 languages/ga.ini                              |  1 -
 languages/he.ini                              |  1 -
 languages/hi.ini                              |  1 -
 languages/hr.ini                              |  1 -
 languages/ja.ini                              |  1 -
 languages/nl.ini                              |  1 -
 languages/pl.ini                              |  1 -
 languages/pt-br.ini                           |  1 -
 languages/pt.ini                              |  1 -
 languages/ru.ini                              |  1 -
 languages/sl.ini                              |  1 -
 languages/sv.ini                              |  1 -
 languages/tr.ini                              |  1 -
 languages/vi.ini                              |  1 -
 languages/zh-cn.ini                           |  1 -
 languages/zh.ini                              |  1 -
 .../VuFind/Controller/FeedbackController.php  |  4 ++
 .../bootstrap3/templates/feedback/form.phtml  | 61 ++++++++-----------
 31 files changed, 31 insertions(+), 63 deletions(-)

diff --git a/languages/ar.ini b/languages/ar.ini
index 63675a28d09..46971a7a692 100644
--- a/languages/ar.ini
+++ b/languages/ar.ini
@@ -407,7 +407,6 @@ Favorites = "المفضلة"
 Fee = "رسم"
 Feedback = "تغذية راجعة"
 feedback_email = "البريد الالكتروني"
-feedback_login_required = "يجب تسجيل دخولك أولا"
 feedback_name = "الاسم"
 Field of activity = "حقل النشاط"
 File Description = "وصف الملف"
diff --git a/languages/bn.ini b/languages/bn.ini
index 523c14246c6..2aaa650d658 100644
--- a/languages/bn.ini
+++ b/languages/bn.ini
@@ -390,7 +390,6 @@ Favorites = "উপাদানটি সংরক্ষন করা হয়ে
 Fee = "খরচ"
 Feedback = "প্রতিক্রিয়া পাঠান"
 feedback_email = "ই-মেইল"
-feedback_login_required = "আপনি আগে লগইন করুন"
 feedback_name = "নাম"
 Field of activity = "বিষয় দক্ষতা"
 File Description = "ফাইলের বিবরণ"
diff --git a/languages/ca.ini b/languages/ca.ini
index 64a88d2eef6..de6a7104f61 100644
--- a/languages/ca.ini
+++ b/languages/ca.ini
@@ -418,7 +418,6 @@ Favorites = "Favorits"
 Fee = "Quota"
 Feedback = "Feedback"
 feedback_email = "Correu electrònic"
-feedback_login_required = "Abans heu d’iniciar sessió."
 feedback_name = "Nom"
 Field of activity = "Camp d'activitat"
 File Description = "Descripció del fitxer"
diff --git a/languages/cs.ini b/languages/cs.ini
index 240d9826275..871ace8fbaf 100755
--- a/languages/cs.ini
+++ b/languages/cs.ini
@@ -405,7 +405,6 @@ Favorites = "Oblíbené"
 Fee = "Poplatek"
 Feedback = "Váš názor"
 feedback_email = "Poslat emailem"
-feedback_login_required = "Nejprve se musíte přihlásit."
 feedback_name = "Jméno"
 Field of activity = "Oblast působení"
 File Description = "Popis souboru"
diff --git a/languages/cy.ini b/languages/cy.ini
index de52cb3d62f..d1e6c6d88d2 100644
--- a/languages/cy.ini
+++ b/languages/cy.ini
@@ -386,7 +386,6 @@ Favorites = "Ffefrynnau"
 Fee = "Fee"
 Feedback = "Adborth"
 feedback_email = "E-bost"
-feedback_login_required = "Rhaid i chi fewngofnodi yn gyntaf."
 feedback_name = "Enw"
 Field of activity = "Maes gweithgarwch"
 File Description = "Disgrifiad Ffeil"
diff --git a/languages/da.ini b/languages/da.ini
index b4b67392969..e5ad0de5445 100644
--- a/languages/da.ini
+++ b/languages/da.ini
@@ -253,7 +253,6 @@ fav_list_delete_fail = "Vi beklager. Der er sket en fejl. Den liste blev ikke sl
 Favorites = "Favoritter"
 Fee = "Betaling"
 feedback_email = "Email"
-feedback_login_required = "Du skal først være logget ind."
 Find = "Find"
 Find More = "Find flere"
 Find New Items = "Find nye værker”"
diff --git a/languages/de.ini b/languages/de.ini
index e2576d21267..f35511c4e91 100644
--- a/languages/de.ini
+++ b/languages/de.ini
@@ -406,7 +406,6 @@ Favorites = "Favoriten"
 Fee = "Gebühr"
 Feedback = "Feedback"
 feedback_email = "E-Mail"
-feedback_login_required = "Bitte loggen Sie sich zuerst ein."
 feedback_name = "Name"
 Field of activity = "Tätigkeitsbereich"
 File Description = "Dateibeschreibung"
diff --git a/languages/el.ini b/languages/el.ini
index ebfb5e34f57..a5697b6161e 100644
--- a/languages/el.ini
+++ b/languages/el.ini
@@ -407,7 +407,6 @@ Favorites = "Αγαπημένα"
 Fee = "Χρέωση"
 Feedback = "Σχόλιά"
 feedback_email = "Ηλεκτρονικό ταχυδρομείο"
-feedback_login_required = "Πρέπει πρώτα να συνδεθείτε."
 feedback_name = "Όνομα"
 Field of activity = "Πεδίο δραστηριότητας"
 File Description = "Περιγραφή αρχείου"
diff --git a/languages/en.ini b/languages/en.ini
index 08d8dff21c2..defc6d49c91 100644
--- a/languages/en.ini
+++ b/languages/en.ini
@@ -406,7 +406,6 @@ Favorites = "Saved Items"
 Fee = "Fee"
 Feedback = "Feedback"
 feedback_email = "Email"
-feedback_login_required = "You must be logged in first."
 feedback_name = "Name"
 Field of activity = "Field of activity"
 File Description = "File Description"
diff --git a/languages/es.ini b/languages/es.ini
index 02c446e07e6..0e7b46ee5d9 100644
--- a/languages/es.ini
+++ b/languages/es.ini
@@ -389,7 +389,6 @@ Favorites = "Favoritos"
 Fee = "Cuota"
 Feedback = "Comentarios"
 feedback_email = "Correo Electrónico"
-feedback_login_required = "Primero debe ingresar al sistema."
 feedback_name = "Nombre"
 Field of activity = "Campo de actividad"
 File Description = "Descripción del Archivo"
diff --git a/languages/eu.ini b/languages/eu.ini
index d4674cad9c3..93e0775ad46 100644
--- a/languages/eu.ini
+++ b/languages/eu.ini
@@ -1006,7 +1006,6 @@ Favorites = "Gogokoenak"
 Fee = "Kuota"
 Feedback = "Feedback"
 feedback_email = "Posta elektronikoa"
-feedback_login_required = "Lehenik saioa ireki behar duzu."
 feedback_name = "Feedback-Izena"
 Field of activity = "Jarduera-eremua"
 File Description = "Fitxategi deskribapena"
diff --git a/languages/fi.ini b/languages/fi.ini
index 6f9b6c18d21..3e5924d7371 100644
--- a/languages/fi.ini
+++ b/languages/fi.ini
@@ -410,7 +410,6 @@ Favorites = "Suosikit"
 Fee = "Maksu"
 Feedback = "Palaute"
 feedback_email = "Sähköposti"
-feedback_login_required = "Kirjaudu sisään ensin."
 feedback_name = "Nimi"
 Field of activity = "Toimiala"
 File Description = "Tiedoston kuvaus"
diff --git a/languages/fr.ini b/languages/fr.ini
index b9af6b69cc6..3b139cde0b5 100644
--- a/languages/fr.ini
+++ b/languages/fr.ini
@@ -388,7 +388,6 @@ Favorites = "Favoris"
 Fee = "Frais"
 Feedback = "Remarques"
 feedback_email = "Courriel"
-feedback_login_required = "Il faut se connecter d'abord."
 feedback_name = "Nom"
 Field of activity = "Domaine d'activité"
 File Description = "Description du fichier"
diff --git a/languages/ga.ini b/languages/ga.ini
index eff96c5cafc..f11df41ca85 100644
--- a/languages/ga.ini
+++ b/languages/ga.ini
@@ -240,7 +240,6 @@ fav_list_delete_fail = "Ár leithscéal, ach tharla earráid. Níor scriosadh do
 Favorites = "Ceanáin"
 Fee = "Táille"
 feedback_email = "Ríomhphost"
-feedback_login_required = "Ní mór a bheith logáilte amach i gcónaí."
 Find = "Aimsigh"
 Find More = "Aimsigh Tuilleadh"
 Find New Items = "Aimsigh Míreanna Nua"
diff --git a/languages/he.ini b/languages/he.ini
index c4f5bb13cf0..e62d08681a9 100644
--- a/languages/he.ini
+++ b/languages/he.ini
@@ -275,7 +275,6 @@ fav_list_delete_fail = "מצטערים. ארעה שגיאה. הרשימה שלך
 Favorites = "מועדפים"
 Fee = "דמי שימוש"
 feedback_email = "דואל"
-feedback_login_required = "צריך להיות מחובר מראש"
 filter_wildcard = "כל אחד"
 Find = "מצא"
 Find More = "מצא עוד"
diff --git a/languages/hi.ini b/languages/hi.ini
index b400653c7d4..793d7867dc0 100644
--- a/languages/hi.ini
+++ b/languages/hi.ini
@@ -389,7 +389,6 @@ Favorites = "बची हुई वस्तुएँ"
 Fee = "शुल्क"
 Feedback = "प्रतिपुष्टि"
 feedback_email = "ईमेल"
-feedback_login_required = "आपको पहले लॉग इन होना चाहिए"
 feedback_name = "नाम"
 Field of activity = "गतिविधि का क्षेत्र"
 File Description = "फाइल विवरण"
diff --git a/languages/hr.ini b/languages/hr.ini
index 8fcc510bbc2..c9976e238b4 100644
--- a/languages/hr.ini
+++ b/languages/hr.ini
@@ -406,7 +406,6 @@ Favorites = "Spremljena djela"
 Fee = "Pristojba"
 Feedback = "Povratna informacija"
 feedback_email = "Pošalji e-poštom"
-feedback_login_required = "Moraš se najprije prijaviti."
 feedback_name = "Ime"
 Field of activity = "Područje djelatnosti"
 File Description = "Opis datoteke"
diff --git a/languages/ja.ini b/languages/ja.ini
index 72f5de56501..f66415934a0 100644
--- a/languages/ja.ini
+++ b/languages/ja.ini
@@ -407,7 +407,6 @@ Favorites = "お気に入り"
 Fee = "料金"
 Feedback = "ご意見"
 feedback_email = "メール"
-feedback_login_required = "この操作にはログインが必要です"
 feedback_name = "お名前"
 Field of activity = "アクテイビティのフイールド"
 File Description = "ファイル記述"
diff --git a/languages/nl.ini b/languages/nl.ini
index e431fd55915..c3daa9b123b 100644
--- a/languages/nl.ini
+++ b/languages/nl.ini
@@ -389,7 +389,6 @@ Favorites = "Favorieten"
 Fee = "Bijdrage"
 Feedback = "Feedback"
 feedback_email = "Email"
-feedback_login_required = "Je moet eerst inloggen."
 feedback_name = "Naam"
 Field of activity = "Werkterrein"
 File Description = "Bestandsbeschrijving"
diff --git a/languages/pl.ini b/languages/pl.ini
index 771be5f08cb..ededdb10487 100644
--- a/languages/pl.ini
+++ b/languages/pl.ini
@@ -448,7 +448,6 @@ Favorites = "Ulubione książki"
 Fee = "Opłata"
 Feedback = "Feedback"
 feedback_email = "Email"
-feedback_login_required = "Najpierw siÄ™ zaloguj."
 feedback_name = "Nazwisko"
 Field of activity = "Zakres działalności"
 File Description = "Opis pliku"
diff --git a/languages/pt-br.ini b/languages/pt-br.ini
index 36661755839..47ea19f4d0c 100644
--- a/languages/pt-br.ini
+++ b/languages/pt-br.ini
@@ -406,7 +406,6 @@ Favorites = "Itens Guardados"
 Fee = "Multas"
 Feedback = "Comentário"
 feedback_email = "Email"
-feedback_login_required = "Você deve entrar na sua conta antes."
 feedback_name = "Nome"
 Field of activity = "Campo de atividade"
 File Description = "Descrição de arquivo"
diff --git a/languages/pt.ini b/languages/pt.ini
index ead2725652a..2532222d5a3 100644
--- a/languages/pt.ini
+++ b/languages/pt.ini
@@ -335,7 +335,6 @@ Favorites = "Favoritos"
 Fee = "Multas"
 Feedback = "Comentário"
 feedback_email = "Email"
-feedback_login_required = "Você deve entrar na sua conta antes."
 feedback_name = "Nome"
 Filter = "Filtro"
 filter_tags = "Filtro de Trags"
diff --git a/languages/ru.ini b/languages/ru.ini
index 38a94e1542f..ea53b1ffa8f 100644
--- a/languages/ru.ini
+++ b/languages/ru.ini
@@ -366,7 +366,6 @@ Favorites = "Избранное"
 Fee = "взнос"
 Feedback = "обратной связи"
 feedback_email = "Email"
-feedback_login_required = "Сначала войдите в систему."
 feedback_name = "Имя"
 File Description = "Описание файла"
 Filter = "Фильтр"
diff --git a/languages/sl.ini b/languages/sl.ini
index 907889adfa6..22fd6f2ba65 100644
--- a/languages/sl.ini
+++ b/languages/sl.ini
@@ -291,7 +291,6 @@ Favorites = "Priljubljene"
 Fee = "ÄŒlanarina/zamudnina"
 Feedback = "Pišite nam"
 feedback_email = "Email"
-feedback_login_required = "Najprej se morate prijaviti."
 feedback_name = "Ime"
 Filter = "Filter"
 filter_tags = "Filter oznake"
diff --git a/languages/sv.ini b/languages/sv.ini
index 826fc1fba86..c57b6371790 100644
--- a/languages/sv.ini
+++ b/languages/sv.ini
@@ -404,7 +404,6 @@ Favorites = "Favoriter"
 Fee = "Avgift"
 Feedback = "Respons"
 feedback_email = "E-post"
-feedback_login_required = "Du måste logga in först."
 feedback_name = "Ditt namn"
 Field of activity = "Verksamhetsområde"
 File Description = "Filbeskrivning"
diff --git a/languages/tr.ini b/languages/tr.ini
index e88f1c97648..5977d7e7de6 100644
--- a/languages/tr.ini
+++ b/languages/tr.ini
@@ -417,7 +417,6 @@ Favorites = "Favorilerim"
 Fee = "Gecikme Cezası"
 Feedback = "Görüsleriniz"
 feedback_email = "Eposta"
-feedback_login_required = "İlk önce giriş yapmalısınız."
 feedback_name = "Adiniz"
 Field of activity = "Aktivite Alanı"
 File Description = "Dosya tanımı"
diff --git a/languages/vi.ini b/languages/vi.ini
index bd61f9fa6db..81c66d0d6e2 100644
--- a/languages/vi.ini
+++ b/languages/vi.ini
@@ -388,7 +388,6 @@ Favorites = "Các mục đã lưu"
 Fee = "Học phí"
 Feedback = "Phản hồi"
 feedback_email = "Email"
-feedback_login_required = "Bạn phải đăng nhập trước."
 feedback_name = "Tên"
 Field of activity = "Lĩnh vực hoạt động"
 File Description = "Mô tả tập tin"
diff --git a/languages/zh-cn.ini b/languages/zh-cn.ini
index bbd456e3e64..c34d7c13ad4 100644
--- a/languages/zh-cn.ini
+++ b/languages/zh-cn.ini
@@ -240,7 +240,6 @@ fav_list_delete_fail = "很抱歉,发生错误. 您的列表没被删除."
 Favorites = "最爱"
 Fee = "è´¹"
 feedback_email = "电子邮件"
-feedback_login_required = "您必须先登录"
 Find = "检索"
 Find More = "查找更多"
 Find New Items = "寻找新项目"
diff --git a/languages/zh.ini b/languages/zh.ini
index 4079b9147f6..258bf7edbd0 100644
--- a/languages/zh.ini
+++ b/languages/zh.ini
@@ -240,7 +240,6 @@ fav_list_delete_fail = "很抱歉,發生錯誤. 您的列表沒被刪除."
 Favorites = "最愛"
 Fee = "è²»"
 feedback_email = "電子郵件"
-feedback_login_required = "您必須先登錄"
 Find = "檢索"
 Find More = "查找更多"
 Find New Items = "尋找新項目"
diff --git a/module/VuFind/src/VuFind/Controller/FeedbackController.php b/module/VuFind/src/VuFind/Controller/FeedbackController.php
index cc944dc4544..21880527c2e 100644
--- a/module/VuFind/src/VuFind/Controller/FeedbackController.php
+++ b/module/VuFind/src/VuFind/Controller/FeedbackController.php
@@ -61,6 +61,10 @@ class FeedbackController extends AbstractBase
             throw new \VuFind\Exception\Forbidden("Form '$formId' is disabled");
         }
 
+        if (!$user && $form->showOnlyForLoggedUsers()) {
+            return $this->forceLogin();
+        }
+
         $view = $this->createViewModel(compact('form', 'formId', 'user'));
         $view->useRecaptcha
             = $this->recaptcha()->active('feedback') && $form->useCaptcha();
diff --git a/themes/bootstrap3/templates/feedback/form.phtml b/themes/bootstrap3/templates/feedback/form.phtml
index 5f427435539..2878cc3ffd2 100644
--- a/themes/bootstrap3/templates/feedback/form.phtml
+++ b/themes/bootstrap3/templates/feedback/form.phtml
@@ -24,42 +24,36 @@
   <?php endif; ?>
   <?=$this->flashmessages()?>
 
-  <?php if ($form->showOnlyForLoggedUsers() && !$this->user): ?>
-     <div class="form-group">
-       <p><?=$this->translate('feedback_login_required')?></p>
-       <a href="<?=$this->url('myresearch-userlogin') ?>" class="btn btn-primary" data-lightbox title="Login"><i class="fa fa-sign-in" aria-hidden="true" data-lightbox-onclose="window.location.href='<?=$this->escapeHtmlAttr($formUrl) ?>'"></i> <?=$this->transEsc("Login") ?></a>
-    </div>  
-  <?php else: ?>
-    <?= $this->form()->openTag($form); ?>
-    <?php if ($helpPre): ?>
-    <div class="form-group">
-      <div class="form-info pre">
-        <?=$helpPre?>
-      </div>
+  <?= $this->form()->openTag($form); ?>
+  <?php if ($helpPre): ?>
+  <div class="form-group">
+    <div class="form-info pre">
+      <?=$helpPre?>
     </div>
-    <?php endif ?>
+  </div>
+  <?php endif ?>
 
-    <?php $currentGroup = null; ?>
-    <?php foreach($form->getElements() as $el): ?>
-      <?php
-      $formElement = $form->get($el['name']);
+  <?php $currentGroup = null; ?>
+  <?php foreach($form->getElements() as $el): ?>
+    <?php
+    $formElement = $form->get($el['name']);
 
-      // Group form elements into field sets
-      $handleGroup = $group = null;
-      if (isset($el['group']) && !empty($el['group'])) {
-          $group = $el['group'];
-      }
-      if ($group && $currentGroup === null) {
-          $handleGroup = 'open';
-          $currentGroup = $group;
-      } elseif ($currentGroup && !$group) {
-          $handleGroup = 'close';
-          $currentGroup = null;
-      } elseif ($currentGroup !== $group) {
-          $handleGroup = 'openAndClose';
-          $currentGroup = $group;
-      }
-      ?>
+    // Group form elements into field sets
+    $handleGroup = $group = null;
+    if (isset($el['group']) && !empty($el['group'])) {
+        $group = $el['group'];
+    }
+    if ($group && $currentGroup === null) {
+        $handleGroup = 'open';
+        $currentGroup = $group;
+    } elseif ($currentGroup && !$group) {
+        $handleGroup = 'close';
+        $currentGroup = null;
+    } elseif ($currentGroup !== $group) {
+        $handleGroup = 'openAndClose';
+        $currentGroup = $group;
+    }
+    ?>
 
     <?php if (in_array($handleGroup, ['close', 'openAndClose'])): ?>
       </div>
@@ -96,5 +90,4 @@
     </div>
   <?php endforeach ?>
   <?= $this->form()->closeTag() ?>
-  <?php endif ?>
 <?php if (!$this->inLightbox): ?></div><?php endif; ?>
-- 
GitLab