Bug #89182
openEpic #85006: Reduce falsely reported broken links
Linkvalidator should only check relevant fields in table
0%
Description
Some checks should only be performed if content is relevant. Additionally, the type ($GLOBALS['TCA'][$table]['columns'][$field]['config']['type']) / softref configuration may change due to columnsOverrides
Currently, no TCA processing is performed, so this is not taken into account.
The problem is currently, if page or content element types are changed, the content is not removed from the fields which are now no longer relevant, so in older sites where this had been changed, you may get a lot of "broken links" for content that is not rendered in FE and is irrelevant.
Long term we would also like to be able to check flexform fields, so this should be considered as well.
Examples¶
- type * tt_content.bodytext : depends on ctype (e.g. is usually not relevant for plugins or header) * pages.url : depends on doktype
- displayCond * whether field is displayed in BE or not can depend on several conditions
- overrideChildTca ?
why is this a problem¶
- broken links in fields which are not relevant are checked (e.g. due to type, displayCond, etc.)
- broken links are displayed in list, but editor gets error message or blank page when clicking pencil
- which softref parsers are used depends on the type of the field. One field may have different types depending on context (e.g. type of record)
Reproduce¶
- Create a content element, e.g. "text & media"
- Add a broken link to the content (tt_content.bodytext)
- Now change the content type, e.g. to plugin or header
- We recheck for broken links for that page
- We look at linkvalidator report
Actual result: The broken link will be displayed
Expected result: The broken link in the element "plugin" should not be displayed, because tt_content.bodytext is not relevant if content type is plugin
Possible solution¶
It should be possible to get the information, which fields are editable via TCA: 'interface' => 'showRecordFieldList'.
Additionally, the type should be evaluated (e.g. tt_content.CType, pages.doktype, based on $GLOBALS['TCA'][$table]['ctrl']['type'].
How to handle this, e.g.
- do TCA processing in Link Validator
- alternative: have "cleanup" script which removes irrelevant content (e.g. as in lowlevel cleaner Flexform cleanup). However, columnsOverrides should still be performed to get the correct type.
Updated by Sybille Peters about 5 years ago
- Related to Feature #89177: Change TsConfig Defaults of Linkvalidator and Enable all core fields containing links added
Updated by Sybille Peters about 5 years ago
- Related to Bug #84214: Linkvalidator should not check records without write permissions added
Updated by Sybille Peters about 5 years ago
- Subject changed from Extend TSconfig configuration to allow restrictions (where) for fields to Linkvalidator should only check relevant fields in table
Updated by Sybille Peters about 4 years ago
- Tracker changed from Feature to Bug
- Description updated (diff)
- TYPO3 Version set to 9
Updated by Sybille Peters about 4 years ago
- Related to Feature #92542: Linkvalidator should check shortcut pages added
Updated by Gerrit Code Review almost 4 years ago
- Status changed from New to Under Review
Patch set 3 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 4 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 5 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 6 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 7 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 8 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 9 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 10 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 4 years ago
Patch set 11 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 12 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 13 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 14 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 15 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 16 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 17 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 18 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 19 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 20 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review about 3 years ago
Patch set 21 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Gerrit Code Review almost 3 years ago
Patch set 22 for branch main of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/66651
Updated by Sybille Peters 8 months ago
Update:
It is currently not possible to use the FormDataGroup TcaDatabaseRecord in order to get a list of fields which will be displayed in the BE.
Linkvalidator should get the visible fields in the BE so that only these will be checked (and not for example the "bodytext" field for a CE type "header", where links exist in bodytext but the type was changed).
In order to determine the visible fields for a form in the BE, one can theoretically use FormEngine data processing, e.g.
$formDataGroup = GeneralUtility::makeInstance(TcaDatabaseRecord::class);
$this->formDataCompiler = GeneralUtility::makeInstance(FormDataCompiler::class, $formDataGroup);
$formDataCompilerInput = [
'tableName' => $tablename,
'vanillaUid' => $uid,
'command' => 'edit',
'request' => $request;
];
$processedFormData = $this->formDataCompiler->compile($formDataCompilerInput);
$fields = $processedFormData['processedTca']['columns'];
This almost works, but we have a problem: For example if CType="header", the returned fields contain "bodytext" because this is set in TcaColumnsProcessRecordTitle. Problably, there are other cases where some fields are added to columnsToProcess and processedTca/columns which should not be displayed in the BE form.
The relevant classes are:
- TcaColumnsProcessShowitem: where the fields are added to $result['columnsToProcess']
- TcaColumnsRemoveUnused: where the fields NOT in 'columnsToProcess' are removed from $result['processedTca']['columns']
The problem here is that there is not a clear distinction between columnsToProcess and the columns to show.
I am hoping there might be a possibility to provide this functionality for extension authors (also for other use cases) in order to slightly modify the core or provide a method which I have overlooked.
Updated by Sybille Peters 8 months ago
- Related to Task #103477: Documentation for Link Validator searchFields says it is only possible to check fields with a defined "softref" added
Updated by Sybille Peters 8 months ago
- Related to Bug #103478: Linkvalidator should check fields with type "file" added