[TASK] Remove upgrade wizards from TYPO3 6 to 7 14/52514/2
authorThomas Hohn <thomas@hohn.dk>
Thu, 20 Apr 2017 11:03:45 +0000 (13:03 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 20 Apr 2017 12:01:41 +0000 (14:01 +0200)
Remove upgrade wizards for upgrading from TYPO3 v6 to v7.

Resolves: #80911
Releases: master
Change-Id: I1337341150050da971221fafaca4548dfec3bd4c
Reviewed-on: https://review.typo3.org/52514
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
15 files changed:
typo3/sysext/install/Classes/Updates/AccessRightParametersUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/Compatibility6ExtractionUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/FileListInAccessModuleListUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/FileListIsStartModuleUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/FilesReplacePermissionUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/LanguageIsoCodeUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/MediaceExtractionUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/MigrateMediaToAssetsForTextMediaCe.php [deleted file]
typo3/sysext/install/Classes/Updates/MigrateShortcutUrlsAgainUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/OpenidExtractionUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/PageShortcutParentUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/ProcessedFileChecksumUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/TableFlexFormToTtContentFieldsUpdate.php [deleted file]
typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php [deleted file]
typo3/sysext/install/ext_localconf.php

diff --git a/typo3/sysext/install/Classes/Updates/AccessRightParametersUpdate.php b/typo3/sysext/install/Classes/Updates/AccessRightParametersUpdate.php
deleted file mode 100644 (file)
index a49389a..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Configuration\ConfigurationManager;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Move access right parameters from "BE" to "SYS" configuration section
- */
-class AccessRightParametersUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Move access right parameters configuration to "SYS" section';
-
-    /**
-     * @var array
-     */
-    protected $movedAccessRightConfigurationSettings = [
-        'BE/fileCreateMask' => 'SYS/fileCreateMask',
-        'BE/folderCreateMask' => 'SYS/folderCreateMask',
-        'BE/createGroup' => 'SYS/createGroup',
-    ];
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        $updateNeeded = false;
-
-        /** @var ConfigurationManager $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
-
-        // If the local configuration path can be accessed, the path is valid and the update wizard has to be executed
-        foreach ($this->movedAccessRightConfigurationSettings as $oldPath => $newPath) {
-            try {
-                $configurationManager->getLocalConfigurationValueByPath($oldPath);
-                $updateNeeded = true;
-                break;
-            } catch (\RuntimeException $e) {
-            }
-        }
-
-        $description = 'Some access right parameters were moved from the "BE" to the "SYS" configuration section. ' .
-            'The update wizards moves the settings to the new configuration destination.';
-
-        return $updateNeeded;
-    }
-
-    /**
-     * Performs the configuration update
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        /** @var ConfigurationManager $configurationManager */
-        $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
-        foreach ($this->movedAccessRightConfigurationSettings as $oldPath => $newPath) {
-            try {
-                $value = $configurationManager->getLocalConfigurationValueByPath($oldPath);
-                $configurationManager->setLocalConfigurationValueByPath($newPath, $value);
-            } catch (\RuntimeException $e) {
-            }
-        }
-        $configurationManager->removeLocalConfigurationKeysByPath(array_keys($this->movedAccessRightConfigurationSettings));
-
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/Compatibility6ExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/Compatibility6ExtractionUpdate.php
deleted file mode 100644 (file)
index 07a31db..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Installs and downloads EXT:compatibility6 if needed
- */
-class Compatibility6ExtractionUpdate extends AbstractDownloadExtensionUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Install extension "compatibility6" from TER';
-
-    /**
-     * @var string
-     */
-    protected $extensionKey = 'compatibility6';
-
-    /**
-     * @var array
-     */
-    protected $extensionDetails = [
-        'compatibility6' => [
-            'title' => 'Compatibility Mode for TYPO3 CMS 6.x',
-            'description' => 'Provides an additional backwards-compatibility layer with legacy functionality for sites that haven\'t fully migrated to TYPO3 v7 yet.',
-            'versionString' => '7.6.4',
-        ]
-    ];
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string $description The description for the update
-     * @return bool Whether an update is needed (true) or not (false)
-     */
-    public function checkForUpdate(&$description)
-    {
-        $description = 'The extension "compatibility6" (Compatibility Mode for TYPO3 CMS 6.x) was extracted into '
-            . 'the TYPO3 Extension Repository. This update downloads the TYPO3 Extension from the TER.';
-
-        $updateNeeded = false;
-
-        if (!$this->isWizardDone()) {
-            $updateNeeded = true;
-        }
-
-        return $updateNeeded;
-    }
-
-    /**
-     * Second step: Ask user to install the extension
-     *
-     * @param string $inputPrefix input prefix, all names of form fields have to start with this. Append custom name in [ ... ]
-     * @return string HTML output
-     */
-    public function getUserInput($inputPrefix)
-    {
-        return '
-            <div class="panel panel-danger">
-                <div class="panel-heading">Are you really sure?</div>
-                <div class="panel-body">
-                    <p>You should install EXT:compatibility6 only if you really need it.</p>
-                    <p>This update wizard cannot check if the extension was installed before the update.</p>
-                    <p>Are you really sure, you want to install EXT:compatibility6?</p>
-                    <div class="btn-group clearfix" data-toggle="buttons">
-                        <label class="btn btn-default active">
-                            <input type="radio" name="' . $inputPrefix . '[install]" value="0" checked="checked" /> no, don\'t install
-                        </label>
-                        <label class="btn btn-default">
-                            <input type="radio" name="' . $inputPrefix . '[install]" value="1" /> yes, please install
-                        </label>
-                    </div>
-                </div>
-            </div>
-        ';
-    }
-
-    /**
-     * Performs the update if EXT:compatibility6 should be installed.
-     *
-     * @param array $databaseQueries Queries done in this update
-     * @param string $customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $requestParams = GeneralUtility::_GP('install');
-        if (!isset($requestParams['values']['compatibility6Extension']['install'])) {
-            return false;
-        }
-        $install = (int)$requestParams['values']['compatibility6Extension']['install'];
-
-        if ($install === 1) {
-            // user decided to install extension, install and mark wizard as done
-            $updateSuccessful = $this->installExtension($this->extensionKey, $customMessage);
-            if ($updateSuccessful) {
-                $this->markWizardAsDone();
-                return true;
-            }
-        } else {
-            // user decided to not install extension, mark wizard as done
-            $this->markWizardAsDone();
-            return true;
-        }
-        return $updateSuccessful;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/FileListInAccessModuleListUpdate.php b/typo3/sysext/install/Classes/Updates/FileListInAccessModuleListUpdate.php
deleted file mode 100644 (file)
index 2ba61fc..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Update module access to the file list module
- */
-class FileListInAccessModuleListUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Update module access to file list module';
-
-    /**
-     * @var array
-     */
-    protected $tableFieldArray = [
-        'be_groups' => 'groupMods',
-        'be_users' => 'userMods',
-    ];
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     *
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $description = 'The module name of the file list module has been changed. Update the access list of all backend groups and users where this module is available.';
-
-        foreach ($this->tableFieldArray as $table => $field) {
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable($table);
-            $queryBuilder->getRestrictions()->removeAll();
-            $count = $queryBuilder->count('*')
-                ->from($table)
-                ->where(
-                    $queryBuilder->expr()->inSet($field, $queryBuilder->expr()->literal('file_list'))
-                )
-                ->execute()
-                ->fetchColumn(0);
-            if ($count > 0) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Performs the database update for module access to file_list
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom messages
-     *
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        foreach ($this->tableFieldArray as $table => $field) {
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable($table);
-            $queryBuilder->getRestrictions()->removeAll();
-            $statement = $queryBuilder->select('uid', $field)
-                ->from($table)
-                ->where(
-                    $queryBuilder->expr()->inSet($field, $queryBuilder->expr()->literal('file_list'))
-                )
-                ->execute();
-            while ($row = $statement->fetch()) {
-                $moduleList = explode(',', $row[$field]);
-                $moduleList = array_combine($moduleList, $moduleList);
-                $moduleList['file_list'] = 'file_FilelistList';
-                unset($moduleList['file']);
-                $updateQueryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                    ->getQueryBuilderForTable($table);
-                $updateQueryBuilder->update($table)
-                    ->where(
-                        $updateQueryBuilder->expr()->eq(
-                            'uid',
-                            $updateQueryBuilder->createNamedParameter($row['uid'], \PDO::PARAM_INT)
-                        )
-                    )
-                    ->set($field, implode(',', $moduleList));
-                $databaseQueries[] = $updateQueryBuilder->getSQL();
-                $updateQueryBuilder->execute();
-            }
-        }
-        $this->markWizardAsDone();
-
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/FileListIsStartModuleUpdate.php b/typo3/sysext/install/Classes/Updates/FileListIsStartModuleUpdate.php
deleted file mode 100644 (file)
index 7029eb0..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-namespace TYPO3\CMS\Install\Updates;
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Update backend user setting startModule if set to "file_list"
- */
-class FileListIsStartModuleUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Update filelist user setting "startModule"';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $needsExecution = false;
-
-        $statement = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionForTable('be_users')
-            ->select(['uid', 'uc'], 'be_users');
-        while ($backendUser = $statement->fetch()) {
-            if ($backendUser['uc'] !== null) {
-                $userConfig = unserialize($backendUser['uc'], ['allowed_classes' => false]);
-                if ($userConfig['startModule'] === 'file_list') {
-                    $needsExecution = true;
-                    break;
-                }
-            }
-        }
-
-        if ($needsExecution) {
-            $description = 'The backend user setting startModule is changed for the extension filelist.'
-               . ' Update all backend users that use ext:filelist as startModule.';
-        }
-
-        return $needsExecution;
-    }
-
-    /**
-     * Performs the database update if backend user's startmodule is file_list
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getQueryBuilderForTable('be_users');
-        $statement = $queryBuilder->select('uid', 'uc')->from('be_users')->execute();
-        while ($backendUser = $statement->fetch()) {
-            if ($backendUser['uc'] !== null) {
-                $userConfig = unserialize($backendUser['uc'], ['allowed_classes' => false]);
-                if ($userConfig['startModule'] === 'file_list') {
-                    $userConfig['startModule'] = 'file_FilelistList';
-                    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                        ->getQueryBuilderForTable('be_users');
-                    $queryBuilder->update('be_users')
-                        ->where(
-                            $queryBuilder->expr()->eq(
-                                'uid',
-                                $queryBuilder->createNamedParameter($backendUser['uid'], \PDO::PARAM_INT)
-                            )
-                        )
-                        ->set('uc', serialize($userConfig));
-                    $databaseQueries[] = $queryBuilder->getSQL();
-                    $queryBuilder->execute();
-                }
-            }
-        }
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/FilesReplacePermissionUpdate.php b/typo3/sysext/install/Classes/Updates/FilesReplacePermissionUpdate.php
deleted file mode 100644 (file)
index ba6e137..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Upgrade wizard which goes through all users and groups and set the "replaceFile" permission if "writeFile" is set
- */
-class FilesReplacePermissionUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Set the "Files:replace" permission for all BE user/groups with "Files:write" set';
-
-    /**
-     * @var array
-     */
-    protected $tablesToProcess = ['be_users', 'be_groups'];
-
-    /**
-     * Checks whether updates are required.
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is required (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $needsExecution = false;
-
-        foreach ($this->tablesToProcess as $table) {
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
-            $queryBuilder->getRestrictions()->removeAll();
-            $numberOfUpgradeRows = $queryBuilder->count('uid')
-                ->from($table)
-                ->where(
-                    $queryBuilder->expr()->like(
-                        'file_permissions',
-                        $queryBuilder->createNamedParameter('%writeFile%', \PDO::PARAM_STR)
-                    ),
-                    $queryBuilder->expr()->notLike(
-                        'file_permissions',
-                        $queryBuilder->createNamedParameter('%replaceFile%', \PDO::PARAM_STR)
-                    )
-                )
-                ->execute()
-                ->fetchColumn(0);
-            if ($numberOfUpgradeRows > 0) {
-                $needsExecution = true;
-                break;
-            }
-        }
-
-        if ($needsExecution) {
-            $description = 'A new file permission was introduced regarding replacing files.'
-                . ' This update sets "Files:replace" for all BE users/groups with the permission "Files:write".';
-        }
-
-        return $needsExecution;
-    }
-
-    /**
-     * Performs the accordant updates.
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool Whether everything went smoothly or not
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        foreach ($this->tablesToProcess as $table) {
-            $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table);
-            $queryBuilder = $connection->createQueryBuilder();
-            $queryBuilder->getRestrictions()->removeAll();
-            $statement = $queryBuilder->select('uid', 'file_permissions')
-                ->from($table)
-                ->where(
-                    $queryBuilder->expr()->like(
-                        'file_permissions',
-                        $queryBuilder->createNamedParameter('%writeFile%', \PDO::PARAM_STR)
-                    ),
-                    $queryBuilder->expr()->notLike(
-                        'file_permissions',
-                        $queryBuilder->createNamedParameter('%replaceFile%', \PDO::PARAM_STR)
-                    )
-                )
-                ->execute();
-            while ($record = $statement->fetch()) {
-                $queryBuilder = $connection->createQueryBuilder();
-                $queryBuilder->update($table)
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'uid',
-                            $queryBuilder->createNamedParameter($record['uid'], \PDO::PARAM_INT)
-                        )
-                    )
-                    // Manual quoting to have the final value in $databaseQueries and not a statement placeholder
-                    ->set('file_permissions', $record['file_permissions'] . ',replaceFile');
-                $databaseQueries[] = $queryBuilder->getSQL();
-                $queryBuilder->execute();
-            }
-        }
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/LanguageIsoCodeUpdate.php b/typo3/sysext/install/Classes/Updates/LanguageIsoCodeUpdate.php
deleted file mode 100644 (file)
index a3b326e..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Update sys_language records to use the newly created
- * field language_isocode, if they have used the now deprecated
- * static_lang_isocode
- */
-class LanguageIsoCodeUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Update sys_language records to use new ISO 639-1 letter-code field';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone() || !ExtensionManagementUtility::isLoaded('static_info_tables')) {
-            return false;
-        }
-
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_language');
-        $numberOfAffectedRows = $queryBuilder->count('uid')
-            ->from('sys_language')
-            ->where(
-                $queryBuilder->expr()->eq('language_isocode', $queryBuilder->createNamedParameter('', \PDO::PARAM_STR)),
-                $queryBuilder->expr()->isNotNull('static_lang_isocode')
-            )
-            ->execute()
-            ->fetchColumn(0);
-        if ((bool)$numberOfAffectedRows) {
-            $description = 'The sys_language records have a new iso code field which removes the dependency of the'
-                . ' TYPO3 CMS Core to the extension "static_info_tables". This upgrade wizard migrates the data of the'
-                . ' existing "static_lang_isocode" field to the new DB field.';
-        }
-        return (bool)$numberOfAffectedRows;
-    }
-
-    /**
-     * Performs the database update if the old field "static_lang_isocode"
-     * is in use and populates the new field "language_isocode" with the
-     * data of the old relation.
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_language');
-        $statement = $queryBuilder->select('uid', 'language_isocode', 'static_lang_isocode')
-            ->from('sys_language')
-            ->where(
-                $queryBuilder->expr()->eq('language_isocode', $queryBuilder->createNamedParameter('', \PDO::PARAM_STR)),
-                $queryBuilder->expr()->isNotNull('static_lang_isocode')
-            )
-            ->execute();
-        while ($languageRecord = $statement->fetch()) {
-            $staticLanguageRecord = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getConnectionForTable('static_languages')
-                ->select(
-                    ['lg_iso_2'],
-                    'static_languages',
-                    ['uid' => (int)$languageRecord['static_lang_isocode']]
-                )
-                ->fetch();
-            if (!empty($staticLanguageRecord['lg_iso_2'])) {
-                $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                    ->getQueryBuilderForTable('sys_language');
-                $queryBuilder->update('sys_language')
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'uid',
-                            $queryBuilder->createNamedParameter($languageRecord['uid'], \PDO::PARAM_INT)
-                        )
-                    )
-                    ->set('language_isocode', strtolower($staticLanguageRecord['lg_iso_2']));
-                $databaseQueries[] = $queryBuilder->getSQL();
-                $queryBuilder->execute();
-            }
-        }
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/MediaceExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/MediaceExtractionUpdate.php
deleted file mode 100644 (file)
index f684900..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\Connection;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Installs and downloads EXT:mediace if needed
- */
-class MediaceExtractionUpdate extends AbstractDownloadExtensionUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Installs extension "mediace" from TER if media elements are used.';
-
-    /**
-     * @var string
-     */
-    protected $extensionKey = 'mediace';
-
-    /**
-     * @var array
-     */
-    protected $extensionDetails = [
-        'mediace' => [
-            'title' => 'Media Content Element',
-            'description' => 'The media functionality from TYPO3 6.2 and earlier can be found here.'
-                . ' This extension provides ContentObjects and Content Elements.',
-            'versionString' => '7.6.3',
-        ]
-    ];
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        $needsExecution = true;
-        if ($this->isWizardDone() || ExtensionManagementUtility::isLoaded('mediace')) {
-            $needsExecution = false;
-        } else {
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
-            $queryBuilder->getRestrictions()->removeAll()
-                 ->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-            $numberOfRecords = $queryBuilder->count('uid')
-                ->from('tt_content')
-                ->where($queryBuilder->expr()->in(
-                    'CType',
-                    $queryBuilder->createNamedParameter(['media', 'multimedia'], Connection::PARAM_STR_ARRAY)
-                ))
-                ->execute()
-                ->fetchColumn(0);
-            if ($numberOfRecords === 0) {
-                $needsExecution = false;
-            }
-        }
-
-        if ($needsExecution) {
-            $description = 'The extension "mediace" (Media Content Element) was extracted into the'
-                . ' TYPO3 Extension Repository. This update checks if media content elements are used'
-                . ' and downloads the TYPO3 Extension from the TER.';
-        }
-
-        return $needsExecution;
-    }
-
-    /**
-     * Performs the database update if media CTypes are available.
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $updateSuccessful = $this->installExtension($this->extensionKey, $customMessage);
-        if ($updateSuccessful) {
-            $this->markWizardAsDone();
-        }
-        return $updateSuccessful;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/MigrateMediaToAssetsForTextMediaCe.php b/typo3/sysext/install/Classes/Updates/MigrateMediaToAssetsForTextMediaCe.php
deleted file mode 100644 (file)
index c8c5bef..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use Doctrine\DBAL\DBALException;
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Migrate CTypes 'textmedia' to use 'assets' field instead of 'media'
- */
-class MigrateMediaToAssetsForTextMediaCe extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Migrate CTypes textmedia database field "media" to "assets"';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        // No need to join the sys_file_references table here as we can rely on the reference
-        // counter to check if the wizards has any textmedia content elements to upgrade.
-        $queryBuilder= GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getQueryBuilderForTable('tt_content');
-        $queryBuilder->getRestrictions()->removeAll();
-        $numberOfUpgradeableRecords = $queryBuilder->count('uid')
-            ->from('tt_content')
-            ->where(
-                $queryBuilder->expr()->gt('media', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-                $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('textmedia', \PDO::PARAM_STR))
-            )
-            ->execute()
-            ->fetchColumn(0);
-
-        if ($numberOfUpgradeableRecords > 0) {
-            $description = 'The extension "fluid_styled_content" is using a new database field for mediafile'
-                . ' references. This update wizard migrates these old references to use the new database field.';
-        } else {
-            $this->markWizardAsDone();
-        }
-
-        return (bool)$numberOfUpgradeableRecords;
-    }
-
-    /**
-     * Performs the database update if old mediafile references are available
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getQueryBuilderForTable('tt_content');
-        $queryBuilder->getRestrictions()->removeAll();
-        $statement = $queryBuilder->select('uid', 'media')
-            ->from('tt_content')
-            ->where(
-                $queryBuilder->expr()->gt('media', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-                $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('textmedia', \PDO::PARAM_STR))
-            )
-            ->execute();
-
-        while ($content = $statement->fetch()) {
-            $queryStack = [];
-            // we will split the update in two separate queries, since the two tables
-            // can possibly be on two different databases. We therefore have to care for
-            // a possible rollback
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable('tt_content');
-            $queryBuilder->update('tt_content')
-                ->where(
-                    $queryBuilder->expr()->eq(
-                        'uid',
-                        $queryBuilder->createNamedParameter($content['uid'], \PDO::PARAM_INT)
-                    )
-                )
-                ->set('media', 0)
-                ->set('assets', (int)$content['media']);
-            $queryStack[] = $queryBuilder->getSQL();
-            try {
-                $queryBuilder->execute();
-            } catch (DBALException $e) {
-                $customMessage = 'MySQL-Error: ' . $queryBuilder->getConnection()->errorInfo();
-                return false;
-            }
-
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable('sys_file_reference');
-            $queryBuilder->update('sys_file_reference')
-                ->where(
-                    $queryBuilder->expr()->eq(
-                        'uid_foreign',
-                        $queryBuilder->createNamedParameter($content['uid'], \PDO::PARAM_INT)
-                    ),
-                    $queryBuilder->expr()->eq(
-                        'tablenames',
-                        $queryBuilder->createNamedParameter('tt_content', \PDO::PARAM_STR)
-                    ),
-                    $queryBuilder->expr()->eq(
-                        'fieldname',
-                        $queryBuilder->createNamedParameter('media', \PDO::PARAM_STR)
-                    )
-                )
-                ->set('fieldname', 'assets');
-            $queryStack[] = $queryBuilder->getSQL();
-            try {
-                $queryBuilder->execute();
-            } catch (DBALException $e) {
-                $customMessage = 'MySQL-Error: ' . $queryBuilder->getConnection()->errorInfo();
-                // if the second query is not successful but the first was we'll have
-                // to get back to a consistent state by rolling back the first query.
-                $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                    ->getQueryBuilderForTable('tt_content');
-                $queryBuilder->update('tt_content')
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'uid',
-                            $queryBuilder->createNamedParameter($content['uid'], \PDO::PARAM_INT)
-                        )
-                    )
-                    ->set('media', (int)$content['media'])
-                    ->execute();
-                return false;
-            }
-            // only if both queries were successful, we add them to the databaseQuery array.
-            $databaseQueries = array_merge($databaseQueries, $queryStack);
-        }
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/MigrateShortcutUrlsAgainUpdate.php b/typo3/sysext/install/Classes/Updates/MigrateShortcutUrlsAgainUpdate.php
deleted file mode 100644 (file)
index 5d756a1..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Migrate backend shortcut urls
- */
-class MigrateShortcutUrlsAgainUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Migrate backend shortcut urls';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-        $shortcutsCount = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionForTable('sys_be_shortcuts')
-            ->count('uid', 'sys_be_shortcuts', []);
-        if ($shortcutsCount > 0) {
-            $description = 'Migrate old shortcut urls to the new module urls.';
-        }
-        return (bool)$shortcutsCount;
-    }
-
-    /**
-     * Performs the database update if shortcuts are available
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('sys_be_shortcuts');
-        $statement = $connection->select(['uid', 'url'], 'sys_be_shortcuts', []);
-        while ($shortcut = $statement->fetch()) {
-            $decodedUrl = urldecode($shortcut['url']);
-            $encodedUrl = str_replace(
-                [
-                    '/typo3/sysext/cms/layout/db_layout.php?&',
-                    '/typo3/sysext/cms/layout/db_layout.php?',
-                    '/typo3/file_edit.php?&',
-                    // From 7.2 to 7.4
-                    'mod.php',
-                ],
-                [
-                    '/typo3/index.php?&M=web_layout&',
-                    urlencode('/typo3/index.php?&M=web_layout&'),
-                    '/typo3/index.php?&M=file_edit&',
-                    // From 7.2 to 7.4
-                    'index.php',
-                ],
-                $decodedUrl
-            );
-            $queryBuilder = $connection->createQueryBuilder();
-            $queryBuilder->update('sys_be_shortcuts')
-                ->set('url', $encodedUrl)
-                ->where(
-                    $queryBuilder->expr()->eq(
-                        'uid',
-                        $queryBuilder->createNamedParameter($shortcut['uid'], \PDO::PARAM_INT)
-                    )
-                );
-            $databaseQueries[] = $queryBuilder->getSQL();
-            $queryBuilder->execute();
-        }
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/OpenidExtractionUpdate.php b/typo3/sysext/install/Classes/Updates/OpenidExtractionUpdate.php
deleted file mode 100644 (file)
index f83c2cd..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Installs and downloads EXT:openid if needed
- */
-class OpenidExtractionUpdate extends AbstractDownloadExtensionUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Installs extension "openid" from TER if openid is used.';
-
-    /**
-     * @var string
-     */
-    protected $extensionKey = 'openid';
-
-    /**
-     * @var array
-     */
-    protected $extensionDetails = [
-        'openid' => [
-            'title' => 'OpenID authentication',
-            'description' => 'Adds OpenID authentication to TYPO3',
-            'versionString' => '7.6.4',
-        ]
-    ];
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string $description The description for the update
-     * @return bool Whether an update is needed (true) or not (false)
-     */
-    public function checkForUpdate(&$description)
-    {
-        $updateNeeded = false;
-
-        if (!$this->isWizardDone()) {
-            $columnsExists = false;
-
-            $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
-            $schemaManager = $connectionPool->getConnectionForTable('fe_users')->getSchemaManager();
-
-            if ($schemaManager->listTableDetails('fe_users')->hasColumn('tx_openid_openid')) {
-                $columnsExists = true;
-            }
-
-            // Reinitialize schemaManager, since be_users could be on another connection
-            $schemaManager = $connectionPool->getConnectionForTable('be_users')->getSchemaManager();
-
-            if ($schemaManager->listTableDetails('be_users')->hasColumn('tx_openid_openid')) {
-                $columnsExists = true;
-            }
-            if ($columnsExists) {
-                $updateNeeded = true;
-            }
-        }
-
-        $description = 'The extension "openid" (OpenID authentication) was extracted into '
-            . 'the TYPO3 Extension Repository. This update checks if openid id used and '
-            . 'downloads the TYPO3 Extension from the TER.';
-
-        return $updateNeeded;
-    }
-
-    /**
-     * Performs the update if EXT:openid is used.
-     *
-     * @param array $databaseQueries Queries done in this update
-     * @param string $customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $updateSuccessful = $this->installExtension($this->extensionKey, $customMessage);
-        if ($updateSuccessful) {
-            $this->markWizardAsDone();
-        }
-        return $updateSuccessful;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/PageShortcutParentUpdate.php b/typo3/sysext/install/Classes/Updates/PageShortcutParentUpdate.php
deleted file mode 100644 (file)
index 43f4fa5..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-use TYPO3\CMS\Frontend\Page\PageRepository;
-
-/**
- * Update all pages which have set the shortcut mode "Parent of selected or current page"
- * (PageRepository::SHORTCUT_MODE_PARENT_PAGE)to remove a possibly selected page as this
- * would cause a different behaviour of the shortcut now since the selected page is now
- * respected in this shortcut mode.
- */
-class PageShortcutParentUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Update page shortcuts with shortcut type "Parent of selected or current page"';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
-        $queryBuilder->getRestrictions()->removeAll();
-        $numberOfAffectedPages = $queryBuilder->count('uid')
-            ->from('pages')
-            ->where(
-                $queryBuilder->expr()->neq('shortcut', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-                $queryBuilder->expr()->eq(
-                    'shortcut_mode',
-                    $queryBuilder->createNamedParameter(PageRepository::SHORTCUT_MODE_PARENT_PAGE, \PDO::PARAM_INT)
-                )
-            )
-            ->execute()
-            ->fetchColumn(0);
-
-        if ($numberOfAffectedPages > 0) {
-            $description = 'There are some shortcut pages that need to be updated in order to preserve their current'
-                . ' behaviour.';
-        }
-
-        return (bool)$numberOfAffectedPages;
-    }
-
-    /**
-     * Performs the database update
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
-        $queryBuilder->update('pages')
-            ->where(
-                $queryBuilder->expr()->neq('shortcut', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
-                $queryBuilder->expr()->eq(
-                    'shortcut_mode',
-                    $queryBuilder->createNamedParameter(PageRepository::SHORTCUT_MODE_PARENT_PAGE, \PDO::PARAM_INT)
-                )
-            )
-            ->set('shortcut', 0, false);
-        $databaseQueries[] = $queryBuilder->getSQL();
-        $queryBuilder->execute();
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/ProcessedFileChecksumUpdate.php b/typo3/sysext/install/Classes/Updates/ProcessedFileChecksumUpdate.php
deleted file mode 100644 (file)
index 923f4bd..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Registry;
-use TYPO3\CMS\Core\Resource\ProcessedFile;
-use TYPO3\CMS\Core\Resource\ResourceFactory;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Updates the checksum of sys_file_processedfile records to avoid regeneration of the thumbnails
- */
-class ProcessedFileChecksumUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = '[Optional] Update sys_file_processedfile records to match new checksum calculation.';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $execute = false;
-
-        // Check if there is a registry entry from a former run that may have been stopped
-        $registry = GeneralUtility::makeInstance(Registry::class);
-        $registryEntry = $registry->get('core', 'ProcessedFileChecksumUpdate');
-        if ($registryEntry !== null) {
-            $execute = true;
-        }
-
-        // Enable if there are non empty sys_file_processedfile entries
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getQueryBuilderForTable('sys_file_processedfile');
-        $incompleteCount = $queryBuilder->count('uid')
-            ->from('sys_file_processedfile')
-            ->orWhere(
-                $queryBuilder->expr()->notIn('identifier', $queryBuilder->createNamedParameter('', \PDO::PARAM_STR)),
-                $queryBuilder->expr()->isNull('width'),
-                $queryBuilder->expr()->isNull('height')
-            )->execute()->fetchColumn(0);
-        if ((bool)$incompleteCount) {
-            $execute = true;
-        }
-
-        if ($execute) {
-            $description = 'The checksum calculation for processed files (image thumbnails) has been changed with'
-                . ' TYPO3 CMS 7.3 and 6.2.13. This means that your processed files need to be updated, if you update'
-                . ' from versions <strong>below TYPO3 CMS 7.3 or 6.2.13</strong>.<br />'
-                . 'This can either happen on demand, when the processed file is first needed, or by executing this'
-                . ' wizard, which updates all processed images at once.<br />'
-                . '<strong>Important:</strong> If you have lots of processed files, you should prefer using this'
-                . ' wizard, otherwise this might cause a lot of work for your server.';
-        }
-
-        return $execute;
-    }
-
-    /**
-     * Performs the update
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $registry = GeneralUtility::makeInstance(Registry::class);
-        $factory = GeneralUtility::makeInstance(ResourceFactory::class);
-        $fileConnection = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionForTable('sys_file_processedfile');
-
-        $firstUid = $registry->get('core', 'ProcessedFileChecksumUpdate');
-
-        // Remove all invalid records which hold NULL values
-        $queryBuilder = $fileConnection->createQueryBuilder();
-        $queryBuilder->delete('sys_file_processedfile')
-            ->orWhere(
-                $queryBuilder->expr()->isNull('width'),
-                $queryBuilder->expr()->isNull('height')
-            )
-            ->execute();
-
-        // Get all other rows
-        $queryBuilder = $fileConnection->createQueryBuilder();
-        $queryBuilder = $queryBuilder->select('*')
-            ->from('sys_file_processedfile')
-            ->orderBy('uid');
-        // If there was a start trigger, use it
-        if ($firstUid !== null && (int)$firstUid > 0) {
-            $queryBuilder->where(
-                $queryBuilder->expr()->gt(
-                    'uid',
-                    $queryBuilder->createNamedParameter($firstUid, \PDO::PARAM_INT)
-                )
-            );
-        }
-        $statement = $queryBuilder->execute();
-        while ($processedFileRow = $statement->fetch()) {
-            try {
-                $storage = $factory->getStorageObject($processedFileRow['storage']);
-            } catch (\InvalidArgumentException $e) {
-                $storage = null;
-            }
-            if (!$storage) {
-                // Invalid storage, delete record, we can't take care of the associated file
-                $fileConnection->delete('sys_file_processedfile', ['uid' => (int)$processedFileRow['uid']]);
-                $registry->set('core', 'ProcessedFileChecksumUpdate', (int)$processedFileRow['uid']);
-                continue;
-            }
-
-            if ($storage->getDriverType() !== 'Local') {
-                // Non-local storage, we can't treat this, skip the record and mark it done
-                $registry->set('core', 'ProcessedFileChecksumUpdate', (int)$processedFileRow['uid']);
-                continue;
-            }
-
-            $configuration = $storage->getConfiguration();
-            if ($configuration['pathType'] === 'relative') {
-                $absoluteBasePath = PATH_site . $configuration['basePath'];
-            } else {
-                $absoluteBasePath = $configuration['basePath'];
-            }
-            $filePath = rtrim($absoluteBasePath, '/') . '/' . ltrim($processedFileRow['identifier'], '/');
-
-            try {
-                $originalFile = $factory->getFileObject($processedFileRow['original']);
-            } catch (\Exception $e) {
-                // No original file there anymore, delete local file
-                @unlink($filePath);
-                $fileConnection->delete('sys_file_processedfile', ['uid' => (int)$processedFileRow['uid']]);
-                $registry->set('core', 'ProcessedFileChecksumUpdate', (int)$processedFileRow['uid']);
-                continue;
-            }
-
-            $processedFileObject = new ProcessedFile($originalFile, '', [], $processedFileRow);
-
-            // calculate new checksum and name
-            $newChecksum = $processedFileObject->calculateChecksum();
-
-            // if the checksum already matches, there is nothing to do
-            if ($newChecksum !== $processedFileRow['checksum']) {
-                $newName = str_replace($processedFileRow['checksum'], $newChecksum, $processedFileRow['name']);
-                $newIdentifier = str_replace(
-                    $processedFileRow['checksum'],
-                    $newChecksum,
-                    $processedFileRow['identifier']
-                );
-                $newFilePath = str_replace($processedFileRow['checksum'], $newChecksum, $filePath);
-
-                // rename file
-                if (@rename($filePath, $newFilePath)) {
-                    // save result back into database
-                    $fields = [
-                        'tstamp' => time(),
-                        'identifier' => $newIdentifier,
-                        'name' => $newName,
-                        'checksum' => $newChecksum
-                    ];
-                    $fileConnection->update(
-                        'sys_file_processedfile',
-                        $fields,
-                        ['uid' => (int)$processedFileRow['uid']]
-                    );
-                }
-                // if the rename of the file failed, keep the record, but do not bother with it again
-            }
-            $registry->set('core', 'ProcessedFileChecksumUpdate', (int)$processedFileRow['uid']);
-        }
-
-        $registry->remove('core', 'ProcessedFileChecksumUpdate');
-        $this->markWizardAsDone();
-        return true;
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/TableFlexFormToTtContentFieldsUpdate.php b/typo3/sysext/install/Classes/Updates/TableFlexFormToTtContentFieldsUpdate.php
deleted file mode 100644 (file)
index e24bca1..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Migrate the Flexform for CType 'table' to regular fields in tt_content
- */
-class TableFlexFormToTtContentFieldsUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Migrate the Flexform for CType "table" to regular fields in tt_content';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
-        $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-        $flexFormCount = $queryBuilder->count('uid')
-            ->from('tt_content')
-            ->where(
-                $queryBuilder->expr()->eq('CType', $queryBuilder->createNamedParameter('table', \PDO::PARAM_STR)),
-                $queryBuilder->expr()->isNotNull('pi_flexform')
-            )
-            ->execute()->fetchColumn(0);
-
-        if ($flexFormCount) {
-            $description = 'The extension "frontend" uses regular database fields in the tt_content table '
-                . 'for the CType "table". Before this was a FlexForm.<br /><br />'
-                . 'This update wizard migrates these FlexForms to regular database fields.';
-        }
-
-        return (bool)$flexFormCount;
-    }
-
-    /**
-     * Performs the database update if CType 'table' still has content in pi_flexform
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('tt_content');
-        $queryBuilder = $connection->createQueryBuilder();
-        $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-        $statement = $queryBuilder->select('uid', 'pi_flexform')
-            ->from('tt_content')
-            ->where(
-                $queryBuilder->expr()->eq('Ctype', $queryBuilder->createNamedParameter('table', \PDO::PARAM_STR)),
-                $queryBuilder->expr()->isNotNull('pi_flexform')
-            )
-            ->execute();
-        while ($tableRecord = $statement->fetch()) {
-            $flexForm = $this->initializeFlexForm($tableRecord['pi_flexform']);
-            if (is_array($flexForm)) {
-                $fields = $this->mapFieldsFromFlexForm($flexForm);
-                $queryBuilder = $connection->createQueryBuilder();
-                $queryBuilder->update('tt_content')
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'uid',
-                            $queryBuilder->createNamedParameter($tableRecord['uid'], \PDO::PARAM_INT)
-                        )
-                    )
-                    ->set('pi_flexform', 'null', false);
-                foreach ($fields as $identifier => $value) {
-                    $queryBuilder->set($identifier, $value);
-                }
-                $databaseQueries[] = $queryBuilder->getSQL();
-                $queryBuilder->execute();
-            }
-        }
-
-        $this->markWizardAsDone();
-        return true;
-    }
-
-    /**
-     * Map the old FlexForm values to the new database fields
-     * and fill them with the proper data
-     *
-     * @param array $flexForm The content of the FlexForm
-     * @return array The fields which need to be updated in the tt_content table
-     */
-    protected function mapFieldsFromFlexForm($flexForm)
-    {
-        $fields = [];
-
-        $mapping = [
-            'table_caption' => [
-                'sheet' => 'sDEF',
-                'fieldName' => 'acctables_caption',
-                'default' => '',
-                'values' => 'passthrough'
-            ],
-            'table_delimiter' => [
-                'sheet' => 's_parsing',
-                'fieldName' => 'tableparsing_delimiter',
-                'default' => 124,
-                'values' => 'passthrough'
-            ],
-            'table_enclosure' => [
-                'sheet' => 's_parsing',
-                'fieldName' => 'tableparsing_quote',
-                'default' => 0,
-                'values' => 'passthrough'
-            ],
-            'table_header_position' => [
-                'sheet' => 'sDEF',
-                'fieldName' => 'acctables_headerpos',
-                'default' => 0,
-                'values' => [
-                    'top' => 1,
-                    'left' => 2
-                ]
-            ],
-            'table_tfoot' => [
-                'sheet' => 'sDEF',
-                'fieldName' => 'acctables_tfoot',
-                'default' => 0,
-                'values' => 'passthrough'
-            ],
-            'table_class' => [
-                'sheet' => 'sDEF',
-                'fieldName' => 'acctables_tableclass',
-                'default' => 0,
-                'values' => 'passthrough'
-            ]
-        ];
-
-        foreach ($mapping as $fieldName => $configuration) {
-            $flexFormValue = $this->getFlexFormValue($flexForm, $configuration['fieldName'], $configuration['sheet']);
-
-            if ((string)$flexFormValue !== '') {
-                if ($configuration['values'] === 'passthrough') {
-                    $fields[$fieldName] = $flexFormValue;
-                } elseif (is_array($configuration['values'])) {
-                    $fields[$fieldName] = $configuration['values'][$flexFormValue];
-                }
-            } else {
-                $fields[$fieldName] = $configuration['default'];
-            }
-        }
-
-        return $fields;
-    }
-
-    /**
-     * Convert the XML of the FlexForm to an array
-     *
-     * @param string|NULL $flexFormXml The XML of the FlexForm
-     * @return array|NULL Converted XML to array
-     */
-    protected function initializeFlexForm($flexFormXml)
-    {
-        $flexForm = null;
-
-        if ($flexFormXml) {
-            $flexForm = GeneralUtility::xml2array($flexFormXml);
-            if (!is_array($flexForm)) {
-                $flexForm = null;
-            }
-        }
-
-        return $flexForm;
-    }
-
-    /**
-     * @param array $flexForm The content of the FlexForm
-     * @param string $fieldName The field name to get the value for
-     * @param string $sheet The sheet on which this value is located
-     * @return string The value
-     */
-    protected function getFlexFormValue(array $flexForm, $fieldName, $sheet = 'sDEF')
-    {
-        return $flexForm['data'][$sheet]['lDEF'][$fieldName]['vDEF'];
-    }
-}
diff --git a/typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php b/typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php
deleted file mode 100644 (file)
index 91719a4..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-namespace TYPO3\CMS\Install\Updates;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Database\ConnectionPool;
-use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
-use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Migrate the workspaces notification settings to the enhanced schema.
- */
-class WorkspacesNotificationSettingsUpdate extends AbstractUpdate
-{
-    /**
-     * @var string
-     */
-    protected $title = 'Migrate the workspaces notification settings to the enhanced schema';
-
-    /**
-     * Checks if an update is needed
-     *
-     * @param string &$description The description for the update
-     * @return bool Whether an update is needed (TRUE) or not (FALSE)
-     */
-    public function checkForUpdate(&$description)
-    {
-        if (!ExtensionManagementUtility::isLoaded('workspaces') || $this->isWizardDone()) {
-            return false;
-        }
-
-        $workspacesCount = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionForTable('sys_workspace')
-            ->count(
-                'uid',
-                'sys_workspace',
-                ['deleted' => 0]
-            );
-        $stagesCount = GeneralUtility::makeInstance(ConnectionPool::class)
-            ->getConnectionForTable('sys_workspace_stage')
-            ->count(
-                'uid',
-                'sys_workspace_stage',
-                ['deleted' => 0]
-            );
-        if ($workspacesCount + $stagesCount > 0) {
-            $description = 'The workspaces notification settings have been extended'
-                . ' and need to be migrated to the new definitions. This update wizard'
-                . ' upgrades the accordant settings in the available workspaces and stages.';
-            return true;
-        } else {
-            $this->markWizardAsDone();
-        }
-
-        return false;
-    }
-
-    /**
-     * Perform the database updates for workspace records
-     *
-     * @param array &$databaseQueries Queries done in this update
-     * @param string &$customMessage Custom message
-     * @return bool
-     */
-    public function performUpdate(array &$databaseQueries, &$customMessage)
-    {
-        $workspaceConnection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('sys_workspace');
-        $queryBuilder = $workspaceConnection->createQueryBuilder();
-        $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-        $statement = $queryBuilder->select('*')->from('sys_workspace')->execute();
-        while ($workspaceRecord = $statement->fetch()) {
-            $update = $this->prepareWorkspaceUpdate($workspaceRecord);
-            if ($update !== null) {
-                $queryBuilder = $workspaceConnection->createQueryBuilder();
-                $queryBuilder->update('sys_workspace')
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'uid',
-                            $queryBuilder->createNamedParameter($workspaceRecord['uid'], \PDO::PARAM_INT)
-                        )
-                    );
-                foreach ($update as $field => $value) {
-                    $queryBuilder->set($field, $value);
-                }
-                $databaseQueries[] = $queryBuilder->getSQL();
-                $queryBuilder->execute();
-            }
-        }
-
-        $stageConnection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable('sys_workspace_stage');
-        $queryBuilder = $stageConnection->createQueryBuilder();
-        $queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
-        $statement = $queryBuilder->select('*')->from('sys_workspace_stage')->execute();
-        while ($stageRecord = $statement->fetch()) {
-            $update = $this->prepareStageUpdate($stageRecord);
-            if ($update !== null) {
-                $queryBuilder = $workspaceConnection->createQueryBuilder();
-                $queryBuilder->update('sys_workspace_stage')
-                    ->where(
-                        $queryBuilder->expr()->eq(
-                            'uid',
-                            $queryBuilder->createNamedParameter($stageRecord['uid'], \PDO::PARAM_INT)
-                        )
-                    );
-                foreach ($update as $field => $value) {
-                    $queryBuilder->set($field, $value);
-                }
-                $databaseQueries[] = $queryBuilder->getSQL();
-                $queryBuilder->execute();
-            }
-        }
-
-        $this->markWizardAsDone();
-        return true;
-    }
-
-    /**
-     * Prepares SQL updates for workspace records.
-     *
-     * @param array $workspaceRecord
-     * @return array|NULL
-     */
-    protected function prepareWorkspaceUpdate(array $workspaceRecord)
-    {
-        if (empty($workspaceRecord['uid'])) {
-            return null;
-        }
-
-        $update = [];
-        $update = $this->mapSettings($workspaceRecord, $update, 'edit', 'edit');
-        $update = $this->mapSettings($workspaceRecord, $update, 'publish', 'publish');
-        $update = $this->mapSettings($workspaceRecord, $update, 'publish', 'execute');
-        return $update;
-    }
-
-    /**
-     * Prepares SQL update for stage records.
-     *
-     * @param array $stageRecord
-     * @return array|null
-     */
-    protected function prepareStageUpdate(array $stageRecord)
-    {
-        if (empty($stageRecord['uid'])) {
-            return null;
-        }
-
-        $update = [];
-        $update = $this->mapSettings($stageRecord, $update);
-        return $update;
-    }
-
-    /**
-     * Maps settings to new meaning.
-     *
-     * @param array $record
-     * @param array $update
-     * @param string $from
-     * @param string $to
-     * @return array
-     */
-    protected function mapSettings(array $record, array $update, $from = '', $to = '')
-    {
-        $fromPrefix = ($from ? $from . '_' : '');
-        $toPrefix = ($to ? $to . '_' : '');
-
-        $settings = 0;
-        // Previous setting: "Allow notification settings during stage change"
-        if ($record[$fromPrefix . 'allow_notificaton_settings']) {
-            $settings += 1;
-        }
-        // Previous setting: "All are selected per default (can be changed)"
-        if ((int)$record[$fromPrefix . 'notification_mode'] === 0) {
-            $settings += 2;
-        }
-
-        // Custom stages: preselect responsible persons (8)
-        if (isset($record['responsible_persons'])) {
-            $preselection = 8;
-        // Workspace "edit" stage: preselect members (2)
-        } elseif ($to === 'edit') {
-            $preselection = 2;
-        // Workspace "publish" stage: preselect owners (1)
-        } elseif ($to === 'publish') {
-            $preselection = 1;
-        // Workspace "execute" stage: preselect owners (1) and members (2) as default
-        } else {
-            $preselection = 1 + 2;
-        }
-
-        $update[$toPrefix . 'allow_notificaton_settings'] = $settings;
-        $update[$toPrefix . 'notification_preselection'] = $preselection;
-
-        return $update;
-    }
-}
index a4dcc72..925f690 100644 (file)
@@ -1,22 +1,6 @@
 <?php
 defined('TYPO3_MODE') or die();
 
