19219296aSGreg Roach<?php 23976b470SGreg Roach 39219296aSGreg Roach/** 49219296aSGreg Roach * webtrees: online genealogy 5d11be702SGreg Roach * Copyright (C) 2023 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 1589f7189bSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 169219296aSGreg Roach */ 17fcfa147eSGreg Roach 189219296aSGreg Roachdeclare(strict_types=1); 199219296aSGreg Roach 209219296aSGreg Roachnamespace Fisharebest\Webtrees; 219219296aSGreg Roach 229219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface; 239219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleInterface; 249219296aSGreg Roachuse Fisharebest\Webtrees\Services\ModuleService; 25e5a6b4d4SGreg Roachuse Fisharebest\Webtrees\Services\UserService; 269219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\BrowserRepository; 279219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ContactRepository; 289219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\EventRepository; 299219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyDatesRepository; 309219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyRepository; 319219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FavoritesRepository; 329219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\GedcomRepository; 339219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\HitCountRepository; 349219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\IndividualRepository; 359219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\BrowserRepositoryInterface; 369219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ContactRepositoryInterface; 379219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\EventRepositoryInterface; 389219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FamilyDatesRepositoryInterface; 399219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FavoritesRepositoryInterface; 409219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\GedcomRepositoryInterface; 419219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\HitCountRepositoryInterface; 429219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\IndividualRepositoryInterface; 439219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\LatestUserRepositoryInterface; 449219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MediaRepositoryInterface; 459219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MessageRepositoryInterface; 469219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\NewsRepositoryInterface; 479219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\PlaceRepositoryInterface; 489219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ServerRepositoryInterface; 499219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\UserRepositoryInterface; 509219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\LatestUserRepository; 519219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MediaRepository; 529219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MessageRepository; 539219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\NewsRepository; 549219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\PlaceRepository; 559219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ServerRepository; 569219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\UserRepository; 57f78da678SGreg Roachuse Fisharebest\Webtrees\Statistics\Service\CenturyService; 58f78da678SGreg Roachuse Fisharebest\Webtrees\Statistics\Service\ColorService; 594c78e066SGreg Roachuse Fisharebest\Webtrees\Statistics\Service\CountryService; 60e6f3d5e2SGreg Roachuse Illuminate\Database\Query\Builder; 61f021177cSGreg Roachuse Illuminate\Support\Collection; 62f021177cSGreg Roachuse ReflectionClass; 63f021177cSGreg Roachuse ReflectionException; 649219296aSGreg Roachuse ReflectionMethod; 656dd2d083SGreg Roachuse ReflectionNamedType; 669219296aSGreg Roach 6771378461SGreg Roachuse function count; 6871378461SGreg Roachuse function in_array; 69dec352c1SGreg Roachuse function str_contains; 7071378461SGreg Roach 719219296aSGreg Roach/** 729219296aSGreg Roach * A selection of pre-formatted statistical queries. 739219296aSGreg Roach * These are primarily used for embedded keywords on HTML blocks, but 749219296aSGreg Roach * are also used elsewhere in the code. 759219296aSGreg Roach */ 769219296aSGreg Roachclass Statistics implements 779219296aSGreg Roach GedcomRepositoryInterface, 789219296aSGreg Roach IndividualRepositoryInterface, 799219296aSGreg Roach EventRepositoryInterface, 809219296aSGreg Roach MediaRepositoryInterface, 819219296aSGreg Roach UserRepositoryInterface, 829219296aSGreg Roach ServerRepositoryInterface, 839219296aSGreg Roach BrowserRepositoryInterface, 849219296aSGreg Roach HitCountRepositoryInterface, 859219296aSGreg Roach LatestUserRepositoryInterface, 869219296aSGreg Roach FavoritesRepositoryInterface, 879219296aSGreg Roach NewsRepositoryInterface, 889219296aSGreg Roach MessageRepositoryInterface, 899219296aSGreg Roach ContactRepositoryInterface, 909219296aSGreg Roach FamilyDatesRepositoryInterface, 919219296aSGreg Roach PlaceRepositoryInterface 929219296aSGreg Roach{ 9343f2f523SGreg Roach private Tree $tree; 949219296aSGreg Roach 9543f2f523SGreg Roach private GedcomRepository $gedcom_repository; 969219296aSGreg Roach 9743f2f523SGreg Roach private IndividualRepository $individual_repository; 989219296aSGreg Roach 9943f2f523SGreg Roach private FamilyRepository $family_repository; 1009219296aSGreg Roach 10143f2f523SGreg Roach private MediaRepository $media_repository; 1029219296aSGreg Roach 10343f2f523SGreg Roach private EventRepository $event_repository; 1049219296aSGreg Roach 10543f2f523SGreg Roach private UserRepository $user_repository; 1069219296aSGreg Roach 10743f2f523SGreg Roach private ServerRepository $server_repository; 1089219296aSGreg Roach 10943f2f523SGreg Roach private BrowserRepository $browser_repository; 1109219296aSGreg Roach 11143f2f523SGreg Roach private HitCountRepository $hit_count_repository; 1129219296aSGreg Roach 11343f2f523SGreg Roach private LatestUserRepository $latest_user_repository; 1149219296aSGreg Roach 11543f2f523SGreg Roach private FavoritesRepository $favorites_repository; 1169219296aSGreg Roach 11743f2f523SGreg Roach private NewsRepository $news_repository; 1189219296aSGreg Roach 11943f2f523SGreg Roach private MessageRepository $message_repository; 1209219296aSGreg Roach 12143f2f523SGreg Roach private ContactRepository $contact_repository; 1229219296aSGreg Roach 12343f2f523SGreg Roach private FamilyDatesRepository $family_dates_repository; 1249219296aSGreg Roach 12543f2f523SGreg Roach private PlaceRepository $place_repository; 12643f2f523SGreg Roach 12743f2f523SGreg Roach private ModuleService $module_service; 1289219296aSGreg Roach 1299219296aSGreg Roach /** 1309219296aSGreg Roach * Create the statistics for a tree. 1319219296aSGreg Roach * 132f78da678SGreg Roach * @param CenturyService $century_service 133f78da678SGreg Roach * @param ColorService $color_service 1344c78e066SGreg Roach * @param CountryService $country_service 1359219296aSGreg Roach * @param ModuleService $module_service 1369219296aSGreg Roach * @param Tree $tree Generate statistics for this tree 137e5a6b4d4SGreg Roach * @param UserService $user_service 1389219296aSGreg Roach */ 1399219296aSGreg Roach public function __construct( 140f78da678SGreg Roach CenturyService $century_service, 141f78da678SGreg Roach ColorService $color_service, 1424c78e066SGreg Roach CountryService $country_service, 1439219296aSGreg Roach ModuleService $module_service, 144e5a6b4d4SGreg Roach Tree $tree, 145e5a6b4d4SGreg Roach UserService $user_service 14698afcacfSGreg Roach ) { 1479219296aSGreg Roach $this->tree = $tree; 148f78da678SGreg Roach $this->gedcom_repository = new GedcomRepository($tree); 149f78da678SGreg Roach $this->individual_repository = new IndividualRepository($century_service, $color_service, $tree); 150f78da678SGreg Roach $this->family_repository = new FamilyRepository($century_service, $color_service, $tree); 151f78da678SGreg Roach $this->family_dates_repository = new FamilyDatesRepository($tree); 152f78da678SGreg Roach $this->media_repository = new MediaRepository($color_service, $tree); 153f78da678SGreg Roach $this->event_repository = new EventRepository($tree); 154f78da678SGreg Roach $this->user_repository = new UserRepository($tree, $user_service); 155f78da678SGreg Roach $this->server_repository = new ServerRepository(); 156f78da678SGreg Roach $this->browser_repository = new BrowserRepository(); 157f78da678SGreg Roach $this->hit_count_repository = new HitCountRepository($tree, $user_service); 158f78da678SGreg Roach $this->latest_user_repository = new LatestUserRepository($user_service); 159f78da678SGreg Roach $this->favorites_repository = new FavoritesRepository($tree, $module_service); 160f78da678SGreg Roach $this->news_repository = new NewsRepository($tree); 161f78da678SGreg Roach $this->message_repository = new MessageRepository(); 162f78da678SGreg Roach $this->contact_repository = new ContactRepository($tree, $user_service); 163f78da678SGreg Roach $this->place_repository = new PlaceRepository($tree, $country_service, $this->individual_repository); 1649219296aSGreg Roach $this->module_service = $module_service; 1659219296aSGreg Roach } 1669219296aSGreg Roach 1679219296aSGreg Roach /** 1689219296aSGreg Roach * Return a string of all supported tags and an example of its output in table row form. 1699219296aSGreg Roach * 1709219296aSGreg Roach * @return string 1719219296aSGreg Roach */ 1729219296aSGreg Roach public function getAllTagsTable(): string 1739219296aSGreg Roach { 174f021177cSGreg Roach try { 175f021177cSGreg Roach $class = new ReflectionClass($this); 1769219296aSGreg Roach 177f021177cSGreg Roach $public_methods = $class->getMethods(ReflectionMethod::IS_PUBLIC); 178f021177cSGreg Roach 179f021177cSGreg Roach $examples = Collection::make($public_methods) 180f25fc0f9SGreg Roach ->filter(static fn (ReflectionMethod $method): bool => !in_array($method->getName(), ['embedTags', 'getAllTagsTable'], true)) 181f021177cSGreg Roach ->filter(static function (ReflectionMethod $method): bool { 182f021177cSGreg Roach $type = $method->getReturnType(); 183f021177cSGreg Roach 1846dd2d083SGreg Roach return $type instanceof ReflectionNamedType && $type->getName() === 'string'; 185f021177cSGreg Roach }) 186f25fc0f9SGreg Roach ->sort(static fn (ReflectionMethod $x, ReflectionMethod $y): int => $x->getName() <=> $y->getName()) 187f021177cSGreg Roach ->map(function (ReflectionMethod $method): string { 188f021177cSGreg Roach $tag = $method->getName(); 189f021177cSGreg Roach 19076d39c55SGreg Roach return '<dt>#' . $tag . '#</dt><dd>' . $this->$tag() . '</dd>'; 191f021177cSGreg Roach }); 192f021177cSGreg Roach 193f021177cSGreg Roach return '<dl>' . $examples->implode('') . '</dl>'; 194f021177cSGreg Roach } catch (ReflectionException $ex) { 195f021177cSGreg Roach return $ex->getMessage(); 1969219296aSGreg Roach } 1979219296aSGreg Roach } 1989219296aSGreg Roach 1999219296aSGreg Roach /** 2009219296aSGreg Roach * Embed tags in text 2019219296aSGreg Roach * 2029219296aSGreg Roach * @param string $text 2039219296aSGreg Roach * 2049219296aSGreg Roach * @return string 2059219296aSGreg Roach */ 2069219296aSGreg Roach public function embedTags(string $text): string 2079219296aSGreg Roach { 208dec352c1SGreg Roach if (str_contains($text, '#')) { 2099219296aSGreg Roach $text = strtr($text, $this->getTags($text)); 2109219296aSGreg Roach } 2119219296aSGreg Roach 2129219296aSGreg Roach return $text; 2139219296aSGreg Roach } 2149219296aSGreg Roach 2159219296aSGreg Roach /** 2160dcd9387SGreg Roach * @return string 2179219296aSGreg Roach */ 2189219296aSGreg Roach public function gedcomFilename(): string 2199219296aSGreg Roach { 220f78da678SGreg Roach return $this->gedcom_repository->gedcomFilename(); 2219219296aSGreg Roach } 2229219296aSGreg Roach 2239219296aSGreg Roach /** 2240dcd9387SGreg Roach * @return int 2259219296aSGreg Roach */ 2269219296aSGreg Roach public function gedcomId(): int 2279219296aSGreg Roach { 228f78da678SGreg Roach return $this->gedcom_repository->gedcomId(); 2299219296aSGreg Roach } 2309219296aSGreg Roach 2319219296aSGreg Roach /** 2320dcd9387SGreg Roach * @return string 2339219296aSGreg Roach */ 2349219296aSGreg Roach public function gedcomTitle(): string 2359219296aSGreg Roach { 236f78da678SGreg Roach return $this->gedcom_repository->gedcomTitle(); 2379219296aSGreg Roach } 2389219296aSGreg Roach 2399219296aSGreg Roach /** 2400dcd9387SGreg Roach * @return string 2419219296aSGreg Roach */ 2429219296aSGreg Roach public function gedcomCreatedSoftware(): string 2439219296aSGreg Roach { 244f78da678SGreg Roach return $this->gedcom_repository->gedcomCreatedSoftware(); 2459219296aSGreg Roach } 2469219296aSGreg Roach 2479219296aSGreg Roach /** 2480dcd9387SGreg Roach * @return string 2499219296aSGreg Roach */ 2509219296aSGreg Roach public function gedcomCreatedVersion(): string 2519219296aSGreg Roach { 252f78da678SGreg Roach return $this->gedcom_repository->gedcomCreatedVersion(); 2539219296aSGreg Roach } 2549219296aSGreg Roach 2559219296aSGreg Roach /** 2560dcd9387SGreg Roach * @return string 2579219296aSGreg Roach */ 2589219296aSGreg Roach public function gedcomDate(): string 2599219296aSGreg Roach { 260f78da678SGreg Roach return $this->gedcom_repository->gedcomDate(); 2619219296aSGreg Roach } 2629219296aSGreg Roach 2639219296aSGreg Roach /** 2640dcd9387SGreg Roach * @return string 2659219296aSGreg Roach */ 2669219296aSGreg Roach public function gedcomUpdated(): string 2679219296aSGreg Roach { 268f78da678SGreg Roach return $this->gedcom_repository->gedcomUpdated(); 2699219296aSGreg Roach } 2709219296aSGreg Roach 2719219296aSGreg Roach /** 2720dcd9387SGreg Roach * @return string 2739219296aSGreg Roach */ 2749219296aSGreg Roach public function gedcomRootId(): string 2759219296aSGreg Roach { 276f78da678SGreg Roach return $this->gedcom_repository->gedcomRootId(); 2779219296aSGreg Roach } 2789219296aSGreg Roach 2799219296aSGreg Roach /** 2800dcd9387SGreg Roach * @return string 2819219296aSGreg Roach */ 2829219296aSGreg Roach public function totalRecords(): string 2839219296aSGreg Roach { 284f78da678SGreg Roach return $this->individual_repository->totalRecords(); 2859219296aSGreg Roach } 2869219296aSGreg Roach 2879219296aSGreg Roach /** 2880dcd9387SGreg Roach * @return string 2899219296aSGreg Roach */ 2909219296aSGreg Roach public function totalIndividuals(): string 2919219296aSGreg Roach { 292f78da678SGreg Roach return $this->individual_repository->totalIndividuals(); 2939219296aSGreg Roach } 2949219296aSGreg Roach 2959219296aSGreg Roach /** 2960dcd9387SGreg Roach * @return string 2979219296aSGreg Roach */ 2989219296aSGreg Roach public function totalIndisWithSources(): string 2999219296aSGreg Roach { 300f78da678SGreg Roach return $this->individual_repository->totalIndisWithSources(); 3019219296aSGreg Roach } 3029219296aSGreg Roach 3039219296aSGreg Roach /** 304baa78b21STheDutchJewel * @return string 305baa78b21STheDutchJewel */ 306baa78b21STheDutchJewel public function totalIndisWithSourcesPercentage(): string 307baa78b21STheDutchJewel { 308baa78b21STheDutchJewel return $this->individual_repository->totalIndisWithSourcesPercentage(); 309baa78b21STheDutchJewel } 310baa78b21STheDutchJewel 311baa78b21STheDutchJewel /** 3120dcd9387SGreg Roach * @param string|null $color_from 3130dcd9387SGreg Roach * @param string|null $color_to 3140dcd9387SGreg Roach * 3150dcd9387SGreg Roach * @return string 3169219296aSGreg Roach */ 3179219296aSGreg Roach public function chartIndisWithSources( 3182c6f1bd5SGreg Roach string|null $color_from = null, 319b50dba3aSGreg Roach string|null $color_to = null 32098afcacfSGreg Roach ): string { 321f78da678SGreg Roach return $this->individual_repository->chartIndisWithSources($color_from, $color_to); 3229219296aSGreg Roach } 3239219296aSGreg Roach 3249219296aSGreg Roach /** 3250dcd9387SGreg Roach * @return string 3269219296aSGreg Roach */ 3279219296aSGreg Roach public function totalIndividualsPercentage(): string 3289219296aSGreg Roach { 329f78da678SGreg Roach return $this->individual_repository->totalIndividualsPercentage(); 3309219296aSGreg Roach } 3319219296aSGreg Roach 3329219296aSGreg Roach /** 3330dcd9387SGreg Roach * @return string 3349219296aSGreg Roach */ 3359219296aSGreg Roach public function totalFamilies(): string 3369219296aSGreg Roach { 337f78da678SGreg Roach return $this->individual_repository->totalFamilies(); 3389219296aSGreg Roach } 3399219296aSGreg Roach 3409219296aSGreg Roach /** 3410dcd9387SGreg Roach * @return string 3429219296aSGreg Roach */ 3439219296aSGreg Roach public function totalFamiliesPercentage(): string 3449219296aSGreg Roach { 345f78da678SGreg Roach return $this->individual_repository->totalFamiliesPercentage(); 3469219296aSGreg Roach } 3479219296aSGreg Roach 3489219296aSGreg Roach /** 3490dcd9387SGreg Roach * @return string 3509219296aSGreg Roach */ 3519219296aSGreg Roach public function totalFamsWithSources(): string 3529219296aSGreg Roach { 353f78da678SGreg Roach return $this->individual_repository->totalFamsWithSources(); 3549219296aSGreg Roach } 3559219296aSGreg Roach 3569219296aSGreg Roach /** 357baa78b21STheDutchJewel * @return string 358baa78b21STheDutchJewel */ 359baa78b21STheDutchJewel public function totalFamsWithSourcesPercentage(): string 360baa78b21STheDutchJewel { 361baa78b21STheDutchJewel return $this->individual_repository->totalFamsWithSourcesPercentage(); 362baa78b21STheDutchJewel } 363baa78b21STheDutchJewel 364baa78b21STheDutchJewel /** 3650dcd9387SGreg Roach * @param string|null $color_from 3660dcd9387SGreg Roach * @param string|null $color_to 3670dcd9387SGreg Roach * 3680dcd9387SGreg Roach * @return string 3699219296aSGreg Roach */ 3709219296aSGreg Roach public function chartFamsWithSources( 3712c6f1bd5SGreg Roach string|null $color_from = null, 372b50dba3aSGreg Roach string|null $color_to = null 37398afcacfSGreg Roach ): string { 374f78da678SGreg Roach return $this->individual_repository->chartFamsWithSources($color_from, $color_to); 3759219296aSGreg Roach } 3769219296aSGreg Roach 3779219296aSGreg Roach /** 3780dcd9387SGreg Roach * @return string 3799219296aSGreg Roach */ 3809219296aSGreg Roach public function totalSources(): string 3819219296aSGreg Roach { 382f78da678SGreg Roach return $this->individual_repository->totalSources(); 3839219296aSGreg Roach } 3849219296aSGreg Roach 3859219296aSGreg Roach /** 3860dcd9387SGreg Roach * @return string 3879219296aSGreg Roach */ 3889219296aSGreg Roach public function totalSourcesPercentage(): string 3899219296aSGreg Roach { 390f78da678SGreg Roach return $this->individual_repository->totalSourcesPercentage(); 3919219296aSGreg Roach } 3929219296aSGreg Roach 3939219296aSGreg Roach /** 3940dcd9387SGreg Roach * @return string 3959219296aSGreg Roach */ 3969219296aSGreg Roach public function totalNotes(): string 3979219296aSGreg Roach { 398f78da678SGreg Roach return $this->individual_repository->totalNotes(); 3999219296aSGreg Roach } 4009219296aSGreg Roach 4019219296aSGreg Roach /** 4020dcd9387SGreg Roach * @return string 4039219296aSGreg Roach */ 4049219296aSGreg Roach public function totalNotesPercentage(): string 4059219296aSGreg Roach { 406f78da678SGreg Roach return $this->individual_repository->totalNotesPercentage(); 4079219296aSGreg Roach } 4089219296aSGreg Roach 4099219296aSGreg Roach /** 4100dcd9387SGreg Roach * @return string 4119219296aSGreg Roach */ 4129219296aSGreg Roach public function totalRepositories(): string 4139219296aSGreg Roach { 414f78da678SGreg Roach return $this->individual_repository->totalRepositories(); 4159219296aSGreg Roach } 4169219296aSGreg Roach 4179219296aSGreg Roach /** 4180dcd9387SGreg Roach * @return string 4199219296aSGreg Roach */ 4209219296aSGreg Roach public function totalRepositoriesPercentage(): string 4219219296aSGreg Roach { 422f78da678SGreg Roach return $this->individual_repository->totalRepositoriesPercentage(); 4239219296aSGreg Roach } 4249219296aSGreg Roach 4259219296aSGreg Roach /** 42609482a55SGreg Roach * @param array<string> ...$params 427320f6a24SGreg Roach * 428320f6a24SGreg Roach * @return string 4299219296aSGreg Roach */ 4309219296aSGreg Roach public function totalSurnames(...$params): string 4319219296aSGreg Roach { 432f78da678SGreg Roach return $this->individual_repository->totalSurnames(...$params); 4339219296aSGreg Roach } 4349219296aSGreg Roach 4359219296aSGreg Roach /** 43609482a55SGreg Roach * @param array<string> ...$params 437320f6a24SGreg Roach * 438320f6a24SGreg Roach * @return string 4399219296aSGreg Roach */ 4409219296aSGreg Roach public function totalGivennames(...$params): string 4419219296aSGreg Roach { 442f78da678SGreg Roach return $this->individual_repository->totalGivennames(...$params); 4439219296aSGreg Roach } 4449219296aSGreg Roach 4459219296aSGreg Roach /** 44609482a55SGreg Roach * @param array<string> $events 4470dcd9387SGreg Roach * 4480dcd9387SGreg Roach * @return string 4499219296aSGreg Roach */ 4509219296aSGreg Roach public function totalEvents(array $events = []): string 4519219296aSGreg Roach { 452f78da678SGreg Roach return $this->event_repository->totalEvents($events); 4539219296aSGreg Roach } 4549219296aSGreg Roach 4559219296aSGreg Roach /** 4560dcd9387SGreg Roach * @return string 4579219296aSGreg Roach */ 4589219296aSGreg Roach public function totalEventsBirth(): string 4599219296aSGreg Roach { 460f78da678SGreg Roach return $this->event_repository->totalEventsBirth(); 4619219296aSGreg Roach } 4629219296aSGreg Roach 4639219296aSGreg Roach /** 4640dcd9387SGreg Roach * @return string 4659219296aSGreg Roach */ 4669219296aSGreg Roach public function totalBirths(): string 4679219296aSGreg Roach { 468f78da678SGreg Roach return $this->event_repository->totalBirths(); 4699219296aSGreg Roach } 4709219296aSGreg Roach 4719219296aSGreg Roach /** 4720dcd9387SGreg Roach * @return string 4739219296aSGreg Roach */ 4749219296aSGreg Roach public function totalEventsDeath(): string 4759219296aSGreg Roach { 476f78da678SGreg Roach return $this->event_repository->totalEventsDeath(); 4779219296aSGreg Roach } 4789219296aSGreg Roach 4799219296aSGreg Roach /** 4800dcd9387SGreg Roach * @return string 4819219296aSGreg Roach */ 4829219296aSGreg Roach public function totalDeaths(): string 4839219296aSGreg Roach { 484f78da678SGreg Roach return $this->event_repository->totalDeaths(); 4859219296aSGreg Roach } 4869219296aSGreg Roach 4879219296aSGreg Roach /** 4880dcd9387SGreg Roach * @return string 4899219296aSGreg Roach */ 4909219296aSGreg Roach public function totalEventsMarriage(): string 4919219296aSGreg Roach { 492f78da678SGreg Roach return $this->event_repository->totalEventsMarriage(); 4939219296aSGreg Roach } 4949219296aSGreg Roach 4959219296aSGreg Roach /** 4960dcd9387SGreg Roach * @return string 4979219296aSGreg Roach */ 4989219296aSGreg Roach public function totalMarriages(): string 4999219296aSGreg Roach { 500f78da678SGreg Roach return $this->event_repository->totalMarriages(); 5019219296aSGreg Roach } 5029219296aSGreg Roach 5039219296aSGreg Roach /** 5040dcd9387SGreg Roach * @return string 5059219296aSGreg Roach */ 5069219296aSGreg Roach public function totalEventsDivorce(): string 5079219296aSGreg Roach { 508f78da678SGreg Roach return $this->event_repository->totalEventsDivorce(); 5099219296aSGreg Roach } 5109219296aSGreg Roach 5119219296aSGreg Roach /** 5120dcd9387SGreg Roach * @return string 5139219296aSGreg Roach */ 5149219296aSGreg Roach public function totalDivorces(): string 5159219296aSGreg Roach { 516f78da678SGreg Roach return $this->event_repository->totalDivorces(); 5179219296aSGreg Roach } 5189219296aSGreg Roach 5199219296aSGreg Roach /** 5200dcd9387SGreg Roach * @return string 5219219296aSGreg Roach */ 5229219296aSGreg Roach public function totalEventsOther(): string 5239219296aSGreg Roach { 524f78da678SGreg Roach return $this->event_repository->totalEventsOther(); 5259219296aSGreg Roach } 5269219296aSGreg Roach 5279219296aSGreg Roach /** 5280dcd9387SGreg Roach * @return string 5299219296aSGreg Roach */ 5309219296aSGreg Roach public function totalSexMales(): string 5319219296aSGreg Roach { 532f78da678SGreg Roach return $this->individual_repository->totalSexMales(); 5339219296aSGreg Roach } 5349219296aSGreg Roach 5359219296aSGreg Roach /** 5360dcd9387SGreg Roach * @return string 5379219296aSGreg Roach */ 5389219296aSGreg Roach public function totalSexMalesPercentage(): string 5399219296aSGreg Roach { 540f78da678SGreg Roach return $this->individual_repository->totalSexMalesPercentage(); 5419219296aSGreg Roach } 5429219296aSGreg Roach 5439219296aSGreg Roach /** 5440dcd9387SGreg Roach * @return string 5459219296aSGreg Roach */ 5469219296aSGreg Roach public function totalSexFemales(): string 5479219296aSGreg Roach { 548f78da678SGreg Roach return $this->individual_repository->totalSexFemales(); 5499219296aSGreg Roach } 5509219296aSGreg Roach 5519219296aSGreg Roach /** 5520dcd9387SGreg Roach * @return string 5539219296aSGreg Roach */ 5549219296aSGreg Roach public function totalSexFemalesPercentage(): string 5559219296aSGreg Roach { 556f78da678SGreg Roach return $this->individual_repository->totalSexFemalesPercentage(); 5579219296aSGreg Roach } 5589219296aSGreg Roach 5599219296aSGreg Roach /** 5600dcd9387SGreg Roach * @return string 5619219296aSGreg Roach */ 5629219296aSGreg Roach public function totalSexUnknown(): string 5639219296aSGreg Roach { 564f78da678SGreg Roach return $this->individual_repository->totalSexUnknown(); 5659219296aSGreg Roach } 5669219296aSGreg Roach 5679219296aSGreg Roach /** 5680dcd9387SGreg Roach * @return string 5699219296aSGreg Roach */ 5709219296aSGreg Roach public function totalSexUnknownPercentage(): string 5719219296aSGreg Roach { 572f78da678SGreg Roach return $this->individual_repository->totalSexUnknownPercentage(); 5739219296aSGreg Roach } 5749219296aSGreg Roach 5759219296aSGreg Roach /** 5760dcd9387SGreg Roach * @param string|null $color_female 5770dcd9387SGreg Roach * @param string|null $color_male 5780dcd9387SGreg Roach * @param string|null $color_unknown 5790dcd9387SGreg Roach * 5800dcd9387SGreg Roach * @return string 5819219296aSGreg Roach */ 5829219296aSGreg Roach public function chartSex( 5832c6f1bd5SGreg Roach string|null $color_female = null, 5842c6f1bd5SGreg Roach string|null $color_male = null, 585b50dba3aSGreg Roach string|null $color_unknown = null 58698afcacfSGreg Roach ): string { 587f78da678SGreg Roach return $this->individual_repository->chartSex($color_female, $color_male, $color_unknown); 5889219296aSGreg Roach } 5899219296aSGreg Roach 5909219296aSGreg Roach /** 5910dcd9387SGreg Roach * @return string 5929219296aSGreg Roach */ 5939219296aSGreg Roach public function totalLiving(): string 5949219296aSGreg Roach { 595f78da678SGreg Roach return $this->individual_repository->totalLiving(); 5969219296aSGreg Roach } 5979219296aSGreg Roach 5989219296aSGreg Roach /** 5990dcd9387SGreg Roach * @return string 6009219296aSGreg Roach */ 6019219296aSGreg Roach public function totalLivingPercentage(): string 6029219296aSGreg Roach { 603f78da678SGreg Roach return $this->individual_repository->totalLivingPercentage(); 6049219296aSGreg Roach } 6059219296aSGreg Roach 6069219296aSGreg Roach /** 6070dcd9387SGreg Roach * @return string 6089219296aSGreg Roach */ 6099219296aSGreg Roach public function totalDeceased(): string 6109219296aSGreg Roach { 611f78da678SGreg Roach return $this->individual_repository->totalDeceased(); 6129219296aSGreg Roach } 6139219296aSGreg Roach 6149219296aSGreg Roach /** 6150dcd9387SGreg Roach * @return string 6169219296aSGreg Roach */ 6179219296aSGreg Roach public function totalDeceasedPercentage(): string 6189219296aSGreg Roach { 619f78da678SGreg Roach return $this->individual_repository->totalDeceasedPercentage(); 6209219296aSGreg Roach } 6219219296aSGreg Roach 6229219296aSGreg Roach /** 6230dcd9387SGreg Roach * @param string|null $color_living 6240dcd9387SGreg Roach * @param string|null $color_dead 6250dcd9387SGreg Roach * 6260dcd9387SGreg Roach * @return string 6279219296aSGreg Roach */ 6282c6f1bd5SGreg Roach public function chartMortality(string|null $color_living = null, string|null $color_dead = null): string 6299219296aSGreg Roach { 630f78da678SGreg Roach return $this->individual_repository->chartMortality($color_living, $color_dead); 6319219296aSGreg Roach } 6329219296aSGreg Roach 6339219296aSGreg Roach /** 6340dcd9387SGreg Roach * @return string 6359219296aSGreg Roach */ 6369219296aSGreg Roach public function totalMedia(): string 6379219296aSGreg Roach { 638f78da678SGreg Roach return $this->media_repository->totalMedia(); 6399219296aSGreg Roach } 6409219296aSGreg Roach 6419219296aSGreg Roach /** 6420dcd9387SGreg Roach * @return string 6439219296aSGreg Roach */ 6449219296aSGreg Roach public function totalMediaAudio(): string 6459219296aSGreg Roach { 646f78da678SGreg Roach return $this->media_repository->totalMediaAudio(); 6479219296aSGreg Roach } 6489219296aSGreg Roach 6499219296aSGreg Roach /** 6500dcd9387SGreg Roach * @return string 6519219296aSGreg Roach */ 6529219296aSGreg Roach public function totalMediaBook(): string 6539219296aSGreg Roach { 654f78da678SGreg Roach return $this->media_repository->totalMediaBook(); 6559219296aSGreg Roach } 6569219296aSGreg Roach 6579219296aSGreg Roach /** 6580dcd9387SGreg Roach * @return string 6599219296aSGreg Roach */ 6609219296aSGreg Roach public function totalMediaCard(): string 6619219296aSGreg Roach { 662f78da678SGreg Roach return $this->media_repository->totalMediaCard(); 6639219296aSGreg Roach } 6649219296aSGreg Roach 6659219296aSGreg Roach /** 6660dcd9387SGreg Roach * @return string 6679219296aSGreg Roach */ 6689219296aSGreg Roach public function totalMediaCertificate(): string 6699219296aSGreg Roach { 670f78da678SGreg Roach return $this->media_repository->totalMediaCertificate(); 6719219296aSGreg Roach } 6729219296aSGreg Roach 6739219296aSGreg Roach /** 6740dcd9387SGreg Roach * @return string 6759219296aSGreg Roach */ 6769219296aSGreg Roach public function totalMediaCoatOfArms(): string 6779219296aSGreg Roach { 678f78da678SGreg Roach return $this->media_repository->totalMediaCoatOfArms(); 6799219296aSGreg Roach } 6809219296aSGreg Roach 6819219296aSGreg Roach /** 6820dcd9387SGreg Roach * @return string 6839219296aSGreg Roach */ 6849219296aSGreg Roach public function totalMediaDocument(): string 6859219296aSGreg Roach { 686f78da678SGreg Roach return $this->media_repository->totalMediaDocument(); 6879219296aSGreg Roach } 6889219296aSGreg Roach 6899219296aSGreg Roach /** 6900dcd9387SGreg Roach * @return string 6919219296aSGreg Roach */ 6929219296aSGreg Roach public function totalMediaElectronic(): string 6939219296aSGreg Roach { 694f78da678SGreg Roach return $this->media_repository->totalMediaElectronic(); 6959219296aSGreg Roach } 6969219296aSGreg Roach 6979219296aSGreg Roach /** 6980dcd9387SGreg Roach * @return string 6999219296aSGreg Roach */ 7009219296aSGreg Roach public function totalMediaMagazine(): string 7019219296aSGreg Roach { 702f78da678SGreg Roach return $this->media_repository->totalMediaMagazine(); 7039219296aSGreg Roach } 7049219296aSGreg Roach 7059219296aSGreg Roach /** 7060dcd9387SGreg Roach * @return string 7079219296aSGreg Roach */ 7089219296aSGreg Roach public function totalMediaManuscript(): string 7099219296aSGreg Roach { 710f78da678SGreg Roach return $this->media_repository->totalMediaManuscript(); 7119219296aSGreg Roach } 7129219296aSGreg Roach 7139219296aSGreg Roach /** 7140dcd9387SGreg Roach * @return string 7159219296aSGreg Roach */ 7169219296aSGreg Roach public function totalMediaMap(): string 7179219296aSGreg Roach { 718f78da678SGreg Roach return $this->media_repository->totalMediaMap(); 7199219296aSGreg Roach } 7209219296aSGreg Roach 7219219296aSGreg Roach /** 7220dcd9387SGreg Roach * @return string 7239219296aSGreg Roach */ 7249219296aSGreg Roach public function totalMediaFiche(): string 7259219296aSGreg Roach { 726f78da678SGreg Roach return $this->media_repository->totalMediaFiche(); 7279219296aSGreg Roach } 7289219296aSGreg Roach 7299219296aSGreg Roach /** 7300dcd9387SGreg Roach * @return string 7319219296aSGreg Roach */ 7329219296aSGreg Roach public function totalMediaFilm(): string 7339219296aSGreg Roach { 734f78da678SGreg Roach return $this->media_repository->totalMediaFilm(); 7359219296aSGreg Roach } 7369219296aSGreg Roach 7379219296aSGreg Roach /** 7380dcd9387SGreg Roach * @return string 7399219296aSGreg Roach */ 7409219296aSGreg Roach public function totalMediaNewspaper(): string 7419219296aSGreg Roach { 742f78da678SGreg Roach return $this->media_repository->totalMediaNewspaper(); 7439219296aSGreg Roach } 7449219296aSGreg Roach 7459219296aSGreg Roach /** 7460dcd9387SGreg Roach * @return string 7479219296aSGreg Roach */ 7489219296aSGreg Roach public function totalMediaPainting(): string 7499219296aSGreg Roach { 750f78da678SGreg Roach return $this->media_repository->totalMediaPainting(); 7519219296aSGreg Roach } 7529219296aSGreg Roach 7539219296aSGreg Roach /** 7540dcd9387SGreg Roach * @return string 7559219296aSGreg Roach */ 7569219296aSGreg Roach public function totalMediaPhoto(): string 7579219296aSGreg Roach { 758f78da678SGreg Roach return $this->media_repository->totalMediaPhoto(); 7599219296aSGreg Roach } 7609219296aSGreg Roach 7619219296aSGreg Roach /** 7620dcd9387SGreg Roach * @return string 7639219296aSGreg Roach */ 7649219296aSGreg Roach public function totalMediaTombstone(): string 7659219296aSGreg Roach { 766f78da678SGreg Roach return $this->media_repository->totalMediaTombstone(); 7679219296aSGreg Roach } 7689219296aSGreg Roach 7699219296aSGreg Roach /** 7700dcd9387SGreg Roach * @return string 7719219296aSGreg Roach */ 7729219296aSGreg Roach public function totalMediaVideo(): string 7739219296aSGreg Roach { 774f78da678SGreg Roach return $this->media_repository->totalMediaVideo(); 7759219296aSGreg Roach } 7769219296aSGreg Roach 7779219296aSGreg Roach /** 7780dcd9387SGreg Roach * @return string 7799219296aSGreg Roach */ 7809219296aSGreg Roach public function totalMediaOther(): string 7819219296aSGreg Roach { 782f78da678SGreg Roach return $this->media_repository->totalMediaOther(); 7839219296aSGreg Roach } 7849219296aSGreg Roach 7859219296aSGreg Roach /** 7860dcd9387SGreg Roach * @return string 7879219296aSGreg Roach */ 7889219296aSGreg Roach public function totalMediaUnknown(): string 7899219296aSGreg Roach { 790f78da678SGreg Roach return $this->media_repository->totalMediaUnknown(); 7919219296aSGreg Roach } 7929219296aSGreg Roach 7939219296aSGreg Roach /** 7940dcd9387SGreg Roach * @param string|null $color_from 7950dcd9387SGreg Roach * @param string|null $color_to 7960dcd9387SGreg Roach * 7970dcd9387SGreg Roach * @return string 7989219296aSGreg Roach */ 7992c6f1bd5SGreg Roach public function chartMedia(string|null $color_from = null, string|null $color_to = null): string 8009219296aSGreg Roach { 801f78da678SGreg Roach return $this->media_repository->chartMedia($color_from, $color_to); 8029219296aSGreg Roach } 8039219296aSGreg Roach 8049219296aSGreg Roach /** 8050dcd9387SGreg Roach * @return string 8069219296aSGreg Roach */ 8079219296aSGreg Roach public function totalPlaces(): string 8089219296aSGreg Roach { 809f78da678SGreg Roach return $this->place_repository->totalPlaces(); 8109219296aSGreg Roach } 8119219296aSGreg Roach 8129219296aSGreg Roach /** 8130dcd9387SGreg Roach * @param string $chart_shows 8140dcd9387SGreg Roach * @param string $chart_type 8150dcd9387SGreg Roach * @param string $surname 8160dcd9387SGreg Roach * 8170dcd9387SGreg Roach * @return string 8189219296aSGreg Roach */ 8199219296aSGreg Roach public function chartDistribution( 8209219296aSGreg Roach string $chart_shows = 'world', 8219219296aSGreg Roach string $chart_type = '', 8229219296aSGreg Roach string $surname = '' 82398afcacfSGreg Roach ): string { 824f78da678SGreg Roach return $this->place_repository->chartDistribution($chart_shows, $chart_type, $surname); 8259219296aSGreg Roach } 8269219296aSGreg Roach 8279219296aSGreg Roach /** 8280dcd9387SGreg Roach * @return string 8299219296aSGreg Roach */ 8309219296aSGreg Roach public function commonCountriesList(): string 8319219296aSGreg Roach { 832f78da678SGreg Roach return $this->place_repository->commonCountriesList(); 8339219296aSGreg Roach } 8349219296aSGreg Roach 8359219296aSGreg Roach /** 8360dcd9387SGreg Roach * @return string 8379219296aSGreg Roach */ 8389219296aSGreg Roach public function commonBirthPlacesList(): string 8399219296aSGreg Roach { 840f78da678SGreg Roach return $this->place_repository->commonBirthPlacesList(); 8419219296aSGreg Roach } 8429219296aSGreg Roach 8439219296aSGreg Roach /** 8440dcd9387SGreg Roach * @return string 8459219296aSGreg Roach */ 8469219296aSGreg Roach public function commonDeathPlacesList(): string 8479219296aSGreg Roach { 848f78da678SGreg Roach return $this->place_repository->commonDeathPlacesList(); 8499219296aSGreg Roach } 8509219296aSGreg Roach 8519219296aSGreg Roach /** 8520dcd9387SGreg Roach * @return string 8539219296aSGreg Roach */ 8549219296aSGreg Roach public function commonMarriagePlacesList(): string 8559219296aSGreg Roach { 856f78da678SGreg Roach return $this->place_repository->commonMarriagePlacesList(); 8579219296aSGreg Roach } 8589219296aSGreg Roach 8599219296aSGreg Roach /** 8600dcd9387SGreg Roach * @return string 8619219296aSGreg Roach */ 8629219296aSGreg Roach public function firstBirth(): string 8639219296aSGreg Roach { 864f78da678SGreg Roach return $this->family_dates_repository->firstBirth(); 8659219296aSGreg Roach } 8669219296aSGreg Roach 8679219296aSGreg Roach /** 8680dcd9387SGreg Roach * @return string 8699219296aSGreg Roach */ 8709219296aSGreg Roach public function firstBirthYear(): string 8719219296aSGreg Roach { 872f78da678SGreg Roach return $this->family_dates_repository->firstBirthYear(); 8739219296aSGreg Roach } 8749219296aSGreg Roach 8759219296aSGreg Roach /** 8760dcd9387SGreg Roach * @return string 8779219296aSGreg Roach */ 8789219296aSGreg Roach public function firstBirthName(): string 8799219296aSGreg Roach { 880f78da678SGreg Roach return $this->family_dates_repository->firstBirthName(); 8819219296aSGreg Roach } 8829219296aSGreg Roach 8839219296aSGreg Roach /** 8840dcd9387SGreg Roach * @return string 8859219296aSGreg Roach */ 8869219296aSGreg Roach public function firstBirthPlace(): string 8879219296aSGreg Roach { 888f78da678SGreg Roach return $this->family_dates_repository->firstBirthPlace(); 8899219296aSGreg Roach } 8909219296aSGreg Roach 8919219296aSGreg Roach /** 8920dcd9387SGreg Roach * @return string 8939219296aSGreg Roach */ 8949219296aSGreg Roach public function lastBirth(): string 8959219296aSGreg Roach { 896f78da678SGreg Roach return $this->family_dates_repository->lastBirth(); 8979219296aSGreg Roach } 8989219296aSGreg Roach 8999219296aSGreg Roach /** 9000dcd9387SGreg Roach * @return string 9019219296aSGreg Roach */ 9029219296aSGreg Roach public function lastBirthYear(): string 9039219296aSGreg Roach { 904f78da678SGreg Roach return $this->family_dates_repository->lastBirthYear(); 9059219296aSGreg Roach } 9069219296aSGreg Roach 9079219296aSGreg Roach /** 9080dcd9387SGreg Roach * @return string 9099219296aSGreg Roach */ 9109219296aSGreg Roach public function lastBirthName(): string 9119219296aSGreg Roach { 912f78da678SGreg Roach return $this->family_dates_repository->lastBirthName(); 9139219296aSGreg Roach } 9149219296aSGreg Roach 9159219296aSGreg Roach /** 9160dcd9387SGreg Roach * @return string 9179219296aSGreg Roach */ 9189219296aSGreg Roach public function lastBirthPlace(): string 9199219296aSGreg Roach { 920f78da678SGreg Roach return $this->family_dates_repository->lastBirthPlace(); 9219219296aSGreg Roach } 9229219296aSGreg Roach 9239219296aSGreg Roach /** 9240dcd9387SGreg Roach * @param int $year1 9250dcd9387SGreg Roach * @param int $year2 9260dcd9387SGreg Roach * 9270dcd9387SGreg Roach * @return Builder 9289219296aSGreg Roach */ 929cde1d378SGreg Roach public function statsBirthQuery(int $year1 = -1, int $year2 = -1): Builder 9309219296aSGreg Roach { 931f78da678SGreg Roach return $this->individual_repository->statsBirthQuery($year1, $year2); 932cde1d378SGreg Roach } 933cde1d378SGreg Roach 934cde1d378SGreg Roach /** 9350dcd9387SGreg Roach * @param int $year1 9360dcd9387SGreg Roach * @param int $year2 9370dcd9387SGreg Roach * 9380dcd9387SGreg Roach * @return Builder 939cde1d378SGreg Roach */ 940cde1d378SGreg Roach public function statsBirthBySexQuery(int $year1 = -1, int $year2 = -1): Builder 941cde1d378SGreg Roach { 942f78da678SGreg Roach return $this->individual_repository->statsBirthBySexQuery($year1, $year2); 9439219296aSGreg Roach } 9449219296aSGreg Roach 9459219296aSGreg Roach /** 9460dcd9387SGreg Roach * @param string|null $color_from 9470dcd9387SGreg Roach * @param string|null $color_to 9480dcd9387SGreg Roach * 9490dcd9387SGreg Roach * @return string 9509219296aSGreg Roach */ 9512c6f1bd5SGreg Roach public function statsBirth(string|null $color_from = null, string|null $color_to = null): string 9529219296aSGreg Roach { 953f78da678SGreg Roach return $this->individual_repository->statsBirth($color_from, $color_to); 9549219296aSGreg Roach } 9559219296aSGreg Roach 9569219296aSGreg Roach /** 9570dcd9387SGreg Roach * @return string 9589219296aSGreg Roach */ 9599219296aSGreg Roach public function firstDeath(): string 9609219296aSGreg Roach { 961f78da678SGreg Roach return $this->family_dates_repository->firstDeath(); 9629219296aSGreg Roach } 9639219296aSGreg Roach 9649219296aSGreg Roach /** 9650dcd9387SGreg Roach * @return string 9669219296aSGreg Roach */ 9679219296aSGreg Roach public function firstDeathYear(): string 9689219296aSGreg Roach { 969f78da678SGreg Roach return $this->family_dates_repository->firstDeathYear(); 9709219296aSGreg Roach } 9719219296aSGreg Roach 9729219296aSGreg Roach /** 9730dcd9387SGreg Roach * @return string 9749219296aSGreg Roach */ 9759219296aSGreg Roach public function firstDeathName(): string 9769219296aSGreg Roach { 977f78da678SGreg Roach return $this->family_dates_repository->firstDeathName(); 9789219296aSGreg Roach } 9799219296aSGreg Roach 9809219296aSGreg Roach /** 9810dcd9387SGreg Roach * @return string 9829219296aSGreg Roach */ 9839219296aSGreg Roach public function firstDeathPlace(): string 9849219296aSGreg Roach { 985f78da678SGreg Roach return $this->family_dates_repository->firstDeathPlace(); 9869219296aSGreg Roach } 9879219296aSGreg Roach 9889219296aSGreg Roach /** 9890dcd9387SGreg Roach * @return string 9909219296aSGreg Roach */ 9919219296aSGreg Roach public function lastDeath(): string 9929219296aSGreg Roach { 993f78da678SGreg Roach return $this->family_dates_repository->lastDeath(); 9949219296aSGreg Roach } 9959219296aSGreg Roach 9969219296aSGreg Roach /** 9970dcd9387SGreg Roach * @return string 9989219296aSGreg Roach */ 9999219296aSGreg Roach public function lastDeathYear(): string 10009219296aSGreg Roach { 1001f78da678SGreg Roach return $this->family_dates_repository->lastDeathYear(); 10029219296aSGreg Roach } 10039219296aSGreg Roach 10049219296aSGreg Roach /** 10050dcd9387SGreg Roach * @return string 10069219296aSGreg Roach */ 10079219296aSGreg Roach public function lastDeathName(): string 10089219296aSGreg Roach { 1009f78da678SGreg Roach return $this->family_dates_repository->lastDeathName(); 10109219296aSGreg Roach } 10119219296aSGreg Roach 10129219296aSGreg Roach /** 10130dcd9387SGreg Roach * @return string 10149219296aSGreg Roach */ 10159219296aSGreg Roach public function lastDeathPlace(): string 10169219296aSGreg Roach { 1017f78da678SGreg Roach return $this->family_dates_repository->lastDeathPlace(); 10189219296aSGreg Roach } 10199219296aSGreg Roach 10209219296aSGreg Roach /** 10210dcd9387SGreg Roach * @param int $year1 10220dcd9387SGreg Roach * @param int $year2 10230dcd9387SGreg Roach * 10240dcd9387SGreg Roach * @return Builder 10259219296aSGreg Roach */ 1026cde1d378SGreg Roach public function statsDeathQuery(int $year1 = -1, int $year2 = -1): Builder 10279219296aSGreg Roach { 1028f78da678SGreg Roach return $this->individual_repository->statsDeathQuery($year1, $year2); 1029cde1d378SGreg Roach } 1030cde1d378SGreg Roach 1031cde1d378SGreg Roach /** 10320dcd9387SGreg Roach * @param int $year1 10330dcd9387SGreg Roach * @param int $year2 10340dcd9387SGreg Roach * 10350dcd9387SGreg Roach * @return Builder 1036cde1d378SGreg Roach */ 1037cde1d378SGreg Roach public function statsDeathBySexQuery(int $year1 = -1, int $year2 = -1): Builder 1038cde1d378SGreg Roach { 1039f78da678SGreg Roach return $this->individual_repository->statsDeathBySexQuery($year1, $year2); 10409219296aSGreg Roach } 10419219296aSGreg Roach 10429219296aSGreg Roach /** 10430dcd9387SGreg Roach * @param string|null $color_from 10440dcd9387SGreg Roach * @param string|null $color_to 10450dcd9387SGreg Roach * 10460dcd9387SGreg Roach * @return string 10479219296aSGreg Roach */ 10482c6f1bd5SGreg Roach public function statsDeath(string|null $color_from = null, string|null $color_to = null): string 10499219296aSGreg Roach { 1050f78da678SGreg Roach return $this->individual_repository->statsDeath($color_from, $color_to); 10519219296aSGreg Roach } 10529219296aSGreg Roach 10539219296aSGreg Roach /** 1054320f6a24SGreg Roach * General query on ages. 1055320f6a24SGreg Roach * 1056320f6a24SGreg Roach * @param string $related 1057320f6a24SGreg Roach * @param string $sex 1058320f6a24SGreg Roach * @param int $year1 1059320f6a24SGreg Roach * @param int $year2 1060320f6a24SGreg Roach * 1061*d7c2f5ccSGreg Roach * @return array<array<object>> 10629219296aSGreg Roach */ 106376d39c55SGreg Roach public function statsAgeQuery(string $related = 'BIRT', string $sex = 'BOTH', int $year1 = -1, int $year2 = -1): array 10649219296aSGreg Roach { 1065f78da678SGreg Roach return $this->individual_repository->statsAgeQuery($related, $sex, $year1, $year2); 10669219296aSGreg Roach } 10679219296aSGreg Roach 10689219296aSGreg Roach /** 10690dcd9387SGreg Roach * @return string 10709219296aSGreg Roach */ 107188de55fdSRico Sonntag public function statsAge(): string 10729219296aSGreg Roach { 1073f78da678SGreg Roach return $this->individual_repository->statsAge(); 10749219296aSGreg Roach } 10759219296aSGreg Roach 10769219296aSGreg Roach /** 10770dcd9387SGreg Roach * @return string 10789219296aSGreg Roach */ 10799219296aSGreg Roach public function longestLife(): string 10809219296aSGreg Roach { 1081f78da678SGreg Roach return $this->individual_repository->longestLife(); 10829219296aSGreg Roach } 10839219296aSGreg Roach 10849219296aSGreg Roach /** 10850dcd9387SGreg Roach * @return string 10869219296aSGreg Roach */ 10879219296aSGreg Roach public function longestLifeAge(): string 10889219296aSGreg Roach { 1089f78da678SGreg Roach return $this->individual_repository->longestLifeAge(); 10909219296aSGreg Roach } 10919219296aSGreg Roach 10929219296aSGreg Roach /** 10930dcd9387SGreg Roach * @return string 10949219296aSGreg Roach */ 10959219296aSGreg Roach public function longestLifeName(): string 10969219296aSGreg Roach { 1097f78da678SGreg Roach return $this->individual_repository->longestLifeName(); 10989219296aSGreg Roach } 10999219296aSGreg Roach 11009219296aSGreg Roach /** 11010dcd9387SGreg Roach * @return string 11029219296aSGreg Roach */ 11039219296aSGreg Roach public function longestLifeFemale(): string 11049219296aSGreg Roach { 1105f78da678SGreg Roach return $this->individual_repository->longestLifeFemale(); 11069219296aSGreg Roach } 11079219296aSGreg Roach 11089219296aSGreg Roach /** 11090dcd9387SGreg Roach * @return string 11109219296aSGreg Roach */ 11119219296aSGreg Roach public function longestLifeFemaleAge(): string 11129219296aSGreg Roach { 1113f78da678SGreg Roach return $this->individual_repository->longestLifeFemaleAge(); 11149219296aSGreg Roach } 11159219296aSGreg Roach 11169219296aSGreg Roach /** 11170dcd9387SGreg Roach * @return string 11189219296aSGreg Roach */ 11199219296aSGreg Roach public function longestLifeFemaleName(): string 11209219296aSGreg Roach { 1121f78da678SGreg Roach return $this->individual_repository->longestLifeFemaleName(); 11229219296aSGreg Roach } 11239219296aSGreg Roach 11249219296aSGreg Roach /** 11250dcd9387SGreg Roach * @return string 11269219296aSGreg Roach */ 11279219296aSGreg Roach public function longestLifeMale(): string 11289219296aSGreg Roach { 1129f78da678SGreg Roach return $this->individual_repository->longestLifeMale(); 11309219296aSGreg Roach } 11319219296aSGreg Roach 11329219296aSGreg Roach /** 11330dcd9387SGreg Roach * @return string 11349219296aSGreg Roach */ 11359219296aSGreg Roach public function longestLifeMaleAge(): string 11369219296aSGreg Roach { 1137f78da678SGreg Roach return $this->individual_repository->longestLifeMaleAge(); 11389219296aSGreg Roach } 11399219296aSGreg Roach 11409219296aSGreg Roach /** 11410dcd9387SGreg Roach * @return string 11429219296aSGreg Roach */ 11439219296aSGreg Roach public function longestLifeMaleName(): string 11449219296aSGreg Roach { 1145f78da678SGreg Roach return $this->individual_repository->longestLifeMaleName(); 11469219296aSGreg Roach } 11479219296aSGreg Roach 11489219296aSGreg Roach /** 11490dcd9387SGreg Roach * @param string $total 11500dcd9387SGreg Roach * 11510dcd9387SGreg Roach * @return string 11529219296aSGreg Roach */ 11539219296aSGreg Roach public function topTenOldest(string $total = '10'): string 11549219296aSGreg Roach { 1155f78da678SGreg Roach return $this->individual_repository->topTenOldest((int) $total); 11569219296aSGreg Roach } 11579219296aSGreg Roach 11589219296aSGreg Roach /** 11590dcd9387SGreg Roach * @param string $total 11600dcd9387SGreg Roach * 11610dcd9387SGreg Roach * @return string 11629219296aSGreg Roach */ 11639219296aSGreg Roach public function topTenOldestList(string $total = '10'): string 11649219296aSGreg Roach { 1165f78da678SGreg Roach return $this->individual_repository->topTenOldestList((int) $total); 11669219296aSGreg Roach } 11679219296aSGreg Roach 11689219296aSGreg Roach /** 11690dcd9387SGreg Roach * @param string $total 11700dcd9387SGreg Roach * 11710dcd9387SGreg Roach * @return string 11729219296aSGreg Roach */ 11739219296aSGreg Roach public function topTenOldestFemale(string $total = '10'): string 11749219296aSGreg Roach { 1175f78da678SGreg Roach return $this->individual_repository->topTenOldestFemale((int) $total); 11769219296aSGreg Roach } 11779219296aSGreg Roach 11789219296aSGreg Roach /** 11790dcd9387SGreg Roach * @param string $total 11800dcd9387SGreg Roach * 11810dcd9387SGreg Roach * @return string 11829219296aSGreg Roach */ 11839219296aSGreg Roach public function topTenOldestFemaleList(string $total = '10'): string 11849219296aSGreg Roach { 1185f78da678SGreg Roach return $this->individual_repository->topTenOldestFemaleList((int) $total); 11869219296aSGreg Roach } 11879219296aSGreg Roach 11889219296aSGreg Roach /** 11890dcd9387SGreg Roach * @param string $total 11900dcd9387SGreg Roach * 11910dcd9387SGreg Roach * @return string 11929219296aSGreg Roach */ 11939219296aSGreg Roach public function topTenOldestMale(string $total = '10'): string 11949219296aSGreg Roach { 1195f78da678SGreg Roach return $this->individual_repository->topTenOldestMale((int) $total); 11969219296aSGreg Roach } 11979219296aSGreg Roach 11989219296aSGreg Roach /** 11990dcd9387SGreg Roach * @param string $total 12000dcd9387SGreg Roach * 12010dcd9387SGreg Roach * @return string 12029219296aSGreg Roach */ 12039219296aSGreg Roach public function topTenOldestMaleList(string $total = '10'): string 12049219296aSGreg Roach { 1205f78da678SGreg Roach return $this->individual_repository->topTenOldestMaleList((int) $total); 12069219296aSGreg Roach } 12079219296aSGreg Roach 12089219296aSGreg Roach /** 12090dcd9387SGreg Roach * @param string $total 12100dcd9387SGreg Roach * 12110dcd9387SGreg Roach * @return string 12129219296aSGreg Roach */ 12139219296aSGreg Roach public function topTenOldestAlive(string $total = '10'): string 12149219296aSGreg Roach { 1215f78da678SGreg Roach return $this->individual_repository->topTenOldestAlive((int) $total); 12169219296aSGreg Roach } 12179219296aSGreg Roach 12189219296aSGreg Roach /** 12190dcd9387SGreg Roach * @param string $total 12200dcd9387SGreg Roach * 12210dcd9387SGreg Roach * @return string 12229219296aSGreg Roach */ 12239219296aSGreg Roach public function topTenOldestListAlive(string $total = '10'): string 12249219296aSGreg Roach { 1225f78da678SGreg Roach return $this->individual_repository->topTenOldestListAlive((int) $total); 12269219296aSGreg Roach } 12279219296aSGreg Roach 12289219296aSGreg Roach /** 12290dcd9387SGreg Roach * @param string $total 12300dcd9387SGreg Roach * 12310dcd9387SGreg Roach * @return string 12329219296aSGreg Roach */ 12339219296aSGreg Roach public function topTenOldestFemaleAlive(string $total = '10'): string 12349219296aSGreg Roach { 1235f78da678SGreg Roach return $this->individual_repository->topTenOldestFemaleAlive((int) $total); 12369219296aSGreg Roach } 12379219296aSGreg Roach 12389219296aSGreg Roach /** 12390dcd9387SGreg Roach * @param string $total 12400dcd9387SGreg Roach * 12410dcd9387SGreg Roach * @return string 12429219296aSGreg Roach */ 12439219296aSGreg Roach public function topTenOldestFemaleListAlive(string $total = '10'): string 12449219296aSGreg Roach { 1245f78da678SGreg Roach return $this->individual_repository->topTenOldestFemaleListAlive((int) $total); 12469219296aSGreg Roach } 12479219296aSGreg Roach 12489219296aSGreg Roach /** 12490dcd9387SGreg Roach * @param string $total 12500dcd9387SGreg Roach * 12510dcd9387SGreg Roach * @return string 12529219296aSGreg Roach */ 12539219296aSGreg Roach public function topTenOldestMaleAlive(string $total = '10'): string 12549219296aSGreg Roach { 1255f78da678SGreg Roach return $this->individual_repository->topTenOldestMaleAlive((int) $total); 12569219296aSGreg Roach } 12579219296aSGreg Roach 12589219296aSGreg Roach /** 12590dcd9387SGreg Roach * @param string $total 12600dcd9387SGreg Roach * 12610dcd9387SGreg Roach * @return string 12629219296aSGreg Roach */ 12639219296aSGreg Roach public function topTenOldestMaleListAlive(string $total = '10'): string 12649219296aSGreg Roach { 1265f78da678SGreg Roach return $this->individual_repository->topTenOldestMaleListAlive((int) $total); 12669219296aSGreg Roach } 12679219296aSGreg Roach 12689219296aSGreg Roach /** 1269bd055353SGreg Roach * @param string $show_years 12700dcd9387SGreg Roach * 12710dcd9387SGreg Roach * @return string 12729219296aSGreg Roach */ 1273bd055353SGreg Roach public function averageLifespan(string $show_years = ''): string 12749219296aSGreg Roach { 1275bd055353SGreg Roach return $this->individual_repository->averageLifespan((bool) $show_years); 12769219296aSGreg Roach } 12779219296aSGreg Roach 12789219296aSGreg Roach /** 1279bd055353SGreg Roach * @param string $show_years 12800dcd9387SGreg Roach * 12810dcd9387SGreg Roach * @return string 12829219296aSGreg Roach */ 1283bd055353SGreg Roach public function averageLifespanFemale(string $show_years = ''): string 12849219296aSGreg Roach { 1285bd055353SGreg Roach return $this->individual_repository->averageLifespanFemale((bool) $show_years); 12869219296aSGreg Roach } 12879219296aSGreg Roach 12889219296aSGreg Roach /** 1289bd055353SGreg Roach * @param string $show_years 12900dcd9387SGreg Roach * 12910dcd9387SGreg Roach * @return string 12929219296aSGreg Roach */ 1293bd055353SGreg Roach public function averageLifespanMale(string $show_years = ''): string 12949219296aSGreg Roach { 1295bd055353SGreg Roach return $this->individual_repository->averageLifespanMale((bool) $show_years); 12969219296aSGreg Roach } 12979219296aSGreg Roach 12989219296aSGreg Roach /** 12990dcd9387SGreg Roach * @return string 13009219296aSGreg Roach */ 13019219296aSGreg Roach public function firstEvent(): string 13029219296aSGreg Roach { 1303f78da678SGreg Roach return $this->event_repository->firstEvent(); 13049219296aSGreg Roach } 13059219296aSGreg Roach 13069219296aSGreg Roach /** 13070dcd9387SGreg Roach * @return string 13089219296aSGreg Roach */ 13099219296aSGreg Roach public function firstEventYear(): string 13109219296aSGreg Roach { 1311f78da678SGreg Roach return $this->event_repository->firstEventYear(); 13129219296aSGreg Roach } 13139219296aSGreg Roach 13149219296aSGreg Roach /** 13150dcd9387SGreg Roach * @return string 13169219296aSGreg Roach */ 13179219296aSGreg Roach public function firstEventType(): string 13189219296aSGreg Roach { 1319f78da678SGreg Roach return $this->event_repository->firstEventType(); 13209219296aSGreg Roach } 13219219296aSGreg Roach 13229219296aSGreg Roach /** 13230dcd9387SGreg Roach * @return string 13249219296aSGreg Roach */ 13259219296aSGreg Roach public function firstEventName(): string 13269219296aSGreg Roach { 1327f78da678SGreg Roach return $this->event_repository->firstEventName(); 13289219296aSGreg Roach } 13299219296aSGreg Roach 13309219296aSGreg Roach /** 13310dcd9387SGreg Roach * @return string 13329219296aSGreg Roach */ 13339219296aSGreg Roach public function firstEventPlace(): string 13349219296aSGreg Roach { 1335f78da678SGreg Roach return $this->event_repository->firstEventPlace(); 13369219296aSGreg Roach } 13379219296aSGreg Roach 13389219296aSGreg Roach /** 13390dcd9387SGreg Roach * @return string 13409219296aSGreg Roach */ 13419219296aSGreg Roach public function lastEvent(): string 13429219296aSGreg Roach { 1343f78da678SGreg Roach return $this->event_repository->lastEvent(); 13449219296aSGreg Roach } 13459219296aSGreg Roach 13469219296aSGreg Roach /** 13470dcd9387SGreg Roach * @return string 13489219296aSGreg Roach */ 13499219296aSGreg Roach public function lastEventYear(): string 13509219296aSGreg Roach { 1351f78da678SGreg Roach return $this->event_repository->lastEventYear(); 13529219296aSGreg Roach } 13539219296aSGreg Roach 13549219296aSGreg Roach /** 13550dcd9387SGreg Roach * @return string 13569219296aSGreg Roach */ 13579219296aSGreg Roach public function lastEventType(): string 13589219296aSGreg Roach { 1359f78da678SGreg Roach return $this->event_repository->lastEventType(); 13609219296aSGreg Roach } 13619219296aSGreg Roach 13629219296aSGreg Roach /** 13630dcd9387SGreg Roach * @return string 13649219296aSGreg Roach */ 13659219296aSGreg Roach public function lastEventName(): string 13669219296aSGreg Roach { 1367f78da678SGreg Roach return $this->event_repository->lastEventName(); 13689219296aSGreg Roach } 13699219296aSGreg Roach 13709219296aSGreg Roach /** 13710dcd9387SGreg Roach * @return string 13729219296aSGreg Roach */ 13739219296aSGreg Roach public function lastEventPlace(): string 13749219296aSGreg Roach { 13753107fd63SGreg Roach return $this->event_repository->lastEventPlace(); 13769219296aSGreg Roach } 13779219296aSGreg Roach 13789219296aSGreg Roach /** 13790dcd9387SGreg Roach * @return string 13809219296aSGreg Roach */ 13819219296aSGreg Roach public function firstMarriage(): string 13829219296aSGreg Roach { 1383f78da678SGreg Roach return $this->family_dates_repository->firstMarriage(); 13849219296aSGreg Roach } 13859219296aSGreg Roach 13869219296aSGreg Roach /** 13870dcd9387SGreg Roach * @return string 13889219296aSGreg Roach */ 13899219296aSGreg Roach public function firstMarriageYear(): string 13909219296aSGreg Roach { 1391f78da678SGreg Roach return $this->family_dates_repository->firstMarriageYear(); 13929219296aSGreg Roach } 13939219296aSGreg Roach 13949219296aSGreg Roach /** 13950dcd9387SGreg Roach * @return string 13969219296aSGreg Roach */ 13979219296aSGreg Roach public function firstMarriageName(): string 13989219296aSGreg Roach { 1399f78da678SGreg Roach return $this->family_dates_repository->firstMarriageName(); 14009219296aSGreg Roach } 14019219296aSGreg Roach 14029219296aSGreg Roach /** 14030dcd9387SGreg Roach * @return string 14049219296aSGreg Roach */ 14059219296aSGreg Roach public function firstMarriagePlace(): string 14069219296aSGreg Roach { 1407f78da678SGreg Roach return $this->family_dates_repository->firstMarriagePlace(); 14089219296aSGreg Roach } 14099219296aSGreg Roach 14109219296aSGreg Roach /** 14110dcd9387SGreg Roach * @return string 14129219296aSGreg Roach */ 14139219296aSGreg Roach public function lastMarriage(): string 14149219296aSGreg Roach { 1415f78da678SGreg Roach return $this->family_dates_repository->lastMarriage(); 14169219296aSGreg Roach } 14179219296aSGreg Roach 14189219296aSGreg Roach /** 14190dcd9387SGreg Roach * @return string 14209219296aSGreg Roach */ 14219219296aSGreg Roach public function lastMarriageYear(): string 14229219296aSGreg Roach { 1423f78da678SGreg Roach return $this->family_dates_repository->lastMarriageYear(); 14249219296aSGreg Roach } 14259219296aSGreg Roach 14269219296aSGreg Roach /** 14270dcd9387SGreg Roach * @return string 14289219296aSGreg Roach */ 14299219296aSGreg Roach public function lastMarriageName(): string 14309219296aSGreg Roach { 1431f78da678SGreg Roach return $this->family_dates_repository->lastMarriageName(); 14329219296aSGreg Roach } 14339219296aSGreg Roach 14349219296aSGreg Roach /** 14350dcd9387SGreg Roach * @return string 14369219296aSGreg Roach */ 14379219296aSGreg Roach public function lastMarriagePlace(): string 14389219296aSGreg Roach { 1439f78da678SGreg Roach return $this->family_dates_repository->lastMarriagePlace(); 14409219296aSGreg Roach } 14419219296aSGreg Roach 14429219296aSGreg Roach /** 14430dcd9387SGreg Roach * @param int $year1 14440dcd9387SGreg Roach * @param int $year2 14450dcd9387SGreg Roach * 14460dcd9387SGreg Roach * @return Builder 14479219296aSGreg Roach */ 1448e6f3d5e2SGreg Roach public function statsMarriageQuery(int $year1 = -1, int $year2 = -1): Builder 14499219296aSGreg Roach { 1450f78da678SGreg Roach return $this->family_repository->statsMarriageQuery($year1, $year2); 1451e6f3d5e2SGreg Roach } 1452e6f3d5e2SGreg Roach 1453e6f3d5e2SGreg Roach /** 14540dcd9387SGreg Roach * @param int $year1 14550dcd9387SGreg Roach * @param int $year2 14560dcd9387SGreg Roach * 14570dcd9387SGreg Roach * @return Builder 1458e6f3d5e2SGreg Roach */ 1459e6f3d5e2SGreg Roach public function statsFirstMarriageQuery(int $year1 = -1, int $year2 = -1): Builder 1460e6f3d5e2SGreg Roach { 1461f78da678SGreg Roach return $this->family_repository->statsFirstMarriageQuery($year1, $year2); 14629219296aSGreg Roach } 14639219296aSGreg Roach 14649219296aSGreg Roach /** 14650dcd9387SGreg Roach * @param string|null $color_from 14660dcd9387SGreg Roach * @param string|null $color_to 14670dcd9387SGreg Roach * 14680dcd9387SGreg Roach * @return string 14699219296aSGreg Roach */ 14702c6f1bd5SGreg Roach public function statsMarr(string|null $color_from = null, string|null $color_to = null): string 14719219296aSGreg Roach { 1472f78da678SGreg Roach return $this->family_repository->statsMarr($color_from, $color_to); 14739219296aSGreg Roach } 14749219296aSGreg Roach 14759219296aSGreg Roach /** 14760dcd9387SGreg Roach * @return string 14779219296aSGreg Roach */ 14789219296aSGreg Roach public function firstDivorce(): string 14799219296aSGreg Roach { 1480f78da678SGreg Roach return $this->family_dates_repository->firstDivorce(); 14819219296aSGreg Roach } 14829219296aSGreg Roach 14839219296aSGreg Roach /** 14840dcd9387SGreg Roach * @return string 14859219296aSGreg Roach */ 14869219296aSGreg Roach public function firstDivorceYear(): string 14879219296aSGreg Roach { 1488f78da678SGreg Roach return $this->family_dates_repository->firstDivorceYear(); 14899219296aSGreg Roach } 14909219296aSGreg Roach 14919219296aSGreg Roach /** 14920dcd9387SGreg Roach * @return string 14939219296aSGreg Roach */ 14949219296aSGreg Roach public function firstDivorceName(): string 14959219296aSGreg Roach { 1496f78da678SGreg Roach return $this->family_dates_repository->firstDivorceName(); 14979219296aSGreg Roach } 14989219296aSGreg Roach 14999219296aSGreg Roach /** 15000dcd9387SGreg Roach * @return string 15019219296aSGreg Roach */ 15029219296aSGreg Roach public function firstDivorcePlace(): string 15039219296aSGreg Roach { 1504f78da678SGreg Roach return $this->family_dates_repository->firstDivorcePlace(); 15059219296aSGreg Roach } 15069219296aSGreg Roach 15079219296aSGreg Roach /** 15080dcd9387SGreg Roach * @return string 15099219296aSGreg Roach */ 15109219296aSGreg Roach public function lastDivorce(): string 15119219296aSGreg Roach { 1512f78da678SGreg Roach return $this->family_dates_repository->lastDivorce(); 15139219296aSGreg Roach } 15149219296aSGreg Roach 15159219296aSGreg Roach /** 15160dcd9387SGreg Roach * @return string 15179219296aSGreg Roach */ 15189219296aSGreg Roach public function lastDivorceYear(): string 15199219296aSGreg Roach { 1520f78da678SGreg Roach return $this->family_dates_repository->lastDivorceYear(); 15219219296aSGreg Roach } 15229219296aSGreg Roach 15239219296aSGreg Roach /** 15240dcd9387SGreg Roach * @return string 15259219296aSGreg Roach */ 15269219296aSGreg Roach public function lastDivorceName(): string 15279219296aSGreg Roach { 1528f78da678SGreg Roach return $this->family_dates_repository->lastDivorceName(); 15299219296aSGreg Roach } 15309219296aSGreg Roach 15319219296aSGreg Roach /** 15320dcd9387SGreg Roach * @return string 15339219296aSGreg Roach */ 15349219296aSGreg Roach public function lastDivorcePlace(): string 15359219296aSGreg Roach { 1536f78da678SGreg Roach return $this->family_dates_repository->lastDivorcePlace(); 15379219296aSGreg Roach } 15389219296aSGreg Roach 15399219296aSGreg Roach /** 15400dcd9387SGreg Roach * @param string|null $color_from 15410dcd9387SGreg Roach * @param string|null $color_to 15420dcd9387SGreg Roach * 15430dcd9387SGreg Roach * @return string 15449219296aSGreg Roach */ 15452c6f1bd5SGreg Roach public function statsDiv(string|null $color_from = null, string|null $color_to = null): string 15469219296aSGreg Roach { 1547f78da678SGreg Roach return $this->family_repository->statsDiv($color_from, $color_to); 15489219296aSGreg Roach } 15499219296aSGreg Roach 15509219296aSGreg Roach /** 15510dcd9387SGreg Roach * @return string 15529219296aSGreg Roach */ 15539219296aSGreg Roach public function youngestMarriageFemale(): string 15549219296aSGreg Roach { 1555f78da678SGreg Roach return $this->family_repository->youngestMarriageFemale(); 15569219296aSGreg Roach } 15579219296aSGreg Roach 15589219296aSGreg Roach /** 15590dcd9387SGreg Roach * @return string 15609219296aSGreg Roach */ 15619219296aSGreg Roach public function youngestMarriageFemaleName(): string 15629219296aSGreg Roach { 1563f78da678SGreg Roach return $this->family_repository->youngestMarriageFemaleName(); 15649219296aSGreg Roach } 15659219296aSGreg Roach 15669219296aSGreg Roach /** 15670dcd9387SGreg Roach * @param string $show_years 15680dcd9387SGreg Roach * 15690dcd9387SGreg Roach * @return string 15709219296aSGreg Roach */ 15719219296aSGreg Roach public function youngestMarriageFemaleAge(string $show_years = ''): string 15729219296aSGreg Roach { 1573f78da678SGreg Roach return $this->family_repository->youngestMarriageFemaleAge($show_years); 15749219296aSGreg Roach } 15759219296aSGreg Roach 15769219296aSGreg Roach /** 15770dcd9387SGreg Roach * @return string 15789219296aSGreg Roach */ 15799219296aSGreg Roach public function oldestMarriageFemale(): string 15809219296aSGreg Roach { 1581f78da678SGreg Roach return $this->family_repository->oldestMarriageFemale(); 15829219296aSGreg Roach } 15839219296aSGreg Roach 15849219296aSGreg Roach /** 15850dcd9387SGreg Roach * @return string 15869219296aSGreg Roach */ 15879219296aSGreg Roach public function oldestMarriageFemaleName(): string 15889219296aSGreg Roach { 1589f78da678SGreg Roach return $this->family_repository->oldestMarriageFemaleName(); 15909219296aSGreg Roach } 15919219296aSGreg Roach 15929219296aSGreg Roach /** 15930dcd9387SGreg Roach * @param string $show_years 15940dcd9387SGreg Roach * 15950dcd9387SGreg Roach * @return string 15969219296aSGreg Roach */ 15979219296aSGreg Roach public function oldestMarriageFemaleAge(string $show_years = ''): string 15989219296aSGreg Roach { 1599f78da678SGreg Roach return $this->family_repository->oldestMarriageFemaleAge($show_years); 16009219296aSGreg Roach } 16019219296aSGreg Roach 16029219296aSGreg Roach /** 16030dcd9387SGreg Roach * @return string 16049219296aSGreg Roach */ 16059219296aSGreg Roach public function youngestMarriageMale(): string 16069219296aSGreg Roach { 1607f78da678SGreg Roach return $this->family_repository->youngestMarriageMale(); 16089219296aSGreg Roach } 16099219296aSGreg Roach 16109219296aSGreg Roach /** 16110dcd9387SGreg Roach * @return string 16129219296aSGreg Roach */ 16139219296aSGreg Roach public function youngestMarriageMaleName(): string 16149219296aSGreg Roach { 1615f78da678SGreg Roach return $this->family_repository->youngestMarriageMaleName(); 16169219296aSGreg Roach } 16179219296aSGreg Roach 16189219296aSGreg Roach /** 16190dcd9387SGreg Roach * @param string $show_years 16200dcd9387SGreg Roach * 16210dcd9387SGreg Roach * @return string 16229219296aSGreg Roach */ 16239219296aSGreg Roach public function youngestMarriageMaleAge(string $show_years = ''): string 16249219296aSGreg Roach { 1625f78da678SGreg Roach return $this->family_repository->youngestMarriageMaleAge($show_years); 16269219296aSGreg Roach } 16279219296aSGreg Roach 16289219296aSGreg Roach /** 16290dcd9387SGreg Roach * @return string 16309219296aSGreg Roach */ 16319219296aSGreg Roach public function oldestMarriageMale(): string 16329219296aSGreg Roach { 1633f78da678SGreg Roach return $this->family_repository->oldestMarriageMale(); 16349219296aSGreg Roach } 16359219296aSGreg Roach 16369219296aSGreg Roach /** 16370dcd9387SGreg Roach * @return string 16389219296aSGreg Roach */ 16399219296aSGreg Roach public function oldestMarriageMaleName(): string 16409219296aSGreg Roach { 1641f78da678SGreg Roach return $this->family_repository->oldestMarriageMaleName(); 16429219296aSGreg Roach } 16439219296aSGreg Roach 16449219296aSGreg Roach /** 16450dcd9387SGreg Roach * @param string $show_years 16460dcd9387SGreg Roach * 16470dcd9387SGreg Roach * @return string 16489219296aSGreg Roach */ 16499219296aSGreg Roach public function oldestMarriageMaleAge(string $show_years = ''): string 16509219296aSGreg Roach { 1651f78da678SGreg Roach return $this->family_repository->oldestMarriageMaleAge($show_years); 16529219296aSGreg Roach } 16539219296aSGreg Roach 16549219296aSGreg Roach /** 16550dcd9387SGreg Roach * @param string $sex 16560dcd9387SGreg Roach * @param int $year1 16570dcd9387SGreg Roach * @param int $year2 16580dcd9387SGreg Roach * 1659*d7c2f5ccSGreg Roach * @return array<object> 16609219296aSGreg Roach */ 1661afa8d404SGreg Roach public function statsMarrAgeQuery(string $sex, int $year1 = -1, int $year2 = -1): array 16629219296aSGreg Roach { 1663f78da678SGreg Roach return $this->family_repository->statsMarrAgeQuery($sex, $year1, $year2); 16649219296aSGreg Roach } 16659219296aSGreg Roach 16669219296aSGreg Roach /** 16670dcd9387SGreg Roach * @return string 16689219296aSGreg Roach */ 166988de55fdSRico Sonntag public function statsMarrAge(): string 16709219296aSGreg Roach { 1671f78da678SGreg Roach return $this->family_repository->statsMarrAge(); 16729219296aSGreg Roach } 16739219296aSGreg Roach 16749219296aSGreg Roach /** 16750dcd9387SGreg Roach * @param string $total 16760dcd9387SGreg Roach * 16770dcd9387SGreg Roach * @return string 16789219296aSGreg Roach */ 16799219296aSGreg Roach public function ageBetweenSpousesMF(string $total = '10'): string 16809219296aSGreg Roach { 1681f78da678SGreg Roach return $this->family_repository->ageBetweenSpousesMF((int) $total); 16829219296aSGreg Roach } 16839219296aSGreg Roach 16849219296aSGreg Roach /** 16850dcd9387SGreg Roach * @param string $total 16860dcd9387SGreg Roach * 16870dcd9387SGreg Roach * @return string 16889219296aSGreg Roach */ 16899219296aSGreg Roach public function ageBetweenSpousesMFList(string $total = '10'): string 16909219296aSGreg Roach { 1691f78da678SGreg Roach return $this->family_repository->ageBetweenSpousesMFList((int) $total); 16929219296aSGreg Roach } 16939219296aSGreg Roach 16949219296aSGreg Roach /** 16950dcd9387SGreg Roach * @param string $total 16960dcd9387SGreg Roach * 16970dcd9387SGreg Roach * @return string 16989219296aSGreg Roach */ 16999219296aSGreg Roach public function ageBetweenSpousesFM(string $total = '10'): string 17009219296aSGreg Roach { 1701f78da678SGreg Roach return $this->family_repository->ageBetweenSpousesFM((int) $total); 17029219296aSGreg Roach } 17039219296aSGreg Roach 17049219296aSGreg Roach /** 17050dcd9387SGreg Roach * @param string $total 17060dcd9387SGreg Roach * 17070dcd9387SGreg Roach * @return string 17089219296aSGreg Roach */ 17099219296aSGreg Roach public function ageBetweenSpousesFMList(string $total = '10'): string 17109219296aSGreg Roach { 1711f78da678SGreg Roach return $this->family_repository->ageBetweenSpousesFMList((int) $total); 17129219296aSGreg Roach } 17139219296aSGreg Roach 17149219296aSGreg Roach /** 17150dcd9387SGreg Roach * @return string 17169219296aSGreg Roach */ 17179219296aSGreg Roach public function topAgeOfMarriageFamily(): string 17189219296aSGreg Roach { 1719f78da678SGreg Roach return $this->family_repository->topAgeOfMarriageFamily(); 17209219296aSGreg Roach } 17219219296aSGreg Roach 17229219296aSGreg Roach /** 17230dcd9387SGreg Roach * @return string 17249219296aSGreg Roach */ 17259219296aSGreg Roach public function topAgeOfMarriage(): string 17269219296aSGreg Roach { 1727f78da678SGreg Roach return $this->family_repository->topAgeOfMarriage(); 17289219296aSGreg Roach } 17299219296aSGreg Roach 17309219296aSGreg Roach /** 17310dcd9387SGreg Roach * @param string $total 17320dcd9387SGreg Roach * 17330dcd9387SGreg Roach * @return string 17349219296aSGreg Roach */ 17359219296aSGreg Roach public function topAgeOfMarriageFamilies(string $total = '10'): string 17369219296aSGreg Roach { 1737f78da678SGreg Roach return $this->family_repository->topAgeOfMarriageFamilies((int) $total); 17389219296aSGreg Roach } 17399219296aSGreg Roach 17409219296aSGreg Roach /** 17410dcd9387SGreg Roach * @param string $total 17420dcd9387SGreg Roach * 17430dcd9387SGreg Roach * @return string 17449219296aSGreg Roach */ 17459219296aSGreg Roach public function topAgeOfMarriageFamiliesList(string $total = '10'): string 17469219296aSGreg Roach { 1747f78da678SGreg Roach return $this->family_repository->topAgeOfMarriageFamiliesList((int) $total); 17489219296aSGreg Roach } 17499219296aSGreg Roach 17509219296aSGreg Roach /** 17510dcd9387SGreg Roach * @return string 17529219296aSGreg Roach */ 17539219296aSGreg Roach public function minAgeOfMarriageFamily(): string 17549219296aSGreg Roach { 1755f78da678SGreg Roach return $this->family_repository->minAgeOfMarriageFamily(); 17569219296aSGreg Roach } 17579219296aSGreg Roach 17589219296aSGreg Roach /** 17590dcd9387SGreg Roach * @return string 17609219296aSGreg Roach */ 17619219296aSGreg Roach public function minAgeOfMarriage(): string 17629219296aSGreg Roach { 1763f78da678SGreg Roach return $this->family_repository->minAgeOfMarriage(); 17649219296aSGreg Roach } 17659219296aSGreg Roach 17669219296aSGreg Roach /** 17670dcd9387SGreg Roach * @param string $total 17680dcd9387SGreg Roach * 17690dcd9387SGreg Roach * @return string 17709219296aSGreg Roach */ 17719219296aSGreg Roach public function minAgeOfMarriageFamilies(string $total = '10'): string 17729219296aSGreg Roach { 1773f78da678SGreg Roach return $this->family_repository->minAgeOfMarriageFamilies((int) $total); 17749219296aSGreg Roach } 17759219296aSGreg Roach 17769219296aSGreg Roach /** 17770dcd9387SGreg Roach * @param string $total 17780dcd9387SGreg Roach * 17790dcd9387SGreg Roach * @return string 17809219296aSGreg Roach */ 17819219296aSGreg Roach public function minAgeOfMarriageFamiliesList(string $total = '10'): string 17829219296aSGreg Roach { 1783f78da678SGreg Roach return $this->family_repository->minAgeOfMarriageFamiliesList((int) $total); 17849219296aSGreg Roach } 17859219296aSGreg Roach 17869219296aSGreg Roach /** 17870dcd9387SGreg Roach * @return string 17889219296aSGreg Roach */ 17899219296aSGreg Roach public function youngestMother(): string 17909219296aSGreg Roach { 1791f78da678SGreg Roach return $this->family_repository->youngestMother(); 17929219296aSGreg Roach } 17939219296aSGreg Roach 17949219296aSGreg Roach /** 17950dcd9387SGreg Roach * @return string 17969219296aSGreg Roach */ 17979219296aSGreg Roach public function youngestMotherName(): string 17989219296aSGreg Roach { 1799f78da678SGreg Roach return $this->family_repository->youngestMotherName(); 18009219296aSGreg Roach } 18019219296aSGreg Roach 18029219296aSGreg Roach /** 18030dcd9387SGreg Roach * @param string $show_years 18040dcd9387SGreg Roach * 18050dcd9387SGreg Roach * @return string 18069219296aSGreg Roach */ 18079219296aSGreg Roach public function youngestMotherAge(string $show_years = ''): string 18089219296aSGreg Roach { 1809f78da678SGreg Roach return $this->family_repository->youngestMotherAge($show_years); 18109219296aSGreg Roach } 18119219296aSGreg Roach 18129219296aSGreg Roach /** 18130dcd9387SGreg Roach * @return string 18149219296aSGreg Roach */ 18159219296aSGreg Roach public function oldestMother(): string 18169219296aSGreg Roach { 1817f78da678SGreg Roach return $this->family_repository->oldestMother(); 18189219296aSGreg Roach } 18199219296aSGreg Roach 18209219296aSGreg Roach /** 18210dcd9387SGreg Roach * @return string 18229219296aSGreg Roach */ 18239219296aSGreg Roach public function oldestMotherName(): string 18249219296aSGreg Roach { 1825f78da678SGreg Roach return $this->family_repository->oldestMotherName(); 18269219296aSGreg Roach } 18279219296aSGreg Roach 18289219296aSGreg Roach /** 18290dcd9387SGreg Roach * @param string $show_years 18300dcd9387SGreg Roach * 18310dcd9387SGreg Roach * @return string 18329219296aSGreg Roach */ 18339219296aSGreg Roach public function oldestMotherAge(string $show_years = ''): string 18349219296aSGreg Roach { 1835f78da678SGreg Roach return $this->family_repository->oldestMotherAge($show_years); 18369219296aSGreg Roach } 18379219296aSGreg Roach 18389219296aSGreg Roach /** 18390dcd9387SGreg Roach * @return string 18409219296aSGreg Roach */ 18419219296aSGreg Roach public function youngestFather(): string 18429219296aSGreg Roach { 1843f78da678SGreg Roach return $this->family_repository->youngestFather(); 18449219296aSGreg Roach } 18459219296aSGreg Roach 18469219296aSGreg Roach /** 18470dcd9387SGreg Roach * @return string 18489219296aSGreg Roach */ 18499219296aSGreg Roach public function youngestFatherName(): string 18509219296aSGreg Roach { 1851f78da678SGreg Roach return $this->family_repository->youngestFatherName(); 18529219296aSGreg Roach } 18539219296aSGreg Roach 18549219296aSGreg Roach /** 18550dcd9387SGreg Roach * @param string $show_years 18560dcd9387SGreg Roach * 18570dcd9387SGreg Roach * @return string 18589219296aSGreg Roach */ 18599219296aSGreg Roach public function youngestFatherAge(string $show_years = ''): string 18609219296aSGreg Roach { 1861f78da678SGreg Roach return $this->family_repository->youngestFatherAge($show_years); 18629219296aSGreg Roach } 18639219296aSGreg Roach 18649219296aSGreg Roach /** 18650dcd9387SGreg Roach * @return string 18669219296aSGreg Roach */ 18679219296aSGreg Roach public function oldestFather(): string 18689219296aSGreg Roach { 1869f78da678SGreg Roach return $this->family_repository->oldestFather(); 18709219296aSGreg Roach } 18719219296aSGreg Roach 18729219296aSGreg Roach /** 18730dcd9387SGreg Roach * @return string 18749219296aSGreg Roach */ 18759219296aSGreg Roach public function oldestFatherName(): string 18769219296aSGreg Roach { 1877f78da678SGreg Roach return $this->family_repository->oldestFatherName(); 18789219296aSGreg Roach } 18799219296aSGreg Roach 18809219296aSGreg Roach /** 18810dcd9387SGreg Roach * @param string $show_years 18820dcd9387SGreg Roach * 18830dcd9387SGreg Roach * @return string 18849219296aSGreg Roach */ 18859219296aSGreg Roach public function oldestFatherAge(string $show_years = ''): string 18869219296aSGreg Roach { 1887f78da678SGreg Roach return $this->family_repository->oldestFatherAge($show_years); 18889219296aSGreg Roach } 18899219296aSGreg Roach 18909219296aSGreg Roach /** 18910dcd9387SGreg Roach * @return string 18929219296aSGreg Roach */ 18939219296aSGreg Roach public function totalMarriedMales(): string 18949219296aSGreg Roach { 1895f78da678SGreg Roach return $this->family_repository->totalMarriedMales(); 18969219296aSGreg Roach } 18979219296aSGreg Roach 18989219296aSGreg Roach /** 18990dcd9387SGreg Roach * @return string 19009219296aSGreg Roach */ 19019219296aSGreg Roach public function totalMarriedFemales(): string 19029219296aSGreg Roach { 1903f78da678SGreg Roach return $this->family_repository->totalMarriedFemales(); 19049219296aSGreg Roach } 19059219296aSGreg Roach 19069219296aSGreg Roach /** 19070dcd9387SGreg Roach * @param int $year1 19080dcd9387SGreg Roach * @param int $year2 19090dcd9387SGreg Roach * 19100dcd9387SGreg Roach * @return Builder 19119219296aSGreg Roach */ 1912999da590SGreg Roach public function monthFirstChildQuery(int $year1 = -1, int $year2 = -1): Builder 19139219296aSGreg Roach { 1914f78da678SGreg Roach return $this->family_repository->monthFirstChildQuery($year1, $year2); 1915999da590SGreg Roach } 1916999da590SGreg Roach 1917999da590SGreg Roach /** 19180dcd9387SGreg Roach * @param int $year1 19190dcd9387SGreg Roach * @param int $year2 19200dcd9387SGreg Roach * 19210dcd9387SGreg Roach * @return Builder 1922999da590SGreg Roach */ 1923999da590SGreg Roach public function monthFirstChildBySexQuery(int $year1 = -1, int $year2 = -1): Builder 1924999da590SGreg Roach { 1925f78da678SGreg Roach return $this->family_repository->monthFirstChildBySexQuery($year1, $year2); 19269219296aSGreg Roach } 19279219296aSGreg Roach 19289219296aSGreg Roach /** 19290dcd9387SGreg Roach * @return string 19309219296aSGreg Roach */ 19319219296aSGreg Roach public function largestFamily(): string 19329219296aSGreg Roach { 1933f78da678SGreg Roach return $this->family_repository->largestFamily(); 19349219296aSGreg Roach } 19359219296aSGreg Roach 19369219296aSGreg Roach /** 19370dcd9387SGreg Roach * @return string 19389219296aSGreg Roach */ 19399219296aSGreg Roach public function largestFamilySize(): string 19409219296aSGreg Roach { 1941f78da678SGreg Roach return $this->family_repository->largestFamilySize(); 19429219296aSGreg Roach } 19439219296aSGreg Roach 19449219296aSGreg Roach /** 19450dcd9387SGreg Roach * @return string 19469219296aSGreg Roach */ 19479219296aSGreg Roach public function largestFamilyName(): string 19489219296aSGreg Roach { 1949f78da678SGreg Roach return $this->family_repository->largestFamilyName(); 19509219296aSGreg Roach } 19519219296aSGreg Roach 19529219296aSGreg Roach /** 19530dcd9387SGreg Roach * @param string $total 19540dcd9387SGreg Roach * 19550dcd9387SGreg Roach * @return string 19569219296aSGreg Roach */ 19579219296aSGreg Roach public function topTenLargestFamily(string $total = '10'): string 19589219296aSGreg Roach { 1959f78da678SGreg Roach return $this->family_repository->topTenLargestFamily((int) $total); 19609219296aSGreg Roach } 19619219296aSGreg Roach 19629219296aSGreg Roach /** 19630dcd9387SGreg Roach * @param string $total 19640dcd9387SGreg Roach * 19650dcd9387SGreg Roach * @return string 19669219296aSGreg Roach */ 19679219296aSGreg Roach public function topTenLargestFamilyList(string $total = '10'): string 19689219296aSGreg Roach { 1969f78da678SGreg Roach return $this->family_repository->topTenLargestFamilyList((int) $total); 19709219296aSGreg Roach } 19719219296aSGreg Roach 19729219296aSGreg Roach /** 19730dcd9387SGreg Roach * @param string|null $color_from 19740dcd9387SGreg Roach * @param string|null $color_to 19750dcd9387SGreg Roach * @param string $total 19760dcd9387SGreg Roach * 19770dcd9387SGreg Roach * @return string 19789219296aSGreg Roach */ 19799219296aSGreg Roach public function chartLargestFamilies( 19802c6f1bd5SGreg Roach string|null $color_from = null, 19812c6f1bd5SGreg Roach string|null $color_to = null, 19829219296aSGreg Roach string $total = '10' 1983c81b7bf1SGreg Roach ): string { 1984f78da678SGreg Roach return $this->family_repository->chartLargestFamilies($color_from, $color_to, (int) $total); 19859219296aSGreg Roach } 19869219296aSGreg Roach 19879219296aSGreg Roach /** 19880dcd9387SGreg Roach * @return string 19899219296aSGreg Roach */ 19909219296aSGreg Roach public function totalChildren(): string 19919219296aSGreg Roach { 1992f78da678SGreg Roach return $this->family_repository->totalChildren(); 19939219296aSGreg Roach } 19949219296aSGreg Roach 19959219296aSGreg Roach /** 19960dcd9387SGreg Roach * @return string 19979219296aSGreg Roach */ 19989219296aSGreg Roach public function averageChildren(): string 19999219296aSGreg Roach { 2000f78da678SGreg Roach return $this->family_repository->averageChildren(); 20019219296aSGreg Roach } 20029219296aSGreg Roach 20039219296aSGreg Roach /** 20040dcd9387SGreg Roach * @param int $year1 20050dcd9387SGreg Roach * @param int $year2 20060dcd9387SGreg Roach * 2007*d7c2f5ccSGreg Roach * @return array<object> 20089219296aSGreg Roach */ 2009b1126ab4SGreg Roach public function statsChildrenQuery(int $year1 = -1, int $year2 = -1): array 20109219296aSGreg Roach { 2011f78da678SGreg Roach return $this->family_repository->statsChildrenQuery($year1, $year2); 20129219296aSGreg Roach } 20139219296aSGreg Roach 20149219296aSGreg Roach /** 20150dcd9387SGreg Roach * @return string 20169219296aSGreg Roach */ 2017cde1d378SGreg Roach public function statsChildren(): string 20189219296aSGreg Roach { 2019f78da678SGreg Roach return $this->family_repository->statsChildren(); 20209219296aSGreg Roach } 20219219296aSGreg Roach 20229219296aSGreg Roach /** 20230dcd9387SGreg Roach * @param string $total 20240dcd9387SGreg Roach * 20250dcd9387SGreg Roach * @return string 20269219296aSGreg Roach */ 20279219296aSGreg Roach public function topAgeBetweenSiblingsName(string $total = '10'): string 20289219296aSGreg Roach { 2029f78da678SGreg Roach return $this->family_repository->topAgeBetweenSiblingsName((int) $total); 20309219296aSGreg Roach } 20319219296aSGreg Roach 20329219296aSGreg Roach /** 20330dcd9387SGreg Roach * @param string $total 20340dcd9387SGreg Roach * 20350dcd9387SGreg Roach * @return string 20369219296aSGreg Roach */ 20379219296aSGreg Roach public function topAgeBetweenSiblings(string $total = '10'): string 20389219296aSGreg Roach { 2039f78da678SGreg Roach return $this->family_repository->topAgeBetweenSiblings((int) $total); 20409219296aSGreg Roach } 20419219296aSGreg Roach 20429219296aSGreg Roach /** 20430dcd9387SGreg Roach * @param string $total 20440dcd9387SGreg Roach * 20450dcd9387SGreg Roach * @return string 20469219296aSGreg Roach */ 20479219296aSGreg Roach public function topAgeBetweenSiblingsFullName(string $total = '10'): string 20489219296aSGreg Roach { 2049f78da678SGreg Roach return $this->family_repository->topAgeBetweenSiblingsFullName((int) $total); 20509219296aSGreg Roach } 20519219296aSGreg Roach 20529219296aSGreg Roach /** 20530dcd9387SGreg Roach * @param string $total 20540dcd9387SGreg Roach * @param string $one 20550dcd9387SGreg Roach * 20560dcd9387SGreg Roach * @return string 20579219296aSGreg Roach */ 20589219296aSGreg Roach public function topAgeBetweenSiblingsList(string $total = '10', string $one = ''): string 20599219296aSGreg Roach { 2060f78da678SGreg Roach return $this->family_repository->topAgeBetweenSiblingsList((int) $total, $one); 20619219296aSGreg Roach } 20629219296aSGreg Roach 20639219296aSGreg Roach /** 20640dcd9387SGreg Roach * @return string 20659219296aSGreg Roach */ 20669219296aSGreg Roach public function noChildrenFamilies(): string 20679219296aSGreg Roach { 2068f78da678SGreg Roach return $this->family_repository->noChildrenFamilies(); 20699219296aSGreg Roach } 20709219296aSGreg Roach 20719219296aSGreg Roach /** 20720dcd9387SGreg Roach * @param string $type 20730dcd9387SGreg Roach * 20740dcd9387SGreg Roach * @return string 20759219296aSGreg Roach */ 20769219296aSGreg Roach public function noChildrenFamiliesList(string $type = 'list'): string 20779219296aSGreg Roach { 2078f78da678SGreg Roach return $this->family_repository->noChildrenFamiliesList($type); 20799219296aSGreg Roach } 20809219296aSGreg Roach 20819219296aSGreg Roach /** 20820dcd9387SGreg Roach * @param string $year1 20830dcd9387SGreg Roach * @param string $year2 20840dcd9387SGreg Roach * 20850dcd9387SGreg Roach * @return string 20869219296aSGreg Roach */ 20879219296aSGreg Roach public function chartNoChildrenFamilies( 20889219296aSGreg Roach string $year1 = '-1', 20899219296aSGreg Roach string $year2 = '-1' 2090c81b7bf1SGreg Roach ): string { 2091f78da678SGreg Roach return $this->family_repository->chartNoChildrenFamilies((int) $year1, (int) $year2); 20929219296aSGreg Roach } 20939219296aSGreg Roach 20949219296aSGreg Roach /** 20950dcd9387SGreg Roach * @param string $total 20960dcd9387SGreg Roach * 20970dcd9387SGreg Roach * @return string 20989219296aSGreg Roach */ 20999219296aSGreg Roach public function topTenLargestGrandFamily(string $total = '10'): string 21009219296aSGreg Roach { 2101f78da678SGreg Roach return $this->family_repository->topTenLargestGrandFamily((int) $total); 21029219296aSGreg Roach } 21039219296aSGreg Roach 21049219296aSGreg Roach /** 21050dcd9387SGreg Roach * @param string $total 21060dcd9387SGreg Roach * 21070dcd9387SGreg Roach * @return string 21089219296aSGreg Roach */ 21099219296aSGreg Roach public function topTenLargestGrandFamilyList(string $total = '10'): string 21109219296aSGreg Roach { 2111f78da678SGreg Roach return $this->family_repository->topTenLargestGrandFamilyList((int) $total); 21129219296aSGreg Roach } 21139219296aSGreg Roach 21149219296aSGreg Roach /** 21150dcd9387SGreg Roach * @return string 21169219296aSGreg Roach */ 21179219296aSGreg Roach public function getCommonSurname(): string 21189219296aSGreg Roach { 2119f78da678SGreg Roach return $this->individual_repository->getCommonSurname(); 21209219296aSGreg Roach } 21219219296aSGreg Roach 21229219296aSGreg Roach /** 21230dcd9387SGreg Roach * @param string $threshold 21240dcd9387SGreg Roach * @param string $number_of_surnames 21250dcd9387SGreg Roach * @param string $sorting 21260dcd9387SGreg Roach * 21270dcd9387SGreg Roach * @return string 21289219296aSGreg Roach */ 21299219296aSGreg Roach public function commonSurnames( 21309219296aSGreg Roach string $threshold = '1', 21319219296aSGreg Roach string $number_of_surnames = '10', 21329219296aSGreg Roach string $sorting = 'alpha' 2133c81b7bf1SGreg Roach ): string { 2134f78da678SGreg Roach return $this->individual_repository->commonSurnames((int) $threshold, (int) $number_of_surnames, $sorting); 21359219296aSGreg Roach } 21369219296aSGreg Roach 21379219296aSGreg Roach /** 21380dcd9387SGreg Roach * @param string $threshold 21390dcd9387SGreg Roach * @param string $number_of_surnames 21400dcd9387SGreg Roach * @param string $sorting 21410dcd9387SGreg Roach * 21420dcd9387SGreg Roach * @return string 21439219296aSGreg Roach */ 21449219296aSGreg Roach public function commonSurnamesTotals( 21459219296aSGreg Roach string $threshold = '1', 21469219296aSGreg Roach string $number_of_surnames = '10', 21472da2e0a6SGreg Roach string $sorting = 'count' 2148c81b7bf1SGreg Roach ): string { 2149f78da678SGreg Roach return $this->individual_repository->commonSurnamesTotals((int) $threshold, (int) $number_of_surnames, $sorting); 21509219296aSGreg Roach } 21519219296aSGreg Roach 21529219296aSGreg Roach /** 21530dcd9387SGreg Roach * @param string $threshold 21540dcd9387SGreg Roach * @param string $number_of_surnames 21550dcd9387SGreg Roach * @param string $sorting 21560dcd9387SGreg Roach * 21570dcd9387SGreg Roach * @return string 21589219296aSGreg Roach */ 21599219296aSGreg Roach public function commonSurnamesList( 21609219296aSGreg Roach string $threshold = '1', 21619219296aSGreg Roach string $number_of_surnames = '10', 21629219296aSGreg Roach string $sorting = 'alpha' 2163c81b7bf1SGreg Roach ): string { 2164f78da678SGreg Roach return $this->individual_repository->commonSurnamesList((int) $threshold, (int) $number_of_surnames, $sorting); 21659219296aSGreg Roach } 21669219296aSGreg Roach 21679219296aSGreg Roach /** 21680dcd9387SGreg Roach * @param string $threshold 21690dcd9387SGreg Roach * @param string $number_of_surnames 21700dcd9387SGreg Roach * @param string $sorting 21710dcd9387SGreg Roach * 21720dcd9387SGreg Roach * @return string 21739219296aSGreg Roach */ 21749219296aSGreg Roach public function commonSurnamesListTotals( 21759219296aSGreg Roach string $threshold = '1', 21769219296aSGreg Roach string $number_of_surnames = '10', 21772da2e0a6SGreg Roach string $sorting = 'count' 2178c81b7bf1SGreg Roach ): string { 2179f78da678SGreg Roach return $this->individual_repository 21809219296aSGreg Roach ->commonSurnamesListTotals((int) $threshold, (int) $number_of_surnames, $sorting); 21819219296aSGreg Roach } 21829219296aSGreg Roach 21839219296aSGreg Roach /** 21840dcd9387SGreg Roach * @param string|null $color_from 21850dcd9387SGreg Roach * @param string|null $color_to 21860dcd9387SGreg Roach * @param string $number_of_surnames 21870dcd9387SGreg Roach * 21880dcd9387SGreg Roach * @return string 21899219296aSGreg Roach */ 21909219296aSGreg Roach public function chartCommonSurnames( 21912c6f1bd5SGreg Roach string|null $color_from = null, 21922c6f1bd5SGreg Roach string|null $color_to = null, 21939219296aSGreg Roach string $number_of_surnames = '10' 2194c81b7bf1SGreg Roach ): string { 2195f78da678SGreg Roach return $this->individual_repository 219688de55fdSRico Sonntag ->chartCommonSurnames($color_from, $color_to, (int) $number_of_surnames); 21979219296aSGreg Roach } 21989219296aSGreg Roach 21999219296aSGreg Roach /** 22000dcd9387SGreg Roach * @param string $threshold 22010dcd9387SGreg Roach * @param string $maxtoshow 22020dcd9387SGreg Roach * 22030dcd9387SGreg Roach * @return string 22049219296aSGreg Roach */ 22059219296aSGreg Roach public function commonGiven(string $threshold = '1', string $maxtoshow = '10'): string 22069219296aSGreg Roach { 2207f78da678SGreg Roach return $this->individual_repository->commonGiven((int) $threshold, (int) $maxtoshow); 22089219296aSGreg Roach } 22099219296aSGreg Roach 22109219296aSGreg Roach /** 22110dcd9387SGreg Roach * @param string $threshold 22120dcd9387SGreg Roach * @param string $maxtoshow 22130dcd9387SGreg Roach * 22140dcd9387SGreg Roach * @return string 22159219296aSGreg Roach */ 22169219296aSGreg Roach public function commonGivenTotals(string $threshold = '1', string $maxtoshow = '10'): string 22179219296aSGreg Roach { 2218f78da678SGreg Roach return $this->individual_repository->commonGivenTotals((int) $threshold, (int) $maxtoshow); 22199219296aSGreg Roach } 22209219296aSGreg Roach 22219219296aSGreg Roach /** 22220dcd9387SGreg Roach * @param string $threshold 22230dcd9387SGreg Roach * @param string $maxtoshow 22240dcd9387SGreg Roach * 22250dcd9387SGreg Roach * @return string 22269219296aSGreg Roach */ 22279219296aSGreg Roach public function commonGivenList(string $threshold = '1', string $maxtoshow = '10'): string 22289219296aSGreg Roach { 2229f78da678SGreg Roach return $this->individual_repository->commonGivenList((int) $threshold, (int) $maxtoshow); 22309219296aSGreg Roach } 22319219296aSGreg Roach 22329219296aSGreg Roach /** 22330dcd9387SGreg Roach * @param string $threshold 22340dcd9387SGreg Roach * @param string $maxtoshow 22350dcd9387SGreg Roach * 22360dcd9387SGreg Roach * @return string 22379219296aSGreg Roach */ 22389219296aSGreg Roach public function commonGivenListTotals(string $threshold = '1', string $maxtoshow = '10'): string 22399219296aSGreg Roach { 2240f78da678SGreg Roach return $this->individual_repository->commonGivenListTotals((int) $threshold, (int) $maxtoshow); 22419219296aSGreg Roach } 22429219296aSGreg Roach 22439219296aSGreg Roach /** 22440dcd9387SGreg Roach * @param string $threshold 22450dcd9387SGreg Roach * @param string $maxtoshow 22460dcd9387SGreg Roach * 22470dcd9387SGreg Roach * @return string 22489219296aSGreg Roach */ 22499219296aSGreg Roach public function commonGivenTable(string $threshold = '1', string $maxtoshow = '10'): string 22509219296aSGreg Roach { 2251f78da678SGreg Roach return $this->individual_repository->commonGivenTable((int) $threshold, (int) $maxtoshow); 22529219296aSGreg Roach } 22539219296aSGreg Roach 22549219296aSGreg Roach /** 22550dcd9387SGreg Roach * @param string $threshold 22560dcd9387SGreg Roach * @param string $maxtoshow 22570dcd9387SGreg Roach * 22580dcd9387SGreg Roach * @return string 22599219296aSGreg Roach */ 22609219296aSGreg Roach public function commonGivenFemale(string $threshold = '1', string $maxtoshow = '10'): string 22619219296aSGreg Roach { 2262f78da678SGreg Roach return $this->individual_repository->commonGivenFemale((int) $threshold, (int) $maxtoshow); 22639219296aSGreg Roach } 22649219296aSGreg Roach 22659219296aSGreg Roach /** 22660dcd9387SGreg Roach * @param string $threshold 22670dcd9387SGreg Roach * @param string $maxtoshow 22680dcd9387SGreg Roach * 22690dcd9387SGreg Roach * @return string 22709219296aSGreg Roach */ 22719219296aSGreg Roach public function commonGivenFemaleTotals(string $threshold = '1', string $maxtoshow = '10'): string 22729219296aSGreg Roach { 2273f78da678SGreg Roach return $this->individual_repository->commonGivenFemaleTotals((int) $threshold, (int) $maxtoshow); 22749219296aSGreg Roach } 22759219296aSGreg Roach 22769219296aSGreg Roach /** 22770dcd9387SGreg Roach * @param string $threshold 22780dcd9387SGreg Roach * @param string $maxtoshow 22790dcd9387SGreg Roach * 22800dcd9387SGreg Roach * @return string 22819219296aSGreg Roach */ 22829219296aSGreg Roach public function commonGivenFemaleList(string $threshold = '1', string $maxtoshow = '10'): string 22839219296aSGreg Roach { 2284f78da678SGreg Roach return $this->individual_repository->commonGivenFemaleList((int) $threshold, (int) $maxtoshow); 22859219296aSGreg Roach } 22869219296aSGreg Roach 22879219296aSGreg Roach /** 22880dcd9387SGreg Roach * @param string $threshold 22890dcd9387SGreg Roach * @param string $maxtoshow 22900dcd9387SGreg Roach * 22910dcd9387SGreg Roach * @return string 22929219296aSGreg Roach */ 22939219296aSGreg Roach public function commonGivenFemaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string 22949219296aSGreg Roach { 2295f78da678SGreg Roach return $this->individual_repository->commonGivenFemaleListTotals((int) $threshold, (int) $maxtoshow); 22969219296aSGreg Roach } 22979219296aSGreg Roach 22989219296aSGreg Roach /** 22990dcd9387SGreg Roach * @param string $threshold 23000dcd9387SGreg Roach * @param string $maxtoshow 23010dcd9387SGreg Roach * 23020dcd9387SGreg Roach * @return string 23039219296aSGreg Roach */ 23049219296aSGreg Roach public function commonGivenFemaleTable(string $threshold = '1', string $maxtoshow = '10'): string 23059219296aSGreg Roach { 2306f78da678SGreg Roach return $this->individual_repository->commonGivenFemaleTable((int) $threshold, (int) $maxtoshow); 23079219296aSGreg Roach } 23089219296aSGreg Roach 23099219296aSGreg Roach /** 23100dcd9387SGreg Roach * @param string $threshold 23110dcd9387SGreg Roach * @param string $maxtoshow 23120dcd9387SGreg Roach * 23130dcd9387SGreg Roach * @return string 23149219296aSGreg Roach */ 23159219296aSGreg Roach public function commonGivenMale(string $threshold = '1', string $maxtoshow = '10'): string 23169219296aSGreg Roach { 2317f78da678SGreg Roach return $this->individual_repository->commonGivenMale((int) $threshold, (int) $maxtoshow); 23189219296aSGreg Roach } 23199219296aSGreg Roach 23209219296aSGreg Roach /** 23210dcd9387SGreg Roach * @param string $threshold 23220dcd9387SGreg Roach * @param string $maxtoshow 23230dcd9387SGreg Roach * 23240dcd9387SGreg Roach * @return string 23259219296aSGreg Roach */ 23269219296aSGreg Roach public function commonGivenMaleTotals(string $threshold = '1', string $maxtoshow = '10'): string 23279219296aSGreg Roach { 2328f78da678SGreg Roach return $this->individual_repository->commonGivenMaleTotals((int) $threshold, (int) $maxtoshow); 23299219296aSGreg Roach } 23309219296aSGreg Roach 23319219296aSGreg Roach /** 23320dcd9387SGreg Roach * @param string $threshold 23330dcd9387SGreg Roach * @param string $maxtoshow 23340dcd9387SGreg Roach * 23350dcd9387SGreg Roach * @return string 23369219296aSGreg Roach */ 23379219296aSGreg Roach public function commonGivenMaleList(string $threshold = '1', string $maxtoshow = '10'): string 23389219296aSGreg Roach { 2339f78da678SGreg Roach return $this->individual_repository->commonGivenMaleList((int) $threshold, (int) $maxtoshow); 23409219296aSGreg Roach } 23419219296aSGreg Roach 23429219296aSGreg Roach /** 23430dcd9387SGreg Roach * @param string $threshold 23440dcd9387SGreg Roach * @param string $maxtoshow 23450dcd9387SGreg Roach * 23460dcd9387SGreg Roach * @return string 23479219296aSGreg Roach */ 23489219296aSGreg Roach public function commonGivenMaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string 23499219296aSGreg Roach { 2350f78da678SGreg Roach return $this->individual_repository->commonGivenMaleListTotals((int) $threshold, (int) $maxtoshow); 23519219296aSGreg Roach } 23529219296aSGreg Roach 23539219296aSGreg Roach /** 23540dcd9387SGreg Roach * @param string $threshold 23550dcd9387SGreg Roach * @param string $maxtoshow 23560dcd9387SGreg Roach * 23570dcd9387SGreg Roach * @return string 23589219296aSGreg Roach */ 23599219296aSGreg Roach public function commonGivenMaleTable(string $threshold = '1', string $maxtoshow = '10'): string 23609219296aSGreg Roach { 2361f78da678SGreg Roach return $this->individual_repository->commonGivenMaleTable((int) $threshold, (int) $maxtoshow); 23629219296aSGreg Roach } 23639219296aSGreg Roach 23649219296aSGreg Roach /** 23650dcd9387SGreg Roach * @param string $threshold 23660dcd9387SGreg Roach * @param string $maxtoshow 23670dcd9387SGreg Roach * 23680dcd9387SGreg Roach * @return string 23699219296aSGreg Roach */ 23709219296aSGreg Roach public function commonGivenUnknown(string $threshold = '1', string $maxtoshow = '10'): string 23719219296aSGreg Roach { 2372f78da678SGreg Roach return $this->individual_repository->commonGivenUnknown((int) $threshold, (int) $maxtoshow); 23739219296aSGreg Roach } 23749219296aSGreg Roach 23759219296aSGreg Roach /** 23760dcd9387SGreg Roach * @param string $threshold 23770dcd9387SGreg Roach * @param string $maxtoshow 23780dcd9387SGreg Roach * 23790dcd9387SGreg Roach * @return string 23809219296aSGreg Roach */ 23819219296aSGreg Roach public function commonGivenUnknownTotals(string $threshold = '1', string $maxtoshow = '10'): string 23829219296aSGreg Roach { 2383f78da678SGreg Roach return $this->individual_repository->commonGivenUnknownTotals((int) $threshold, (int) $maxtoshow); 23849219296aSGreg Roach } 23859219296aSGreg Roach 23869219296aSGreg Roach /** 23870dcd9387SGreg Roach * @param string $threshold 23880dcd9387SGreg Roach * @param string $maxtoshow 23890dcd9387SGreg Roach * 23900dcd9387SGreg Roach * @return string 23919219296aSGreg Roach */ 23929219296aSGreg Roach public function commonGivenUnknownList(string $threshold = '1', string $maxtoshow = '10'): string 23939219296aSGreg Roach { 2394f78da678SGreg Roach return $this->individual_repository->commonGivenUnknownList((int) $threshold, (int) $maxtoshow); 23959219296aSGreg Roach } 23969219296aSGreg Roach 23979219296aSGreg Roach /** 23980dcd9387SGreg Roach * @param string $threshold 23990dcd9387SGreg Roach * @param string $maxtoshow 24000dcd9387SGreg Roach * 24010dcd9387SGreg Roach * @return string 24029219296aSGreg Roach */ 24039219296aSGreg Roach public function commonGivenUnknownListTotals(string $threshold = '1', string $maxtoshow = '10'): string 24049219296aSGreg Roach { 2405f78da678SGreg Roach return $this->individual_repository->commonGivenUnknownListTotals((int) $threshold, (int) $maxtoshow); 24069219296aSGreg Roach } 24079219296aSGreg Roach 24089219296aSGreg Roach /** 24090dcd9387SGreg Roach * @param string $threshold 24100dcd9387SGreg Roach * @param string $maxtoshow 24110dcd9387SGreg Roach * 24120dcd9387SGreg Roach * @return string 24139219296aSGreg Roach */ 24149219296aSGreg Roach public function commonGivenUnknownTable(string $threshold = '1', string $maxtoshow = '10'): string 24159219296aSGreg Roach { 2416f78da678SGreg Roach return $this->individual_repository->commonGivenUnknownTable((int) $threshold, (int) $maxtoshow); 24179219296aSGreg Roach } 24189219296aSGreg Roach 24199219296aSGreg Roach /** 24200dcd9387SGreg Roach * @param string|null $color_from 24210dcd9387SGreg Roach * @param string|null $color_to 24220dcd9387SGreg Roach * @param string $maxtoshow 24230dcd9387SGreg Roach * 24240dcd9387SGreg Roach * @return string 24259219296aSGreg Roach */ 24269219296aSGreg Roach public function chartCommonGiven( 24272c6f1bd5SGreg Roach string|null $color_from = null, 24282c6f1bd5SGreg Roach string|null $color_to = null, 24299219296aSGreg Roach string $maxtoshow = '7' 2430c81b7bf1SGreg Roach ): string { 2431f78da678SGreg Roach return $this->individual_repository->chartCommonGiven($color_from, $color_to, (int) $maxtoshow); 24329219296aSGreg Roach } 24339219296aSGreg Roach 24349219296aSGreg Roach /** 24350dcd9387SGreg Roach * @return string 24369219296aSGreg Roach */ 24379219296aSGreg Roach public function usersLoggedIn(): string 24389219296aSGreg Roach { 2439f78da678SGreg Roach return $this->user_repository->usersLoggedIn(); 24409219296aSGreg Roach } 24419219296aSGreg Roach 24429219296aSGreg Roach /** 24430dcd9387SGreg Roach * @return string 24449219296aSGreg Roach */ 24459219296aSGreg Roach public function usersLoggedInList(): string 24469219296aSGreg Roach { 2447f78da678SGreg Roach return $this->user_repository->usersLoggedInList(); 24489219296aSGreg Roach } 24499219296aSGreg Roach 24509219296aSGreg Roach /** 24510dcd9387SGreg Roach * @return int 24529219296aSGreg Roach */ 24539219296aSGreg Roach public function usersLoggedInTotal(): int 24549219296aSGreg Roach { 2455f78da678SGreg Roach return $this->user_repository->usersLoggedInTotal(); 24569219296aSGreg Roach } 24579219296aSGreg Roach 24589219296aSGreg Roach /** 24590dcd9387SGreg Roach * @return int 24609219296aSGreg Roach */ 24619219296aSGreg Roach public function usersLoggedInTotalAnon(): int 24629219296aSGreg Roach { 2463f78da678SGreg Roach return $this->user_repository->usersLoggedInTotalAnon(); 24649219296aSGreg Roach } 24659219296aSGreg Roach 24669219296aSGreg Roach /** 24670dcd9387SGreg Roach * @return int 24689219296aSGreg Roach */ 24699219296aSGreg Roach public function usersLoggedInTotalVisible(): int 24709219296aSGreg Roach { 2471f78da678SGreg Roach return $this->user_repository->usersLoggedInTotalVisible(); 24729219296aSGreg Roach } 24739219296aSGreg Roach 24749219296aSGreg Roach /** 24750dcd9387SGreg Roach * @return string 24769219296aSGreg Roach */ 24779219296aSGreg Roach public function userId(): string 24789219296aSGreg Roach { 2479f78da678SGreg Roach return $this->user_repository->userId(); 24809219296aSGreg Roach } 24819219296aSGreg Roach 24829219296aSGreg Roach /** 24830dcd9387SGreg Roach * @param string $visitor_text 24840dcd9387SGreg Roach * 24850dcd9387SGreg Roach * @return string 24869219296aSGreg Roach */ 24879219296aSGreg Roach public function userName(string $visitor_text = ''): string 24889219296aSGreg Roach { 2489f78da678SGreg Roach return $this->user_repository->userName($visitor_text); 24909219296aSGreg Roach } 24919219296aSGreg Roach 24929219296aSGreg Roach /** 24930dcd9387SGreg Roach * @return string 24949219296aSGreg Roach */ 24959219296aSGreg Roach public function userFullName(): string 24969219296aSGreg Roach { 2497f78da678SGreg Roach return $this->user_repository->userFullName(); 24989219296aSGreg Roach } 24999219296aSGreg Roach 25009219296aSGreg Roach /** 25010dcd9387SGreg Roach * @return string 25029219296aSGreg Roach */ 25039219296aSGreg Roach public function totalUsers(): string 25049219296aSGreg Roach { 2505f78da678SGreg Roach return $this->user_repository->totalUsers(); 25069219296aSGreg Roach } 25079219296aSGreg Roach 25089219296aSGreg Roach /** 25090dcd9387SGreg Roach * @return string 25109219296aSGreg Roach */ 25119219296aSGreg Roach public function totalAdmins(): string 25129219296aSGreg Roach { 2513f78da678SGreg Roach return $this->user_repository->totalAdmins(); 25149219296aSGreg Roach } 25159219296aSGreg Roach 25169219296aSGreg Roach /** 25170dcd9387SGreg Roach * @return string 25189219296aSGreg Roach */ 25199219296aSGreg Roach public function totalNonAdmins(): string 25209219296aSGreg Roach { 2521f78da678SGreg Roach return $this->user_repository->totalNonAdmins(); 25229219296aSGreg Roach } 25239219296aSGreg Roach 25249219296aSGreg Roach /** 25250dcd9387SGreg Roach * @return string 25269219296aSGreg Roach */ 25279219296aSGreg Roach public function latestUserId(): string 25289219296aSGreg Roach { 2529f78da678SGreg Roach return $this->latest_user_repository->latestUserId(); 25309219296aSGreg Roach } 25319219296aSGreg Roach 25329219296aSGreg Roach /** 25330dcd9387SGreg Roach * @return string 25349219296aSGreg Roach */ 25359219296aSGreg Roach public function latestUserName(): string 25369219296aSGreg Roach { 2537f78da678SGreg Roach return $this->latest_user_repository->latestUserName(); 25389219296aSGreg Roach } 25399219296aSGreg Roach 25409219296aSGreg Roach /** 25410dcd9387SGreg Roach * @return string 25429219296aSGreg Roach */ 25439219296aSGreg Roach public function latestUserFullName(): string 25449219296aSGreg Roach { 2545f78da678SGreg Roach return $this->latest_user_repository->latestUserFullName(); 25469219296aSGreg Roach } 25479219296aSGreg Roach 25489219296aSGreg Roach /** 25490dcd9387SGreg Roach * @param string|null $format 25500dcd9387SGreg Roach * 25510dcd9387SGreg Roach * @return string 25529219296aSGreg Roach */ 25532c6f1bd5SGreg Roach public function latestUserRegDate(string|null $format = null): string 25549219296aSGreg Roach { 2555f78da678SGreg Roach return $this->latest_user_repository->latestUserRegDate($format); 25569219296aSGreg Roach } 25579219296aSGreg Roach 25589219296aSGreg Roach /** 25590dcd9387SGreg Roach * @param string|null $format 25600dcd9387SGreg Roach * 25610dcd9387SGreg Roach * @return string 25629219296aSGreg Roach */ 25632c6f1bd5SGreg Roach public function latestUserRegTime(string|null $format = null): string 25649219296aSGreg Roach { 2565f78da678SGreg Roach return $this->latest_user_repository->latestUserRegTime($format); 25669219296aSGreg Roach } 25679219296aSGreg Roach 25689219296aSGreg Roach /** 25690dcd9387SGreg Roach * @param string|null $yes 25700dcd9387SGreg Roach * @param string|null $no 25710dcd9387SGreg Roach * 25720dcd9387SGreg Roach * @return string 25739219296aSGreg Roach */ 25742c6f1bd5SGreg Roach public function latestUserLoggedin(string|null $yes = null, string|null $no = null): string 25759219296aSGreg Roach { 2576f78da678SGreg Roach return $this->latest_user_repository->latestUserLoggedin($yes, $no); 25779219296aSGreg Roach } 25789219296aSGreg Roach 25799219296aSGreg Roach /** 25800dcd9387SGreg Roach * @return string 25819219296aSGreg Roach */ 25829219296aSGreg Roach public function contactWebmaster(): string 25839219296aSGreg Roach { 2584f78da678SGreg Roach return $this->contact_repository->contactWebmaster(); 25859219296aSGreg Roach } 25869219296aSGreg Roach 25879219296aSGreg Roach /** 25880dcd9387SGreg Roach * @return string 25899219296aSGreg Roach */ 25909219296aSGreg Roach public function contactGedcom(): string 25919219296aSGreg Roach { 2592f78da678SGreg Roach return $this->contact_repository->contactGedcom(); 25939219296aSGreg Roach } 25949219296aSGreg Roach 25959219296aSGreg Roach /** 25960dcd9387SGreg Roach * @return string 25979219296aSGreg Roach */ 25989219296aSGreg Roach public function serverDate(): string 25999219296aSGreg Roach { 2600f78da678SGreg Roach return $this->server_repository->serverDate(); 26019219296aSGreg Roach } 26029219296aSGreg Roach 26039219296aSGreg Roach /** 26040dcd9387SGreg Roach * @return string 26059219296aSGreg Roach */ 26069219296aSGreg Roach public function serverTime(): string 26079219296aSGreg Roach { 2608f78da678SGreg Roach return $this->server_repository->serverTime(); 26099219296aSGreg Roach } 26109219296aSGreg Roach 26119219296aSGreg Roach /** 26120dcd9387SGreg Roach * @return string 26139219296aSGreg Roach */ 26149219296aSGreg Roach public function serverTime24(): string 26159219296aSGreg Roach { 2616f78da678SGreg Roach return $this->server_repository->serverTime24(); 26179219296aSGreg Roach } 26189219296aSGreg Roach 26199219296aSGreg Roach /** 26209219296aSGreg Roach * What is the timezone of the server. 26219219296aSGreg Roach * 26229219296aSGreg Roach * @return string 26239219296aSGreg Roach */ 26249219296aSGreg Roach public function serverTimezone(): string 26259219296aSGreg Roach { 2626f78da678SGreg Roach return $this->server_repository->serverTimezone(); 26279219296aSGreg Roach } 26289219296aSGreg Roach 26299219296aSGreg Roach /** 26300dcd9387SGreg Roach * @return string 26319219296aSGreg Roach */ 26329219296aSGreg Roach public function browserDate(): string 26339219296aSGreg Roach { 2634f78da678SGreg Roach return $this->browser_repository->browserDate(); 26359219296aSGreg Roach } 26369219296aSGreg Roach 26379219296aSGreg Roach /** 26380dcd9387SGreg Roach * @return string 26399219296aSGreg Roach */ 26409219296aSGreg Roach public function browserTime(): string 26419219296aSGreg Roach { 2642f78da678SGreg Roach return $this->browser_repository->browserTime(); 26439219296aSGreg Roach } 26449219296aSGreg Roach 26459219296aSGreg Roach /** 26460dcd9387SGreg Roach * @return string 26479219296aSGreg Roach */ 26489219296aSGreg Roach public function browserTimezone(): string 26499219296aSGreg Roach { 2650f78da678SGreg Roach return $this->browser_repository->browserTimezone(); 26519219296aSGreg Roach } 26529219296aSGreg Roach 26539219296aSGreg Roach /** 26540dcd9387SGreg Roach * @param string $page_parameter 26550dcd9387SGreg Roach * 26560dcd9387SGreg Roach * @return string 26579219296aSGreg Roach */ 26589219296aSGreg Roach public function hitCount(string $page_parameter = ''): string 26599219296aSGreg Roach { 2660f78da678SGreg Roach return $this->hit_count_repository->hitCount($page_parameter); 26619219296aSGreg Roach } 26629219296aSGreg Roach 26639219296aSGreg Roach /** 26640dcd9387SGreg Roach * @param string $page_parameter 26650dcd9387SGreg Roach * 26660dcd9387SGreg Roach * @return string 26679219296aSGreg Roach */ 26689219296aSGreg Roach public function hitCountUser(string $page_parameter = ''): string 26699219296aSGreg Roach { 2670f78da678SGreg Roach return $this->hit_count_repository->hitCountUser($page_parameter); 26719219296aSGreg Roach } 26729219296aSGreg Roach 26739219296aSGreg Roach /** 26740dcd9387SGreg Roach * @param string $page_parameter 26750dcd9387SGreg Roach * 26760dcd9387SGreg Roach * @return string 26779219296aSGreg Roach */ 26789219296aSGreg Roach public function hitCountIndi(string $page_parameter = ''): string 26799219296aSGreg Roach { 2680f78da678SGreg Roach return $this->hit_count_repository->hitCountIndi($page_parameter); 26819219296aSGreg Roach } 26829219296aSGreg Roach 26839219296aSGreg Roach /** 26840dcd9387SGreg Roach * @param string $page_parameter 26850dcd9387SGreg Roach * 26860dcd9387SGreg Roach * @return string 26879219296aSGreg Roach */ 26889219296aSGreg Roach public function hitCountFam(string $page_parameter = ''): string 26899219296aSGreg Roach { 2690f78da678SGreg Roach return $this->hit_count_repository->hitCountFam($page_parameter); 26919219296aSGreg Roach } 26929219296aSGreg Roach 26939219296aSGreg Roach /** 26940dcd9387SGreg Roach * @param string $page_parameter 26950dcd9387SGreg Roach * 26960dcd9387SGreg Roach * @return string 26979219296aSGreg Roach */ 26989219296aSGreg Roach public function hitCountSour(string $page_parameter = ''): string 26999219296aSGreg Roach { 2700f78da678SGreg Roach return $this->hit_count_repository->hitCountSour($page_parameter); 27019219296aSGreg Roach } 27029219296aSGreg Roach 27039219296aSGreg Roach /** 27040dcd9387SGreg Roach * @param string $page_parameter 27050dcd9387SGreg Roach * 27060dcd9387SGreg Roach * @return string 27079219296aSGreg Roach */ 27089219296aSGreg Roach public function hitCountRepo(string $page_parameter = ''): string 27099219296aSGreg Roach { 2710f78da678SGreg Roach return $this->hit_count_repository->hitCountRepo($page_parameter); 27119219296aSGreg Roach } 27129219296aSGreg Roach 27139219296aSGreg Roach /** 27140dcd9387SGreg Roach * @param string $page_parameter 27150dcd9387SGreg Roach * 27160dcd9387SGreg Roach * @return string 27179219296aSGreg Roach */ 27189219296aSGreg Roach public function hitCountNote(string $page_parameter = ''): string 27199219296aSGreg Roach { 2720f78da678SGreg Roach return $this->hit_count_repository->hitCountNote($page_parameter); 27219219296aSGreg Roach } 27229219296aSGreg Roach 27239219296aSGreg Roach /** 27240dcd9387SGreg Roach * @param string $page_parameter 27250dcd9387SGreg Roach * 27260dcd9387SGreg Roach * @return string 27279219296aSGreg Roach */ 27289219296aSGreg Roach public function hitCountObje(string $page_parameter = ''): string 27299219296aSGreg Roach { 2730f78da678SGreg Roach return $this->hit_count_repository->hitCountObje($page_parameter); 27319219296aSGreg Roach } 27329219296aSGreg Roach 27339219296aSGreg Roach /** 27340dcd9387SGreg Roach * @return string 27359219296aSGreg Roach */ 27369219296aSGreg Roach public function gedcomFavorites(): string 27379219296aSGreg Roach { 2738f78da678SGreg Roach return $this->favorites_repository->gedcomFavorites(); 27399219296aSGreg Roach } 27409219296aSGreg Roach 27419219296aSGreg Roach /** 27420dcd9387SGreg Roach * @return string 27439219296aSGreg Roach */ 27449219296aSGreg Roach public function userFavorites(): string 27459219296aSGreg Roach { 2746f78da678SGreg Roach return $this->favorites_repository->userFavorites(); 27479219296aSGreg Roach } 27489219296aSGreg Roach 27499219296aSGreg Roach /** 27500dcd9387SGreg Roach * @return string 27519219296aSGreg Roach */ 27529219296aSGreg Roach public function totalGedcomFavorites(): string 27539219296aSGreg Roach { 2754f78da678SGreg Roach return $this->favorites_repository->totalGedcomFavorites(); 27559219296aSGreg Roach } 27569219296aSGreg Roach 27579219296aSGreg Roach /** 27580dcd9387SGreg Roach * @return string 27599219296aSGreg Roach */ 27609219296aSGreg Roach public function totalUserFavorites(): string 27619219296aSGreg Roach { 2762f78da678SGreg Roach return $this->favorites_repository->totalUserFavorites(); 27639219296aSGreg Roach } 27649219296aSGreg Roach 27659219296aSGreg Roach /** 27660dcd9387SGreg Roach * @return string 27679219296aSGreg Roach */ 27689219296aSGreg Roach public function totalUserMessages(): string 27699219296aSGreg Roach { 2770f78da678SGreg Roach return $this->message_repository->totalUserMessages(); 27719219296aSGreg Roach } 27729219296aSGreg Roach 27739219296aSGreg Roach /** 27740dcd9387SGreg Roach * @return string 27759219296aSGreg Roach */ 27769219296aSGreg Roach public function totalUserJournal(): string 27779219296aSGreg Roach { 2778f78da678SGreg Roach return $this->news_repository->totalUserJournal(); 27799219296aSGreg Roach } 27809219296aSGreg Roach 27819219296aSGreg Roach /** 27820dcd9387SGreg Roach * @return string 27839219296aSGreg Roach */ 27849219296aSGreg Roach public function totalGedcomNews(): string 27859219296aSGreg Roach { 2786f78da678SGreg Roach return $this->news_repository->totalGedcomNews(); 27879219296aSGreg Roach } 27889219296aSGreg Roach 27899219296aSGreg Roach /** 27909219296aSGreg Roach * Create any of the other blocks. 27919219296aSGreg Roach * Use as #callBlock:block_name# 27929219296aSGreg Roach * 27939219296aSGreg Roach * @param string $block 27949219296aSGreg Roach * @param string ...$params 27959219296aSGreg Roach * 2796e364afe4SGreg Roach * @return string|null 27979219296aSGreg Roach */ 27981ff45046SGreg Roach public function callBlock(string $block = '', ...$params): string|null 27999219296aSGreg Roach { 280087cca37cSGreg Roach /** @var ModuleBlockInterface|null $module */ 2801fd9aba47SGreg Roach $module = $this->module_service 280287cca37cSGreg Roach ->findByComponent(ModuleBlockInterface::class, $this->tree, Auth::user()) 2803f25fc0f9SGreg Roach ->first(static fn (ModuleInterface $module): bool => $module->name() === $block && $module->name() !== 'html'); 28049219296aSGreg Roach 28059219296aSGreg Roach if ($module === null) { 28069219296aSGreg Roach return ''; 28079219296aSGreg Roach } 28089219296aSGreg Roach 28099219296aSGreg Roach // Build the config array 28109219296aSGreg Roach $cfg = []; 28119219296aSGreg Roach foreach ($params as $config) { 28129219296aSGreg Roach $bits = explode('=', $config); 28139219296aSGreg Roach 28146ccdf4f0SGreg Roach if (count($bits) < 2) { 28159219296aSGreg Roach continue; 28169219296aSGreg Roach } 28179219296aSGreg Roach 28189219296aSGreg Roach $v = array_shift($bits); 28199219296aSGreg Roach $cfg[$v] = implode('=', $bits); 28209219296aSGreg Roach } 28219219296aSGreg Roach 28223caaa4d2SGreg Roach return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED, $cfg); 28239219296aSGreg Roach } 28249219296aSGreg Roach 28259219296aSGreg Roach /** 28269219296aSGreg Roach * What is the current version of webtrees. 28279219296aSGreg Roach * 28289219296aSGreg Roach * @return string 28299219296aSGreg Roach */ 28309219296aSGreg Roach public function webtreesVersion(): string 28319219296aSGreg Roach { 28329219296aSGreg Roach return Webtrees::VERSION; 28339219296aSGreg Roach } 283471378461SGreg Roach 283571378461SGreg Roach /** 283671378461SGreg Roach * Get tags and their parsed results. 283771378461SGreg Roach * 283871378461SGreg Roach * @param string $text 283971378461SGreg Roach * 284024f2a3afSGreg Roach * @return array<string> 284171378461SGreg Roach */ 284271378461SGreg Roach private function getTags(string $text): array 284371378461SGreg Roach { 284471378461SGreg Roach $tags = []; 284571378461SGreg Roach $matches = []; 284671378461SGreg Roach 2847b25599e6SGreg Roach preg_match_all('/#([^#\n]+)(?=#)/', $text, $matches, PREG_SET_ORDER); 284871378461SGreg Roach 284971378461SGreg Roach foreach ($matches as $match) { 285071378461SGreg Roach $params = explode(':', $match[1]); 285171378461SGreg Roach $method = array_shift($params); 285271378461SGreg Roach 285371378461SGreg Roach if (method_exists($this, $method)) { 285476d39c55SGreg Roach $tags[$match[0] . '#'] = $this->$method(...$params); 285571378461SGreg Roach } 285671378461SGreg Roach } 285771378461SGreg Roach 285871378461SGreg Roach return $tags; 285971378461SGreg Roach } 28609219296aSGreg Roach} 2861