/**
  * Does the content migration recursive for all pages
  *
  * @param array $formdata
  * @return void
  */
 public function migrateContentAction($formdata)
 {
     $this->sharedHelper->setUnlimitedTimeout();
     $uidTvTemplate = (int) $formdata['tvtemplate'];
     $uidBeLayout = (int) $formdata['belayout'];
     $contentElementsUpdated = 0;
     $pageTemplatesUpdated = 0;
     if ($uidTvTemplate > 0 && $uidBeLayout > 0) {
         $pageUids = $this->sharedHelper->getPageIds();
         foreach ($pageUids as $pageUid) {
             if ($this->sharedHelper->getTvPageTemplateUid($pageUid) == $uidTvTemplate) {
                 $contentElementsUpdated += $this->migrateContentHelper->migrateContentForPage($formdata, $pageUid);
                 $this->migrateContentHelper->migrateTvFlexformForPage($formdata, $pageUid);
             }
             // Update page template (must be called for every page, since to and next_to must be checked
             $pageTemplatesUpdated += $this->migrateContentHelper->updatePageTemplate($pageUid, $uidTvTemplate, $uidBeLayout);
         }
         if ($formdata['markdeleted']) {
             $this->migrateContentHelper->markTvTemplateDeleted($uidTvTemplate);
         }
     }
     $this->view->assign('contentElementsUpdated', $contentElementsUpdated);
     $this->view->assign('pageTemplatesUpdated', $pageTemplatesUpdated);
 }
 /**
  * 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);
 }