/**
  * @param array $origContentElement
  * @param int $langUid
  * @return int
  */
 protected function addTranslationContentElement($contentElement, $langUid, $origUid)
 {
     $langUid = (int) $langUid;
     $origUid = (int) $origUid;
     unset($contentElement['uid']);
     $contentElement['sys_language_uid'] = $langUid;
     $contentElement['t3_origuid'] = (int) $origUid;
     $contentElement['l18n_parent'] = (int) $origUid;
     $tvTemplateUid = (int) $contentElement['tx_templavoila_to'];
     if (!empty($contentElement['tx_templavoila_flex'])) {
         $contentElement['pi_flexform'] = $contentElement['tx_templavoila_flex'];
     }
     if ($this->flexformConversionOption !== 'exclude') {
         if (t3lib_extMgm::isLoaded('static_info_tables')) {
             $langUid = (int) $contentElement['sys_language_uid'];
             if ($langUid > 0) {
                 $forceLanguage = $this->flexformConversionOption === 'forceLanguage';
                 if ($origUid <= 0) {
                     $forceLanguage = FALSE;
                 }
                 if (!$this->sharedHelper->isTvDataLangDisabled($tvTemplateUid)) {
                     $contentElement['pi_flexform'] = $this->sharedHelper->convertFlexformForTranslation($contentElement['pi_flexform'], $this->langIsoCodes[$langUid], $forceLanguage);
                 }
             }
         }
     }
     $contentElement['pi_flexform'] = $this->sharedHelper->cleanFlexform($contentElement['pi_flexform'], $tvTemplateUid);
     $existingTranslation = $this->sharedHelper->getTranslationForContentElementAndLanguage($origUid, $langUid);
     $existingTranslationUid = 0;
     if (!empty($existingTranslation) && is_array($existingTranslation)) {
         $existingTranslationUid = (int) $existingTranslation['uid'];
     }
     $contentElementUid = NULL;
     if ($existingTranslationUid > 0) {
         $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid=' . $existingTranslationUid, $contentElement);
         $contentElementUid = $existingTranslationUid;
     } else {
         $GLOBALS['TYPO3_DB']->exec_INSERTquery('tt_content', $contentElement);
         $contentElementUid = (int) $GLOBALS['TYPO3_DB']->sql_insert_id();
     }
     return $contentElementUid;
 }
 /**
  * Migrated the content from a TemplaVoila FCE to the given Grid Element
  *
  * @param array $contentElement
  * @param string|int $geKey
  * @return void
  */
 public function migrateFceFlexformContentToGe($contentElement, $geKey)
 {
     $tvTemplateUid = (int) $contentElement['tx_templavoila_to'];
     $flexform = $this->sharedHelper->cleanFlexform($contentElement['tx_templavoila_flex'], $tvTemplateUid, false);
     $GLOBALS['TYPO3_DB']->exec_UPDATEquery('tt_content', 'uid=' . intval($contentElement['uid']), array('CType' => 'gridelements_pi1', 'pi_flexform' => $flexform, 'tx_gridelements_backend_layout' => $geKey));
 }
 /**
  * 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);
 }