summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/Elements/MultimediaFormat.php9
-rw-r--r--app/Http/RequestHandlers/AddMediaFileAction.php3
-rw-r--r--app/Http/RequestHandlers/CreateLocationAction.php7
-rw-r--r--app/Http/RequestHandlers/CreateMediaObjectAction.php10
-rw-r--r--app/Http/RequestHandlers/CreateMediaObjectFromFile.php22
-rw-r--r--app/Http/RequestHandlers/CreateNoteAction.php13
-rw-r--r--app/Http/RequestHandlers/CreateRepositoryAction.php21
-rw-r--r--app/Http/RequestHandlers/CreateSourceAction.php39
-rw-r--r--app/Http/RequestHandlers/CreateSubmissionAction.php5
-rw-r--r--app/Http/RequestHandlers/CreateSubmitterAction.php22
-rw-r--r--app/Http/RequestHandlers/EditMediaFileAction.php5
-rw-r--r--app/Services/MediaFileService.php18
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;