<?php namespace SGalinski\SgMail\Updates; /*************************************************************** * Copyright notice * * (c) sgalinski Internet Services (https://www.sgalinski.de) * * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is * free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * * This script is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Install\Updates\AbstractUpdate; /** * Makes german templates the default and former default as english templates */ class UpdateGermanAsDefault extends AbstractUpdate { /** * @var string */ protected $identifier = 'tx_sgmail_update_german_as_default'; /** * @var string */ protected $title = 'Makes german templates the default and former default as english templates. WARNING: ONLY EXECUTE THIS IF IT MAKES SENSE FOR YOUR TYPO3 INSTANCE'; /** * @var \TYPO3\CMS\Extbase\Object\ObjectManager */ protected $objectManager; /** * @var string */ protected $table = 'tx_sgmail_domain_model_template'; /** * 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) { $description = 'Update if there are german templates'; $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table); $queryBuilder->getRestrictions()->removeAll(); $rowCount = $queryBuilder->select('*') ->from($this->table) ->where( $queryBuilder->expr()->eq('language', $queryBuilder->createNamedParameter('de')) ) ->execute()->rowCount(); if ($rowCount > 0) { return TRUE; } return !(!FALSE || $this->isWizardDone()); } /** * Performs the according updates. * * @param array &$dbQueries Queries done in this update * @param mixed &$customMessages Custom messages * @return bool Whether everything went smoothly or not */ public function performUpdate(array &$dbQueries, &$customMessages) { $dbQueries = []; $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table); $queryBuilder->getRestrictions()->removeAll(); $resultGerman = $queryBuilder->select('uid') ->from($this->table) ->where( $queryBuilder->expr()->eq('language', $queryBuilder->createNamedParameter('de')) ) ->execute()->fetchAll(); $dbQueries[] = $queryBuilder->getSQL(); $resultDefault = $queryBuilder->select('uid') ->from($this->table) ->where( $queryBuilder->expr()->eq('language', $queryBuilder->createNamedParameter('default')) ) ->execute()->fetchAll(); $dbQueries[] = $queryBuilder->getSQL(); /** @var array $resultGerman */ foreach ($resultGerman as $row) { $queryBuilder->update($this->table) ->where( $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($row[0], \PDO::PARAM_INT)) ) ->set('language', 'default', TRUE) ->execute(); $dbQueries[] = $queryBuilder->getSQL(); } /** @var array $resultGerman */ foreach ($resultDefault as $row) { $queryBuilder->update($this->table) ->where( $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($row[0], \PDO::PARAM_INT)) ) ->set('language', 'en', TRUE) ->execute(); $dbQueries[] = $queryBuilder->getSQL(); } $this->markWizardAsDone(); return TRUE; } }