[!!!][BUGFIX] Separate sys_history from sys_log db entries 95/53195/29
authorBenni Mack <benni@typo3.org>
Tue, 13 Jun 2017 05:17:18 +0000 (07:17 +0200)
committerBenni Mack <benni@typo3.org>
Fri, 8 Sep 2017 15:12:34 +0000 (17:12 +0200)
commitd047b314162ad1683f116df762384ada8b9dd5f3
treec0a74180436586484a78daf97a504905c3371b02
parentd80bab4c19c9de5893093905744b40404ddf029a
[!!!][BUGFIX] Separate sys_history from sys_log db entries

Before, the history module fetched info about "modified records" from
sys_history+the authoritive user from a coupled sys_log entry.

Info about "insert" and "delete" was fetched from sys_log solely.

However, when using a scheduled cleanup task to truncate sys_log
then all history information is useless (see bug report).

The patch introduces a new RecordHistoryStore as an abstraction
for adding history entries (currently done solely within DataHandler).

It adds some additional, necessary SQL fields to sys_history to
store all information in there and creates an update wizard
to migrate all coupled sys_history/sys_log entries to a
new sys_history entry itself.

Additionally, the whole existing "RecordHistory" class is
now only necessary for fetching the so-called ChangeLog,
for a page or a specific record, and to do rollbacks, preparing
the history records so they can be worked on.

The whole logic for fetching the GET/POST parameters is moved
into the "ElementHistoryController", everything that is only possible
via Fluid is moved from the RecordHistory object and the
ElementHistoryController into the view.

Referencing from sys_log (Log module) into sys_history is
now done the other way around, storing information about
the corresponding history entry inside sys_log.
As a side-effect, sys_log should load faster.

Abstraction basis:
- sys_history is the only source of truth about the history of a record
- sys_log contains a reference to an history entry now
(inside sys_log.log_data) to link from the backend log module
- RecordHistoryStore exists for tracking changes to records
- RecordHistory is for retrieving, compiling the history/changelog and rollbacks
- ElementHistoryController is doing PSR-7 style request/response
handling and preparing data for the view
- Fluid is handling more view functionality now, removing
the need for doing <f:format.raw> everywhere in the templates.

Sidenotes:
* Data within sys_history is now stored as JSON, not serialized anymore
* Adding/deleting was previously stored in sys_log only, is now within sys_history
* Moving records is now tracked (but not evaluated yet)
* Highlight/Snapshot functionality within the Backend Module
was removed

This functionality is built so it can also be used within Extbase
persistence and in FE in general in a future iteration.

Resolves: #55298
Resolves: #71950
Releases: master
Change-Id: I354317609099bac10c264b9932e331fa908c98be
Reviewed-on: https://review.typo3.org/53195
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Joerg Kummer <typo3@enobe.de>
Tested-by: Joerg Kummer <typo3@enobe.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
27 files changed:
typo3/sysext/backend/Classes/Controller/ContentElement/ElementHistoryController.php
typo3/sysext/backend/Classes/History/RecordHistory.php
typo3/sysext/backend/Resources/Private/Partials/RecordHistory/Diff.html
typo3/sysext/backend/Resources/Private/Partials/RecordHistory/History.html
typo3/sysext/backend/Resources/Private/Partials/RecordHistory/MultipleDiff.html
typo3/sysext/backend/Resources/Private/Partials/RecordHistory/Settings.html
typo3/sysext/backend/Resources/Private/Templates/RecordHistory/Main.html
typo3/sysext/belog/Classes/Domain/Model/HistoryEntry.php [deleted file]
typo3/sysext/belog/Classes/Domain/Repository/HistoryEntryRepository.php [deleted file]
typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php
typo3/sysext/belog/Classes/ViewHelpers/HistoryEntryViewHelper.php [deleted file]
typo3/sysext/belog/Configuration/TypoScript/setup.txt
typo3/sysext/belog/Resources/Private/Partials/Content/LogEntries.html
typo3/sysext/belog/Tests/Unit/Domain/Repository/HistoryEntryRepositoryTest.php [deleted file]
typo3/sysext/core/Classes/DataHandling/DataHandler.php
typo3/sysext/core/Classes/History/RecordHistoryStore.php [new file with mode: 0644]
typo3/sysext/core/Configuration/TCA/sys_history.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-55298-DecoupledHistoryFunctionality.rst [new file with mode: 0644]
typo3/sysext/core/ext_tables.sql
typo3/sysext/install/Classes/Updates/SeparateSysHistoryFromSysLogUpdate.php [new file with mode: 0644]
typo3/sysext/install/Configuration/ExtensionScanner/Php/ClassNameMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodArgumentDroppedMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyPublicMatcher.php
typo3/sysext/install/ext_localconf.php
typo3/sysext/workspaces/Classes/Service/HistoryService.php