19219296aSGreg Roach<?php 23976b470SGreg Roach 39219296aSGreg Roach/** 49219296aSGreg Roach * webtrees: online genealogy 59219296aSGreg Roach * Copyright (C) 2019 webtrees development team 69219296aSGreg Roach * This program is free software: you can redistribute it and/or modify 79219296aSGreg Roach * it under the terms of the GNU General Public License as published by 89219296aSGreg Roach * the Free Software Foundation, either version 3 of the License, or 99219296aSGreg Roach * (at your option) any later version. 109219296aSGreg Roach * This program is distributed in the hope that it will be useful, 119219296aSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 129219296aSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 139219296aSGreg Roach * GNU General Public License for more details. 149219296aSGreg Roach * You should have received a copy of the GNU General Public License 159219296aSGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>. 169219296aSGreg Roach */ 179219296aSGreg Roachdeclare(strict_types=1); 189219296aSGreg Roach 199219296aSGreg Roachnamespace Fisharebest\Webtrees; 209219296aSGreg Roach 219219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface; 229219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleInterface; 239219296aSGreg Roachuse Fisharebest\Webtrees\Services\ModuleService; 24e5a6b4d4SGreg Roachuse Fisharebest\Webtrees\Services\UserService; 259219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\BrowserRepository; 269219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ContactRepository; 279219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\EventRepository; 289219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyDatesRepository; 299219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyRepository; 309219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FavoritesRepository; 319219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\GedcomRepository; 329219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\HitCountRepository; 339219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\IndividualRepository; 349219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\BrowserRepositoryInterface; 359219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ContactRepositoryInterface; 369219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\EventRepositoryInterface; 379219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FamilyDatesRepositoryInterface; 389219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FavoritesRepositoryInterface; 399219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\GedcomRepositoryInterface; 409219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\HitCountRepositoryInterface; 419219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\IndividualRepositoryInterface; 429219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\LatestUserRepositoryInterface; 439219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MediaRepositoryInterface; 449219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MessageRepositoryInterface; 459219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\NewsRepositoryInterface; 469219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\PlaceRepositoryInterface; 479219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ServerRepositoryInterface; 489219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\UserRepositoryInterface; 499219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\LatestUserRepository; 509219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MediaRepository; 519219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MessageRepository; 529219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\NewsRepository; 539219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\PlaceRepository; 549219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ServerRepository; 559219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\UserRepository; 56e6f3d5e2SGreg Roachuse Illuminate\Database\Query\Builder; 57*71378461SGreg Roachuse Psr\Http\Message\ServerRequestInterface; 589219296aSGreg Roachuse ReflectionMethod; 599219296aSGreg Roach 60*71378461SGreg Roachuse function app; 61*71378461SGreg Roachuse function count; 62*71378461SGreg Roachuse function in_array; 63*71378461SGreg Roach 649219296aSGreg Roach/** 659219296aSGreg Roach * A selection of pre-formatted statistical queries. 669219296aSGreg Roach * These are primarily used for embedded keywords on HTML blocks, but 679219296aSGreg Roach * are also used elsewhere in the code. 689219296aSGreg Roach */ 699219296aSGreg Roachclass Statistics implements 709219296aSGreg Roach GedcomRepositoryInterface, 719219296aSGreg Roach IndividualRepositoryInterface, 729219296aSGreg Roach EventRepositoryInterface, 739219296aSGreg Roach MediaRepositoryInterface, 749219296aSGreg Roach UserRepositoryInterface, 759219296aSGreg Roach ServerRepositoryInterface, 769219296aSGreg Roach BrowserRepositoryInterface, 779219296aSGreg Roach HitCountRepositoryInterface, 789219296aSGreg Roach LatestUserRepositoryInterface, 799219296aSGreg Roach FavoritesRepositoryInterface, 809219296aSGreg Roach NewsRepositoryInterface, 819219296aSGreg Roach MessageRepositoryInterface, 829219296aSGreg Roach ContactRepositoryInterface, 839219296aSGreg Roach FamilyDatesRepositoryInterface, 849219296aSGreg Roach PlaceRepositoryInterface 859219296aSGreg Roach{ 869219296aSGreg Roach /** 879219296aSGreg Roach * All public functions are available as keywords - except these ones 889219296aSGreg Roach * 899219296aSGreg Roach * @var string[] 909219296aSGreg Roach */ 919219296aSGreg Roach private static $public_but_not_allowed = [ 929219296aSGreg Roach '__construct', 939219296aSGreg Roach 'embedTags', 949219296aSGreg Roach 'iso3166', 959219296aSGreg Roach 'getAllCountries', 969219296aSGreg Roach 'getAllTagsTable', 979219296aSGreg Roach 'getAllTagsText', 989219296aSGreg Roach 'statsPlaces', 999219296aSGreg Roach 'statsAgeQuery', 1009219296aSGreg Roach 'statsChildrenQuery', 1019219296aSGreg Roach 'statsMarrAgeQuery', 1029219296aSGreg Roach ]; 103*71378461SGreg Roach /** 104*71378461SGreg Roach * Generate statistics for a specified tree. 105*71378461SGreg Roach * 106*71378461SGreg Roach * @var Tree 107*71378461SGreg Roach */ 108*71378461SGreg Roach private $tree; 1099219296aSGreg Roach /** 1109219296aSGreg Roach * @var GedcomRepository 1119219296aSGreg Roach */ 1129219296aSGreg Roach private $gedcomRepository; 1139219296aSGreg Roach 1149219296aSGreg Roach /** 1159219296aSGreg Roach * @var IndividualRepository 1169219296aSGreg Roach */ 1179219296aSGreg Roach private $individualRepository; 1189219296aSGreg Roach 1199219296aSGreg Roach /** 1209219296aSGreg Roach * @var FamilyRepository 1219219296aSGreg Roach */ 1229219296aSGreg Roach private $familyRepository; 1239219296aSGreg Roach 1249219296aSGreg Roach /** 1259219296aSGreg Roach * @var MediaRepository 1269219296aSGreg Roach */ 1279219296aSGreg Roach private $mediaRepository; 1289219296aSGreg Roach 1299219296aSGreg Roach /** 1309219296aSGreg Roach * @var EventRepository 1319219296aSGreg Roach */ 1329219296aSGreg Roach private $eventRepository; 1339219296aSGreg Roach 1349219296aSGreg Roach /** 1359219296aSGreg Roach * @var UserRepository 1369219296aSGreg Roach */ 1379219296aSGreg Roach private $userRepository; 1389219296aSGreg Roach 1399219296aSGreg Roach /** 1409219296aSGreg Roach * @var ServerRepository 1419219296aSGreg Roach */ 1429219296aSGreg Roach private $serverRepository; 1439219296aSGreg Roach 1449219296aSGreg Roach /** 1459219296aSGreg Roach * @var BrowserRepository 1469219296aSGreg Roach */ 1479219296aSGreg Roach private $browserRepository; 1489219296aSGreg Roach 1499219296aSGreg Roach /** 1509219296aSGreg Roach * @var HitCountRepository 1519219296aSGreg Roach */ 1529219296aSGreg Roach private $hitCountRepository; 1539219296aSGreg Roach 1549219296aSGreg Roach /** 1559219296aSGreg Roach * @var LatestUserRepository 1569219296aSGreg Roach */ 1579219296aSGreg Roach private $latestUserRepository; 1589219296aSGreg Roach 1599219296aSGreg Roach /** 1609219296aSGreg Roach * @var FavoritesRepository 1619219296aSGreg Roach */ 1629219296aSGreg Roach private $favoritesRepository; 1639219296aSGreg Roach 1649219296aSGreg Roach /** 1659219296aSGreg Roach * @var NewsRepository 1669219296aSGreg Roach */ 1679219296aSGreg Roach private $newsRepository; 1689219296aSGreg Roach 1699219296aSGreg Roach /** 1709219296aSGreg Roach * @var MessageRepository 1719219296aSGreg Roach */ 1729219296aSGreg Roach private $messageRepository; 1739219296aSGreg Roach 1749219296aSGreg Roach /** 1759219296aSGreg Roach * @var ContactRepository 1769219296aSGreg Roach */ 1779219296aSGreg Roach private $contactRepository; 1789219296aSGreg Roach 1799219296aSGreg Roach /** 1809219296aSGreg Roach * @var FamilyDatesRepository 1819219296aSGreg Roach */ 1829219296aSGreg Roach private $familyDatesRepository; 1839219296aSGreg Roach 1849219296aSGreg Roach /** 1859219296aSGreg Roach * @var PlaceRepository 1869219296aSGreg Roach */ 1879219296aSGreg Roach private $placeRepository; 1889219296aSGreg Roach 1899219296aSGreg Roach /** 1909219296aSGreg Roach * @var ModuleService 1919219296aSGreg Roach */ 1929219296aSGreg Roach private $module_service; 1939219296aSGreg Roach 1949219296aSGreg Roach /** 1959219296aSGreg Roach * Create the statistics for a tree. 1969219296aSGreg Roach * 1979219296aSGreg Roach * @param ModuleService $module_service 1989219296aSGreg Roach * @param Tree $tree Generate statistics for this tree 199e5a6b4d4SGreg Roach * @param UserService $user_service 2009219296aSGreg Roach */ 2019219296aSGreg Roach public function __construct( 2029219296aSGreg Roach ModuleService $module_service, 203e5a6b4d4SGreg Roach Tree $tree, 204e5a6b4d4SGreg Roach UserService $user_service 20598afcacfSGreg Roach ) { 2069219296aSGreg Roach $this->tree = $tree; 2079219296aSGreg Roach $this->gedcomRepository = new GedcomRepository($tree); 2089219296aSGreg Roach $this->individualRepository = new IndividualRepository($tree); 2099219296aSGreg Roach $this->familyRepository = new FamilyRepository($tree); 2109219296aSGreg Roach $this->familyDatesRepository = new FamilyDatesRepository($tree); 2119219296aSGreg Roach $this->mediaRepository = new MediaRepository($tree); 2129219296aSGreg Roach $this->eventRepository = new EventRepository($tree); 213e5a6b4d4SGreg Roach $this->userRepository = new UserRepository($tree, $user_service); 2149219296aSGreg Roach $this->serverRepository = new ServerRepository(); 2159219296aSGreg Roach $this->browserRepository = new BrowserRepository(); 216e5a6b4d4SGreg Roach $this->hitCountRepository = new HitCountRepository($tree, $user_service); 217e5a6b4d4SGreg Roach $this->latestUserRepository = new LatestUserRepository($user_service); 218fd9aba47SGreg Roach $this->favoritesRepository = new FavoritesRepository($tree, $module_service); 2199219296aSGreg Roach $this->newsRepository = new NewsRepository($tree); 2209219296aSGreg Roach $this->messageRepository = new MessageRepository(); 221e5a6b4d4SGreg Roach $this->contactRepository = new ContactRepository($tree, $user_service); 2229219296aSGreg Roach $this->placeRepository = new PlaceRepository($tree); 2239219296aSGreg Roach $this->module_service = $module_service; 2249219296aSGreg Roach } 2259219296aSGreg Roach 2269219296aSGreg Roach /** 2279219296aSGreg Roach * Return a string of all supported tags and an example of its output in table row form. 2289219296aSGreg Roach * 2299219296aSGreg Roach * @return string 2309219296aSGreg Roach */ 2319219296aSGreg Roach public function getAllTagsTable(): string 2329219296aSGreg Roach { 2339219296aSGreg Roach $examples = []; 2349219296aSGreg Roach 2359219296aSGreg Roach foreach (get_class_methods($this) as $method) { 2369219296aSGreg Roach $reflection = new ReflectionMethod($this, $method); 2376ccdf4f0SGreg Roach if ($reflection->isPublic() && !in_array($method, self::$public_but_not_allowed, true) && (string) $reflection->getReturnType() !== Builder::class) { 2389219296aSGreg Roach $examples[$method] = $this->$method(); 2399219296aSGreg Roach } 2409219296aSGreg Roach } 2419219296aSGreg Roach 2429219296aSGreg Roach ksort($examples); 2439219296aSGreg Roach 2449219296aSGreg Roach $html = ''; 2459219296aSGreg Roach foreach ($examples as $tag => $value) { 2469219296aSGreg Roach $html .= '<dt>#' . $tag . '#</dt>'; 2479219296aSGreg Roach $html .= '<dd>' . $value . '</dd>'; 2489219296aSGreg Roach } 2499219296aSGreg Roach 2509219296aSGreg Roach return '<dl>' . $html . '</dl>'; 2519219296aSGreg Roach } 2529219296aSGreg Roach 2539219296aSGreg Roach /** 2549219296aSGreg Roach * Return a string of all supported tags in plain text. 2559219296aSGreg Roach * 2569219296aSGreg Roach * @return string 2579219296aSGreg Roach */ 2589219296aSGreg Roach public function getAllTagsText(): string 2599219296aSGreg Roach { 2609219296aSGreg Roach $examples = []; 2619219296aSGreg Roach 2629219296aSGreg Roach foreach (get_class_methods($this) as $method) { 2639219296aSGreg Roach $reflection = new ReflectionMethod($this, $method); 2646ccdf4f0SGreg Roach if ($reflection->isPublic() && !in_array($method, self::$public_but_not_allowed, true) && (string) $reflection->getReturnType() !== Builder::class) { 2659219296aSGreg Roach $examples[$method] = $method; 2669219296aSGreg Roach } 2679219296aSGreg Roach } 2689219296aSGreg Roach 2699219296aSGreg Roach ksort($examples); 2709219296aSGreg Roach 2719219296aSGreg Roach return implode('<br>', $examples); 2729219296aSGreg Roach } 2739219296aSGreg Roach 2749219296aSGreg Roach /** 2759219296aSGreg Roach * Embed tags in text 2769219296aSGreg Roach * 2779219296aSGreg Roach * @param string $text 2789219296aSGreg Roach * 2799219296aSGreg Roach * @return string 2809219296aSGreg Roach */ 2819219296aSGreg Roach public function embedTags(string $text): string 2829219296aSGreg Roach { 2839219296aSGreg Roach if (strpos($text, '#') !== false) { 2849219296aSGreg Roach $text = strtr($text, $this->getTags($text)); 2859219296aSGreg Roach } 2869219296aSGreg Roach 2879219296aSGreg Roach return $text; 2889219296aSGreg Roach } 2899219296aSGreg Roach 2909219296aSGreg Roach /** 2919219296aSGreg Roach * @inheritDoc 2929219296aSGreg Roach */ 2939219296aSGreg Roach public function gedcomFilename(): string 2949219296aSGreg Roach { 2959219296aSGreg Roach return $this->gedcomRepository->gedcomFilename(); 2969219296aSGreg Roach } 2979219296aSGreg Roach 2989219296aSGreg Roach /** 2999219296aSGreg Roach * @inheritDoc 3009219296aSGreg Roach */ 3019219296aSGreg Roach public function gedcomId(): int 3029219296aSGreg Roach { 3039219296aSGreg Roach return $this->gedcomRepository->gedcomId(); 3049219296aSGreg Roach } 3059219296aSGreg Roach 3069219296aSGreg Roach /** 3079219296aSGreg Roach * @inheritDoc 3089219296aSGreg Roach */ 3099219296aSGreg Roach public function gedcomTitle(): string 3109219296aSGreg Roach { 3119219296aSGreg Roach return $this->gedcomRepository->gedcomTitle(); 3129219296aSGreg Roach } 3139219296aSGreg Roach 3149219296aSGreg Roach /** 3159219296aSGreg Roach * @inheritDoc 3169219296aSGreg Roach */ 3179219296aSGreg Roach public function gedcomCreatedSoftware(): string 3189219296aSGreg Roach { 3199219296aSGreg Roach return $this->gedcomRepository->gedcomCreatedSoftware(); 3209219296aSGreg Roach } 3219219296aSGreg Roach 3229219296aSGreg Roach /** 3239219296aSGreg Roach * @inheritDoc 3249219296aSGreg Roach */ 3259219296aSGreg Roach public function gedcomCreatedVersion(): string 3269219296aSGreg Roach { 3279219296aSGreg Roach return $this->gedcomRepository->gedcomCreatedVersion(); 3289219296aSGreg Roach } 3299219296aSGreg Roach 3309219296aSGreg Roach /** 3319219296aSGreg Roach * @inheritDoc 3329219296aSGreg Roach */ 3339219296aSGreg Roach public function gedcomDate(): string 3349219296aSGreg Roach { 3359219296aSGreg Roach return $this->gedcomRepository->gedcomDate(); 3369219296aSGreg Roach } 3379219296aSGreg Roach 3389219296aSGreg Roach /** 3399219296aSGreg Roach * @inheritDoc 3409219296aSGreg Roach */ 3419219296aSGreg Roach public function gedcomUpdated(): string 3429219296aSGreg Roach { 3439219296aSGreg Roach return $this->gedcomRepository->gedcomUpdated(); 3449219296aSGreg Roach } 3459219296aSGreg Roach 3469219296aSGreg Roach /** 3479219296aSGreg Roach * @inheritDoc 3489219296aSGreg Roach */ 3499219296aSGreg Roach public function gedcomRootId(): string 3509219296aSGreg Roach { 3519219296aSGreg Roach return $this->gedcomRepository->gedcomRootId(); 3529219296aSGreg Roach } 3539219296aSGreg Roach 3549219296aSGreg Roach /** 3559219296aSGreg Roach * @inheritDoc 3569219296aSGreg Roach */ 3579219296aSGreg Roach public function totalRecords(): string 3589219296aSGreg Roach { 3599219296aSGreg Roach return $this->individualRepository->totalRecords(); 3609219296aSGreg Roach } 3619219296aSGreg Roach 3629219296aSGreg Roach /** 3639219296aSGreg Roach * @inheritDoc 3649219296aSGreg Roach */ 3659219296aSGreg Roach public function totalIndividuals(): string 3669219296aSGreg Roach { 3679219296aSGreg Roach return $this->individualRepository->totalIndividuals(); 3689219296aSGreg Roach } 3699219296aSGreg Roach 3709219296aSGreg Roach /** 3719219296aSGreg Roach * @inheritDoc 3729219296aSGreg Roach */ 3739219296aSGreg Roach public function totalIndisWithSources(): string 3749219296aSGreg Roach { 3759219296aSGreg Roach return $this->individualRepository->totalIndisWithSources(); 3769219296aSGreg Roach } 3779219296aSGreg Roach 3789219296aSGreg Roach /** 3799219296aSGreg Roach * @inheritDoc 3809219296aSGreg Roach */ 3819219296aSGreg Roach public function chartIndisWithSources( 3829219296aSGreg Roach string $color_from = null, 3839219296aSGreg Roach string $color_to = null 38498afcacfSGreg Roach ): string { 38588de55fdSRico Sonntag return $this->individualRepository->chartIndisWithSources($color_from, $color_to); 3869219296aSGreg Roach } 3879219296aSGreg Roach 3889219296aSGreg Roach /** 3899219296aSGreg Roach * @inheritDoc 3909219296aSGreg Roach */ 3919219296aSGreg Roach public function totalIndividualsPercentage(): string 3929219296aSGreg Roach { 3939219296aSGreg Roach return $this->individualRepository->totalIndividualsPercentage(); 3949219296aSGreg Roach } 3959219296aSGreg Roach 3969219296aSGreg Roach /** 3979219296aSGreg Roach * @inheritDoc 3989219296aSGreg Roach */ 3999219296aSGreg Roach public function totalFamilies(): string 4009219296aSGreg Roach { 4019219296aSGreg Roach return $this->individualRepository->totalFamilies(); 4029219296aSGreg Roach } 4039219296aSGreg Roach 4049219296aSGreg Roach /** 4059219296aSGreg Roach * @inheritDoc 4069219296aSGreg Roach */ 4079219296aSGreg Roach public function totalFamiliesPercentage(): string 4089219296aSGreg Roach { 4099219296aSGreg Roach return $this->individualRepository->totalFamiliesPercentage(); 4109219296aSGreg Roach } 4119219296aSGreg Roach 4129219296aSGreg Roach /** 4139219296aSGreg Roach * @inheritDoc 4149219296aSGreg Roach */ 4159219296aSGreg Roach public function totalFamsWithSources(): string 4169219296aSGreg Roach { 4179219296aSGreg Roach return $this->individualRepository->totalFamsWithSources(); 4189219296aSGreg Roach } 4199219296aSGreg Roach 4209219296aSGreg Roach /** 4219219296aSGreg Roach * @inheritDoc 4229219296aSGreg Roach */ 4239219296aSGreg Roach public function chartFamsWithSources( 4249219296aSGreg Roach string $color_from = null, 4259219296aSGreg Roach string $color_to = null 42698afcacfSGreg Roach ): string { 42788de55fdSRico Sonntag return $this->individualRepository->chartFamsWithSources($color_from, $color_to); 4289219296aSGreg Roach } 4299219296aSGreg Roach 4309219296aSGreg Roach /** 4319219296aSGreg Roach * @inheritDoc 4329219296aSGreg Roach */ 4339219296aSGreg Roach public function totalSources(): string 4349219296aSGreg Roach { 4359219296aSGreg Roach return $this->individualRepository->totalSources(); 4369219296aSGreg Roach } 4379219296aSGreg Roach 4389219296aSGreg Roach /** 4399219296aSGreg Roach * @inheritDoc 4409219296aSGreg Roach */ 4419219296aSGreg Roach public function totalSourcesPercentage(): string 4429219296aSGreg Roach { 4439219296aSGreg Roach return $this->individualRepository->totalSourcesPercentage(); 4449219296aSGreg Roach } 4459219296aSGreg Roach 4469219296aSGreg Roach /** 4479219296aSGreg Roach * @inheritDoc 4489219296aSGreg Roach */ 4499219296aSGreg Roach public function totalNotes(): string 4509219296aSGreg Roach { 4519219296aSGreg Roach return $this->individualRepository->totalNotes(); 4529219296aSGreg Roach } 4539219296aSGreg Roach 4549219296aSGreg Roach /** 4559219296aSGreg Roach * @inheritDoc 4569219296aSGreg Roach */ 4579219296aSGreg Roach public function totalNotesPercentage(): string 4589219296aSGreg Roach { 4599219296aSGreg Roach return $this->individualRepository->totalNotesPercentage(); 4609219296aSGreg Roach } 4619219296aSGreg Roach 4629219296aSGreg Roach /** 4639219296aSGreg Roach * @inheritDoc 4649219296aSGreg Roach */ 4659219296aSGreg Roach public function totalRepositories(): string 4669219296aSGreg Roach { 4679219296aSGreg Roach return $this->individualRepository->totalRepositories(); 4689219296aSGreg Roach } 4699219296aSGreg Roach 4709219296aSGreg Roach /** 4719219296aSGreg Roach * @inheritDoc 4729219296aSGreg Roach */ 4739219296aSGreg Roach public function totalRepositoriesPercentage(): string 4749219296aSGreg Roach { 4759219296aSGreg Roach return $this->individualRepository->totalRepositoriesPercentage(); 4769219296aSGreg Roach } 4779219296aSGreg Roach 4789219296aSGreg Roach /** 4799219296aSGreg Roach * @inheritDoc 4809219296aSGreg Roach */ 4819219296aSGreg Roach public function totalSurnames(...$params): string 4829219296aSGreg Roach { 4839219296aSGreg Roach return $this->individualRepository->totalSurnames(...$params); 4849219296aSGreg Roach } 4859219296aSGreg Roach 4869219296aSGreg Roach /** 4879219296aSGreg Roach * @inheritDoc 4889219296aSGreg Roach */ 4899219296aSGreg Roach public function totalGivennames(...$params): string 4909219296aSGreg Roach { 4919219296aSGreg Roach return $this->individualRepository->totalGivennames(...$params); 4929219296aSGreg Roach } 4939219296aSGreg Roach 4949219296aSGreg Roach /** 4959219296aSGreg Roach * @inheritDoc 4969219296aSGreg Roach */ 4979219296aSGreg Roach public function totalEvents(array $events = []): string 4989219296aSGreg Roach { 4999219296aSGreg Roach return $this->eventRepository->totalEvents($events); 5009219296aSGreg Roach } 5019219296aSGreg Roach 5029219296aSGreg Roach /** 5039219296aSGreg Roach * @inheritDoc 5049219296aSGreg Roach */ 5059219296aSGreg Roach public function totalEventsBirth(): string 5069219296aSGreg Roach { 5079219296aSGreg Roach return $this->eventRepository->totalEventsBirth(); 5089219296aSGreg Roach } 5099219296aSGreg Roach 5109219296aSGreg Roach /** 5119219296aSGreg Roach * @inheritDoc 5129219296aSGreg Roach */ 5139219296aSGreg Roach public function totalBirths(): string 5149219296aSGreg Roach { 5159219296aSGreg Roach return $this->eventRepository->totalBirths(); 5169219296aSGreg Roach } 5179219296aSGreg Roach 5189219296aSGreg Roach /** 5199219296aSGreg Roach * @inheritDoc 5209219296aSGreg Roach */ 5219219296aSGreg Roach public function totalEventsDeath(): string 5229219296aSGreg Roach { 5239219296aSGreg Roach return $this->eventRepository->totalEventsDeath(); 5249219296aSGreg Roach } 5259219296aSGreg Roach 5269219296aSGreg Roach /** 5279219296aSGreg Roach * @inheritDoc 5289219296aSGreg Roach */ 5299219296aSGreg Roach public function totalDeaths(): string 5309219296aSGreg Roach { 5319219296aSGreg Roach return $this->eventRepository->totalDeaths(); 5329219296aSGreg Roach } 5339219296aSGreg Roach 5349219296aSGreg Roach /** 5359219296aSGreg Roach * @inheritDoc 5369219296aSGreg Roach */ 5379219296aSGreg Roach public function totalEventsMarriage(): string 5389219296aSGreg Roach { 5399219296aSGreg Roach return $this->eventRepository->totalEventsMarriage(); 5409219296aSGreg Roach } 5419219296aSGreg Roach 5429219296aSGreg Roach /** 5439219296aSGreg Roach * @inheritDoc 5449219296aSGreg Roach */ 5459219296aSGreg Roach public function totalMarriages(): string 5469219296aSGreg Roach { 5479219296aSGreg Roach return $this->eventRepository->totalMarriages(); 5489219296aSGreg Roach } 5499219296aSGreg Roach 5509219296aSGreg Roach /** 5519219296aSGreg Roach * @inheritDoc 5529219296aSGreg Roach */ 5539219296aSGreg Roach public function totalEventsDivorce(): string 5549219296aSGreg Roach { 5559219296aSGreg Roach return $this->eventRepository->totalEventsDivorce(); 5569219296aSGreg Roach } 5579219296aSGreg Roach 5589219296aSGreg Roach /** 5599219296aSGreg Roach * @inheritDoc 5609219296aSGreg Roach */ 5619219296aSGreg Roach public function totalDivorces(): string 5629219296aSGreg Roach { 5639219296aSGreg Roach return $this->eventRepository->totalDivorces(); 5649219296aSGreg Roach } 5659219296aSGreg Roach 5669219296aSGreg Roach /** 5679219296aSGreg Roach * @inheritDoc 5689219296aSGreg Roach */ 5699219296aSGreg Roach public function totalEventsOther(): string 5709219296aSGreg Roach { 5719219296aSGreg Roach return $this->eventRepository->totalEventsOther(); 5729219296aSGreg Roach } 5739219296aSGreg Roach 5749219296aSGreg Roach /** 5759219296aSGreg Roach * @inheritDoc 5769219296aSGreg Roach */ 5779219296aSGreg Roach public function totalSexMales(): string 5789219296aSGreg Roach { 5799219296aSGreg Roach return $this->individualRepository->totalSexMales(); 5809219296aSGreg Roach } 5819219296aSGreg Roach 5829219296aSGreg Roach /** 5839219296aSGreg Roach * @inheritDoc 5849219296aSGreg Roach */ 5859219296aSGreg Roach public function totalSexMalesPercentage(): string 5869219296aSGreg Roach { 5879219296aSGreg Roach return $this->individualRepository->totalSexMalesPercentage(); 5889219296aSGreg Roach } 5899219296aSGreg Roach 5909219296aSGreg Roach /** 5919219296aSGreg Roach * @inheritDoc 5929219296aSGreg Roach */ 5939219296aSGreg Roach public function totalSexFemales(): string 5949219296aSGreg Roach { 5959219296aSGreg Roach return $this->individualRepository->totalSexFemales(); 5969219296aSGreg Roach } 5979219296aSGreg Roach 5989219296aSGreg Roach /** 5999219296aSGreg Roach * @inheritDoc 6009219296aSGreg Roach */ 6019219296aSGreg Roach public function totalSexFemalesPercentage(): string 6029219296aSGreg Roach { 6039219296aSGreg Roach return $this->individualRepository->totalSexFemalesPercentage(); 6049219296aSGreg Roach } 6059219296aSGreg Roach 6069219296aSGreg Roach /** 6079219296aSGreg Roach * @inheritDoc 6089219296aSGreg Roach */ 6099219296aSGreg Roach public function totalSexUnknown(): string 6109219296aSGreg Roach { 6119219296aSGreg Roach return $this->individualRepository->totalSexUnknown(); 6129219296aSGreg Roach } 6139219296aSGreg Roach 6149219296aSGreg Roach /** 6159219296aSGreg Roach * @inheritDoc 6169219296aSGreg Roach */ 6179219296aSGreg Roach public function totalSexUnknownPercentage(): string 6189219296aSGreg Roach { 6199219296aSGreg Roach return $this->individualRepository->totalSexUnknownPercentage(); 6209219296aSGreg Roach } 6219219296aSGreg Roach 6229219296aSGreg Roach /** 6239219296aSGreg Roach * @inheritDoc 6249219296aSGreg Roach */ 6259219296aSGreg Roach public function chartSex( 6269219296aSGreg Roach string $color_female = null, 6279219296aSGreg Roach string $color_male = null, 6289219296aSGreg Roach string $color_unknown = null 62998afcacfSGreg Roach ): string { 63088de55fdSRico Sonntag return $this->individualRepository->chartSex($color_female, $color_male, $color_unknown); 6319219296aSGreg Roach } 6329219296aSGreg Roach 6339219296aSGreg Roach /** 6349219296aSGreg Roach * @inheritDoc 6359219296aSGreg Roach */ 6369219296aSGreg Roach public function totalLiving(): string 6379219296aSGreg Roach { 6389219296aSGreg Roach return $this->individualRepository->totalLiving(); 6399219296aSGreg Roach } 6409219296aSGreg Roach 6419219296aSGreg Roach /** 6429219296aSGreg Roach * @inheritDoc 6439219296aSGreg Roach */ 6449219296aSGreg Roach public function totalLivingPercentage(): string 6459219296aSGreg Roach { 6469219296aSGreg Roach return $this->individualRepository->totalLivingPercentage(); 6479219296aSGreg Roach } 6489219296aSGreg Roach 6499219296aSGreg Roach /** 6509219296aSGreg Roach * @inheritDoc 6519219296aSGreg Roach */ 6529219296aSGreg Roach public function totalDeceased(): string 6539219296aSGreg Roach { 6549219296aSGreg Roach return $this->individualRepository->totalDeceased(); 6559219296aSGreg Roach } 6569219296aSGreg Roach 6579219296aSGreg Roach /** 6589219296aSGreg Roach * @inheritDoc 6599219296aSGreg Roach */ 6609219296aSGreg Roach public function totalDeceasedPercentage(): string 6619219296aSGreg Roach { 6629219296aSGreg Roach return $this->individualRepository->totalDeceasedPercentage(); 6639219296aSGreg Roach } 6649219296aSGreg Roach 6659219296aSGreg Roach /** 6669219296aSGreg Roach * @inheritDoc 6679219296aSGreg Roach */ 66888de55fdSRico Sonntag public function chartMortality(string $color_living = null, string $color_dead = null): string 6699219296aSGreg Roach { 67088de55fdSRico Sonntag return $this->individualRepository->chartMortality($color_living, $color_dead); 6719219296aSGreg Roach } 6729219296aSGreg Roach 6739219296aSGreg Roach /** 6749219296aSGreg Roach * @inheritDoc 6759219296aSGreg Roach */ 6769219296aSGreg Roach public function totalMedia(): string 6779219296aSGreg Roach { 6789219296aSGreg Roach return $this->mediaRepository->totalMedia(); 6799219296aSGreg Roach } 6809219296aSGreg Roach 6819219296aSGreg Roach /** 6829219296aSGreg Roach * @inheritDoc 6839219296aSGreg Roach */ 6849219296aSGreg Roach public function totalMediaAudio(): string 6859219296aSGreg Roach { 6869219296aSGreg Roach return $this->mediaRepository->totalMediaAudio(); 6879219296aSGreg Roach } 6889219296aSGreg Roach 6899219296aSGreg Roach /** 6909219296aSGreg Roach * @inheritDoc 6919219296aSGreg Roach */ 6929219296aSGreg Roach public function totalMediaBook(): string 6939219296aSGreg Roach { 6949219296aSGreg Roach return $this->mediaRepository->totalMediaBook(); 6959219296aSGreg Roach } 6969219296aSGreg Roach 6979219296aSGreg Roach /** 6989219296aSGreg Roach * @inheritDoc 6999219296aSGreg Roach */ 7009219296aSGreg Roach public function totalMediaCard(): string 7019219296aSGreg Roach { 7029219296aSGreg Roach return $this->mediaRepository->totalMediaCard(); 7039219296aSGreg Roach } 7049219296aSGreg Roach 7059219296aSGreg Roach /** 7069219296aSGreg Roach * @inheritDoc 7079219296aSGreg Roach */ 7089219296aSGreg Roach public function totalMediaCertificate(): string 7099219296aSGreg Roach { 7109219296aSGreg Roach return $this->mediaRepository->totalMediaCertificate(); 7119219296aSGreg Roach } 7129219296aSGreg Roach 7139219296aSGreg Roach /** 7149219296aSGreg Roach * @inheritDoc 7159219296aSGreg Roach */ 7169219296aSGreg Roach public function totalMediaCoatOfArms(): string 7179219296aSGreg Roach { 7189219296aSGreg Roach return $this->mediaRepository->totalMediaCoatOfArms(); 7199219296aSGreg Roach } 7209219296aSGreg Roach 7219219296aSGreg Roach /** 7229219296aSGreg Roach * @inheritDoc 7239219296aSGreg Roach */ 7249219296aSGreg Roach public function totalMediaDocument(): string 7259219296aSGreg Roach { 7269219296aSGreg Roach return $this->mediaRepository->totalMediaDocument(); 7279219296aSGreg Roach } 7289219296aSGreg Roach 7299219296aSGreg Roach /** 7309219296aSGreg Roach * @inheritDoc 7319219296aSGreg Roach */ 7329219296aSGreg Roach public function totalMediaElectronic(): string 7339219296aSGreg Roach { 7349219296aSGreg Roach return $this->mediaRepository->totalMediaElectronic(); 7359219296aSGreg Roach } 7369219296aSGreg Roach 7379219296aSGreg Roach /** 7389219296aSGreg Roach * @inheritDoc 7399219296aSGreg Roach */ 7409219296aSGreg Roach public function totalMediaMagazine(): string 7419219296aSGreg Roach { 7429219296aSGreg Roach return $this->mediaRepository->totalMediaMagazine(); 7439219296aSGreg Roach } 7449219296aSGreg Roach 7459219296aSGreg Roach /** 7469219296aSGreg Roach * @inheritDoc 7479219296aSGreg Roach */ 7489219296aSGreg Roach public function totalMediaManuscript(): string 7499219296aSGreg Roach { 7509219296aSGreg Roach return $this->mediaRepository->totalMediaManuscript(); 7519219296aSGreg Roach } 7529219296aSGreg Roach 7539219296aSGreg Roach /** 7549219296aSGreg Roach * @inheritDoc 7559219296aSGreg Roach */ 7569219296aSGreg Roach public function totalMediaMap(): string 7579219296aSGreg Roach { 7589219296aSGreg Roach return $this->mediaRepository->totalMediaMap(); 7599219296aSGreg Roach } 7609219296aSGreg Roach 7619219296aSGreg Roach /** 7629219296aSGreg Roach * @inheritDoc 7639219296aSGreg Roach */ 7649219296aSGreg Roach public function totalMediaFiche(): string 7659219296aSGreg Roach { 7669219296aSGreg Roach return $this->mediaRepository->totalMediaFiche(); 7679219296aSGreg Roach } 7689219296aSGreg Roach 7699219296aSGreg Roach /** 7709219296aSGreg Roach * @inheritDoc 7719219296aSGreg Roach */ 7729219296aSGreg Roach public function totalMediaFilm(): string 7739219296aSGreg Roach { 7749219296aSGreg Roach return $this->mediaRepository->totalMediaFilm(); 7759219296aSGreg Roach } 7769219296aSGreg Roach 7779219296aSGreg Roach /** 7789219296aSGreg Roach * @inheritDoc 7799219296aSGreg Roach */ 7809219296aSGreg Roach public function totalMediaNewspaper(): string 7819219296aSGreg Roach { 7829219296aSGreg Roach return $this->mediaRepository->totalMediaNewspaper(); 7839219296aSGreg Roach } 7849219296aSGreg Roach 7859219296aSGreg Roach /** 7869219296aSGreg Roach * @inheritDoc 7879219296aSGreg Roach */ 7889219296aSGreg Roach public function totalMediaPainting(): string 7899219296aSGreg Roach { 7909219296aSGreg Roach return $this->mediaRepository->totalMediaPainting(); 7919219296aSGreg Roach } 7929219296aSGreg Roach 7939219296aSGreg Roach /** 7949219296aSGreg Roach * @inheritDoc 7959219296aSGreg Roach */ 7969219296aSGreg Roach public function totalMediaPhoto(): string 7979219296aSGreg Roach { 7989219296aSGreg Roach return $this->mediaRepository->totalMediaPhoto(); 7999219296aSGreg Roach } 8009219296aSGreg Roach 8019219296aSGreg Roach /** 8029219296aSGreg Roach * @inheritDoc 8039219296aSGreg Roach */ 8049219296aSGreg Roach public function totalMediaTombstone(): string 8059219296aSGreg Roach { 8069219296aSGreg Roach return $this->mediaRepository->totalMediaTombstone(); 8079219296aSGreg Roach } 8089219296aSGreg Roach 8099219296aSGreg Roach /** 8109219296aSGreg Roach * @inheritDoc 8119219296aSGreg Roach */ 8129219296aSGreg Roach public function totalMediaVideo(): string 8139219296aSGreg Roach { 8149219296aSGreg Roach return $this->mediaRepository->totalMediaVideo(); 8159219296aSGreg Roach } 8169219296aSGreg Roach 8179219296aSGreg Roach /** 8189219296aSGreg Roach * @inheritDoc 8199219296aSGreg Roach */ 8209219296aSGreg Roach public function totalMediaOther(): string 8219219296aSGreg Roach { 8229219296aSGreg Roach return $this->mediaRepository->totalMediaOther(); 8239219296aSGreg Roach } 8249219296aSGreg Roach 8259219296aSGreg Roach /** 8269219296aSGreg Roach * @inheritDoc 8279219296aSGreg Roach */ 8289219296aSGreg Roach public function totalMediaUnknown(): string 8299219296aSGreg Roach { 8309219296aSGreg Roach return $this->mediaRepository->totalMediaUnknown(); 8319219296aSGreg Roach } 8329219296aSGreg Roach 8339219296aSGreg Roach /** 8349219296aSGreg Roach * @inheritDoc 8359219296aSGreg Roach */ 83688de55fdSRico Sonntag public function chartMedia(string $color_from = null, string $color_to = null): string 8379219296aSGreg Roach { 83888de55fdSRico Sonntag return $this->mediaRepository->chartMedia($color_from, $color_to); 8399219296aSGreg Roach } 8409219296aSGreg Roach 8419219296aSGreg Roach /** 8429219296aSGreg Roach * @inheritDoc 8439219296aSGreg Roach */ 8449219296aSGreg Roach public function statsPlaces(string $what = 'ALL', string $fact = '', int $parent = 0, bool $country = false): array 8459219296aSGreg Roach { 8469219296aSGreg Roach return $this->placeRepository->statsPlaces($what, $fact, $parent, $country); 8479219296aSGreg Roach } 8489219296aSGreg Roach 8499219296aSGreg Roach /** 8509219296aSGreg Roach * @inheritDoc 8519219296aSGreg Roach */ 8529219296aSGreg Roach public function totalPlaces(): string 8539219296aSGreg Roach { 8549219296aSGreg Roach return $this->placeRepository->totalPlaces(); 8559219296aSGreg Roach } 8569219296aSGreg Roach 8579219296aSGreg Roach /** 8589219296aSGreg Roach * @inheritDoc 8599219296aSGreg Roach */ 8609219296aSGreg Roach public function chartDistribution( 8619219296aSGreg Roach string $chart_shows = 'world', 8629219296aSGreg Roach string $chart_type = '', 8639219296aSGreg Roach string $surname = '' 86498afcacfSGreg Roach ): string { 8659219296aSGreg Roach return $this->placeRepository->chartDistribution($chart_shows, $chart_type, $surname); 8669219296aSGreg Roach } 8679219296aSGreg Roach 8689219296aSGreg Roach /** 8699219296aSGreg Roach * @inheritDoc 8709219296aSGreg Roach */ 8719219296aSGreg Roach public function commonCountriesList(): string 8729219296aSGreg Roach { 8739219296aSGreg Roach return $this->placeRepository->commonCountriesList(); 8749219296aSGreg Roach } 8759219296aSGreg Roach 8769219296aSGreg Roach /** 8779219296aSGreg Roach * @inheritDoc 8789219296aSGreg Roach */ 8799219296aSGreg Roach public function commonBirthPlacesList(): string 8809219296aSGreg Roach { 8819219296aSGreg Roach return $this->placeRepository->commonBirthPlacesList(); 8829219296aSGreg Roach } 8839219296aSGreg Roach 8849219296aSGreg Roach /** 8859219296aSGreg Roach * @inheritDoc 8869219296aSGreg Roach */ 8879219296aSGreg Roach public function commonDeathPlacesList(): string 8889219296aSGreg Roach { 8899219296aSGreg Roach return $this->placeRepository->commonDeathPlacesList(); 8909219296aSGreg Roach } 8919219296aSGreg Roach 8929219296aSGreg Roach /** 8939219296aSGreg Roach * @inheritDoc 8949219296aSGreg Roach */ 8959219296aSGreg Roach public function commonMarriagePlacesList(): string 8969219296aSGreg Roach { 8979219296aSGreg Roach return $this->placeRepository->commonMarriagePlacesList(); 8989219296aSGreg Roach } 8999219296aSGreg Roach 9009219296aSGreg Roach /** 9019219296aSGreg Roach * @inheritDoc 9029219296aSGreg Roach */ 9039219296aSGreg Roach public function firstBirth(): string 9049219296aSGreg Roach { 9059219296aSGreg Roach return $this->familyDatesRepository->firstBirth(); 9069219296aSGreg Roach } 9079219296aSGreg Roach 9089219296aSGreg Roach /** 9099219296aSGreg Roach * @inheritDoc 9109219296aSGreg Roach */ 9119219296aSGreg Roach public function firstBirthYear(): string 9129219296aSGreg Roach { 9139219296aSGreg Roach return $this->familyDatesRepository->firstBirthYear(); 9149219296aSGreg Roach } 9159219296aSGreg Roach 9169219296aSGreg Roach /** 9179219296aSGreg Roach * @inheritDoc 9189219296aSGreg Roach */ 9199219296aSGreg Roach public function firstBirthName(): string 9209219296aSGreg Roach { 9219219296aSGreg Roach return $this->familyDatesRepository->firstBirthName(); 9229219296aSGreg Roach } 9239219296aSGreg Roach 9249219296aSGreg Roach /** 9259219296aSGreg Roach * @inheritDoc 9269219296aSGreg Roach */ 9279219296aSGreg Roach public function firstBirthPlace(): string 9289219296aSGreg Roach { 9299219296aSGreg Roach return $this->familyDatesRepository->firstBirthPlace(); 9309219296aSGreg Roach } 9319219296aSGreg Roach 9329219296aSGreg Roach /** 9339219296aSGreg Roach * @inheritDoc 9349219296aSGreg Roach */ 9359219296aSGreg Roach public function lastBirth(): string 9369219296aSGreg Roach { 9379219296aSGreg Roach return $this->familyDatesRepository->lastBirth(); 9389219296aSGreg Roach } 9399219296aSGreg Roach 9409219296aSGreg Roach /** 9419219296aSGreg Roach * @inheritDoc 9429219296aSGreg Roach */ 9439219296aSGreg Roach public function lastBirthYear(): string 9449219296aSGreg Roach { 9459219296aSGreg Roach return $this->familyDatesRepository->lastBirthYear(); 9469219296aSGreg Roach } 9479219296aSGreg Roach 9489219296aSGreg Roach /** 9499219296aSGreg Roach * @inheritDoc 9509219296aSGreg Roach */ 9519219296aSGreg Roach public function lastBirthName(): string 9529219296aSGreg Roach { 9539219296aSGreg Roach return $this->familyDatesRepository->lastBirthName(); 9549219296aSGreg Roach } 9559219296aSGreg Roach 9569219296aSGreg Roach /** 9579219296aSGreg Roach * @inheritDoc 9589219296aSGreg Roach */ 9599219296aSGreg Roach public function lastBirthPlace(): string 9609219296aSGreg Roach { 9619219296aSGreg Roach return $this->familyDatesRepository->lastBirthPlace(); 9629219296aSGreg Roach } 9639219296aSGreg Roach 9649219296aSGreg Roach /** 9659219296aSGreg Roach * @inheritDoc 9669219296aSGreg Roach */ 967cde1d378SGreg Roach public function statsBirthQuery(int $year1 = -1, int $year2 = -1): Builder 9689219296aSGreg Roach { 969cde1d378SGreg Roach return $this->individualRepository->statsBirthQuery($year1, $year2); 970cde1d378SGreg Roach } 971cde1d378SGreg Roach 972cde1d378SGreg Roach /** 973cde1d378SGreg Roach * @inheritDoc 974cde1d378SGreg Roach */ 975cde1d378SGreg Roach public function statsBirthBySexQuery(int $year1 = -1, int $year2 = -1): Builder 976cde1d378SGreg Roach { 977cde1d378SGreg Roach return $this->individualRepository->statsBirthBySexQuery($year1, $year2); 9789219296aSGreg Roach } 9799219296aSGreg Roach 9809219296aSGreg Roach /** 9819219296aSGreg Roach * @inheritDoc 9829219296aSGreg Roach */ 98388de55fdSRico Sonntag public function statsBirth(string $color_from = null, string $color_to = null): string 9849219296aSGreg Roach { 98588de55fdSRico Sonntag return $this->individualRepository->statsBirth($color_from, $color_to); 9869219296aSGreg Roach } 9879219296aSGreg Roach 9889219296aSGreg Roach /** 9899219296aSGreg Roach * @inheritDoc 9909219296aSGreg Roach */ 9919219296aSGreg Roach public function firstDeath(): string 9929219296aSGreg Roach { 9939219296aSGreg Roach return $this->familyDatesRepository->firstDeath(); 9949219296aSGreg Roach } 9959219296aSGreg Roach 9969219296aSGreg Roach /** 9979219296aSGreg Roach * @inheritDoc 9989219296aSGreg Roach */ 9999219296aSGreg Roach public function firstDeathYear(): string 10009219296aSGreg Roach { 10019219296aSGreg Roach return $this->familyDatesRepository->firstDeathYear(); 10029219296aSGreg Roach } 10039219296aSGreg Roach 10049219296aSGreg Roach /** 10059219296aSGreg Roach * @inheritDoc 10069219296aSGreg Roach */ 10079219296aSGreg Roach public function firstDeathName(): string 10089219296aSGreg Roach { 10099219296aSGreg Roach return $this->familyDatesRepository->firstDeathName(); 10109219296aSGreg Roach } 10119219296aSGreg Roach 10129219296aSGreg Roach /** 10139219296aSGreg Roach * @inheritDoc 10149219296aSGreg Roach */ 10159219296aSGreg Roach public function firstDeathPlace(): string 10169219296aSGreg Roach { 10179219296aSGreg Roach return $this->familyDatesRepository->firstDeathPlace(); 10189219296aSGreg Roach } 10199219296aSGreg Roach 10209219296aSGreg Roach /** 10219219296aSGreg Roach * @inheritDoc 10229219296aSGreg Roach */ 10239219296aSGreg Roach public function lastDeath(): string 10249219296aSGreg Roach { 10259219296aSGreg Roach return $this->familyDatesRepository->lastDeath(); 10269219296aSGreg Roach } 10279219296aSGreg Roach 10289219296aSGreg Roach /** 10299219296aSGreg Roach * @inheritDoc 10309219296aSGreg Roach */ 10319219296aSGreg Roach public function lastDeathYear(): string 10329219296aSGreg Roach { 10339219296aSGreg Roach return $this->familyDatesRepository->lastDeathYear(); 10349219296aSGreg Roach } 10359219296aSGreg Roach 10369219296aSGreg Roach /** 10379219296aSGreg Roach * @inheritDoc 10389219296aSGreg Roach */ 10399219296aSGreg Roach public function lastDeathName(): string 10409219296aSGreg Roach { 10419219296aSGreg Roach return $this->familyDatesRepository->lastDeathName(); 10429219296aSGreg Roach } 10439219296aSGreg Roach 10449219296aSGreg Roach /** 10459219296aSGreg Roach * @inheritDoc 10469219296aSGreg Roach */ 10479219296aSGreg Roach public function lastDeathPlace(): string 10489219296aSGreg Roach { 10499219296aSGreg Roach return $this->familyDatesRepository->lastDeathPlace(); 10509219296aSGreg Roach } 10519219296aSGreg Roach 10529219296aSGreg Roach /** 10539219296aSGreg Roach * @inheritDoc 10549219296aSGreg Roach */ 1055cde1d378SGreg Roach public function statsDeathQuery(int $year1 = -1, int $year2 = -1): Builder 10569219296aSGreg Roach { 1057cde1d378SGreg Roach return $this->individualRepository->statsDeathQuery($year1, $year2); 1058cde1d378SGreg Roach } 1059cde1d378SGreg Roach 1060cde1d378SGreg Roach /** 1061cde1d378SGreg Roach * @inheritDoc 1062cde1d378SGreg Roach */ 1063cde1d378SGreg Roach public function statsDeathBySexQuery(int $year1 = -1, int $year2 = -1): Builder 1064cde1d378SGreg Roach { 1065cde1d378SGreg Roach return $this->individualRepository->statsDeathBySexQuery($year1, $year2); 10669219296aSGreg Roach } 10679219296aSGreg Roach 10689219296aSGreg Roach /** 10699219296aSGreg Roach * @inheritDoc 10709219296aSGreg Roach */ 107188de55fdSRico Sonntag public function statsDeath(string $color_from = null, string $color_to = null): string 10729219296aSGreg Roach { 107388de55fdSRico Sonntag return $this->individualRepository->statsDeath($color_from, $color_to); 10749219296aSGreg Roach } 10759219296aSGreg Roach 10769219296aSGreg Roach /** 10779219296aSGreg Roach * @inheritDoc 10789219296aSGreg Roach */ 10799219296aSGreg Roach public function statsAgeQuery(string $related = 'BIRT', string $sex = 'BOTH', int $year1 = -1, int $year2 = -1) 10809219296aSGreg Roach { 10819219296aSGreg Roach return $this->individualRepository->statsAgeQuery($related, $sex, $year1, $year2); 10829219296aSGreg Roach } 10839219296aSGreg Roach 10849219296aSGreg Roach /** 10859219296aSGreg Roach * @inheritDoc 10869219296aSGreg Roach */ 108788de55fdSRico Sonntag public function statsAge(): string 10889219296aSGreg Roach { 108988de55fdSRico Sonntag return $this->individualRepository->statsAge(); 10909219296aSGreg Roach } 10919219296aSGreg Roach 10929219296aSGreg Roach /** 10939219296aSGreg Roach * @inheritDoc 10949219296aSGreg Roach */ 10959219296aSGreg Roach public function longestLife(): string 10969219296aSGreg Roach { 10979219296aSGreg Roach return $this->individualRepository->longestLife(); 10989219296aSGreg Roach } 10999219296aSGreg Roach 11009219296aSGreg Roach /** 11019219296aSGreg Roach * @inheritDoc 11029219296aSGreg Roach */ 11039219296aSGreg Roach public function longestLifeAge(): string 11049219296aSGreg Roach { 11059219296aSGreg Roach return $this->individualRepository->longestLifeAge(); 11069219296aSGreg Roach } 11079219296aSGreg Roach 11089219296aSGreg Roach /** 11099219296aSGreg Roach * @inheritDoc 11109219296aSGreg Roach */ 11119219296aSGreg Roach public function longestLifeName(): string 11129219296aSGreg Roach { 11139219296aSGreg Roach return $this->individualRepository->longestLifeName(); 11149219296aSGreg Roach } 11159219296aSGreg Roach 11169219296aSGreg Roach /** 11179219296aSGreg Roach * @inheritDoc 11189219296aSGreg Roach */ 11199219296aSGreg Roach public function longestLifeFemale(): string 11209219296aSGreg Roach { 11219219296aSGreg Roach return $this->individualRepository->longestLifeFemale(); 11229219296aSGreg Roach } 11239219296aSGreg Roach 11249219296aSGreg Roach /** 11259219296aSGreg Roach * @inheritDoc 11269219296aSGreg Roach */ 11279219296aSGreg Roach public function longestLifeFemaleAge(): string 11289219296aSGreg Roach { 11299219296aSGreg Roach return $this->individualRepository->longestLifeFemaleAge(); 11309219296aSGreg Roach } 11319219296aSGreg Roach 11329219296aSGreg Roach /** 11339219296aSGreg Roach * @inheritDoc 11349219296aSGreg Roach */ 11359219296aSGreg Roach public function longestLifeFemaleName(): string 11369219296aSGreg Roach { 11379219296aSGreg Roach return $this->individualRepository->longestLifeFemaleName(); 11389219296aSGreg Roach } 11399219296aSGreg Roach 11409219296aSGreg Roach /** 11419219296aSGreg Roach * @inheritDoc 11429219296aSGreg Roach */ 11439219296aSGreg Roach public function longestLifeMale(): string 11449219296aSGreg Roach { 11459219296aSGreg Roach return $this->individualRepository->longestLifeMale(); 11469219296aSGreg Roach } 11479219296aSGreg Roach 11489219296aSGreg Roach /** 11499219296aSGreg Roach * @inheritDoc 11509219296aSGreg Roach */ 11519219296aSGreg Roach public function longestLifeMaleAge(): string 11529219296aSGreg Roach { 11539219296aSGreg Roach return $this->individualRepository->longestLifeMaleAge(); 11549219296aSGreg Roach } 11559219296aSGreg Roach 11569219296aSGreg Roach /** 11579219296aSGreg Roach * @inheritDoc 11589219296aSGreg Roach */ 11599219296aSGreg Roach public function longestLifeMaleName(): string 11609219296aSGreg Roach { 11619219296aSGreg Roach return $this->individualRepository->longestLifeMaleName(); 11629219296aSGreg Roach } 11639219296aSGreg Roach 11649219296aSGreg Roach /** 11659219296aSGreg Roach * @inheritDoc 11669219296aSGreg Roach */ 11679219296aSGreg Roach public function topTenOldest(string $total = '10'): string 11689219296aSGreg Roach { 11699219296aSGreg Roach return $this->individualRepository->topTenOldest((int) $total); 11709219296aSGreg Roach } 11719219296aSGreg Roach 11729219296aSGreg Roach /** 11739219296aSGreg Roach * @inheritDoc 11749219296aSGreg Roach */ 11759219296aSGreg Roach public function topTenOldestList(string $total = '10'): string 11769219296aSGreg Roach { 11779219296aSGreg Roach return $this->individualRepository->topTenOldestList((int) $total); 11789219296aSGreg Roach } 11799219296aSGreg Roach 11809219296aSGreg Roach /** 11819219296aSGreg Roach * @inheritDoc 11829219296aSGreg Roach */ 11839219296aSGreg Roach public function topTenOldestFemale(string $total = '10'): string 11849219296aSGreg Roach { 11859219296aSGreg Roach return $this->individualRepository->topTenOldestFemale((int) $total); 11869219296aSGreg Roach } 11879219296aSGreg Roach 11889219296aSGreg Roach /** 11899219296aSGreg Roach * @inheritDoc 11909219296aSGreg Roach */ 11919219296aSGreg Roach public function topTenOldestFemaleList(string $total = '10'): string 11929219296aSGreg Roach { 11939219296aSGreg Roach return $this->individualRepository->topTenOldestFemaleList((int) $total); 11949219296aSGreg Roach } 11959219296aSGreg Roach 11969219296aSGreg Roach /** 11979219296aSGreg Roach * @inheritDoc 11989219296aSGreg Roach */ 11999219296aSGreg Roach public function topTenOldestMale(string $total = '10'): string 12009219296aSGreg Roach { 12019219296aSGreg Roach return $this->individualRepository->topTenOldestMale((int) $total); 12029219296aSGreg Roach } 12039219296aSGreg Roach 12049219296aSGreg Roach /** 12059219296aSGreg Roach * @inheritDoc 12069219296aSGreg Roach */ 12079219296aSGreg Roach public function topTenOldestMaleList(string $total = '10'): string 12089219296aSGreg Roach { 12099219296aSGreg Roach return $this->individualRepository->topTenOldestMaleList((int) $total); 12109219296aSGreg Roach } 12119219296aSGreg Roach 12129219296aSGreg Roach /** 12139219296aSGreg Roach * @inheritDoc 12149219296aSGreg Roach */ 12159219296aSGreg Roach public function topTenOldestAlive(string $total = '10'): string 12169219296aSGreg Roach { 12179219296aSGreg Roach return $this->individualRepository->topTenOldestAlive((int) $total); 12189219296aSGreg Roach } 12199219296aSGreg Roach 12209219296aSGreg Roach /** 12219219296aSGreg Roach * @inheritDoc 12229219296aSGreg Roach */ 12239219296aSGreg Roach public function topTenOldestListAlive(string $total = '10'): string 12249219296aSGreg Roach { 12259219296aSGreg Roach return $this->individualRepository->topTenOldestListAlive((int) $total); 12269219296aSGreg Roach } 12279219296aSGreg Roach 12289219296aSGreg Roach /** 12299219296aSGreg Roach * @inheritDoc 12309219296aSGreg Roach */ 12319219296aSGreg Roach public function topTenOldestFemaleAlive(string $total = '10'): string 12329219296aSGreg Roach { 12339219296aSGreg Roach return $this->individualRepository->topTenOldestFemaleAlive((int) $total); 12349219296aSGreg Roach } 12359219296aSGreg Roach 12369219296aSGreg Roach /** 12379219296aSGreg Roach * @inheritDoc 12389219296aSGreg Roach */ 12399219296aSGreg Roach public function topTenOldestFemaleListAlive(string $total = '10'): string 12409219296aSGreg Roach { 12419219296aSGreg Roach return $this->individualRepository->topTenOldestFemaleListAlive((int) $total); 12429219296aSGreg Roach } 12439219296aSGreg Roach 12449219296aSGreg Roach /** 12459219296aSGreg Roach * @inheritDoc 12469219296aSGreg Roach */ 12479219296aSGreg Roach public function topTenOldestMaleAlive(string $total = '10'): string 12489219296aSGreg Roach { 12499219296aSGreg Roach return $this->individualRepository->topTenOldestMaleAlive((int) $total); 12509219296aSGreg Roach } 12519219296aSGreg Roach 12529219296aSGreg Roach /** 12539219296aSGreg Roach * @inheritDoc 12549219296aSGreg Roach */ 12559219296aSGreg Roach public function topTenOldestMaleListAlive(string $total = '10'): string 12569219296aSGreg Roach { 12579219296aSGreg Roach return $this->individualRepository->topTenOldestMaleListAlive((int) $total); 12589219296aSGreg Roach } 12599219296aSGreg Roach 12609219296aSGreg Roach /** 12619219296aSGreg Roach * @inheritDoc 12629219296aSGreg Roach */ 12639219296aSGreg Roach public function averageLifespan(bool $show_years = false): string 12649219296aSGreg Roach { 12659219296aSGreg Roach return $this->individualRepository->averageLifespan($show_years); 12669219296aSGreg Roach } 12679219296aSGreg Roach 12689219296aSGreg Roach /** 12699219296aSGreg Roach * @inheritDoc 12709219296aSGreg Roach */ 12719219296aSGreg Roach public function averageLifespanFemale(bool $show_years = false): string 12729219296aSGreg Roach { 12739219296aSGreg Roach return $this->individualRepository->averageLifespanFemale($show_years); 12749219296aSGreg Roach } 12759219296aSGreg Roach 12769219296aSGreg Roach /** 12779219296aSGreg Roach * @inheritDoc 12789219296aSGreg Roach */ 12799219296aSGreg Roach public function averageLifespanMale(bool $show_years = false): string 12809219296aSGreg Roach { 12819219296aSGreg Roach return $this->individualRepository->averageLifespanMale($show_years); 12829219296aSGreg Roach } 12839219296aSGreg Roach 12849219296aSGreg Roach /** 12859219296aSGreg Roach * @inheritDoc 12869219296aSGreg Roach */ 12879219296aSGreg Roach public function firstEvent(): string 12889219296aSGreg Roach { 12899219296aSGreg Roach return $this->eventRepository->firstEvent(); 12909219296aSGreg Roach } 12919219296aSGreg Roach 12929219296aSGreg Roach /** 12939219296aSGreg Roach * @inheritDoc 12949219296aSGreg Roach */ 12959219296aSGreg Roach public function firstEventYear(): string 12969219296aSGreg Roach { 12979219296aSGreg Roach return $this->eventRepository->firstEventYear(); 12989219296aSGreg Roach } 12999219296aSGreg Roach 13009219296aSGreg Roach /** 13019219296aSGreg Roach * @inheritDoc 13029219296aSGreg Roach */ 13039219296aSGreg Roach public function firstEventType(): string 13049219296aSGreg Roach { 13059219296aSGreg Roach return $this->eventRepository->firstEventType(); 13069219296aSGreg Roach } 13079219296aSGreg Roach 13089219296aSGreg Roach /** 13099219296aSGreg Roach * @inheritDoc 13109219296aSGreg Roach */ 13119219296aSGreg Roach public function firstEventName(): string 13129219296aSGreg Roach { 13139219296aSGreg Roach return $this->eventRepository->firstEventName(); 13149219296aSGreg Roach } 13159219296aSGreg Roach 13169219296aSGreg Roach /** 13179219296aSGreg Roach * @inheritDoc 13189219296aSGreg Roach */ 13199219296aSGreg Roach public function firstEventPlace(): string 13209219296aSGreg Roach { 13219219296aSGreg Roach return $this->eventRepository->firstEventPlace(); 13229219296aSGreg Roach } 13239219296aSGreg Roach 13249219296aSGreg Roach /** 13259219296aSGreg Roach * @inheritDoc 13269219296aSGreg Roach */ 13279219296aSGreg Roach public function lastEvent(): string 13289219296aSGreg Roach { 13299219296aSGreg Roach return $this->eventRepository->lastEvent(); 13309219296aSGreg Roach } 13319219296aSGreg Roach 13329219296aSGreg Roach /** 13339219296aSGreg Roach * @inheritDoc 13349219296aSGreg Roach */ 13359219296aSGreg Roach public function lastEventYear(): string 13369219296aSGreg Roach { 13379219296aSGreg Roach return $this->eventRepository->lastEventYear(); 13389219296aSGreg Roach } 13399219296aSGreg Roach 13409219296aSGreg Roach /** 13419219296aSGreg Roach * @inheritDoc 13429219296aSGreg Roach */ 13439219296aSGreg Roach public function lastEventType(): string 13449219296aSGreg Roach { 13459219296aSGreg Roach return $this->eventRepository->lastEventType(); 13469219296aSGreg Roach } 13479219296aSGreg Roach 13489219296aSGreg Roach /** 13499219296aSGreg Roach * @inheritDoc 13509219296aSGreg Roach */ 13519219296aSGreg Roach public function lastEventName(): string 13529219296aSGreg Roach { 13539219296aSGreg Roach return $this->eventRepository->lastEventName(); 13549219296aSGreg Roach } 13559219296aSGreg Roach 13569219296aSGreg Roach /** 13579219296aSGreg Roach * @inheritDoc 13589219296aSGreg Roach */ 13599219296aSGreg Roach public function lastEventPlace(): string 13609219296aSGreg Roach { 13619219296aSGreg Roach return $this->eventRepository->lastEventType(); 13629219296aSGreg Roach } 13639219296aSGreg Roach 13649219296aSGreg Roach /** 13659219296aSGreg Roach * @inheritDoc 13669219296aSGreg Roach */ 13679219296aSGreg Roach public function firstMarriage(): string 13689219296aSGreg Roach { 13699219296aSGreg Roach return $this->familyDatesRepository->firstMarriage(); 13709219296aSGreg Roach } 13719219296aSGreg Roach 13729219296aSGreg Roach /** 13739219296aSGreg Roach * @inheritDoc 13749219296aSGreg Roach */ 13759219296aSGreg Roach public function firstMarriageYear(): string 13769219296aSGreg Roach { 13779219296aSGreg Roach return $this->familyDatesRepository->firstMarriageYear(); 13789219296aSGreg Roach } 13799219296aSGreg Roach 13809219296aSGreg Roach /** 13819219296aSGreg Roach * @inheritDoc 13829219296aSGreg Roach */ 13839219296aSGreg Roach public function firstMarriageName(): string 13849219296aSGreg Roach { 13859219296aSGreg Roach return $this->familyDatesRepository->firstMarriageName(); 13869219296aSGreg Roach } 13879219296aSGreg Roach 13889219296aSGreg Roach /** 13899219296aSGreg Roach * @inheritDoc 13909219296aSGreg Roach */ 13919219296aSGreg Roach public function firstMarriagePlace(): string 13929219296aSGreg Roach { 13939219296aSGreg Roach return $this->familyDatesRepository->firstMarriagePlace(); 13949219296aSGreg Roach } 13959219296aSGreg Roach 13969219296aSGreg Roach /** 13979219296aSGreg Roach * @inheritDoc 13989219296aSGreg Roach */ 13999219296aSGreg Roach public function lastMarriage(): string 14009219296aSGreg Roach { 14019219296aSGreg Roach return $this->familyDatesRepository->lastMarriage(); 14029219296aSGreg Roach } 14039219296aSGreg Roach 14049219296aSGreg Roach /** 14059219296aSGreg Roach * @inheritDoc 14069219296aSGreg Roach */ 14079219296aSGreg Roach public function lastMarriageYear(): string 14089219296aSGreg Roach { 14099219296aSGreg Roach return $this->familyDatesRepository->lastMarriageYear(); 14109219296aSGreg Roach } 14119219296aSGreg Roach 14129219296aSGreg Roach /** 14139219296aSGreg Roach * @inheritDoc 14149219296aSGreg Roach */ 14159219296aSGreg Roach public function lastMarriageName(): string 14169219296aSGreg Roach { 14179219296aSGreg Roach return $this->familyDatesRepository->lastMarriageName(); 14189219296aSGreg Roach } 14199219296aSGreg Roach 14209219296aSGreg Roach /** 14219219296aSGreg Roach * @inheritDoc 14229219296aSGreg Roach */ 14239219296aSGreg Roach public function lastMarriagePlace(): string 14249219296aSGreg Roach { 14259219296aSGreg Roach return $this->familyDatesRepository->lastMarriagePlace(); 14269219296aSGreg Roach } 14279219296aSGreg Roach 14289219296aSGreg Roach /** 14299219296aSGreg Roach * @inheritDoc 14309219296aSGreg Roach */ 1431e6f3d5e2SGreg Roach public function statsMarriageQuery(int $year1 = -1, int $year2 = -1): Builder 14329219296aSGreg Roach { 1433e6f3d5e2SGreg Roach return $this->familyRepository->statsMarriageQuery($year1, $year2); 1434e6f3d5e2SGreg Roach } 1435e6f3d5e2SGreg Roach 1436e6f3d5e2SGreg Roach /** 1437e6f3d5e2SGreg Roach * @inheritDoc 1438e6f3d5e2SGreg Roach */ 1439e6f3d5e2SGreg Roach public function statsFirstMarriageQuery(int $year1 = -1, int $year2 = -1): Builder 1440e6f3d5e2SGreg Roach { 1441e6f3d5e2SGreg Roach return $this->familyRepository->statsFirstMarriageQuery($year1, $year2); 14429219296aSGreg Roach } 14439219296aSGreg Roach 14449219296aSGreg Roach /** 14459219296aSGreg Roach * @inheritDoc 14469219296aSGreg Roach */ 144788de55fdSRico Sonntag public function statsMarr(string $color_from = null, string $color_to = null): string 14489219296aSGreg Roach { 144988de55fdSRico Sonntag return $this->familyRepository->statsMarr($color_from, $color_to); 14509219296aSGreg Roach } 14519219296aSGreg Roach 14529219296aSGreg Roach /** 14539219296aSGreg Roach * @inheritDoc 14549219296aSGreg Roach */ 14559219296aSGreg Roach public function firstDivorce(): string 14569219296aSGreg Roach { 14579219296aSGreg Roach return $this->familyDatesRepository->firstDivorce(); 14589219296aSGreg Roach } 14599219296aSGreg Roach 14609219296aSGreg Roach /** 14619219296aSGreg Roach * @inheritDoc 14629219296aSGreg Roach */ 14639219296aSGreg Roach public function firstDivorceYear(): string 14649219296aSGreg Roach { 14659219296aSGreg Roach return $this->familyDatesRepository->firstDivorceYear(); 14669219296aSGreg Roach } 14679219296aSGreg Roach 14689219296aSGreg Roach /** 14699219296aSGreg Roach * @inheritDoc 14709219296aSGreg Roach */ 14719219296aSGreg Roach public function firstDivorceName(): string 14729219296aSGreg Roach { 14739219296aSGreg Roach return $this->familyDatesRepository->firstDivorceName(); 14749219296aSGreg Roach } 14759219296aSGreg Roach 14769219296aSGreg Roach /** 14779219296aSGreg Roach * @inheritDoc 14789219296aSGreg Roach */ 14799219296aSGreg Roach public function firstDivorcePlace(): string 14809219296aSGreg Roach { 14819219296aSGreg Roach return $this->familyDatesRepository->firstDivorcePlace(); 14829219296aSGreg Roach } 14839219296aSGreg Roach 14849219296aSGreg Roach /** 14859219296aSGreg Roach * @inheritDoc 14869219296aSGreg Roach */ 14879219296aSGreg Roach public function lastDivorce(): string 14889219296aSGreg Roach { 14899219296aSGreg Roach return $this->familyDatesRepository->lastDivorce(); 14909219296aSGreg Roach } 14919219296aSGreg Roach 14929219296aSGreg Roach /** 14939219296aSGreg Roach * @inheritDoc 14949219296aSGreg Roach */ 14959219296aSGreg Roach public function lastDivorceYear(): string 14969219296aSGreg Roach { 14979219296aSGreg Roach return $this->familyDatesRepository->lastDivorceYear(); 14989219296aSGreg Roach } 14999219296aSGreg Roach 15009219296aSGreg Roach /** 15019219296aSGreg Roach * @inheritDoc 15029219296aSGreg Roach */ 15039219296aSGreg Roach public function lastDivorceName(): string 15049219296aSGreg Roach { 15059219296aSGreg Roach return $this->familyDatesRepository->lastDivorceName(); 15069219296aSGreg Roach } 15079219296aSGreg Roach 15089219296aSGreg Roach /** 15099219296aSGreg Roach * @inheritDoc 15109219296aSGreg Roach */ 15119219296aSGreg Roach public function lastDivorcePlace(): string 15129219296aSGreg Roach { 15139219296aSGreg Roach return $this->familyDatesRepository->lastDivorcePlace(); 15149219296aSGreg Roach } 15159219296aSGreg Roach 15169219296aSGreg Roach /** 15179219296aSGreg Roach * @inheritDoc 15189219296aSGreg Roach */ 151988de55fdSRico Sonntag public function statsDiv(string $color_from = null, string $color_to = null): string 15209219296aSGreg Roach { 152188de55fdSRico Sonntag return $this->familyRepository->statsDiv($color_from, $color_to); 15229219296aSGreg Roach } 15239219296aSGreg Roach 15249219296aSGreg Roach /** 15259219296aSGreg Roach * @inheritDoc 15269219296aSGreg Roach */ 15279219296aSGreg Roach public function youngestMarriageFemale(): string 15289219296aSGreg Roach { 15299219296aSGreg Roach return $this->familyRepository->youngestMarriageFemale(); 15309219296aSGreg Roach } 15319219296aSGreg Roach 15329219296aSGreg Roach /** 15339219296aSGreg Roach * @inheritDoc 15349219296aSGreg Roach */ 15359219296aSGreg Roach public function youngestMarriageFemaleName(): string 15369219296aSGreg Roach { 15379219296aSGreg Roach return $this->familyRepository->youngestMarriageFemaleName(); 15389219296aSGreg Roach } 15399219296aSGreg Roach 15409219296aSGreg Roach /** 15419219296aSGreg Roach * @inheritDoc 15429219296aSGreg Roach */ 15439219296aSGreg Roach public function youngestMarriageFemaleAge(string $show_years = ''): string 15449219296aSGreg Roach { 15459219296aSGreg Roach return $this->familyRepository->youngestMarriageFemaleAge($show_years); 15469219296aSGreg Roach } 15479219296aSGreg Roach 15489219296aSGreg Roach /** 15499219296aSGreg Roach * @inheritDoc 15509219296aSGreg Roach */ 15519219296aSGreg Roach public function oldestMarriageFemale(): string 15529219296aSGreg Roach { 15539219296aSGreg Roach return $this->familyRepository->oldestMarriageFemale(); 15549219296aSGreg Roach } 15559219296aSGreg Roach 15569219296aSGreg Roach /** 15579219296aSGreg Roach * @inheritDoc 15589219296aSGreg Roach */ 15599219296aSGreg Roach public function oldestMarriageFemaleName(): string 15609219296aSGreg Roach { 15619219296aSGreg Roach return $this->familyRepository->oldestMarriageFemaleName(); 15629219296aSGreg Roach } 15639219296aSGreg Roach 15649219296aSGreg Roach /** 15659219296aSGreg Roach * @inheritDoc 15669219296aSGreg Roach */ 15679219296aSGreg Roach public function oldestMarriageFemaleAge(string $show_years = ''): string 15689219296aSGreg Roach { 15699219296aSGreg Roach return $this->familyRepository->oldestMarriageFemaleAge($show_years); 15709219296aSGreg Roach } 15719219296aSGreg Roach 15729219296aSGreg Roach /** 15739219296aSGreg Roach * @inheritDoc 15749219296aSGreg Roach */ 15759219296aSGreg Roach public function youngestMarriageMale(): string 15769219296aSGreg Roach { 15779219296aSGreg Roach return $this->familyRepository->youngestMarriageMale(); 15789219296aSGreg Roach } 15799219296aSGreg Roach 15809219296aSGreg Roach /** 15819219296aSGreg Roach * @inheritDoc 15829219296aSGreg Roach */ 15839219296aSGreg Roach public function youngestMarriageMaleName(): string 15849219296aSGreg Roach { 15859219296aSGreg Roach return $this->familyRepository->youngestMarriageMaleName(); 15869219296aSGreg Roach } 15879219296aSGreg Roach 15889219296aSGreg Roach /** 15899219296aSGreg Roach * @inheritDoc 15909219296aSGreg Roach */ 15919219296aSGreg Roach public function youngestMarriageMaleAge(string $show_years = ''): string 15929219296aSGreg Roach { 15939219296aSGreg Roach return $this->familyRepository->youngestMarriageMaleAge($show_years); 15949219296aSGreg Roach } 15959219296aSGreg Roach 15969219296aSGreg Roach /** 15979219296aSGreg Roach * @inheritDoc 15989219296aSGreg Roach */ 15999219296aSGreg Roach public function oldestMarriageMale(): string 16009219296aSGreg Roach { 16019219296aSGreg Roach return $this->familyRepository->oldestMarriageMale(); 16029219296aSGreg Roach } 16039219296aSGreg Roach 16049219296aSGreg Roach /** 16059219296aSGreg Roach * @inheritDoc 16069219296aSGreg Roach */ 16079219296aSGreg Roach public function oldestMarriageMaleName(): string 16089219296aSGreg Roach { 16099219296aSGreg Roach return $this->familyRepository->oldestMarriageMaleName(); 16109219296aSGreg Roach } 16119219296aSGreg Roach 16129219296aSGreg Roach /** 16139219296aSGreg Roach * @inheritDoc 16149219296aSGreg Roach */ 16159219296aSGreg Roach public function oldestMarriageMaleAge(string $show_years = ''): string 16169219296aSGreg Roach { 16179219296aSGreg Roach return $this->familyRepository->oldestMarriageMaleAge($show_years); 16189219296aSGreg Roach } 16199219296aSGreg Roach 16209219296aSGreg Roach /** 16219219296aSGreg Roach * @inheritDoc 16229219296aSGreg Roach */ 1623afa8d404SGreg Roach public function statsMarrAgeQuery(string $sex, int $year1 = -1, int $year2 = -1): array 16249219296aSGreg Roach { 16259219296aSGreg Roach return $this->familyRepository->statsMarrAgeQuery($sex, $year1, $year2); 16269219296aSGreg Roach } 16279219296aSGreg Roach 16289219296aSGreg Roach /** 16299219296aSGreg Roach * @inheritDoc 16309219296aSGreg Roach */ 163188de55fdSRico Sonntag public function statsMarrAge(): string 16329219296aSGreg Roach { 163388de55fdSRico Sonntag return $this->familyRepository->statsMarrAge(); 16349219296aSGreg Roach } 16359219296aSGreg Roach 16369219296aSGreg Roach /** 16379219296aSGreg Roach * @inheritDoc 16389219296aSGreg Roach */ 16399219296aSGreg Roach public function ageBetweenSpousesMF(string $total = '10'): string 16409219296aSGreg Roach { 16419219296aSGreg Roach return $this->familyRepository->ageBetweenSpousesMF((int) $total); 16429219296aSGreg Roach } 16439219296aSGreg Roach 16449219296aSGreg Roach /** 16459219296aSGreg Roach * @inheritDoc 16469219296aSGreg Roach */ 16479219296aSGreg Roach public function ageBetweenSpousesMFList(string $total = '10'): string 16489219296aSGreg Roach { 16499219296aSGreg Roach return $this->familyRepository->ageBetweenSpousesMFList((int) $total); 16509219296aSGreg Roach } 16519219296aSGreg Roach 16529219296aSGreg Roach /** 16539219296aSGreg Roach * @inheritDoc 16549219296aSGreg Roach */ 16559219296aSGreg Roach public function ageBetweenSpousesFM(string $total = '10'): string 16569219296aSGreg Roach { 16579219296aSGreg Roach return $this->familyRepository->ageBetweenSpousesFM((int) $total); 16589219296aSGreg Roach } 16599219296aSGreg Roach 16609219296aSGreg Roach /** 16619219296aSGreg Roach * @inheritDoc 16629219296aSGreg Roach */ 16639219296aSGreg Roach public function ageBetweenSpousesFMList(string $total = '10'): string 16649219296aSGreg Roach { 16659219296aSGreg Roach return $this->familyRepository->ageBetweenSpousesFMList((int) $total); 16669219296aSGreg Roach } 16679219296aSGreg Roach 16689219296aSGreg Roach /** 16699219296aSGreg Roach * @inheritDoc 16709219296aSGreg Roach */ 16719219296aSGreg Roach public function topAgeOfMarriageFamily(): string 16729219296aSGreg Roach { 16739219296aSGreg Roach return $this->familyRepository->topAgeOfMarriageFamily(); 16749219296aSGreg Roach } 16759219296aSGreg Roach 16769219296aSGreg Roach /** 16779219296aSGreg Roach * @inheritDoc 16789219296aSGreg Roach */ 16799219296aSGreg Roach public function topAgeOfMarriage(): string 16809219296aSGreg Roach { 16819219296aSGreg Roach return $this->familyRepository->topAgeOfMarriage(); 16829219296aSGreg Roach } 16839219296aSGreg Roach 16849219296aSGreg Roach /** 16859219296aSGreg Roach * @inheritDoc 16869219296aSGreg Roach */ 16879219296aSGreg Roach public function topAgeOfMarriageFamilies(string $total = '10'): string 16889219296aSGreg Roach { 16899219296aSGreg Roach return $this->familyRepository->topAgeOfMarriageFamilies((int) $total); 16909219296aSGreg Roach } 16919219296aSGreg Roach 16929219296aSGreg Roach /** 16939219296aSGreg Roach * @inheritDoc 16949219296aSGreg Roach */ 16959219296aSGreg Roach public function topAgeOfMarriageFamiliesList(string $total = '10'): string 16969219296aSGreg Roach { 16979219296aSGreg Roach return $this->familyRepository->topAgeOfMarriageFamiliesList((int) $total); 16989219296aSGreg Roach } 16999219296aSGreg Roach 17009219296aSGreg Roach /** 17019219296aSGreg Roach * @inheritDoc 17029219296aSGreg Roach */ 17039219296aSGreg Roach public function minAgeOfMarriageFamily(): string 17049219296aSGreg Roach { 17059219296aSGreg Roach return $this->familyRepository->minAgeOfMarriageFamily(); 17069219296aSGreg Roach } 17079219296aSGreg Roach 17089219296aSGreg Roach /** 17099219296aSGreg Roach * @inheritDoc 17109219296aSGreg Roach */ 17119219296aSGreg Roach public function minAgeOfMarriage(): string 17129219296aSGreg Roach { 17139219296aSGreg Roach return $this->familyRepository->minAgeOfMarriage(); 17149219296aSGreg Roach } 17159219296aSGreg Roach 17169219296aSGreg Roach /** 17179219296aSGreg Roach * @inheritDoc 17189219296aSGreg Roach */ 17199219296aSGreg Roach public function minAgeOfMarriageFamilies(string $total = '10'): string 17209219296aSGreg Roach { 17219219296aSGreg Roach return $this->familyRepository->minAgeOfMarriageFamilies((int) $total); 17229219296aSGreg Roach } 17239219296aSGreg Roach 17249219296aSGreg Roach /** 17259219296aSGreg Roach * @inheritDoc 17269219296aSGreg Roach */ 17279219296aSGreg Roach public function minAgeOfMarriageFamiliesList(string $total = '10'): string 17289219296aSGreg Roach { 17299219296aSGreg Roach return $this->familyRepository->minAgeOfMarriageFamiliesList((int) $total); 17309219296aSGreg Roach } 17319219296aSGreg Roach 17329219296aSGreg Roach /** 17339219296aSGreg Roach * @inheritDoc 17349219296aSGreg Roach */ 17359219296aSGreg Roach public function youngestMother(): string 17369219296aSGreg Roach { 17379219296aSGreg Roach return $this->familyRepository->youngestMother(); 17389219296aSGreg Roach } 17399219296aSGreg Roach 17409219296aSGreg Roach /** 17419219296aSGreg Roach * @inheritDoc 17429219296aSGreg Roach */ 17439219296aSGreg Roach public function youngestMotherName(): string 17449219296aSGreg Roach { 17459219296aSGreg Roach return $this->familyRepository->youngestMotherName(); 17469219296aSGreg Roach } 17479219296aSGreg Roach 17489219296aSGreg Roach /** 17499219296aSGreg Roach * @inheritDoc 17509219296aSGreg Roach */ 17519219296aSGreg Roach public function youngestMotherAge(string $show_years = ''): string 17529219296aSGreg Roach { 17539219296aSGreg Roach return $this->familyRepository->youngestMotherAge($show_years); 17549219296aSGreg Roach } 17559219296aSGreg Roach 17569219296aSGreg Roach /** 17579219296aSGreg Roach * @inheritDoc 17589219296aSGreg Roach */ 17599219296aSGreg Roach public function oldestMother(): string 17609219296aSGreg Roach { 17619219296aSGreg Roach return $this->familyRepository->oldestMother(); 17629219296aSGreg Roach } 17639219296aSGreg Roach 17649219296aSGreg Roach /** 17659219296aSGreg Roach * @inheritDoc 17669219296aSGreg Roach */ 17679219296aSGreg Roach public function oldestMotherName(): string 17689219296aSGreg Roach { 17699219296aSGreg Roach return $this->familyRepository->oldestMotherName(); 17709219296aSGreg Roach } 17719219296aSGreg Roach 17729219296aSGreg Roach /** 17739219296aSGreg Roach * @inheritDoc 17749219296aSGreg Roach */ 17759219296aSGreg Roach public function oldestMotherAge(string $show_years = ''): string 17769219296aSGreg Roach { 17779219296aSGreg Roach return $this->familyRepository->oldestMotherAge($show_years); 17789219296aSGreg Roach } 17799219296aSGreg Roach 17809219296aSGreg Roach /** 17819219296aSGreg Roach * @inheritDoc 17829219296aSGreg Roach */ 17839219296aSGreg Roach public function youngestFather(): string 17849219296aSGreg Roach { 17859219296aSGreg Roach return $this->familyRepository->youngestFather(); 17869219296aSGreg Roach } 17879219296aSGreg Roach 17889219296aSGreg Roach /** 17899219296aSGreg Roach * @inheritDoc 17909219296aSGreg Roach */ 17919219296aSGreg Roach public function youngestFatherName(): string 17929219296aSGreg Roach { 17939219296aSGreg Roach return $this->familyRepository->youngestFatherName(); 17949219296aSGreg Roach } 17959219296aSGreg Roach 17969219296aSGreg Roach /** 17979219296aSGreg Roach * @inheritDoc 17989219296aSGreg Roach */ 17999219296aSGreg Roach public function youngestFatherAge(string $show_years = ''): string 18009219296aSGreg Roach { 18019219296aSGreg Roach return $this->familyRepository->youngestFatherAge($show_years); 18029219296aSGreg Roach } 18039219296aSGreg Roach 18049219296aSGreg Roach /** 18059219296aSGreg Roach * @inheritDoc 18069219296aSGreg Roach */ 18079219296aSGreg Roach public function oldestFather(): string 18089219296aSGreg Roach { 18099219296aSGreg Roach return $this->familyRepository->oldestFather(); 18109219296aSGreg Roach } 18119219296aSGreg Roach 18129219296aSGreg Roach /** 18139219296aSGreg Roach * @inheritDoc 18149219296aSGreg Roach */ 18159219296aSGreg Roach public function oldestFatherName(): string 18169219296aSGreg Roach { 18179219296aSGreg Roach return $this->familyRepository->oldestFatherName(); 18189219296aSGreg Roach } 18199219296aSGreg Roach 18209219296aSGreg Roach /** 18219219296aSGreg Roach * @inheritDoc 18229219296aSGreg Roach */ 18239219296aSGreg Roach public function oldestFatherAge(string $show_years = ''): string 18249219296aSGreg Roach { 18259219296aSGreg Roach return $this->familyRepository->oldestFatherAge($show_years); 18269219296aSGreg Roach } 18279219296aSGreg Roach 18289219296aSGreg Roach /** 18299219296aSGreg Roach * @inheritDoc 18309219296aSGreg Roach */ 18319219296aSGreg Roach public function totalMarriedMales(): string 18329219296aSGreg Roach { 18339219296aSGreg Roach return $this->familyRepository->totalMarriedMales(); 18349219296aSGreg Roach } 18359219296aSGreg Roach 18369219296aSGreg Roach /** 18379219296aSGreg Roach * @inheritDoc 18389219296aSGreg Roach */ 18399219296aSGreg Roach public function totalMarriedFemales(): string 18409219296aSGreg Roach { 18419219296aSGreg Roach return $this->familyRepository->totalMarriedFemales(); 18429219296aSGreg Roach } 18439219296aSGreg Roach 18449219296aSGreg Roach /** 18459219296aSGreg Roach * @inheritDoc 18469219296aSGreg Roach */ 1847999da590SGreg Roach public function monthFirstChildQuery(int $year1 = -1, int $year2 = -1): Builder 18489219296aSGreg Roach { 1849999da590SGreg Roach return $this->familyRepository->monthFirstChildQuery($year1, $year2); 1850999da590SGreg Roach } 1851999da590SGreg Roach 1852999da590SGreg Roach /** 1853999da590SGreg Roach * @inheritDoc 1854999da590SGreg Roach */ 1855999da590SGreg Roach public function monthFirstChildBySexQuery(int $year1 = -1, int $year2 = -1): Builder 1856999da590SGreg Roach { 1857999da590SGreg Roach return $this->familyRepository->monthFirstChildBySexQuery($year1, $year2); 18589219296aSGreg Roach } 18599219296aSGreg Roach 18609219296aSGreg Roach /** 18619219296aSGreg Roach * @inheritDoc 18629219296aSGreg Roach */ 18639219296aSGreg Roach public function largestFamily(): string 18649219296aSGreg Roach { 18659219296aSGreg Roach return $this->familyRepository->largestFamily(); 18669219296aSGreg Roach } 18679219296aSGreg Roach 18689219296aSGreg Roach /** 18699219296aSGreg Roach * @inheritDoc 18709219296aSGreg Roach */ 18719219296aSGreg Roach public function largestFamilySize(): string 18729219296aSGreg Roach { 18739219296aSGreg Roach return $this->familyRepository->largestFamilySize(); 18749219296aSGreg Roach } 18759219296aSGreg Roach 18769219296aSGreg Roach /** 18779219296aSGreg Roach * @inheritDoc 18789219296aSGreg Roach */ 18799219296aSGreg Roach public function largestFamilyName(): string 18809219296aSGreg Roach { 18819219296aSGreg Roach return $this->familyRepository->largestFamilyName(); 18829219296aSGreg Roach } 18839219296aSGreg Roach 18849219296aSGreg Roach /** 18859219296aSGreg Roach * @inheritDoc 18869219296aSGreg Roach */ 18879219296aSGreg Roach public function topTenLargestFamily(string $total = '10'): string 18889219296aSGreg Roach { 18899219296aSGreg Roach return $this->familyRepository->topTenLargestFamily((int) $total); 18909219296aSGreg Roach } 18919219296aSGreg Roach 18929219296aSGreg Roach /** 18939219296aSGreg Roach * @inheritDoc 18949219296aSGreg Roach */ 18959219296aSGreg Roach public function topTenLargestFamilyList(string $total = '10'): string 18969219296aSGreg Roach { 18979219296aSGreg Roach return $this->familyRepository->topTenLargestFamilyList((int) $total); 18989219296aSGreg Roach } 18999219296aSGreg Roach 19009219296aSGreg Roach /** 19019219296aSGreg Roach * @inheritDoc 19029219296aSGreg Roach */ 19039219296aSGreg Roach public function chartLargestFamilies( 19049219296aSGreg Roach string $color_from = null, 19059219296aSGreg Roach string $color_to = null, 19069219296aSGreg Roach string $total = '10' 1907*71378461SGreg Roach ): string 1908*71378461SGreg Roach { 190988de55fdSRico Sonntag return $this->familyRepository->chartLargestFamilies($color_from, $color_to, (int) $total); 19109219296aSGreg Roach } 19119219296aSGreg Roach 19129219296aSGreg Roach /** 19139219296aSGreg Roach * @inheritDoc 19149219296aSGreg Roach */ 19159219296aSGreg Roach public function totalChildren(): string 19169219296aSGreg Roach { 19179219296aSGreg Roach return $this->familyRepository->totalChildren(); 19189219296aSGreg Roach } 19199219296aSGreg Roach 19209219296aSGreg Roach /** 19219219296aSGreg Roach * @inheritDoc 19229219296aSGreg Roach */ 19239219296aSGreg Roach public function averageChildren(): string 19249219296aSGreg Roach { 19259219296aSGreg Roach return $this->familyRepository->averageChildren(); 19269219296aSGreg Roach } 19279219296aSGreg Roach 19289219296aSGreg Roach /** 19299219296aSGreg Roach * @inheritDoc 19309219296aSGreg Roach */ 1931b1126ab4SGreg Roach public function statsChildrenQuery(int $year1 = -1, int $year2 = -1): array 19329219296aSGreg Roach { 1933b1126ab4SGreg Roach return $this->familyRepository->statsChildrenQuery($year1, $year2); 19349219296aSGreg Roach } 19359219296aSGreg Roach 19369219296aSGreg Roach /** 19379219296aSGreg Roach * @inheritDoc 19389219296aSGreg Roach */ 1939cde1d378SGreg Roach public function statsChildren(): string 19409219296aSGreg Roach { 1941cde1d378SGreg Roach return $this->familyRepository->statsChildren(); 19429219296aSGreg Roach } 19439219296aSGreg Roach 19449219296aSGreg Roach /** 19459219296aSGreg Roach * @inheritDoc 19469219296aSGreg Roach */ 19479219296aSGreg Roach public function topAgeBetweenSiblingsName(string $total = '10'): string 19489219296aSGreg Roach { 19499219296aSGreg Roach return $this->familyRepository->topAgeBetweenSiblingsName((int) $total); 19509219296aSGreg Roach } 19519219296aSGreg Roach 19529219296aSGreg Roach /** 19539219296aSGreg Roach * @inheritDoc 19549219296aSGreg Roach */ 19559219296aSGreg Roach public function topAgeBetweenSiblings(string $total = '10'): string 19569219296aSGreg Roach { 19579219296aSGreg Roach return $this->familyRepository->topAgeBetweenSiblings((int) $total); 19589219296aSGreg Roach } 19599219296aSGreg Roach 19609219296aSGreg Roach /** 19619219296aSGreg Roach * @inheritDoc 19629219296aSGreg Roach */ 19639219296aSGreg Roach public function topAgeBetweenSiblingsFullName(string $total = '10'): string 19649219296aSGreg Roach { 19659219296aSGreg Roach return $this->familyRepository->topAgeBetweenSiblingsFullName((int) $total); 19669219296aSGreg Roach } 19679219296aSGreg Roach 19689219296aSGreg Roach /** 19699219296aSGreg Roach * @inheritDoc 19709219296aSGreg Roach */ 19719219296aSGreg Roach public function topAgeBetweenSiblingsList(string $total = '10', string $one = ''): string 19729219296aSGreg Roach { 19739219296aSGreg Roach return $this->familyRepository->topAgeBetweenSiblingsList((int) $total, $one); 19749219296aSGreg Roach } 19759219296aSGreg Roach 19769219296aSGreg Roach /** 19779219296aSGreg Roach * @inheritDoc 19789219296aSGreg Roach */ 19799219296aSGreg Roach public function noChildrenFamilies(): string 19809219296aSGreg Roach { 19819219296aSGreg Roach return $this->familyRepository->noChildrenFamilies(); 19829219296aSGreg Roach } 19839219296aSGreg Roach 19849219296aSGreg Roach /** 19859219296aSGreg Roach * @inheritDoc 19869219296aSGreg Roach */ 19879219296aSGreg Roach public function noChildrenFamiliesList(string $type = 'list'): string 19889219296aSGreg Roach { 19899219296aSGreg Roach return $this->familyRepository->noChildrenFamiliesList($type); 19909219296aSGreg Roach } 19919219296aSGreg Roach 19929219296aSGreg Roach /** 19939219296aSGreg Roach * @inheritDoc 19949219296aSGreg Roach */ 19959219296aSGreg Roach public function chartNoChildrenFamilies( 19969219296aSGreg Roach string $year1 = '-1', 19979219296aSGreg Roach string $year2 = '-1' 1998*71378461SGreg Roach ): string 1999*71378461SGreg Roach { 200088de55fdSRico Sonntag return $this->familyRepository->chartNoChildrenFamilies((int) $year1, (int) $year2); 20019219296aSGreg Roach } 20029219296aSGreg Roach 20039219296aSGreg Roach /** 20049219296aSGreg Roach * @inheritDoc 20059219296aSGreg Roach */ 20069219296aSGreg Roach public function topTenLargestGrandFamily(string $total = '10'): string 20079219296aSGreg Roach { 20089219296aSGreg Roach return $this->familyRepository->topTenLargestGrandFamily((int) $total); 20099219296aSGreg Roach } 20109219296aSGreg Roach 20119219296aSGreg Roach /** 20129219296aSGreg Roach * @inheritDoc 20139219296aSGreg Roach */ 20149219296aSGreg Roach public function topTenLargestGrandFamilyList(string $total = '10'): string 20159219296aSGreg Roach { 20169219296aSGreg Roach return $this->familyRepository->topTenLargestGrandFamilyList((int) $total); 20179219296aSGreg Roach } 20189219296aSGreg Roach 20199219296aSGreg Roach /** 20209219296aSGreg Roach * @inheritDoc 20219219296aSGreg Roach */ 20229219296aSGreg Roach public function getCommonSurname(): string 20239219296aSGreg Roach { 20249219296aSGreg Roach return $this->individualRepository->getCommonSurname(); 20259219296aSGreg Roach } 20269219296aSGreg Roach 20279219296aSGreg Roach /** 20289219296aSGreg Roach * @inheritDoc 20299219296aSGreg Roach */ 20309219296aSGreg Roach public function commonSurnames( 20319219296aSGreg Roach string $threshold = '1', 20329219296aSGreg Roach string $number_of_surnames = '10', 20339219296aSGreg Roach string $sorting = 'alpha' 2034*71378461SGreg Roach ): string 2035*71378461SGreg Roach { 20369219296aSGreg Roach return $this->individualRepository->commonSurnames((int) $threshold, (int) $number_of_surnames, $sorting); 20379219296aSGreg Roach } 20389219296aSGreg Roach 20399219296aSGreg Roach /** 20409219296aSGreg Roach * @inheritDoc 20419219296aSGreg Roach */ 20429219296aSGreg Roach public function commonSurnamesTotals( 20439219296aSGreg Roach string $threshold = '1', 20449219296aSGreg Roach string $number_of_surnames = '10', 20459219296aSGreg Roach string $sorting = 'rcount' 2046*71378461SGreg Roach ): string 2047*71378461SGreg Roach { 20489219296aSGreg Roach return $this->individualRepository->commonSurnamesTotals((int) $threshold, (int) $number_of_surnames, $sorting); 20499219296aSGreg Roach } 20509219296aSGreg Roach 20519219296aSGreg Roach /** 20529219296aSGreg Roach * @inheritDoc 20539219296aSGreg Roach */ 20549219296aSGreg Roach public function commonSurnamesList( 20559219296aSGreg Roach string $threshold = '1', 20569219296aSGreg Roach string $number_of_surnames = '10', 20579219296aSGreg Roach string $sorting = 'alpha' 2058*71378461SGreg Roach ): string 2059*71378461SGreg Roach { 20609219296aSGreg Roach return $this->individualRepository->commonSurnamesList((int) $threshold, (int) $number_of_surnames, $sorting); 20619219296aSGreg Roach } 20629219296aSGreg Roach 20639219296aSGreg Roach /** 20649219296aSGreg Roach * @inheritDoc 20659219296aSGreg Roach */ 20669219296aSGreg Roach public function commonSurnamesListTotals( 20679219296aSGreg Roach string $threshold = '1', 20689219296aSGreg Roach string $number_of_surnames = '10', 20699219296aSGreg Roach string $sorting = 'rcount' 2070*71378461SGreg Roach ): string 2071*71378461SGreg Roach { 20729219296aSGreg Roach return $this->individualRepository 20739219296aSGreg Roach ->commonSurnamesListTotals((int) $threshold, (int) $number_of_surnames, $sorting); 20749219296aSGreg Roach } 20759219296aSGreg Roach 20769219296aSGreg Roach /** 20779219296aSGreg Roach * @inheritDoc 20789219296aSGreg Roach */ 20799219296aSGreg Roach public function chartCommonSurnames( 20809219296aSGreg Roach string $color_from = null, 20819219296aSGreg Roach string $color_to = null, 20829219296aSGreg Roach string $number_of_surnames = '10' 2083*71378461SGreg Roach ): string 2084*71378461SGreg Roach { 20859219296aSGreg Roach return $this->individualRepository 208688de55fdSRico Sonntag ->chartCommonSurnames($color_from, $color_to, (int) $number_of_surnames); 20879219296aSGreg Roach } 20889219296aSGreg Roach 20899219296aSGreg Roach /** 20909219296aSGreg Roach * @inheritDoc 20919219296aSGreg Roach */ 20929219296aSGreg Roach public function commonGiven(string $threshold = '1', string $maxtoshow = '10'): string 20939219296aSGreg Roach { 20949219296aSGreg Roach return $this->individualRepository->commonGiven((int) $threshold, (int) $maxtoshow); 20959219296aSGreg Roach } 20969219296aSGreg Roach 20979219296aSGreg Roach /** 20989219296aSGreg Roach * @inheritDoc 20999219296aSGreg Roach */ 21009219296aSGreg Roach public function commonGivenTotals(string $threshold = '1', string $maxtoshow = '10'): string 21019219296aSGreg Roach { 21029219296aSGreg Roach return $this->individualRepository->commonGivenTotals((int) $threshold, (int) $maxtoshow); 21039219296aSGreg Roach } 21049219296aSGreg Roach 21059219296aSGreg Roach /** 21069219296aSGreg Roach * @inheritDoc 21079219296aSGreg Roach */ 21089219296aSGreg Roach public function commonGivenList(string $threshold = '1', string $maxtoshow = '10'): string 21099219296aSGreg Roach { 21109219296aSGreg Roach return $this->individualRepository->commonGivenList((int) $threshold, (int) $maxtoshow); 21119219296aSGreg Roach } 21129219296aSGreg Roach 21139219296aSGreg Roach /** 21149219296aSGreg Roach * @inheritDoc 21159219296aSGreg Roach */ 21169219296aSGreg Roach public function commonGivenListTotals(string $threshold = '1', string $maxtoshow = '10'): string 21179219296aSGreg Roach { 21189219296aSGreg Roach return $this->individualRepository->commonGivenListTotals((int) $threshold, (int) $maxtoshow); 21199219296aSGreg Roach } 21209219296aSGreg Roach 21219219296aSGreg Roach /** 21229219296aSGreg Roach * @inheritDoc 21239219296aSGreg Roach */ 21249219296aSGreg Roach public function commonGivenTable(string $threshold = '1', string $maxtoshow = '10'): string 21259219296aSGreg Roach { 21269219296aSGreg Roach return $this->individualRepository->commonGivenTable((int) $threshold, (int) $maxtoshow); 21279219296aSGreg Roach } 21289219296aSGreg Roach 21299219296aSGreg Roach /** 21309219296aSGreg Roach * @inheritDoc 21319219296aSGreg Roach */ 21329219296aSGreg Roach public function commonGivenFemale(string $threshold = '1', string $maxtoshow = '10'): string 21339219296aSGreg Roach { 21349219296aSGreg Roach return $this->individualRepository->commonGivenFemale((int) $threshold, (int) $maxtoshow); 21359219296aSGreg Roach } 21369219296aSGreg Roach 21379219296aSGreg Roach /** 21389219296aSGreg Roach * @inheritDoc 21399219296aSGreg Roach */ 21409219296aSGreg Roach public function commonGivenFemaleTotals(string $threshold = '1', string $maxtoshow = '10'): string 21419219296aSGreg Roach { 21429219296aSGreg Roach return $this->individualRepository->commonGivenFemaleTotals((int) $threshold, (int) $maxtoshow); 21439219296aSGreg Roach } 21449219296aSGreg Roach 21459219296aSGreg Roach /** 21469219296aSGreg Roach * @inheritDoc 21479219296aSGreg Roach */ 21489219296aSGreg Roach public function commonGivenFemaleList(string $threshold = '1', string $maxtoshow = '10'): string 21499219296aSGreg Roach { 21509219296aSGreg Roach return $this->individualRepository->commonGivenFemaleList((int) $threshold, (int) $maxtoshow); 21519219296aSGreg Roach } 21529219296aSGreg Roach 21539219296aSGreg Roach /** 21549219296aSGreg Roach * @inheritDoc 21559219296aSGreg Roach */ 21569219296aSGreg Roach public function commonGivenFemaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string 21579219296aSGreg Roach { 21589219296aSGreg Roach return $this->individualRepository->commonGivenFemaleListTotals((int) $threshold, (int) $maxtoshow); 21599219296aSGreg Roach } 21609219296aSGreg Roach 21619219296aSGreg Roach /** 21629219296aSGreg Roach * @inheritDoc 21639219296aSGreg Roach */ 21649219296aSGreg Roach public function commonGivenFemaleTable(string $threshold = '1', string $maxtoshow = '10'): string 21659219296aSGreg Roach { 21669219296aSGreg Roach return $this->individualRepository->commonGivenFemaleTable((int) $threshold, (int) $maxtoshow); 21679219296aSGreg Roach } 21689219296aSGreg Roach 21699219296aSGreg Roach /** 21709219296aSGreg Roach * @inheritDoc 21719219296aSGreg Roach */ 21729219296aSGreg Roach public function commonGivenMale(string $threshold = '1', string $maxtoshow = '10'): string 21739219296aSGreg Roach { 21749219296aSGreg Roach return $this->individualRepository->commonGivenMale((int) $threshold, (int) $maxtoshow); 21759219296aSGreg Roach } 21769219296aSGreg Roach 21779219296aSGreg Roach /** 21789219296aSGreg Roach * @inheritDoc 21799219296aSGreg Roach */ 21809219296aSGreg Roach public function commonGivenMaleTotals(string $threshold = '1', string $maxtoshow = '10'): string 21819219296aSGreg Roach { 21829219296aSGreg Roach return $this->individualRepository->commonGivenMaleTotals((int) $threshold, (int) $maxtoshow); 21839219296aSGreg Roach } 21849219296aSGreg Roach 21859219296aSGreg Roach /** 21869219296aSGreg Roach * @inheritDoc 21879219296aSGreg Roach */ 21889219296aSGreg Roach public function commonGivenMaleList(string $threshold = '1', string $maxtoshow = '10'): string 21899219296aSGreg Roach { 21909219296aSGreg Roach return $this->individualRepository->commonGivenMaleList((int) $threshold, (int) $maxtoshow); 21919219296aSGreg Roach } 21929219296aSGreg Roach 21939219296aSGreg Roach /** 21949219296aSGreg Roach * @inheritDoc 21959219296aSGreg Roach */ 21969219296aSGreg Roach public function commonGivenMaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string 21979219296aSGreg Roach { 21989219296aSGreg Roach return $this->individualRepository->commonGivenMaleListTotals((int) $threshold, (int) $maxtoshow); 21999219296aSGreg Roach } 22009219296aSGreg Roach 22019219296aSGreg Roach /** 22029219296aSGreg Roach * @inheritDoc 22039219296aSGreg Roach */ 22049219296aSGreg Roach public function commonGivenMaleTable(string $threshold = '1', string $maxtoshow = '10'): string 22059219296aSGreg Roach { 22069219296aSGreg Roach return $this->individualRepository->commonGivenMaleTable((int) $threshold, (int) $maxtoshow); 22079219296aSGreg Roach } 22089219296aSGreg Roach 22099219296aSGreg Roach /** 22109219296aSGreg Roach * @inheritDoc 22119219296aSGreg Roach */ 22129219296aSGreg Roach public function commonGivenUnknown(string $threshold = '1', string $maxtoshow = '10'): string 22139219296aSGreg Roach { 22149219296aSGreg Roach return $this->individualRepository->commonGivenUnknown((int) $threshold, (int) $maxtoshow); 22159219296aSGreg Roach } 22169219296aSGreg Roach 22179219296aSGreg Roach /** 22189219296aSGreg Roach * @inheritDoc 22199219296aSGreg Roach */ 22209219296aSGreg Roach public function commonGivenUnknownTotals(string $threshold = '1', string $maxtoshow = '10'): string 22219219296aSGreg Roach { 22229219296aSGreg Roach return $this->individualRepository->commonGivenUnknownTotals((int) $threshold, (int) $maxtoshow); 22239219296aSGreg Roach } 22249219296aSGreg Roach 22259219296aSGreg Roach /** 22269219296aSGreg Roach * @inheritDoc 22279219296aSGreg Roach */ 22289219296aSGreg Roach public function commonGivenUnknownList(string $threshold = '1', string $maxtoshow = '10'): string 22299219296aSGreg Roach { 22309219296aSGreg Roach return $this->individualRepository->commonGivenUnknownList((int) $threshold, (int) $maxtoshow); 22319219296aSGreg Roach } 22329219296aSGreg Roach 22339219296aSGreg Roach /** 22349219296aSGreg Roach * @inheritDoc 22359219296aSGreg Roach */ 22369219296aSGreg Roach public function commonGivenUnknownListTotals(string $threshold = '1', string $maxtoshow = '10'): string 22379219296aSGreg Roach { 22389219296aSGreg Roach return $this->individualRepository->commonGivenUnknownListTotals((int) $threshold, (int) $maxtoshow); 22399219296aSGreg Roach } 22409219296aSGreg Roach 22419219296aSGreg Roach /** 22429219296aSGreg Roach * @inheritDoc 22439219296aSGreg Roach */ 22449219296aSGreg Roach public function commonGivenUnknownTable(string $threshold = '1', string $maxtoshow = '10'): string 22459219296aSGreg Roach { 22469219296aSGreg Roach return $this->individualRepository->commonGivenUnknownTable((int) $threshold, (int) $maxtoshow); 22479219296aSGreg Roach } 22489219296aSGreg Roach 22499219296aSGreg Roach /** 22509219296aSGreg Roach * @inheritDoc 22519219296aSGreg Roach */ 22529219296aSGreg Roach public function chartCommonGiven( 22539219296aSGreg Roach string $color_from = null, 22549219296aSGreg Roach string $color_to = null, 22559219296aSGreg Roach string $maxtoshow = '7' 2256*71378461SGreg Roach ): string 2257*71378461SGreg Roach { 225888de55fdSRico Sonntag return $this->individualRepository->chartCommonGiven($color_from, $color_to, (int) $maxtoshow); 22599219296aSGreg Roach } 22609219296aSGreg Roach 22619219296aSGreg Roach /** 22629219296aSGreg Roach * @inheritDoc 22639219296aSGreg Roach */ 22649219296aSGreg Roach public function usersLoggedIn(): string 22659219296aSGreg Roach { 22669219296aSGreg Roach return $this->userRepository->usersLoggedIn(); 22679219296aSGreg Roach } 22689219296aSGreg Roach 22699219296aSGreg Roach /** 22709219296aSGreg Roach * @inheritDoc 22719219296aSGreg Roach */ 22729219296aSGreg Roach public function usersLoggedInList(): string 22739219296aSGreg Roach { 22749219296aSGreg Roach return $this->userRepository->usersLoggedInList(); 22759219296aSGreg Roach } 22769219296aSGreg Roach 22779219296aSGreg Roach /** 22789219296aSGreg Roach * @inheritDoc 22799219296aSGreg Roach */ 22809219296aSGreg Roach public function usersLoggedInTotal(): int 22819219296aSGreg Roach { 22829219296aSGreg Roach return $this->userRepository->usersLoggedInTotal(); 22839219296aSGreg Roach } 22849219296aSGreg Roach 22859219296aSGreg Roach /** 22869219296aSGreg Roach * @inheritDoc 22879219296aSGreg Roach */ 22889219296aSGreg Roach public function usersLoggedInTotalAnon(): int 22899219296aSGreg Roach { 22909219296aSGreg Roach return $this->userRepository->usersLoggedInTotalAnon(); 22919219296aSGreg Roach } 22929219296aSGreg Roach 22939219296aSGreg Roach /** 22949219296aSGreg Roach * @inheritDoc 22959219296aSGreg Roach */ 22969219296aSGreg Roach public function usersLoggedInTotalVisible(): int 22979219296aSGreg Roach { 22989219296aSGreg Roach return $this->userRepository->usersLoggedInTotalVisible(); 22999219296aSGreg Roach } 23009219296aSGreg Roach 23019219296aSGreg Roach /** 23029219296aSGreg Roach * @inheritDoc 23039219296aSGreg Roach */ 23049219296aSGreg Roach public function userId(): string 23059219296aSGreg Roach { 23069219296aSGreg Roach return $this->userRepository->userId(); 23079219296aSGreg Roach } 23089219296aSGreg Roach 23099219296aSGreg Roach /** 23109219296aSGreg Roach * @inheritDoc 23119219296aSGreg Roach */ 23129219296aSGreg Roach public function userName(string $visitor_text = ''): string 23139219296aSGreg Roach { 231418483248SGreg Roach return $this->userRepository->userName($visitor_text); 23159219296aSGreg Roach } 23169219296aSGreg Roach 23179219296aSGreg Roach /** 23189219296aSGreg Roach * @inheritDoc 23199219296aSGreg Roach */ 23209219296aSGreg Roach public function userFullName(): string 23219219296aSGreg Roach { 23229219296aSGreg Roach return $this->userRepository->userFullName(); 23239219296aSGreg Roach } 23249219296aSGreg Roach 23259219296aSGreg Roach /** 23269219296aSGreg Roach * @inheritDoc 23279219296aSGreg Roach */ 23289219296aSGreg Roach public function totalUsers(): string 23299219296aSGreg Roach { 23309219296aSGreg Roach return $this->userRepository->totalUsers(); 23319219296aSGreg Roach } 23329219296aSGreg Roach 23339219296aSGreg Roach /** 23349219296aSGreg Roach * @inheritDoc 23359219296aSGreg Roach */ 23369219296aSGreg Roach public function totalAdmins(): string 23379219296aSGreg Roach { 23389219296aSGreg Roach return $this->userRepository->totalAdmins(); 23399219296aSGreg Roach } 23409219296aSGreg Roach 23419219296aSGreg Roach /** 23429219296aSGreg Roach * @inheritDoc 23439219296aSGreg Roach */ 23449219296aSGreg Roach public function totalNonAdmins(): string 23459219296aSGreg Roach { 23469219296aSGreg Roach return $this->userRepository->totalNonAdmins(); 23479219296aSGreg Roach } 23489219296aSGreg Roach 23499219296aSGreg Roach /** 23509219296aSGreg Roach * @inheritDoc 23519219296aSGreg Roach */ 23529219296aSGreg Roach public function latestUserId(): string 23539219296aSGreg Roach { 23549219296aSGreg Roach return $this->latestUserRepository->latestUserId(); 23559219296aSGreg Roach } 23569219296aSGreg Roach 23579219296aSGreg Roach /** 23589219296aSGreg Roach * @inheritDoc 23599219296aSGreg Roach */ 23609219296aSGreg Roach public function latestUserName(): string 23619219296aSGreg Roach { 23629219296aSGreg Roach return $this->latestUserRepository->latestUserName(); 23639219296aSGreg Roach } 23649219296aSGreg Roach 23659219296aSGreg Roach /** 23669219296aSGreg Roach * @inheritDoc 23679219296aSGreg Roach */ 23689219296aSGreg Roach public function latestUserFullName(): string 23699219296aSGreg Roach { 23709219296aSGreg Roach return $this->latestUserRepository->latestUserFullName(); 23719219296aSGreg Roach } 23729219296aSGreg Roach 23739219296aSGreg Roach /** 23749219296aSGreg Roach * @inheritDoc 23759219296aSGreg Roach */ 23769219296aSGreg Roach public function latestUserRegDate(string $format = null): string 23779219296aSGreg Roach { 237818483248SGreg Roach return $this->latestUserRepository->latestUserRegDate($format); 23799219296aSGreg Roach } 23809219296aSGreg Roach 23819219296aSGreg Roach /** 23829219296aSGreg Roach * @inheritDoc 23839219296aSGreg Roach */ 23849219296aSGreg Roach public function latestUserRegTime(string $format = null): string 23859219296aSGreg Roach { 238618483248SGreg Roach return $this->latestUserRepository->latestUserRegTime($format); 23879219296aSGreg Roach } 23889219296aSGreg Roach 23899219296aSGreg Roach /** 23909219296aSGreg Roach * @inheritDoc 23919219296aSGreg Roach */ 23929219296aSGreg Roach public function latestUserLoggedin(string $yes = null, string $no = null): string 23939219296aSGreg Roach { 239418483248SGreg Roach return $this->latestUserRepository->latestUserLoggedin($yes, $no); 23959219296aSGreg Roach } 23969219296aSGreg Roach 23979219296aSGreg Roach /** 23989219296aSGreg Roach * @inheritDoc 23999219296aSGreg Roach */ 24009219296aSGreg Roach public function contactWebmaster(): string 24019219296aSGreg Roach { 2402*71378461SGreg Roach return $this->contactRepository->contactWebmaster(); 24039219296aSGreg Roach } 24049219296aSGreg Roach 24059219296aSGreg Roach /** 24069219296aSGreg Roach * @inheritDoc 24079219296aSGreg Roach */ 24089219296aSGreg Roach public function contactGedcom(): string 24099219296aSGreg Roach { 2410*71378461SGreg Roach return $this->contactRepository->contactGedcom(); 24119219296aSGreg Roach } 24129219296aSGreg Roach 24139219296aSGreg Roach /** 24149219296aSGreg Roach * @inheritDoc 24159219296aSGreg Roach */ 24169219296aSGreg Roach public function serverDate(): string 24179219296aSGreg Roach { 24189219296aSGreg Roach return $this->serverRepository->serverDate(); 24199219296aSGreg Roach } 24209219296aSGreg Roach 24219219296aSGreg Roach /** 24229219296aSGreg Roach * @inheritDoc 24239219296aSGreg Roach */ 24249219296aSGreg Roach public function serverTime(): string 24259219296aSGreg Roach { 24269219296aSGreg Roach return $this->serverRepository->serverTime(); 24279219296aSGreg Roach } 24289219296aSGreg Roach 24299219296aSGreg Roach /** 24309219296aSGreg Roach * @inheritDoc 24319219296aSGreg Roach */ 24329219296aSGreg Roach public function serverTime24(): string 24339219296aSGreg Roach { 24349219296aSGreg Roach return $this->serverRepository->serverTime24(); 24359219296aSGreg Roach } 24369219296aSGreg Roach 24379219296aSGreg Roach /** 24389219296aSGreg Roach * What is the timezone of the server. 24399219296aSGreg Roach * 24409219296aSGreg Roach * @return string 24419219296aSGreg Roach */ 24429219296aSGreg Roach public function serverTimezone(): string 24439219296aSGreg Roach { 24449219296aSGreg Roach return $this->serverRepository->serverTimezone(); 24459219296aSGreg Roach } 24469219296aSGreg Roach 24479219296aSGreg Roach /** 24489219296aSGreg Roach * @inheritDoc 24499219296aSGreg Roach */ 24509219296aSGreg Roach public function browserDate(): string 24519219296aSGreg Roach { 24529219296aSGreg Roach return $this->browserRepository->browserDate(); 24539219296aSGreg Roach } 24549219296aSGreg Roach 24559219296aSGreg Roach /** 24569219296aSGreg Roach * @inheritDoc 24579219296aSGreg Roach */ 24589219296aSGreg Roach public function browserTime(): string 24599219296aSGreg Roach { 24609219296aSGreg Roach return $this->browserRepository->browserTime(); 24619219296aSGreg Roach } 24629219296aSGreg Roach 24639219296aSGreg Roach /** 24649219296aSGreg Roach * @inheritDoc 24659219296aSGreg Roach */ 24669219296aSGreg Roach public function browserTimezone(): string 24679219296aSGreg Roach { 24689219296aSGreg Roach return $this->browserRepository->browserTimezone(); 24699219296aSGreg Roach } 24709219296aSGreg Roach 24719219296aSGreg Roach /** 24729219296aSGreg Roach * @inheritDoc 24739219296aSGreg Roach */ 24749219296aSGreg Roach public function hitCount(string $page_parameter = ''): string 24759219296aSGreg Roach { 24769219296aSGreg Roach return $this->hitCountRepository->hitCount($page_parameter); 24779219296aSGreg Roach } 24789219296aSGreg Roach 24799219296aSGreg Roach /** 24809219296aSGreg Roach * @inheritDoc 24819219296aSGreg Roach */ 24829219296aSGreg Roach public function hitCountUser(string $page_parameter = ''): string 24839219296aSGreg Roach { 24849219296aSGreg Roach return $this->hitCountRepository->hitCountUser($page_parameter); 24859219296aSGreg Roach } 24869219296aSGreg Roach 24879219296aSGreg Roach /** 24889219296aSGreg Roach * @inheritDoc 24899219296aSGreg Roach */ 24909219296aSGreg Roach public function hitCountIndi(string $page_parameter = ''): string 24919219296aSGreg Roach { 24929219296aSGreg Roach return $this->hitCountRepository->hitCountIndi($page_parameter); 24939219296aSGreg Roach } 24949219296aSGreg Roach 24959219296aSGreg Roach /** 24969219296aSGreg Roach * @inheritDoc 24979219296aSGreg Roach */ 24989219296aSGreg Roach public function hitCountFam(string $page_parameter = ''): string 24999219296aSGreg Roach { 25009219296aSGreg Roach return $this->hitCountRepository->hitCountFam($page_parameter); 25019219296aSGreg Roach } 25029219296aSGreg Roach 25039219296aSGreg Roach /** 25049219296aSGreg Roach * @inheritDoc 25059219296aSGreg Roach */ 25069219296aSGreg Roach public function hitCountSour(string $page_parameter = ''): string 25079219296aSGreg Roach { 25089219296aSGreg Roach return $this->hitCountRepository->hitCountSour($page_parameter); 25099219296aSGreg Roach } 25109219296aSGreg Roach 25119219296aSGreg Roach /** 25129219296aSGreg Roach * @inheritDoc 25139219296aSGreg Roach */ 25149219296aSGreg Roach public function hitCountRepo(string $page_parameter = ''): string 25159219296aSGreg Roach { 25169219296aSGreg Roach return $this->hitCountRepository->hitCountRepo($page_parameter); 25179219296aSGreg Roach } 25189219296aSGreg Roach 25199219296aSGreg Roach /** 25209219296aSGreg Roach * @inheritDoc 25219219296aSGreg Roach */ 25229219296aSGreg Roach public function hitCountNote(string $page_parameter = ''): string 25239219296aSGreg Roach { 25249219296aSGreg Roach return $this->hitCountRepository->hitCountNote($page_parameter); 25259219296aSGreg Roach } 25269219296aSGreg Roach 25279219296aSGreg Roach /** 25289219296aSGreg Roach * @inheritDoc 25299219296aSGreg Roach */ 25309219296aSGreg Roach public function hitCountObje(string $page_parameter = ''): string 25319219296aSGreg Roach { 25329219296aSGreg Roach return $this->hitCountRepository->hitCountObje($page_parameter); 25339219296aSGreg Roach } 25349219296aSGreg Roach 25359219296aSGreg Roach /** 25369219296aSGreg Roach * @inheritDoc 25379219296aSGreg Roach */ 25389219296aSGreg Roach public function gedcomFavorites(): string 25399219296aSGreg Roach { 25409219296aSGreg Roach return $this->favoritesRepository->gedcomFavorites(); 25419219296aSGreg Roach } 25429219296aSGreg Roach 25439219296aSGreg Roach /** 25449219296aSGreg Roach * @inheritDoc 25459219296aSGreg Roach */ 25469219296aSGreg Roach public function userFavorites(): string 25479219296aSGreg Roach { 25489219296aSGreg Roach return $this->favoritesRepository->userFavorites(); 25499219296aSGreg Roach } 25509219296aSGreg Roach 25519219296aSGreg Roach /** 25529219296aSGreg Roach * @inheritDoc 25539219296aSGreg Roach */ 25549219296aSGreg Roach public function totalGedcomFavorites(): string 25559219296aSGreg Roach { 25569219296aSGreg Roach return $this->favoritesRepository->totalGedcomFavorites(); 25579219296aSGreg Roach } 25589219296aSGreg Roach 25599219296aSGreg Roach /** 25609219296aSGreg Roach * @inheritDoc 25619219296aSGreg Roach */ 25629219296aSGreg Roach public function totalUserFavorites(): string 25639219296aSGreg Roach { 25649219296aSGreg Roach return $this->favoritesRepository->totalUserFavorites(); 25659219296aSGreg Roach } 25669219296aSGreg Roach 25679219296aSGreg Roach /** 25689219296aSGreg Roach * @inheritDoc 25699219296aSGreg Roach */ 25709219296aSGreg Roach public function totalUserMessages(): string 25719219296aSGreg Roach { 25729219296aSGreg Roach return $this->messageRepository->totalUserMessages(); 25739219296aSGreg Roach } 25749219296aSGreg Roach 25759219296aSGreg Roach /** 25769219296aSGreg Roach * @inheritDoc 25779219296aSGreg Roach */ 25789219296aSGreg Roach public function totalUserJournal(): string 25799219296aSGreg Roach { 25809219296aSGreg Roach return $this->newsRepository->totalUserJournal(); 25819219296aSGreg Roach } 25829219296aSGreg Roach 25839219296aSGreg Roach /** 25849219296aSGreg Roach * @inheritDoc 25859219296aSGreg Roach */ 25869219296aSGreg Roach public function totalGedcomNews(): string 25879219296aSGreg Roach { 25889219296aSGreg Roach return $this->newsRepository->totalGedcomNews(); 25899219296aSGreg Roach } 25909219296aSGreg Roach 25919219296aSGreg Roach /** 25929219296aSGreg Roach * Create any of the other blocks. 25939219296aSGreg Roach * Use as #callBlock:block_name# 25949219296aSGreg Roach * 25959219296aSGreg Roach * @param string $block 25969219296aSGreg Roach * @param string ...$params 25979219296aSGreg Roach * 2598e364afe4SGreg Roach * @return string|null 25999219296aSGreg Roach */ 26009219296aSGreg Roach public function callBlock(string $block = '', ...$params): ?string 26019219296aSGreg Roach { 260287cca37cSGreg Roach /** @var ModuleBlockInterface|null $module */ 2603fd9aba47SGreg Roach $module = $this->module_service 260487cca37cSGreg Roach ->findByComponent(ModuleBlockInterface::class, $this->tree, Auth::user()) 26056c2179e2SGreg Roach ->first(static function (ModuleInterface $module) use ($block): bool { 26069219296aSGreg Roach return $module->name() === $block && $module->name() !== 'html'; 26070797053bSGreg Roach }); 26089219296aSGreg Roach 26099219296aSGreg Roach if ($module === null) { 26109219296aSGreg Roach return ''; 26119219296aSGreg Roach } 26129219296aSGreg Roach 26139219296aSGreg Roach // Build the config array 26149219296aSGreg Roach $cfg = []; 26159219296aSGreg Roach foreach ($params as $config) { 26169219296aSGreg Roach $bits = explode('=', $config); 26179219296aSGreg Roach 26186ccdf4f0SGreg Roach if (count($bits) < 2) { 26199219296aSGreg Roach continue; 26209219296aSGreg Roach } 26219219296aSGreg Roach 26229219296aSGreg Roach $v = array_shift($bits); 26239219296aSGreg Roach $cfg[$v] = implode('=', $bits); 26249219296aSGreg Roach } 26259219296aSGreg Roach 26263caaa4d2SGreg Roach return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED, $cfg); 26279219296aSGreg Roach } 26289219296aSGreg Roach 26299219296aSGreg Roach /** 26309219296aSGreg Roach * What is the current version of webtrees. 26319219296aSGreg Roach * 26329219296aSGreg Roach * @return string 26339219296aSGreg Roach */ 26349219296aSGreg Roach public function webtreesVersion(): string 26359219296aSGreg Roach { 26369219296aSGreg Roach return Webtrees::VERSION; 26379219296aSGreg Roach } 2638*71378461SGreg Roach 2639*71378461SGreg Roach /** 2640*71378461SGreg Roach * Get tags and their parsed results. 2641*71378461SGreg Roach * 2642*71378461SGreg Roach * @param string $text 2643*71378461SGreg Roach * 2644*71378461SGreg Roach * @return string[] 2645*71378461SGreg Roach */ 2646*71378461SGreg Roach private function getTags(string $text): array 2647*71378461SGreg Roach { 2648*71378461SGreg Roach $tags = []; 2649*71378461SGreg Roach $matches = []; 2650*71378461SGreg Roach 2651*71378461SGreg Roach preg_match_all('/#([^#]+)#/', $text, $matches, PREG_SET_ORDER); 2652*71378461SGreg Roach 2653*71378461SGreg Roach foreach ($matches as $match) { 2654*71378461SGreg Roach $params = explode(':', $match[1]); 2655*71378461SGreg Roach $method = array_shift($params); 2656*71378461SGreg Roach 2657*71378461SGreg Roach if (method_exists($this, $method)) { 2658*71378461SGreg Roach $tags[$match[0]] = $this->$method(...$params); 2659*71378461SGreg Roach } 2660*71378461SGreg Roach } 2661*71378461SGreg Roach 2662*71378461SGreg Roach return $tags; 2663*71378461SGreg Roach } 26649219296aSGreg Roach} 2665