public function apply($contentId)
{
$versionNumbers = $this->contentGateway->listVersionNumbers($contentId);
$languageCodeToFieldId = array();
$nameRows = $this->contentGateway->loadVersionedNameData(array_map(function ($versionNo) use($contentId) {
return array('id' => $contentId, 'version' => $versionNo);
}, $versionNumbers));
foreach ($versionNumbers as $versionNo) {
$contentRows = $this->contentGateway->load($contentId, $versionNo);
$contentList = $this->contentMapper->extractContentFromRows($contentRows, $nameRows);
$content = $contentList[0];
$languageCodeSet = array();
// Each subsequent Content version can have additional language(s)
foreach ($content->fields as $field) {
$languageCode = $field->languageCode;
// Add once for each language per version
if (isset($languageCodeSet[$languageCode])) {
continue;
}
$languageCodeSet[$languageCode] = true;
// Check if field was already inserted for current language code,
// in that case we need to preserve its ID across versions
if (isset($languageCodeToFieldId[$languageCode])) {
$fieldId = $languageCodeToFieldId[$languageCode];
} else {
$fieldId = null;
}
$languageCodeToFieldId[$languageCode] = $this->insertField($content, $this->createField($fieldId, $versionNo, $languageCode));
}
}
}