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