Bug #81096

Images wrongly cropped in translated pages

Added by Christian Toffolo about 2 years ago. Updated 2 months ago.

Status:
Accepted
Priority:
Must have
Assignee:
-
Category:
File Abstraction Layer (FAL)
Start date:
2017-05-01
Due date:
% Done:

0%

TYPO3 Version:
8
PHP Version:
7.1
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

sys_file_metadata stores width/height of an image in the record with sys_language_uid=0 while in the translated records with sys_language_uid!=0 width/height are 0.

Then \TYPO3\CMS\Frontend\Page\PageRepository::getRecordOverlay() overlays the right dimensions in the $row with the 0 from $olrow even if TCA of sys_file_metadata has 'l10n_mode' => 'exclude' for the fields 'width' and 'height'.

The image then is often wrongly cropped in the translated pages.


Related issues

Related to TYPO3 Core - Bug #80724: Image width="0" and height="0" on translated metadata Closed 2017-04-06
Related to TYPO3 Core - Bug #87162: Width and Height in translated meta data records not updated, when original file is replaced New 2018-12-14

History

#1 Updated by Benni Mack about 2 years ago

  • Target version changed from 8 LTS to next-patchlevel

#2 Updated by Riccardo De Contardi about 2 years ago

  • Related to Bug #80724: Image width="0" and height="0" on translated metadata added

#3 Updated by Gianluca Strafella over 1 year ago

Hi,
if it could be useful, this is a dirty work-around to fix the problem on TYPO3 8.7.4 :

$GLOBALS['TCA']['sys_file_metadata']['columns']['width']['l10n_mode'] = 'prefixLangTitle';
$GLOBALS['TCA']['sys_file_metadata']['columns']['width']['config']['type'] = 'user';

$GLOBALS['TCA']['sys_file_metadata']['columns']['height']['l10n_mode'] = 'prefixLangTitle';
$GLOBALS['TCA']['sys_file_metadata']['columns']['height']['config']['type'] = 'user';

based on override of TCA.

Gianluca

#4 Updated by Christian Weiske over 1 year ago

The initial problem is that translated records in sys_file_metadata have a width and height of 0, unlike their untranslated counterparts that have those properties filled correctly.

Coarse call stack:

- MetaDataRepository->findByFile()
  - MetaDataRepository->emitRecordPostRetrievalSignal()
    - FileMetadataOverlayAspect->languageAndWorkspaceOverlay()
      - TYPO3\CMS\Frontend\Page\PageRepository->getRecordOverlay()

PageRepository.php::getRecordOverlay() fetches the translated sys_file_metadata record and overlays all properties of the original row without caring if they should be overlaid at all:

// Merge record content by traversing all fields

A solution is to adjust FileMetadataOverlayAspect and reset width and height after calling getRecordOverlay().

Another solution would be to copy width and height of the original metadata record to the translated ones - but this might cause issue when updating/replacing the file, since the size data would need to be re-propagated then.

#5 Updated by Gerrit Code Review over 1 year ago

  • Status changed from New to Under Review

Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/55190

#6 Updated by Gerrit Code Review over 1 year ago

Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/55190

#7 Updated by Gerrit Code Review over 1 year ago

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/55190

#8 Updated by Helmut Hummel 7 months ago

The reason for that is the following. Despite width and height being configured to be synced for translations (l10_mode = exclude), DataHandler does NOT sync these fields, if editors do not have permissions to edit/change them.
This DataHandler behaviour is unfortunate, because these fields are read only anyway.

We fixed this in our project by simply setting the tca value of 'exclude' to 'false'. This makes the readonly fields appear in the default language, but also syncs the width and height properly, when saving any meta data record (translation or default language does not matter)

#9 Updated by Helmut Hummel 7 months ago

TSCONFIG:

TCEFORM.sys_file_metadata.height.disabled = 1
TCEFORM.sys_file_metadata.width.disabled = 1

TCA:

$GLOBALS['TCA'][$table]['columns']['width']['exclude'] = false;
$GLOBALS['TCA'][$table]['columns']['height']['exclude'] = false;

Setting both works as expected. Fields are not show, but DataHandler sync works

#10 Updated by Helmut Hummel 7 months ago

  • Status changed from Under Review to Accepted

#11 Updated by Helmut Hummel 6 months ago

  • Related to Bug #87162: Width and Height in translated meta data records not updated, when original file is replaced added

#12 Updated by Benni Mack 2 months ago

  • Target version changed from next-patchlevel to Candidate for patchlevel

Also available in: Atom PDF