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