Skip to content
Snippets Groups Projects
Commit c17824b9 authored by Marc Egger's avatar Marc Egger
Browse files

FormAsFile.php: keep old form during import and delete only at the end

parent bf85b689
No related branches found
No related tags found
2 merge requests!302Develop,!296Marc: Form/Report As File, Path class, Config class, Typo3 v9 compatability
Pipeline #3978 failed
......@@ -85,10 +85,9 @@ class FormAsFile
}
}
// Delete old form with that name from DB if it exists.
if (array_key_exists(F_ID, $formFromDb)) {
self::deleteFormDBWithId($formFromDb[F_ID], $database);
}
// keep old form ID for deletion later & define temporary name for new form
$formIdOld = $formFromDb[F_ID] ?? null;
$newFormTempName = $formName . '_FAILED_IMPORT'; // will be renamed at the end
// Insert new Form to DB (after filtering allowed columns and adding column 'name')
$formSchema = $database->getTableDefinition(TABLE_NAME_FORM);
......@@ -96,17 +95,18 @@ class FormAsFile
$insertValues = array_filter($formFromFile, function ($columnName) use ($formColumns) {
return $columnName !== F_ID && in_array($columnName, $formColumns);
}, ARRAY_FILTER_USE_KEY); // array(column => value)
$insertValues[F_NAME] = $formName;
$insertValues[F_NAME] = $newFormTempName;
$insertValues[F_FILE_STATS] = $fileStatsNew;
list($sqlFormInsert, $parameterArrayFormInsert) = SqlQuery::insertRecord(TABLE_NAME_FORM, $insertValues);
$formId = $database->sql($sqlFormInsert, ROW_REGULAR, $parameterArrayFormInsert);
$formIdNew = $database->sql($sqlFormInsert, ROW_REGULAR, $parameterArrayFormInsert);
// Delete stale formElements with the new form id (these should not exist, but better make sure)
self::deleteFormElementsDBWithFormId($formId, $database);
self::deleteFormElementsDBWithFormId($formIdNew, $database);
// Insert FormElements to DB and collect container ids
$containerIds = []; // array(container_name => id)
foreach ($formFromFile[F_FILE_FORM_ELEMENT] as &$formElementFromFile) {
$feId = self::insertFormElement($formElementFromFile, $formId, $database);
$feId = self::insertFormElement($formElementFromFile, $formIdNew, $database);
$formElementFromFile[FE_ID] = $feId;
if ($formElementFromFile[FE_CLASS] === FE_CLASS_CONTAINER) {
$containerIds[$formElementFromFile[FE_NAME]] = $feId;
......@@ -127,8 +127,13 @@ class FormAsFile
}
}
// Update column fileStats if everything went well
list($sql, $parameterArray) = SqlQuery::updateRecord(TABLE_NAME_FORM, [F_FILE_STATS => $fileStatsNew], $formId);
// Delete old form if everything went well
if ($formIdOld !== null) {
self::deleteFormDBWithId($formIdOld, $database);
}
// Replace temporary name of new form
list($sql, $parameterArray) = SqlQuery::updateRecord(TABLE_NAME_FORM, [F_NAME => $formName], $formIdNew);
$database->sql($sql, ROW_REGULAR, $parameterArray);
return true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment