summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Roach <greg@subaqua.co.uk>2020-06-16 17:00:45 +0100
committerGreg Roach <greg@subaqua.co.uk>2020-06-16 17:21:56 +0100
commit6765725587bce7e3b379fc9bfba89b92bda971f2 (patch)
treea1270a15057defa081c277ba2ddfe3cd85b53ba9
parent50f350383d77e441fd033be38ead7842f465e46c (diff)
downloadwebtrees-6765725587bce7e3b379fc9bfba89b92bda971f2.tar.gz
webtrees-6765725587bce7e3b379fc9bfba89b92bda971f2.tar.bz2
webtrees-6765725587bce7e3b379fc9bfba89b92bda971f2.zip
Allow select2 edit controls to use @ with XREFs
-rw-r--r--app/Http/RequestHandlers/AbstractSelect2Handler.php18
-rw-r--r--app/Http/RequestHandlers/Select2Family.php7
-rw-r--r--app/Http/RequestHandlers/Select2Individual.php7
-rw-r--r--app/Http/RequestHandlers/Select2MediaObject.php7
-rw-r--r--app/Http/RequestHandlers/Select2Note.php7
-rw-r--r--app/Http/RequestHandlers/Select2Place.php3
-rw-r--r--app/Http/RequestHandlers/Select2Repository.php7
-rw-r--r--app/Http/RequestHandlers/Select2Source.php7
-rw-r--r--app/Http/RequestHandlers/Select2Submitter.php7
-rw-r--r--resources/views/components/select-family.phtml7
-rw-r--r--resources/views/components/select-individual.phtml7
-rw-r--r--resources/views/components/select-media.phtml7
-rw-r--r--resources/views/components/select-note.phtml7
-rw-r--r--resources/views/components/select-repository.phtml7
-rw-r--r--resources/views/components/select-source.phtml7
-rw-r--r--resources/views/components/select-submitter.phtml7
16 files changed, 76 insertions, 43 deletions
diff --git a/app/Http/RequestHandlers/AbstractSelect2Handler.php b/app/Http/RequestHandlers/AbstractSelect2Handler.php
index 96d6b96d79..46e81d00e2 100644
--- a/app/Http/RequestHandlers/AbstractSelect2Handler.php
+++ b/app/Http/RequestHandlers/AbstractSelect2Handler.php
@@ -27,6 +27,7 @@ use Psr\Http\Server\RequestHandlerInterface;
use function assert;
use function response;
+use function strlen;
/**
* Autocomplete for Select2 based controls.
@@ -53,18 +54,20 @@ abstract class AbstractSelect2Handler implements RequestHandlerInterface
assert($tree instanceof Tree);
$params = (array) $request->getParsedBody();
-
- $query = $params['q'] ?? '';
- assert(strlen($query) >= self::MINIMUM_INPUT_LENGTH);
-
- $page = (int) ($params['page'] ?? 1);
+ $query = $params['q'] ?? '';
+ $at = (bool) ($params['at'] ?? false);
+ $page = (int) ($params['page'] ?? 1);
// Fetch one more row than we need, so we can know if more rows exist.
$offset = ($page - 1) * self::RESULTS_PER_PAGE;
$limit = self::RESULTS_PER_PAGE + 1;
// Perform the search.
- $results = $this->search($tree, $query, $offset, $limit);
+ if (strlen($query) >= self::MINIMUM_INPUT_LENGTH) {
+ $results = $this->search($tree, $query, $offset, $limit, $at ? '@' : '');
+ } else {
+ $results = new Collection();
+ }
return response([
'results' => $results->slice(0, self::RESULTS_PER_PAGE)->all(),
@@ -81,8 +84,9 @@ abstract class AbstractSelect2Handler implements RequestHandlerInterface
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at "@" or ""
*
* @return Collection<array<string,string>>
*/
- abstract protected function search(Tree $tree, string $query, int $offset, int $limit): Collection;
+ abstract protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection;
}
diff --git a/app/Http/RequestHandlers/Select2Family.php b/app/Http/RequestHandlers/Select2Family.php
index b85dd99ea5..bdd28a6390 100644
--- a/app/Http/RequestHandlers/Select2Family.php
+++ b/app/Http/RequestHandlers/Select2Family.php
@@ -53,10 +53,11 @@ class Select2Family extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$family = Factory::family()->make($query, $tree);
@@ -67,9 +68,9 @@ class Select2Family extends AbstractSelect2Handler
$results = $this->search_service->searchFamilyNames([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Family $family): array {
+ return $results->map(static function (Family $family) use ($at): array {
return [
- 'id' => $family->xref(),
+ 'id' => $at . $family->xref() . $at,
'text' => view('selects/family', ['family' => $family]),
'title' => ' ',
];
diff --git a/app/Http/RequestHandlers/Select2Individual.php b/app/Http/RequestHandlers/Select2Individual.php
index 977bb70397..65b47a75b4 100644
--- a/app/Http/RequestHandlers/Select2Individual.php
+++ b/app/Http/RequestHandlers/Select2Individual.php
@@ -52,10 +52,11 @@ class Select2Individual extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$individual = Factory::individual()->make($query, $tree);
@@ -66,9 +67,9 @@ class Select2Individual extends AbstractSelect2Handler
$results = $this->search_service->searchIndividualNames([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Individual $individual): array {
+ return $results->map(static function (Individual $individual) use ($at): array {
return [
- 'id' => $individual->xref(),
+ 'id' => $at . $individual->xref() . $at,
'text' => view('selects/individual', ['individual' => $individual]),
'title' => ' ',
];
diff --git a/app/Http/RequestHandlers/Select2MediaObject.php b/app/Http/RequestHandlers/Select2MediaObject.php
index 498e78012b..41cd76a438 100644
--- a/app/Http/RequestHandlers/Select2MediaObject.php
+++ b/app/Http/RequestHandlers/Select2MediaObject.php
@@ -53,10 +53,11 @@ class Select2MediaObject extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$media = Factory::media()->make($query, $tree);
@@ -67,9 +68,9 @@ class Select2MediaObject extends AbstractSelect2Handler
$results = $this->search_service->searchMedia([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Media $media): array {
+ return $results->map(static function (Media $media) use ($at): array {
return [
- 'id' => $media->xref(),
+ 'id' => $at . $media->xref() . $at,
'text' => view('selects/media', ['media' => $media]),
'title' => ' ',
];
diff --git a/app/Http/RequestHandlers/Select2Note.php b/app/Http/RequestHandlers/Select2Note.php
index 82c4e94dda..2a50d0906a 100644
--- a/app/Http/RequestHandlers/Select2Note.php
+++ b/app/Http/RequestHandlers/Select2Note.php
@@ -53,10 +53,11 @@ class Select2Note extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$note = Factory::note()->make($query, $tree);
@@ -67,9 +68,9 @@ class Select2Note extends AbstractSelect2Handler
$results = $this->search_service->searchNotes([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Note $note): array {
+ return $results->map(static function (Note $note) use ($at): array {
return [
- 'id' => $note->xref(),
+ 'id' => $at . $note->xref() . $at,
'text' => view('selects/note', ['note' => $note]),
'title' => ' ',
];
diff --git a/app/Http/RequestHandlers/Select2Place.php b/app/Http/RequestHandlers/Select2Place.php
index 521ef96a00..2a55811886 100644
--- a/app/Http/RequestHandlers/Select2Place.php
+++ b/app/Http/RequestHandlers/Select2Place.php
@@ -50,10 +50,11 @@ class Select2Place extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
return $this->search_service
->searchPlaces($tree, $query, $offset, $limit)
diff --git a/app/Http/RequestHandlers/Select2Repository.php b/app/Http/RequestHandlers/Select2Repository.php
index ef1ef07b14..d6db5870f0 100644
--- a/app/Http/RequestHandlers/Select2Repository.php
+++ b/app/Http/RequestHandlers/Select2Repository.php
@@ -53,10 +53,11 @@ class Select2Repository extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$repository = Factory::repository()->make($query, $tree);
@@ -67,9 +68,9 @@ class Select2Repository extends AbstractSelect2Handler
$results = $this->search_service->searchRepositories([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Repository $repository): array {
+ return $results->map(static function (Repository $repository) use ($at): array {
return [
- 'id' => $repository->xref(),
+ 'id' => $at . $repository->xref() . $at,
'text' => view('selects/repository', ['repository' => $repository]),
'title' => ' ',
];
diff --git a/app/Http/RequestHandlers/Select2Source.php b/app/Http/RequestHandlers/Select2Source.php
index 66030c9e71..c6b1e311ad 100644
--- a/app/Http/RequestHandlers/Select2Source.php
+++ b/app/Http/RequestHandlers/Select2Source.php
@@ -53,10 +53,11 @@ class Select2Source extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$source = Factory::source()->make($query, $tree);
@@ -67,9 +68,9 @@ class Select2Source extends AbstractSelect2Handler
$results = $this->search_service->searchSourcesByName([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Source $source): array {
+ return $results->map(static function (Source $source) use ($at): array {
return [
- 'id' => $source->xref(),
+ 'id' => $at . $source->xref() . $at,
'text' => view('selects/source', ['source' => $source]),
'title' => ' ',
];
diff --git a/app/Http/RequestHandlers/Select2Submitter.php b/app/Http/RequestHandlers/Select2Submitter.php
index 9d4544f270..b0c4a3a0b6 100644
--- a/app/Http/RequestHandlers/Select2Submitter.php
+++ b/app/Http/RequestHandlers/Select2Submitter.php
@@ -53,10 +53,11 @@ class Select2Submitter extends AbstractSelect2Handler
* @param string $query
* @param int $offset
* @param int $limit
+ * @param string $at
*
* @return Collection<array<string,string>>
*/
- protected function search(Tree $tree, string $query, int $offset, int $limit): Collection
+ protected function search(Tree $tree, string $query, int $offset, int $limit, string $at): Collection
{
// Search by XREF
$submitter = Factory::submitter()->make($query, $tree);
@@ -67,9 +68,9 @@ class Select2Submitter extends AbstractSelect2Handler
$results = $this->search_service->searchSubmitters([$tree], [$query], $offset, $limit);
}
- return $results->map(static function (Submitter $submitter): array {
+ return $results->map(static function (Submitter $submitter) use ($at): array {
return [
- 'id' => $submitter->xref(),
+ 'id' => $at . $submitter->xref() . $at,
'text' => view('selects/submitter', ['submitter' => $submitter]),
'title' => ' ',
];
diff --git a/resources/views/components/select-family.phtml b/resources/views/components/select-family.phtml
index 0a07b11d58..74742675a4 100644
--- a/resources/views/components/select-family.phtml
+++ b/resources/views/components/select-family.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Http\RequestHandlers\Select2Family;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var Family|null $family
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2Family::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2Family::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2Family::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2Family::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($family ?? null) instanceof Family) : ?>
- <option value="<?= e($family->xref()) ?>">
+ <option value="<?= e($at . $family->xref() . $at) ?>">
<?= view('selects/family', ['family' => $family]) ?>
</option>
<?php else : ?>
diff --git a/resources/views/components/select-individual.phtml b/resources/views/components/select-individual.phtml
index cac7bfeeb1..ad395725e0 100644
--- a/resources/views/components/select-individual.phtml
+++ b/resources/views/components/select-individual.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Individual;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var Individual|null $individual
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2Individual::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2Individual::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2Individual::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2Individual::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($individual ?? null) instanceof Individual) : ?>
- <option value="<?= e($individual->xref()) ?>">
+ <option value="<?= e($at . $individual->xref() . $at) ?>">
<?= view('selects/individual', ['individual' => $individual]) ?>
</option>
<?php else : ?>
diff --git a/resources/views/components/select-media.phtml b/resources/views/components/select-media.phtml
index 2e92f7622f..18c320490a 100644
--- a/resources/views/components/select-media.phtml
+++ b/resources/views/components/select-media.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Media;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var Media|null $media
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2MediaObject::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2MediaObject::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2MediaObject::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2MediaObject::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($media ?? null) instanceof Media) : ?>
- <option value="<?= e($media->xref()) ?>">
+ <option value="<?= e($at . $media->xref() . $at) ?>">
<?= view('selects/media', ['media' => $media]) ?>
</option>
<?php else : ?>
diff --git a/resources/views/components/select-note.phtml b/resources/views/components/select-note.phtml
index 592bef96af..948e0ae4ef 100644
--- a/resources/views/components/select-note.phtml
+++ b/resources/views/components/select-note.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Note;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var Note|null $note
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2Note::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2Note::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2Note::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2Note::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($note ?? null) instanceof Note) : ?>
- <option value="<?= e($note->xref()) ?>">
+ <option value="<?= e($at . $note->xref() . $at) ?>">
<?= view('selects/note', ['note' => $note]) ?>
</option>
<?php else : ?>
diff --git a/resources/views/components/select-repository.phtml b/resources/views/components/select-repository.phtml
index 27b94ef924..587709b993 100644
--- a/resources/views/components/select-repository.phtml
+++ b/resources/views/components/select-repository.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Repository;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var Repository|null $repository
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2Repository::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2Repository::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2Repository::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2Repository::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($repository ?? null) instanceof Repository) : ?>
- <option value="<?= e($repository->xref()) ?>">
+ <option value="<?= e($at . $repository->xref() . $at) ?>">
<?= view('selects/repository', ['repository' => $repository]) ?>
</option>
<?php else : ?>
diff --git a/resources/views/components/select-source.phtml b/resources/views/components/select-source.phtml
index 9ee20e5b61..94f5e9f406 100644
--- a/resources/views/components/select-source.phtml
+++ b/resources/views/components/select-source.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Source;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var Source|null $source
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2Source::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2Source::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2Source::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2Source::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($source ?? null) instanceof Source) : ?>
- <option value="<?= e($source->xref()) ?>"d>
+ <option value="<?= e($at . $source->xref() . $at) ?>"d>
<?= view('selects/source', ['source' => $source]) ?>
</option>
<?php else : ?>
diff --git a/resources/views/components/select-submitter.phtml b/resources/views/components/select-submitter.phtml
index cb304bab63..d9b5edd52c 100644
--- a/resources/views/components/select-submitter.phtml
+++ b/resources/views/components/select-submitter.phtml
@@ -5,6 +5,7 @@ use Fisharebest\Webtrees\Http\RequestHandlers\Select2Submitter;
use Fisharebest\Webtrees\Tree;
/**
+ * @var string $at "@" or "" (or unset).
* @var GedcomRecord|null $submitter
* @var string|null $class
* @var string|null $id
@@ -12,6 +13,8 @@ use Fisharebest\Webtrees\Tree;
* @var Tree $tree
*/
+$at = $at ?? '';
+
?>
<select
@@ -20,7 +23,7 @@ use Fisharebest\Webtrees\Tree;
data-ajax--delay="<?= e(Select2Submitter::AJAX_DELAY) ?>"
data-minimum-input-length="<?= e(Select2Submitter::MINIMUM_INPUT_LENGTH) ?>"
data-ajax--type="POST"
- data-ajax--url="<?= e(route(Select2Submitter::class, ['tree' => $tree->name()])) ?>"
+ data-ajax--url="<?= e(route(Select2Submitter::class, ['tree' => $tree->name(), 'at' => $at])) ?>"
data-allow-clear="true"
data-placeholder=""
id="<?= e($id ?? $name) ?>"
@@ -30,7 +33,7 @@ use Fisharebest\Webtrees\Tree;
style="width:100%"
>
<?php if (($submitter ?? null) instanceof GedcomRecord) : ?>
- <option value="<?= e($submitter->xref()) ?>">
+ <option value="<?= e($at . $submitter->xref() . $at) ?>">
<?= view('selects/submitter', ['submitter' => $submitter]) ?>
</option>
<?php else : ?>