xref: /webtrees/app/Statistics.php (revision d7c2f5cc56f17801156c069987440ca1da2c5057)
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