diff options
| author | Greg Roach <greg@subaqua.co.uk> | 2020-06-16 17:00:45 +0100 |
|---|---|---|
| committer | Greg Roach <greg@subaqua.co.uk> | 2020-06-16 17:21:56 +0100 |
| commit | 6765725587bce7e3b379fc9bfba89b92bda971f2 (patch) | |
| tree | a1270a15057defa081c277ba2ddfe3cd85b53ba9 | |
| parent | 50f350383d77e441fd033be38ead7842f465e46c (diff) | |
| download | webtrees-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.php | 18 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Family.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Individual.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2MediaObject.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Note.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Place.php | 3 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Repository.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Source.php | 7 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/Select2Submitter.php | 7 | ||||
| -rw-r--r-- | resources/views/components/select-family.phtml | 7 | ||||
| -rw-r--r-- | resources/views/components/select-individual.phtml | 7 | ||||
| -rw-r--r-- | resources/views/components/select-media.phtml | 7 | ||||
| -rw-r--r-- | resources/views/components/select-note.phtml | 7 | ||||
| -rw-r--r-- | resources/views/components/select-repository.phtml | 7 | ||||
| -rw-r--r-- | resources/views/components/select-source.phtml | 7 | ||||
| -rw-r--r-- | resources/views/components/select-submitter.phtml | 7 |
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 : ?> |
