summaryrefslogtreecommitdiff
path: root/app/Http/RequestHandlers
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2020-02-15 14:31:12 +0000
committerGreg Roach <fisharebest@webtrees.net>2020-02-15 16:51:48 +0000
commit2406e0e0d34f4472ee82b3766af666b5c63202dd (patch)
treeb22f00199751262ec2acb2429d1b0122d7f35b71 /app/Http/RequestHandlers
parent1f4c31d9bacf1638e979bd5a328b2ee03af42c47 (diff)
downloadwebtrees-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.php15
-rw-r--r--app/Http/RequestHandlers/IndividualPage.php61
-rw-r--r--app/Http/RequestHandlers/MediaPage.php23
-rw-r--r--app/Http/RequestHandlers/NotePage.php25
-rw-r--r--app/Http/RequestHandlers/RepositoryPage.php15
-rw-r--r--app/Http/RequestHandlers/SourcePage.php21
-rw-r--r--app/Http/RequestHandlers/SubmitterPage.php14
-rw-r--r--app/Http/RequestHandlers/TreePage.php11
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'))
]);
}
}