From 28e85bf8e61a002dd995bf2024d53d7cfe1740f9 Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Sat, 20 Aug 2016 16:46:49 +0200
Subject: [PATCH] [TASK] Doctrine: Migrate WorkspacesNotificationSettingsUpdate

Change-Id: If49df1f82e1571c0c9c40806734dd7486fc22335
Resolves: #77520
Releases: master
Reviewed-on: https://review.typo3.org/49519
Tested-by: Bamboo TYPO3com <info@typo3.com>
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
---
 .../WorkspacesNotificationSettingsUpdate.php  | 73 ++++++++++++-------
 1 file changed, 45 insertions(+), 28 deletions(-)

diff --git a/typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php b/typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php
index cc764005e340..bc6665350949 100644
--- a/typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php
+++ b/typo3/sysext/install/Classes/Updates/WorkspacesNotificationSettingsUpdate.php
@@ -14,7 +14,10 @@ namespace TYPO3\CMS\Install\Updates;
  * 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.
@@ -34,30 +37,28 @@ class WorkspacesNotificationSettingsUpdate extends AbstractUpdate
      */
     public function checkForUpdate(&$description)
     {
-        if (!ExtensionManagementUtility::isLoaded('workspaces')) {
+        if (!ExtensionManagementUtility::isLoaded('workspaces') || $this->isWizardDone()) {
             return false;
         }
 
-        if ($this->isWizardDone()) {
-            return false;
-        }
-
-        $workspacesCount = $this->getDatabaseConnection()->exec_SELECTcountRows(
-            'uid',
-            'sys_workspace',
-            'deleted=0'
-        );
-
-        $stagesCount = $this->getDatabaseConnection()->exec_SELECTcountRows(
-            'uid',
-            'sys_workspace_stage',
-            'deleted=0'
-        );
-
+        $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 availble workspaces and stages.';
+                . ' upgrades the accordant settings in the available workspaces and stages.';
             return true;
         } else {
             $this->markWizardAsDone();
@@ -75,23 +76,39 @@ class WorkspacesNotificationSettingsUpdate extends AbstractUpdate
      */
     public function performUpdate(array &$databaseQueries, &$customMessages)
     {
-        $databaseConnection = $this->getDatabaseConnection();
-
-        $workspaceRecords = $databaseConnection->exec_SELECTgetRows('*', 'sys_workspace', 'deleted=0');
-        foreach ($workspaceRecords as $workspaceRecord) {
+        $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) {
-                $databaseConnection->exec_UPDATEquery('sys_workspace', 'uid=' . (int)$workspaceRecord['uid'], $update);
-                $databaseQueries[] = $databaseConnection->debug_lastBuiltQuery;
+                $queryBuilder = $workspaceConnection->createQueryBuilder();
+                $queryBuilder->update('sys_workspace')
+                    ->where($queryBuilder->expr()->eq('uid', (int)$workspaceRecord['uid']));
+                foreach ($update as $field => $value) {
+                    $queryBuilder->set($field, $queryBuilder->quote($value), false);
+                }
+                $databaseQueries[] = $queryBuilder->getSQL();
+                $queryBuilder->execute();
             }
         }
 
-        $stageRecords = $databaseConnection->exec_SELECTgetRows('*', 'sys_workspace_stage', 'deleted=0');
-        foreach ($stageRecords as $stageRecord) {
+        $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) {
-                $databaseConnection->exec_UPDATEquery('sys_workspace_stage', 'uid=' . (int)$stageRecord['uid'], $update);
-                $databaseQueries[] = $databaseConnection->debug_lastBuiltQuery;
+                $queryBuilder = $workspaceConnection->createQueryBuilder();
+                $queryBuilder->update('sys_workspace_stage')
+                    ->where($queryBuilder->expr()->eq('uid', (int)$stageRecord['uid']));
+                foreach ($update as $field => $value) {
+                    $queryBuilder->set($field, $queryBuilder->quote($value), false);
+                }
+                $databaseQueries[] = $queryBuilder->getSQL();
+                $queryBuilder->execute();
             }
         }
 
-- 
GitLab