Skip to content

Commit

Permalink
[BUGFIX] Respect TSconfig option showHistory
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
tmotyl committed Feb 8, 2018
1 parent 41b9b1e commit ae6338f
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 54 deletions.
Expand Up @@ -459,7 +459,9 @@ protected function canShowInfo(): bool
*/
protected function canShowHistory(): bool
{
return true;
$showHistoryTS = $this->backendUser->getTSConfig('options.showHistory');
$showHistory = (bool)trim($showHistoryTS['properties'][$this->table] ?? $showHistoryTS['value'] ?? '1');
return $showHistory;
}

/**
Expand Down
94 changes: 47 additions & 47 deletions typo3/sysext/backend/Classes/Controller/EditDocumentController.php
Expand Up @@ -1310,56 +1310,56 @@ protected function getButtons()
$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=' .
Expand Down
16 changes: 10 additions & 6 deletions typo3/sysext/recordlist/Classes/RecordList/DatabaseRecordList.php
Expand Up @@ -1956,12 +1956,16 @@ public function makeControl($table, $row)
// 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) {
Expand Down

0 comments on commit ae6338f

Please sign in to comment.