xref: /webtrees/app/Statistics.php (revision 3e5f5a4c022127719743eb151af4fa200f75b2b2)
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;
63*3e5f5a4cSGreg Roachuse stdClass;
649219296aSGreg Roach
65b19e047dSGreg Roachuse function call_user_func;
6671378461SGreg Roachuse function count;
6771378461SGreg Roachuse function in_array;
6871378461SGreg Roach
699219296aSGreg Roach/**
709219296aSGreg Roach * A selection of pre-formatted statistical queries.
719219296aSGreg Roach * These are primarily used for embedded keywords on HTML blocks, but
729219296aSGreg Roach * are also used elsewhere in the code.
739219296aSGreg Roach */
749219296aSGreg Roachclass Statistics implements
759219296aSGreg Roach    GedcomRepositoryInterface,
769219296aSGreg Roach    IndividualRepositoryInterface,
779219296aSGreg Roach    EventRepositoryInterface,
789219296aSGreg Roach    MediaRepositoryInterface,
799219296aSGreg Roach    UserRepositoryInterface,
809219296aSGreg Roach    ServerRepositoryInterface,
819219296aSGreg Roach    BrowserRepositoryInterface,
829219296aSGreg Roach    HitCountRepositoryInterface,
839219296aSGreg Roach    LatestUserRepositoryInterface,
849219296aSGreg Roach    FavoritesRepositoryInterface,
859219296aSGreg Roach    NewsRepositoryInterface,
869219296aSGreg Roach    MessageRepositoryInterface,
879219296aSGreg Roach    ContactRepositoryInterface,
889219296aSGreg Roach    FamilyDatesRepositoryInterface,
899219296aSGreg Roach    PlaceRepositoryInterface
909219296aSGreg Roach{
919219296aSGreg Roach    /**
9271378461SGreg Roach     * Generate statistics for a specified tree.
9371378461SGreg Roach     *
9471378461SGreg Roach     * @var Tree
9571378461SGreg Roach     */
9671378461SGreg Roach    private $tree;
979219296aSGreg Roach    /**
989219296aSGreg Roach     * @var GedcomRepository
999219296aSGreg Roach     */
1009219296aSGreg Roach    private $gedcomRepository;
1019219296aSGreg Roach
1029219296aSGreg Roach    /**
1039219296aSGreg Roach     * @var IndividualRepository
1049219296aSGreg Roach     */
1059219296aSGreg Roach    private $individualRepository;
1069219296aSGreg Roach
1079219296aSGreg Roach    /**
1089219296aSGreg Roach     * @var FamilyRepository
1099219296aSGreg Roach     */
1109219296aSGreg Roach    private $familyRepository;
1119219296aSGreg Roach
1129219296aSGreg Roach    /**
1139219296aSGreg Roach     * @var MediaRepository
1149219296aSGreg Roach     */
1159219296aSGreg Roach    private $mediaRepository;
1169219296aSGreg Roach
1179219296aSGreg Roach    /**
1189219296aSGreg Roach     * @var EventRepository
1199219296aSGreg Roach     */
1209219296aSGreg Roach    private $eventRepository;
1219219296aSGreg Roach
1229219296aSGreg Roach    /**
1239219296aSGreg Roach     * @var UserRepository
1249219296aSGreg Roach     */
1259219296aSGreg Roach    private $userRepository;
1269219296aSGreg Roach
1279219296aSGreg Roach    /**
1289219296aSGreg Roach     * @var ServerRepository
1299219296aSGreg Roach     */
1309219296aSGreg Roach    private $serverRepository;
1319219296aSGreg Roach
1329219296aSGreg Roach    /**
1339219296aSGreg Roach     * @var BrowserRepository
1349219296aSGreg Roach     */
1359219296aSGreg Roach    private $browserRepository;
1369219296aSGreg Roach
1379219296aSGreg Roach    /**
1389219296aSGreg Roach     * @var HitCountRepository
1399219296aSGreg Roach     */
1409219296aSGreg Roach    private $hitCountRepository;
1419219296aSGreg Roach
1429219296aSGreg Roach    /**
1439219296aSGreg Roach     * @var LatestUserRepository
1449219296aSGreg Roach     */
1459219296aSGreg Roach    private $latestUserRepository;
1469219296aSGreg Roach
1479219296aSGreg Roach    /**
1489219296aSGreg Roach     * @var FavoritesRepository
1499219296aSGreg Roach     */
1509219296aSGreg Roach    private $favoritesRepository;
1519219296aSGreg Roach
1529219296aSGreg Roach    /**
1539219296aSGreg Roach     * @var NewsRepository
1549219296aSGreg Roach     */
1559219296aSGreg Roach    private $newsRepository;
1569219296aSGreg Roach
1579219296aSGreg Roach    /**
1589219296aSGreg Roach     * @var MessageRepository
1599219296aSGreg Roach     */
1609219296aSGreg Roach    private $messageRepository;
1619219296aSGreg Roach
1629219296aSGreg Roach    /**
1639219296aSGreg Roach     * @var ContactRepository
1649219296aSGreg Roach     */
1659219296aSGreg Roach    private $contactRepository;
1669219296aSGreg Roach
1679219296aSGreg Roach    /**
1689219296aSGreg Roach     * @var FamilyDatesRepository
1699219296aSGreg Roach     */
1709219296aSGreg Roach    private $familyDatesRepository;
1719219296aSGreg Roach
1729219296aSGreg Roach    /**
1739219296aSGreg Roach     * @var PlaceRepository
1749219296aSGreg Roach     */
1759219296aSGreg Roach    private $placeRepository;
1769219296aSGreg Roach
1779219296aSGreg Roach    /**
1789219296aSGreg Roach     * @var ModuleService
1799219296aSGreg Roach     */
1809219296aSGreg Roach    private $module_service;
1819219296aSGreg Roach
1829219296aSGreg Roach    /**
1839219296aSGreg Roach     * Create the statistics for a tree.
1849219296aSGreg Roach     *
1859219296aSGreg Roach     * @param ModuleService $module_service
1869219296aSGreg Roach     * @param Tree          $tree Generate statistics for this tree
187e5a6b4d4SGreg Roach     * @param UserService   $user_service
1889219296aSGreg Roach     */
1899219296aSGreg Roach    public function __construct(
1909219296aSGreg Roach        ModuleService $module_service,
191e5a6b4d4SGreg Roach        Tree $tree,
192e5a6b4d4SGreg Roach        UserService $user_service
19398afcacfSGreg Roach    ) {
1949219296aSGreg Roach        $this->tree                  = $tree;
1959219296aSGreg Roach        $this->gedcomRepository      = new GedcomRepository($tree);
1969219296aSGreg Roach        $this->individualRepository  = new IndividualRepository($tree);
1979219296aSGreg Roach        $this->familyRepository      = new FamilyRepository($tree);
1989219296aSGreg Roach        $this->familyDatesRepository = new FamilyDatesRepository($tree);
1999219296aSGreg Roach        $this->mediaRepository       = new MediaRepository($tree);
2009219296aSGreg Roach        $this->eventRepository       = new EventRepository($tree);
201e5a6b4d4SGreg Roach        $this->userRepository        = new UserRepository($tree, $user_service);
2029219296aSGreg Roach        $this->serverRepository      = new ServerRepository();
2039219296aSGreg Roach        $this->browserRepository     = new BrowserRepository();
204e5a6b4d4SGreg Roach        $this->hitCountRepository    = new HitCountRepository($tree, $user_service);
205e5a6b4d4SGreg Roach        $this->latestUserRepository  = new LatestUserRepository($user_service);
206fd9aba47SGreg Roach        $this->favoritesRepository   = new FavoritesRepository($tree, $module_service);
2079219296aSGreg Roach        $this->newsRepository        = new NewsRepository($tree);
2089219296aSGreg Roach        $this->messageRepository     = new MessageRepository();
209e5a6b4d4SGreg Roach        $this->contactRepository     = new ContactRepository($tree, $user_service);
2109219296aSGreg Roach        $this->placeRepository       = new PlaceRepository($tree);
2119219296aSGreg Roach        $this->module_service        = $module_service;
2129219296aSGreg Roach    }
2139219296aSGreg Roach
2149219296aSGreg Roach    /**
2159219296aSGreg Roach     * Return a string of all supported tags and an example of its output in table row form.
2169219296aSGreg Roach     *
2179219296aSGreg Roach     * @return string
2189219296aSGreg Roach     */
2199219296aSGreg Roach    public function getAllTagsTable(): string
2209219296aSGreg Roach    {
221f021177cSGreg Roach        try {
222f021177cSGreg Roach            $class = new ReflectionClass($this);
2239219296aSGreg Roach
224f021177cSGreg Roach            $public_methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
225f021177cSGreg Roach
226f021177cSGreg Roach            $examples = Collection::make($public_methods)
227f021177cSGreg Roach                ->filter(static function (ReflectionMethod $method): bool {
228f021177cSGreg Roach                    return !in_array($method->getName(), ['embedTags', 'getAllTagsTable'], true);
229f021177cSGreg Roach                })
230f021177cSGreg Roach                ->filter(static function (ReflectionMethod $method): bool {
231f021177cSGreg Roach                    $type = $method->getReturnType();
232f021177cSGreg Roach
233f021177cSGreg Roach                    return $type instanceof ReflectionType && $type->getName() === 'string';
234f021177cSGreg Roach                })
235f021177cSGreg Roach                ->sort(static function (ReflectionMethod $x, ReflectionMethod $y): int {
236f021177cSGreg Roach                    return $x->getName() <=> $y->getName();
237f021177cSGreg Roach                })
238f021177cSGreg Roach                ->map(function (ReflectionMethod $method): string {
239f021177cSGreg Roach                    $tag = $method->getName();
240f021177cSGreg Roach
241f021177cSGreg Roach                    return '<dt>#' . $tag . '#</dt><dd>' . call_user_func([$this, $tag]) . '</dd>';
242f021177cSGreg Roach                });
243f021177cSGreg Roach
244f021177cSGreg Roach            return '<dl>' . $examples->implode('') . '</dl>';
245f021177cSGreg Roach        } catch (ReflectionException $ex) {
246f021177cSGreg Roach            return $ex->getMessage();
2479219296aSGreg Roach        }
2489219296aSGreg Roach    }
2499219296aSGreg Roach
2509219296aSGreg Roach    /**
2519219296aSGreg Roach     * Embed tags in text
2529219296aSGreg Roach     *
2539219296aSGreg Roach     * @param string $text
2549219296aSGreg Roach     *
2559219296aSGreg Roach     * @return string
2569219296aSGreg Roach     */
2579219296aSGreg Roach    public function embedTags(string $text): string
2589219296aSGreg Roach    {
2599219296aSGreg Roach        if (strpos($text, '#') !== false) {
2609219296aSGreg Roach            $text = strtr($text, $this->getTags($text));
2619219296aSGreg Roach        }
2629219296aSGreg Roach
2639219296aSGreg Roach        return $text;
2649219296aSGreg Roach    }
2659219296aSGreg Roach
2669219296aSGreg Roach    /**
2670dcd9387SGreg Roach     * @return string
2689219296aSGreg Roach     */
2699219296aSGreg Roach    public function gedcomFilename(): string
2709219296aSGreg Roach    {
2719219296aSGreg Roach        return $this->gedcomRepository->gedcomFilename();
2729219296aSGreg Roach    }
2739219296aSGreg Roach
2749219296aSGreg Roach    /**
2750dcd9387SGreg Roach     * @return int
2769219296aSGreg Roach     */
2779219296aSGreg Roach    public function gedcomId(): int
2789219296aSGreg Roach    {
2799219296aSGreg Roach        return $this->gedcomRepository->gedcomId();
2809219296aSGreg Roach    }
2819219296aSGreg Roach
2829219296aSGreg Roach    /**
2830dcd9387SGreg Roach     * @return string
2849219296aSGreg Roach     */
2859219296aSGreg Roach    public function gedcomTitle(): string
2869219296aSGreg Roach    {
2879219296aSGreg Roach        return $this->gedcomRepository->gedcomTitle();
2889219296aSGreg Roach    }
2899219296aSGreg Roach
2909219296aSGreg Roach    /**
2910dcd9387SGreg Roach     * @return string
2929219296aSGreg Roach     */
2939219296aSGreg Roach    public function gedcomCreatedSoftware(): string
2949219296aSGreg Roach    {
2959219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedSoftware();
2969219296aSGreg Roach    }
2979219296aSGreg Roach
2989219296aSGreg Roach    /**
2990dcd9387SGreg Roach     * @return string
3009219296aSGreg Roach     */
3019219296aSGreg Roach    public function gedcomCreatedVersion(): string
3029219296aSGreg Roach    {
3039219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedVersion();
3049219296aSGreg Roach    }
3059219296aSGreg Roach
3069219296aSGreg Roach    /**
3070dcd9387SGreg Roach     * @return string
3089219296aSGreg Roach     */
3099219296aSGreg Roach    public function gedcomDate(): string
3109219296aSGreg Roach    {
3119219296aSGreg Roach        return $this->gedcomRepository->gedcomDate();
3129219296aSGreg Roach    }
3139219296aSGreg Roach
3149219296aSGreg Roach    /**
3150dcd9387SGreg Roach     * @return string
3169219296aSGreg Roach     */
3179219296aSGreg Roach    public function gedcomUpdated(): string
3189219296aSGreg Roach    {
3199219296aSGreg Roach        return $this->gedcomRepository->gedcomUpdated();
3209219296aSGreg Roach    }
3219219296aSGreg Roach
3229219296aSGreg Roach    /**
3230dcd9387SGreg Roach     * @return string
3249219296aSGreg Roach     */
3259219296aSGreg Roach    public function gedcomRootId(): string
3269219296aSGreg Roach    {
3279219296aSGreg Roach        return $this->gedcomRepository->gedcomRootId();
3289219296aSGreg Roach    }
3299219296aSGreg Roach
3309219296aSGreg Roach    /**
3310dcd9387SGreg Roach     * @return string
3329219296aSGreg Roach     */
3339219296aSGreg Roach    public function totalRecords(): string
3349219296aSGreg Roach    {
3359219296aSGreg Roach        return $this->individualRepository->totalRecords();
3369219296aSGreg Roach    }
3379219296aSGreg Roach
3389219296aSGreg Roach    /**
3390dcd9387SGreg Roach     * @return string
3409219296aSGreg Roach     */
3419219296aSGreg Roach    public function totalIndividuals(): string
3429219296aSGreg Roach    {
3439219296aSGreg Roach        return $this->individualRepository->totalIndividuals();
3449219296aSGreg Roach    }
3459219296aSGreg Roach
3469219296aSGreg Roach    /**
3470dcd9387SGreg Roach     * @return string
3489219296aSGreg Roach     */
3499219296aSGreg Roach    public function totalIndisWithSources(): string
3509219296aSGreg Roach    {
3519219296aSGreg Roach        return $this->individualRepository->totalIndisWithSources();
3529219296aSGreg Roach    }
3539219296aSGreg Roach
3549219296aSGreg Roach    /**
3550dcd9387SGreg Roach     * @param string|null $color_from
3560dcd9387SGreg Roach     * @param string|null $color_to
3570dcd9387SGreg Roach     *
3580dcd9387SGreg Roach     * @return string
3599219296aSGreg Roach     */
3609219296aSGreg Roach    public function chartIndisWithSources(
3619219296aSGreg Roach        string $color_from = null,
3629219296aSGreg Roach        string $color_to = null
36398afcacfSGreg Roach    ): string {
36488de55fdSRico Sonntag        return $this->individualRepository->chartIndisWithSources($color_from, $color_to);
3659219296aSGreg Roach    }
3669219296aSGreg Roach
3679219296aSGreg Roach    /**
3680dcd9387SGreg Roach     * @return string
3699219296aSGreg Roach     */
3709219296aSGreg Roach    public function totalIndividualsPercentage(): string
3719219296aSGreg Roach    {
3729219296aSGreg Roach        return $this->individualRepository->totalIndividualsPercentage();
3739219296aSGreg Roach    }
3749219296aSGreg Roach
3759219296aSGreg Roach    /**
3760dcd9387SGreg Roach     * @return string
3779219296aSGreg Roach     */
3789219296aSGreg Roach    public function totalFamilies(): string
3799219296aSGreg Roach    {
3809219296aSGreg Roach        return $this->individualRepository->totalFamilies();
3819219296aSGreg Roach    }
3829219296aSGreg Roach
3839219296aSGreg Roach    /**
3840dcd9387SGreg Roach     * @return string
3859219296aSGreg Roach     */
3869219296aSGreg Roach    public function totalFamiliesPercentage(): string
3879219296aSGreg Roach    {
3889219296aSGreg Roach        return $this->individualRepository->totalFamiliesPercentage();
3899219296aSGreg Roach    }
3909219296aSGreg Roach
3919219296aSGreg Roach    /**
3920dcd9387SGreg Roach     * @return string
3939219296aSGreg Roach     */
3949219296aSGreg Roach    public function totalFamsWithSources(): string
3959219296aSGreg Roach    {
3969219296aSGreg Roach        return $this->individualRepository->totalFamsWithSources();
3979219296aSGreg Roach    }
3989219296aSGreg Roach
3999219296aSGreg Roach    /**
4000dcd9387SGreg Roach     * @param string|null $color_from
4010dcd9387SGreg Roach     * @param string|null $color_to
4020dcd9387SGreg Roach     *
4030dcd9387SGreg Roach     * @return string
4049219296aSGreg Roach     */
4059219296aSGreg Roach    public function chartFamsWithSources(
4069219296aSGreg Roach        string $color_from = null,
4079219296aSGreg Roach        string $color_to = null
40898afcacfSGreg Roach    ): string {
40988de55fdSRico Sonntag        return $this->individualRepository->chartFamsWithSources($color_from, $color_to);
4109219296aSGreg Roach    }
4119219296aSGreg Roach
4129219296aSGreg Roach    /**
4130dcd9387SGreg Roach     * @return string
4149219296aSGreg Roach     */
4159219296aSGreg Roach    public function totalSources(): string
4169219296aSGreg Roach    {
4179219296aSGreg Roach        return $this->individualRepository->totalSources();
4189219296aSGreg Roach    }
4199219296aSGreg Roach
4209219296aSGreg Roach    /**
4210dcd9387SGreg Roach     * @return string
4229219296aSGreg Roach     */
4239219296aSGreg Roach    public function totalSourcesPercentage(): string
4249219296aSGreg Roach    {
4259219296aSGreg Roach        return $this->individualRepository->totalSourcesPercentage();
4269219296aSGreg Roach    }
4279219296aSGreg Roach
4289219296aSGreg Roach    /**
4290dcd9387SGreg Roach     * @return string
4309219296aSGreg Roach     */
4319219296aSGreg Roach    public function totalNotes(): string
4329219296aSGreg Roach    {
4339219296aSGreg Roach        return $this->individualRepository->totalNotes();
4349219296aSGreg Roach    }
4359219296aSGreg Roach
4369219296aSGreg Roach    /**
4370dcd9387SGreg Roach     * @return string
4389219296aSGreg Roach     */
4399219296aSGreg Roach    public function totalNotesPercentage(): string
4409219296aSGreg Roach    {
4419219296aSGreg Roach        return $this->individualRepository->totalNotesPercentage();
4429219296aSGreg Roach    }
4439219296aSGreg Roach
4449219296aSGreg Roach    /**
4450dcd9387SGreg Roach     * @return string
4469219296aSGreg Roach     */
4479219296aSGreg Roach    public function totalRepositories(): string
4489219296aSGreg Roach    {
4499219296aSGreg Roach        return $this->individualRepository->totalRepositories();
4509219296aSGreg Roach    }
4519219296aSGreg Roach
4529219296aSGreg Roach    /**
4530dcd9387SGreg Roach     * @return string
4549219296aSGreg Roach     */
4559219296aSGreg Roach    public function totalRepositoriesPercentage(): string
4569219296aSGreg Roach    {
4579219296aSGreg Roach        return $this->individualRepository->totalRepositoriesPercentage();
4589219296aSGreg Roach    }
4599219296aSGreg Roach
4609219296aSGreg Roach    /**
461320f6a24SGreg Roach     * @param string[] ...$params
462320f6a24SGreg Roach     *
463320f6a24SGreg Roach     * @return string
4649219296aSGreg Roach     */
4659219296aSGreg Roach    public function totalSurnames(...$params): string
4669219296aSGreg Roach    {
4679219296aSGreg Roach        return $this->individualRepository->totalSurnames(...$params);
4689219296aSGreg Roach    }
4699219296aSGreg Roach
4709219296aSGreg Roach    /**
471320f6a24SGreg Roach     * @param string[] ...$params
472320f6a24SGreg Roach     *
473320f6a24SGreg Roach     * @return string
4749219296aSGreg Roach     */
4759219296aSGreg Roach    public function totalGivennames(...$params): string
4769219296aSGreg Roach    {
4779219296aSGreg Roach        return $this->individualRepository->totalGivennames(...$params);
4789219296aSGreg Roach    }
4799219296aSGreg Roach
4809219296aSGreg Roach    /**
481c9a927ceSGreg Roach     * @param string[] $events
4820dcd9387SGreg Roach     *
4830dcd9387SGreg Roach     * @return string
4849219296aSGreg Roach     */
4859219296aSGreg Roach    public function totalEvents(array $events = []): string
4869219296aSGreg Roach    {
4879219296aSGreg Roach        return $this->eventRepository->totalEvents($events);
4889219296aSGreg Roach    }
4899219296aSGreg Roach
4909219296aSGreg Roach    /**
4910dcd9387SGreg Roach     * @return string
4929219296aSGreg Roach     */
4939219296aSGreg Roach    public function totalEventsBirth(): string
4949219296aSGreg Roach    {
4959219296aSGreg Roach        return $this->eventRepository->totalEventsBirth();
4969219296aSGreg Roach    }
4979219296aSGreg Roach
4989219296aSGreg Roach    /**
4990dcd9387SGreg Roach     * @return string
5009219296aSGreg Roach     */
5019219296aSGreg Roach    public function totalBirths(): string
5029219296aSGreg Roach    {
5039219296aSGreg Roach        return $this->eventRepository->totalBirths();
5049219296aSGreg Roach    }
5059219296aSGreg Roach
5069219296aSGreg Roach    /**
5070dcd9387SGreg Roach     * @return string
5089219296aSGreg Roach     */
5099219296aSGreg Roach    public function totalEventsDeath(): string
5109219296aSGreg Roach    {
5119219296aSGreg Roach        return $this->eventRepository->totalEventsDeath();
5129219296aSGreg Roach    }
5139219296aSGreg Roach
5149219296aSGreg Roach    /**
5150dcd9387SGreg Roach     * @return string
5169219296aSGreg Roach     */
5179219296aSGreg Roach    public function totalDeaths(): string
5189219296aSGreg Roach    {
5199219296aSGreg Roach        return $this->eventRepository->totalDeaths();
5209219296aSGreg Roach    }
5219219296aSGreg Roach
5229219296aSGreg Roach    /**
5230dcd9387SGreg Roach     * @return string
5249219296aSGreg Roach     */
5259219296aSGreg Roach    public function totalEventsMarriage(): string
5269219296aSGreg Roach    {
5279219296aSGreg Roach        return $this->eventRepository->totalEventsMarriage();
5289219296aSGreg Roach    }
5299219296aSGreg Roach
5309219296aSGreg Roach    /**
5310dcd9387SGreg Roach     * @return string
5329219296aSGreg Roach     */
5339219296aSGreg Roach    public function totalMarriages(): string
5349219296aSGreg Roach    {
5359219296aSGreg Roach        return $this->eventRepository->totalMarriages();
5369219296aSGreg Roach    }
5379219296aSGreg Roach
5389219296aSGreg Roach    /**
5390dcd9387SGreg Roach     * @return string
5409219296aSGreg Roach     */
5419219296aSGreg Roach    public function totalEventsDivorce(): string
5429219296aSGreg Roach    {
5439219296aSGreg Roach        return $this->eventRepository->totalEventsDivorce();
5449219296aSGreg Roach    }
5459219296aSGreg Roach
5469219296aSGreg Roach    /**
5470dcd9387SGreg Roach     * @return string
5489219296aSGreg Roach     */
5499219296aSGreg Roach    public function totalDivorces(): string
5509219296aSGreg Roach    {
5519219296aSGreg Roach        return $this->eventRepository->totalDivorces();
5529219296aSGreg Roach    }
5539219296aSGreg Roach
5549219296aSGreg Roach    /**
5550dcd9387SGreg Roach     * @return string
5569219296aSGreg Roach     */
5579219296aSGreg Roach    public function totalEventsOther(): string
5589219296aSGreg Roach    {
5599219296aSGreg Roach        return $this->eventRepository->totalEventsOther();
5609219296aSGreg Roach    }
5619219296aSGreg Roach
5629219296aSGreg Roach    /**
5630dcd9387SGreg Roach     * @return string
5649219296aSGreg Roach     */
5659219296aSGreg Roach    public function totalSexMales(): string
5669219296aSGreg Roach    {
5679219296aSGreg Roach        return $this->individualRepository->totalSexMales();
5689219296aSGreg Roach    }
5699219296aSGreg Roach
5709219296aSGreg Roach    /**
5710dcd9387SGreg Roach     * @return string
5729219296aSGreg Roach     */
5739219296aSGreg Roach    public function totalSexMalesPercentage(): string
5749219296aSGreg Roach    {
5759219296aSGreg Roach        return $this->individualRepository->totalSexMalesPercentage();
5769219296aSGreg Roach    }
5779219296aSGreg Roach
5789219296aSGreg Roach    /**
5790dcd9387SGreg Roach     * @return string
5809219296aSGreg Roach     */
5819219296aSGreg Roach    public function totalSexFemales(): string
5829219296aSGreg Roach    {
5839219296aSGreg Roach        return $this->individualRepository->totalSexFemales();
5849219296aSGreg Roach    }
5859219296aSGreg Roach
5869219296aSGreg Roach    /**
5870dcd9387SGreg Roach     * @return string
5889219296aSGreg Roach     */
5899219296aSGreg Roach    public function totalSexFemalesPercentage(): string
5909219296aSGreg Roach    {
5919219296aSGreg Roach        return $this->individualRepository->totalSexFemalesPercentage();
5929219296aSGreg Roach    }
5939219296aSGreg Roach
5949219296aSGreg Roach    /**
5950dcd9387SGreg Roach     * @return string
5969219296aSGreg Roach     */
5979219296aSGreg Roach    public function totalSexUnknown(): string
5989219296aSGreg Roach    {
5999219296aSGreg Roach        return $this->individualRepository->totalSexUnknown();
6009219296aSGreg Roach    }
6019219296aSGreg Roach
6029219296aSGreg Roach    /**
6030dcd9387SGreg Roach     * @return string
6049219296aSGreg Roach     */
6059219296aSGreg Roach    public function totalSexUnknownPercentage(): string
6069219296aSGreg Roach    {
6079219296aSGreg Roach        return $this->individualRepository->totalSexUnknownPercentage();
6089219296aSGreg Roach    }
6099219296aSGreg Roach
6109219296aSGreg Roach    /**
6110dcd9387SGreg Roach     * @param string|null $color_female
6120dcd9387SGreg Roach     * @param string|null $color_male
6130dcd9387SGreg Roach     * @param string|null $color_unknown
6140dcd9387SGreg Roach     *
6150dcd9387SGreg Roach     * @return string
6169219296aSGreg Roach     */
6179219296aSGreg Roach    public function chartSex(
6189219296aSGreg Roach        string $color_female = null,
6199219296aSGreg Roach        string $color_male = null,
6209219296aSGreg Roach        string $color_unknown = null
62198afcacfSGreg Roach    ): string {
62288de55fdSRico Sonntag        return $this->individualRepository->chartSex($color_female, $color_male, $color_unknown);
6239219296aSGreg Roach    }
6249219296aSGreg Roach
6259219296aSGreg Roach    /**
6260dcd9387SGreg Roach     * @return string
6279219296aSGreg Roach     */
6289219296aSGreg Roach    public function totalLiving(): string
6299219296aSGreg Roach    {
6309219296aSGreg Roach        return $this->individualRepository->totalLiving();
6319219296aSGreg Roach    }
6329219296aSGreg Roach
6339219296aSGreg Roach    /**
6340dcd9387SGreg Roach     * @return string
6359219296aSGreg Roach     */
6369219296aSGreg Roach    public function totalLivingPercentage(): string
6379219296aSGreg Roach    {
6389219296aSGreg Roach        return $this->individualRepository->totalLivingPercentage();
6399219296aSGreg Roach    }
6409219296aSGreg Roach
6419219296aSGreg Roach    /**
6420dcd9387SGreg Roach     * @return string
6439219296aSGreg Roach     */
6449219296aSGreg Roach    public function totalDeceased(): string
6459219296aSGreg Roach    {
6469219296aSGreg Roach        return $this->individualRepository->totalDeceased();
6479219296aSGreg Roach    }
6489219296aSGreg Roach
6499219296aSGreg Roach    /**
6500dcd9387SGreg Roach     * @return string
6519219296aSGreg Roach     */
6529219296aSGreg Roach    public function totalDeceasedPercentage(): string
6539219296aSGreg Roach    {
6549219296aSGreg Roach        return $this->individualRepository->totalDeceasedPercentage();
6559219296aSGreg Roach    }
6569219296aSGreg Roach
6579219296aSGreg Roach    /**
6580dcd9387SGreg Roach     * @param string|null $color_living
6590dcd9387SGreg Roach     * @param string|null $color_dead
6600dcd9387SGreg Roach     *
6610dcd9387SGreg Roach     * @return string
6629219296aSGreg Roach     */
66388de55fdSRico Sonntag    public function chartMortality(string $color_living = null, string $color_dead = null): string
6649219296aSGreg Roach    {
66588de55fdSRico Sonntag        return $this->individualRepository->chartMortality($color_living, $color_dead);
6669219296aSGreg Roach    }
6679219296aSGreg Roach
6689219296aSGreg Roach    /**
6690dcd9387SGreg Roach     * @return string
6709219296aSGreg Roach     */
6719219296aSGreg Roach    public function totalMedia(): string
6729219296aSGreg Roach    {
6739219296aSGreg Roach        return $this->mediaRepository->totalMedia();
6749219296aSGreg Roach    }
6759219296aSGreg Roach
6769219296aSGreg Roach    /**
6770dcd9387SGreg Roach     * @return string
6789219296aSGreg Roach     */
6799219296aSGreg Roach    public function totalMediaAudio(): string
6809219296aSGreg Roach    {
6819219296aSGreg Roach        return $this->mediaRepository->totalMediaAudio();
6829219296aSGreg Roach    }
6839219296aSGreg Roach
6849219296aSGreg Roach    /**
6850dcd9387SGreg Roach     * @return string
6869219296aSGreg Roach     */
6879219296aSGreg Roach    public function totalMediaBook(): string
6889219296aSGreg Roach    {
6899219296aSGreg Roach        return $this->mediaRepository->totalMediaBook();
6909219296aSGreg Roach    }
6919219296aSGreg Roach
6929219296aSGreg Roach    /**
6930dcd9387SGreg Roach     * @return string
6949219296aSGreg Roach     */
6959219296aSGreg Roach    public function totalMediaCard(): string
6969219296aSGreg Roach    {
6979219296aSGreg Roach        return $this->mediaRepository->totalMediaCard();
6989219296aSGreg Roach    }
6999219296aSGreg Roach
7009219296aSGreg Roach    /**
7010dcd9387SGreg Roach     * @return string
7029219296aSGreg Roach     */
7039219296aSGreg Roach    public function totalMediaCertificate(): string
7049219296aSGreg Roach    {
7059219296aSGreg Roach        return $this->mediaRepository->totalMediaCertificate();
7069219296aSGreg Roach    }
7079219296aSGreg Roach
7089219296aSGreg Roach    /**
7090dcd9387SGreg Roach     * @return string
7109219296aSGreg Roach     */
7119219296aSGreg Roach    public function totalMediaCoatOfArms(): string
7129219296aSGreg Roach    {
7139219296aSGreg Roach        return $this->mediaRepository->totalMediaCoatOfArms();
7149219296aSGreg Roach    }
7159219296aSGreg Roach
7169219296aSGreg Roach    /**
7170dcd9387SGreg Roach     * @return string
7189219296aSGreg Roach     */
7199219296aSGreg Roach    public function totalMediaDocument(): string
7209219296aSGreg Roach    {
7219219296aSGreg Roach        return $this->mediaRepository->totalMediaDocument();
7229219296aSGreg Roach    }
7239219296aSGreg Roach
7249219296aSGreg Roach    /**
7250dcd9387SGreg Roach     * @return string
7269219296aSGreg Roach     */
7279219296aSGreg Roach    public function totalMediaElectronic(): string
7289219296aSGreg Roach    {
7299219296aSGreg Roach        return $this->mediaRepository->totalMediaElectronic();
7309219296aSGreg Roach    }
7319219296aSGreg Roach
7329219296aSGreg Roach    /**
7330dcd9387SGreg Roach     * @return string
7349219296aSGreg Roach     */
7359219296aSGreg Roach    public function totalMediaMagazine(): string
7369219296aSGreg Roach    {
7379219296aSGreg Roach        return $this->mediaRepository->totalMediaMagazine();
7389219296aSGreg Roach    }
7399219296aSGreg Roach
7409219296aSGreg Roach    /**
7410dcd9387SGreg Roach     * @return string
7429219296aSGreg Roach     */
7439219296aSGreg Roach    public function totalMediaManuscript(): string
7449219296aSGreg Roach    {
7459219296aSGreg Roach        return $this->mediaRepository->totalMediaManuscript();
7469219296aSGreg Roach    }
7479219296aSGreg Roach
7489219296aSGreg Roach    /**
7490dcd9387SGreg Roach     * @return string
7509219296aSGreg Roach     */
7519219296aSGreg Roach    public function totalMediaMap(): string
7529219296aSGreg Roach    {
7539219296aSGreg Roach        return $this->mediaRepository->totalMediaMap();
7549219296aSGreg Roach    }
7559219296aSGreg Roach
7569219296aSGreg Roach    /**
7570dcd9387SGreg Roach     * @return string
7589219296aSGreg Roach     */
7599219296aSGreg Roach    public function totalMediaFiche(): string
7609219296aSGreg Roach    {
7619219296aSGreg Roach        return $this->mediaRepository->totalMediaFiche();
7629219296aSGreg Roach    }
7639219296aSGreg Roach
7649219296aSGreg Roach    /**
7650dcd9387SGreg Roach     * @return string
7669219296aSGreg Roach     */
7679219296aSGreg Roach    public function totalMediaFilm(): string
7689219296aSGreg Roach    {
7699219296aSGreg Roach        return $this->mediaRepository->totalMediaFilm();
7709219296aSGreg Roach    }
7719219296aSGreg Roach
7729219296aSGreg Roach    /**
7730dcd9387SGreg Roach     * @return string
7749219296aSGreg Roach     */
7759219296aSGreg Roach    public function totalMediaNewspaper(): string
7769219296aSGreg Roach    {
7779219296aSGreg Roach        return $this->mediaRepository->totalMediaNewspaper();
7789219296aSGreg Roach    }
7799219296aSGreg Roach
7809219296aSGreg Roach    /**
7810dcd9387SGreg Roach     * @return string
7829219296aSGreg Roach     */
7839219296aSGreg Roach    public function totalMediaPainting(): string
7849219296aSGreg Roach    {
7859219296aSGreg Roach        return $this->mediaRepository->totalMediaPainting();
7869219296aSGreg Roach    }
7879219296aSGreg Roach
7889219296aSGreg Roach    /**
7890dcd9387SGreg Roach     * @return string
7909219296aSGreg Roach     */
7919219296aSGreg Roach    public function totalMediaPhoto(): string
7929219296aSGreg Roach    {
7939219296aSGreg Roach        return $this->mediaRepository->totalMediaPhoto();
7949219296aSGreg Roach    }
7959219296aSGreg Roach
7969219296aSGreg Roach    /**
7970dcd9387SGreg Roach     * @return string
7989219296aSGreg Roach     */
7999219296aSGreg Roach    public function totalMediaTombstone(): string
8009219296aSGreg Roach    {
8019219296aSGreg Roach        return $this->mediaRepository->totalMediaTombstone();
8029219296aSGreg Roach    }
8039219296aSGreg Roach
8049219296aSGreg Roach    /**
8050dcd9387SGreg Roach     * @return string
8069219296aSGreg Roach     */
8079219296aSGreg Roach    public function totalMediaVideo(): string
8089219296aSGreg Roach    {
8099219296aSGreg Roach        return $this->mediaRepository->totalMediaVideo();
8109219296aSGreg Roach    }
8119219296aSGreg Roach
8129219296aSGreg Roach    /**
8130dcd9387SGreg Roach     * @return string
8149219296aSGreg Roach     */
8159219296aSGreg Roach    public function totalMediaOther(): string
8169219296aSGreg Roach    {
8179219296aSGreg Roach        return $this->mediaRepository->totalMediaOther();
8189219296aSGreg Roach    }
8199219296aSGreg Roach
8209219296aSGreg Roach    /**
8210dcd9387SGreg Roach     * @return string
8229219296aSGreg Roach     */
8239219296aSGreg Roach    public function totalMediaUnknown(): string
8249219296aSGreg Roach    {
8259219296aSGreg Roach        return $this->mediaRepository->totalMediaUnknown();
8269219296aSGreg Roach    }
8279219296aSGreg Roach
8289219296aSGreg Roach    /**
8290dcd9387SGreg Roach     * @param string|null $color_from
8300dcd9387SGreg Roach     * @param string|null $color_to
8310dcd9387SGreg Roach     *
8320dcd9387SGreg Roach     * @return string
8339219296aSGreg Roach     */
83488de55fdSRico Sonntag    public function chartMedia(string $color_from = null, string $color_to = null): string
8359219296aSGreg Roach    {
83688de55fdSRico Sonntag        return $this->mediaRepository->chartMedia($color_from, $color_to);
8379219296aSGreg Roach    }
8389219296aSGreg Roach
8399219296aSGreg Roach    /**
8400dcd9387SGreg Roach     * @param string $what
8410dcd9387SGreg Roach     * @param string $fact
8420dcd9387SGreg Roach     * @param int    $parent
8430dcd9387SGreg Roach     * @param bool   $country
8440dcd9387SGreg Roach     *
845*3e5f5a4cSGreg Roach     * @return stdClass[]
8469219296aSGreg Roach     */
8479219296aSGreg Roach    public function statsPlaces(string $what = 'ALL', string $fact = '', int $parent = 0, bool $country = false): array
8489219296aSGreg Roach    {
8499219296aSGreg Roach        return $this->placeRepository->statsPlaces($what, $fact, $parent, $country);
8509219296aSGreg Roach    }
8519219296aSGreg Roach
8529219296aSGreg Roach    /**
8530dcd9387SGreg Roach     * @return string
8549219296aSGreg Roach     */
8559219296aSGreg Roach    public function totalPlaces(): string
8569219296aSGreg Roach    {
8579219296aSGreg Roach        return $this->placeRepository->totalPlaces();
8589219296aSGreg Roach    }
8599219296aSGreg Roach
8609219296aSGreg Roach    /**
8610dcd9387SGreg Roach     * @param string $chart_shows
8620dcd9387SGreg Roach     * @param string $chart_type
8630dcd9387SGreg Roach     * @param string $surname
8640dcd9387SGreg Roach     *
8650dcd9387SGreg Roach     * @return string
8669219296aSGreg Roach     */
8679219296aSGreg Roach    public function chartDistribution(
8689219296aSGreg Roach        string $chart_shows = 'world',
8699219296aSGreg Roach        string $chart_type = '',
8709219296aSGreg Roach        string $surname = ''
87198afcacfSGreg Roach    ): string {
8729219296aSGreg Roach        return $this->placeRepository->chartDistribution($chart_shows, $chart_type, $surname);
8739219296aSGreg Roach    }
8749219296aSGreg Roach
8759219296aSGreg Roach    /**
8760dcd9387SGreg Roach     * @return string
8779219296aSGreg Roach     */
8789219296aSGreg Roach    public function commonCountriesList(): string
8799219296aSGreg Roach    {
8809219296aSGreg Roach        return $this->placeRepository->commonCountriesList();
8819219296aSGreg Roach    }
8829219296aSGreg Roach
8839219296aSGreg Roach    /**
8840dcd9387SGreg Roach     * @return string
8859219296aSGreg Roach     */
8869219296aSGreg Roach    public function commonBirthPlacesList(): string
8879219296aSGreg Roach    {
8889219296aSGreg Roach        return $this->placeRepository->commonBirthPlacesList();
8899219296aSGreg Roach    }
8909219296aSGreg Roach
8919219296aSGreg Roach    /**
8920dcd9387SGreg Roach     * @return string
8939219296aSGreg Roach     */
8949219296aSGreg Roach    public function commonDeathPlacesList(): string
8959219296aSGreg Roach    {
8969219296aSGreg Roach        return $this->placeRepository->commonDeathPlacesList();
8979219296aSGreg Roach    }
8989219296aSGreg Roach
8999219296aSGreg Roach    /**
9000dcd9387SGreg Roach     * @return string
9019219296aSGreg Roach     */
9029219296aSGreg Roach    public function commonMarriagePlacesList(): string
9039219296aSGreg Roach    {
9049219296aSGreg Roach        return $this->placeRepository->commonMarriagePlacesList();
9059219296aSGreg Roach    }
9069219296aSGreg Roach
9079219296aSGreg Roach    /**
9080dcd9387SGreg Roach     * @return string
9099219296aSGreg Roach     */
9109219296aSGreg Roach    public function firstBirth(): string
9119219296aSGreg Roach    {
9129219296aSGreg Roach        return $this->familyDatesRepository->firstBirth();
9139219296aSGreg Roach    }
9149219296aSGreg Roach
9159219296aSGreg Roach    /**
9160dcd9387SGreg Roach     * @return string
9179219296aSGreg Roach     */
9189219296aSGreg Roach    public function firstBirthYear(): string
9199219296aSGreg Roach    {
9209219296aSGreg Roach        return $this->familyDatesRepository->firstBirthYear();
9219219296aSGreg Roach    }
9229219296aSGreg Roach
9239219296aSGreg Roach    /**
9240dcd9387SGreg Roach     * @return string
9259219296aSGreg Roach     */
9269219296aSGreg Roach    public function firstBirthName(): string
9279219296aSGreg Roach    {
9289219296aSGreg Roach        return $this->familyDatesRepository->firstBirthName();
9299219296aSGreg Roach    }
9309219296aSGreg Roach
9319219296aSGreg Roach    /**
9320dcd9387SGreg Roach     * @return string
9339219296aSGreg Roach     */
9349219296aSGreg Roach    public function firstBirthPlace(): string
9359219296aSGreg Roach    {
9369219296aSGreg Roach        return $this->familyDatesRepository->firstBirthPlace();
9379219296aSGreg Roach    }
9389219296aSGreg Roach
9399219296aSGreg Roach    /**
9400dcd9387SGreg Roach     * @return string
9419219296aSGreg Roach     */
9429219296aSGreg Roach    public function lastBirth(): string
9439219296aSGreg Roach    {
9449219296aSGreg Roach        return $this->familyDatesRepository->lastBirth();
9459219296aSGreg Roach    }
9469219296aSGreg Roach
9479219296aSGreg Roach    /**
9480dcd9387SGreg Roach     * @return string
9499219296aSGreg Roach     */
9509219296aSGreg Roach    public function lastBirthYear(): string
9519219296aSGreg Roach    {
9529219296aSGreg Roach        return $this->familyDatesRepository->lastBirthYear();
9539219296aSGreg Roach    }
9549219296aSGreg Roach
9559219296aSGreg Roach    /**
9560dcd9387SGreg Roach     * @return string
9579219296aSGreg Roach     */
9589219296aSGreg Roach    public function lastBirthName(): string
9599219296aSGreg Roach    {
9609219296aSGreg Roach        return $this->familyDatesRepository->lastBirthName();
9619219296aSGreg Roach    }
9629219296aSGreg Roach
9639219296aSGreg Roach    /**
9640dcd9387SGreg Roach     * @return string
9659219296aSGreg Roach     */
9669219296aSGreg Roach    public function lastBirthPlace(): string
9679219296aSGreg Roach    {
9689219296aSGreg Roach        return $this->familyDatesRepository->lastBirthPlace();
9699219296aSGreg Roach    }
9709219296aSGreg Roach
9719219296aSGreg Roach    /**
9720dcd9387SGreg Roach     * @param int $year1
9730dcd9387SGreg Roach     * @param int $year2
9740dcd9387SGreg Roach     *
9750dcd9387SGreg Roach     * @return Builder
9769219296aSGreg Roach     */
977cde1d378SGreg Roach    public function statsBirthQuery(int $year1 = -1, int $year2 = -1): Builder
9789219296aSGreg Roach    {
979cde1d378SGreg Roach        return $this->individualRepository->statsBirthQuery($year1, $year2);
980cde1d378SGreg Roach    }
981cde1d378SGreg Roach
982cde1d378SGreg Roach    /**
9830dcd9387SGreg Roach     * @param int $year1
9840dcd9387SGreg Roach     * @param int $year2
9850dcd9387SGreg Roach     *
9860dcd9387SGreg Roach     * @return Builder
987cde1d378SGreg Roach     */
988cde1d378SGreg Roach    public function statsBirthBySexQuery(int $year1 = -1, int $year2 = -1): Builder
989cde1d378SGreg Roach    {
990cde1d378SGreg Roach        return $this->individualRepository->statsBirthBySexQuery($year1, $year2);
9919219296aSGreg Roach    }
9929219296aSGreg Roach
9939219296aSGreg Roach    /**
9940dcd9387SGreg Roach     * @param string|null $color_from
9950dcd9387SGreg Roach     * @param string|null $color_to
9960dcd9387SGreg Roach     *
9970dcd9387SGreg Roach     * @return string
9989219296aSGreg Roach     */
99988de55fdSRico Sonntag    public function statsBirth(string $color_from = null, string $color_to = null): string
10009219296aSGreg Roach    {
100188de55fdSRico Sonntag        return $this->individualRepository->statsBirth($color_from, $color_to);
10029219296aSGreg Roach    }
10039219296aSGreg Roach
10049219296aSGreg Roach    /**
10050dcd9387SGreg Roach     * @return string
10069219296aSGreg Roach     */
10079219296aSGreg Roach    public function firstDeath(): string
10089219296aSGreg Roach    {
10099219296aSGreg Roach        return $this->familyDatesRepository->firstDeath();
10109219296aSGreg Roach    }
10119219296aSGreg Roach
10129219296aSGreg Roach    /**
10130dcd9387SGreg Roach     * @return string
10149219296aSGreg Roach     */
10159219296aSGreg Roach    public function firstDeathYear(): string
10169219296aSGreg Roach    {
10179219296aSGreg Roach        return $this->familyDatesRepository->firstDeathYear();
10189219296aSGreg Roach    }
10199219296aSGreg Roach
10209219296aSGreg Roach    /**
10210dcd9387SGreg Roach     * @return string
10229219296aSGreg Roach     */
10239219296aSGreg Roach    public function firstDeathName(): string
10249219296aSGreg Roach    {
10259219296aSGreg Roach        return $this->familyDatesRepository->firstDeathName();
10269219296aSGreg Roach    }
10279219296aSGreg Roach
10289219296aSGreg Roach    /**
10290dcd9387SGreg Roach     * @return string
10309219296aSGreg Roach     */
10319219296aSGreg Roach    public function firstDeathPlace(): string
10329219296aSGreg Roach    {
10339219296aSGreg Roach        return $this->familyDatesRepository->firstDeathPlace();
10349219296aSGreg Roach    }
10359219296aSGreg Roach
10369219296aSGreg Roach    /**
10370dcd9387SGreg Roach     * @return string
10389219296aSGreg Roach     */
10399219296aSGreg Roach    public function lastDeath(): string
10409219296aSGreg Roach    {
10419219296aSGreg Roach        return $this->familyDatesRepository->lastDeath();
10429219296aSGreg Roach    }
10439219296aSGreg Roach
10449219296aSGreg Roach    /**
10450dcd9387SGreg Roach     * @return string
10469219296aSGreg Roach     */
10479219296aSGreg Roach    public function lastDeathYear(): string
10489219296aSGreg Roach    {
10499219296aSGreg Roach        return $this->familyDatesRepository->lastDeathYear();
10509219296aSGreg Roach    }
10519219296aSGreg Roach
10529219296aSGreg Roach    /**
10530dcd9387SGreg Roach     * @return string
10549219296aSGreg Roach     */
10559219296aSGreg Roach    public function lastDeathName(): string
10569219296aSGreg Roach    {
10579219296aSGreg Roach        return $this->familyDatesRepository->lastDeathName();
10589219296aSGreg Roach    }
10599219296aSGreg Roach
10609219296aSGreg Roach    /**
10610dcd9387SGreg Roach     * @return string
10629219296aSGreg Roach     */
10639219296aSGreg Roach    public function lastDeathPlace(): string
10649219296aSGreg Roach    {
10659219296aSGreg Roach        return $this->familyDatesRepository->lastDeathPlace();
10669219296aSGreg Roach    }
10679219296aSGreg Roach
10689219296aSGreg Roach    /**
10690dcd9387SGreg Roach     * @param int $year1
10700dcd9387SGreg Roach     * @param int $year2
10710dcd9387SGreg Roach     *
10720dcd9387SGreg Roach     * @return Builder
10739219296aSGreg Roach     */
1074cde1d378SGreg Roach    public function statsDeathQuery(int $year1 = -1, int $year2 = -1): Builder
10759219296aSGreg Roach    {
1076cde1d378SGreg Roach        return $this->individualRepository->statsDeathQuery($year1, $year2);
1077cde1d378SGreg Roach    }
1078cde1d378SGreg Roach
1079cde1d378SGreg Roach    /**
10800dcd9387SGreg Roach     * @param int $year1
10810dcd9387SGreg Roach     * @param int $year2
10820dcd9387SGreg Roach     *
10830dcd9387SGreg Roach     * @return Builder
1084cde1d378SGreg Roach     */
1085cde1d378SGreg Roach    public function statsDeathBySexQuery(int $year1 = -1, int $year2 = -1): Builder
1086cde1d378SGreg Roach    {
1087cde1d378SGreg Roach        return $this->individualRepository->statsDeathBySexQuery($year1, $year2);
10889219296aSGreg Roach    }
10899219296aSGreg Roach
10909219296aSGreg Roach    /**
10910dcd9387SGreg Roach     * @param string|null $color_from
10920dcd9387SGreg Roach     * @param string|null $color_to
10930dcd9387SGreg Roach     *
10940dcd9387SGreg Roach     * @return string
10959219296aSGreg Roach     */
109688de55fdSRico Sonntag    public function statsDeath(string $color_from = null, string $color_to = null): string
10979219296aSGreg Roach    {
109888de55fdSRico Sonntag        return $this->individualRepository->statsDeath($color_from, $color_to);
10999219296aSGreg Roach    }
11009219296aSGreg Roach
11019219296aSGreg Roach    /**
1102320f6a24SGreg Roach     * General query on ages.
1103320f6a24SGreg Roach     *
1104320f6a24SGreg Roach     * @param string $related
1105320f6a24SGreg Roach     * @param string $sex
1106320f6a24SGreg Roach     * @param int    $year1
1107320f6a24SGreg Roach     * @param int    $year2
1108320f6a24SGreg Roach     *
1109320f6a24SGreg Roach     * @return array|string
11109219296aSGreg Roach     */
11119219296aSGreg Roach    public function statsAgeQuery(string $related = 'BIRT', string $sex = 'BOTH', int $year1 = -1, int $year2 = -1)
11129219296aSGreg Roach    {
11139219296aSGreg Roach        return $this->individualRepository->statsAgeQuery($related, $sex, $year1, $year2);
11149219296aSGreg Roach    }
11159219296aSGreg Roach
11169219296aSGreg Roach    /**
11170dcd9387SGreg Roach     * @return string
11189219296aSGreg Roach     */
111988de55fdSRico Sonntag    public function statsAge(): string
11209219296aSGreg Roach    {
112188de55fdSRico Sonntag        return $this->individualRepository->statsAge();
11229219296aSGreg Roach    }
11239219296aSGreg Roach
11249219296aSGreg Roach    /**
11250dcd9387SGreg Roach     * @return string
11269219296aSGreg Roach     */
11279219296aSGreg Roach    public function longestLife(): string
11289219296aSGreg Roach    {
11299219296aSGreg Roach        return $this->individualRepository->longestLife();
11309219296aSGreg Roach    }
11319219296aSGreg Roach
11329219296aSGreg Roach    /**
11330dcd9387SGreg Roach     * @return string
11349219296aSGreg Roach     */
11359219296aSGreg Roach    public function longestLifeAge(): string
11369219296aSGreg Roach    {
11379219296aSGreg Roach        return $this->individualRepository->longestLifeAge();
11389219296aSGreg Roach    }
11399219296aSGreg Roach
11409219296aSGreg Roach    /**
11410dcd9387SGreg Roach     * @return string
11429219296aSGreg Roach     */
11439219296aSGreg Roach    public function longestLifeName(): string
11449219296aSGreg Roach    {
11459219296aSGreg Roach        return $this->individualRepository->longestLifeName();
11469219296aSGreg Roach    }
11479219296aSGreg Roach
11489219296aSGreg Roach    /**
11490dcd9387SGreg Roach     * @return string
11509219296aSGreg Roach     */
11519219296aSGreg Roach    public function longestLifeFemale(): string
11529219296aSGreg Roach    {
11539219296aSGreg Roach        return $this->individualRepository->longestLifeFemale();
11549219296aSGreg Roach    }
11559219296aSGreg Roach
11569219296aSGreg Roach    /**
11570dcd9387SGreg Roach     * @return string
11589219296aSGreg Roach     */
11599219296aSGreg Roach    public function longestLifeFemaleAge(): string
11609219296aSGreg Roach    {
11619219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleAge();
11629219296aSGreg Roach    }
11639219296aSGreg Roach
11649219296aSGreg Roach    /**
11650dcd9387SGreg Roach     * @return string
11669219296aSGreg Roach     */
11679219296aSGreg Roach    public function longestLifeFemaleName(): string
11689219296aSGreg Roach    {
11699219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleName();
11709219296aSGreg Roach    }
11719219296aSGreg Roach
11729219296aSGreg Roach    /**
11730dcd9387SGreg Roach     * @return string
11749219296aSGreg Roach     */
11759219296aSGreg Roach    public function longestLifeMale(): string
11769219296aSGreg Roach    {
11779219296aSGreg Roach        return $this->individualRepository->longestLifeMale();
11789219296aSGreg Roach    }
11799219296aSGreg Roach
11809219296aSGreg Roach    /**
11810dcd9387SGreg Roach     * @return string
11829219296aSGreg Roach     */
11839219296aSGreg Roach    public function longestLifeMaleAge(): string
11849219296aSGreg Roach    {
11859219296aSGreg Roach        return $this->individualRepository->longestLifeMaleAge();
11869219296aSGreg Roach    }
11879219296aSGreg Roach
11889219296aSGreg Roach    /**
11890dcd9387SGreg Roach     * @return string
11909219296aSGreg Roach     */
11919219296aSGreg Roach    public function longestLifeMaleName(): string
11929219296aSGreg Roach    {
11939219296aSGreg Roach        return $this->individualRepository->longestLifeMaleName();
11949219296aSGreg Roach    }
11959219296aSGreg Roach
11969219296aSGreg Roach    /**
11970dcd9387SGreg Roach     * @param string $total
11980dcd9387SGreg Roach     *
11990dcd9387SGreg Roach     * @return string
12009219296aSGreg Roach     */
12019219296aSGreg Roach    public function topTenOldest(string $total = '10'): string
12029219296aSGreg Roach    {
12039219296aSGreg Roach        return $this->individualRepository->topTenOldest((int) $total);
12049219296aSGreg Roach    }
12059219296aSGreg Roach
12069219296aSGreg Roach    /**
12070dcd9387SGreg Roach     * @param string $total
12080dcd9387SGreg Roach     *
12090dcd9387SGreg Roach     * @return string
12109219296aSGreg Roach     */
12119219296aSGreg Roach    public function topTenOldestList(string $total = '10'): string
12129219296aSGreg Roach    {
12139219296aSGreg Roach        return $this->individualRepository->topTenOldestList((int) $total);
12149219296aSGreg Roach    }
12159219296aSGreg Roach
12169219296aSGreg Roach    /**
12170dcd9387SGreg Roach     * @param string $total
12180dcd9387SGreg Roach     *
12190dcd9387SGreg Roach     * @return string
12209219296aSGreg Roach     */
12219219296aSGreg Roach    public function topTenOldestFemale(string $total = '10'): string
12229219296aSGreg Roach    {
12239219296aSGreg Roach        return $this->individualRepository->topTenOldestFemale((int) $total);
12249219296aSGreg Roach    }
12259219296aSGreg Roach
12269219296aSGreg Roach    /**
12270dcd9387SGreg Roach     * @param string $total
12280dcd9387SGreg Roach     *
12290dcd9387SGreg Roach     * @return string
12309219296aSGreg Roach     */
12319219296aSGreg Roach    public function topTenOldestFemaleList(string $total = '10'): string
12329219296aSGreg Roach    {
12339219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleList((int) $total);
12349219296aSGreg Roach    }
12359219296aSGreg Roach
12369219296aSGreg Roach    /**
12370dcd9387SGreg Roach     * @param string $total
12380dcd9387SGreg Roach     *
12390dcd9387SGreg Roach     * @return string
12409219296aSGreg Roach     */
12419219296aSGreg Roach    public function topTenOldestMale(string $total = '10'): string
12429219296aSGreg Roach    {
12439219296aSGreg Roach        return $this->individualRepository->topTenOldestMale((int) $total);
12449219296aSGreg Roach    }
12459219296aSGreg Roach
12469219296aSGreg Roach    /**
12470dcd9387SGreg Roach     * @param string $total
12480dcd9387SGreg Roach     *
12490dcd9387SGreg Roach     * @return string
12509219296aSGreg Roach     */
12519219296aSGreg Roach    public function topTenOldestMaleList(string $total = '10'): string
12529219296aSGreg Roach    {
12539219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleList((int) $total);
12549219296aSGreg Roach    }
12559219296aSGreg Roach
12569219296aSGreg Roach    /**
12570dcd9387SGreg Roach     * @param string $total
12580dcd9387SGreg Roach     *
12590dcd9387SGreg Roach     * @return string
12609219296aSGreg Roach     */
12619219296aSGreg Roach    public function topTenOldestAlive(string $total = '10'): string
12629219296aSGreg Roach    {
12639219296aSGreg Roach        return $this->individualRepository->topTenOldestAlive((int) $total);
12649219296aSGreg Roach    }
12659219296aSGreg Roach
12669219296aSGreg Roach    /**
12670dcd9387SGreg Roach     * @param string $total
12680dcd9387SGreg Roach     *
12690dcd9387SGreg Roach     * @return string
12709219296aSGreg Roach     */
12719219296aSGreg Roach    public function topTenOldestListAlive(string $total = '10'): string
12729219296aSGreg Roach    {
12739219296aSGreg Roach        return $this->individualRepository->topTenOldestListAlive((int) $total);
12749219296aSGreg Roach    }
12759219296aSGreg Roach
12769219296aSGreg Roach    /**
12770dcd9387SGreg Roach     * @param string $total
12780dcd9387SGreg Roach     *
12790dcd9387SGreg Roach     * @return string
12809219296aSGreg Roach     */
12819219296aSGreg Roach    public function topTenOldestFemaleAlive(string $total = '10'): string
12829219296aSGreg Roach    {
12839219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleAlive((int) $total);
12849219296aSGreg Roach    }
12859219296aSGreg Roach
12869219296aSGreg Roach    /**
12870dcd9387SGreg Roach     * @param string $total
12880dcd9387SGreg Roach     *
12890dcd9387SGreg Roach     * @return string
12909219296aSGreg Roach     */
12919219296aSGreg Roach    public function topTenOldestFemaleListAlive(string $total = '10'): string
12929219296aSGreg Roach    {
12939219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleListAlive((int) $total);
12949219296aSGreg Roach    }
12959219296aSGreg Roach
12969219296aSGreg Roach    /**
12970dcd9387SGreg Roach     * @param string $total
12980dcd9387SGreg Roach     *
12990dcd9387SGreg Roach     * @return string
13009219296aSGreg Roach     */
13019219296aSGreg Roach    public function topTenOldestMaleAlive(string $total = '10'): string
13029219296aSGreg Roach    {
13039219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleAlive((int) $total);
13049219296aSGreg Roach    }
13059219296aSGreg Roach
13069219296aSGreg Roach    /**
13070dcd9387SGreg Roach     * @param string $total
13080dcd9387SGreg Roach     *
13090dcd9387SGreg Roach     * @return string
13109219296aSGreg Roach     */
13119219296aSGreg Roach    public function topTenOldestMaleListAlive(string $total = '10'): string
13129219296aSGreg Roach    {
13139219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleListAlive((int) $total);
13149219296aSGreg Roach    }
13159219296aSGreg Roach
13169219296aSGreg Roach    /**
13170dcd9387SGreg Roach     * @param bool $show_years
13180dcd9387SGreg Roach     *
13190dcd9387SGreg Roach     * @return string
13209219296aSGreg Roach     */
13219219296aSGreg Roach    public function averageLifespan(bool $show_years = false): string
13229219296aSGreg Roach    {
13239219296aSGreg Roach        return $this->individualRepository->averageLifespan($show_years);
13249219296aSGreg Roach    }
13259219296aSGreg Roach
13269219296aSGreg Roach    /**
13270dcd9387SGreg Roach     * @param bool $show_years
13280dcd9387SGreg Roach     *
13290dcd9387SGreg Roach     * @return string
13309219296aSGreg Roach     */
13319219296aSGreg Roach    public function averageLifespanFemale(bool $show_years = false): string
13329219296aSGreg Roach    {
13339219296aSGreg Roach        return $this->individualRepository->averageLifespanFemale($show_years);
13349219296aSGreg Roach    }
13359219296aSGreg Roach
13369219296aSGreg Roach    /**
13370dcd9387SGreg Roach     * @param bool $show_years
13380dcd9387SGreg Roach     *
13390dcd9387SGreg Roach     * @return string
13409219296aSGreg Roach     */
13419219296aSGreg Roach    public function averageLifespanMale(bool $show_years = false): string
13429219296aSGreg Roach    {
13439219296aSGreg Roach        return $this->individualRepository->averageLifespanMale($show_years);
13449219296aSGreg Roach    }
13459219296aSGreg Roach
13469219296aSGreg Roach    /**
13470dcd9387SGreg Roach     * @return string
13489219296aSGreg Roach     */
13499219296aSGreg Roach    public function firstEvent(): string
13509219296aSGreg Roach    {
13519219296aSGreg Roach        return $this->eventRepository->firstEvent();
13529219296aSGreg Roach    }
13539219296aSGreg Roach
13549219296aSGreg Roach    /**
13550dcd9387SGreg Roach     * @return string
13569219296aSGreg Roach     */
13579219296aSGreg Roach    public function firstEventYear(): string
13589219296aSGreg Roach    {
13599219296aSGreg Roach        return $this->eventRepository->firstEventYear();
13609219296aSGreg Roach    }
13619219296aSGreg Roach
13629219296aSGreg Roach    /**
13630dcd9387SGreg Roach     * @return string
13649219296aSGreg Roach     */
13659219296aSGreg Roach    public function firstEventType(): string
13669219296aSGreg Roach    {
13679219296aSGreg Roach        return $this->eventRepository->firstEventType();
13689219296aSGreg Roach    }
13699219296aSGreg Roach
13709219296aSGreg Roach    /**
13710dcd9387SGreg Roach     * @return string
13729219296aSGreg Roach     */
13739219296aSGreg Roach    public function firstEventName(): string
13749219296aSGreg Roach    {
13759219296aSGreg Roach        return $this->eventRepository->firstEventName();
13769219296aSGreg Roach    }
13779219296aSGreg Roach
13789219296aSGreg Roach    /**
13790dcd9387SGreg Roach     * @return string
13809219296aSGreg Roach     */
13819219296aSGreg Roach    public function firstEventPlace(): string
13829219296aSGreg Roach    {
13839219296aSGreg Roach        return $this->eventRepository->firstEventPlace();
13849219296aSGreg Roach    }
13859219296aSGreg Roach
13869219296aSGreg Roach    /**
13870dcd9387SGreg Roach     * @return string
13889219296aSGreg Roach     */
13899219296aSGreg Roach    public function lastEvent(): string
13909219296aSGreg Roach    {
13919219296aSGreg Roach        return $this->eventRepository->lastEvent();
13929219296aSGreg Roach    }
13939219296aSGreg Roach
13949219296aSGreg Roach    /**
13950dcd9387SGreg Roach     * @return string
13969219296aSGreg Roach     */
13979219296aSGreg Roach    public function lastEventYear(): string
13989219296aSGreg Roach    {
13999219296aSGreg Roach        return $this->eventRepository->lastEventYear();
14009219296aSGreg Roach    }
14019219296aSGreg Roach
14029219296aSGreg Roach    /**
14030dcd9387SGreg Roach     * @return string
14049219296aSGreg Roach     */
14059219296aSGreg Roach    public function lastEventType(): string
14069219296aSGreg Roach    {
14079219296aSGreg Roach        return $this->eventRepository->lastEventType();
14089219296aSGreg Roach    }
14099219296aSGreg Roach
14109219296aSGreg Roach    /**
14110dcd9387SGreg Roach     * @return string
14129219296aSGreg Roach     */
14139219296aSGreg Roach    public function lastEventName(): string
14149219296aSGreg Roach    {
14159219296aSGreg Roach        return $this->eventRepository->lastEventName();
14169219296aSGreg Roach    }
14179219296aSGreg Roach
14189219296aSGreg Roach    /**
14190dcd9387SGreg Roach     * @return string
14209219296aSGreg Roach     */
14219219296aSGreg Roach    public function lastEventPlace(): string
14229219296aSGreg Roach    {
14239219296aSGreg Roach        return $this->eventRepository->lastEventType();
14249219296aSGreg Roach    }
14259219296aSGreg Roach
14269219296aSGreg Roach    /**
14270dcd9387SGreg Roach     * @return string
14289219296aSGreg Roach     */
14299219296aSGreg Roach    public function firstMarriage(): string
14309219296aSGreg Roach    {
14319219296aSGreg Roach        return $this->familyDatesRepository->firstMarriage();
14329219296aSGreg Roach    }
14339219296aSGreg Roach
14349219296aSGreg Roach    /**
14350dcd9387SGreg Roach     * @return string
14369219296aSGreg Roach     */
14379219296aSGreg Roach    public function firstMarriageYear(): string
14389219296aSGreg Roach    {
14399219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageYear();
14409219296aSGreg Roach    }
14419219296aSGreg Roach
14429219296aSGreg Roach    /**
14430dcd9387SGreg Roach     * @return string
14449219296aSGreg Roach     */
14459219296aSGreg Roach    public function firstMarriageName(): string
14469219296aSGreg Roach    {
14479219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageName();
14489219296aSGreg Roach    }
14499219296aSGreg Roach
14509219296aSGreg Roach    /**
14510dcd9387SGreg Roach     * @return string
14529219296aSGreg Roach     */
14539219296aSGreg Roach    public function firstMarriagePlace(): string
14549219296aSGreg Roach    {
14559219296aSGreg Roach        return $this->familyDatesRepository->firstMarriagePlace();
14569219296aSGreg Roach    }
14579219296aSGreg Roach
14589219296aSGreg Roach    /**
14590dcd9387SGreg Roach     * @return string
14609219296aSGreg Roach     */
14619219296aSGreg Roach    public function lastMarriage(): string
14629219296aSGreg Roach    {
14639219296aSGreg Roach        return $this->familyDatesRepository->lastMarriage();
14649219296aSGreg Roach    }
14659219296aSGreg Roach
14669219296aSGreg Roach    /**
14670dcd9387SGreg Roach     * @return string
14689219296aSGreg Roach     */
14699219296aSGreg Roach    public function lastMarriageYear(): string
14709219296aSGreg Roach    {
14719219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageYear();
14729219296aSGreg Roach    }
14739219296aSGreg Roach
14749219296aSGreg Roach    /**
14750dcd9387SGreg Roach     * @return string
14769219296aSGreg Roach     */
14779219296aSGreg Roach    public function lastMarriageName(): string
14789219296aSGreg Roach    {
14799219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageName();
14809219296aSGreg Roach    }
14819219296aSGreg Roach
14829219296aSGreg Roach    /**
14830dcd9387SGreg Roach     * @return string
14849219296aSGreg Roach     */
14859219296aSGreg Roach    public function lastMarriagePlace(): string
14869219296aSGreg Roach    {
14879219296aSGreg Roach        return $this->familyDatesRepository->lastMarriagePlace();
14889219296aSGreg Roach    }
14899219296aSGreg Roach
14909219296aSGreg Roach    /**
14910dcd9387SGreg Roach     * @param int $year1
14920dcd9387SGreg Roach     * @param int $year2
14930dcd9387SGreg Roach     *
14940dcd9387SGreg Roach     * @return Builder
14959219296aSGreg Roach     */
1496e6f3d5e2SGreg Roach    public function statsMarriageQuery(int $year1 = -1, int $year2 = -1): Builder
14979219296aSGreg Roach    {
1498e6f3d5e2SGreg Roach        return $this->familyRepository->statsMarriageQuery($year1, $year2);
1499e6f3d5e2SGreg Roach    }
1500e6f3d5e2SGreg Roach
1501e6f3d5e2SGreg Roach    /**
15020dcd9387SGreg Roach     * @param int $year1
15030dcd9387SGreg Roach     * @param int $year2
15040dcd9387SGreg Roach     *
15050dcd9387SGreg Roach     * @return Builder
1506e6f3d5e2SGreg Roach     */
1507e6f3d5e2SGreg Roach    public function statsFirstMarriageQuery(int $year1 = -1, int $year2 = -1): Builder
1508e6f3d5e2SGreg Roach    {
1509e6f3d5e2SGreg Roach        return $this->familyRepository->statsFirstMarriageQuery($year1, $year2);
15109219296aSGreg Roach    }
15119219296aSGreg Roach
15129219296aSGreg Roach    /**
15130dcd9387SGreg Roach     * @param string|null $color_from
15140dcd9387SGreg Roach     * @param string|null $color_to
15150dcd9387SGreg Roach     *
15160dcd9387SGreg Roach     * @return string
15179219296aSGreg Roach     */
151888de55fdSRico Sonntag    public function statsMarr(string $color_from = null, string $color_to = null): string
15199219296aSGreg Roach    {
152088de55fdSRico Sonntag        return $this->familyRepository->statsMarr($color_from, $color_to);
15219219296aSGreg Roach    }
15229219296aSGreg Roach
15239219296aSGreg Roach    /**
15240dcd9387SGreg Roach     * @return string
15259219296aSGreg Roach     */
15269219296aSGreg Roach    public function firstDivorce(): string
15279219296aSGreg Roach    {
15289219296aSGreg Roach        return $this->familyDatesRepository->firstDivorce();
15299219296aSGreg Roach    }
15309219296aSGreg Roach
15319219296aSGreg Roach    /**
15320dcd9387SGreg Roach     * @return string
15339219296aSGreg Roach     */
15349219296aSGreg Roach    public function firstDivorceYear(): string
15359219296aSGreg Roach    {
15369219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceYear();
15379219296aSGreg Roach    }
15389219296aSGreg Roach
15399219296aSGreg Roach    /**
15400dcd9387SGreg Roach     * @return string
15419219296aSGreg Roach     */
15429219296aSGreg Roach    public function firstDivorceName(): string
15439219296aSGreg Roach    {
15449219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceName();
15459219296aSGreg Roach    }
15469219296aSGreg Roach
15479219296aSGreg Roach    /**
15480dcd9387SGreg Roach     * @return string
15499219296aSGreg Roach     */
15509219296aSGreg Roach    public function firstDivorcePlace(): string
15519219296aSGreg Roach    {
15529219296aSGreg Roach        return $this->familyDatesRepository->firstDivorcePlace();
15539219296aSGreg Roach    }
15549219296aSGreg Roach
15559219296aSGreg Roach    /**
15560dcd9387SGreg Roach     * @return string
15579219296aSGreg Roach     */
15589219296aSGreg Roach    public function lastDivorce(): string
15599219296aSGreg Roach    {
15609219296aSGreg Roach        return $this->familyDatesRepository->lastDivorce();
15619219296aSGreg Roach    }
15629219296aSGreg Roach
15639219296aSGreg Roach    /**
15640dcd9387SGreg Roach     * @return string
15659219296aSGreg Roach     */
15669219296aSGreg Roach    public function lastDivorceYear(): string
15679219296aSGreg Roach    {
15689219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceYear();
15699219296aSGreg Roach    }
15709219296aSGreg Roach
15719219296aSGreg Roach    /**
15720dcd9387SGreg Roach     * @return string
15739219296aSGreg Roach     */
15749219296aSGreg Roach    public function lastDivorceName(): string
15759219296aSGreg Roach    {
15769219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceName();
15779219296aSGreg Roach    }
15789219296aSGreg Roach
15799219296aSGreg Roach    /**
15800dcd9387SGreg Roach     * @return string
15819219296aSGreg Roach     */
15829219296aSGreg Roach    public function lastDivorcePlace(): string
15839219296aSGreg Roach    {
15849219296aSGreg Roach        return $this->familyDatesRepository->lastDivorcePlace();
15859219296aSGreg Roach    }
15869219296aSGreg Roach
15879219296aSGreg Roach    /**
15880dcd9387SGreg Roach     * @param string|null $color_from
15890dcd9387SGreg Roach     * @param string|null $color_to
15900dcd9387SGreg Roach     *
15910dcd9387SGreg Roach     * @return string
15929219296aSGreg Roach     */
159388de55fdSRico Sonntag    public function statsDiv(string $color_from = null, string $color_to = null): string
15949219296aSGreg Roach    {
159588de55fdSRico Sonntag        return $this->familyRepository->statsDiv($color_from, $color_to);
15969219296aSGreg Roach    }
15979219296aSGreg Roach
15989219296aSGreg Roach    /**
15990dcd9387SGreg Roach     * @return string
16009219296aSGreg Roach     */
16019219296aSGreg Roach    public function youngestMarriageFemale(): string
16029219296aSGreg Roach    {
16039219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemale();
16049219296aSGreg Roach    }
16059219296aSGreg Roach
16069219296aSGreg Roach    /**
16070dcd9387SGreg Roach     * @return string
16089219296aSGreg Roach     */
16099219296aSGreg Roach    public function youngestMarriageFemaleName(): string
16109219296aSGreg Roach    {
16119219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleName();
16129219296aSGreg Roach    }
16139219296aSGreg Roach
16149219296aSGreg Roach    /**
16150dcd9387SGreg Roach     * @param string $show_years
16160dcd9387SGreg Roach     *
16170dcd9387SGreg Roach     * @return string
16189219296aSGreg Roach     */
16199219296aSGreg Roach    public function youngestMarriageFemaleAge(string $show_years = ''): string
16209219296aSGreg Roach    {
16219219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleAge($show_years);
16229219296aSGreg Roach    }
16239219296aSGreg Roach
16249219296aSGreg Roach    /**
16250dcd9387SGreg Roach     * @return string
16269219296aSGreg Roach     */
16279219296aSGreg Roach    public function oldestMarriageFemale(): string
16289219296aSGreg Roach    {
16299219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemale();
16309219296aSGreg Roach    }
16319219296aSGreg Roach
16329219296aSGreg Roach    /**
16330dcd9387SGreg Roach     * @return string
16349219296aSGreg Roach     */
16359219296aSGreg Roach    public function oldestMarriageFemaleName(): string
16369219296aSGreg Roach    {
16379219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleName();
16389219296aSGreg Roach    }
16399219296aSGreg Roach
16409219296aSGreg Roach    /**
16410dcd9387SGreg Roach     * @param string $show_years
16420dcd9387SGreg Roach     *
16430dcd9387SGreg Roach     * @return string
16449219296aSGreg Roach     */
16459219296aSGreg Roach    public function oldestMarriageFemaleAge(string $show_years = ''): string
16469219296aSGreg Roach    {
16479219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleAge($show_years);
16489219296aSGreg Roach    }
16499219296aSGreg Roach
16509219296aSGreg Roach    /**
16510dcd9387SGreg Roach     * @return string
16529219296aSGreg Roach     */
16539219296aSGreg Roach    public function youngestMarriageMale(): string
16549219296aSGreg Roach    {
16559219296aSGreg Roach        return $this->familyRepository->youngestMarriageMale();
16569219296aSGreg Roach    }
16579219296aSGreg Roach
16589219296aSGreg Roach    /**
16590dcd9387SGreg Roach     * @return string
16609219296aSGreg Roach     */
16619219296aSGreg Roach    public function youngestMarriageMaleName(): string
16629219296aSGreg Roach    {
16639219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleName();
16649219296aSGreg Roach    }
16659219296aSGreg Roach
16669219296aSGreg Roach    /**
16670dcd9387SGreg Roach     * @param string $show_years
16680dcd9387SGreg Roach     *
16690dcd9387SGreg Roach     * @return string
16709219296aSGreg Roach     */
16719219296aSGreg Roach    public function youngestMarriageMaleAge(string $show_years = ''): string
16729219296aSGreg Roach    {
16739219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleAge($show_years);
16749219296aSGreg Roach    }
16759219296aSGreg Roach
16769219296aSGreg Roach    /**
16770dcd9387SGreg Roach     * @return string
16789219296aSGreg Roach     */
16799219296aSGreg Roach    public function oldestMarriageMale(): string
16809219296aSGreg Roach    {
16819219296aSGreg Roach        return $this->familyRepository->oldestMarriageMale();
16829219296aSGreg Roach    }
16839219296aSGreg Roach
16849219296aSGreg Roach    /**
16850dcd9387SGreg Roach     * @return string
16869219296aSGreg Roach     */
16879219296aSGreg Roach    public function oldestMarriageMaleName(): string
16889219296aSGreg Roach    {
16899219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleName();
16909219296aSGreg Roach    }
16919219296aSGreg Roach
16929219296aSGreg Roach    /**
16930dcd9387SGreg Roach     * @param string $show_years
16940dcd9387SGreg Roach     *
16950dcd9387SGreg Roach     * @return string
16969219296aSGreg Roach     */
16979219296aSGreg Roach    public function oldestMarriageMaleAge(string $show_years = ''): string
16989219296aSGreg Roach    {
16999219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleAge($show_years);
17009219296aSGreg Roach    }
17019219296aSGreg Roach
17029219296aSGreg Roach    /**
17030dcd9387SGreg Roach     * @param string $sex
17040dcd9387SGreg Roach     * @param int    $year1
17050dcd9387SGreg Roach     * @param int    $year2
17060dcd9387SGreg Roach     *
17070dcd9387SGreg Roach     * @return array
17089219296aSGreg Roach     */
1709afa8d404SGreg Roach    public function statsMarrAgeQuery(string $sex, int $year1 = -1, int $year2 = -1): array
17109219296aSGreg Roach    {
17119219296aSGreg Roach        return $this->familyRepository->statsMarrAgeQuery($sex, $year1, $year2);
17129219296aSGreg Roach    }
17139219296aSGreg Roach
17149219296aSGreg Roach    /**
17150dcd9387SGreg Roach     * @return string
17169219296aSGreg Roach     */
171788de55fdSRico Sonntag    public function statsMarrAge(): string
17189219296aSGreg Roach    {
171988de55fdSRico Sonntag        return $this->familyRepository->statsMarrAge();
17209219296aSGreg Roach    }
17219219296aSGreg Roach
17229219296aSGreg Roach    /**
17230dcd9387SGreg Roach     * @param string $total
17240dcd9387SGreg Roach     *
17250dcd9387SGreg Roach     * @return string
17269219296aSGreg Roach     */
17279219296aSGreg Roach    public function ageBetweenSpousesMF(string $total = '10'): string
17289219296aSGreg Roach    {
17299219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMF((int) $total);
17309219296aSGreg Roach    }
17319219296aSGreg Roach
17329219296aSGreg Roach    /**
17330dcd9387SGreg Roach     * @param string $total
17340dcd9387SGreg Roach     *
17350dcd9387SGreg Roach     * @return string
17369219296aSGreg Roach     */
17379219296aSGreg Roach    public function ageBetweenSpousesMFList(string $total = '10'): string
17389219296aSGreg Roach    {
17399219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMFList((int) $total);
17409219296aSGreg Roach    }
17419219296aSGreg Roach
17429219296aSGreg Roach    /**
17430dcd9387SGreg Roach     * @param string $total
17440dcd9387SGreg Roach     *
17450dcd9387SGreg Roach     * @return string
17469219296aSGreg Roach     */
17479219296aSGreg Roach    public function ageBetweenSpousesFM(string $total = '10'): string
17489219296aSGreg Roach    {
17499219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFM((int) $total);
17509219296aSGreg Roach    }
17519219296aSGreg Roach
17529219296aSGreg Roach    /**
17530dcd9387SGreg Roach     * @param string $total
17540dcd9387SGreg Roach     *
17550dcd9387SGreg Roach     * @return string
17569219296aSGreg Roach     */
17579219296aSGreg Roach    public function ageBetweenSpousesFMList(string $total = '10'): string
17589219296aSGreg Roach    {
17599219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFMList((int) $total);
17609219296aSGreg Roach    }
17619219296aSGreg Roach
17629219296aSGreg Roach    /**
17630dcd9387SGreg Roach     * @return string
17649219296aSGreg Roach     */
17659219296aSGreg Roach    public function topAgeOfMarriageFamily(): string
17669219296aSGreg Roach    {
17679219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamily();
17689219296aSGreg Roach    }
17699219296aSGreg Roach
17709219296aSGreg Roach    /**
17710dcd9387SGreg Roach     * @return string
17729219296aSGreg Roach     */
17739219296aSGreg Roach    public function topAgeOfMarriage(): string
17749219296aSGreg Roach    {
17759219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriage();
17769219296aSGreg Roach    }
17779219296aSGreg Roach
17789219296aSGreg Roach    /**
17790dcd9387SGreg Roach     * @param string $total
17800dcd9387SGreg Roach     *
17810dcd9387SGreg Roach     * @return string
17829219296aSGreg Roach     */
17839219296aSGreg Roach    public function topAgeOfMarriageFamilies(string $total = '10'): string
17849219296aSGreg Roach    {
17859219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamilies((int) $total);
17869219296aSGreg Roach    }
17879219296aSGreg Roach
17889219296aSGreg Roach    /**
17890dcd9387SGreg Roach     * @param string $total
17900dcd9387SGreg Roach     *
17910dcd9387SGreg Roach     * @return string
17929219296aSGreg Roach     */
17939219296aSGreg Roach    public function topAgeOfMarriageFamiliesList(string $total = '10'): string
17949219296aSGreg Roach    {
17959219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamiliesList((int) $total);
17969219296aSGreg Roach    }
17979219296aSGreg Roach
17989219296aSGreg Roach    /**
17990dcd9387SGreg Roach     * @return string
18009219296aSGreg Roach     */
18019219296aSGreg Roach    public function minAgeOfMarriageFamily(): string
18029219296aSGreg Roach    {
18039219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamily();
18049219296aSGreg Roach    }
18059219296aSGreg Roach
18069219296aSGreg Roach    /**
18070dcd9387SGreg Roach     * @return string
18089219296aSGreg Roach     */
18099219296aSGreg Roach    public function minAgeOfMarriage(): string
18109219296aSGreg Roach    {
18119219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriage();
18129219296aSGreg Roach    }
18139219296aSGreg Roach
18149219296aSGreg Roach    /**
18150dcd9387SGreg Roach     * @param string $total
18160dcd9387SGreg Roach     *
18170dcd9387SGreg Roach     * @return string
18189219296aSGreg Roach     */
18199219296aSGreg Roach    public function minAgeOfMarriageFamilies(string $total = '10'): string
18209219296aSGreg Roach    {
18219219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamilies((int) $total);
18229219296aSGreg Roach    }
18239219296aSGreg Roach
18249219296aSGreg Roach    /**
18250dcd9387SGreg Roach     * @param string $total
18260dcd9387SGreg Roach     *
18270dcd9387SGreg Roach     * @return string
18289219296aSGreg Roach     */
18299219296aSGreg Roach    public function minAgeOfMarriageFamiliesList(string $total = '10'): string
18309219296aSGreg Roach    {
18319219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamiliesList((int) $total);
18329219296aSGreg Roach    }
18339219296aSGreg Roach
18349219296aSGreg Roach    /**
18350dcd9387SGreg Roach     * @return string
18369219296aSGreg Roach     */
18379219296aSGreg Roach    public function youngestMother(): string
18389219296aSGreg Roach    {
18399219296aSGreg Roach        return $this->familyRepository->youngestMother();
18409219296aSGreg Roach    }
18419219296aSGreg Roach
18429219296aSGreg Roach    /**
18430dcd9387SGreg Roach     * @return string
18449219296aSGreg Roach     */
18459219296aSGreg Roach    public function youngestMotherName(): string
18469219296aSGreg Roach    {
18479219296aSGreg Roach        return $this->familyRepository->youngestMotherName();
18489219296aSGreg Roach    }
18499219296aSGreg Roach
18509219296aSGreg Roach    /**
18510dcd9387SGreg Roach     * @param string $show_years
18520dcd9387SGreg Roach     *
18530dcd9387SGreg Roach     * @return string
18549219296aSGreg Roach     */
18559219296aSGreg Roach    public function youngestMotherAge(string $show_years = ''): string
18569219296aSGreg Roach    {
18579219296aSGreg Roach        return $this->familyRepository->youngestMotherAge($show_years);
18589219296aSGreg Roach    }
18599219296aSGreg Roach
18609219296aSGreg Roach    /**
18610dcd9387SGreg Roach     * @return string
18629219296aSGreg Roach     */
18639219296aSGreg Roach    public function oldestMother(): string
18649219296aSGreg Roach    {
18659219296aSGreg Roach        return $this->familyRepository->oldestMother();
18669219296aSGreg Roach    }
18679219296aSGreg Roach
18689219296aSGreg Roach    /**
18690dcd9387SGreg Roach     * @return string
18709219296aSGreg Roach     */
18719219296aSGreg Roach    public function oldestMotherName(): string
18729219296aSGreg Roach    {
18739219296aSGreg Roach        return $this->familyRepository->oldestMotherName();
18749219296aSGreg Roach    }
18759219296aSGreg Roach
18769219296aSGreg Roach    /**
18770dcd9387SGreg Roach     * @param string $show_years
18780dcd9387SGreg Roach     *
18790dcd9387SGreg Roach     * @return string
18809219296aSGreg Roach     */
18819219296aSGreg Roach    public function oldestMotherAge(string $show_years = ''): string
18829219296aSGreg Roach    {
18839219296aSGreg Roach        return $this->familyRepository->oldestMotherAge($show_years);
18849219296aSGreg Roach    }
18859219296aSGreg Roach
18869219296aSGreg Roach    /**
18870dcd9387SGreg Roach     * @return string
18889219296aSGreg Roach     */
18899219296aSGreg Roach    public function youngestFather(): string
18909219296aSGreg Roach    {
18919219296aSGreg Roach        return $this->familyRepository->youngestFather();
18929219296aSGreg Roach    }
18939219296aSGreg Roach
18949219296aSGreg Roach    /**
18950dcd9387SGreg Roach     * @return string
18969219296aSGreg Roach     */
18979219296aSGreg Roach    public function youngestFatherName(): string
18989219296aSGreg Roach    {
18999219296aSGreg Roach        return $this->familyRepository->youngestFatherName();
19009219296aSGreg Roach    }
19019219296aSGreg Roach
19029219296aSGreg Roach    /**
19030dcd9387SGreg Roach     * @param string $show_years
19040dcd9387SGreg Roach     *
19050dcd9387SGreg Roach     * @return string
19069219296aSGreg Roach     */
19079219296aSGreg Roach    public function youngestFatherAge(string $show_years = ''): string
19089219296aSGreg Roach    {
19099219296aSGreg Roach        return $this->familyRepository->youngestFatherAge($show_years);
19109219296aSGreg Roach    }
19119219296aSGreg Roach
19129219296aSGreg Roach    /**
19130dcd9387SGreg Roach     * @return string
19149219296aSGreg Roach     */
19159219296aSGreg Roach    public function oldestFather(): string
19169219296aSGreg Roach    {
19179219296aSGreg Roach        return $this->familyRepository->oldestFather();
19189219296aSGreg Roach    }
19199219296aSGreg Roach
19209219296aSGreg Roach    /**
19210dcd9387SGreg Roach     * @return string
19229219296aSGreg Roach     */
19239219296aSGreg Roach    public function oldestFatherName(): string
19249219296aSGreg Roach    {
19259219296aSGreg Roach        return $this->familyRepository->oldestFatherName();
19269219296aSGreg Roach    }
19279219296aSGreg Roach
19289219296aSGreg Roach    /**
19290dcd9387SGreg Roach     * @param string $show_years
19300dcd9387SGreg Roach     *
19310dcd9387SGreg Roach     * @return string
19329219296aSGreg Roach     */
19339219296aSGreg Roach    public function oldestFatherAge(string $show_years = ''): string
19349219296aSGreg Roach    {
19359219296aSGreg Roach        return $this->familyRepository->oldestFatherAge($show_years);
19369219296aSGreg Roach    }
19379219296aSGreg Roach
19389219296aSGreg Roach    /**
19390dcd9387SGreg Roach     * @return string
19409219296aSGreg Roach     */
19419219296aSGreg Roach    public function totalMarriedMales(): string
19429219296aSGreg Roach    {
19439219296aSGreg Roach        return $this->familyRepository->totalMarriedMales();
19449219296aSGreg Roach    }
19459219296aSGreg Roach
19469219296aSGreg Roach    /**
19470dcd9387SGreg Roach     * @return string
19489219296aSGreg Roach     */
19499219296aSGreg Roach    public function totalMarriedFemales(): string
19509219296aSGreg Roach    {
19519219296aSGreg Roach        return $this->familyRepository->totalMarriedFemales();
19529219296aSGreg Roach    }
19539219296aSGreg Roach
19549219296aSGreg Roach    /**
19550dcd9387SGreg Roach     * @param int $year1
19560dcd9387SGreg Roach     * @param int $year2
19570dcd9387SGreg Roach     *
19580dcd9387SGreg Roach     * @return Builder
19599219296aSGreg Roach     */
1960999da590SGreg Roach    public function monthFirstChildQuery(int $year1 = -1, int $year2 = -1): Builder
19619219296aSGreg Roach    {
1962999da590SGreg Roach        return $this->familyRepository->monthFirstChildQuery($year1, $year2);
1963999da590SGreg Roach    }
1964999da590SGreg Roach
1965999da590SGreg Roach    /**
19660dcd9387SGreg Roach     * @param int $year1
19670dcd9387SGreg Roach     * @param int $year2
19680dcd9387SGreg Roach     *
19690dcd9387SGreg Roach     * @return Builder
1970999da590SGreg Roach     */
1971999da590SGreg Roach    public function monthFirstChildBySexQuery(int $year1 = -1, int $year2 = -1): Builder
1972999da590SGreg Roach    {
1973999da590SGreg Roach        return $this->familyRepository->monthFirstChildBySexQuery($year1, $year2);
19749219296aSGreg Roach    }
19759219296aSGreg Roach
19769219296aSGreg Roach    /**
19770dcd9387SGreg Roach     * @return string
19789219296aSGreg Roach     */
19799219296aSGreg Roach    public function largestFamily(): string
19809219296aSGreg Roach    {
19819219296aSGreg Roach        return $this->familyRepository->largestFamily();
19829219296aSGreg Roach    }
19839219296aSGreg Roach
19849219296aSGreg Roach    /**
19850dcd9387SGreg Roach     * @return string
19869219296aSGreg Roach     */
19879219296aSGreg Roach    public function largestFamilySize(): string
19889219296aSGreg Roach    {
19899219296aSGreg Roach        return $this->familyRepository->largestFamilySize();
19909219296aSGreg Roach    }
19919219296aSGreg Roach
19929219296aSGreg Roach    /**
19930dcd9387SGreg Roach     * @return string
19949219296aSGreg Roach     */
19959219296aSGreg Roach    public function largestFamilyName(): string
19969219296aSGreg Roach    {
19979219296aSGreg Roach        return $this->familyRepository->largestFamilyName();
19989219296aSGreg Roach    }
19999219296aSGreg Roach
20009219296aSGreg Roach    /**
20010dcd9387SGreg Roach     * @param string $total
20020dcd9387SGreg Roach     *
20030dcd9387SGreg Roach     * @return string
20049219296aSGreg Roach     */
20059219296aSGreg Roach    public function topTenLargestFamily(string $total = '10'): string
20069219296aSGreg Roach    {
20079219296aSGreg Roach        return $this->familyRepository->topTenLargestFamily((int) $total);
20089219296aSGreg Roach    }
20099219296aSGreg Roach
20109219296aSGreg Roach    /**
20110dcd9387SGreg Roach     * @param string $total
20120dcd9387SGreg Roach     *
20130dcd9387SGreg Roach     * @return string
20149219296aSGreg Roach     */
20159219296aSGreg Roach    public function topTenLargestFamilyList(string $total = '10'): string
20169219296aSGreg Roach    {
20179219296aSGreg Roach        return $this->familyRepository->topTenLargestFamilyList((int) $total);
20189219296aSGreg Roach    }
20199219296aSGreg Roach
20209219296aSGreg Roach    /**
20210dcd9387SGreg Roach     * @param string|null $color_from
20220dcd9387SGreg Roach     * @param string|null $color_to
20230dcd9387SGreg Roach     * @param string      $total
20240dcd9387SGreg Roach     *
20250dcd9387SGreg Roach     * @return string
20269219296aSGreg Roach     */
20279219296aSGreg Roach    public function chartLargestFamilies(
20289219296aSGreg Roach        string $color_from = null,
20299219296aSGreg Roach        string $color_to = null,
20309219296aSGreg Roach        string $total = '10'
2031c81b7bf1SGreg Roach    ): string {
203288de55fdSRico Sonntag        return $this->familyRepository->chartLargestFamilies($color_from, $color_to, (int) $total);
20339219296aSGreg Roach    }
20349219296aSGreg Roach
20359219296aSGreg Roach    /**
20360dcd9387SGreg Roach     * @return string
20379219296aSGreg Roach     */
20389219296aSGreg Roach    public function totalChildren(): string
20399219296aSGreg Roach    {
20409219296aSGreg Roach        return $this->familyRepository->totalChildren();
20419219296aSGreg Roach    }
20429219296aSGreg Roach
20439219296aSGreg Roach    /**
20440dcd9387SGreg Roach     * @return string
20459219296aSGreg Roach     */
20469219296aSGreg Roach    public function averageChildren(): string
20479219296aSGreg Roach    {
20489219296aSGreg Roach        return $this->familyRepository->averageChildren();
20499219296aSGreg Roach    }
20509219296aSGreg Roach
20519219296aSGreg Roach    /**
20520dcd9387SGreg Roach     * @param int $year1
20530dcd9387SGreg Roach     * @param int $year2
20540dcd9387SGreg Roach     *
20550dcd9387SGreg Roach     * @return array
20569219296aSGreg Roach     */
2057b1126ab4SGreg Roach    public function statsChildrenQuery(int $year1 = -1, int $year2 = -1): array
20589219296aSGreg Roach    {
2059b1126ab4SGreg Roach        return $this->familyRepository->statsChildrenQuery($year1, $year2);
20609219296aSGreg Roach    }
20619219296aSGreg Roach
20629219296aSGreg Roach    /**
20630dcd9387SGreg Roach     * @return string
20649219296aSGreg Roach     */
2065cde1d378SGreg Roach    public function statsChildren(): string
20669219296aSGreg Roach    {
2067cde1d378SGreg Roach        return $this->familyRepository->statsChildren();
20689219296aSGreg Roach    }
20699219296aSGreg Roach
20709219296aSGreg Roach    /**
20710dcd9387SGreg Roach     * @param string $total
20720dcd9387SGreg Roach     *
20730dcd9387SGreg Roach     * @return string
20749219296aSGreg Roach     */
20759219296aSGreg Roach    public function topAgeBetweenSiblingsName(string $total = '10'): string
20769219296aSGreg Roach    {
20779219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsName((int) $total);
20789219296aSGreg Roach    }
20799219296aSGreg Roach
20809219296aSGreg Roach    /**
20810dcd9387SGreg Roach     * @param string $total
20820dcd9387SGreg Roach     *
20830dcd9387SGreg Roach     * @return string
20849219296aSGreg Roach     */
20859219296aSGreg Roach    public function topAgeBetweenSiblings(string $total = '10'): string
20869219296aSGreg Roach    {
20879219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblings((int) $total);
20889219296aSGreg Roach    }
20899219296aSGreg Roach
20909219296aSGreg Roach    /**
20910dcd9387SGreg Roach     * @param string $total
20920dcd9387SGreg Roach     *
20930dcd9387SGreg Roach     * @return string
20949219296aSGreg Roach     */
20959219296aSGreg Roach    public function topAgeBetweenSiblingsFullName(string $total = '10'): string
20969219296aSGreg Roach    {
20979219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsFullName((int) $total);
20989219296aSGreg Roach    }
20999219296aSGreg Roach
21009219296aSGreg Roach    /**
21010dcd9387SGreg Roach     * @param string $total
21020dcd9387SGreg Roach     * @param string $one
21030dcd9387SGreg Roach     *
21040dcd9387SGreg Roach     * @return string
21059219296aSGreg Roach     */
21069219296aSGreg Roach    public function topAgeBetweenSiblingsList(string $total = '10', string $one = ''): string
21079219296aSGreg Roach    {
21089219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsList((int) $total, $one);
21099219296aSGreg Roach    }
21109219296aSGreg Roach
21119219296aSGreg Roach    /**
21120dcd9387SGreg Roach     * @return string
21139219296aSGreg Roach     */
21149219296aSGreg Roach    public function noChildrenFamilies(): string
21159219296aSGreg Roach    {
21169219296aSGreg Roach        return $this->familyRepository->noChildrenFamilies();
21179219296aSGreg Roach    }
21189219296aSGreg Roach
21199219296aSGreg Roach    /**
21200dcd9387SGreg Roach     * @param string $type
21210dcd9387SGreg Roach     *
21220dcd9387SGreg Roach     * @return string
21239219296aSGreg Roach     */
21249219296aSGreg Roach    public function noChildrenFamiliesList(string $type = 'list'): string
21259219296aSGreg Roach    {
21269219296aSGreg Roach        return $this->familyRepository->noChildrenFamiliesList($type);
21279219296aSGreg Roach    }
21289219296aSGreg Roach
21299219296aSGreg Roach    /**
21300dcd9387SGreg Roach     * @param string $year1
21310dcd9387SGreg Roach     * @param string $year2
21320dcd9387SGreg Roach     *
21330dcd9387SGreg Roach     * @return string
21349219296aSGreg Roach     */
21359219296aSGreg Roach    public function chartNoChildrenFamilies(
21369219296aSGreg Roach        string $year1 = '-1',
21379219296aSGreg Roach        string $year2 = '-1'
2138c81b7bf1SGreg Roach    ): string {
213988de55fdSRico Sonntag        return $this->familyRepository->chartNoChildrenFamilies((int) $year1, (int) $year2);
21409219296aSGreg Roach    }
21419219296aSGreg Roach
21429219296aSGreg Roach    /**
21430dcd9387SGreg Roach     * @param string $total
21440dcd9387SGreg Roach     *
21450dcd9387SGreg Roach     * @return string
21469219296aSGreg Roach     */
21479219296aSGreg Roach    public function topTenLargestGrandFamily(string $total = '10'): string
21489219296aSGreg Roach    {
21499219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamily((int) $total);
21509219296aSGreg Roach    }
21519219296aSGreg Roach
21529219296aSGreg Roach    /**
21530dcd9387SGreg Roach     * @param string $total
21540dcd9387SGreg Roach     *
21550dcd9387SGreg Roach     * @return string
21569219296aSGreg Roach     */
21579219296aSGreg Roach    public function topTenLargestGrandFamilyList(string $total = '10'): string
21589219296aSGreg Roach    {
21599219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamilyList((int) $total);
21609219296aSGreg Roach    }
21619219296aSGreg Roach
21629219296aSGreg Roach    /**
21630dcd9387SGreg Roach     * @return string
21649219296aSGreg Roach     */
21659219296aSGreg Roach    public function getCommonSurname(): string
21669219296aSGreg Roach    {
21679219296aSGreg Roach        return $this->individualRepository->getCommonSurname();
21689219296aSGreg Roach    }
21699219296aSGreg Roach
21709219296aSGreg Roach    /**
21710dcd9387SGreg Roach     * @param string $threshold
21720dcd9387SGreg Roach     * @param string $number_of_surnames
21730dcd9387SGreg Roach     * @param string $sorting
21740dcd9387SGreg Roach     *
21750dcd9387SGreg Roach     * @return string
21769219296aSGreg Roach     */
21779219296aSGreg Roach    public function commonSurnames(
21789219296aSGreg Roach        string $threshold = '1',
21799219296aSGreg Roach        string $number_of_surnames = '10',
21809219296aSGreg Roach        string $sorting = 'alpha'
2181c81b7bf1SGreg Roach    ): string {
21829219296aSGreg Roach        return $this->individualRepository->commonSurnames((int) $threshold, (int) $number_of_surnames, $sorting);
21839219296aSGreg Roach    }
21849219296aSGreg Roach
21859219296aSGreg Roach    /**
21860dcd9387SGreg Roach     * @param string $threshold
21870dcd9387SGreg Roach     * @param string $number_of_surnames
21880dcd9387SGreg Roach     * @param string $sorting
21890dcd9387SGreg Roach     *
21900dcd9387SGreg Roach     * @return string
21919219296aSGreg Roach     */
21929219296aSGreg Roach    public function commonSurnamesTotals(
21939219296aSGreg Roach        string $threshold = '1',
21949219296aSGreg Roach        string $number_of_surnames = '10',
21959219296aSGreg Roach        string $sorting = 'rcount'
2196c81b7bf1SGreg Roach    ): string {
21979219296aSGreg Roach        return $this->individualRepository->commonSurnamesTotals((int) $threshold, (int) $number_of_surnames, $sorting);
21989219296aSGreg Roach    }
21999219296aSGreg Roach
22009219296aSGreg Roach    /**
22010dcd9387SGreg Roach     * @param string $threshold
22020dcd9387SGreg Roach     * @param string $number_of_surnames
22030dcd9387SGreg Roach     * @param string $sorting
22040dcd9387SGreg Roach     *
22050dcd9387SGreg Roach     * @return string
22069219296aSGreg Roach     */
22079219296aSGreg Roach    public function commonSurnamesList(
22089219296aSGreg Roach        string $threshold = '1',
22099219296aSGreg Roach        string $number_of_surnames = '10',
22109219296aSGreg Roach        string $sorting = 'alpha'
2211c81b7bf1SGreg Roach    ): string {
22129219296aSGreg Roach        return $this->individualRepository->commonSurnamesList((int) $threshold, (int) $number_of_surnames, $sorting);
22139219296aSGreg Roach    }
22149219296aSGreg Roach
22159219296aSGreg Roach    /**
22160dcd9387SGreg Roach     * @param string $threshold
22170dcd9387SGreg Roach     * @param string $number_of_surnames
22180dcd9387SGreg Roach     * @param string $sorting
22190dcd9387SGreg Roach     *
22200dcd9387SGreg Roach     * @return string
22219219296aSGreg Roach     */
22229219296aSGreg Roach    public function commonSurnamesListTotals(
22239219296aSGreg Roach        string $threshold = '1',
22249219296aSGreg Roach        string $number_of_surnames = '10',
22259219296aSGreg Roach        string $sorting = 'rcount'
2226c81b7bf1SGreg Roach    ): string {
22279219296aSGreg Roach        return $this->individualRepository
22289219296aSGreg Roach            ->commonSurnamesListTotals((int) $threshold, (int) $number_of_surnames, $sorting);
22299219296aSGreg Roach    }
22309219296aSGreg Roach
22319219296aSGreg Roach    /**
22320dcd9387SGreg Roach     * @param string|null $color_from
22330dcd9387SGreg Roach     * @param string|null $color_to
22340dcd9387SGreg Roach     * @param string      $number_of_surnames
22350dcd9387SGreg Roach     *
22360dcd9387SGreg Roach     * @return string
22379219296aSGreg Roach     */
22389219296aSGreg Roach    public function chartCommonSurnames(
22399219296aSGreg Roach        string $color_from = null,
22409219296aSGreg Roach        string $color_to = null,
22419219296aSGreg Roach        string $number_of_surnames = '10'
2242c81b7bf1SGreg Roach    ): string {
22439219296aSGreg Roach        return $this->individualRepository
224488de55fdSRico Sonntag            ->chartCommonSurnames($color_from, $color_to, (int) $number_of_surnames);
22459219296aSGreg Roach    }
22469219296aSGreg Roach
22479219296aSGreg Roach    /**
22480dcd9387SGreg Roach     * @param string $threshold
22490dcd9387SGreg Roach     * @param string $maxtoshow
22500dcd9387SGreg Roach     *
22510dcd9387SGreg Roach     * @return string
22529219296aSGreg Roach     */
22539219296aSGreg Roach    public function commonGiven(string $threshold = '1', string $maxtoshow = '10'): string
22549219296aSGreg Roach    {
22559219296aSGreg Roach        return $this->individualRepository->commonGiven((int) $threshold, (int) $maxtoshow);
22569219296aSGreg Roach    }
22579219296aSGreg Roach
22589219296aSGreg Roach    /**
22590dcd9387SGreg Roach     * @param string $threshold
22600dcd9387SGreg Roach     * @param string $maxtoshow
22610dcd9387SGreg Roach     *
22620dcd9387SGreg Roach     * @return string
22639219296aSGreg Roach     */
22649219296aSGreg Roach    public function commonGivenTotals(string $threshold = '1', string $maxtoshow = '10'): string
22659219296aSGreg Roach    {
22669219296aSGreg Roach        return $this->individualRepository->commonGivenTotals((int) $threshold, (int) $maxtoshow);
22679219296aSGreg Roach    }
22689219296aSGreg Roach
22699219296aSGreg Roach    /**
22700dcd9387SGreg Roach     * @param string $threshold
22710dcd9387SGreg Roach     * @param string $maxtoshow
22720dcd9387SGreg Roach     *
22730dcd9387SGreg Roach     * @return string
22749219296aSGreg Roach     */
22759219296aSGreg Roach    public function commonGivenList(string $threshold = '1', string $maxtoshow = '10'): string
22769219296aSGreg Roach    {
22779219296aSGreg Roach        return $this->individualRepository->commonGivenList((int) $threshold, (int) $maxtoshow);
22789219296aSGreg Roach    }
22799219296aSGreg Roach
22809219296aSGreg Roach    /**
22810dcd9387SGreg Roach     * @param string $threshold
22820dcd9387SGreg Roach     * @param string $maxtoshow
22830dcd9387SGreg Roach     *
22840dcd9387SGreg Roach     * @return string
22859219296aSGreg Roach     */
22869219296aSGreg Roach    public function commonGivenListTotals(string $threshold = '1', string $maxtoshow = '10'): string
22879219296aSGreg Roach    {
22889219296aSGreg Roach        return $this->individualRepository->commonGivenListTotals((int) $threshold, (int) $maxtoshow);
22899219296aSGreg Roach    }
22909219296aSGreg Roach
22919219296aSGreg Roach    /**
22920dcd9387SGreg Roach     * @param string $threshold
22930dcd9387SGreg Roach     * @param string $maxtoshow
22940dcd9387SGreg Roach     *
22950dcd9387SGreg Roach     * @return string
22969219296aSGreg Roach     */
22979219296aSGreg Roach    public function commonGivenTable(string $threshold = '1', string $maxtoshow = '10'): string
22989219296aSGreg Roach    {
22999219296aSGreg Roach        return $this->individualRepository->commonGivenTable((int) $threshold, (int) $maxtoshow);
23009219296aSGreg Roach    }
23019219296aSGreg Roach
23029219296aSGreg Roach    /**
23030dcd9387SGreg Roach     * @param string $threshold
23040dcd9387SGreg Roach     * @param string $maxtoshow
23050dcd9387SGreg Roach     *
23060dcd9387SGreg Roach     * @return string
23079219296aSGreg Roach     */
23089219296aSGreg Roach    public function commonGivenFemale(string $threshold = '1', string $maxtoshow = '10'): string
23099219296aSGreg Roach    {
23109219296aSGreg Roach        return $this->individualRepository->commonGivenFemale((int) $threshold, (int) $maxtoshow);
23119219296aSGreg Roach    }
23129219296aSGreg Roach
23139219296aSGreg Roach    /**
23140dcd9387SGreg Roach     * @param string $threshold
23150dcd9387SGreg Roach     * @param string $maxtoshow
23160dcd9387SGreg Roach     *
23170dcd9387SGreg Roach     * @return string
23189219296aSGreg Roach     */
23199219296aSGreg Roach    public function commonGivenFemaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
23209219296aSGreg Roach    {
23219219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTotals((int) $threshold, (int) $maxtoshow);
23229219296aSGreg Roach    }
23239219296aSGreg Roach
23249219296aSGreg Roach    /**
23250dcd9387SGreg Roach     * @param string $threshold
23260dcd9387SGreg Roach     * @param string $maxtoshow
23270dcd9387SGreg Roach     *
23280dcd9387SGreg Roach     * @return string
23299219296aSGreg Roach     */
23309219296aSGreg Roach    public function commonGivenFemaleList(string $threshold = '1', string $maxtoshow = '10'): string
23319219296aSGreg Roach    {
23329219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleList((int) $threshold, (int) $maxtoshow);
23339219296aSGreg Roach    }
23349219296aSGreg Roach
23359219296aSGreg Roach    /**
23360dcd9387SGreg Roach     * @param string $threshold
23370dcd9387SGreg Roach     * @param string $maxtoshow
23380dcd9387SGreg Roach     *
23390dcd9387SGreg Roach     * @return string
23409219296aSGreg Roach     */
23419219296aSGreg Roach    public function commonGivenFemaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
23429219296aSGreg Roach    {
23439219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleListTotals((int) $threshold, (int) $maxtoshow);
23449219296aSGreg Roach    }
23459219296aSGreg Roach
23469219296aSGreg Roach    /**
23470dcd9387SGreg Roach     * @param string $threshold
23480dcd9387SGreg Roach     * @param string $maxtoshow
23490dcd9387SGreg Roach     *
23500dcd9387SGreg Roach     * @return string
23519219296aSGreg Roach     */
23529219296aSGreg Roach    public function commonGivenFemaleTable(string $threshold = '1', string $maxtoshow = '10'): string
23539219296aSGreg Roach    {
23549219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTable((int) $threshold, (int) $maxtoshow);
23559219296aSGreg Roach    }
23569219296aSGreg Roach
23579219296aSGreg Roach    /**
23580dcd9387SGreg Roach     * @param string $threshold
23590dcd9387SGreg Roach     * @param string $maxtoshow
23600dcd9387SGreg Roach     *
23610dcd9387SGreg Roach     * @return string
23629219296aSGreg Roach     */
23639219296aSGreg Roach    public function commonGivenMale(string $threshold = '1', string $maxtoshow = '10'): string
23649219296aSGreg Roach    {
23659219296aSGreg Roach        return $this->individualRepository->commonGivenMale((int) $threshold, (int) $maxtoshow);
23669219296aSGreg Roach    }
23679219296aSGreg Roach
23689219296aSGreg Roach    /**
23690dcd9387SGreg Roach     * @param string $threshold
23700dcd9387SGreg Roach     * @param string $maxtoshow
23710dcd9387SGreg Roach     *
23720dcd9387SGreg Roach     * @return string
23739219296aSGreg Roach     */
23749219296aSGreg Roach    public function commonGivenMaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
23759219296aSGreg Roach    {
23769219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTotals((int) $threshold, (int) $maxtoshow);
23779219296aSGreg Roach    }
23789219296aSGreg Roach
23799219296aSGreg Roach    /**
23800dcd9387SGreg Roach     * @param string $threshold
23810dcd9387SGreg Roach     * @param string $maxtoshow
23820dcd9387SGreg Roach     *
23830dcd9387SGreg Roach     * @return string
23849219296aSGreg Roach     */
23859219296aSGreg Roach    public function commonGivenMaleList(string $threshold = '1', string $maxtoshow = '10'): string
23869219296aSGreg Roach    {
23879219296aSGreg Roach        return $this->individualRepository->commonGivenMaleList((int) $threshold, (int) $maxtoshow);
23889219296aSGreg Roach    }
23899219296aSGreg Roach
23909219296aSGreg Roach    /**
23910dcd9387SGreg Roach     * @param string $threshold
23920dcd9387SGreg Roach     * @param string $maxtoshow
23930dcd9387SGreg Roach     *
23940dcd9387SGreg Roach     * @return string
23959219296aSGreg Roach     */
23969219296aSGreg Roach    public function commonGivenMaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
23979219296aSGreg Roach    {
23989219296aSGreg Roach        return $this->individualRepository->commonGivenMaleListTotals((int) $threshold, (int) $maxtoshow);
23999219296aSGreg Roach    }
24009219296aSGreg Roach
24019219296aSGreg Roach    /**
24020dcd9387SGreg Roach     * @param string $threshold
24030dcd9387SGreg Roach     * @param string $maxtoshow
24040dcd9387SGreg Roach     *
24050dcd9387SGreg Roach     * @return string
24069219296aSGreg Roach     */
24079219296aSGreg Roach    public function commonGivenMaleTable(string $threshold = '1', string $maxtoshow = '10'): string
24089219296aSGreg Roach    {
24099219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTable((int) $threshold, (int) $maxtoshow);
24109219296aSGreg Roach    }
24119219296aSGreg Roach
24129219296aSGreg Roach    /**
24130dcd9387SGreg Roach     * @param string $threshold
24140dcd9387SGreg Roach     * @param string $maxtoshow
24150dcd9387SGreg Roach     *
24160dcd9387SGreg Roach     * @return string
24179219296aSGreg Roach     */
24189219296aSGreg Roach    public function commonGivenUnknown(string $threshold = '1', string $maxtoshow = '10'): string
24199219296aSGreg Roach    {
24209219296aSGreg Roach        return $this->individualRepository->commonGivenUnknown((int) $threshold, (int) $maxtoshow);
24219219296aSGreg Roach    }
24229219296aSGreg Roach
24239219296aSGreg Roach    /**
24240dcd9387SGreg Roach     * @param string $threshold
24250dcd9387SGreg Roach     * @param string $maxtoshow
24260dcd9387SGreg Roach     *
24270dcd9387SGreg Roach     * @return string
24289219296aSGreg Roach     */
24299219296aSGreg Roach    public function commonGivenUnknownTotals(string $threshold = '1', string $maxtoshow = '10'): string
24309219296aSGreg Roach    {
24319219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTotals((int) $threshold, (int) $maxtoshow);
24329219296aSGreg Roach    }
24339219296aSGreg Roach
24349219296aSGreg Roach    /**
24350dcd9387SGreg Roach     * @param string $threshold
24360dcd9387SGreg Roach     * @param string $maxtoshow
24370dcd9387SGreg Roach     *
24380dcd9387SGreg Roach     * @return string
24399219296aSGreg Roach     */
24409219296aSGreg Roach    public function commonGivenUnknownList(string $threshold = '1', string $maxtoshow = '10'): string
24419219296aSGreg Roach    {
24429219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownList((int) $threshold, (int) $maxtoshow);
24439219296aSGreg Roach    }
24449219296aSGreg Roach
24459219296aSGreg Roach    /**
24460dcd9387SGreg Roach     * @param string $threshold
24470dcd9387SGreg Roach     * @param string $maxtoshow
24480dcd9387SGreg Roach     *
24490dcd9387SGreg Roach     * @return string
24509219296aSGreg Roach     */
24519219296aSGreg Roach    public function commonGivenUnknownListTotals(string $threshold = '1', string $maxtoshow = '10'): string
24529219296aSGreg Roach    {
24539219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownListTotals((int) $threshold, (int) $maxtoshow);
24549219296aSGreg Roach    }
24559219296aSGreg Roach
24569219296aSGreg Roach    /**
24570dcd9387SGreg Roach     * @param string $threshold
24580dcd9387SGreg Roach     * @param string $maxtoshow
24590dcd9387SGreg Roach     *
24600dcd9387SGreg Roach     * @return string
24619219296aSGreg Roach     */
24629219296aSGreg Roach    public function commonGivenUnknownTable(string $threshold = '1', string $maxtoshow = '10'): string
24639219296aSGreg Roach    {
24649219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTable((int) $threshold, (int) $maxtoshow);
24659219296aSGreg Roach    }
24669219296aSGreg Roach
24679219296aSGreg Roach    /**
24680dcd9387SGreg Roach     * @param string|null $color_from
24690dcd9387SGreg Roach     * @param string|null $color_to
24700dcd9387SGreg Roach     * @param string      $maxtoshow
24710dcd9387SGreg Roach     *
24720dcd9387SGreg Roach     * @return string
24739219296aSGreg Roach     */
24749219296aSGreg Roach    public function chartCommonGiven(
24759219296aSGreg Roach        string $color_from = null,
24769219296aSGreg Roach        string $color_to = null,
24779219296aSGreg Roach        string $maxtoshow = '7'
2478c81b7bf1SGreg Roach    ): string {
247988de55fdSRico Sonntag        return $this->individualRepository->chartCommonGiven($color_from, $color_to, (int) $maxtoshow);
24809219296aSGreg Roach    }
24819219296aSGreg Roach
24829219296aSGreg Roach    /**
24830dcd9387SGreg Roach     * @return string
24849219296aSGreg Roach     */
24859219296aSGreg Roach    public function usersLoggedIn(): string
24869219296aSGreg Roach    {
24879219296aSGreg Roach        return $this->userRepository->usersLoggedIn();
24889219296aSGreg Roach    }
24899219296aSGreg Roach
24909219296aSGreg Roach    /**
24910dcd9387SGreg Roach     * @return string
24929219296aSGreg Roach     */
24939219296aSGreg Roach    public function usersLoggedInList(): string
24949219296aSGreg Roach    {
24959219296aSGreg Roach        return $this->userRepository->usersLoggedInList();
24969219296aSGreg Roach    }
24979219296aSGreg Roach
24989219296aSGreg Roach    /**
24990dcd9387SGreg Roach     * @return int
25009219296aSGreg Roach     */
25019219296aSGreg Roach    public function usersLoggedInTotal(): int
25029219296aSGreg Roach    {
25039219296aSGreg Roach        return $this->userRepository->usersLoggedInTotal();
25049219296aSGreg Roach    }
25059219296aSGreg Roach
25069219296aSGreg Roach    /**
25070dcd9387SGreg Roach     * @return int
25089219296aSGreg Roach     */
25099219296aSGreg Roach    public function usersLoggedInTotalAnon(): int
25109219296aSGreg Roach    {
25119219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalAnon();
25129219296aSGreg Roach    }
25139219296aSGreg Roach
25149219296aSGreg Roach    /**
25150dcd9387SGreg Roach     * @return int
25169219296aSGreg Roach     */
25179219296aSGreg Roach    public function usersLoggedInTotalVisible(): int
25189219296aSGreg Roach    {
25199219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalVisible();
25209219296aSGreg Roach    }
25219219296aSGreg Roach
25229219296aSGreg Roach    /**
25230dcd9387SGreg Roach     * @return string
25249219296aSGreg Roach     */
25259219296aSGreg Roach    public function userId(): string
25269219296aSGreg Roach    {
25279219296aSGreg Roach        return $this->userRepository->userId();
25289219296aSGreg Roach    }
25299219296aSGreg Roach
25309219296aSGreg Roach    /**
25310dcd9387SGreg Roach     * @param string $visitor_text
25320dcd9387SGreg Roach     *
25330dcd9387SGreg Roach     * @return string
25349219296aSGreg Roach     */
25359219296aSGreg Roach    public function userName(string $visitor_text = ''): string
25369219296aSGreg Roach    {
253718483248SGreg Roach        return $this->userRepository->userName($visitor_text);
25389219296aSGreg Roach    }
25399219296aSGreg Roach
25409219296aSGreg Roach    /**
25410dcd9387SGreg Roach     * @return string
25429219296aSGreg Roach     */
25439219296aSGreg Roach    public function userFullName(): string
25449219296aSGreg Roach    {
25459219296aSGreg Roach        return $this->userRepository->userFullName();
25469219296aSGreg Roach    }
25479219296aSGreg Roach
25489219296aSGreg Roach    /**
25490dcd9387SGreg Roach     * @return string
25509219296aSGreg Roach     */
25519219296aSGreg Roach    public function totalUsers(): string
25529219296aSGreg Roach    {
25539219296aSGreg Roach        return $this->userRepository->totalUsers();
25549219296aSGreg Roach    }
25559219296aSGreg Roach
25569219296aSGreg Roach    /**
25570dcd9387SGreg Roach     * @return string
25589219296aSGreg Roach     */
25599219296aSGreg Roach    public function totalAdmins(): string
25609219296aSGreg Roach    {
25619219296aSGreg Roach        return $this->userRepository->totalAdmins();
25629219296aSGreg Roach    }
25639219296aSGreg Roach
25649219296aSGreg Roach    /**
25650dcd9387SGreg Roach     * @return string
25669219296aSGreg Roach     */
25679219296aSGreg Roach    public function totalNonAdmins(): string
25689219296aSGreg Roach    {
25699219296aSGreg Roach        return $this->userRepository->totalNonAdmins();
25709219296aSGreg Roach    }
25719219296aSGreg Roach
25729219296aSGreg Roach    /**
25730dcd9387SGreg Roach     * @return string
25749219296aSGreg Roach     */
25759219296aSGreg Roach    public function latestUserId(): string
25769219296aSGreg Roach    {
25779219296aSGreg Roach        return $this->latestUserRepository->latestUserId();
25789219296aSGreg Roach    }
25799219296aSGreg Roach
25809219296aSGreg Roach    /**
25810dcd9387SGreg Roach     * @return string
25829219296aSGreg Roach     */
25839219296aSGreg Roach    public function latestUserName(): string
25849219296aSGreg Roach    {
25859219296aSGreg Roach        return $this->latestUserRepository->latestUserName();
25869219296aSGreg Roach    }
25879219296aSGreg Roach
25889219296aSGreg Roach    /**
25890dcd9387SGreg Roach     * @return string
25909219296aSGreg Roach     */
25919219296aSGreg Roach    public function latestUserFullName(): string
25929219296aSGreg Roach    {
25939219296aSGreg Roach        return $this->latestUserRepository->latestUserFullName();
25949219296aSGreg Roach    }
25959219296aSGreg Roach
25969219296aSGreg Roach    /**
25970dcd9387SGreg Roach     * @param string|null $format
25980dcd9387SGreg Roach     *
25990dcd9387SGreg Roach     * @return string
26009219296aSGreg Roach     */
26019219296aSGreg Roach    public function latestUserRegDate(string $format = null): string
26029219296aSGreg Roach    {
260318483248SGreg Roach        return $this->latestUserRepository->latestUserRegDate($format);
26049219296aSGreg Roach    }
26059219296aSGreg Roach
26069219296aSGreg Roach    /**
26070dcd9387SGreg Roach     * @param string|null $format
26080dcd9387SGreg Roach     *
26090dcd9387SGreg Roach     * @return string
26109219296aSGreg Roach     */
26119219296aSGreg Roach    public function latestUserRegTime(string $format = null): string
26129219296aSGreg Roach    {
261318483248SGreg Roach        return $this->latestUserRepository->latestUserRegTime($format);
26149219296aSGreg Roach    }
26159219296aSGreg Roach
26169219296aSGreg Roach    /**
26170dcd9387SGreg Roach     * @param string|null $yes
26180dcd9387SGreg Roach     * @param string|null $no
26190dcd9387SGreg Roach     *
26200dcd9387SGreg Roach     * @return string
26219219296aSGreg Roach     */
26229219296aSGreg Roach    public function latestUserLoggedin(string $yes = null, string $no = null): string
26239219296aSGreg Roach    {
262418483248SGreg Roach        return $this->latestUserRepository->latestUserLoggedin($yes, $no);
26259219296aSGreg Roach    }
26269219296aSGreg Roach
26279219296aSGreg Roach    /**
26280dcd9387SGreg Roach     * @return string
26299219296aSGreg Roach     */
26309219296aSGreg Roach    public function contactWebmaster(): string
26319219296aSGreg Roach    {
263271378461SGreg Roach        return $this->contactRepository->contactWebmaster();
26339219296aSGreg Roach    }
26349219296aSGreg Roach
26359219296aSGreg Roach    /**
26360dcd9387SGreg Roach     * @return string
26379219296aSGreg Roach     */
26389219296aSGreg Roach    public function contactGedcom(): string
26399219296aSGreg Roach    {
264071378461SGreg Roach        return $this->contactRepository->contactGedcom();
26419219296aSGreg Roach    }
26429219296aSGreg Roach
26439219296aSGreg Roach    /**
26440dcd9387SGreg Roach     * @return string
26459219296aSGreg Roach     */
26469219296aSGreg Roach    public function serverDate(): string
26479219296aSGreg Roach    {
26489219296aSGreg Roach        return $this->serverRepository->serverDate();
26499219296aSGreg Roach    }
26509219296aSGreg Roach
26519219296aSGreg Roach    /**
26520dcd9387SGreg Roach     * @return string
26539219296aSGreg Roach     */
26549219296aSGreg Roach    public function serverTime(): string
26559219296aSGreg Roach    {
26569219296aSGreg Roach        return $this->serverRepository->serverTime();
26579219296aSGreg Roach    }
26589219296aSGreg Roach
26599219296aSGreg Roach    /**
26600dcd9387SGreg Roach     * @return string
26619219296aSGreg Roach     */
26629219296aSGreg Roach    public function serverTime24(): string
26639219296aSGreg Roach    {
26649219296aSGreg Roach        return $this->serverRepository->serverTime24();
26659219296aSGreg Roach    }
26669219296aSGreg Roach
26679219296aSGreg Roach    /**
26689219296aSGreg Roach     * What is the timezone of the server.
26699219296aSGreg Roach     *
26709219296aSGreg Roach     * @return string
26719219296aSGreg Roach     */
26729219296aSGreg Roach    public function serverTimezone(): string
26739219296aSGreg Roach    {
26749219296aSGreg Roach        return $this->serverRepository->serverTimezone();
26759219296aSGreg Roach    }
26769219296aSGreg Roach
26779219296aSGreg Roach    /**
26780dcd9387SGreg Roach     * @return string
26799219296aSGreg Roach     */
26809219296aSGreg Roach    public function browserDate(): string
26819219296aSGreg Roach    {
26829219296aSGreg Roach        return $this->browserRepository->browserDate();
26839219296aSGreg Roach    }
26849219296aSGreg Roach
26859219296aSGreg Roach    /**
26860dcd9387SGreg Roach     * @return string
26879219296aSGreg Roach     */
26889219296aSGreg Roach    public function browserTime(): string
26899219296aSGreg Roach    {
26909219296aSGreg Roach        return $this->browserRepository->browserTime();
26919219296aSGreg Roach    }
26929219296aSGreg Roach
26939219296aSGreg Roach    /**
26940dcd9387SGreg Roach     * @return string
26959219296aSGreg Roach     */
26969219296aSGreg Roach    public function browserTimezone(): string
26979219296aSGreg Roach    {
26989219296aSGreg Roach        return $this->browserRepository->browserTimezone();
26999219296aSGreg Roach    }
27009219296aSGreg Roach
27019219296aSGreg Roach    /**
27020dcd9387SGreg Roach     * @param string $page_parameter
27030dcd9387SGreg Roach     *
27040dcd9387SGreg Roach     * @return string
27059219296aSGreg Roach     */
27069219296aSGreg Roach    public function hitCount(string $page_parameter = ''): string
27079219296aSGreg Roach    {
27089219296aSGreg Roach        return $this->hitCountRepository->hitCount($page_parameter);
27099219296aSGreg Roach    }
27109219296aSGreg Roach
27119219296aSGreg Roach    /**
27120dcd9387SGreg Roach     * @param string $page_parameter
27130dcd9387SGreg Roach     *
27140dcd9387SGreg Roach     * @return string
27159219296aSGreg Roach     */
27169219296aSGreg Roach    public function hitCountUser(string $page_parameter = ''): string
27179219296aSGreg Roach    {
27189219296aSGreg Roach        return $this->hitCountRepository->hitCountUser($page_parameter);
27199219296aSGreg Roach    }
27209219296aSGreg Roach
27219219296aSGreg Roach    /**
27220dcd9387SGreg Roach     * @param string $page_parameter
27230dcd9387SGreg Roach     *
27240dcd9387SGreg Roach     * @return string
27259219296aSGreg Roach     */
27269219296aSGreg Roach    public function hitCountIndi(string $page_parameter = ''): string
27279219296aSGreg Roach    {
27289219296aSGreg Roach        return $this->hitCountRepository->hitCountIndi($page_parameter);
27299219296aSGreg Roach    }
27309219296aSGreg Roach
27319219296aSGreg Roach    /**
27320dcd9387SGreg Roach     * @param string $page_parameter
27330dcd9387SGreg Roach     *
27340dcd9387SGreg Roach     * @return string
27359219296aSGreg Roach     */
27369219296aSGreg Roach    public function hitCountFam(string $page_parameter = ''): string
27379219296aSGreg Roach    {
27389219296aSGreg Roach        return $this->hitCountRepository->hitCountFam($page_parameter);
27399219296aSGreg Roach    }
27409219296aSGreg Roach
27419219296aSGreg Roach    /**
27420dcd9387SGreg Roach     * @param string $page_parameter
27430dcd9387SGreg Roach     *
27440dcd9387SGreg Roach     * @return string
27459219296aSGreg Roach     */
27469219296aSGreg Roach    public function hitCountSour(string $page_parameter = ''): string
27479219296aSGreg Roach    {
27489219296aSGreg Roach        return $this->hitCountRepository->hitCountSour($page_parameter);
27499219296aSGreg Roach    }
27509219296aSGreg Roach
27519219296aSGreg Roach    /**
27520dcd9387SGreg Roach     * @param string $page_parameter
27530dcd9387SGreg Roach     *
27540dcd9387SGreg Roach     * @return string
27559219296aSGreg Roach     */
27569219296aSGreg Roach    public function hitCountRepo(string $page_parameter = ''): string
27579219296aSGreg Roach    {
27589219296aSGreg Roach        return $this->hitCountRepository->hitCountRepo($page_parameter);
27599219296aSGreg Roach    }
27609219296aSGreg Roach
27619219296aSGreg Roach    /**
27620dcd9387SGreg Roach     * @param string $page_parameter
27630dcd9387SGreg Roach     *
27640dcd9387SGreg Roach     * @return string
27659219296aSGreg Roach     */
27669219296aSGreg Roach    public function hitCountNote(string $page_parameter = ''): string
27679219296aSGreg Roach    {
27689219296aSGreg Roach        return $this->hitCountRepository->hitCountNote($page_parameter);
27699219296aSGreg Roach    }
27709219296aSGreg Roach
27719219296aSGreg Roach    /**
27720dcd9387SGreg Roach     * @param string $page_parameter
27730dcd9387SGreg Roach     *
27740dcd9387SGreg Roach     * @return string
27759219296aSGreg Roach     */
27769219296aSGreg Roach    public function hitCountObje(string $page_parameter = ''): string
27779219296aSGreg Roach    {
27789219296aSGreg Roach        return $this->hitCountRepository->hitCountObje($page_parameter);
27799219296aSGreg Roach    }
27809219296aSGreg Roach
27819219296aSGreg Roach    /**
27820dcd9387SGreg Roach     * @return string
27839219296aSGreg Roach     */
27849219296aSGreg Roach    public function gedcomFavorites(): string
27859219296aSGreg Roach    {
27869219296aSGreg Roach        return $this->favoritesRepository->gedcomFavorites();
27879219296aSGreg Roach    }
27889219296aSGreg Roach
27899219296aSGreg Roach    /**
27900dcd9387SGreg Roach     * @return string
27919219296aSGreg Roach     */
27929219296aSGreg Roach    public function userFavorites(): string
27939219296aSGreg Roach    {
27949219296aSGreg Roach        return $this->favoritesRepository->userFavorites();
27959219296aSGreg Roach    }
27969219296aSGreg Roach
27979219296aSGreg Roach    /**
27980dcd9387SGreg Roach     * @return string
27999219296aSGreg Roach     */
28009219296aSGreg Roach    public function totalGedcomFavorites(): string
28019219296aSGreg Roach    {
28029219296aSGreg Roach        return $this->favoritesRepository->totalGedcomFavorites();
28039219296aSGreg Roach    }
28049219296aSGreg Roach
28059219296aSGreg Roach    /**
28060dcd9387SGreg Roach     * @return string
28079219296aSGreg Roach     */
28089219296aSGreg Roach    public function totalUserFavorites(): string
28099219296aSGreg Roach    {
28109219296aSGreg Roach        return $this->favoritesRepository->totalUserFavorites();
28119219296aSGreg Roach    }
28129219296aSGreg Roach
28139219296aSGreg Roach    /**
28140dcd9387SGreg Roach     * @return string
28159219296aSGreg Roach     */
28169219296aSGreg Roach    public function totalUserMessages(): string
28179219296aSGreg Roach    {
28189219296aSGreg Roach        return $this->messageRepository->totalUserMessages();
28199219296aSGreg Roach    }
28209219296aSGreg Roach
28219219296aSGreg Roach    /**
28220dcd9387SGreg Roach     * @return string
28239219296aSGreg Roach     */
28249219296aSGreg Roach    public function totalUserJournal(): string
28259219296aSGreg Roach    {
28269219296aSGreg Roach        return $this->newsRepository->totalUserJournal();
28279219296aSGreg Roach    }
28289219296aSGreg Roach
28299219296aSGreg Roach    /**
28300dcd9387SGreg Roach     * @return string
28319219296aSGreg Roach     */
28329219296aSGreg Roach    public function totalGedcomNews(): string
28339219296aSGreg Roach    {
28349219296aSGreg Roach        return $this->newsRepository->totalGedcomNews();
28359219296aSGreg Roach    }
28369219296aSGreg Roach
28379219296aSGreg Roach    /**
28389219296aSGreg Roach     * Create any of the other blocks.
28399219296aSGreg Roach     * Use as #callBlock:block_name#
28409219296aSGreg Roach     *
28419219296aSGreg Roach     * @param string $block
28429219296aSGreg Roach     * @param string ...$params
28439219296aSGreg Roach     *
2844e364afe4SGreg Roach     * @return string|null
28459219296aSGreg Roach     */
28469219296aSGreg Roach    public function callBlock(string $block = '', ...$params): ?string
28479219296aSGreg Roach    {
284887cca37cSGreg Roach        /** @var ModuleBlockInterface|null $module */
2849fd9aba47SGreg Roach        $module = $this->module_service
285087cca37cSGreg Roach            ->findByComponent(ModuleBlockInterface::class, $this->tree, Auth::user())
28516c2179e2SGreg Roach            ->first(static function (ModuleInterface $module) use ($block): bool {
28529219296aSGreg Roach                return $module->name() === $block && $module->name() !== 'html';
28530797053bSGreg Roach            });
28549219296aSGreg Roach
28559219296aSGreg Roach        if ($module === null) {
28569219296aSGreg Roach            return '';
28579219296aSGreg Roach        }
28589219296aSGreg Roach
28599219296aSGreg Roach        // Build the config array
28609219296aSGreg Roach        $cfg = [];
28619219296aSGreg Roach        foreach ($params as $config) {
28629219296aSGreg Roach            $bits = explode('=', $config);
28639219296aSGreg Roach
28646ccdf4f0SGreg Roach            if (count($bits) < 2) {
28659219296aSGreg Roach                continue;
28669219296aSGreg Roach            }
28679219296aSGreg Roach
28689219296aSGreg Roach            $v       = array_shift($bits);
28699219296aSGreg Roach            $cfg[$v] = implode('=', $bits);
28709219296aSGreg Roach        }
28719219296aSGreg Roach
28723caaa4d2SGreg Roach        return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED, $cfg);
28739219296aSGreg Roach    }
28749219296aSGreg Roach
28759219296aSGreg Roach    /**
28769219296aSGreg Roach     * What is the current version of webtrees.
28779219296aSGreg Roach     *
28789219296aSGreg Roach     * @return string
28799219296aSGreg Roach     */
28809219296aSGreg Roach    public function webtreesVersion(): string
28819219296aSGreg Roach    {
28829219296aSGreg Roach        return Webtrees::VERSION;
28839219296aSGreg Roach    }
288471378461SGreg Roach
288571378461SGreg Roach    /**
288671378461SGreg Roach     * Get tags and their parsed results.
288771378461SGreg Roach     *
288871378461SGreg Roach     * @param string $text
288971378461SGreg Roach     *
289071378461SGreg Roach     * @return string[]
289171378461SGreg Roach     */
289271378461SGreg Roach    private function getTags(string $text): array
289371378461SGreg Roach    {
289471378461SGreg Roach        $tags    = [];
289571378461SGreg Roach        $matches = [];
289671378461SGreg Roach
2897b25599e6SGreg Roach        preg_match_all('/#([^#\n]+)(?=#)/', $text, $matches, PREG_SET_ORDER);
289871378461SGreg Roach
289971378461SGreg Roach        foreach ($matches as $match) {
290071378461SGreg Roach            $params = explode(':', $match[1]);
290171378461SGreg Roach            $method = array_shift($params);
290271378461SGreg Roach
290371378461SGreg Roach            if (method_exists($this, $method)) {
2904e29653ffSGreg Roach                $tags[$match[0] . '#'] = call_user_func([$this, $method], ...$params);
290571378461SGreg Roach            }
290671378461SGreg Roach        }
290771378461SGreg Roach
290871378461SGreg Roach        return $tags;
290971378461SGreg Roach    }
29109219296aSGreg Roach}
2911