/** * Clones all GridElements which are configured for "All languages" and creates a single GridElement * for each page translation. Also sets the language for the original GridElement to 0 (default language) * * @param int $pageUid * @return int Amount of cloned GridElements */ public function cloneLangAllGEs($pageUid) { $cloned = 0; $pageLanguages = $this->sharedHelper->getAvailablePageTranslations($pageUid); $allLanguages = $this->sharedHelper->getAllLanguages(); $nonPageLanguages = array_diff($allLanguages, $pageLanguages); $gridElements = $this->getCeGridElements($pageUid, -1); // All GridElements with language = all $this->langIsoCodes = $this->sharedHelper->getLanguagesIsoCodes(); foreach ($gridElements as $contentElementUid) { $origContentElement = $this->sharedHelper->getContentElement($contentElementUid); foreach ($pageLanguages as $langUid) { $translationContentUid = $this->addTranslationContentElement($origContentElement, $langUid, $origContentElement['uid']); $this->updateShortcutElements($contentElementUid, $langUid, $translationContentUid); $cloned += 1; } // modify shortcuts for non non page translations (could be other languages available) if (!empty($nonPageLanguages)) { foreach ($nonPageLanguages as $pageLanguageUid) { $this->updateShortcutElements($contentElementUid, $pageLanguageUid, $contentElementUid); } } $origContentElement['sys_language_uid'] = 0; $origUid = $origContentElement['uid']; unset($origContentElement['uid']); $tvTemplateUid = (int) $origContentElement['tx_templavoila_to']; if (!empty($origContentElement['tx_templavoila_flex'])) { $origContentElement['pi_flexform'] = $origContentElement['tx_templavoila_flex']; } $origContentElement['pi_flexform'] = $this->sharedHelper->cleanFlexform($origContentElement['pi_flexform'], $tvTemplateUid); $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid=' . $origUid, $origContentElement); $this->updateSysLanguageOfAllLanguageShortcuts($contentElementUid); } return $cloned; }
/** * Migrates all content elements for the FCE with the given uid to the selected column positions * * @param array $contentElement * @param array $formdata * @return int Number of Content elements updated */ public function migrateContentElementsForFce($contentElement, $formdata) { $fieldMapping = $this->sharedHelper->getFieldMappingArray($formdata, 'tv_col_', 'ge_col_'); $tvContentArray = $this->sharedHelper->getTvContentArrayForContent($contentElement['uid']); $translationParentUid = (int) $contentElement['l18n_parent']; $sysLanguageUid = (int) $contentElement['sys_language_uid']; $pageUid = (int) $contentElement['pid']; $count = 0; $sorting = 0; foreach ($tvContentArray as $key => $contentUidString) { if (array_key_exists($key, $fieldMapping) && $contentUidString != '') { $contentUids = explode(',', $contentUidString); foreach ($contentUids as $contentUid) { $contentUid = (int) $contentUid; $myContentElement = NULL; $myContentElement = $this->sharedHelper->getContentElement($contentUid); $containerUid = (int) $contentElement['uid']; if ($translationParentUid > 0 && $sysLanguageUid > 0) { $myCeTranslationParentUid = (int) $myContentElement['uid']; if ($myCeTranslationParentUid > 0) { $tmpMyContentElement = $this->sharedHelper->getTranslationForContentElementAndLanguage($myCeTranslationParentUid, $sysLanguageUid); $tmpMyContentUid = (int) $tmpMyContentElement['uid']; if ($tmpMyContentUid > 0) { $contentUid = $tmpMyContentUid; $myContentElement = $tmpMyContentElement; } else { $containerUid = $translationParentUid; } } else { $containerUid = $translationParentUid; } } else { $myContentElement = $this->sharedHelper->getContentElement($contentUid); } if (intval($myContentElement['pid']) === $pageUid) { $this->sharedHelper->updateContentElementForGe($contentUid, $containerUid, $fieldMapping[$key], $sorting); } $sorting += 25; $count++; $this->sharedHelper->fixContentElementLocalizationDiffSources($contentUid); $this->refIndex->updateRefIndexTable('tt_content', $contentUid); } } } return $count; }
/** * @param array $contentArray * @param int $pageUid * @param int $sorting * @return array */ protected function fixSortingForContentArray($contentArray, $pageUid, &$sorting) { $pageUid = (int) $pageUid; $modifiedSortingCeUids = array(); if (is_array($contentArray)) { $contentElementUids = $this->getContentElementUids($contentArray); foreach ($contentElementUids as $ceUid) { $contentElement = $this->sharedHelper->getContentElement($ceUid); $contentTvFlexform = NULL; $contentElementPageUid = (int) $contentElement['pid']; if ($contentElementPageUid === $pageUid) { $contentTvFlexform = $contentElement['tx_templavoila_flex']; $contentElementUid = (int) $contentElement['uid']; if ($contentElementUid > 0) { $sorting += self::SORTING_OFFSET; $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid=' . $contentElementUid, array('sorting' => $sorting)); $modifiedSortingCeUids[] = $contentElementUid; $translations = $this->sharedHelper->getTranslationsForContentElement($contentElementUid); if (!empty($translations)) { foreach ($translations as $translation) { $translationUid = $translation['uid']; if ($translationUid > 0) { $sorting += self::SORTING_OFFSET; $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid=' . $translationUid, array('sorting' => $sorting)); $modifiedSortingCeUids[] = $translationUid; $this->refIndex->updateRefIndexTable('tt_content', $translationUid); } } } $this->refIndex->updateRefIndexTable('tt_content', $contentElementUid); $this->sharedHelper->fixContentElementLocalizationDiffSources($contentElementUid); if (!empty($contentTvFlexform)) { $contentArrayForFce = $this->sharedHelper->getTvContentArrayForContent($contentElementUid); $fceModifiedCeUids = $this->fixSortingForContentArray($contentArrayForFce, $pageUid, $sorting); $modifiedSortingCeUids = array_merge($modifiedSortingCeUids, $fceModifiedCeUids); } } } } } return $modifiedSortingCeUids; }
protected function convertShortcutToAllLangShortCut($contentUid, $targetUid) { $contentUid = (int) $contentUid; $targetUid = (int) $targetUid; $convertedToAllLang = FALSE; if ($contentUid > 0 && $targetUid > 0) { $contentElement = $this->sharedHelper->getContentElement($targetUid); if ($this->useAllLangIfDefaultLangIsReferenced && !empty($contentElement)) { $ceSysLanguageUid = (int) $contentElement['sys_language_uid']; $languageParent = (int) $contentElement['l18n_parent']; if (($ceSysLanguageUid === -1 || $ceSysLanguageUid === 0) && $languageParent === 0) { $this->convertToAllLang($contentUid); $this->deleteTranslations($contentUid); $this->sharedHelper->fixContentElementLocalizationDiffSources($contentUid); $convertedToAllLang = TRUE; } } } return $convertedToAllLang; }
/** * Migrates all content elements for the page with the given pageUid to the selected column positions * * @param array $formdata * @param int $pageUid * @return int Number of Content elements updated */ public function migrateContentForPage($formdata, $pageUid) { $fieldMapping = $this->sharedHelper->getFieldMappingArray($formdata, 'tv_col_', 'be_col_'); $tvContentArray = $this->sharedHelper->getTvContentArrayForPage($pageUid); $count = 0; $sorting = 0; foreach ($tvContentArray as $key => $contentUidString) { if (array_key_exists($key, $fieldMapping) && $contentUidString != '') { $contentUids = explode(',', $contentUidString); foreach ($contentUids as $contentUid) { $contentElement = $this->sharedHelper->getContentElement($contentUid); if ($contentElement['pid'] == $pageUid) { $this->sharedHelper->updateContentElementColPos($contentUid, $fieldMapping[$key], $sorting); $this->sharedHelper->fixContentElementLocalizationDiffSources($contentUid); } $sorting += 25; $count++; } } } return $count; }