diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2022-09-16 15:15:11 +0100 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2022-09-16 15:15:11 +0100 |
| commit | 6c5ec5a2a844b94999976fc1cd158f8a62d75fa5 (patch) | |
| tree | 10363c683f2f9c794f302dc9d60be73beefb9389 /app/Http/RequestHandlers/ImportGedcomAction.php | |
| parent | 7ea6201e1297799caa61d71d61a338d07855332c (diff) | |
| download | webtrees-6c5ec5a2a844b94999976fc1cd158f8a62d75fa5.tar.gz webtrees-6c5ec5a2a844b94999976fc1cd158f8a62d75fa5.tar.bz2 webtrees-6c5ec5a2a844b94999976fc1cd158f8a62d75fa5.zip | |
Fix: #4525 - error when no geographic data input file supplied
Diffstat (limited to 'app/Http/RequestHandlers/ImportGedcomAction.php')
| -rw-r--r-- | app/Http/RequestHandlers/ImportGedcomAction.php | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/app/Http/RequestHandlers/ImportGedcomAction.php b/app/Http/RequestHandlers/ImportGedcomAction.php index 724bfac851..83f5771f21 100644 --- a/app/Http/RequestHandlers/ImportGedcomAction.php +++ b/app/Http/RequestHandlers/ImportGedcomAction.php @@ -67,48 +67,49 @@ class ImportGedcomAction implements RequestHandlerInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { - $tree = Validator::attributes($request)->tree(); - - $data_filesystem = Registry::filesystem()->data(); - - $params = (array) $request->getParsedBody(); - $source = $params['source']; - $keep_media = (bool) ($params['keep_media'] ?? false); - $WORD_WRAPPED_NOTES = (bool) ($params['WORD_WRAPPED_NOTES'] ?? false); - $GEDCOM_MEDIA_PATH = $params['GEDCOM_MEDIA_PATH']; - $encoding = $params['encoding'] ?? ''; + $tree = Validator::attributes($request)->tree(); + $keep_media = Validator::parsedBody($request)->boolean('keep_media', false); + $word_wrapped_notes = Validator::parsedBody($request)->boolean('WORD_WRAPPED_NOTES', false); + $gedcom_media_path = Validator::parsedBody($request)->string('GEDCOM_MEDIA_PATH'); + $encodings = ['' => ''] + Registry::encodingFactory()->list(); + $encoding = Validator::parsedBody($request)->isInArrayKeys($encodings)->string('encoding'); + $source = Validator::parsedBody($request)->isInArray(['client', 'server'])->string('source'); // Save these choices as defaults $tree->setPreference('keep_media', $keep_media ? '1' : '0'); - $tree->setPreference('WORD_WRAPPED_NOTES', $WORD_WRAPPED_NOTES ? '1' : '0'); - $tree->setPreference('GEDCOM_MEDIA_PATH', $GEDCOM_MEDIA_PATH); + $tree->setPreference('WORD_WRAPPED_NOTES', $word_wrapped_notes ? '1' : '0'); + $tree->setPreference('GEDCOM_MEDIA_PATH', $gedcom_media_path); if ($source === 'client') { - $upload = $request->getUploadedFiles()['tree_name'] ?? null; + $client_file = $request->getUploadedFiles()['client_file'] ?? null; - if ($upload === null || $upload->getError() === UPLOAD_ERR_NO_FILE) { + if ($client_file === null || $client_file->getError() === UPLOAD_ERR_NO_FILE) { FlashMessages::addMessage(I18N::translate('No GEDCOM file was received.'), 'danger'); - } elseif ($upload->getError() !== UPLOAD_ERR_OK) { - throw new FileUploadException($upload); - } else { - $this->tree_service->importGedcomFile($tree, $upload->getStream(), basename($upload->getClientFilename()), $encoding); + + return redirect(route(ImportGedcomPage::class, ['tree' => $tree->name()])); + } + + if ($client_file->getError() !== UPLOAD_ERR_OK) { + throw new FileUploadException($client_file); } + + $this->tree_service->importGedcomFile($tree, $client_file->getStream(), basename($client_file->getClientFilename()), $encoding); } if ($source === 'server') { - $basename = basename($params['tree_name'] ?? ''); + $server_file = Validator::parsedBody($request)->string('server_file'); - if ($basename === '') { + if ($server_file === '') { FlashMessages::addMessage(I18N::translate('No GEDCOM file was received.'), 'danger'); - } else { - $resource = $data_filesystem->readStream($basename); - $stream = $this->stream_factory->createStreamFromResource($resource); - $this->tree_service->importGedcomFile($tree, $stream, $basename, $encoding); + + return redirect(route(ImportGedcomPage::class, ['tree' => $tree->name()])); } - } - $url = route(ManageTrees::class, ['tree' => $tree->name()]); + $resource = Registry::filesystem()->data()->readStream($server_file); + $stream = $this->stream_factory->createStreamFromResource($resource); + $this->tree_service->importGedcomFile($tree, $stream, $server_file, $encoding); + } - return redirect($url); + return redirect(route(ManageTrees::class, ['tree' => $tree->name()])); } } |
