Commit ae6338fe authored by Tymoteusz Motylewski's avatar Tymoteusz Motylewski
Browse files

[BUGFIX] Respect TSconfig option showHistory

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: default avatarTYPO3com <no-reply@typo3.com>
Reviewed-by: default avatarMathias Schreiber <mathias.schreiber@typo3.com>
Tested-by: default avatarMathias Schreiber <mathias.schreiber@typo3.com>
Reviewed-by: Andreas Fernandez's avatarAndreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Tymoteusz Motylewski's avatarTymoteusz Motylewski <t.motylewski@gmail.com>
Tested-by: Tymoteusz Motylewski's avatarTymoteusz Motylewski <t.motylewski@gmail.com>
parent 41b9b1e8
......@@ -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;
}
/**
......
......@@ -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=' .
......
......@@ -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) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment