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