2 declare(strict_types = 1);
183 'databaseColumnMappings' => [],
199 if (isset($this->options[
'table'])) {
205 foreach (
$options as $optionKey => $option) {
206 $this->options = $option;
218 protected function prepareData(array $elementsConfiguration, array $databaseData)
220 foreach ($this->
getFormValues() as $elementIdentifier => $elementValue) {
222 ($elementValue ===
null || $elementValue ===
'')
223 && isset($elementsConfiguration[$elementIdentifier])
224 && isset($elementsConfiguration[$elementIdentifier][
'skipIfValueIsEmpty'])
225 && $elementsConfiguration[$elementIdentifier][
'skipIfValueIsEmpty'] ===
true
233 || !isset($elementsConfiguration[$elementIdentifier])
234 || !isset($elementsConfiguration[$elementIdentifier][
'mapOnDatabaseColumn'])
240 if (isset($elementsConfiguration[$elementIdentifier][
'saveFileIdentifierInsteadOfUid'])) {
241 $saveFileIdentifierInsteadOfUid = (bool)$elementsConfiguration[$elementIdentifier][
'saveFileIdentifierInsteadOfUid'];
243 $saveFileIdentifierInsteadOfUid =
false;
246 if ($saveFileIdentifierInsteadOfUid) {
247 $elementValue = $elementValue->getOriginalResource()->getCombinedIdentifier();
249 $elementValue = $elementValue->getOriginalResource()->getProperty(
'uid_local');
251 } elseif (is_array($elementValue)) {
252 $elementValue = implode(
',', $elementValue);
253 } elseif ($elementValue instanceof \DateTimeInterface) {
254 $format = $elementsConfiguration[$elementIdentifier][
'dateFormat'] ??
'U';
255 $elementValue = $elementValue->format($format);
258 $databaseData[$elementsConfiguration[$elementIdentifier][
'mapOnDatabaseColumn']] = $elementValue;
260 return $databaseData;
268 protected function process(
int $iterationCount)
273 $elementsConfiguration = $this->
parseOption(
'elements');
274 $databaseColumnMappingsConfiguration = $this->
parseOption(
'databaseColumnMappings');
276 $this->databaseConnection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table);
279 foreach ($databaseColumnMappingsConfiguration as $databaseColumnName => $databaseColumnConfiguration) {
280 $value = $this->
parseOption(
'databaseColumnMappings.' . $databaseColumnName .
'.value');
283 && $databaseColumnConfiguration[
'skipIfValueIsEmpty'] ===
true
288 $databaseData[$databaseColumnName] = $value;
291 $databaseData = $this->
prepareData($elementsConfiguration, $databaseData);
304 protected function saveToDatabase(array $databaseData,
string $table,
int $iterationCount)
306 if (!empty($databaseData)) {
307 if ($this->options[
'mode'] ===
'update') {
308 $whereClause = $this->options[
'whereClause'];
309 foreach ($whereClause as $columnName => $columnValue) {
310 $whereClause[$columnName] = $this->
parseOption(
'whereClause.' . $columnName);
312 $this->databaseConnection->update(
318 $this->databaseConnection->insert($table, $databaseData);
319 $insertedUid = (int)$this->databaseConnection->lastInsertId($table);
320 $this->finisherContext->getFinisherVariableProvider()->add(
321 $this->shortFinisherIdentifier,
322 'insertedUids.' . $iterationCount,
338 $this->options[
'mode'] ===
'update'
339 && empty($this->options[
'whereClause'])
342 'An empty option "whereClause" is not allowed in update mode.',
355 return $this->finisherContext->getFormValues();
369 ->getFormDefinition()
370 ->getElementByIdentifier($elementIdentifier);