[BUGFIX] Respect TSconfig option showHistory 90/51090/7
authorTymoteusz Motylewski <t.motylewski@gmail.com>
Wed, 7 Feb 2018 11:02:22 +0000 (12:02 +0100)
committerTymoteusz Motylewski <t.motylewski@gmail.com>
Thu, 8 Feb 2018 18:17:02 +0000 (19:17 +0100)
The TSconfig `options.showHistory` is not respected inside the core.
Add checks for list view and context menu.

Inside EditDocumentController the "Record History"
button is being rendered twice but the TSconfig
condition is only checked once.

Resolves: #79128
Releases: master, 8.7
Change-Id: Ifa884be5882772e8c267a7eb8036c53cf987bcfb
Reviewed-on: https://review.typo3.org/51090
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Tymoteusz Motylewski <t.motylewski@gmail.com>
Tested-by: Tymoteusz Motylewski <t.motylewski@gmail.com>
typo3/sysext/backend/Classes/ContextMenu/ItemProviders/RecordProvider.php
typo3/sysext/backend/Classes/Controller/EditDocumentController.php
typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php

index b369351..dde8349 100644 (file)
@@ -459,7 +459,9 @@ class RecordProvider extends AbstractProvider
      */
     protected function canShowHistory(): bool
     {
-        return true;
+        $showHistoryTS = $this->backendUser->getTSConfig('options.showHistory');
+        $showHistory = (bool)trim($showHistoryTS['properties'][$this->table] ?? $showHistoryTS['value'] ?? '1');
+        return $showHistory;
     }
 
     /**
index cf11498..c5e87b2 100644 (file)
@@ -1310,56 +1310,56 @@ class EditDocumentController
                     $buttonBar->addButton($deleteButton, ButtonBar::BUTTON_POSITION_LEFT, 3);
                 }
                 // Undo:
-                $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                    ->getQueryBuilderForTable('sys_history');
-
-                $undoButtonR = $queryBuilder->select('tstamp')
-                    ->from('sys_history')
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'tablename',
-                            $queryBuilder->createNamedParameter($this->firstEl['table'], \PDO::PARAM_STR)
-                        ),
-                        $queryBuilder->expr()->eq(
-                            'recuid',
-                            $queryBuilder->createNamedParameter($this->firstEl['uid'], \PDO::PARAM_INT)
-                        )
-                    )
-                    ->orderBy('tstamp', 'DESC')
-                    ->setMaxResults(1)
-                    ->execute()
-                    ->fetch();
-
-                if ($undoButtonR !== false) {
-                    $aOnClick = 'window.location.href=' .
-                        GeneralUtility::quoteJSvalue(
-                            (string)$uriBuilder->buildUriFromRoute(
-                                'record_history',
-                                [
-                                    'element' => $this->firstEl['table'] . ':' . $this->firstEl['uid'],
-                                    'revert' => 'ALL_FIELDS',
-                                    'returnUrl' => $this->R_URI,
-                                ]
+                if ($this->getNewIconMode($this->firstEl['table'], 'showHistory')) {
+                    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
+                        ->getQueryBuilderForTable('sys_history');
+                    $undoButtonR = $queryBuilder->select('tstamp')
+                        ->from('sys_history')
+                        ->where(
+                            $queryBuilder->expr()->eq(
+                                'tablename',
+                                $queryBuilder->createNamedParameter($this->firstEl['table'], \PDO::PARAM_STR)
+                            ),
+                            $queryBuilder->expr()->eq(
+                                'recuid',
+                                $queryBuilder->createNamedParameter($this->firstEl['uid'], \PDO::PARAM_INT)
                             )
-                        ) . '; return false;';
-
-                    $undoButton = $buttonBar->makeLinkButton()
-                        ->setHref('#')
-                        ->setOnClick($aOnClick)
-                        ->setTitle(
-                            sprintf(
-                                $lang->getLL('undoLastChange'),
-                                BackendUtility::calcAge(
-                                    ($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp']),
-                                    $lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.minutesHoursDaysYears')
+                        )
+                        ->orderBy('tstamp', 'DESC')
+                        ->setMaxResults(1)
+                        ->execute()
+                        ->fetch();
+                    if ($undoButtonR !== false) {
+                        $aOnClick = 'window.location.href=' .
+                            GeneralUtility::quoteJSvalue(
+                                (string)$uriBuilder->buildUriFromRoute(
+                                    'record_history',
+                                    [
+                                        'element' => $this->firstEl['table'] . ':' . $this->firstEl['uid'],
+                                        'revert' => 'ALL_FIELDS',
+                                        'returnUrl' => $this->R_URI,
+                                    ]
+                                )
+                            ) . '; return false;';
+
+                        $undoButton = $buttonBar->makeLinkButton()
+                            ->setHref('#')
+                            ->setOnClick($aOnClick)
+                            ->setTitle(
+                                sprintf(
+                                    $lang->getLL('undoLastChange'),
+                                    BackendUtility::calcAge(
+                                        ($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp']),
+                                        $lang->sL('LLL:EXT:lang/Resources/Private/Language/locallang_core.xlf:labels.minutesHoursDaysYears')
+                                    )
                                 )
                             )
-                        )
-                        ->setIcon($this->moduleTemplate->getIconFactory()->getIcon(
-                            'actions-document-history-open',
-                            Icon::SIZE_SMALL
-                        ));
-                    $buttonBar->addButton($undoButton, ButtonBar::BUTTON_POSITION_LEFT, 3);
+                            ->setIcon($this->moduleTemplate->getIconFactory()->getIcon(
+                                'actions-document-history-open',
+                                Icon::SIZE_SMALL
+                            ));
+                        $buttonBar->addButton($undoButton, ButtonBar::BUTTON_POSITION_LEFT, 3);
+                    }
                 }
                 if ($this->getNewIconMode($this->firstEl['table'], 'showHistory')) {
                     $aOnClick = 'window.location.href=' .
index 1b3a3d9..ee2bca6 100644 (file)
@@ -1956,12 +1956,16 @@ class DatabaseRecordList
         // If the table is NOT a read-only table, then show these links:
         if ($this->isEditable($table)) {
             // "Revert" link (history/undo)
-            $moduleUrl = (string)$uriBuilder->buildUriFromRoute('record_history', ['element' => $table . ':' . $row['uid']]);
-            $onClick = 'return jumpExt(' . GeneralUtility::quoteJSvalue($moduleUrl) . ',\'#latest\');';
-            $historyAction = '<a class="btn btn-default" href="#" onclick="' . htmlspecialchars($onClick) . '" title="'
-                . htmlspecialchars($this->getLanguageService()->getLL('history')) . '">'
-                . $this->iconFactory->getIcon('actions-document-history-open', Icon::SIZE_SMALL)->render() . '</a>';
-            $this->addActionToCellGroup($cells, $historyAction, 'history');
+            $showHistoryTS = $this->getBackendUserAuthentication()->getTSConfig('options.showHistory');
+            $showHistory = (bool)trim($showHistoryTS['properties'][$table] ?? $showHistoryTS['value'] ?? '1');
+            if ($showHistory) {
+                $moduleUrl = BackendUtility::getModuleUrl('record_history', ['element' => $table . ':' . $row['uid']]);
+                $onClick = 'return jumpExt(' . GeneralUtility::quoteJSvalue($moduleUrl) . ',\'#latest\');';
+                $historyAction = '<a class="btn btn-default" href="#" onclick="' . htmlspecialchars($onClick) . '" title="'
+                    . htmlspecialchars($this->getLanguageService()->getLL('history')) . '">'
+                    . $this->iconFactory->getIcon('actions-document-history-open', Icon::SIZE_SMALL)->render() . '</a>';
+                $this->addActionToCellGroup($cells, $historyAction, 'history');
+            }
             // "Edit Perms" link:
             if ($table === 'pages' && $this->getBackendUserAuthentication()->check('modules', 'system_BeuserTxPermission') && ExtensionManagementUtility::isLoaded('beuser')) {
                 if ($isL10nOverlay) {