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