-// TYPO3 CMS 7
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['accessRightParameters'] = \TYPO3\CMS\Install\Updates\AccessRightParametersUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['languageIsoCode'] = \TYPO3\CMS\Install\Updates\LanguageIsoCodeUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['PageShortcutParent'] = \TYPO3\CMS\Install\Updates\PageShortcutParentUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['backendShortcuts'] = \TYPO3\CMS\Install\Updates\MigrateShortcutUrlsAgainUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['processedFilesChecksum'] = \TYPO3\CMS\Install\Updates\ProcessedFileChecksumUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['filesReplacePermission'] = \TYPO3\CMS\Install\Updates\FilesReplacePermissionUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['tableCType'] = \TYPO3\CMS\Install\Updates\TableFlexFormToTtContentFieldsUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\TYPO3\CMS\Install\Updates\FileListInAccessModuleListUpdate::class] = \TYPO3\CMS\Install\Updates\FileListInAccessModuleListUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\TYPO3\CMS\Install\Updates\FileListIsStartModuleUpdate::class] = \TYPO3\CMS\Install\Updates\FileListIsStartModuleUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\TYPO3\CMS\Install\Updates\WorkspacesNotificationSettingsUpdate::class] = \TYPO3\CMS\Install\Updates\WorkspacesNotificationSettingsUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['textmediaAssets'] = \TYPO3\CMS\Install\Updates\MigrateMediaToAssetsForTextMediaCe::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['compatibility6Extension'] = \TYPO3\CMS\Install\Updates\Compatibility6ExtractionUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['mediaceExtension'] = \TYPO3\CMS\Install\Updates\MediaceExtractionUpdate::class;
-$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['openidExtension'] = \TYPO3\CMS\Install\Updates\OpenidExtractionUpdate::class;
-
 $signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
 $signalSlotDispatcher->connect(
     \TYPO3\CMS\Install\Service\SqlExpectedSchemaService::class,
@@ -36,7 +20,7 @@ unset($signalSlotDispatcher);
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\TYPO3\CMS\Install\Updates\ExtensionManagerTables::class]
     = \TYPO3\CMS\Install\Updates\ExtensionManagerTables::class;
 
-// Add update wizards below this line
+// TYPO3 CMS 8
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\TYPO3\CMS\Install\Updates\WizardDoneToRegistry::class]
     = \TYPO3\CMS\Install\Updates\WizardDoneToRegistry::class;
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update'][\TYPO3\CMS\Install\Updates\BackendUserStartModuleUpdate::class]
@@ -73,3 +57,5 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['formLegacyEx
     = \TYPO3\CMS\Install\Updates\FormLegacyExtractionUpdate::class;
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/install']['update']['rtehtmlareaExtension']
     = \TYPO3\CMS\Install\Updates\RteHtmlAreaExtractionUpdate::class;
+
+// Add update wizards below this line