diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/Elements/MultimediaFormat.php | 9 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/AddMediaFileAction.php | 3 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateLocationAction.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateMediaObjectAction.php | 10 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateMediaObjectFromFile.php | 22 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateNoteAction.php | 13 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateRepositoryAction.php | 21 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateSourceAction.php | 39 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateSubmissionAction.php | 5 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/CreateSubmitterAction.php | 22 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/EditMediaFileAction.php | 5 | ||||
| -rw-r--r-- | app/Services/MediaFileService.php | 18 |
12 files changed, 92 insertions, 82 deletions
diff --git a/app/Elements/MultimediaFormat.php b/app/Elements/MultimediaFormat.php index 8767afcee1..4584fa673c 100644 --- a/app/Elements/MultimediaFormat.php +++ b/app/Elements/MultimediaFormat.php @@ -19,8 +19,6 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; -use Fisharebest\Webtrees\Services\MediaFileService; - use function strtoupper; /** @@ -33,6 +31,11 @@ use function strtoupper; */ class MultimediaFormat extends AbstractElement { + protected const EXTENSION_TO_FORM = [ + 'JPEG' => 'JPG', + 'TIFF' => 'TIF', + ]; + protected const SUBTAGS = [ 'TYPE' => '0:1', ]; @@ -48,6 +51,6 @@ class MultimediaFormat extends AbstractElement { $value = strtoupper(parent::canonical($value)); - return MediaFileService::EXTENSION_TO_FORM[$value] ?? $value; + return static::EXTENSION_TO_FORM[$value] ?? $value; } } diff --git a/app/Http/RequestHandlers/AddMediaFileAction.php b/app/Http/RequestHandlers/AddMediaFileAction.php index 1fb1fc1c51..0953eafdf7 100644 --- a/app/Http/RequestHandlers/AddMediaFileAction.php +++ b/app/Http/RequestHandlers/AddMediaFileAction.php @@ -69,6 +69,9 @@ class AddMediaFileAction implements RequestHandlerInterface $title = Validator::parsedBody($request)->string('title'); $type = Validator::parsedBody($request)->string('type'); + $type = Registry::elementFactory()->make('OBJE:FILE:FORM:TYPE')->canonical($type); + $title = Registry::elementFactory()->make('OBJE:FILE:TITL')->canonical($title); + $file = $this->media_file_service->uploadFile($request); if ($file === '') { diff --git a/app/Http/RequestHandlers/CreateLocationAction.php b/app/Http/RequestHandlers/CreateLocationAction.php index 1e36e88f84..17fd18253f 100644 --- a/app/Http/RequestHandlers/CreateLocationAction.php +++ b/app/Http/RequestHandlers/CreateLocationAction.php @@ -39,12 +39,13 @@ class CreateLocationAction implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); - $name = Validator::parsedBody($request)->string('name'); + $name = Validator::parsedBody($request)->isNotEmpty()->string('name'); - $gedcom = "0 @@ _LOC\n1 NAME " . $name; + $name = Registry::elementFactory()->make('_LOC:NAME')->canonical($name); + + $gedcom = "0 @@ _LOC\n1 NAME " . strtr($name, ["\n" => "\n2 CONT "]); $record = $tree->createRecord($gedcom); - $record = Registry::locationFactory()->new($record->xref(), $record->gedcom(), null, $tree); // value and text are for autocomplete // html is for interactive modals diff --git a/app/Http/RequestHandlers/CreateMediaObjectAction.php b/app/Http/RequestHandlers/CreateMediaObjectAction.php index 3a4e3715ac..5422e114aa 100644 --- a/app/Http/RequestHandlers/CreateMediaObjectAction.php +++ b/app/Http/RequestHandlers/CreateMediaObjectAction.php @@ -65,7 +65,12 @@ class CreateMediaObjectAction implements RequestHandlerInterface $note = Validator::parsedBody($request)->string('media-note'); $title = Validator::parsedBody($request)->string('title'); $type = Validator::parsedBody($request)->string('type'); - $restriction = Validator::parsedBody($request)->isInArray(['', 'NONE', 'PRIVACY', 'CONFIDENTIAL', 'LOCKED'])->string('restriction'); + $restriction = Validator::parsedBody($request)->string('restriction'); + + $note = Registry::elementFactory()->make('OBJE:NOTE')->canonical($note); + $type = Registry::elementFactory()->make('OBJE:FILE:FORM:TYPE')->canonical($type); + $title = Registry::elementFactory()->make('OBJE:FILE:TITL')->canonical($title); + $restriction = Registry::elementFactory()->make('OBJE:RESN')->canonical($restriction); $file = $this->media_file_service->uploadFile($request); @@ -76,11 +81,10 @@ class CreateMediaObjectAction implements RequestHandlerInterface $gedcom = "0 @@ OBJE\n" . $this->media_file_service->createMediaFileGedcom($file, $type, $title, $note); if ($restriction !== '') { - $gedcom .= "\n1 RESN " . $restriction; + $gedcom .= "\n1 RESN " . strtr($restriction, ["\n" => "\n2 CONT "]); } $record = $tree->createMediaObject($gedcom); - $record = Registry::mediaFactory()->new($record->xref(), $record->gedcom(), null, $tree); // Accept the new record to keep the filesystem synchronized with the genealogy. $this->pending_changes_service->acceptRecord($record); diff --git a/app/Http/RequestHandlers/CreateMediaObjectFromFile.php b/app/Http/RequestHandlers/CreateMediaObjectFromFile.php index 10b450332d..f6562e80c5 100644 --- a/app/Http/RequestHandlers/CreateMediaObjectFromFile.php +++ b/app/Http/RequestHandlers/CreateMediaObjectFromFile.php @@ -19,6 +19,7 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Http\RequestHandlers; +use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\MediaFileService; use Fisharebest\Webtrees\Services\PendingChangesService; use Fisharebest\Webtrees\Validator; @@ -54,19 +55,24 @@ class CreateMediaObjectFromFile implements RequestHandlerInterface */ public function handle(ServerRequestInterface $request): ResponseInterface { - $tree = Validator::attributes($request)->tree(); - $file = Validator::parsedBody($request)->string('file'); - $type = Validator::parsedBody($request)->string('type'); - $title = Validator::parsedBody($request)->string('title'); - $note = Validator::parsedBody($request)->string('note'); + $tree = Validator::attributes($request)->tree(); + $file = Validator::parsedBody($request)->string('file'); + $type = Validator::parsedBody($request)->string('type'); + $title = Validator::parsedBody($request)->string('title'); + $note = Validator::parsedBody($request)->string('note'); + + $file = Registry::elementFactory()->make('OBJE:NOTE')->canonical($file); + $note = Registry::elementFactory()->make('OBJE:NOTE')->canonical($note); + $type = Registry::elementFactory()->make('OBJE:FILE:FORM:TYPE')->canonical($type); + $title = Registry::elementFactory()->make('OBJE:FILE:TITL')->canonical($title); $gedcom = "0 @@ OBJE\n" . $this->media_file_service->createMediaFileGedcom($file, $type, $title, $note); - $media_object = $tree->createRecord($gedcom); + $record = $tree->createRecord($gedcom); // Accept the new record. Rejecting it would leave the filesystem out-of-sync with the genealogy - $this->pending_changes_service->acceptRecord($media_object); + $this->pending_changes_service->acceptRecord($record); - return redirect($media_object->url()); + return redirect($record->url()); } } diff --git a/app/Http/RequestHandlers/CreateNoteAction.php b/app/Http/RequestHandlers/CreateNoteAction.php index 9b114bfa2f..c5cf2077ff 100644 --- a/app/Http/RequestHandlers/CreateNoteAction.php +++ b/app/Http/RequestHandlers/CreateNoteAction.php @@ -39,20 +39,19 @@ class CreateNoteAction implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); - $note = Validator::parsedBody($request)->string('note'); - $restriction = Validator::parsedBody($request)->isInArray(['', 'NONE', 'PRIVACY', 'CONFIDENTIAL', 'LOCKED'])->string('restriction'); + $note = Validator::parsedBody($request)->isNotEmpty()->string('note'); + $restriction = Validator::parsedBody($request)->string('restriction'); - // Convert HTML line endings to GEDCOM continuations - $note = strtr($note, ["\r\n" => "\n1 CONT "]); + $note = Registry::elementFactory()->make('NOTE:CONT')->canonical($note); + $restriction = Registry::elementFactory()->make('NOTE:RESN')->canonical($restriction); - $gedcom = '0 @@ NOTE ' . $note; + $gedcom = '0 @@ NOTE ' . strtr($note, ["\n" => "\n1 CONT "]); if ($restriction !== '') { - $gedcom .= "\n1 RESN " . $restriction; + $gedcom .= "\n1 RESN " . strtr($restriction, ["\n" => "\n2 CONT "]); } $record = $tree->createRecord($gedcom); - $record = Registry::noteFactory()->new($record->xref(), $record->gedcom(), null, $tree); // value and text are for autocomplete // html is for interactive modals diff --git a/app/Http/RequestHandlers/CreateRepositoryAction.php b/app/Http/RequestHandlers/CreateRepositoryAction.php index 3913c38a6a..f8feded258 100644 --- a/app/Http/RequestHandlers/CreateRepositoryAction.php +++ b/app/Http/RequestHandlers/CreateRepositoryAction.php @@ -26,9 +26,7 @@ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; -use function preg_replace; use function response; -use function trim; use function view; /** @@ -44,30 +42,31 @@ class CreateRepositoryAction implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); - $name = Validator::parsedBody($request)->string('name'); + $name = Validator::parsedBody($request)->isNotEmpty()->string('name'); $address = Validator::parsedBody($request)->string('address'); $url = Validator::parsedBody($request)->string('url'); - $restriction = Validator::parsedBody($request)->isInArray(['', 'NONE', 'PRIVACY', 'CONFIDENTIAL', 'LOCKED'])->string('restriction'); + $restriction = Validator::parsedBody($request)->string('restriction'); - // Fix non-printing characters - $name = trim(preg_replace('/\s+/', ' ', $name)); + $name = Registry::elementFactory()->make('REPO:NAME')->canonical($name); + $address = Registry::elementFactory()->make('REPO:ADDR')->canonical($address); + $url = Registry::elementFactory()->make('REPO:WWW')->canonical($url); + $restriction = Registry::elementFactory()->make('REPO:RESN')->canonical($restriction); - $gedcom = "0 @@ REPO\n1 NAME " . $name; + $gedcom = "0 @@ REPO\n1 NAME " . strtr($name, ["\n" => "\n2 CONT "]); if ($address !== '') { - $gedcom .= "\n1 ADDR " . strtr($address, ["\r\n" => "\n2 CONT "]); + $gedcom .= "\n1 ADDR " . strtr($address, ["\n" => "\n2 CONT "]); } if ($url !== '') { - $gedcom .= "\n1 WWW " . $url; + $gedcom .= "\n1 WWW " . strtr($url, ["\n" => "\n2 CONT "]); } if ($restriction !== '') { - $gedcom .= "\n1 RESN " . $restriction; + $gedcom .= "\n1 RESN " . strtr($restriction, ["\n" => "\n2 CONT "]); } $record = $tree->createRecord($gedcom); - $record = Registry::repositoryFactory()->new($record->xref(), $record->gedcom(), null, $tree); // value and text are for autocomplete // html is for interactive modals diff --git a/app/Http/RequestHandlers/CreateSourceAction.php b/app/Http/RequestHandlers/CreateSourceAction.php index 54b2fe7488..f71fe85e1d 100644 --- a/app/Http/RequestHandlers/CreateSourceAction.php +++ b/app/Http/RequestHandlers/CreateSourceAction.php @@ -39,58 +39,55 @@ class CreateSourceAction implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); - $title = Validator::parsedBody($request)->string('source-title'); + $title = Validator::parsedBody($request)->isNotEmpty()->string('source-title'); $abbreviation = Validator::parsedBody($request)->string('source-abbreviation'); $author = Validator::parsedBody($request)->string('source-author'); $publication = Validator::parsedBody($request)->string('source-publication'); - $repository = Validator::parsedBody($request)->string('source-repository'); + $repository = Validator::parsedBody($request)->isXref()->string('source-repository', ''); $call_number = Validator::parsedBody($request)->string('source-call-number'); $text = Validator::parsedBody($request)->string('source-text'); - $restriction = Validator::parsedBody($request)->isInArray(['', 'NONE', 'PRIVACY', 'CONFIDENTIAL', 'LOCKED'])->string('restriction'); + $restriction = Validator::parsedBody($request)->string('restriction'); - // Fix non-printing characters - $title = trim(preg_replace('/\s+/', ' ', $title)); - $abbreviation = trim(preg_replace('/\s+/', ' ', $abbreviation)); - $author = trim(preg_replace('/\s+/', ' ', $author)); - $publication = trim(preg_replace('/\s+/', ' ', $publication)); - $repository = trim(preg_replace('/\s+/', ' ', $repository)); - $call_number = trim(preg_replace('/\s+/', ' ', $call_number)); + $title = Registry::elementFactory()->make('SOUR:TITL')->canonical($title); + $abbreviation = Registry::elementFactory()->make('SOUR:ABBR')->canonical($abbreviation); + $author = Registry::elementFactory()->make('SOUR:AUTH')->canonical($author); + $publication = Registry::elementFactory()->make('SOUR:PUBL')->canonical($publication); + $repository = Registry::elementFactory()->make('SOUR:REPO')->canonical($repository); + $call_number = Registry::elementFactory()->make('SOUR:REPO:CALN')->canonical($call_number); + $text = Registry::elementFactory()->make('SOUR:TEXT')->canonical($text); + $restriction = Registry::elementFactory()->make('SOUR:RESN')->canonical($restriction); - // Convert HTML line endings to GEDCOM continuations - $text = strtr($text, ["\r\n" => "\n2 CONT "]); - - $gedcom = "0 @@ SOUR\n\n1 TITL " . $title; + $gedcom = "0 @@ SOUR\n1 TITL " . strtr($title, ["\n" => "\n2 CONT "]); if ($abbreviation !== '') { - $gedcom .= "\n1 ABBR " . $abbreviation; + $gedcom .= "\n1 ABBR " . strtr($abbreviation, ["\n" => "\n2 CONT "]); } if ($author !== '') { - $gedcom .= "\n1 AUTH " . $author; + $gedcom .= "\n1 AUTH " . strtr($author, ["\n" => "\n2 CONT "]); } if ($publication !== '') { - $gedcom .= "\n1 PUBL " . $publication; + $gedcom .= "\n1 PUBL " . strtr($publication, ["\n" => "\n2 CONT "]); } if ($text !== '') { - $gedcom .= "\n1 TEXT " . $text; + $gedcom .= "\n1 TEXT " . strtr($text, ["\n" => "\n2 CONT "]); } if ($repository !== '') { $gedcom .= "\n1 REPO @" . $repository . '@'; if ($call_number !== '') { - $gedcom .= "\n2 CALN " . $call_number; + $gedcom .= "\n2 CALN " . strtr($call_number, ["\n" => "\n3 CONT "]); } } if ($restriction !== '') { - $gedcom .= "\n1 RESN " . $restriction; + $gedcom .= "\n1 RESN " . strtr($restriction, ["\n" => "\n2 CONT "]); } $record = $tree->createRecord($gedcom); - $record = Registry::sourceFactory()->new($record->xref(), $record->gedcom(), null, $tree); // value and text are for autocomplete // html is for interactive modals diff --git a/app/Http/RequestHandlers/CreateSubmissionAction.php b/app/Http/RequestHandlers/CreateSubmissionAction.php index bf7798e4ac..3254ff37d8 100644 --- a/app/Http/RequestHandlers/CreateSubmissionAction.php +++ b/app/Http/RequestHandlers/CreateSubmissionAction.php @@ -39,12 +39,13 @@ class CreateSubmissionAction implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); - $submitter = Validator::parsedBody($request)->string('submitter'); + $submitter = Validator::parsedBody($request)->isXref()->string('submitter'); + + $submitter = Registry::elementFactory()->make('SUBN:SUBM')->canonical($submitter); $gedcom = "0 @@ SUBN\n1 SUBM @" . $submitter . '@'; $record = $tree->createRecord($gedcom); - $record = Registry::submissionFactory()->new($record->xref(), $record->gedcom(), null, $tree); // value and text are for autocomplete // html is for interactive modals diff --git a/app/Http/RequestHandlers/CreateSubmitterAction.php b/app/Http/RequestHandlers/CreateSubmitterAction.php index 99a6892db3..242a81f9fe 100644 --- a/app/Http/RequestHandlers/CreateSubmitterAction.php +++ b/app/Http/RequestHandlers/CreateSubmitterAction.php @@ -39,35 +39,37 @@ class CreateSubmitterAction implements RequestHandlerInterface public function handle(ServerRequestInterface $request): ResponseInterface { $tree = Validator::attributes($request)->tree(); - $name = Validator::parsedBody($request)->string('submitter_name'); + $name = Validator::parsedBody($request)->isNotEmpty()->string('submitter_name'); $address = Validator::parsedBody($request)->string('submitter_address'); $email = Validator::parsedBody($request)->string('submitter_email'); $phone = Validator::parsedBody($request)->string('submitter_phone'); - $restriction = Validator::parsedBody($request)->isInArray(['', 'NONE', 'PRIVACY', 'CONFIDENTIAL', 'LOCKED'])->string('restriction'); + $restriction = Validator::parsedBody($request)->string('restriction'); - // Fix non-printing characters - $name = trim(preg_replace('/\s+/', ' ', $name)); + $name = Registry::elementFactory()->make('SUBM:NAME')->canonical($name); + $address = Registry::elementFactory()->make('SUBM:ADDR')->canonical($address); + $email = Registry::elementFactory()->make('SUBM:EMAIL')->canonical($email); + $phone = Registry::elementFactory()->make('SUBM:PHON')->canonical($phone); + $restriction = Registry::elementFactory()->make('SUBM:RESN')->canonical($restriction); - $gedcom = "0 @@ SUBM\n1 NAME " . $name; + $gedcom = "0 @@ SUBM\n1 NAME " . strtr($name, ["\n" => "\n2 CONT "]); if ($address !== '') { - $gedcom .= "\n1 ADDR " . $address; + $gedcom .= "\n1 ADDR " . strtr($address, ["\n" => "\n2 CONT "]); } if ($email !== '') { - $gedcom .= "\n1 EMAIL " . $email; + $gedcom .= "\n1 EMAIL " . strtr($email, ["\n" => "\n2 CONT "]); } if ($phone !== '') { - $gedcom .= "\n1 PHON " . $phone; + $gedcom .= "\n1 PHON " . strtr($phone, ["\n" => "\n2 CONT "]); } if ($restriction !== '') { - $gedcom .= "\n1 RESN " . $restriction; + $gedcom .= "\n1 RESN " . strtr($restriction, ["\n" => "\n2 CONT "]); } $record = $tree->createRecord($gedcom); - $record = Registry::submitterFactory()->new($record->xref(), $record->gedcom(), null, $tree); // value and text are for autocomplete // html is for interactive modals diff --git a/app/Http/RequestHandlers/EditMediaFileAction.php b/app/Http/RequestHandlers/EditMediaFileAction.php index 1f8c906b43..0ae8a2b4bb 100644 --- a/app/Http/RequestHandlers/EditMediaFileAction.php +++ b/app/Http/RequestHandlers/EditMediaFileAction.php @@ -82,9 +82,8 @@ class EditMediaFileAction implements RequestHandlerInterface $media = Registry::mediaFactory()->make($xref, $tree); $media = Auth::checkMediaAccess($media, true); - // Tidy non-printing characters - $type = trim(preg_replace('/\s+/', ' ', $type)); - $title = trim(preg_replace('/\s+/', ' ', $title)); + $type = Registry::elementFactory()->make('OBJE:FILE:FORM:TYPE')->canonical($type); + $title = Registry::elementFactory()->make('OBJE:FILE:TITL')->canonical($title); // Find the fact to edit $media_file = $media->mediaFiles() diff --git a/app/Services/MediaFileService.php b/app/Services/MediaFileService.php index e7edfa0a8b..71a842a025 100644 --- a/app/Services/MediaFileService.php +++ b/app/Services/MediaFileService.php @@ -22,6 +22,7 @@ namespace Fisharebest\Webtrees\Services; use Fisharebest\Webtrees\Exceptions\FileUploadException; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\Validator; use Illuminate\Database\Capsule\Manager as DB; @@ -64,11 +65,6 @@ use const UPLOAD_ERR_OK; */ class MediaFileService { - public const EXTENSION_TO_FORM = [ - 'JPEG' => 'JPG', - 'TIFF' => 'TIF', - ]; - private const IGNORE_FOLDERS = [ // Old versions of webtrees 'thumbs', @@ -250,26 +246,26 @@ class MediaFileService $format = ''; } else { $format = strtoupper(pathinfo($file, PATHINFO_EXTENSION)); - $format = self::EXTENSION_TO_FORM[$format] ?? $format; + $format = Registry::elementFactory()->make('OBJE:FILE:FORM')->canonical($format); } - if ($format !== '' && strlen($format) <= 4) { - $gedcom .= "\n2 FORM " . $format; + if ($format !== '') { + $gedcom .= "\n2 FORM " . strtr($format, ["\n" => "\n3 CONT "]); } elseif ($type !== '') { $gedcom .= "\n2 FORM"; } if ($type !== '') { - $gedcom .= "\n3 TYPE " . $type; + $gedcom .= "\n3 TYPE " . strtr($type, ["\n" => "\n4 CONT "]); } if ($title !== '') { - $gedcom .= "\n2 TITL " . $title; + $gedcom .= "\n2 TITL " . strtr($title, ["\n" => "\n3 CONT "]); } if ($note !== '') { // Convert HTML line endings to GEDCOM continuations - $gedcom .= "\n1 NOTE " . strtr($note, ["\r\n" => "\n2 CONT "]); + $gedcom .= "\n1 NOTE " . strtr($note, ["\n" => "\n2 CONT "]); } return $gedcom; |
