‪TYPO3CMS  ‪main
SysTemplateNoWorkspaceMigration.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
22 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
26 
31 #[UpgradeWizard('sysTemplateNoWorkspaceMigration')]
33 {
34  private const ‪TABLE_NAME = 'sys_template';
35 
36  public function ‪getTitle(): string
37  {
38  return 'Set workspace records in table "sys_template" to deleted.';
39  }
40 
41  public function ‪getDescription(): string
42  {
43  return 'Table "sys_template" is no longer workspace aware.' .
44  ' Existing database rows having field "t3ver_wsid" > 0 are set to "deleted" = 1 to not' .
45  ' leak into live when the workspace related columns are deleted.';
46  }
47 
48  public function ‪getPrerequisites(): array
49  {
50  return [
51  DatabaseUpdatedPrerequisite::class,
52  ];
53  }
54 
55  public function ‪updateNecessary(): bool
56  {
58  return false;
59  }
60  $queryBuilder = $this->‪getPreparedQueryBuilder();
61  $numberOfNotDeletedWorkspaceRows = (int)$queryBuilder
62  ->count('uid')
63  ->from(self::TABLE_NAME)
64  ->where($queryBuilder->expr()->gt('t3ver_wsid', $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)))
65  ->executeQuery()
66  ->fetchOne();
67  if ($numberOfNotDeletedWorkspaceRows > 0) {
68  return true;
69  }
70  return false;
71  }
72 
73  public function ‪executeUpdate(): bool
74  {
76  return true;
77  }
78  $queryBuilder = $this->‪getPreparedQueryBuilder();
79  $queryBuilder->update(self::TABLE_NAME)
80  ->where(
81  $queryBuilder->expr()->gt('t3ver_wsid', $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)),
82  $queryBuilder->expr()->eq('deleted', $queryBuilder->createNamedParameter(0, ‪Connection::PARAM_INT)),
83  )
84  ->set('deleted', 1, true, ‪Connection::PARAM_INT)
85  ->executeStatement();
86  return true;
87  }
88 
89  private function ‪sysTemplateTableExists(): bool
90  {
91  $schemaManager = $this->‪getConnectionPool()->getConnectionForTable(self::TABLE_NAME)->createSchemaManager();
92  return $schemaManager->tablesExist([self::TABLE_NAME]);
93  }
94 
95  private function ‪sysTemplateT3verWsidFieldExists(): bool
96  {
97  $schemaManager = $this->‪getConnectionPool()->getConnectionForTable(self::TABLE_NAME)->createSchemaManager();
98  $tableColumns = $schemaManager->listTableColumns(self::TABLE_NAME);
99  $fieldExists = false;
100  foreach ($tableColumns as $column) {
101  if ($column->getName() === 't3ver_wsid') {
102  $fieldExists = true;
103  break;
104  }
105  }
106  return $fieldExists;
107  }
108 
109  private function ‪getPreparedQueryBuilder(): QueryBuilder
110  {
111  $queryBuilder = $this->‪getConnectionPool()->getQueryBuilderForTable(self::TABLE_NAME);
112  $queryBuilder->getRestrictions()->removeAll()->add(new ‪DeletedRestriction());
113  return $queryBuilder;
114  }
115 
117  {
118  return GeneralUtility::makeInstance(ConnectionPool::class);
119  }
120 }
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\Install\Attribute\UpgradeWizard
Definition: UpgradeWizard.php:25
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\sysTemplateTableExists
‪sysTemplateTableExists()
Definition: SysTemplateNoWorkspaceMigration.php:89
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\getDescription
‪getDescription()
Definition: SysTemplateNoWorkspaceMigration.php:41
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration
Definition: SysTemplateNoWorkspaceMigration.php:33
‪TYPO3\CMS\Install\Updates
Definition: LegacyClassesForIde.php:22
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\getTitle
‪getTitle()
Definition: SysTemplateNoWorkspaceMigration.php:36
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\getPreparedQueryBuilder
‪getPreparedQueryBuilder()
Definition: SysTemplateNoWorkspaceMigration.php:109
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\getPrerequisites
‪getPrerequisites()
Definition: SysTemplateNoWorkspaceMigration.php:48
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Install\Updates\UpgradeWizardInterface
Definition: UpgradeWizardInterface.php:24
‪TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction
Definition: DeletedRestriction.php:28
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\sysTemplateT3verWsidFieldExists
‪sysTemplateT3verWsidFieldExists()
Definition: SysTemplateNoWorkspaceMigration.php:95
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\updateNecessary
‪updateNecessary()
Definition: SysTemplateNoWorkspaceMigration.php:55
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\executeUpdate
‪executeUpdate()
Definition: SysTemplateNoWorkspaceMigration.php:73
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\TABLE_NAME
‪const TABLE_NAME
Definition: SysTemplateNoWorkspaceMigration.php:34
‪TYPO3\CMS\Install\Updates\SysTemplateNoWorkspaceMigration\getConnectionPool
‪getConnectionPool()
Definition: SysTemplateNoWorkspaceMigration.php:116