Skip to content

Commit

Permalink
[BUGFIX] Show all content elements with mod.web_layout.defLangBinding
Browse files Browse the repository at this point in the history
The option is meant to show translated content elements
alligned with their translation parent element (connected mode).

However this also made content elements diasppear, which were
added individually in a language (free mode).

With this change, elements for a language in free mode
are also shown, when the option is set.

Resolves: #62550
Releases: master, 8.7
Change-Id: I96f754ecf4ddb98f22d0d8c7d7da6001fa774d6b
Reviewed-on: https://review.typo3.org/56932
Reviewed-by: Nicole Cordes <typo3@cordes.co>
Tested-by: Nicole Cordes <typo3@cordes.co>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de>
Tested-by: Mathias Brodala <mbrodala@pagemachine.de>
  • Loading branch information
IchHabRecht authored and mbrodala committed May 28, 2018
1 parent b83b7b8 commit 0fbeb2d
Showing 1 changed file with 28 additions and 16 deletions.
44 changes: 28 additions & 16 deletions typo3/sysext/backend/Classes/View/PageLayoutView.php
Expand Up @@ -622,7 +622,7 @@ public function getTable_tt_content($id)
$defaultLanguageElementsByColumn[$columnId][] = (isset($row['_ORIG_uid']) ? $row['_ORIG_uid'] : $row['uid']);
}
$editUidList .= $row['uid'] . ',';
$disableMoveAndNewButtons = $this->defLangBinding && $lP > 0;
$disableMoveAndNewButtons = $this->defLangBinding && $lP > 0 && $this->checkIfTranslationsExistInLanguage($contentRecordsPerColumn, $lP);
if (!$this->tt_contentConfig['languageMode']) {
$singleElementHTML .= '<div class="t3-page-ce-dragitem" id="' . StringUtility::getUniqueId() . '">';
}
Expand Down Expand Up @@ -693,7 +693,7 @@ public function getTable_tt_content($id)
}
$singleElementHTML .= '</div></div><div class="t3-page-ce-dropzone-available t3js-page-ce-dropzone-available"></div></div>';
if ($this->defLangBinding && $this->tt_contentConfig['languageMode']) {
$defLangBinding[$columnId][$lP][$row[$lP ? 'l18n_parent' : 'uid']] = $singleElementHTML;
$defLangBinding[$columnId][$lP][$row[$lP ? 'l18n_parent' : 'uid'] ?: $row['uid']] = $singleElementHTML;
} else {
$content[$columnId] .= $singleElementHTML;
}
Expand Down Expand Up @@ -977,16 +977,27 @@ public function getTable_tt_content($id)
$out .= '<td valign="top" class="t3-grid-cell t3-page-column t3js-page-column t3js-page-lang-column t3js-page-lang-column-' . $languageId . '">' . $columnContent . '</td>';
}
$out .= '</tr>';
if ($this->defLangBinding) {
// "defLangBinding" mode
foreach ($defaultLanguageElementsByColumn[$cKey] as $defUid) {
if ($this->defLangBinding && !empty($defLangBinding[$cKey])) {
$maxItemsCount = max(array_map('count', $defLangBinding[$cKey]));
for ($i = 0; $i < $maxItemsCount; $i++) {
$defUid = $defaultLanguageElementsByColumn[$cKey][$i] ?? 0;
$cCont = [];
foreach ($langListArr as $lP) {
$cCont[] = $defLangBinding[$cKey][$lP][$defUid] . $this->newLanguageButton(
$this->getNonTranslatedTTcontentUids([$defUid], $id, $lP),
$lP,
$cKey
);
if ($lP > 0
&& is_array($defLangBinding[$cKey][$lP])
&& !$this->checkIfTranslationsExistInLanguage($defaultLanguageElementsByColumn[$cKey], $lP)
&& count($defLangBinding[$cKey][$lP]) > $i
) {
$slice = array_slice($defLangBinding[$cKey][$lP], $i, 1);
$element = $slice[0] ?? '';
} else {
$element = $defLangBinding[$cKey][$lP][$defUid] ?? '';
}
$cCont[] = $element . $this->newLanguageButton(
$this->getNonTranslatedTTcontentUids([$defUid], $id, $lP),
$lP,
$cKey
);
}
$out .= '
<tr>
Expand Down Expand Up @@ -2002,7 +2013,7 @@ public function newLanguageButton($defaultLanguageUids, $lP, $colPos = 0)
$allowTranslate = false;
}
if (isset($this->languageHasTranslationsCache[$lP]['hasTranslations'])) {
$allowCopy = false;
$allowCopy = !$this->languageHasTranslationsCache[$lP]['hasTranslations'];
}
}

Expand Down Expand Up @@ -2565,8 +2576,11 @@ protected function checkIfTranslationsExistInLanguage(array $contentElements, $l
}
}
}
if (!isset($this->languageHasTranslationsCache[$language])) {
$this->languageHasTranslationsCache[$language]['hasTranslations'] = false;
}
// Check whether we have a mix of both
if ($this->languageHasTranslationsCache[$language]['hasStandAloneContent']
if (isset($this->languageHasTranslationsCache[$language]['hasStandAloneContent'])
&& $this->languageHasTranslationsCache[$language]['hasTranslations']
) {
$this->languageHasTranslationsCache[$language]['mode'] = 'mixed';
Expand All @@ -2581,10 +2595,8 @@ protected function checkIfTranslationsExistInLanguage(array $contentElements, $l
$queue->addMessage($message);
}
}
if ($this->languageHasTranslationsCache[$language]['hasTranslations']) {
return true;
}
return false;

return $this->languageHasTranslationsCache[$language]['hasTranslations'];
}

/**
Expand Down

0 comments on commit 0fbeb2d

Please sign in to comment.