getConnectionForTable('tt_content'); $tableColumns = $connection->getSchemaManager()->listTableColumns('tt_content'); // Only proceed if menu_type field still exists if (!isset($tableColumns['menu_type'])) { return false; } $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content'); $queryBuilder->getRestrictions()->removeAll(); $elementCount = $queryBuilder->count('uid') ->from('tt_content') ->where( $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('menu', \PDO::PARAM_STR)) ) ->execute()->fetchColumn(0); return (bool)$elementCount; } /** * @return string[] All new fields and tables must exist */ public function getPrerequisites(): array { return [ DatabaseUpdatedPrerequisite::class ]; } /** * Performs the database update * * @return bool */ public function executeUpdate(): bool { $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tt_content'); $queryBuilder = $connection->createQueryBuilder(); $queryBuilder->getRestrictions()->removeAll(); $statement = $queryBuilder->select('uid', 'header', 'menu_type') ->from('tt_content') ->where( $queryBuilder->expr()->eq( 'CType', $queryBuilder->createNamedParameter('menu', \PDO::PARAM_STR) ) ) ->execute(); while ($record = $statement->fetch()) { $queryBuilder = $connection->createQueryBuilder(); $queryBuilder->update('tt_content') ->where( $queryBuilder->expr()->eq( 'uid', $queryBuilder->createNamedParameter($record['uid'], \PDO::PARAM_INT) ) ) ->set('CType', $this->mapMenuTypes($record['menu_type'])); $queryBuilder->execute(); } return true; } /** * Map the old to the new values * * @param string $menuType The content of the FlexForm * @return string The equivalent CType */ protected function mapMenuTypes($menuType) { $mapping = [ 0 => 'menu_pages', 1 => 'menu_subpages', 2 => 'menu_sitemap', 3 => 'menu_section', 4 => 'menu_abstract', 5 => 'menu_recently_updated', 6 => 'menu_related_pages', 7 => 'menu_section_pages', 8 => 'menu_sitemap_pages', 'categorized_pages' => 'menu_categorized_pages', 'categorized_content' => 'menu_categorized_content' ]; if (array_key_exists($menuType, $mapping)) { return $mapping[$menuType]; } return 'menu_' . $menuType; } }