/** * 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 templavoila flexform of page to db fields with the given pageUid to the selected column positions * * @param array $formdata * @param int $pageUid * @return int Number of Content elements updated */ public function migrateTvFlexformForPage($formdata, $pageUid) { $pageUid = (int) $pageUid; $localizationDiffSourceFields = array(); $flexformConversionOption = $formdata['convertflexformoption']; $flexformFieldPrefix = $formdata['flexformfieldprefix']; $pageRecord = $this->sharedHelper->getPage($pageUid); $tvTemplateUid = (int) $this->sharedHelper->getTvPageTemplateUid($pageUid); $isTvDataLangDisabled = $this->sharedHelper->isTvDataLangDisabled($tvTemplateUid); $pageFlexformString = $pageRecord['tx_templavoila_flex']; if (!empty($pageFlexformString)) { $langIsoCodes = $this->sharedHelper->getLanguagesIsoCodes(); $allAvailableLanguages = $this->sharedHelper->getAvailablePageTranslations($pageUid); if (empty($allAvailableLanguages)) { $allAvailableLanguages = array(); } array_unshift($allAvailableLanguages, 0); foreach ($allAvailableLanguages as $langUid) { $flexformString = $pageFlexformString; $langUid = (int) $langUid; if ($flexformConversionOption !== 'exclude') { if (t3lib_extMgm::isLoaded('static_info_tables')) { if ($langUid > 0) { $forceLanguage = $flexformConversionOption === 'forceLanguage'; if (!$isTvDataLangDisabled) { $flexformString = $this->sharedHelper->convertFlexformForTranslation($flexformString, $langIsoCodes[$langUid], $forceLanguage); } } } } $flexformString = $this->sharedHelper->cleanFlexform($flexformString, $tvTemplateUid); if (!empty($flexformString)) { $flexformArray = t3lib_div::xml2array($flexformString); if (is_array($flexformArray['data'])) { foreach ($flexformArray['data'] as $sheetData) { if (is_array($sheetData['lDEF'])) { foreach ($sheetData['lDEF'] as $fieldName => $fieldData) { if (isset($fieldData['vDEF'])) { $fieldValue = (string) $fieldData['vDEF']; $fullFieldName = $flexformFieldPrefix . $fieldName; if ($langUid === 0) { $fields = $GLOBALS['TYPO3_DB']->admin_get_fields('pages'); if (!empty($fields[$fullFieldName])) { if ($GLOBALS['TYPO3_DB']->quoteStr($fullFieldName, 'pages') === $fullFieldName) { $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages', 'uid=' . intval($pageUid), array($fullFieldName => $fieldValue)); } } } elseif ($langUid > 0) { $fields = $GLOBALS['TYPO3_DB']->admin_get_fields('pages_language_overlay'); if (!empty($fields[$fullFieldName])) { if ($GLOBALS['TYPO3_DB']->quoteStr($fullFieldName, 'pages_language_overlay') === $fullFieldName) { $GLOBALS['TYPO3_DB']->exec_UPDATEquery('pages_language_overlay', '(pid=' . intval($pageUid) . ')' . ' AND (sys_language_uid = ' . $langUid . ')' . t3lib_BEfunc::deleteClause('pages_language_overlay'), array($fullFieldName => $fieldValue)); } $localizationDiffSourceFields[] = $fullFieldName; } } } } } } } } } } $this->sharedHelper->fixPageLocalizationDiffSources($pageUid, $localizationDiffSourceFields); }