fix: [command:importer] FIxed several bug preventing the save to happen

develop-unstable
Sami Mokaddem 2023-01-17 09:28:27 +01:00
parent a211aea267
commit 433d18c176
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
1 changed files with 19 additions and 15 deletions

View File

@ -190,7 +190,7 @@ class ImporterCommand extends Command
if (is_null($metaEntity)) { if (is_null($metaEntity)) {
$metaEntity = $this->MetaFields->newEmptyEntity(); $metaEntity = $this->MetaFields->newEmptyEntity();
$metaEntity->field = $fieldName; $metaEntity->field = $fieldName;
$metaEntity->scope = $table->metaFields; $metaEntity->scope = $table->getBehavior('MetaFields')->getScope();
$metaEntity->meta_template_id = $metaTemplate->id; $metaEntity->meta_template_id = $metaTemplate->id;
if (isset($metaTemplateFieldsMapping[$fieldName])) { // a meta field template must exists if (isset($metaTemplateFieldsMapping[$fieldName])) { // a meta field template must exists
$metaEntity->meta_template_field_id = $metaTemplateFieldsMapping[$fieldName]; $metaEntity->meta_template_field_id = $metaTemplateFieldsMapping[$fieldName];
@ -248,6 +248,7 @@ class ImporterCommand extends Command
{ {
foreach ($entity->metaFields as $i => $metaEntity) { foreach ($entity->metaFields as $i => $metaEntity) {
$metaEntity->parent_id = $entity->id; $metaEntity->parent_id = $entity->id;
$metaEntity->setNew(true);
if ($metaEntity->hasErrors() || is_null($metaEntity->value)) { if ($metaEntity->hasErrors() || is_null($metaEntity->value)) {
$this->io->error(json_encode(['entity' => $metaEntity, 'errors' => $metaEntity->getErrors()], JSON_PRETTY_PRINT)); $this->io->error(json_encode(['entity' => $metaEntity, 'errors' => $metaEntity->getErrors()], JSON_PRETTY_PRINT));
unset($entity->metaFields[$i]); unset($entity->metaFields[$i]);
@ -289,35 +290,35 @@ class ImporterCommand extends Command
$values = array_map("self::{$fieldConfig['massage']}", $values); $values = array_map("self::{$fieldConfig['massage']}", $values);
} }
if (isset($defaultFields[$key])) { if (isset($defaultFields[$key])) {
$data[$key] = $values; $data[$key] = array_map('trim', $values);
} else { } else {
$data['metaFields'][$key] = $values; $data['metaFields'][$key] = array_map('trim', $values);
} }
} }
return $this->invertArray($data); return $this->invertArray($data);
} }
private function extractDataFromCSV($defaultFields, $config, $source) private function extractDataFromCSV($defaultFields, $config, $source)
{
$csvData = $this->csvToAssociativeArray($source);
return $this->extractDataFromJSON($defaultFields, $config, $csvData);
}
private function csvToAssociativeArray($source): array
{ {
$rows = array_map('str_getcsv', explode(PHP_EOL, $source)); $rows = array_map('str_getcsv', explode(PHP_EOL, $source));
if (count($rows[0]) != count($rows[1])) { if (count($rows[0]) != count($rows[1])) {
$this->io->error('Error while parsing source data. CSV doesn\'t have the same number of columns'); $this->io->error('Error while parsing source data. CSV doesn\'t have the same number of columns');
die(1); die(1);
} }
$header = array_shift($rows); $csvData = [];
$data = array(); $headers = array_shift($rows);
foreach($rows as $row) { foreach ($rows as $row) {
$dataRow = []; if (count($headers) == count($row)) {
foreach ($header as $i => $headerField) { $csvData[] = array_combine($headers, $row);
if (isset($defaultFields[$headerField])) {
$dataRow[$headerField] = $row[$i];
} else {
$dataRow['metaFields'][$headerField] = $row[$i];
}
} }
$data[] = $dataRow;
} }
return $data; return $csvData;
} }
private function lockAccess(&$entity) private function lockAccess(&$entity)
@ -477,6 +478,9 @@ class ImporterCommand extends Command
foreach ($entities as $entity) { foreach ($entities as $entity) {
$row = []; $row = [];
foreach ($tableHeader as $key) { foreach ($tableHeader as $key) {
if (in_array($key, $entity->getVirtual())) {
continue;
}
$subKeys = explode('.', $key); $subKeys = explode('.', $key);
if (in_array('metaFields', $subKeys)) { if (in_array('metaFields', $subKeys)) {
$found = false; $found = false;