From b596fd50bb244fc37c34d61694a7d064d626bafe Mon Sep 17 00:00:00 2001 From: Tymoteusz Motylewski Date: Thu, 26 Jul 2018 17:34:31 +0200 Subject: [PATCH] Use DataHandler commands to create and update data for General Handler Instead of direct sql inserts and updates. --- .../TableHandler/AbstractTableHandler.php | 45 +++++++++++++++++++ .../TcaDataGenerator/TableHandler/General.php | 13 ++---- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/Classes/TcaDataGenerator/TableHandler/AbstractTableHandler.php b/Classes/TcaDataGenerator/TableHandler/AbstractTableHandler.php index 014e509d..333c5e25 100644 --- a/Classes/TcaDataGenerator/TableHandler/AbstractTableHandler.php +++ b/Classes/TcaDataGenerator/TableHandler/AbstractTableHandler.php @@ -17,6 +17,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\DataHandling\DataHandler; +use TYPO3\CMS\Core\Utility\StringUtility; use TYPO3\CMS\Styleguide\TcaDataGenerator\RecordFinder; /** @@ -74,6 +75,50 @@ protected function generateTranslatedRecords(string $tableName, $fieldValues) } } + /** + * Creates new record using DataHandler + * + * @param string $tableName + * @param array $fieldValues + * @return int + */ + protected function insertRecord(string $tableName, array $fieldValues) + { + $UidPlaceholder = StringUtility::getUniqueId('NEW'); + + $dataMap = [ + $tableName => [ + $UidPlaceholder => $fieldValues + ] + ]; + $dataHandler = GeneralUtility::makeInstance(DataHandler::class); + $dataHandler->start($dataMap, []); + $dataHandler->process_datamap(); + return (int)$dataHandler->substNEWwithIDs[$UidPlaceholder]; + } + + + /** + * Updates a record using datahandler + * + * @param string $tableName + * @param int $uid + * @param array $fieldValues + * @return int + */ + protected function updateRecord(string $tableName, $uid, array $fieldValues) + { + $dataMap = [ + $tableName => [ + $uid => $fieldValues + ] + ]; + $dataHandler = GeneralUtility::makeInstance(DataHandler::class); + $dataHandler->start($dataMap, []); + $dataHandler->process_datamap(); + return (int)$uid; + } + /** * @param string $tableName * @param int $uid diff --git a/Classes/TcaDataGenerator/TableHandler/General.php b/Classes/TcaDataGenerator/TableHandler/General.php index fc7bad25..b281fae3 100644 --- a/Classes/TcaDataGenerator/TableHandler/General.php +++ b/Classes/TcaDataGenerator/TableHandler/General.php @@ -41,7 +41,6 @@ public function match(string $tableName): bool * Adds rows * * @param string $tableName - * @return string */ public function handle(string $tableName) { @@ -53,15 +52,11 @@ public function handle(string $tableName) $fieldValues = [ 'pid' => $recordFinder->findPidOfMainTableRecord($tableName), ]; - $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($tableName); - $connection->insert($tableName, $fieldValues); - $fieldValues['uid'] = $connection->lastInsertId($tableName); + $uid = $this->insertRecord($tableName, $fieldValues); + $fieldValues['uid'] = $uid; + $fieldValues = $recordData->generate($tableName, $fieldValues); - $connection->update( - $tableName, - $fieldValues, - [ 'uid' => $fieldValues['uid'] ] - ); + $this->updateRecord($tableName, $uid, $fieldValues); $this->generateTranslatedRecords($tableName, $fieldValues); }