diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2020-02-15 14:31:12 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2020-02-15 16:51:48 +0000 |
| commit | 2406e0e0d34f4472ee82b3766af666b5c63202dd (patch) | |
| tree | b22f00199751262ec2acb2429d1b0122d7f35b71 /app/Http/RequestHandlers | |
| parent | 1f4c31d9bacf1638e979bd5a328b2ee03af42c47 (diff) | |
| download | webtrees-2406e0e0d34f4472ee82b3766af666b5c63202dd.tar.gz webtrees-2406e0e0d34f4472ee82b3766af666b5c63202dd.tar.bz2 webtrees-2406e0e0d34f4472ee82b3766af666b5c63202dd.zip | |
Add custom meta-description tag for individual pages
Diffstat (limited to 'app/Http/RequestHandlers')
| -rw-r--r-- | app/Http/RequestHandlers/FamilyPage.php | 15 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/IndividualPage.php | 61 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/MediaPage.php | 23 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/NotePage.php | 25 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/RepositoryPage.php | 15 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/SourcePage.php | 21 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/SubmitterPage.php | 14 | ||||
| -rw-r--r-- | app/Http/RequestHandlers/TreePage.php | 11 |
8 files changed, 127 insertions, 58 deletions
diff --git a/app/Http/RequestHandlers/FamilyPage.php b/app/Http/RequestHandlers/FamilyPage.php index e32ca89cd0..e18ad63944 100644 --- a/app/Http/RequestHandlers/FamilyPage.php +++ b/app/Http/RequestHandlers/FamilyPage.php @@ -79,13 +79,14 @@ class FamilyPage implements RequestHandlerInterface $clipboard_facts = $this->clipboard_service->pastableFacts($family, new Collection()); return $this->viewResponse('family-page', [ - 'facts' => $family->facts([], true), - 'meta_robots' => 'index,follow', - 'clipboard_facts' => $clipboard_facts, - 'record' => $family, - 'significant' => $this->significant($family), - 'title' => $family->fullName(), - 'tree' => $tree, + 'clipboard_facts' => $clipboard_facts, + 'facts' => $family->facts([], true), + 'meta_description' => '', + 'meta_robots' => 'index,follow', + 'record' => $family, + 'significant' => $this->significant($family), + 'title' => $family->fullName(), + 'tree' => $tree, ]); } diff --git a/app/Http/RequestHandlers/IndividualPage.php b/app/Http/RequestHandlers/IndividualPage.php index 6acf9c3dda..9f3c899382 100644 --- a/app/Http/RequestHandlers/IndividualPage.php +++ b/app/Http/RequestHandlers/IndividualPage.php @@ -45,9 +45,12 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use stdClass; +use function array_map; use function assert; +use function date; use function e; use function explode; +use function implode; use function is_string; use function ob_get_clean; use function ob_start; @@ -57,6 +60,10 @@ use function redirect; use function route; use function str_replace; use function strpos; +use function strtoupper; +use function view; + +use const PREG_SET_ORDER; /** * Show an individual's page. @@ -158,6 +165,7 @@ class IndividualPage implements RequestHandlerInterface 'clipboard_facts' => $this->clipboard_service->pastableFacts($individual, new Collection()), 'individual' => $individual, 'individual_media' => $individual_media, + 'meta_description' => $this->metaDescription($individual), 'meta_robots' => 'index,follow', 'name_records' => $name_records, 'sex_records' => $sex_records, @@ -171,6 +179,59 @@ class IndividualPage implements RequestHandlerInterface } /** + * @param Individual $individual + * + * @return string + */ + private function metaDescription(Individual $individual): string + { + $meta_facts = []; + + $birth_date = $individual->getBirthDate(); + $birth_place = $individual->getBirthPlace(); + + if ($birth_date->isOK() || $birth_place->id() !== 0) { + $meta_facts[] = I18N::translate('Birth') . ' ' . + $birth_date->display(false, null, false) . ' ' . + $birth_place->placeName(); + } + + $death_date = $individual->getDeathDate(); + $death_place = $individual->getDeathPlace(); + + if ($death_date->isOK() || $death_place->id() !== 0) { + $meta_facts[] = I18N::translate('Death') . ' ' . + $death_date->display(false, null, false) . ' ' . + $death_place->placeName(); + } + + foreach ($individual->childFamilies() as $family) { + $meta_facts[] = I18N::translate('Parents') . ' ' . $family->fullName(); + } + + foreach ($individual->spouseFamilies() as $family) { + $spouse = $family->spouse($individual); + if ($spouse instanceof Individual) { + $meta_facts[] = I18N::translate('Spouse') . ' ' . $spouse->fullName(); + } + + $child_names = $family->children()->map(static function (Individual $individual): string { + return e($individual->getAllNames()[0]['givn']); + })->implode(', '); + + + if ($child_names !== '') { + $meta_facts[] = I18N::translate('Children') . ' ' . $child_names; + } + } + + $meta_facts = array_map('strip_tags', $meta_facts); + $meta_facts = array_map('trim', $meta_facts); + + return implode(', ', $meta_facts); + } + + /** * Format a name record * * @param Tree $tree diff --git a/app/Http/RequestHandlers/MediaPage.php b/app/Http/RequestHandlers/MediaPage.php index 6dc9bab400..4475ae2c53 100644 --- a/app/Http/RequestHandlers/MediaPage.php +++ b/app/Http/RequestHandlers/MediaPage.php @@ -81,17 +81,18 @@ class MediaPage implements RequestHandlerInterface } return $this->viewResponse('media-page', [ - 'clipboard_facts' => $this->clipboard_service->pastableFacts($media, new Collection()), - 'data_filesystem' => $data_filesystem, - 'families' => $media->linkedFamilies('OBJE'), - 'facts' => $this->facts($media), - 'individuals' => $media->linkedIndividuals('OBJE'), - 'media' => $media, - 'meta_robots' => 'index,follow', - 'notes' => $media->linkedNotes('OBJE'), - 'sources' => $media->linkedSources('OBJE'), - 'title' => $media->fullName(), - 'tree' => $tree, + 'clipboard_facts' => $this->clipboard_service->pastableFacts($media, new Collection()), + 'data_filesystem' => $data_filesystem, + 'families' => $media->linkedFamilies('OBJE'), + 'facts' => $this->facts($media), + 'individuals' => $media->linkedIndividuals('OBJE'), + 'media' => $media, + 'meta_description' => '', + 'meta_robots' => 'index,follow', + 'notes' => $media->linkedNotes('OBJE'), + 'sources' => $media->linkedSources('OBJE'), + 'title' => $media->fullName(), + 'tree' => $tree, ]); } diff --git a/app/Http/RequestHandlers/NotePage.php b/app/Http/RequestHandlers/NotePage.php index cf6853b970..f5c0577092 100644 --- a/app/Http/RequestHandlers/NotePage.php +++ b/app/Http/RequestHandlers/NotePage.php @@ -78,18 +78,19 @@ class NotePage implements RequestHandlerInterface } return $this->viewResponse('note-page', [ - 'clipboard_facts' => $this->clipboard_service->pastableFacts($note, new Collection()), - 'facts' => $this->facts($note), - 'families' => $note->linkedFamilies('NOTE'), - 'individuals' => $note->linkedIndividuals('NOTE'), - 'note' => $note, - 'notes' => new Collection(), - 'media_objects' => $note->linkedMedia('NOTE'), - 'meta_robots' => 'index,follow', - 'sources' => $note->linkedSources('NOTE'), - 'text' => Filter::formatText($note->getNote(), $tree), - 'title' => $note->fullName(), - 'tree' => $tree, + 'clipboard_facts' => $this->clipboard_service->pastableFacts($note, new Collection()), + 'facts' => $this->facts($note), + 'families' => $note->linkedFamilies('NOTE'), + 'individuals' => $note->linkedIndividuals('NOTE'), + 'note' => $note, + 'notes' => new Collection(), + 'media_objects' => $note->linkedMedia('NOTE'), + 'meta_description' => '', + 'meta_robots' => 'index,follow', + 'sources' => $note->linkedSources('NOTE'), + 'text' => Filter::formatText($note->getNote(), $tree), + 'title' => $note->fullName(), + 'tree' => $tree, ]); } diff --git a/app/Http/RequestHandlers/RepositoryPage.php b/app/Http/RequestHandlers/RepositoryPage.php index 54db5aac7c..c37c5df15b 100644 --- a/app/Http/RequestHandlers/RepositoryPage.php +++ b/app/Http/RequestHandlers/RepositoryPage.php @@ -93,13 +93,14 @@ class RepositoryPage implements RequestHandlerInterface } return $this->viewResponse('repository-page', [ - 'clipboard_facts' => $this->clipboard_service->pastableFacts($repository, new Collection()), - 'facts' => $this->facts($repository), - 'meta_robots' => 'index,follow', - 'repository' => $repository, - 'sources' => $repository->linkedSources('REPO'), - 'title' => $repository->fullName(), - 'tree' => $tree, + 'clipboard_facts' => $this->clipboard_service->pastableFacts($repository, new Collection()), + 'facts' => $this->facts($repository), + 'meta_description' => '', + 'meta_robots' => 'index,follow', + 'repository' => $repository, + 'sources' => $repository->linkedSources('REPO'), + 'title' => $repository->fullName(), + 'tree' => $tree, ]); } diff --git a/app/Http/RequestHandlers/SourcePage.php b/app/Http/RequestHandlers/SourcePage.php index 61562d1484..1adb36f4b0 100644 --- a/app/Http/RequestHandlers/SourcePage.php +++ b/app/Http/RequestHandlers/SourcePage.php @@ -98,16 +98,17 @@ class SourcePage implements RequestHandlerInterface } return $this->viewResponse('source-page', [ - 'clipboard_facts' => $this->clipboard_service->pastableFacts($source, new Collection()), - 'facts' => $this->facts($source), - 'families' => $source->linkedFamilies('SOUR'), - 'individuals' => $source->linkedIndividuals('SOUR'), - 'meta_robots' => 'index,follow', - 'notes' => $source->linkedNotes('SOUR'), - 'media_objects' => $source->linkedMedia('SOUR'), - 'source' => $source, - 'title' => $source->fullName(), - 'tree' => $tree, + 'clipboard_facts' => $this->clipboard_service->pastableFacts($source, new Collection()), + 'facts' => $this->facts($source), + 'families' => $source->linkedFamilies('SOUR'), + 'individuals' => $source->linkedIndividuals('SOUR'), + 'meta_description' => '', + 'meta_robots' => 'index,follow', + 'notes' => $source->linkedNotes('SOUR'), + 'media_objects' => $source->linkedMedia('SOUR'), + 'source' => $source, + 'title' => $source->fullName(), + 'tree' => $tree, ]); } diff --git a/app/Http/RequestHandlers/SubmitterPage.php b/app/Http/RequestHandlers/SubmitterPage.php index a12fb901a8..09cd438a86 100644 --- a/app/Http/RequestHandlers/SubmitterPage.php +++ b/app/Http/RequestHandlers/SubmitterPage.php @@ -81,12 +81,14 @@ class SubmitterPage implements RequestHandlerInterface } return $this->viewResponse('submitter-page', [ - 'facts' => $this->facts($submitter), - 'submitter' => $submitter, - 'families' => $submitter->linkedFamilies('SUBM'), - 'individuals' => $submitter->linkedIndividuals('SUBM'), - 'title' => $submitter->fullName(), - 'tree' => $tree, + 'facts' => $this->facts($submitter), + 'submitter' => $submitter, + 'families' => $submitter->linkedFamilies('SUBM'), + 'individuals' => $submitter->linkedIndividuals('SUBM'), + 'meta_description' => '', + 'meta_robots' => 'index,follow', + 'title' => $submitter->fullName(), + 'tree' => $tree, ]); } diff --git a/app/Http/RequestHandlers/TreePage.php b/app/Http/RequestHandlers/TreePage.php index 0466bc8213..7a82b313c3 100644 --- a/app/Http/RequestHandlers/TreePage.php +++ b/app/Http/RequestHandlers/TreePage.php @@ -85,11 +85,12 @@ class TreePage implements RequestHandlerInterface } return $this->viewResponse('tree-page', [ - 'main_blocks' => $this->home_page_service->treeBlocks($tree, $user, ModuleBlockInterface::MAIN_BLOCKS), - 'side_blocks' => $this->home_page_service->treeBlocks($tree, $user, ModuleBlockInterface::SIDE_BLOCKS), - 'title' => e($tree->title()), - 'tree' => $tree, - 'meta_robots' => 'index,follow', + 'main_blocks' => $this->home_page_service->treeBlocks($tree, $user, ModuleBlockInterface::MAIN_BLOCKS), + 'side_blocks' => $this->home_page_service->treeBlocks($tree, $user, ModuleBlockInterface::SIDE_BLOCKS), + 'title' => e($tree->title()), + 'tree' => $tree, + 'meta_robots' => 'index,follow', + 'meta_description' => e($tree->getPreference('META_DESCRIPTION')) ]); } } |
