From 47f98302d319b681cac3eba3133ed1f638d65aad Mon Sep 17 00:00:00 2001
From: jhaller <jan.haller@math.uzh.ch>
Date: Fri, 12 Jan 2024 10:15:52 +0100
Subject: [PATCH] Refs #17498 - New default tooltips (No previous/next record
 available.). If r='last/first record' or r=0, nextBtn/previousBtn are
 rendered without text and default tooltip. Also, if r=0 no currentBtn is
 rendered.

---
 extension/Classes/Core/BuildFormBootstrap.php | 12 ++++++++----
 extension/Classes/Core/Constants.php          |  4 ++--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/extension/Classes/Core/BuildFormBootstrap.php b/extension/Classes/Core/BuildFormBootstrap.php
index da29ad8b0..9c46556f9 100644
--- a/extension/Classes/Core/BuildFormBootstrap.php
+++ b/extension/Classes/Core/BuildFormBootstrap.php
@@ -1002,8 +1002,6 @@ class BuildFormBootstrap extends AbstractBuildForm {
         $firstRecordFlag = ($currentRecordIndex === array_key_first($recordIdArr));
         $lastRecordFlag = ($currentRecordIndex === array_key_last($recordIdArr));
 
-        $btnCurrent = $btnPreviousNextSqlArr[$currentRecordIndex][F_BTN_PREVIOUS_NEXT_SQL_BTN_CURRENT] ?? '';
-
         // r=0 disables both buttons
         if (!$currentRecordId) {
             $firstRecordFlag = true;
@@ -1011,6 +1009,8 @@ class BuildFormBootstrap extends AbstractBuildForm {
             $btnPreviousNextLoopFlag = false;
         }
 
+        $btnCurrent = (!$currentRecordId) ? null : $btnPreviousNextSqlArr[$currentRecordIndex][F_BTN_PREVIOUS_NEXT_SQL_BTN_CURRENT] ?? '';
+
         // Keyword btnPrevious is used
         if ($btnPreviousGiven) {
             $btnPrevious = $btnPreviousNextSqlArr[$currentRecordIndex - 1][F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS] ?? null;
@@ -1019,8 +1019,10 @@ class BuildFormBootstrap extends AbstractBuildForm {
             // btnPreviousNextLoop is not enabled and first record is currently selected
             // Button should be disabled
             if (!$btnPreviousNextLoopFlag && $firstRecordFlag) {
-                $btnPreviousArr = Token::explodeTokenString($btnPreviousNextSqlArr[$currentRecordIndex][F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS]);
+                $btnPreviousArr = Token::explodeTokenString($btnPreviousNextSqlArr[array_key_last($btnPreviousNextSqlArr)][F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS]);
                 $btnPreviousArr['r'] = '3';
+                $btnPreviousArr['t'] = '';
+                $btnPreviousArr['o'] = F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS_TOOLTIP;
                 $btnPrevious = KeyValueStringParser::unparse($btnPreviousArr, PARAM_KEY_VALUE_DELIMITER, PARAM_DELIMITER);
             }
 
@@ -1046,8 +1048,10 @@ class BuildFormBootstrap extends AbstractBuildForm {
             // btnPreviousNextLoop is not enabled and last record is currently selected
             // Button should be disabled
             if (!$btnPreviousNextLoopFlag && $lastRecordFlag) {
-                $btnPreviousArr = Token::explodeTokenString($btnPreviousNextSqlArr[$currentRecordIndex][F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT]);
+                $btnPreviousArr = Token::explodeTokenString($btnPreviousNextSqlArr[array_key_first($recordIdArr)][F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT]);
                 $btnPreviousArr['r'] = '3';
+                $btnPreviousArr['t'] = '';
+                $btnPreviousArr['o'] = F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT_TOOLTIP;
                 $btnNext = KeyValueStringParser::unparse($btnPreviousArr, PARAM_KEY_VALUE_DELIMITER, PARAM_DELIMITER);
             }
 
diff --git a/extension/Classes/Core/Constants.php b/extension/Classes/Core/Constants.php
index cfa11c60d..084df1f0a 100644
--- a/extension/Classes/Core/Constants.php
+++ b/extension/Classes/Core/Constants.php
@@ -1242,8 +1242,8 @@ const F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT = 'btnNext';
 const F_BTN_PREVIOUS_NEXT_SQL_BTN_CURRENT = 'btnCurrent';
 const F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS_GLYPHICON = 'glyphicon glyphicon-arrow-left';
 const F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT_GLYPHICON = 'glyphicon glyphicon-arrow-right';
-const F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS_TOOLTIP = 'The previous record can not be selected.';
-const F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT_TOOLTIP = 'The next record can not be selected.';
+const F_BTN_PREVIOUS_NEXT_SQL_BTN_PREVIOUS_TOOLTIP = 'No previous record available.';
+const F_BTN_PREVIOUS_NEXT_SQL_BTN_NEXT_TOOLTIP = 'No next record available.';
 
 // Form Columns: Only in form file
 const F_FILE_FORM_ELEMENT = 'FormElement_ff'; // Key for FormElements array saved in Form File
-- 
GitLab