xref: /webtrees/app/Statistics.php (revision c9a927ce2ba83d295dcf2ac97cc3cbbf3a98a284)
19219296aSGreg Roach<?php
23976b470SGreg Roach
39219296aSGreg Roach/**
49219296aSGreg Roach * webtrees: online genealogy
50dcd9387SGreg Roach * Copyright (C) 2020 webtrees development team
69219296aSGreg Roach * This program is free software: you can redistribute it and/or modify
79219296aSGreg Roach * it under the terms of the GNU General Public License as published by
89219296aSGreg Roach * the Free Software Foundation, either version 3 of the License, or
99219296aSGreg Roach * (at your option) any later version.
109219296aSGreg Roach * This program is distributed in the hope that it will be useful,
119219296aSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
129219296aSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
139219296aSGreg Roach * GNU General Public License for more details.
149219296aSGreg Roach * You should have received a copy of the GNU General Public License
159219296aSGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
169219296aSGreg Roach */
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;
57e6f3d5e2SGreg Roachuse Illuminate\Database\Query\Builder;
58f021177cSGreg Roachuse Illuminate\Support\Collection;
59f021177cSGreg Roachuse ReflectionClass;
60f021177cSGreg Roachuse ReflectionException;
619219296aSGreg Roachuse ReflectionMethod;
62f021177cSGreg Roachuse ReflectionType;
639219296aSGreg Roach
64b19e047dSGreg Roachuse function call_user_func;
6571378461SGreg Roachuse function count;
6671378461SGreg Roachuse function in_array;
6771378461SGreg Roach
689219296aSGreg Roach/**
699219296aSGreg Roach * A selection of pre-formatted statistical queries.
709219296aSGreg Roach * These are primarily used for embedded keywords on HTML blocks, but
719219296aSGreg Roach * are also used elsewhere in the code.
729219296aSGreg Roach */
739219296aSGreg Roachclass Statistics implements
749219296aSGreg Roach    GedcomRepositoryInterface,
759219296aSGreg Roach    IndividualRepositoryInterface,
769219296aSGreg Roach    EventRepositoryInterface,
779219296aSGreg Roach    MediaRepositoryInterface,
789219296aSGreg Roach    UserRepositoryInterface,
799219296aSGreg Roach    ServerRepositoryInterface,
809219296aSGreg Roach    BrowserRepositoryInterface,
819219296aSGreg Roach    HitCountRepositoryInterface,
829219296aSGreg Roach    LatestUserRepositoryInterface,
839219296aSGreg Roach    FavoritesRepositoryInterface,
849219296aSGreg Roach    NewsRepositoryInterface,
859219296aSGreg Roach    MessageRepositoryInterface,
869219296aSGreg Roach    ContactRepositoryInterface,
879219296aSGreg Roach    FamilyDatesRepositoryInterface,
889219296aSGreg Roach    PlaceRepositoryInterface
899219296aSGreg Roach{
909219296aSGreg Roach    /**
9171378461SGreg Roach     * Generate statistics for a specified tree.
9271378461SGreg Roach     *
9371378461SGreg Roach     * @var Tree
9471378461SGreg Roach     */
9571378461SGreg Roach    private $tree;
969219296aSGreg Roach    /**
979219296aSGreg Roach     * @var GedcomRepository
989219296aSGreg Roach     */
999219296aSGreg Roach    private $gedcomRepository;
1009219296aSGreg Roach
1019219296aSGreg Roach    /**
1029219296aSGreg Roach     * @var IndividualRepository
1039219296aSGreg Roach     */
1049219296aSGreg Roach    private $individualRepository;
1059219296aSGreg Roach
1069219296aSGreg Roach    /**
1079219296aSGreg Roach     * @var FamilyRepository
1089219296aSGreg Roach     */
1099219296aSGreg Roach    private $familyRepository;
1109219296aSGreg Roach
1119219296aSGreg Roach    /**
1129219296aSGreg Roach     * @var MediaRepository
1139219296aSGreg Roach     */
1149219296aSGreg Roach    private $mediaRepository;
1159219296aSGreg Roach
1169219296aSGreg Roach    /**
1179219296aSGreg Roach     * @var EventRepository
1189219296aSGreg Roach     */
1199219296aSGreg Roach    private $eventRepository;
1209219296aSGreg Roach
1219219296aSGreg Roach    /**
1229219296aSGreg Roach     * @var UserRepository
1239219296aSGreg Roach     */
1249219296aSGreg Roach    private $userRepository;
1259219296aSGreg Roach
1269219296aSGreg Roach    /**
1279219296aSGreg Roach     * @var ServerRepository
1289219296aSGreg Roach     */
1299219296aSGreg Roach    private $serverRepository;
1309219296aSGreg Roach
1319219296aSGreg Roach    /**
1329219296aSGreg Roach     * @var BrowserRepository
1339219296aSGreg Roach     */
1349219296aSGreg Roach    private $browserRepository;
1359219296aSGreg Roach
1369219296aSGreg Roach    /**
1379219296aSGreg Roach     * @var HitCountRepository
1389219296aSGreg Roach     */
1399219296aSGreg Roach    private $hitCountRepository;
1409219296aSGreg Roach
1419219296aSGreg Roach    /**
1429219296aSGreg Roach     * @var LatestUserRepository
1439219296aSGreg Roach     */
1449219296aSGreg Roach    private $latestUserRepository;
1459219296aSGreg Roach
1469219296aSGreg Roach    /**
1479219296aSGreg Roach     * @var FavoritesRepository
1489219296aSGreg Roach     */
1499219296aSGreg Roach    private $favoritesRepository;
1509219296aSGreg Roach
1519219296aSGreg Roach    /**
1529219296aSGreg Roach     * @var NewsRepository
1539219296aSGreg Roach     */
1549219296aSGreg Roach    private $newsRepository;
1559219296aSGreg Roach
1569219296aSGreg Roach    /**
1579219296aSGreg Roach     * @var MessageRepository
1589219296aSGreg Roach     */
1599219296aSGreg Roach    private $messageRepository;
1609219296aSGreg Roach
1619219296aSGreg Roach    /**
1629219296aSGreg Roach     * @var ContactRepository
1639219296aSGreg Roach     */
1649219296aSGreg Roach    private $contactRepository;
1659219296aSGreg Roach
1669219296aSGreg Roach    /**
1679219296aSGreg Roach     * @var FamilyDatesRepository
1689219296aSGreg Roach     */
1699219296aSGreg Roach    private $familyDatesRepository;
1709219296aSGreg Roach
1719219296aSGreg Roach    /**
1729219296aSGreg Roach     * @var PlaceRepository
1739219296aSGreg Roach     */
1749219296aSGreg Roach    private $placeRepository;
1759219296aSGreg Roach
1769219296aSGreg Roach    /**
1779219296aSGreg Roach     * @var ModuleService
1789219296aSGreg Roach     */
1799219296aSGreg Roach    private $module_service;
1809219296aSGreg Roach
1819219296aSGreg Roach    /**
1829219296aSGreg Roach     * Create the statistics for a tree.
1839219296aSGreg Roach     *
1849219296aSGreg Roach     * @param ModuleService $module_service
1859219296aSGreg Roach     * @param Tree          $tree Generate statistics for this tree
186e5a6b4d4SGreg Roach     * @param UserService   $user_service
1879219296aSGreg Roach     */
1889219296aSGreg Roach    public function __construct(
1899219296aSGreg Roach        ModuleService $module_service,
190e5a6b4d4SGreg Roach        Tree $tree,
191e5a6b4d4SGreg Roach        UserService $user_service
19298afcacfSGreg Roach    ) {
1939219296aSGreg Roach        $this->tree                  = $tree;
1949219296aSGreg Roach        $this->gedcomRepository      = new GedcomRepository($tree);
1959219296aSGreg Roach        $this->individualRepository  = new IndividualRepository($tree);
1969219296aSGreg Roach        $this->familyRepository      = new FamilyRepository($tree);
1979219296aSGreg Roach        $this->familyDatesRepository = new FamilyDatesRepository($tree);
1989219296aSGreg Roach        $this->mediaRepository       = new MediaRepository($tree);
1999219296aSGreg Roach        $this->eventRepository       = new EventRepository($tree);
200e5a6b4d4SGreg Roach        $this->userRepository        = new UserRepository($tree, $user_service);
2019219296aSGreg Roach        $this->serverRepository      = new ServerRepository();
2029219296aSGreg Roach        $this->browserRepository     = new BrowserRepository();
203e5a6b4d4SGreg Roach        $this->hitCountRepository    = new HitCountRepository($tree, $user_service);
204e5a6b4d4SGreg Roach        $this->latestUserRepository  = new LatestUserRepository($user_service);
205fd9aba47SGreg Roach        $this->favoritesRepository   = new FavoritesRepository($tree, $module_service);
2069219296aSGreg Roach        $this->newsRepository        = new NewsRepository($tree);
2079219296aSGreg Roach        $this->messageRepository     = new MessageRepository();
208e5a6b4d4SGreg Roach        $this->contactRepository     = new ContactRepository($tree, $user_service);
2099219296aSGreg Roach        $this->placeRepository       = new PlaceRepository($tree);
2109219296aSGreg Roach        $this->module_service        = $module_service;
2119219296aSGreg Roach    }
2129219296aSGreg Roach
2139219296aSGreg Roach    /**
2149219296aSGreg Roach     * Return a string of all supported tags and an example of its output in table row form.
2159219296aSGreg Roach     *
2169219296aSGreg Roach     * @return string
2179219296aSGreg Roach     */
2189219296aSGreg Roach    public function getAllTagsTable(): string
2199219296aSGreg Roach    {
220f021177cSGreg Roach        try {
221f021177cSGreg Roach            $class = new ReflectionClass($this);
2229219296aSGreg Roach
223f021177cSGreg Roach            $public_methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
224f021177cSGreg Roach
225f021177cSGreg Roach            $examples = Collection::make($public_methods)
226f021177cSGreg Roach                ->filter(static function (ReflectionMethod $method): bool {
227f021177cSGreg Roach                    return !in_array($method->getName(), ['embedTags', 'getAllTagsTable'], true);
228f021177cSGreg Roach                })
229f021177cSGreg Roach                ->filter(static function (ReflectionMethod $method): bool {
230f021177cSGreg Roach                    $type = $method->getReturnType();
231f021177cSGreg Roach
232f021177cSGreg Roach                    return $type instanceof ReflectionType && $type->getName() === 'string';
233f021177cSGreg Roach                })
234f021177cSGreg Roach                ->sort(static function (ReflectionMethod $x, ReflectionMethod $y): int {
235f021177cSGreg Roach                    return $x->getName() <=> $y->getName();
236f021177cSGreg Roach                })
237f021177cSGreg Roach                ->map(function (ReflectionMethod $method): string {
238f021177cSGreg Roach                    $tag = $method->getName();
239f021177cSGreg Roach
240f021177cSGreg Roach                    return '<dt>#' . $tag . '#</dt><dd>' . call_user_func([$this, $tag]) . '</dd>';
241f021177cSGreg Roach                });
242f021177cSGreg Roach
243f021177cSGreg Roach            return '<dl>' . $examples->implode('') . '</dl>';
244f021177cSGreg Roach        } catch (ReflectionException $ex) {
245f021177cSGreg Roach            return $ex->getMessage();
2469219296aSGreg Roach        }
2479219296aSGreg Roach    }
2489219296aSGreg Roach
2499219296aSGreg Roach    /**
2509219296aSGreg Roach     * Embed tags in text
2519219296aSGreg Roach     *
2529219296aSGreg Roach     * @param string $text
2539219296aSGreg Roach     *
2549219296aSGreg Roach     * @return string
2559219296aSGreg Roach     */
2569219296aSGreg Roach    public function embedTags(string $text): string
2579219296aSGreg Roach    {
2589219296aSGreg Roach        if (strpos($text, '#') !== false) {
2599219296aSGreg Roach            $text = strtr($text, $this->getTags($text));
2609219296aSGreg Roach        }
2619219296aSGreg Roach
2629219296aSGreg Roach        return $text;
2639219296aSGreg Roach    }
2649219296aSGreg Roach
2659219296aSGreg Roach    /**
2660dcd9387SGreg Roach     * @return string
2679219296aSGreg Roach     */
2689219296aSGreg Roach    public function gedcomFilename(): string
2699219296aSGreg Roach    {
2709219296aSGreg Roach        return $this->gedcomRepository->gedcomFilename();
2719219296aSGreg Roach    }
2729219296aSGreg Roach
2739219296aSGreg Roach    /**
2740dcd9387SGreg Roach     * @return int
2759219296aSGreg Roach     */
2769219296aSGreg Roach    public function gedcomId(): int
2779219296aSGreg Roach    {
2789219296aSGreg Roach        return $this->gedcomRepository->gedcomId();
2799219296aSGreg Roach    }
2809219296aSGreg Roach
2819219296aSGreg Roach    /**
2820dcd9387SGreg Roach     * @return string
2839219296aSGreg Roach     */
2849219296aSGreg Roach    public function gedcomTitle(): string
2859219296aSGreg Roach    {
2869219296aSGreg Roach        return $this->gedcomRepository->gedcomTitle();
2879219296aSGreg Roach    }
2889219296aSGreg Roach
2899219296aSGreg Roach    /**
2900dcd9387SGreg Roach     * @return string
2919219296aSGreg Roach     */
2929219296aSGreg Roach    public function gedcomCreatedSoftware(): string
2939219296aSGreg Roach    {
2949219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedSoftware();
2959219296aSGreg Roach    }
2969219296aSGreg Roach
2979219296aSGreg Roach    /**
2980dcd9387SGreg Roach     * @return string
2999219296aSGreg Roach     */
3009219296aSGreg Roach    public function gedcomCreatedVersion(): string
3019219296aSGreg Roach    {
3029219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedVersion();
3039219296aSGreg Roach    }
3049219296aSGreg Roach
3059219296aSGreg Roach    /**
3060dcd9387SGreg Roach     * @return string
3079219296aSGreg Roach     */
3089219296aSGreg Roach    public function gedcomDate(): string
3099219296aSGreg Roach    {
3109219296aSGreg Roach        return $this->gedcomRepository->gedcomDate();
3119219296aSGreg Roach    }
3129219296aSGreg Roach
3139219296aSGreg Roach    /**
3140dcd9387SGreg Roach     * @return string
3159219296aSGreg Roach     */
3169219296aSGreg Roach    public function gedcomUpdated(): string
3179219296aSGreg Roach    {
3189219296aSGreg Roach        return $this->gedcomRepository->gedcomUpdated();
3199219296aSGreg Roach    }
3209219296aSGreg Roach
3219219296aSGreg Roach    /**
3220dcd9387SGreg Roach     * @return string
3239219296aSGreg Roach     */
3249219296aSGreg Roach    public function gedcomRootId(): string
3259219296aSGreg Roach    {
3269219296aSGreg Roach        return $this->gedcomRepository->gedcomRootId();
3279219296aSGreg Roach    }
3289219296aSGreg Roach
3299219296aSGreg Roach    /**
3300dcd9387SGreg Roach     * @return string
3319219296aSGreg Roach     */
3329219296aSGreg Roach    public function totalRecords(): string
3339219296aSGreg Roach    {
3349219296aSGreg Roach        return $this->individualRepository->totalRecords();
3359219296aSGreg Roach    }
3369219296aSGreg Roach
3379219296aSGreg Roach    /**
3380dcd9387SGreg Roach     * @return string
3399219296aSGreg Roach     */
3409219296aSGreg Roach    public function totalIndividuals(): string
3419219296aSGreg Roach    {
3429219296aSGreg Roach        return $this->individualRepository->totalIndividuals();
3439219296aSGreg Roach    }
3449219296aSGreg Roach
3459219296aSGreg Roach    /**
3460dcd9387SGreg Roach     * @return string
3479219296aSGreg Roach     */
3489219296aSGreg Roach    public function totalIndisWithSources(): string
3499219296aSGreg Roach    {
3509219296aSGreg Roach        return $this->individualRepository->totalIndisWithSources();
3519219296aSGreg Roach    }
3529219296aSGreg Roach
3539219296aSGreg Roach    /**
3540dcd9387SGreg Roach     * @param string|null $color_from
3550dcd9387SGreg Roach     * @param string|null $color_to
3560dcd9387SGreg Roach     *
3570dcd9387SGreg Roach     * @return string
3589219296aSGreg Roach     */
3599219296aSGreg Roach    public function chartIndisWithSources(
3609219296aSGreg Roach        string $color_from = null,
3619219296aSGreg Roach        string $color_to = null
36298afcacfSGreg Roach    ): string {
36388de55fdSRico Sonntag        return $this->individualRepository->chartIndisWithSources($color_from, $color_to);
3649219296aSGreg Roach    }
3659219296aSGreg Roach
3669219296aSGreg Roach    /**
3670dcd9387SGreg Roach     * @return string
3689219296aSGreg Roach     */
3699219296aSGreg Roach    public function totalIndividualsPercentage(): string
3709219296aSGreg Roach    {
3719219296aSGreg Roach        return $this->individualRepository->totalIndividualsPercentage();
3729219296aSGreg Roach    }
3739219296aSGreg Roach
3749219296aSGreg Roach    /**
3750dcd9387SGreg Roach     * @return string
3769219296aSGreg Roach     */
3779219296aSGreg Roach    public function totalFamilies(): string
3789219296aSGreg Roach    {
3799219296aSGreg Roach        return $this->individualRepository->totalFamilies();
3809219296aSGreg Roach    }
3819219296aSGreg Roach
3829219296aSGreg Roach    /**
3830dcd9387SGreg Roach     * @return string
3849219296aSGreg Roach     */
3859219296aSGreg Roach    public function totalFamiliesPercentage(): string
3869219296aSGreg Roach    {
3879219296aSGreg Roach        return $this->individualRepository->totalFamiliesPercentage();
3889219296aSGreg Roach    }
3899219296aSGreg Roach
3909219296aSGreg Roach    /**
3910dcd9387SGreg Roach     * @return string
3929219296aSGreg Roach     */
3939219296aSGreg Roach    public function totalFamsWithSources(): string
3949219296aSGreg Roach    {
3959219296aSGreg Roach        return $this->individualRepository->totalFamsWithSources();
3969219296aSGreg Roach    }
3979219296aSGreg Roach
3989219296aSGreg Roach    /**
3990dcd9387SGreg Roach     * @param string|null $color_from
4000dcd9387SGreg Roach     * @param string|null $color_to
4010dcd9387SGreg Roach     *
4020dcd9387SGreg Roach     * @return string
4039219296aSGreg Roach     */
4049219296aSGreg Roach    public function chartFamsWithSources(
4059219296aSGreg Roach        string $color_from = null,
4069219296aSGreg Roach        string $color_to = null
40798afcacfSGreg Roach    ): string {
40888de55fdSRico Sonntag        return $this->individualRepository->chartFamsWithSources($color_from, $color_to);
4099219296aSGreg Roach    }
4109219296aSGreg Roach
4119219296aSGreg Roach    /**
4120dcd9387SGreg Roach     * @return string
4139219296aSGreg Roach     */
4149219296aSGreg Roach    public function totalSources(): string
4159219296aSGreg Roach    {
4169219296aSGreg Roach        return $this->individualRepository->totalSources();
4179219296aSGreg Roach    }
4189219296aSGreg Roach
4199219296aSGreg Roach    /**
4200dcd9387SGreg Roach     * @return string
4219219296aSGreg Roach     */
4229219296aSGreg Roach    public function totalSourcesPercentage(): string
4239219296aSGreg Roach    {
4249219296aSGreg Roach        return $this->individualRepository->totalSourcesPercentage();
4259219296aSGreg Roach    }
4269219296aSGreg Roach
4279219296aSGreg Roach    /**
4280dcd9387SGreg Roach     * @return string
4299219296aSGreg Roach     */
4309219296aSGreg Roach    public function totalNotes(): string
4319219296aSGreg Roach    {
4329219296aSGreg Roach        return $this->individualRepository->totalNotes();
4339219296aSGreg Roach    }
4349219296aSGreg Roach
4359219296aSGreg Roach    /**
4360dcd9387SGreg Roach     * @return string
4379219296aSGreg Roach     */
4389219296aSGreg Roach    public function totalNotesPercentage(): string
4399219296aSGreg Roach    {
4409219296aSGreg Roach        return $this->individualRepository->totalNotesPercentage();
4419219296aSGreg Roach    }
4429219296aSGreg Roach
4439219296aSGreg Roach    /**
4440dcd9387SGreg Roach     * @return string
4459219296aSGreg Roach     */
4469219296aSGreg Roach    public function totalRepositories(): string
4479219296aSGreg Roach    {
4489219296aSGreg Roach        return $this->individualRepository->totalRepositories();
4499219296aSGreg Roach    }
4509219296aSGreg Roach
4519219296aSGreg Roach    /**
4520dcd9387SGreg Roach     * @return string
4539219296aSGreg Roach     */
4549219296aSGreg Roach    public function totalRepositoriesPercentage(): string
4559219296aSGreg Roach    {
4569219296aSGreg Roach        return $this->individualRepository->totalRepositoriesPercentage();
4579219296aSGreg Roach    }
4589219296aSGreg Roach
4599219296aSGreg Roach    /**
460320f6a24SGreg Roach     * @param string[] ...$params
461320f6a24SGreg Roach     *
462320f6a24SGreg Roach     * @return string
4639219296aSGreg Roach     */
4649219296aSGreg Roach    public function totalSurnames(...$params): string
4659219296aSGreg Roach    {
4669219296aSGreg Roach        return $this->individualRepository->totalSurnames(...$params);
4679219296aSGreg Roach    }
4689219296aSGreg Roach
4699219296aSGreg Roach    /**
470320f6a24SGreg Roach     * @param string[] ...$params
471320f6a24SGreg Roach     *
472320f6a24SGreg Roach     * @return string
4739219296aSGreg Roach     */
4749219296aSGreg Roach    public function totalGivennames(...$params): string
4759219296aSGreg Roach    {
4769219296aSGreg Roach        return $this->individualRepository->totalGivennames(...$params);
4779219296aSGreg Roach    }
4789219296aSGreg Roach
4799219296aSGreg Roach    /**
480*c9a927ceSGreg Roach     * @param string[] $events
4810dcd9387SGreg Roach     *
4820dcd9387SGreg Roach     * @return string
4839219296aSGreg Roach     */
4849219296aSGreg Roach    public function totalEvents(array $events = []): string
4859219296aSGreg Roach    {
4869219296aSGreg Roach        return $this->eventRepository->totalEvents($events);
4879219296aSGreg Roach    }
4889219296aSGreg Roach
4899219296aSGreg Roach    /**
4900dcd9387SGreg Roach     * @return string
4919219296aSGreg Roach     */
4929219296aSGreg Roach    public function totalEventsBirth(): string
4939219296aSGreg Roach    {
4949219296aSGreg Roach        return $this->eventRepository->totalEventsBirth();
4959219296aSGreg Roach    }
4969219296aSGreg Roach
4979219296aSGreg Roach    /**
4980dcd9387SGreg Roach     * @return string
4999219296aSGreg Roach     */
5009219296aSGreg Roach    public function totalBirths(): string
5019219296aSGreg Roach    {
5029219296aSGreg Roach        return $this->eventRepository->totalBirths();
5039219296aSGreg Roach    }
5049219296aSGreg Roach
5059219296aSGreg Roach    /**
5060dcd9387SGreg Roach     * @return string
5079219296aSGreg Roach     */
5089219296aSGreg Roach    public function totalEventsDeath(): string
5099219296aSGreg Roach    {
5109219296aSGreg Roach        return $this->eventRepository->totalEventsDeath();
5119219296aSGreg Roach    }
5129219296aSGreg Roach
5139219296aSGreg Roach    /**
5140dcd9387SGreg Roach     * @return string
5159219296aSGreg Roach     */
5169219296aSGreg Roach    public function totalDeaths(): string
5179219296aSGreg Roach    {
5189219296aSGreg Roach        return $this->eventRepository->totalDeaths();
5199219296aSGreg Roach    }
5209219296aSGreg Roach
5219219296aSGreg Roach    /**
5220dcd9387SGreg Roach     * @return string
5239219296aSGreg Roach     */
5249219296aSGreg Roach    public function totalEventsMarriage(): string
5259219296aSGreg Roach    {
5269219296aSGreg Roach        return $this->eventRepository->totalEventsMarriage();
5279219296aSGreg Roach    }
5289219296aSGreg Roach
5299219296aSGreg Roach    /**
5300dcd9387SGreg Roach     * @return string
5319219296aSGreg Roach     */
5329219296aSGreg Roach    public function totalMarriages(): string
5339219296aSGreg Roach    {
5349219296aSGreg Roach        return $this->eventRepository->totalMarriages();
5359219296aSGreg Roach    }
5369219296aSGreg Roach
5379219296aSGreg Roach    /**
5380dcd9387SGreg Roach     * @return string
5399219296aSGreg Roach     */
5409219296aSGreg Roach    public function totalEventsDivorce(): string
5419219296aSGreg Roach    {
5429219296aSGreg Roach        return $this->eventRepository->totalEventsDivorce();
5439219296aSGreg Roach    }
5449219296aSGreg Roach
5459219296aSGreg Roach    /**
5460dcd9387SGreg Roach     * @return string
5479219296aSGreg Roach     */
5489219296aSGreg Roach    public function totalDivorces(): string
5499219296aSGreg Roach    {
5509219296aSGreg Roach        return $this->eventRepository->totalDivorces();
5519219296aSGreg Roach    }
5529219296aSGreg Roach
5539219296aSGreg Roach    /**
5540dcd9387SGreg Roach     * @return string
5559219296aSGreg Roach     */
5569219296aSGreg Roach    public function totalEventsOther(): string
5579219296aSGreg Roach    {
5589219296aSGreg Roach        return $this->eventRepository->totalEventsOther();
5599219296aSGreg Roach    }
5609219296aSGreg Roach
5619219296aSGreg Roach    /**
5620dcd9387SGreg Roach     * @return string
5639219296aSGreg Roach     */
5649219296aSGreg Roach    public function totalSexMales(): string
5659219296aSGreg Roach    {
5669219296aSGreg Roach        return $this->individualRepository->totalSexMales();
5679219296aSGreg Roach    }
5689219296aSGreg Roach
5699219296aSGreg Roach    /**
5700dcd9387SGreg Roach     * @return string
5719219296aSGreg Roach     */
5729219296aSGreg Roach    public function totalSexMalesPercentage(): string
5739219296aSGreg Roach    {
5749219296aSGreg Roach        return $this->individualRepository->totalSexMalesPercentage();
5759219296aSGreg Roach    }
5769219296aSGreg Roach
5779219296aSGreg Roach    /**
5780dcd9387SGreg Roach     * @return string
5799219296aSGreg Roach     */
5809219296aSGreg Roach    public function totalSexFemales(): string
5819219296aSGreg Roach    {
5829219296aSGreg Roach        return $this->individualRepository->totalSexFemales();
5839219296aSGreg Roach    }
5849219296aSGreg Roach
5859219296aSGreg Roach    /**
5860dcd9387SGreg Roach     * @return string
5879219296aSGreg Roach     */
5889219296aSGreg Roach    public function totalSexFemalesPercentage(): string
5899219296aSGreg Roach    {
5909219296aSGreg Roach        return $this->individualRepository->totalSexFemalesPercentage();
5919219296aSGreg Roach    }
5929219296aSGreg Roach
5939219296aSGreg Roach    /**
5940dcd9387SGreg Roach     * @return string
5959219296aSGreg Roach     */
5969219296aSGreg Roach    public function totalSexUnknown(): string
5979219296aSGreg Roach    {
5989219296aSGreg Roach        return $this->individualRepository->totalSexUnknown();
5999219296aSGreg Roach    }
6009219296aSGreg Roach
6019219296aSGreg Roach    /**
6020dcd9387SGreg Roach     * @return string
6039219296aSGreg Roach     */
6049219296aSGreg Roach    public function totalSexUnknownPercentage(): string
6059219296aSGreg Roach    {
6069219296aSGreg Roach        return $this->individualRepository->totalSexUnknownPercentage();
6079219296aSGreg Roach    }
6089219296aSGreg Roach
6099219296aSGreg Roach    /**
6100dcd9387SGreg Roach     * @param string|null $color_female
6110dcd9387SGreg Roach     * @param string|null $color_male
6120dcd9387SGreg Roach     * @param string|null $color_unknown
6130dcd9387SGreg Roach     *
6140dcd9387SGreg Roach     * @return string
6159219296aSGreg Roach     */
6169219296aSGreg Roach    public function chartSex(
6179219296aSGreg Roach        string $color_female = null,
6189219296aSGreg Roach        string $color_male = null,
6199219296aSGreg Roach        string $color_unknown = null
62098afcacfSGreg Roach    ): string {
62188de55fdSRico Sonntag        return $this->individualRepository->chartSex($color_female, $color_male, $color_unknown);
6229219296aSGreg Roach    }
6239219296aSGreg Roach
6249219296aSGreg Roach    /**
6250dcd9387SGreg Roach     * @return string
6269219296aSGreg Roach     */
6279219296aSGreg Roach    public function totalLiving(): string
6289219296aSGreg Roach    {
6299219296aSGreg Roach        return $this->individualRepository->totalLiving();
6309219296aSGreg Roach    }
6319219296aSGreg Roach
6329219296aSGreg Roach    /**
6330dcd9387SGreg Roach     * @return string
6349219296aSGreg Roach     */
6359219296aSGreg Roach    public function totalLivingPercentage(): string
6369219296aSGreg Roach    {
6379219296aSGreg Roach        return $this->individualRepository->totalLivingPercentage();
6389219296aSGreg Roach    }
6399219296aSGreg Roach
6409219296aSGreg Roach    /**
6410dcd9387SGreg Roach     * @return string
6429219296aSGreg Roach     */
6439219296aSGreg Roach    public function totalDeceased(): string
6449219296aSGreg Roach    {
6459219296aSGreg Roach        return $this->individualRepository->totalDeceased();
6469219296aSGreg Roach    }
6479219296aSGreg Roach
6489219296aSGreg Roach    /**
6490dcd9387SGreg Roach     * @return string
6509219296aSGreg Roach     */
6519219296aSGreg Roach    public function totalDeceasedPercentage(): string
6529219296aSGreg Roach    {
6539219296aSGreg Roach        return $this->individualRepository->totalDeceasedPercentage();
6549219296aSGreg Roach    }
6559219296aSGreg Roach
6569219296aSGreg Roach    /**
6570dcd9387SGreg Roach     * @param string|null $color_living
6580dcd9387SGreg Roach     * @param string|null $color_dead
6590dcd9387SGreg Roach     *
6600dcd9387SGreg Roach     * @return string
6619219296aSGreg Roach     */
66288de55fdSRico Sonntag    public function chartMortality(string $color_living = null, string $color_dead = null): string
6639219296aSGreg Roach    {
66488de55fdSRico Sonntag        return $this->individualRepository->chartMortality($color_living, $color_dead);
6659219296aSGreg Roach    }
6669219296aSGreg Roach
6679219296aSGreg Roach    /**
6680dcd9387SGreg Roach     * @return string
6699219296aSGreg Roach     */
6709219296aSGreg Roach    public function totalMedia(): string
6719219296aSGreg Roach    {
6729219296aSGreg Roach        return $this->mediaRepository->totalMedia();
6739219296aSGreg Roach    }
6749219296aSGreg Roach
6759219296aSGreg Roach    /**
6760dcd9387SGreg Roach     * @return string
6779219296aSGreg Roach     */
6789219296aSGreg Roach    public function totalMediaAudio(): string
6799219296aSGreg Roach    {
6809219296aSGreg Roach        return $this->mediaRepository->totalMediaAudio();
6819219296aSGreg Roach    }
6829219296aSGreg Roach
6839219296aSGreg Roach    /**
6840dcd9387SGreg Roach     * @return string
6859219296aSGreg Roach     */
6869219296aSGreg Roach    public function totalMediaBook(): string
6879219296aSGreg Roach    {
6889219296aSGreg Roach        return $this->mediaRepository->totalMediaBook();
6899219296aSGreg Roach    }
6909219296aSGreg Roach
6919219296aSGreg Roach    /**
6920dcd9387SGreg Roach     * @return string
6939219296aSGreg Roach     */
6949219296aSGreg Roach    public function totalMediaCard(): string
6959219296aSGreg Roach    {
6969219296aSGreg Roach        return $this->mediaRepository->totalMediaCard();
6979219296aSGreg Roach    }
6989219296aSGreg Roach
6999219296aSGreg Roach    /**
7000dcd9387SGreg Roach     * @return string
7019219296aSGreg Roach     */
7029219296aSGreg Roach    public function totalMediaCertificate(): string
7039219296aSGreg Roach    {
7049219296aSGreg Roach        return $this->mediaRepository->totalMediaCertificate();
7059219296aSGreg Roach    }
7069219296aSGreg Roach
7079219296aSGreg Roach    /**
7080dcd9387SGreg Roach     * @return string
7099219296aSGreg Roach     */
7109219296aSGreg Roach    public function totalMediaCoatOfArms(): string
7119219296aSGreg Roach    {
7129219296aSGreg Roach        return $this->mediaRepository->totalMediaCoatOfArms();
7139219296aSGreg Roach    }
7149219296aSGreg Roach
7159219296aSGreg Roach    /**
7160dcd9387SGreg Roach     * @return string
7179219296aSGreg Roach     */
7189219296aSGreg Roach    public function totalMediaDocument(): string
7199219296aSGreg Roach    {
7209219296aSGreg Roach        return $this->mediaRepository->totalMediaDocument();
7219219296aSGreg Roach    }
7229219296aSGreg Roach
7239219296aSGreg Roach    /**
7240dcd9387SGreg Roach     * @return string
7259219296aSGreg Roach     */
7269219296aSGreg Roach    public function totalMediaElectronic(): string
7279219296aSGreg Roach    {
7289219296aSGreg Roach        return $this->mediaRepository->totalMediaElectronic();
7299219296aSGreg Roach    }
7309219296aSGreg Roach
7319219296aSGreg Roach    /**
7320dcd9387SGreg Roach     * @return string
7339219296aSGreg Roach     */
7349219296aSGreg Roach    public function totalMediaMagazine(): string
7359219296aSGreg Roach    {
7369219296aSGreg Roach        return $this->mediaRepository->totalMediaMagazine();
7379219296aSGreg Roach    }
7389219296aSGreg Roach
7399219296aSGreg Roach    /**
7400dcd9387SGreg Roach     * @return string
7419219296aSGreg Roach     */
7429219296aSGreg Roach    public function totalMediaManuscript(): string
7439219296aSGreg Roach    {
7449219296aSGreg Roach        return $this->mediaRepository->totalMediaManuscript();
7459219296aSGreg Roach    }
7469219296aSGreg Roach
7479219296aSGreg Roach    /**
7480dcd9387SGreg Roach     * @return string
7499219296aSGreg Roach     */
7509219296aSGreg Roach    public function totalMediaMap(): string
7519219296aSGreg Roach    {
7529219296aSGreg Roach        return $this->mediaRepository->totalMediaMap();
7539219296aSGreg Roach    }
7549219296aSGreg Roach
7559219296aSGreg Roach    /**
7560dcd9387SGreg Roach     * @return string
7579219296aSGreg Roach     */
7589219296aSGreg Roach    public function totalMediaFiche(): string
7599219296aSGreg Roach    {
7609219296aSGreg Roach        return $this->mediaRepository->totalMediaFiche();
7619219296aSGreg Roach    }
7629219296aSGreg Roach
7639219296aSGreg Roach    /**
7640dcd9387SGreg Roach     * @return string
7659219296aSGreg Roach     */
7669219296aSGreg Roach    public function totalMediaFilm(): string
7679219296aSGreg Roach    {
7689219296aSGreg Roach        return $this->mediaRepository->totalMediaFilm();
7699219296aSGreg Roach    }
7709219296aSGreg Roach
7719219296aSGreg Roach    /**
7720dcd9387SGreg Roach     * @return string
7739219296aSGreg Roach     */
7749219296aSGreg Roach    public function totalMediaNewspaper(): string
7759219296aSGreg Roach    {
7769219296aSGreg Roach        return $this->mediaRepository->totalMediaNewspaper();
7779219296aSGreg Roach    }
7789219296aSGreg Roach
7799219296aSGreg Roach    /**
7800dcd9387SGreg Roach     * @return string
7819219296aSGreg Roach     */
7829219296aSGreg Roach    public function totalMediaPainting(): string
7839219296aSGreg Roach    {
7849219296aSGreg Roach        return $this->mediaRepository->totalMediaPainting();
7859219296aSGreg Roach    }
7869219296aSGreg Roach
7879219296aSGreg Roach    /**
7880dcd9387SGreg Roach     * @return string
7899219296aSGreg Roach     */
7909219296aSGreg Roach    public function totalMediaPhoto(): string
7919219296aSGreg Roach    {
7929219296aSGreg Roach        return $this->mediaRepository->totalMediaPhoto();
7939219296aSGreg Roach    }
7949219296aSGreg Roach
7959219296aSGreg Roach    /**
7960dcd9387SGreg Roach     * @return string
7979219296aSGreg Roach     */
7989219296aSGreg Roach    public function totalMediaTombstone(): string
7999219296aSGreg Roach    {
8009219296aSGreg Roach        return $this->mediaRepository->totalMediaTombstone();
8019219296aSGreg Roach    }
8029219296aSGreg Roach
8039219296aSGreg Roach    /**
8040dcd9387SGreg Roach     * @return string
8059219296aSGreg Roach     */
8069219296aSGreg Roach    public function totalMediaVideo(): string
8079219296aSGreg Roach    {
8089219296aSGreg Roach        return $this->mediaRepository->totalMediaVideo();
8099219296aSGreg Roach    }
8109219296aSGreg Roach
8119219296aSGreg Roach    /**
8120dcd9387SGreg Roach     * @return string
8139219296aSGreg Roach     */
8149219296aSGreg Roach    public function totalMediaOther(): string
8159219296aSGreg Roach    {
8169219296aSGreg Roach        return $this->mediaRepository->totalMediaOther();
8179219296aSGreg Roach    }
8189219296aSGreg Roach
8199219296aSGreg Roach    /**
8200dcd9387SGreg Roach     * @return string
8219219296aSGreg Roach     */
8229219296aSGreg Roach    public function totalMediaUnknown(): string
8239219296aSGreg Roach    {
8249219296aSGreg Roach        return $this->mediaRepository->totalMediaUnknown();
8259219296aSGreg Roach    }
8269219296aSGreg Roach
8279219296aSGreg Roach    /**
8280dcd9387SGreg Roach     * @param string|null $color_from
8290dcd9387SGreg Roach     * @param string|null $color_to
8300dcd9387SGreg Roach     *
8310dcd9387SGreg Roach     * @return string
8329219296aSGreg Roach     */
83388de55fdSRico Sonntag    public function chartMedia(string $color_from = null, string $color_to = null): string
8349219296aSGreg Roach    {
83588de55fdSRico Sonntag        return $this->mediaRepository->chartMedia($color_from, $color_to);
8369219296aSGreg Roach    }
8379219296aSGreg Roach
8389219296aSGreg Roach    /**
8390dcd9387SGreg Roach     * @param string $what
8400dcd9387SGreg Roach     * @param string $fact
8410dcd9387SGreg Roach     * @param int    $parent
8420dcd9387SGreg Roach     * @param bool   $country
8430dcd9387SGreg Roach     *
8440dcd9387SGreg Roach     * @return array
8459219296aSGreg Roach     */
8469219296aSGreg Roach    public function statsPlaces(string $what = 'ALL', string $fact = '', int $parent = 0, bool $country = false): array
8479219296aSGreg Roach    {
8489219296aSGreg Roach        return $this->placeRepository->statsPlaces($what, $fact, $parent, $country);
8499219296aSGreg Roach    }
8509219296aSGreg Roach
8519219296aSGreg Roach    /**
8520dcd9387SGreg Roach     * @return string
8539219296aSGreg Roach     */
8549219296aSGreg Roach    public function totalPlaces(): string
8559219296aSGreg Roach    {
8569219296aSGreg Roach        return $this->placeRepository->totalPlaces();
8579219296aSGreg Roach    }
8589219296aSGreg Roach
8599219296aSGreg Roach    /**
8600dcd9387SGreg Roach     * @param string $chart_shows
8610dcd9387SGreg Roach     * @param string $chart_type
8620dcd9387SGreg Roach     * @param string $surname
8630dcd9387SGreg Roach     *
8640dcd9387SGreg Roach     * @return string
8659219296aSGreg Roach     */
8669219296aSGreg Roach    public function chartDistribution(
8679219296aSGreg Roach        string $chart_shows = 'world',
8689219296aSGreg Roach        string $chart_type = '',
8699219296aSGreg Roach        string $surname = ''
87098afcacfSGreg Roach    ): string {
8719219296aSGreg Roach        return $this->placeRepository->chartDistribution($chart_shows, $chart_type, $surname);
8729219296aSGreg Roach    }
8739219296aSGreg Roach
8749219296aSGreg Roach    /**
8750dcd9387SGreg Roach     * @return string
8769219296aSGreg Roach     */
8779219296aSGreg Roach    public function commonCountriesList(): string
8789219296aSGreg Roach    {
8799219296aSGreg Roach        return $this->placeRepository->commonCountriesList();
8809219296aSGreg Roach    }
8819219296aSGreg Roach
8829219296aSGreg Roach    /**
8830dcd9387SGreg Roach     * @return string
8849219296aSGreg Roach     */
8859219296aSGreg Roach    public function commonBirthPlacesList(): string
8869219296aSGreg Roach    {
8879219296aSGreg Roach        return $this->placeRepository->commonBirthPlacesList();
8889219296aSGreg Roach    }
8899219296aSGreg Roach
8909219296aSGreg Roach    /**
8910dcd9387SGreg Roach     * @return string
8929219296aSGreg Roach     */
8939219296aSGreg Roach    public function commonDeathPlacesList(): string
8949219296aSGreg Roach    {
8959219296aSGreg Roach        return $this->placeRepository->commonDeathPlacesList();
8969219296aSGreg Roach    }
8979219296aSGreg Roach
8989219296aSGreg Roach    /**
8990dcd9387SGreg Roach     * @return string
9009219296aSGreg Roach     */
9019219296aSGreg Roach    public function commonMarriagePlacesList(): string
9029219296aSGreg Roach    {
9039219296aSGreg Roach        return $this->placeRepository->commonMarriagePlacesList();
9049219296aSGreg Roach    }
9059219296aSGreg Roach
9069219296aSGreg Roach    /**
9070dcd9387SGreg Roach     * @return string
9089219296aSGreg Roach     */
9099219296aSGreg Roach    public function firstBirth(): string
9109219296aSGreg Roach    {
9119219296aSGreg Roach        return $this->familyDatesRepository->firstBirth();
9129219296aSGreg Roach    }
9139219296aSGreg Roach
9149219296aSGreg Roach    /**
9150dcd9387SGreg Roach     * @return string
9169219296aSGreg Roach     */
9179219296aSGreg Roach    public function firstBirthYear(): string
9189219296aSGreg Roach    {
9199219296aSGreg Roach        return $this->familyDatesRepository->firstBirthYear();
9209219296aSGreg Roach    }
9219219296aSGreg Roach
9229219296aSGreg Roach    /**
9230dcd9387SGreg Roach     * @return string
9249219296aSGreg Roach     */
9259219296aSGreg Roach    public function firstBirthName(): string
9269219296aSGreg Roach    {
9279219296aSGreg Roach        return $this->familyDatesRepository->firstBirthName();
9289219296aSGreg Roach    }
9299219296aSGreg Roach
9309219296aSGreg Roach    /**
9310dcd9387SGreg Roach     * @return string
9329219296aSGreg Roach     */
9339219296aSGreg Roach    public function firstBirthPlace(): string
9349219296aSGreg Roach    {
9359219296aSGreg Roach        return $this->familyDatesRepository->firstBirthPlace();
9369219296aSGreg Roach    }
9379219296aSGreg Roach
9389219296aSGreg Roach    /**
9390dcd9387SGreg Roach     * @return string
9409219296aSGreg Roach     */
9419219296aSGreg Roach    public function lastBirth(): string
9429219296aSGreg Roach    {
9439219296aSGreg Roach        return $this->familyDatesRepository->lastBirth();
9449219296aSGreg Roach    }
9459219296aSGreg Roach
9469219296aSGreg Roach    /**
9470dcd9387SGreg Roach     * @return string
9489219296aSGreg Roach     */
9499219296aSGreg Roach    public function lastBirthYear(): string
9509219296aSGreg Roach    {
9519219296aSGreg Roach        return $this->familyDatesRepository->lastBirthYear();
9529219296aSGreg Roach    }
9539219296aSGreg Roach
9549219296aSGreg Roach    /**
9550dcd9387SGreg Roach     * @return string
9569219296aSGreg Roach     */
9579219296aSGreg Roach    public function lastBirthName(): string
9589219296aSGreg Roach    {
9599219296aSGreg Roach        return $this->familyDatesRepository->lastBirthName();
9609219296aSGreg Roach    }
9619219296aSGreg Roach
9629219296aSGreg Roach    /**
9630dcd9387SGreg Roach     * @return string
9649219296aSGreg Roach     */
9659219296aSGreg Roach    public function lastBirthPlace(): string
9669219296aSGreg Roach    {
9679219296aSGreg Roach        return $this->familyDatesRepository->lastBirthPlace();
9689219296aSGreg Roach    }
9699219296aSGreg Roach
9709219296aSGreg Roach    /**
9710dcd9387SGreg Roach     * @param int $year1
9720dcd9387SGreg Roach     * @param int $year2
9730dcd9387SGreg Roach     *
9740dcd9387SGreg Roach     * @return Builder
9759219296aSGreg Roach     */
976cde1d378SGreg Roach    public function statsBirthQuery(int $year1 = -1, int $year2 = -1): Builder
9779219296aSGreg Roach    {
978cde1d378SGreg Roach        return $this->individualRepository->statsBirthQuery($year1, $year2);
979cde1d378SGreg Roach    }
980cde1d378SGreg Roach
981cde1d378SGreg Roach    /**
9820dcd9387SGreg Roach     * @param int $year1
9830dcd9387SGreg Roach     * @param int $year2
9840dcd9387SGreg Roach     *
9850dcd9387SGreg Roach     * @return Builder
986cde1d378SGreg Roach     */
987cde1d378SGreg Roach    public function statsBirthBySexQuery(int $year1 = -1, int $year2 = -1): Builder
988cde1d378SGreg Roach    {
989cde1d378SGreg Roach        return $this->individualRepository->statsBirthBySexQuery($year1, $year2);
9909219296aSGreg Roach    }
9919219296aSGreg Roach
9929219296aSGreg Roach    /**
9930dcd9387SGreg Roach     * @param string|null $color_from
9940dcd9387SGreg Roach     * @param string|null $color_to
9950dcd9387SGreg Roach     *
9960dcd9387SGreg Roach     * @return string
9979219296aSGreg Roach     */
99888de55fdSRico Sonntag    public function statsBirth(string $color_from = null, string $color_to = null): string
9999219296aSGreg Roach    {
100088de55fdSRico Sonntag        return $this->individualRepository->statsBirth($color_from, $color_to);
10019219296aSGreg Roach    }
10029219296aSGreg Roach
10039219296aSGreg Roach    /**
10040dcd9387SGreg Roach     * @return string
10059219296aSGreg Roach     */
10069219296aSGreg Roach    public function firstDeath(): string
10079219296aSGreg Roach    {
10089219296aSGreg Roach        return $this->familyDatesRepository->firstDeath();
10099219296aSGreg Roach    }
10109219296aSGreg Roach
10119219296aSGreg Roach    /**
10120dcd9387SGreg Roach     * @return string
10139219296aSGreg Roach     */
10149219296aSGreg Roach    public function firstDeathYear(): string
10159219296aSGreg Roach    {
10169219296aSGreg Roach        return $this->familyDatesRepository->firstDeathYear();
10179219296aSGreg Roach    }
10189219296aSGreg Roach
10199219296aSGreg Roach    /**
10200dcd9387SGreg Roach     * @return string
10219219296aSGreg Roach     */
10229219296aSGreg Roach    public function firstDeathName(): string
10239219296aSGreg Roach    {
10249219296aSGreg Roach        return $this->familyDatesRepository->firstDeathName();
10259219296aSGreg Roach    }
10269219296aSGreg Roach
10279219296aSGreg Roach    /**
10280dcd9387SGreg Roach     * @return string
10299219296aSGreg Roach     */
10309219296aSGreg Roach    public function firstDeathPlace(): string
10319219296aSGreg Roach    {
10329219296aSGreg Roach        return $this->familyDatesRepository->firstDeathPlace();
10339219296aSGreg Roach    }
10349219296aSGreg Roach
10359219296aSGreg Roach    /**
10360dcd9387SGreg Roach     * @return string
10379219296aSGreg Roach     */
10389219296aSGreg Roach    public function lastDeath(): string
10399219296aSGreg Roach    {
10409219296aSGreg Roach        return $this->familyDatesRepository->lastDeath();
10419219296aSGreg Roach    }
10429219296aSGreg Roach
10439219296aSGreg Roach    /**
10440dcd9387SGreg Roach     * @return string
10459219296aSGreg Roach     */
10469219296aSGreg Roach    public function lastDeathYear(): string
10479219296aSGreg Roach    {
10489219296aSGreg Roach        return $this->familyDatesRepository->lastDeathYear();
10499219296aSGreg Roach    }
10509219296aSGreg Roach
10519219296aSGreg Roach    /**
10520dcd9387SGreg Roach     * @return string
10539219296aSGreg Roach     */
10549219296aSGreg Roach    public function lastDeathName(): string
10559219296aSGreg Roach    {
10569219296aSGreg Roach        return $this->familyDatesRepository->lastDeathName();
10579219296aSGreg Roach    }
10589219296aSGreg Roach
10599219296aSGreg Roach    /**
10600dcd9387SGreg Roach     * @return string
10619219296aSGreg Roach     */
10629219296aSGreg Roach    public function lastDeathPlace(): string
10639219296aSGreg Roach    {
10649219296aSGreg Roach        return $this->familyDatesRepository->lastDeathPlace();
10659219296aSGreg Roach    }
10669219296aSGreg Roach
10679219296aSGreg Roach    /**
10680dcd9387SGreg Roach     * @param int $year1
10690dcd9387SGreg Roach     * @param int $year2
10700dcd9387SGreg Roach     *
10710dcd9387SGreg Roach     * @return Builder
10729219296aSGreg Roach     */
1073cde1d378SGreg Roach    public function statsDeathQuery(int $year1 = -1, int $year2 = -1): Builder
10749219296aSGreg Roach    {
1075cde1d378SGreg Roach        return $this->individualRepository->statsDeathQuery($year1, $year2);
1076cde1d378SGreg Roach    }
1077cde1d378SGreg Roach
1078cde1d378SGreg Roach    /**
10790dcd9387SGreg Roach     * @param int $year1
10800dcd9387SGreg Roach     * @param int $year2
10810dcd9387SGreg Roach     *
10820dcd9387SGreg Roach     * @return Builder
1083cde1d378SGreg Roach     */
1084cde1d378SGreg Roach    public function statsDeathBySexQuery(int $year1 = -1, int $year2 = -1): Builder
1085cde1d378SGreg Roach    {
1086cde1d378SGreg Roach        return $this->individualRepository->statsDeathBySexQuery($year1, $year2);
10879219296aSGreg Roach    }
10889219296aSGreg Roach
10899219296aSGreg Roach    /**
10900dcd9387SGreg Roach     * @param string|null $color_from
10910dcd9387SGreg Roach     * @param string|null $color_to
10920dcd9387SGreg Roach     *
10930dcd9387SGreg Roach     * @return string
10949219296aSGreg Roach     */
109588de55fdSRico Sonntag    public function statsDeath(string $color_from = null, string $color_to = null): string
10969219296aSGreg Roach    {
109788de55fdSRico Sonntag        return $this->individualRepository->statsDeath($color_from, $color_to);
10989219296aSGreg Roach    }
10999219296aSGreg Roach
11009219296aSGreg Roach    /**
1101320f6a24SGreg Roach     * General query on ages.
1102320f6a24SGreg Roach     *
1103320f6a24SGreg Roach     * @param string $related
1104320f6a24SGreg Roach     * @param string $sex
1105320f6a24SGreg Roach     * @param int    $year1
1106320f6a24SGreg Roach     * @param int    $year2
1107320f6a24SGreg Roach     *
1108320f6a24SGreg Roach     * @return array|string
11099219296aSGreg Roach     */
11109219296aSGreg Roach    public function statsAgeQuery(string $related = 'BIRT', string $sex = 'BOTH', int $year1 = -1, int $year2 = -1)
11119219296aSGreg Roach    {
11129219296aSGreg Roach        return $this->individualRepository->statsAgeQuery($related, $sex, $year1, $year2);
11139219296aSGreg Roach    }
11149219296aSGreg Roach
11159219296aSGreg Roach    /**
11160dcd9387SGreg Roach     * @return string
11179219296aSGreg Roach     */
111888de55fdSRico Sonntag    public function statsAge(): string
11199219296aSGreg Roach    {
112088de55fdSRico Sonntag        return $this->individualRepository->statsAge();
11219219296aSGreg Roach    }
11229219296aSGreg Roach
11239219296aSGreg Roach    /**
11240dcd9387SGreg Roach     * @return string
11259219296aSGreg Roach     */
11269219296aSGreg Roach    public function longestLife(): string
11279219296aSGreg Roach    {
11289219296aSGreg Roach        return $this->individualRepository->longestLife();
11299219296aSGreg Roach    }
11309219296aSGreg Roach
11319219296aSGreg Roach    /**
11320dcd9387SGreg Roach     * @return string
11339219296aSGreg Roach     */
11349219296aSGreg Roach    public function longestLifeAge(): string
11359219296aSGreg Roach    {
11369219296aSGreg Roach        return $this->individualRepository->longestLifeAge();
11379219296aSGreg Roach    }
11389219296aSGreg Roach
11399219296aSGreg Roach    /**
11400dcd9387SGreg Roach     * @return string
11419219296aSGreg Roach     */
11429219296aSGreg Roach    public function longestLifeName(): string
11439219296aSGreg Roach    {
11449219296aSGreg Roach        return $this->individualRepository->longestLifeName();
11459219296aSGreg Roach    }
11469219296aSGreg Roach
11479219296aSGreg Roach    /**
11480dcd9387SGreg Roach     * @return string
11499219296aSGreg Roach     */
11509219296aSGreg Roach    public function longestLifeFemale(): string
11519219296aSGreg Roach    {
11529219296aSGreg Roach        return $this->individualRepository->longestLifeFemale();
11539219296aSGreg Roach    }
11549219296aSGreg Roach
11559219296aSGreg Roach    /**
11560dcd9387SGreg Roach     * @return string
11579219296aSGreg Roach     */
11589219296aSGreg Roach    public function longestLifeFemaleAge(): string
11599219296aSGreg Roach    {
11609219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleAge();
11619219296aSGreg Roach    }
11629219296aSGreg Roach
11639219296aSGreg Roach    /**
11640dcd9387SGreg Roach     * @return string
11659219296aSGreg Roach     */
11669219296aSGreg Roach    public function longestLifeFemaleName(): string
11679219296aSGreg Roach    {
11689219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleName();
11699219296aSGreg Roach    }
11709219296aSGreg Roach
11719219296aSGreg Roach    /**
11720dcd9387SGreg Roach     * @return string
11739219296aSGreg Roach     */
11749219296aSGreg Roach    public function longestLifeMale(): string
11759219296aSGreg Roach    {
11769219296aSGreg Roach        return $this->individualRepository->longestLifeMale();
11779219296aSGreg Roach    }
11789219296aSGreg Roach
11799219296aSGreg Roach    /**
11800dcd9387SGreg Roach     * @return string
11819219296aSGreg Roach     */
11829219296aSGreg Roach    public function longestLifeMaleAge(): string
11839219296aSGreg Roach    {
11849219296aSGreg Roach        return $this->individualRepository->longestLifeMaleAge();
11859219296aSGreg Roach    }
11869219296aSGreg Roach
11879219296aSGreg Roach    /**
11880dcd9387SGreg Roach     * @return string
11899219296aSGreg Roach     */
11909219296aSGreg Roach    public function longestLifeMaleName(): string
11919219296aSGreg Roach    {
11929219296aSGreg Roach        return $this->individualRepository->longestLifeMaleName();
11939219296aSGreg Roach    }
11949219296aSGreg Roach
11959219296aSGreg Roach    /**
11960dcd9387SGreg Roach     * @param string $total
11970dcd9387SGreg Roach     *
11980dcd9387SGreg Roach     * @return string
11999219296aSGreg Roach     */
12009219296aSGreg Roach    public function topTenOldest(string $total = '10'): string
12019219296aSGreg Roach    {
12029219296aSGreg Roach        return $this->individualRepository->topTenOldest((int) $total);
12039219296aSGreg Roach    }
12049219296aSGreg Roach
12059219296aSGreg Roach    /**
12060dcd9387SGreg Roach     * @param string $total
12070dcd9387SGreg Roach     *
12080dcd9387SGreg Roach     * @return string
12099219296aSGreg Roach     */
12109219296aSGreg Roach    public function topTenOldestList(string $total = '10'): string
12119219296aSGreg Roach    {
12129219296aSGreg Roach        return $this->individualRepository->topTenOldestList((int) $total);
12139219296aSGreg Roach    }
12149219296aSGreg Roach
12159219296aSGreg Roach    /**
12160dcd9387SGreg Roach     * @param string $total
12170dcd9387SGreg Roach     *
12180dcd9387SGreg Roach     * @return string
12199219296aSGreg Roach     */
12209219296aSGreg Roach    public function topTenOldestFemale(string $total = '10'): string
12219219296aSGreg Roach    {
12229219296aSGreg Roach        return $this->individualRepository->topTenOldestFemale((int) $total);
12239219296aSGreg Roach    }
12249219296aSGreg Roach
12259219296aSGreg Roach    /**
12260dcd9387SGreg Roach     * @param string $total
12270dcd9387SGreg Roach     *
12280dcd9387SGreg Roach     * @return string
12299219296aSGreg Roach     */
12309219296aSGreg Roach    public function topTenOldestFemaleList(string $total = '10'): string
12319219296aSGreg Roach    {
12329219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleList((int) $total);
12339219296aSGreg Roach    }
12349219296aSGreg Roach
12359219296aSGreg Roach    /**
12360dcd9387SGreg Roach     * @param string $total
12370dcd9387SGreg Roach     *
12380dcd9387SGreg Roach     * @return string
12399219296aSGreg Roach     */
12409219296aSGreg Roach    public function topTenOldestMale(string $total = '10'): string
12419219296aSGreg Roach    {
12429219296aSGreg Roach        return $this->individualRepository->topTenOldestMale((int) $total);
12439219296aSGreg Roach    }
12449219296aSGreg Roach
12459219296aSGreg Roach    /**
12460dcd9387SGreg Roach     * @param string $total
12470dcd9387SGreg Roach     *
12480dcd9387SGreg Roach     * @return string
12499219296aSGreg Roach     */
12509219296aSGreg Roach    public function topTenOldestMaleList(string $total = '10'): string
12519219296aSGreg Roach    {
12529219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleList((int) $total);
12539219296aSGreg Roach    }
12549219296aSGreg Roach
12559219296aSGreg Roach    /**
12560dcd9387SGreg Roach     * @param string $total
12570dcd9387SGreg Roach     *
12580dcd9387SGreg Roach     * @return string
12599219296aSGreg Roach     */
12609219296aSGreg Roach    public function topTenOldestAlive(string $total = '10'): string
12619219296aSGreg Roach    {
12629219296aSGreg Roach        return $this->individualRepository->topTenOldestAlive((int) $total);
12639219296aSGreg Roach    }
12649219296aSGreg Roach
12659219296aSGreg Roach    /**
12660dcd9387SGreg Roach     * @param string $total
12670dcd9387SGreg Roach     *
12680dcd9387SGreg Roach     * @return string
12699219296aSGreg Roach     */
12709219296aSGreg Roach    public function topTenOldestListAlive(string $total = '10'): string
12719219296aSGreg Roach    {
12729219296aSGreg Roach        return $this->individualRepository->topTenOldestListAlive((int) $total);
12739219296aSGreg Roach    }
12749219296aSGreg Roach
12759219296aSGreg Roach    /**
12760dcd9387SGreg Roach     * @param string $total
12770dcd9387SGreg Roach     *
12780dcd9387SGreg Roach     * @return string
12799219296aSGreg Roach     */
12809219296aSGreg Roach    public function topTenOldestFemaleAlive(string $total = '10'): string
12819219296aSGreg Roach    {
12829219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleAlive((int) $total);
12839219296aSGreg Roach    }
12849219296aSGreg Roach
12859219296aSGreg Roach    /**
12860dcd9387SGreg Roach     * @param string $total
12870dcd9387SGreg Roach     *
12880dcd9387SGreg Roach     * @return string
12899219296aSGreg Roach     */
12909219296aSGreg Roach    public function topTenOldestFemaleListAlive(string $total = '10'): string
12919219296aSGreg Roach    {
12929219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleListAlive((int) $total);
12939219296aSGreg Roach    }
12949219296aSGreg Roach
12959219296aSGreg Roach    /**
12960dcd9387SGreg Roach     * @param string $total
12970dcd9387SGreg Roach     *
12980dcd9387SGreg Roach     * @return string
12999219296aSGreg Roach     */
13009219296aSGreg Roach    public function topTenOldestMaleAlive(string $total = '10'): string
13019219296aSGreg Roach    {
13029219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleAlive((int) $total);
13039219296aSGreg Roach    }
13049219296aSGreg Roach
13059219296aSGreg Roach    /**
13060dcd9387SGreg Roach     * @param string $total
13070dcd9387SGreg Roach     *
13080dcd9387SGreg Roach     * @return string
13099219296aSGreg Roach     */
13109219296aSGreg Roach    public function topTenOldestMaleListAlive(string $total = '10'): string
13119219296aSGreg Roach    {
13129219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleListAlive((int) $total);
13139219296aSGreg Roach    }
13149219296aSGreg Roach
13159219296aSGreg Roach    /**
13160dcd9387SGreg Roach     * @param bool $show_years
13170dcd9387SGreg Roach     *
13180dcd9387SGreg Roach     * @return string
13199219296aSGreg Roach     */
13209219296aSGreg Roach    public function averageLifespan(bool $show_years = false): string
13219219296aSGreg Roach    {
13229219296aSGreg Roach        return $this->individualRepository->averageLifespan($show_years);
13239219296aSGreg Roach    }
13249219296aSGreg Roach
13259219296aSGreg Roach    /**
13260dcd9387SGreg Roach     * @param bool $show_years
13270dcd9387SGreg Roach     *
13280dcd9387SGreg Roach     * @return string
13299219296aSGreg Roach     */
13309219296aSGreg Roach    public function averageLifespanFemale(bool $show_years = false): string
13319219296aSGreg Roach    {
13329219296aSGreg Roach        return $this->individualRepository->averageLifespanFemale($show_years);
13339219296aSGreg Roach    }
13349219296aSGreg Roach
13359219296aSGreg Roach    /**
13360dcd9387SGreg Roach     * @param bool $show_years
13370dcd9387SGreg Roach     *
13380dcd9387SGreg Roach     * @return string
13399219296aSGreg Roach     */
13409219296aSGreg Roach    public function averageLifespanMale(bool $show_years = false): string
13419219296aSGreg Roach    {
13429219296aSGreg Roach        return $this->individualRepository->averageLifespanMale($show_years);
13439219296aSGreg Roach    }
13449219296aSGreg Roach
13459219296aSGreg Roach    /**
13460dcd9387SGreg Roach     * @return string
13479219296aSGreg Roach     */
13489219296aSGreg Roach    public function firstEvent(): string
13499219296aSGreg Roach    {
13509219296aSGreg Roach        return $this->eventRepository->firstEvent();
13519219296aSGreg Roach    }
13529219296aSGreg Roach
13539219296aSGreg Roach    /**
13540dcd9387SGreg Roach     * @return string
13559219296aSGreg Roach     */
13569219296aSGreg Roach    public function firstEventYear(): string
13579219296aSGreg Roach    {
13589219296aSGreg Roach        return $this->eventRepository->firstEventYear();
13599219296aSGreg Roach    }
13609219296aSGreg Roach
13619219296aSGreg Roach    /**
13620dcd9387SGreg Roach     * @return string
13639219296aSGreg Roach     */
13649219296aSGreg Roach    public function firstEventType(): string
13659219296aSGreg Roach    {
13669219296aSGreg Roach        return $this->eventRepository->firstEventType();
13679219296aSGreg Roach    }
13689219296aSGreg Roach
13699219296aSGreg Roach    /**
13700dcd9387SGreg Roach     * @return string
13719219296aSGreg Roach     */
13729219296aSGreg Roach    public function firstEventName(): string
13739219296aSGreg Roach    {
13749219296aSGreg Roach        return $this->eventRepository->firstEventName();
13759219296aSGreg Roach    }
13769219296aSGreg Roach
13779219296aSGreg Roach    /**
13780dcd9387SGreg Roach     * @return string
13799219296aSGreg Roach     */
13809219296aSGreg Roach    public function firstEventPlace(): string
13819219296aSGreg Roach    {
13829219296aSGreg Roach        return $this->eventRepository->firstEventPlace();
13839219296aSGreg Roach    }
13849219296aSGreg Roach
13859219296aSGreg Roach    /**
13860dcd9387SGreg Roach     * @return string
13879219296aSGreg Roach     */
13889219296aSGreg Roach    public function lastEvent(): string
13899219296aSGreg Roach    {
13909219296aSGreg Roach        return $this->eventRepository->lastEvent();
13919219296aSGreg Roach    }
13929219296aSGreg Roach
13939219296aSGreg Roach    /**
13940dcd9387SGreg Roach     * @return string
13959219296aSGreg Roach     */
13969219296aSGreg Roach    public function lastEventYear(): string
13979219296aSGreg Roach    {
13989219296aSGreg Roach        return $this->eventRepository->lastEventYear();
13999219296aSGreg Roach    }
14009219296aSGreg Roach
14019219296aSGreg Roach    /**
14020dcd9387SGreg Roach     * @return string
14039219296aSGreg Roach     */
14049219296aSGreg Roach    public function lastEventType(): string
14059219296aSGreg Roach    {
14069219296aSGreg Roach        return $this->eventRepository->lastEventType();
14079219296aSGreg Roach    }
14089219296aSGreg Roach
14099219296aSGreg Roach    /**
14100dcd9387SGreg Roach     * @return string
14119219296aSGreg Roach     */
14129219296aSGreg Roach    public function lastEventName(): string
14139219296aSGreg Roach    {
14149219296aSGreg Roach        return $this->eventRepository->lastEventName();
14159219296aSGreg Roach    }
14169219296aSGreg Roach
14179219296aSGreg Roach    /**
14180dcd9387SGreg Roach     * @return string
14199219296aSGreg Roach     */
14209219296aSGreg Roach    public function lastEventPlace(): string
14219219296aSGreg Roach    {
14229219296aSGreg Roach        return $this->eventRepository->lastEventType();
14239219296aSGreg Roach    }
14249219296aSGreg Roach
14259219296aSGreg Roach    /**
14260dcd9387SGreg Roach     * @return string
14279219296aSGreg Roach     */
14289219296aSGreg Roach    public function firstMarriage(): string
14299219296aSGreg Roach    {
14309219296aSGreg Roach        return $this->familyDatesRepository->firstMarriage();
14319219296aSGreg Roach    }
14329219296aSGreg Roach
14339219296aSGreg Roach    /**
14340dcd9387SGreg Roach     * @return string
14359219296aSGreg Roach     */
14369219296aSGreg Roach    public function firstMarriageYear(): string
14379219296aSGreg Roach    {
14389219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageYear();
14399219296aSGreg Roach    }
14409219296aSGreg Roach
14419219296aSGreg Roach    /**
14420dcd9387SGreg Roach     * @return string
14439219296aSGreg Roach     */
14449219296aSGreg Roach    public function firstMarriageName(): string
14459219296aSGreg Roach    {
14469219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageName();
14479219296aSGreg Roach    }
14489219296aSGreg Roach
14499219296aSGreg Roach    /**
14500dcd9387SGreg Roach     * @return string
14519219296aSGreg Roach     */
14529219296aSGreg Roach    public function firstMarriagePlace(): string
14539219296aSGreg Roach    {
14549219296aSGreg Roach        return $this->familyDatesRepository->firstMarriagePlace();
14559219296aSGreg Roach    }
14569219296aSGreg Roach
14579219296aSGreg Roach    /**
14580dcd9387SGreg Roach     * @return string
14599219296aSGreg Roach     */
14609219296aSGreg Roach    public function lastMarriage(): string
14619219296aSGreg Roach    {
14629219296aSGreg Roach        return $this->familyDatesRepository->lastMarriage();
14639219296aSGreg Roach    }
14649219296aSGreg Roach
14659219296aSGreg Roach    /**
14660dcd9387SGreg Roach     * @return string
14679219296aSGreg Roach     */
14689219296aSGreg Roach    public function lastMarriageYear(): string
14699219296aSGreg Roach    {
14709219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageYear();
14719219296aSGreg Roach    }
14729219296aSGreg Roach
14739219296aSGreg Roach    /**
14740dcd9387SGreg Roach     * @return string
14759219296aSGreg Roach     */
14769219296aSGreg Roach    public function lastMarriageName(): string
14779219296aSGreg Roach    {
14789219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageName();
14799219296aSGreg Roach    }
14809219296aSGreg Roach
14819219296aSGreg Roach    /**
14820dcd9387SGreg Roach     * @return string
14839219296aSGreg Roach     */
14849219296aSGreg Roach    public function lastMarriagePlace(): string
14859219296aSGreg Roach    {
14869219296aSGreg Roach        return $this->familyDatesRepository->lastMarriagePlace();
14879219296aSGreg Roach    }
14889219296aSGreg Roach
14899219296aSGreg Roach    /**
14900dcd9387SGreg Roach     * @param int $year1
14910dcd9387SGreg Roach     * @param int $year2
14920dcd9387SGreg Roach     *
14930dcd9387SGreg Roach     * @return Builder
14949219296aSGreg Roach     */
1495e6f3d5e2SGreg Roach    public function statsMarriageQuery(int $year1 = -1, int $year2 = -1): Builder
14969219296aSGreg Roach    {
1497e6f3d5e2SGreg Roach        return $this->familyRepository->statsMarriageQuery($year1, $year2);
1498e6f3d5e2SGreg Roach    }
1499e6f3d5e2SGreg Roach
1500e6f3d5e2SGreg Roach    /**
15010dcd9387SGreg Roach     * @param int $year1
15020dcd9387SGreg Roach     * @param int $year2
15030dcd9387SGreg Roach     *
15040dcd9387SGreg Roach     * @return Builder
1505e6f3d5e2SGreg Roach     */
1506e6f3d5e2SGreg Roach    public function statsFirstMarriageQuery(int $year1 = -1, int $year2 = -1): Builder
1507e6f3d5e2SGreg Roach    {
1508e6f3d5e2SGreg Roach        return $this->familyRepository->statsFirstMarriageQuery($year1, $year2);
15099219296aSGreg Roach    }
15109219296aSGreg Roach
15119219296aSGreg Roach    /**
15120dcd9387SGreg Roach     * @param string|null $color_from
15130dcd9387SGreg Roach     * @param string|null $color_to
15140dcd9387SGreg Roach     *
15150dcd9387SGreg Roach     * @return string
15169219296aSGreg Roach     */
151788de55fdSRico Sonntag    public function statsMarr(string $color_from = null, string $color_to = null): string
15189219296aSGreg Roach    {
151988de55fdSRico Sonntag        return $this->familyRepository->statsMarr($color_from, $color_to);
15209219296aSGreg Roach    }
15219219296aSGreg Roach
15229219296aSGreg Roach    /**
15230dcd9387SGreg Roach     * @return string
15249219296aSGreg Roach     */
15259219296aSGreg Roach    public function firstDivorce(): string
15269219296aSGreg Roach    {
15279219296aSGreg Roach        return $this->familyDatesRepository->firstDivorce();
15289219296aSGreg Roach    }
15299219296aSGreg Roach
15309219296aSGreg Roach    /**
15310dcd9387SGreg Roach     * @return string
15329219296aSGreg Roach     */
15339219296aSGreg Roach    public function firstDivorceYear(): string
15349219296aSGreg Roach    {
15359219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceYear();
15369219296aSGreg Roach    }
15379219296aSGreg Roach
15389219296aSGreg Roach    /**
15390dcd9387SGreg Roach     * @return string
15409219296aSGreg Roach     */
15419219296aSGreg Roach    public function firstDivorceName(): string
15429219296aSGreg Roach    {
15439219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceName();
15449219296aSGreg Roach    }
15459219296aSGreg Roach
15469219296aSGreg Roach    /**
15470dcd9387SGreg Roach     * @return string
15489219296aSGreg Roach     */
15499219296aSGreg Roach    public function firstDivorcePlace(): string
15509219296aSGreg Roach    {
15519219296aSGreg Roach        return $this->familyDatesRepository->firstDivorcePlace();
15529219296aSGreg Roach    }
15539219296aSGreg Roach
15549219296aSGreg Roach    /**
15550dcd9387SGreg Roach     * @return string
15569219296aSGreg Roach     */
15579219296aSGreg Roach    public function lastDivorce(): string
15589219296aSGreg Roach    {
15599219296aSGreg Roach        return $this->familyDatesRepository->lastDivorce();
15609219296aSGreg Roach    }
15619219296aSGreg Roach
15629219296aSGreg Roach    /**
15630dcd9387SGreg Roach     * @return string
15649219296aSGreg Roach     */
15659219296aSGreg Roach    public function lastDivorceYear(): string
15669219296aSGreg Roach    {
15679219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceYear();
15689219296aSGreg Roach    }
15699219296aSGreg Roach
15709219296aSGreg Roach    /**
15710dcd9387SGreg Roach     * @return string
15729219296aSGreg Roach     */
15739219296aSGreg Roach    public function lastDivorceName(): string
15749219296aSGreg Roach    {
15759219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceName();
15769219296aSGreg Roach    }
15779219296aSGreg Roach
15789219296aSGreg Roach    /**
15790dcd9387SGreg Roach     * @return string
15809219296aSGreg Roach     */
15819219296aSGreg Roach    public function lastDivorcePlace(): string
15829219296aSGreg Roach    {
15839219296aSGreg Roach        return $this->familyDatesRepository->lastDivorcePlace();
15849219296aSGreg Roach    }
15859219296aSGreg Roach
15869219296aSGreg Roach    /**
15870dcd9387SGreg Roach     * @param string|null $color_from
15880dcd9387SGreg Roach     * @param string|null $color_to
15890dcd9387SGreg Roach     *
15900dcd9387SGreg Roach     * @return string
15919219296aSGreg Roach     */
159288de55fdSRico Sonntag    public function statsDiv(string $color_from = null, string $color_to = null): string
15939219296aSGreg Roach    {
159488de55fdSRico Sonntag        return $this->familyRepository->statsDiv($color_from, $color_to);
15959219296aSGreg Roach    }
15969219296aSGreg Roach
15979219296aSGreg Roach    /**
15980dcd9387SGreg Roach     * @return string
15999219296aSGreg Roach     */
16009219296aSGreg Roach    public function youngestMarriageFemale(): string
16019219296aSGreg Roach    {
16029219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemale();
16039219296aSGreg Roach    }
16049219296aSGreg Roach
16059219296aSGreg Roach    /**
16060dcd9387SGreg Roach     * @return string
16079219296aSGreg Roach     */
16089219296aSGreg Roach    public function youngestMarriageFemaleName(): string
16099219296aSGreg Roach    {
16109219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleName();
16119219296aSGreg Roach    }
16129219296aSGreg Roach
16139219296aSGreg Roach    /**
16140dcd9387SGreg Roach     * @param string $show_years
16150dcd9387SGreg Roach     *
16160dcd9387SGreg Roach     * @return string
16179219296aSGreg Roach     */
16189219296aSGreg Roach    public function youngestMarriageFemaleAge(string $show_years = ''): string
16199219296aSGreg Roach    {
16209219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleAge($show_years);
16219219296aSGreg Roach    }
16229219296aSGreg Roach
16239219296aSGreg Roach    /**
16240dcd9387SGreg Roach     * @return string
16259219296aSGreg Roach     */
16269219296aSGreg Roach    public function oldestMarriageFemale(): string
16279219296aSGreg Roach    {
16289219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemale();
16299219296aSGreg Roach    }
16309219296aSGreg Roach
16319219296aSGreg Roach    /**
16320dcd9387SGreg Roach     * @return string
16339219296aSGreg Roach     */
16349219296aSGreg Roach    public function oldestMarriageFemaleName(): string
16359219296aSGreg Roach    {
16369219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleName();
16379219296aSGreg Roach    }
16389219296aSGreg Roach
16399219296aSGreg Roach    /**
16400dcd9387SGreg Roach     * @param string $show_years
16410dcd9387SGreg Roach     *
16420dcd9387SGreg Roach     * @return string
16439219296aSGreg Roach     */
16449219296aSGreg Roach    public function oldestMarriageFemaleAge(string $show_years = ''): string
16459219296aSGreg Roach    {
16469219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleAge($show_years);
16479219296aSGreg Roach    }
16489219296aSGreg Roach
16499219296aSGreg Roach    /**
16500dcd9387SGreg Roach     * @return string
16519219296aSGreg Roach     */
16529219296aSGreg Roach    public function youngestMarriageMale(): string
16539219296aSGreg Roach    {
16549219296aSGreg Roach        return $this->familyRepository->youngestMarriageMale();
16559219296aSGreg Roach    }
16569219296aSGreg Roach
16579219296aSGreg Roach    /**
16580dcd9387SGreg Roach     * @return string
16599219296aSGreg Roach     */
16609219296aSGreg Roach    public function youngestMarriageMaleName(): string
16619219296aSGreg Roach    {
16629219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleName();
16639219296aSGreg Roach    }
16649219296aSGreg Roach
16659219296aSGreg Roach    /**
16660dcd9387SGreg Roach     * @param string $show_years
16670dcd9387SGreg Roach     *
16680dcd9387SGreg Roach     * @return string
16699219296aSGreg Roach     */
16709219296aSGreg Roach    public function youngestMarriageMaleAge(string $show_years = ''): string
16719219296aSGreg Roach    {
16729219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleAge($show_years);
16739219296aSGreg Roach    }
16749219296aSGreg Roach
16759219296aSGreg Roach    /**
16760dcd9387SGreg Roach     * @return string
16779219296aSGreg Roach     */
16789219296aSGreg Roach    public function oldestMarriageMale(): string
16799219296aSGreg Roach    {
16809219296aSGreg Roach        return $this->familyRepository->oldestMarriageMale();
16819219296aSGreg Roach    }
16829219296aSGreg Roach
16839219296aSGreg Roach    /**
16840dcd9387SGreg Roach     * @return string
16859219296aSGreg Roach     */
16869219296aSGreg Roach    public function oldestMarriageMaleName(): string
16879219296aSGreg Roach    {
16889219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleName();
16899219296aSGreg Roach    }
16909219296aSGreg Roach
16919219296aSGreg Roach    /**
16920dcd9387SGreg Roach     * @param string $show_years
16930dcd9387SGreg Roach     *
16940dcd9387SGreg Roach     * @return string
16959219296aSGreg Roach     */
16969219296aSGreg Roach    public function oldestMarriageMaleAge(string $show_years = ''): string
16979219296aSGreg Roach    {
16989219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleAge($show_years);
16999219296aSGreg Roach    }
17009219296aSGreg Roach
17019219296aSGreg Roach    /**
17020dcd9387SGreg Roach     * @param string $sex
17030dcd9387SGreg Roach     * @param int    $year1
17040dcd9387SGreg Roach     * @param int    $year2
17050dcd9387SGreg Roach     *
17060dcd9387SGreg Roach     * @return array
17079219296aSGreg Roach     */
1708afa8d404SGreg Roach    public function statsMarrAgeQuery(string $sex, int $year1 = -1, int $year2 = -1): array
17099219296aSGreg Roach    {
17109219296aSGreg Roach        return $this->familyRepository->statsMarrAgeQuery($sex, $year1, $year2);
17119219296aSGreg Roach    }
17129219296aSGreg Roach
17139219296aSGreg Roach    /**
17140dcd9387SGreg Roach     * @return string
17159219296aSGreg Roach     */
171688de55fdSRico Sonntag    public function statsMarrAge(): string
17179219296aSGreg Roach    {
171888de55fdSRico Sonntag        return $this->familyRepository->statsMarrAge();
17199219296aSGreg Roach    }
17209219296aSGreg Roach
17219219296aSGreg Roach    /**
17220dcd9387SGreg Roach     * @param string $total
17230dcd9387SGreg Roach     *
17240dcd9387SGreg Roach     * @return string
17259219296aSGreg Roach     */
17269219296aSGreg Roach    public function ageBetweenSpousesMF(string $total = '10'): string
17279219296aSGreg Roach    {
17289219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMF((int) $total);
17299219296aSGreg Roach    }
17309219296aSGreg Roach
17319219296aSGreg Roach    /**
17320dcd9387SGreg Roach     * @param string $total
17330dcd9387SGreg Roach     *
17340dcd9387SGreg Roach     * @return string
17359219296aSGreg Roach     */
17369219296aSGreg Roach    public function ageBetweenSpousesMFList(string $total = '10'): string
17379219296aSGreg Roach    {
17389219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMFList((int) $total);
17399219296aSGreg Roach    }
17409219296aSGreg Roach
17419219296aSGreg Roach    /**
17420dcd9387SGreg Roach     * @param string $total
17430dcd9387SGreg Roach     *
17440dcd9387SGreg Roach     * @return string
17459219296aSGreg Roach     */
17469219296aSGreg Roach    public function ageBetweenSpousesFM(string $total = '10'): string
17479219296aSGreg Roach    {
17489219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFM((int) $total);
17499219296aSGreg Roach    }
17509219296aSGreg Roach
17519219296aSGreg Roach    /**
17520dcd9387SGreg Roach     * @param string $total
17530dcd9387SGreg Roach     *
17540dcd9387SGreg Roach     * @return string
17559219296aSGreg Roach     */
17569219296aSGreg Roach    public function ageBetweenSpousesFMList(string $total = '10'): string
17579219296aSGreg Roach    {
17589219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFMList((int) $total);
17599219296aSGreg Roach    }
17609219296aSGreg Roach
17619219296aSGreg Roach    /**
17620dcd9387SGreg Roach     * @return string
17639219296aSGreg Roach     */
17649219296aSGreg Roach    public function topAgeOfMarriageFamily(): string
17659219296aSGreg Roach    {
17669219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamily();
17679219296aSGreg Roach    }
17689219296aSGreg Roach
17699219296aSGreg Roach    /**
17700dcd9387SGreg Roach     * @return string
17719219296aSGreg Roach     */
17729219296aSGreg Roach    public function topAgeOfMarriage(): string
17739219296aSGreg Roach    {
17749219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriage();
17759219296aSGreg Roach    }
17769219296aSGreg Roach
17779219296aSGreg Roach    /**
17780dcd9387SGreg Roach     * @param string $total
17790dcd9387SGreg Roach     *
17800dcd9387SGreg Roach     * @return string
17819219296aSGreg Roach     */
17829219296aSGreg Roach    public function topAgeOfMarriageFamilies(string $total = '10'): string
17839219296aSGreg Roach    {
17849219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamilies((int) $total);
17859219296aSGreg Roach    }
17869219296aSGreg Roach
17879219296aSGreg Roach    /**
17880dcd9387SGreg Roach     * @param string $total
17890dcd9387SGreg Roach     *
17900dcd9387SGreg Roach     * @return string
17919219296aSGreg Roach     */
17929219296aSGreg Roach    public function topAgeOfMarriageFamiliesList(string $total = '10'): string
17939219296aSGreg Roach    {
17949219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamiliesList((int) $total);
17959219296aSGreg Roach    }
17969219296aSGreg Roach
17979219296aSGreg Roach    /**
17980dcd9387SGreg Roach     * @return string
17999219296aSGreg Roach     */
18009219296aSGreg Roach    public function minAgeOfMarriageFamily(): string
18019219296aSGreg Roach    {
18029219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamily();
18039219296aSGreg Roach    }
18049219296aSGreg Roach
18059219296aSGreg Roach    /**
18060dcd9387SGreg Roach     * @return string
18079219296aSGreg Roach     */
18089219296aSGreg Roach    public function minAgeOfMarriage(): string
18099219296aSGreg Roach    {
18109219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriage();
18119219296aSGreg Roach    }
18129219296aSGreg Roach
18139219296aSGreg Roach    /**
18140dcd9387SGreg Roach     * @param string $total
18150dcd9387SGreg Roach     *
18160dcd9387SGreg Roach     * @return string
18179219296aSGreg Roach     */
18189219296aSGreg Roach    public function minAgeOfMarriageFamilies(string $total = '10'): string
18199219296aSGreg Roach    {
18209219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamilies((int) $total);
18219219296aSGreg Roach    }
18229219296aSGreg Roach
18239219296aSGreg Roach    /**
18240dcd9387SGreg Roach     * @param string $total
18250dcd9387SGreg Roach     *
18260dcd9387SGreg Roach     * @return string
18279219296aSGreg Roach     */
18289219296aSGreg Roach    public function minAgeOfMarriageFamiliesList(string $total = '10'): string
18299219296aSGreg Roach    {
18309219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamiliesList((int) $total);
18319219296aSGreg Roach    }
18329219296aSGreg Roach
18339219296aSGreg Roach    /**
18340dcd9387SGreg Roach     * @return string
18359219296aSGreg Roach     */
18369219296aSGreg Roach    public function youngestMother(): string
18379219296aSGreg Roach    {
18389219296aSGreg Roach        return $this->familyRepository->youngestMother();
18399219296aSGreg Roach    }
18409219296aSGreg Roach
18419219296aSGreg Roach    /**
18420dcd9387SGreg Roach     * @return string
18439219296aSGreg Roach     */
18449219296aSGreg Roach    public function youngestMotherName(): string
18459219296aSGreg Roach    {
18469219296aSGreg Roach        return $this->familyRepository->youngestMotherName();
18479219296aSGreg Roach    }
18489219296aSGreg Roach
18499219296aSGreg Roach    /**
18500dcd9387SGreg Roach     * @param string $show_years
18510dcd9387SGreg Roach     *
18520dcd9387SGreg Roach     * @return string
18539219296aSGreg Roach     */
18549219296aSGreg Roach    public function youngestMotherAge(string $show_years = ''): string
18559219296aSGreg Roach    {
18569219296aSGreg Roach        return $this->familyRepository->youngestMotherAge($show_years);
18579219296aSGreg Roach    }
18589219296aSGreg Roach
18599219296aSGreg Roach    /**
18600dcd9387SGreg Roach     * @return string
18619219296aSGreg Roach     */
18629219296aSGreg Roach    public function oldestMother(): string
18639219296aSGreg Roach    {
18649219296aSGreg Roach        return $this->familyRepository->oldestMother();
18659219296aSGreg Roach    }
18669219296aSGreg Roach
18679219296aSGreg Roach    /**
18680dcd9387SGreg Roach     * @return string
18699219296aSGreg Roach     */
18709219296aSGreg Roach    public function oldestMotherName(): string
18719219296aSGreg Roach    {
18729219296aSGreg Roach        return $this->familyRepository->oldestMotherName();
18739219296aSGreg Roach    }
18749219296aSGreg Roach
18759219296aSGreg Roach    /**
18760dcd9387SGreg Roach     * @param string $show_years
18770dcd9387SGreg Roach     *
18780dcd9387SGreg Roach     * @return string
18799219296aSGreg Roach     */
18809219296aSGreg Roach    public function oldestMotherAge(string $show_years = ''): string
18819219296aSGreg Roach    {
18829219296aSGreg Roach        return $this->familyRepository->oldestMotherAge($show_years);
18839219296aSGreg Roach    }
18849219296aSGreg Roach
18859219296aSGreg Roach    /**
18860dcd9387SGreg Roach     * @return string
18879219296aSGreg Roach     */
18889219296aSGreg Roach    public function youngestFather(): string
18899219296aSGreg Roach    {
18909219296aSGreg Roach        return $this->familyRepository->youngestFather();
18919219296aSGreg Roach    }
18929219296aSGreg Roach
18939219296aSGreg Roach    /**
18940dcd9387SGreg Roach     * @return string
18959219296aSGreg Roach     */
18969219296aSGreg Roach    public function youngestFatherName(): string
18979219296aSGreg Roach    {
18989219296aSGreg Roach        return $this->familyRepository->youngestFatherName();
18999219296aSGreg Roach    }
19009219296aSGreg Roach
19019219296aSGreg Roach    /**
19020dcd9387SGreg Roach     * @param string $show_years
19030dcd9387SGreg Roach     *
19040dcd9387SGreg Roach     * @return string
19059219296aSGreg Roach     */
19069219296aSGreg Roach    public function youngestFatherAge(string $show_years = ''): string
19079219296aSGreg Roach    {
19089219296aSGreg Roach        return $this->familyRepository->youngestFatherAge($show_years);
19099219296aSGreg Roach    }
19109219296aSGreg Roach
19119219296aSGreg Roach    /**
19120dcd9387SGreg Roach     * @return string
19139219296aSGreg Roach     */
19149219296aSGreg Roach    public function oldestFather(): string
19159219296aSGreg Roach    {
19169219296aSGreg Roach        return $this->familyRepository->oldestFather();
19179219296aSGreg Roach    }
19189219296aSGreg Roach
19199219296aSGreg Roach    /**
19200dcd9387SGreg Roach     * @return string
19219219296aSGreg Roach     */
19229219296aSGreg Roach    public function oldestFatherName(): string
19239219296aSGreg Roach    {
19249219296aSGreg Roach        return $this->familyRepository->oldestFatherName();
19259219296aSGreg Roach    }
19269219296aSGreg Roach
19279219296aSGreg Roach    /**
19280dcd9387SGreg Roach     * @param string $show_years
19290dcd9387SGreg Roach     *
19300dcd9387SGreg Roach     * @return string
19319219296aSGreg Roach     */
19329219296aSGreg Roach    public function oldestFatherAge(string $show_years = ''): string
19339219296aSGreg Roach    {
19349219296aSGreg Roach        return $this->familyRepository->oldestFatherAge($show_years);
19359219296aSGreg Roach    }
19369219296aSGreg Roach
19379219296aSGreg Roach    /**
19380dcd9387SGreg Roach     * @return string
19399219296aSGreg Roach     */
19409219296aSGreg Roach    public function totalMarriedMales(): string
19419219296aSGreg Roach    {
19429219296aSGreg Roach        return $this->familyRepository->totalMarriedMales();
19439219296aSGreg Roach    }
19449219296aSGreg Roach
19459219296aSGreg Roach    /**
19460dcd9387SGreg Roach     * @return string
19479219296aSGreg Roach     */
19489219296aSGreg Roach    public function totalMarriedFemales(): string
19499219296aSGreg Roach    {
19509219296aSGreg Roach        return $this->familyRepository->totalMarriedFemales();
19519219296aSGreg Roach    }
19529219296aSGreg Roach
19539219296aSGreg Roach    /**
19540dcd9387SGreg Roach     * @param int $year1
19550dcd9387SGreg Roach     * @param int $year2
19560dcd9387SGreg Roach     *
19570dcd9387SGreg Roach     * @return Builder
19589219296aSGreg Roach     */
1959999da590SGreg Roach    public function monthFirstChildQuery(int $year1 = -1, int $year2 = -1): Builder
19609219296aSGreg Roach    {
1961999da590SGreg Roach        return $this->familyRepository->monthFirstChildQuery($year1, $year2);
1962999da590SGreg Roach    }
1963999da590SGreg Roach
1964999da590SGreg Roach    /**
19650dcd9387SGreg Roach     * @param int $year1
19660dcd9387SGreg Roach     * @param int $year2
19670dcd9387SGreg Roach     *
19680dcd9387SGreg Roach     * @return Builder
1969999da590SGreg Roach     */
1970999da590SGreg Roach    public function monthFirstChildBySexQuery(int $year1 = -1, int $year2 = -1): Builder
1971999da590SGreg Roach    {
1972999da590SGreg Roach        return $this->familyRepository->monthFirstChildBySexQuery($year1, $year2);
19739219296aSGreg Roach    }
19749219296aSGreg Roach
19759219296aSGreg Roach    /**
19760dcd9387SGreg Roach     * @return string
19779219296aSGreg Roach     */
19789219296aSGreg Roach    public function largestFamily(): string
19799219296aSGreg Roach    {
19809219296aSGreg Roach        return $this->familyRepository->largestFamily();
19819219296aSGreg Roach    }
19829219296aSGreg Roach
19839219296aSGreg Roach    /**
19840dcd9387SGreg Roach     * @return string
19859219296aSGreg Roach     */
19869219296aSGreg Roach    public function largestFamilySize(): string
19879219296aSGreg Roach    {
19889219296aSGreg Roach        return $this->familyRepository->largestFamilySize();
19899219296aSGreg Roach    }
19909219296aSGreg Roach
19919219296aSGreg Roach    /**
19920dcd9387SGreg Roach     * @return string
19939219296aSGreg Roach     */
19949219296aSGreg Roach    public function largestFamilyName(): string
19959219296aSGreg Roach    {
19969219296aSGreg Roach        return $this->familyRepository->largestFamilyName();
19979219296aSGreg Roach    }
19989219296aSGreg Roach
19999219296aSGreg Roach    /**
20000dcd9387SGreg Roach     * @param string $total
20010dcd9387SGreg Roach     *
20020dcd9387SGreg Roach     * @return string
20039219296aSGreg Roach     */
20049219296aSGreg Roach    public function topTenLargestFamily(string $total = '10'): string
20059219296aSGreg Roach    {
20069219296aSGreg Roach        return $this->familyRepository->topTenLargestFamily((int) $total);
20079219296aSGreg Roach    }
20089219296aSGreg Roach
20099219296aSGreg Roach    /**
20100dcd9387SGreg Roach     * @param string $total
20110dcd9387SGreg Roach     *
20120dcd9387SGreg Roach     * @return string
20139219296aSGreg Roach     */
20149219296aSGreg Roach    public function topTenLargestFamilyList(string $total = '10'): string
20159219296aSGreg Roach    {
20169219296aSGreg Roach        return $this->familyRepository->topTenLargestFamilyList((int) $total);
20179219296aSGreg Roach    }
20189219296aSGreg Roach
20199219296aSGreg Roach    /**
20200dcd9387SGreg Roach     * @param string|null $color_from
20210dcd9387SGreg Roach     * @param string|null $color_to
20220dcd9387SGreg Roach     * @param string      $total
20230dcd9387SGreg Roach     *
20240dcd9387SGreg Roach     * @return string
20259219296aSGreg Roach     */
20269219296aSGreg Roach    public function chartLargestFamilies(
20279219296aSGreg Roach        string $color_from = null,
20289219296aSGreg Roach        string $color_to = null,
20299219296aSGreg Roach        string $total = '10'
2030c81b7bf1SGreg Roach    ): string {
203188de55fdSRico Sonntag        return $this->familyRepository->chartLargestFamilies($color_from, $color_to, (int) $total);
20329219296aSGreg Roach    }
20339219296aSGreg Roach
20349219296aSGreg Roach    /**
20350dcd9387SGreg Roach     * @return string
20369219296aSGreg Roach     */
20379219296aSGreg Roach    public function totalChildren(): string
20389219296aSGreg Roach    {
20399219296aSGreg Roach        return $this->familyRepository->totalChildren();
20409219296aSGreg Roach    }
20419219296aSGreg Roach
20429219296aSGreg Roach    /**
20430dcd9387SGreg Roach     * @return string
20449219296aSGreg Roach     */
20459219296aSGreg Roach    public function averageChildren(): string
20469219296aSGreg Roach    {
20479219296aSGreg Roach        return $this->familyRepository->averageChildren();
20489219296aSGreg Roach    }
20499219296aSGreg Roach
20509219296aSGreg Roach    /**
20510dcd9387SGreg Roach     * @param int $year1
20520dcd9387SGreg Roach     * @param int $year2
20530dcd9387SGreg Roach     *
20540dcd9387SGreg Roach     * @return array
20559219296aSGreg Roach     */
2056b1126ab4SGreg Roach    public function statsChildrenQuery(int $year1 = -1, int $year2 = -1): array
20579219296aSGreg Roach    {
2058b1126ab4SGreg Roach        return $this->familyRepository->statsChildrenQuery($year1, $year2);
20599219296aSGreg Roach    }
20609219296aSGreg Roach
20619219296aSGreg Roach    /**
20620dcd9387SGreg Roach     * @return string
20639219296aSGreg Roach     */
2064cde1d378SGreg Roach    public function statsChildren(): string
20659219296aSGreg Roach    {
2066cde1d378SGreg Roach        return $this->familyRepository->statsChildren();
20679219296aSGreg Roach    }
20689219296aSGreg Roach
20699219296aSGreg Roach    /**
20700dcd9387SGreg Roach     * @param string $total
20710dcd9387SGreg Roach     *
20720dcd9387SGreg Roach     * @return string
20739219296aSGreg Roach     */
20749219296aSGreg Roach    public function topAgeBetweenSiblingsName(string $total = '10'): string
20759219296aSGreg Roach    {
20769219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsName((int) $total);
20779219296aSGreg Roach    }
20789219296aSGreg Roach
20799219296aSGreg Roach    /**
20800dcd9387SGreg Roach     * @param string $total
20810dcd9387SGreg Roach     *
20820dcd9387SGreg Roach     * @return string
20839219296aSGreg Roach     */
20849219296aSGreg Roach    public function topAgeBetweenSiblings(string $total = '10'): string
20859219296aSGreg Roach    {
20869219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblings((int) $total);
20879219296aSGreg Roach    }
20889219296aSGreg Roach
20899219296aSGreg Roach    /**
20900dcd9387SGreg Roach     * @param string $total
20910dcd9387SGreg Roach     *
20920dcd9387SGreg Roach     * @return string
20939219296aSGreg Roach     */
20949219296aSGreg Roach    public function topAgeBetweenSiblingsFullName(string $total = '10'): string
20959219296aSGreg Roach    {
20969219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsFullName((int) $total);
20979219296aSGreg Roach    }
20989219296aSGreg Roach
20999219296aSGreg Roach    /**
21000dcd9387SGreg Roach     * @param string $total
21010dcd9387SGreg Roach     * @param string $one
21020dcd9387SGreg Roach     *
21030dcd9387SGreg Roach     * @return string
21049219296aSGreg Roach     */
21059219296aSGreg Roach    public function topAgeBetweenSiblingsList(string $total = '10', string $one = ''): string
21069219296aSGreg Roach    {
21079219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsList((int) $total, $one);
21089219296aSGreg Roach    }
21099219296aSGreg Roach
21109219296aSGreg Roach    /**
21110dcd9387SGreg Roach     * @return string
21129219296aSGreg Roach     */
21139219296aSGreg Roach    public function noChildrenFamilies(): string
21149219296aSGreg Roach    {
21159219296aSGreg Roach        return $this->familyRepository->noChildrenFamilies();
21169219296aSGreg Roach    }
21179219296aSGreg Roach
21189219296aSGreg Roach    /**
21190dcd9387SGreg Roach     * @param string $type
21200dcd9387SGreg Roach     *
21210dcd9387SGreg Roach     * @return string
21229219296aSGreg Roach     */
21239219296aSGreg Roach    public function noChildrenFamiliesList(string $type = 'list'): string
21249219296aSGreg Roach    {
21259219296aSGreg Roach        return $this->familyRepository->noChildrenFamiliesList($type);
21269219296aSGreg Roach    }
21279219296aSGreg Roach
21289219296aSGreg Roach    /**
21290dcd9387SGreg Roach     * @param string $year1
21300dcd9387SGreg Roach     * @param string $year2
21310dcd9387SGreg Roach     *
21320dcd9387SGreg Roach     * @return string
21339219296aSGreg Roach     */
21349219296aSGreg Roach    public function chartNoChildrenFamilies(
21359219296aSGreg Roach        string $year1 = '-1',
21369219296aSGreg Roach        string $year2 = '-1'
2137c81b7bf1SGreg Roach    ): string {
213888de55fdSRico Sonntag        return $this->familyRepository->chartNoChildrenFamilies((int) $year1, (int) $year2);
21399219296aSGreg Roach    }
21409219296aSGreg Roach
21419219296aSGreg Roach    /**
21420dcd9387SGreg Roach     * @param string $total
21430dcd9387SGreg Roach     *
21440dcd9387SGreg Roach     * @return string
21459219296aSGreg Roach     */
21469219296aSGreg Roach    public function topTenLargestGrandFamily(string $total = '10'): string
21479219296aSGreg Roach    {
21489219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamily((int) $total);
21499219296aSGreg Roach    }
21509219296aSGreg Roach
21519219296aSGreg Roach    /**
21520dcd9387SGreg Roach     * @param string $total
21530dcd9387SGreg Roach     *
21540dcd9387SGreg Roach     * @return string
21559219296aSGreg Roach     */
21569219296aSGreg Roach    public function topTenLargestGrandFamilyList(string $total = '10'): string
21579219296aSGreg Roach    {
21589219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamilyList((int) $total);
21599219296aSGreg Roach    }
21609219296aSGreg Roach
21619219296aSGreg Roach    /**
21620dcd9387SGreg Roach     * @return string
21639219296aSGreg Roach     */
21649219296aSGreg Roach    public function getCommonSurname(): string
21659219296aSGreg Roach    {
21669219296aSGreg Roach        return $this->individualRepository->getCommonSurname();
21679219296aSGreg Roach    }
21689219296aSGreg Roach
21699219296aSGreg Roach    /**
21700dcd9387SGreg Roach     * @param string $threshold
21710dcd9387SGreg Roach     * @param string $number_of_surnames
21720dcd9387SGreg Roach     * @param string $sorting
21730dcd9387SGreg Roach     *
21740dcd9387SGreg Roach     * @return string
21759219296aSGreg Roach     */
21769219296aSGreg Roach    public function commonSurnames(
21779219296aSGreg Roach        string $threshold = '1',
21789219296aSGreg Roach        string $number_of_surnames = '10',
21799219296aSGreg Roach        string $sorting = 'alpha'
2180c81b7bf1SGreg Roach    ): string {
21819219296aSGreg Roach        return $this->individualRepository->commonSurnames((int) $threshold, (int) $number_of_surnames, $sorting);
21829219296aSGreg Roach    }
21839219296aSGreg Roach
21849219296aSGreg Roach    /**
21850dcd9387SGreg Roach     * @param string $threshold
21860dcd9387SGreg Roach     * @param string $number_of_surnames
21870dcd9387SGreg Roach     * @param string $sorting
21880dcd9387SGreg Roach     *
21890dcd9387SGreg Roach     * @return string
21909219296aSGreg Roach     */
21919219296aSGreg Roach    public function commonSurnamesTotals(
21929219296aSGreg Roach        string $threshold = '1',
21939219296aSGreg Roach        string $number_of_surnames = '10',
21949219296aSGreg Roach        string $sorting = 'rcount'
2195c81b7bf1SGreg Roach    ): string {
21969219296aSGreg Roach        return $this->individualRepository->commonSurnamesTotals((int) $threshold, (int) $number_of_surnames, $sorting);
21979219296aSGreg Roach    }
21989219296aSGreg Roach
21999219296aSGreg Roach    /**
22000dcd9387SGreg Roach     * @param string $threshold
22010dcd9387SGreg Roach     * @param string $number_of_surnames
22020dcd9387SGreg Roach     * @param string $sorting
22030dcd9387SGreg Roach     *
22040dcd9387SGreg Roach     * @return string
22059219296aSGreg Roach     */
22069219296aSGreg Roach    public function commonSurnamesList(
22079219296aSGreg Roach        string $threshold = '1',
22089219296aSGreg Roach        string $number_of_surnames = '10',
22099219296aSGreg Roach        string $sorting = 'alpha'
2210c81b7bf1SGreg Roach    ): string {
22119219296aSGreg Roach        return $this->individualRepository->commonSurnamesList((int) $threshold, (int) $number_of_surnames, $sorting);
22129219296aSGreg Roach    }
22139219296aSGreg Roach
22149219296aSGreg Roach    /**
22150dcd9387SGreg Roach     * @param string $threshold
22160dcd9387SGreg Roach     * @param string $number_of_surnames
22170dcd9387SGreg Roach     * @param string $sorting
22180dcd9387SGreg Roach     *
22190dcd9387SGreg Roach     * @return string
22209219296aSGreg Roach     */
22219219296aSGreg Roach    public function commonSurnamesListTotals(
22229219296aSGreg Roach        string $threshold = '1',
22239219296aSGreg Roach        string $number_of_surnames = '10',
22249219296aSGreg Roach        string $sorting = 'rcount'
2225c81b7bf1SGreg Roach    ): string {
22269219296aSGreg Roach        return $this->individualRepository
22279219296aSGreg Roach            ->commonSurnamesListTotals((int) $threshold, (int) $number_of_surnames, $sorting);
22289219296aSGreg Roach    }
22299219296aSGreg Roach
22309219296aSGreg Roach    /**
22310dcd9387SGreg Roach     * @param string|null $color_from
22320dcd9387SGreg Roach     * @param string|null $color_to
22330dcd9387SGreg Roach     * @param string      $number_of_surnames
22340dcd9387SGreg Roach     *
22350dcd9387SGreg Roach     * @return string
22369219296aSGreg Roach     */
22379219296aSGreg Roach    public function chartCommonSurnames(
22389219296aSGreg Roach        string $color_from = null,
22399219296aSGreg Roach        string $color_to = null,
22409219296aSGreg Roach        string $number_of_surnames = '10'
2241c81b7bf1SGreg Roach    ): string {
22429219296aSGreg Roach        return $this->individualRepository
224388de55fdSRico Sonntag            ->chartCommonSurnames($color_from, $color_to, (int) $number_of_surnames);
22449219296aSGreg Roach    }
22459219296aSGreg Roach
22469219296aSGreg Roach    /**
22470dcd9387SGreg Roach     * @param string $threshold
22480dcd9387SGreg Roach     * @param string $maxtoshow
22490dcd9387SGreg Roach     *
22500dcd9387SGreg Roach     * @return string
22519219296aSGreg Roach     */
22529219296aSGreg Roach    public function commonGiven(string $threshold = '1', string $maxtoshow = '10'): string
22539219296aSGreg Roach    {
22549219296aSGreg Roach        return $this->individualRepository->commonGiven((int) $threshold, (int) $maxtoshow);
22559219296aSGreg Roach    }
22569219296aSGreg Roach
22579219296aSGreg Roach    /**
22580dcd9387SGreg Roach     * @param string $threshold
22590dcd9387SGreg Roach     * @param string $maxtoshow
22600dcd9387SGreg Roach     *
22610dcd9387SGreg Roach     * @return string
22629219296aSGreg Roach     */
22639219296aSGreg Roach    public function commonGivenTotals(string $threshold = '1', string $maxtoshow = '10'): string
22649219296aSGreg Roach    {
22659219296aSGreg Roach        return $this->individualRepository->commonGivenTotals((int) $threshold, (int) $maxtoshow);
22669219296aSGreg Roach    }
22679219296aSGreg Roach
22689219296aSGreg Roach    /**
22690dcd9387SGreg Roach     * @param string $threshold
22700dcd9387SGreg Roach     * @param string $maxtoshow
22710dcd9387SGreg Roach     *
22720dcd9387SGreg Roach     * @return string
22739219296aSGreg Roach     */
22749219296aSGreg Roach    public function commonGivenList(string $threshold = '1', string $maxtoshow = '10'): string
22759219296aSGreg Roach    {
22769219296aSGreg Roach        return $this->individualRepository->commonGivenList((int) $threshold, (int) $maxtoshow);
22779219296aSGreg Roach    }
22789219296aSGreg Roach
22799219296aSGreg Roach    /**
22800dcd9387SGreg Roach     * @param string $threshold
22810dcd9387SGreg Roach     * @param string $maxtoshow
22820dcd9387SGreg Roach     *
22830dcd9387SGreg Roach     * @return string
22849219296aSGreg Roach     */
22859219296aSGreg Roach    public function commonGivenListTotals(string $threshold = '1', string $maxtoshow = '10'): string
22869219296aSGreg Roach    {
22879219296aSGreg Roach        return $this->individualRepository->commonGivenListTotals((int) $threshold, (int) $maxtoshow);
22889219296aSGreg Roach    }
22899219296aSGreg Roach
22909219296aSGreg Roach    /**
22910dcd9387SGreg Roach     * @param string $threshold
22920dcd9387SGreg Roach     * @param string $maxtoshow
22930dcd9387SGreg Roach     *
22940dcd9387SGreg Roach     * @return string
22959219296aSGreg Roach     */
22969219296aSGreg Roach    public function commonGivenTable(string $threshold = '1', string $maxtoshow = '10'): string
22979219296aSGreg Roach    {
22989219296aSGreg Roach        return $this->individualRepository->commonGivenTable((int) $threshold, (int) $maxtoshow);
22999219296aSGreg Roach    }
23009219296aSGreg Roach
23019219296aSGreg Roach    /**
23020dcd9387SGreg Roach     * @param string $threshold
23030dcd9387SGreg Roach     * @param string $maxtoshow
23040dcd9387SGreg Roach     *
23050dcd9387SGreg Roach     * @return string
23069219296aSGreg Roach     */
23079219296aSGreg Roach    public function commonGivenFemale(string $threshold = '1', string $maxtoshow = '10'): string
23089219296aSGreg Roach    {
23099219296aSGreg Roach        return $this->individualRepository->commonGivenFemale((int) $threshold, (int) $maxtoshow);
23109219296aSGreg Roach    }
23119219296aSGreg Roach
23129219296aSGreg Roach    /**
23130dcd9387SGreg Roach     * @param string $threshold
23140dcd9387SGreg Roach     * @param string $maxtoshow
23150dcd9387SGreg Roach     *
23160dcd9387SGreg Roach     * @return string
23179219296aSGreg Roach     */
23189219296aSGreg Roach    public function commonGivenFemaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
23199219296aSGreg Roach    {
23209219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTotals((int) $threshold, (int) $maxtoshow);
23219219296aSGreg Roach    }
23229219296aSGreg Roach
23239219296aSGreg Roach    /**
23240dcd9387SGreg Roach     * @param string $threshold
23250dcd9387SGreg Roach     * @param string $maxtoshow
23260dcd9387SGreg Roach     *
23270dcd9387SGreg Roach     * @return string
23289219296aSGreg Roach     */
23299219296aSGreg Roach    public function commonGivenFemaleList(string $threshold = '1', string $maxtoshow = '10'): string
23309219296aSGreg Roach    {
23319219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleList((int) $threshold, (int) $maxtoshow);
23329219296aSGreg Roach    }
23339219296aSGreg Roach
23349219296aSGreg Roach    /**
23350dcd9387SGreg Roach     * @param string $threshold
23360dcd9387SGreg Roach     * @param string $maxtoshow
23370dcd9387SGreg Roach     *
23380dcd9387SGreg Roach     * @return string
23399219296aSGreg Roach     */
23409219296aSGreg Roach    public function commonGivenFemaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
23419219296aSGreg Roach    {
23429219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleListTotals((int) $threshold, (int) $maxtoshow);
23439219296aSGreg Roach    }
23449219296aSGreg Roach
23459219296aSGreg Roach    /**
23460dcd9387SGreg Roach     * @param string $threshold
23470dcd9387SGreg Roach     * @param string $maxtoshow
23480dcd9387SGreg Roach     *
23490dcd9387SGreg Roach     * @return string
23509219296aSGreg Roach     */
23519219296aSGreg Roach    public function commonGivenFemaleTable(string $threshold = '1', string $maxtoshow = '10'): string
23529219296aSGreg Roach    {
23539219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTable((int) $threshold, (int) $maxtoshow);
23549219296aSGreg Roach    }
23559219296aSGreg Roach
23569219296aSGreg Roach    /**
23570dcd9387SGreg Roach     * @param string $threshold
23580dcd9387SGreg Roach     * @param string $maxtoshow
23590dcd9387SGreg Roach     *
23600dcd9387SGreg Roach     * @return string
23619219296aSGreg Roach     */
23629219296aSGreg Roach    public function commonGivenMale(string $threshold = '1', string $maxtoshow = '10'): string
23639219296aSGreg Roach    {
23649219296aSGreg Roach        return $this->individualRepository->commonGivenMale((int) $threshold, (int) $maxtoshow);
23659219296aSGreg Roach    }
23669219296aSGreg Roach
23679219296aSGreg Roach    /**
23680dcd9387SGreg Roach     * @param string $threshold
23690dcd9387SGreg Roach     * @param string $maxtoshow
23700dcd9387SGreg Roach     *
23710dcd9387SGreg Roach     * @return string
23729219296aSGreg Roach     */
23739219296aSGreg Roach    public function commonGivenMaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
23749219296aSGreg Roach    {
23759219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTotals((int) $threshold, (int) $maxtoshow);
23769219296aSGreg Roach    }
23779219296aSGreg Roach
23789219296aSGreg Roach    /**
23790dcd9387SGreg Roach     * @param string $threshold
23800dcd9387SGreg Roach     * @param string $maxtoshow
23810dcd9387SGreg Roach     *
23820dcd9387SGreg Roach     * @return string
23839219296aSGreg Roach     */
23849219296aSGreg Roach    public function commonGivenMaleList(string $threshold = '1', string $maxtoshow = '10'): string
23859219296aSGreg Roach    {
23869219296aSGreg Roach        return $this->individualRepository->commonGivenMaleList((int) $threshold, (int) $maxtoshow);
23879219296aSGreg Roach    }
23889219296aSGreg Roach
23899219296aSGreg Roach    /**
23900dcd9387SGreg Roach     * @param string $threshold
23910dcd9387SGreg Roach     * @param string $maxtoshow
23920dcd9387SGreg Roach     *
23930dcd9387SGreg Roach     * @return string
23949219296aSGreg Roach     */
23959219296aSGreg Roach    public function commonGivenMaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
23969219296aSGreg Roach    {
23979219296aSGreg Roach        return $this->individualRepository->commonGivenMaleListTotals((int) $threshold, (int) $maxtoshow);
23989219296aSGreg Roach    }
23999219296aSGreg Roach
24009219296aSGreg Roach    /**
24010dcd9387SGreg Roach     * @param string $threshold
24020dcd9387SGreg Roach     * @param string $maxtoshow
24030dcd9387SGreg Roach     *
24040dcd9387SGreg Roach     * @return string
24059219296aSGreg Roach     */
24069219296aSGreg Roach    public function commonGivenMaleTable(string $threshold = '1', string $maxtoshow = '10'): string
24079219296aSGreg Roach    {
24089219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTable((int) $threshold, (int) $maxtoshow);
24099219296aSGreg Roach    }
24109219296aSGreg Roach
24119219296aSGreg Roach    /**
24120dcd9387SGreg Roach     * @param string $threshold
24130dcd9387SGreg Roach     * @param string $maxtoshow
24140dcd9387SGreg Roach     *
24150dcd9387SGreg Roach     * @return string
24169219296aSGreg Roach     */
24179219296aSGreg Roach    public function commonGivenUnknown(string $threshold = '1', string $maxtoshow = '10'): string
24189219296aSGreg Roach    {
24199219296aSGreg Roach        return $this->individualRepository->commonGivenUnknown((int) $threshold, (int) $maxtoshow);
24209219296aSGreg Roach    }
24219219296aSGreg Roach
24229219296aSGreg Roach    /**
24230dcd9387SGreg Roach     * @param string $threshold
24240dcd9387SGreg Roach     * @param string $maxtoshow
24250dcd9387SGreg Roach     *
24260dcd9387SGreg Roach     * @return string
24279219296aSGreg Roach     */
24289219296aSGreg Roach    public function commonGivenUnknownTotals(string $threshold = '1', string $maxtoshow = '10'): string
24299219296aSGreg Roach    {
24309219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTotals((int) $threshold, (int) $maxtoshow);
24319219296aSGreg Roach    }
24329219296aSGreg Roach
24339219296aSGreg Roach    /**
24340dcd9387SGreg Roach     * @param string $threshold
24350dcd9387SGreg Roach     * @param string $maxtoshow
24360dcd9387SGreg Roach     *
24370dcd9387SGreg Roach     * @return string
24389219296aSGreg Roach     */
24399219296aSGreg Roach    public function commonGivenUnknownList(string $threshold = '1', string $maxtoshow = '10'): string
24409219296aSGreg Roach    {
24419219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownList((int) $threshold, (int) $maxtoshow);
24429219296aSGreg Roach    }
24439219296aSGreg Roach
24449219296aSGreg Roach    /**
24450dcd9387SGreg Roach     * @param string $threshold
24460dcd9387SGreg Roach     * @param string $maxtoshow
24470dcd9387SGreg Roach     *
24480dcd9387SGreg Roach     * @return string
24499219296aSGreg Roach     */
24509219296aSGreg Roach    public function commonGivenUnknownListTotals(string $threshold = '1', string $maxtoshow = '10'): string
24519219296aSGreg Roach    {
24529219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownListTotals((int) $threshold, (int) $maxtoshow);
24539219296aSGreg Roach    }
24549219296aSGreg Roach
24559219296aSGreg Roach    /**
24560dcd9387SGreg Roach     * @param string $threshold
24570dcd9387SGreg Roach     * @param string $maxtoshow
24580dcd9387SGreg Roach     *
24590dcd9387SGreg Roach     * @return string
24609219296aSGreg Roach     */
24619219296aSGreg Roach    public function commonGivenUnknownTable(string $threshold = '1', string $maxtoshow = '10'): string
24629219296aSGreg Roach    {
24639219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTable((int) $threshold, (int) $maxtoshow);
24649219296aSGreg Roach    }
24659219296aSGreg Roach
24669219296aSGreg Roach    /**
24670dcd9387SGreg Roach     * @param string|null $color_from
24680dcd9387SGreg Roach     * @param string|null $color_to
24690dcd9387SGreg Roach     * @param string      $maxtoshow
24700dcd9387SGreg Roach     *
24710dcd9387SGreg Roach     * @return string
24729219296aSGreg Roach     */
24739219296aSGreg Roach    public function chartCommonGiven(
24749219296aSGreg Roach        string $color_from = null,
24759219296aSGreg Roach        string $color_to = null,
24769219296aSGreg Roach        string $maxtoshow = '7'
2477c81b7bf1SGreg Roach    ): string {
247888de55fdSRico Sonntag        return $this->individualRepository->chartCommonGiven($color_from, $color_to, (int) $maxtoshow);
24799219296aSGreg Roach    }
24809219296aSGreg Roach
24819219296aSGreg Roach    /**
24820dcd9387SGreg Roach     * @return string
24839219296aSGreg Roach     */
24849219296aSGreg Roach    public function usersLoggedIn(): string
24859219296aSGreg Roach    {
24869219296aSGreg Roach        return $this->userRepository->usersLoggedIn();
24879219296aSGreg Roach    }
24889219296aSGreg Roach
24899219296aSGreg Roach    /**
24900dcd9387SGreg Roach     * @return string
24919219296aSGreg Roach     */
24929219296aSGreg Roach    public function usersLoggedInList(): string
24939219296aSGreg Roach    {
24949219296aSGreg Roach        return $this->userRepository->usersLoggedInList();
24959219296aSGreg Roach    }
24969219296aSGreg Roach
24979219296aSGreg Roach    /**
24980dcd9387SGreg Roach     * @return int
24999219296aSGreg Roach     */
25009219296aSGreg Roach    public function usersLoggedInTotal(): int
25019219296aSGreg Roach    {
25029219296aSGreg Roach        return $this->userRepository->usersLoggedInTotal();
25039219296aSGreg Roach    }
25049219296aSGreg Roach
25059219296aSGreg Roach    /**
25060dcd9387SGreg Roach     * @return int
25079219296aSGreg Roach     */
25089219296aSGreg Roach    public function usersLoggedInTotalAnon(): int
25099219296aSGreg Roach    {
25109219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalAnon();
25119219296aSGreg Roach    }
25129219296aSGreg Roach
25139219296aSGreg Roach    /**
25140dcd9387SGreg Roach     * @return int
25159219296aSGreg Roach     */
25169219296aSGreg Roach    public function usersLoggedInTotalVisible(): int
25179219296aSGreg Roach    {
25189219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalVisible();
25199219296aSGreg Roach    }
25209219296aSGreg Roach
25219219296aSGreg Roach    /**
25220dcd9387SGreg Roach     * @return string
25239219296aSGreg Roach     */
25249219296aSGreg Roach    public function userId(): string
25259219296aSGreg Roach    {
25269219296aSGreg Roach        return $this->userRepository->userId();
25279219296aSGreg Roach    }
25289219296aSGreg Roach
25299219296aSGreg Roach    /**
25300dcd9387SGreg Roach     * @param string $visitor_text
25310dcd9387SGreg Roach     *
25320dcd9387SGreg Roach     * @return string
25339219296aSGreg Roach     */
25349219296aSGreg Roach    public function userName(string $visitor_text = ''): string
25359219296aSGreg Roach    {
253618483248SGreg Roach        return $this->userRepository->userName($visitor_text);
25379219296aSGreg Roach    }
25389219296aSGreg Roach
25399219296aSGreg Roach    /**
25400dcd9387SGreg Roach     * @return string
25419219296aSGreg Roach     */
25429219296aSGreg Roach    public function userFullName(): string
25439219296aSGreg Roach    {
25449219296aSGreg Roach        return $this->userRepository->userFullName();
25459219296aSGreg Roach    }
25469219296aSGreg Roach
25479219296aSGreg Roach    /**
25480dcd9387SGreg Roach     * @return string
25499219296aSGreg Roach     */
25509219296aSGreg Roach    public function totalUsers(): string
25519219296aSGreg Roach    {
25529219296aSGreg Roach        return $this->userRepository->totalUsers();
25539219296aSGreg Roach    }
25549219296aSGreg Roach
25559219296aSGreg Roach    /**
25560dcd9387SGreg Roach     * @return string
25579219296aSGreg Roach     */
25589219296aSGreg Roach    public function totalAdmins(): string
25599219296aSGreg Roach    {
25609219296aSGreg Roach        return $this->userRepository->totalAdmins();
25619219296aSGreg Roach    }
25629219296aSGreg Roach
25639219296aSGreg Roach    /**
25640dcd9387SGreg Roach     * @return string
25659219296aSGreg Roach     */
25669219296aSGreg Roach    public function totalNonAdmins(): string
25679219296aSGreg Roach    {
25689219296aSGreg Roach        return $this->userRepository->totalNonAdmins();
25699219296aSGreg Roach    }
25709219296aSGreg Roach
25719219296aSGreg Roach    /**
25720dcd9387SGreg Roach     * @return string
25739219296aSGreg Roach     */
25749219296aSGreg Roach    public function latestUserId(): string
25759219296aSGreg Roach    {
25769219296aSGreg Roach        return $this->latestUserRepository->latestUserId();
25779219296aSGreg Roach    }
25789219296aSGreg Roach
25799219296aSGreg Roach    /**
25800dcd9387SGreg Roach     * @return string
25819219296aSGreg Roach     */
25829219296aSGreg Roach    public function latestUserName(): string
25839219296aSGreg Roach    {
25849219296aSGreg Roach        return $this->latestUserRepository->latestUserName();
25859219296aSGreg Roach    }
25869219296aSGreg Roach
25879219296aSGreg Roach    /**
25880dcd9387SGreg Roach     * @return string
25899219296aSGreg Roach     */
25909219296aSGreg Roach    public function latestUserFullName(): string
25919219296aSGreg Roach    {
25929219296aSGreg Roach        return $this->latestUserRepository->latestUserFullName();
25939219296aSGreg Roach    }
25949219296aSGreg Roach
25959219296aSGreg Roach    /**
25960dcd9387SGreg Roach     * @param string|null $format
25970dcd9387SGreg Roach     *
25980dcd9387SGreg Roach     * @return string
25999219296aSGreg Roach     */
26009219296aSGreg Roach    public function latestUserRegDate(string $format = null): string
26019219296aSGreg Roach    {
260218483248SGreg Roach        return $this->latestUserRepository->latestUserRegDate($format);
26039219296aSGreg Roach    }
26049219296aSGreg Roach
26059219296aSGreg Roach    /**
26060dcd9387SGreg Roach     * @param string|null $format
26070dcd9387SGreg Roach     *
26080dcd9387SGreg Roach     * @return string
26099219296aSGreg Roach     */
26109219296aSGreg Roach    public function latestUserRegTime(string $format = null): string
26119219296aSGreg Roach    {
261218483248SGreg Roach        return $this->latestUserRepository->latestUserRegTime($format);
26139219296aSGreg Roach    }
26149219296aSGreg Roach
26159219296aSGreg Roach    /**
26160dcd9387SGreg Roach     * @param string|null $yes
26170dcd9387SGreg Roach     * @param string|null $no
26180dcd9387SGreg Roach     *
26190dcd9387SGreg Roach     * @return string
26209219296aSGreg Roach     */
26219219296aSGreg Roach    public function latestUserLoggedin(string $yes = null, string $no = null): string
26229219296aSGreg Roach    {
262318483248SGreg Roach        return $this->latestUserRepository->latestUserLoggedin($yes, $no);
26249219296aSGreg Roach    }
26259219296aSGreg Roach
26269219296aSGreg Roach    /**
26270dcd9387SGreg Roach     * @return string
26289219296aSGreg Roach     */
26299219296aSGreg Roach    public function contactWebmaster(): string
26309219296aSGreg Roach    {
263171378461SGreg Roach        return $this->contactRepository->contactWebmaster();
26329219296aSGreg Roach    }
26339219296aSGreg Roach
26349219296aSGreg Roach    /**
26350dcd9387SGreg Roach     * @return string
26369219296aSGreg Roach     */
26379219296aSGreg Roach    public function contactGedcom(): string
26389219296aSGreg Roach    {
263971378461SGreg Roach        return $this->contactRepository->contactGedcom();
26409219296aSGreg Roach    }
26419219296aSGreg Roach
26429219296aSGreg Roach    /**
26430dcd9387SGreg Roach     * @return string
26449219296aSGreg Roach     */
26459219296aSGreg Roach    public function serverDate(): string
26469219296aSGreg Roach    {
26479219296aSGreg Roach        return $this->serverRepository->serverDate();
26489219296aSGreg Roach    }
26499219296aSGreg Roach
26509219296aSGreg Roach    /**
26510dcd9387SGreg Roach     * @return string
26529219296aSGreg Roach     */
26539219296aSGreg Roach    public function serverTime(): string
26549219296aSGreg Roach    {
26559219296aSGreg Roach        return $this->serverRepository->serverTime();
26569219296aSGreg Roach    }
26579219296aSGreg Roach
26589219296aSGreg Roach    /**
26590dcd9387SGreg Roach     * @return string
26609219296aSGreg Roach     */
26619219296aSGreg Roach    public function serverTime24(): string
26629219296aSGreg Roach    {
26639219296aSGreg Roach        return $this->serverRepository->serverTime24();
26649219296aSGreg Roach    }
26659219296aSGreg Roach
26669219296aSGreg Roach    /**
26679219296aSGreg Roach     * What is the timezone of the server.
26689219296aSGreg Roach     *
26699219296aSGreg Roach     * @return string
26709219296aSGreg Roach     */
26719219296aSGreg Roach    public function serverTimezone(): string
26729219296aSGreg Roach    {
26739219296aSGreg Roach        return $this->serverRepository->serverTimezone();
26749219296aSGreg Roach    }
26759219296aSGreg Roach
26769219296aSGreg Roach    /**
26770dcd9387SGreg Roach     * @return string
26789219296aSGreg Roach     */
26799219296aSGreg Roach    public function browserDate(): string
26809219296aSGreg Roach    {
26819219296aSGreg Roach        return $this->browserRepository->browserDate();
26829219296aSGreg Roach    }
26839219296aSGreg Roach
26849219296aSGreg Roach    /**
26850dcd9387SGreg Roach     * @return string
26869219296aSGreg Roach     */
26879219296aSGreg Roach    public function browserTime(): string
26889219296aSGreg Roach    {
26899219296aSGreg Roach        return $this->browserRepository->browserTime();
26909219296aSGreg Roach    }
26919219296aSGreg Roach
26929219296aSGreg Roach    /**
26930dcd9387SGreg Roach     * @return string
26949219296aSGreg Roach     */
26959219296aSGreg Roach    public function browserTimezone(): string
26969219296aSGreg Roach    {
26979219296aSGreg Roach        return $this->browserRepository->browserTimezone();
26989219296aSGreg Roach    }
26999219296aSGreg Roach
27009219296aSGreg Roach    /**
27010dcd9387SGreg Roach     * @param string $page_parameter
27020dcd9387SGreg Roach     *
27030dcd9387SGreg Roach     * @return string
27049219296aSGreg Roach     */
27059219296aSGreg Roach    public function hitCount(string $page_parameter = ''): string
27069219296aSGreg Roach    {
27079219296aSGreg Roach        return $this->hitCountRepository->hitCount($page_parameter);
27089219296aSGreg Roach    }
27099219296aSGreg Roach
27109219296aSGreg Roach    /**
27110dcd9387SGreg Roach     * @param string $page_parameter
27120dcd9387SGreg Roach     *
27130dcd9387SGreg Roach     * @return string
27149219296aSGreg Roach     */
27159219296aSGreg Roach    public function hitCountUser(string $page_parameter = ''): string
27169219296aSGreg Roach    {
27179219296aSGreg Roach        return $this->hitCountRepository->hitCountUser($page_parameter);
27189219296aSGreg Roach    }
27199219296aSGreg Roach
27209219296aSGreg Roach    /**
27210dcd9387SGreg Roach     * @param string $page_parameter
27220dcd9387SGreg Roach     *
27230dcd9387SGreg Roach     * @return string
27249219296aSGreg Roach     */
27259219296aSGreg Roach    public function hitCountIndi(string $page_parameter = ''): string
27269219296aSGreg Roach    {
27279219296aSGreg Roach        return $this->hitCountRepository->hitCountIndi($page_parameter);
27289219296aSGreg Roach    }
27299219296aSGreg Roach
27309219296aSGreg Roach    /**
27310dcd9387SGreg Roach     * @param string $page_parameter
27320dcd9387SGreg Roach     *
27330dcd9387SGreg Roach     * @return string
27349219296aSGreg Roach     */
27359219296aSGreg Roach    public function hitCountFam(string $page_parameter = ''): string
27369219296aSGreg Roach    {
27379219296aSGreg Roach        return $this->hitCountRepository->hitCountFam($page_parameter);
27389219296aSGreg Roach    }
27399219296aSGreg Roach
27409219296aSGreg Roach    /**
27410dcd9387SGreg Roach     * @param string $page_parameter
27420dcd9387SGreg Roach     *
27430dcd9387SGreg Roach     * @return string
27449219296aSGreg Roach     */
27459219296aSGreg Roach    public function hitCountSour(string $page_parameter = ''): string
27469219296aSGreg Roach    {
27479219296aSGreg Roach        return $this->hitCountRepository->hitCountSour($page_parameter);
27489219296aSGreg Roach    }
27499219296aSGreg Roach
27509219296aSGreg Roach    /**
27510dcd9387SGreg Roach     * @param string $page_parameter
27520dcd9387SGreg Roach     *
27530dcd9387SGreg Roach     * @return string
27549219296aSGreg Roach     */
27559219296aSGreg Roach    public function hitCountRepo(string $page_parameter = ''): string
27569219296aSGreg Roach    {
27579219296aSGreg Roach        return $this->hitCountRepository->hitCountRepo($page_parameter);
27589219296aSGreg Roach    }
27599219296aSGreg Roach
27609219296aSGreg Roach    /**
27610dcd9387SGreg Roach     * @param string $page_parameter
27620dcd9387SGreg Roach     *
27630dcd9387SGreg Roach     * @return string
27649219296aSGreg Roach     */
27659219296aSGreg Roach    public function hitCountNote(string $page_parameter = ''): string
27669219296aSGreg Roach    {
27679219296aSGreg Roach        return $this->hitCountRepository->hitCountNote($page_parameter);
27689219296aSGreg Roach    }
27699219296aSGreg Roach
27709219296aSGreg Roach    /**
27710dcd9387SGreg Roach     * @param string $page_parameter
27720dcd9387SGreg Roach     *
27730dcd9387SGreg Roach     * @return string
27749219296aSGreg Roach     */
27759219296aSGreg Roach    public function hitCountObje(string $page_parameter = ''): string
27769219296aSGreg Roach    {
27779219296aSGreg Roach        return $this->hitCountRepository->hitCountObje($page_parameter);
27789219296aSGreg Roach    }
27799219296aSGreg Roach
27809219296aSGreg Roach    /**
27810dcd9387SGreg Roach     * @return string
27829219296aSGreg Roach     */
27839219296aSGreg Roach    public function gedcomFavorites(): string
27849219296aSGreg Roach    {
27859219296aSGreg Roach        return $this->favoritesRepository->gedcomFavorites();
27869219296aSGreg Roach    }
27879219296aSGreg Roach
27889219296aSGreg Roach    /**
27890dcd9387SGreg Roach     * @return string
27909219296aSGreg Roach     */
27919219296aSGreg Roach    public function userFavorites(): string
27929219296aSGreg Roach    {
27939219296aSGreg Roach        return $this->favoritesRepository->userFavorites();
27949219296aSGreg Roach    }
27959219296aSGreg Roach
27969219296aSGreg Roach    /**
27970dcd9387SGreg Roach     * @return string
27989219296aSGreg Roach     */
27999219296aSGreg Roach    public function totalGedcomFavorites(): string
28009219296aSGreg Roach    {
28019219296aSGreg Roach        return $this->favoritesRepository->totalGedcomFavorites();
28029219296aSGreg Roach    }
28039219296aSGreg Roach
28049219296aSGreg Roach    /**
28050dcd9387SGreg Roach     * @return string
28069219296aSGreg Roach     */
28079219296aSGreg Roach    public function totalUserFavorites(): string
28089219296aSGreg Roach    {
28099219296aSGreg Roach        return $this->favoritesRepository->totalUserFavorites();
28109219296aSGreg Roach    }
28119219296aSGreg Roach
28129219296aSGreg Roach    /**
28130dcd9387SGreg Roach     * @return string
28149219296aSGreg Roach     */
28159219296aSGreg Roach    public function totalUserMessages(): string
28169219296aSGreg Roach    {
28179219296aSGreg Roach        return $this->messageRepository->totalUserMessages();
28189219296aSGreg Roach    }
28199219296aSGreg Roach
28209219296aSGreg Roach    /**
28210dcd9387SGreg Roach     * @return string
28229219296aSGreg Roach     */
28239219296aSGreg Roach    public function totalUserJournal(): string
28249219296aSGreg Roach    {
28259219296aSGreg Roach        return $this->newsRepository->totalUserJournal();
28269219296aSGreg Roach    }
28279219296aSGreg Roach
28289219296aSGreg Roach    /**
28290dcd9387SGreg Roach     * @return string
28309219296aSGreg Roach     */
28319219296aSGreg Roach    public function totalGedcomNews(): string
28329219296aSGreg Roach    {
28339219296aSGreg Roach        return $this->newsRepository->totalGedcomNews();
28349219296aSGreg Roach    }
28359219296aSGreg Roach
28369219296aSGreg Roach    /**
28379219296aSGreg Roach     * Create any of the other blocks.
28389219296aSGreg Roach     * Use as #callBlock:block_name#
28399219296aSGreg Roach     *
28409219296aSGreg Roach     * @param string $block
28419219296aSGreg Roach     * @param string ...$params
28429219296aSGreg Roach     *
2843e364afe4SGreg Roach     * @return string|null
28449219296aSGreg Roach     */
28459219296aSGreg Roach    public function callBlock(string $block = '', ...$params): ?string
28469219296aSGreg Roach    {
284787cca37cSGreg Roach        /** @var ModuleBlockInterface|null $module */
2848fd9aba47SGreg Roach        $module = $this->module_service
284987cca37cSGreg Roach            ->findByComponent(ModuleBlockInterface::class, $this->tree, Auth::user())
28506c2179e2SGreg Roach            ->first(static function (ModuleInterface $module) use ($block): bool {
28519219296aSGreg Roach                return $module->name() === $block && $module->name() !== 'html';
28520797053bSGreg Roach            });
28539219296aSGreg Roach
28549219296aSGreg Roach        if ($module === null) {
28559219296aSGreg Roach            return '';
28569219296aSGreg Roach        }
28579219296aSGreg Roach
28589219296aSGreg Roach        // Build the config array
28599219296aSGreg Roach        $cfg = [];
28609219296aSGreg Roach        foreach ($params as $config) {
28619219296aSGreg Roach            $bits = explode('=', $config);
28629219296aSGreg Roach
28636ccdf4f0SGreg Roach            if (count($bits) < 2) {
28649219296aSGreg Roach                continue;
28659219296aSGreg Roach            }
28669219296aSGreg Roach
28679219296aSGreg Roach            $v       = array_shift($bits);
28689219296aSGreg Roach            $cfg[$v] = implode('=', $bits);
28699219296aSGreg Roach        }
28709219296aSGreg Roach
28713caaa4d2SGreg Roach        return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED, $cfg);
28729219296aSGreg Roach    }
28739219296aSGreg Roach
28749219296aSGreg Roach    /**
28759219296aSGreg Roach     * What is the current version of webtrees.
28769219296aSGreg Roach     *
28779219296aSGreg Roach     * @return string
28789219296aSGreg Roach     */
28799219296aSGreg Roach    public function webtreesVersion(): string
28809219296aSGreg Roach    {
28819219296aSGreg Roach        return Webtrees::VERSION;
28829219296aSGreg Roach    }
288371378461SGreg Roach
288471378461SGreg Roach    /**
288571378461SGreg Roach     * Get tags and their parsed results.
288671378461SGreg Roach     *
288771378461SGreg Roach     * @param string $text
288871378461SGreg Roach     *
288971378461SGreg Roach     * @return string[]
289071378461SGreg Roach     */
289171378461SGreg Roach    private function getTags(string $text): array
289271378461SGreg Roach    {
289371378461SGreg Roach        $tags    = [];
289471378461SGreg Roach        $matches = [];
289571378461SGreg Roach
2896b25599e6SGreg Roach        preg_match_all('/#([^#\n]+)(?=#)/', $text, $matches, PREG_SET_ORDER);
289771378461SGreg Roach
289871378461SGreg Roach        foreach ($matches as $match) {
289971378461SGreg Roach            $params = explode(':', $match[1]);
290071378461SGreg Roach            $method = array_shift($params);
290171378461SGreg Roach
290271378461SGreg Roach            if (method_exists($this, $method)) {
2903e29653ffSGreg Roach                $tags[$match[0] . '#'] = call_user_func([$this, $method], ...$params);
290471378461SGreg Roach            }
290571378461SGreg Roach        }
290671378461SGreg Roach
290771378461SGreg Roach        return $tags;
290871378461SGreg Roach    }
29099219296aSGreg Roach}
2910