xref: /webtrees/app/Statistics.php (revision 4c78e066e3ba48f4c71bb900fac88b9e85e97474)
19219296aSGreg Roach<?php
23976b470SGreg Roach
39219296aSGreg Roach/**
49219296aSGreg Roach * webtrees: online genealogy
52da2e0a6SGreg Roach * Copyright (C) 2021 webtrees development team
69219296aSGreg Roach * This program is free software: you can redistribute it and/or modify
79219296aSGreg Roach * it under the terms of the GNU General Public License as published by
89219296aSGreg Roach * the Free Software Foundation, either version 3 of the License, or
99219296aSGreg Roach * (at your option) any later version.
109219296aSGreg Roach * This program is distributed in the hope that it will be useful,
119219296aSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
129219296aSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
139219296aSGreg Roach * GNU General Public License for more details.
149219296aSGreg Roach * You should have received a copy of the GNU General Public License
1589f7189bSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>.
169219296aSGreg Roach */
17fcfa147eSGreg Roach
189219296aSGreg Roachdeclare(strict_types=1);
199219296aSGreg Roach
209219296aSGreg Roachnamespace Fisharebest\Webtrees;
219219296aSGreg Roach
229219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface;
239219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleInterface;
249219296aSGreg Roachuse Fisharebest\Webtrees\Services\ModuleService;
25e5a6b4d4SGreg Roachuse Fisharebest\Webtrees\Services\UserService;
269219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\BrowserRepository;
279219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ContactRepository;
289219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\EventRepository;
299219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyDatesRepository;
309219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyRepository;
319219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FavoritesRepository;
329219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\GedcomRepository;
339219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\HitCountRepository;
349219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\IndividualRepository;
359219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\BrowserRepositoryInterface;
369219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ContactRepositoryInterface;
379219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\EventRepositoryInterface;
389219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FamilyDatesRepositoryInterface;
399219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FavoritesRepositoryInterface;
409219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\GedcomRepositoryInterface;
419219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\HitCountRepositoryInterface;
429219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\IndividualRepositoryInterface;
439219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\LatestUserRepositoryInterface;
449219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MediaRepositoryInterface;
459219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MessageRepositoryInterface;
469219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\NewsRepositoryInterface;
479219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\PlaceRepositoryInterface;
489219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ServerRepositoryInterface;
499219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\UserRepositoryInterface;
509219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\LatestUserRepository;
519219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MediaRepository;
529219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MessageRepository;
539219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\NewsRepository;
549219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\PlaceRepository;
559219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ServerRepository;
569219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\UserRepository;
57*4c78e066SGreg Roachuse Fisharebest\Webtrees\Statistics\Service\CountryService;
58e6f3d5e2SGreg Roachuse Illuminate\Database\Query\Builder;
59f021177cSGreg Roachuse Illuminate\Support\Collection;
60f021177cSGreg Roachuse ReflectionClass;
61f021177cSGreg Roachuse ReflectionException;
629219296aSGreg Roachuse ReflectionMethod;
636dd2d083SGreg Roachuse ReflectionNamedType;
643e5f5a4cSGreg Roachuse stdClass;
659219296aSGreg Roach
66b19e047dSGreg Roachuse function call_user_func;
6771378461SGreg Roachuse function count;
6871378461SGreg Roachuse function in_array;
69dec352c1SGreg Roachuse function str_contains;
7071378461SGreg Roach
719219296aSGreg Roach/**
729219296aSGreg Roach * A selection of pre-formatted statistical queries.
739219296aSGreg Roach * These are primarily used for embedded keywords on HTML blocks, but
749219296aSGreg Roach * are also used elsewhere in the code.
759219296aSGreg Roach */
769219296aSGreg Roachclass Statistics implements
779219296aSGreg Roach    GedcomRepositoryInterface,
789219296aSGreg Roach    IndividualRepositoryInterface,
799219296aSGreg Roach    EventRepositoryInterface,
809219296aSGreg Roach    MediaRepositoryInterface,
819219296aSGreg Roach    UserRepositoryInterface,
829219296aSGreg Roach    ServerRepositoryInterface,
839219296aSGreg Roach    BrowserRepositoryInterface,
849219296aSGreg Roach    HitCountRepositoryInterface,
859219296aSGreg Roach    LatestUserRepositoryInterface,
869219296aSGreg Roach    FavoritesRepositoryInterface,
879219296aSGreg Roach    NewsRepositoryInterface,
889219296aSGreg Roach    MessageRepositoryInterface,
899219296aSGreg Roach    ContactRepositoryInterface,
909219296aSGreg Roach    FamilyDatesRepositoryInterface,
919219296aSGreg Roach    PlaceRepositoryInterface
929219296aSGreg Roach{
939219296aSGreg Roach    /**
9471378461SGreg Roach     * Generate statistics for a specified tree.
9571378461SGreg Roach     *
9671378461SGreg Roach     * @var Tree
9771378461SGreg Roach     */
9871378461SGreg Roach    private $tree;
999219296aSGreg Roach    /**
1009219296aSGreg Roach     * @var GedcomRepository
1019219296aSGreg Roach     */
1029219296aSGreg Roach    private $gedcomRepository;
1039219296aSGreg Roach
1049219296aSGreg Roach    /**
1059219296aSGreg Roach     * @var IndividualRepository
1069219296aSGreg Roach     */
1079219296aSGreg Roach    private $individualRepository;
1089219296aSGreg Roach
1099219296aSGreg Roach    /**
1109219296aSGreg Roach     * @var FamilyRepository
1119219296aSGreg Roach     */
1129219296aSGreg Roach    private $familyRepository;
1139219296aSGreg Roach
1149219296aSGreg Roach    /**
1159219296aSGreg Roach     * @var MediaRepository
1169219296aSGreg Roach     */
1179219296aSGreg Roach    private $mediaRepository;
1189219296aSGreg Roach
1199219296aSGreg Roach    /**
1209219296aSGreg Roach     * @var EventRepository
1219219296aSGreg Roach     */
1229219296aSGreg Roach    private $eventRepository;
1239219296aSGreg Roach
1249219296aSGreg Roach    /**
1259219296aSGreg Roach     * @var UserRepository
1269219296aSGreg Roach     */
1279219296aSGreg Roach    private $userRepository;
1289219296aSGreg Roach
1299219296aSGreg Roach    /**
1309219296aSGreg Roach     * @var ServerRepository
1319219296aSGreg Roach     */
1329219296aSGreg Roach    private $serverRepository;
1339219296aSGreg Roach
1349219296aSGreg Roach    /**
1359219296aSGreg Roach     * @var BrowserRepository
1369219296aSGreg Roach     */
1379219296aSGreg Roach    private $browserRepository;
1389219296aSGreg Roach
1399219296aSGreg Roach    /**
1409219296aSGreg Roach     * @var HitCountRepository
1419219296aSGreg Roach     */
1429219296aSGreg Roach    private $hitCountRepository;
1439219296aSGreg Roach
1449219296aSGreg Roach    /**
1459219296aSGreg Roach     * @var LatestUserRepository
1469219296aSGreg Roach     */
1479219296aSGreg Roach    private $latestUserRepository;
1489219296aSGreg Roach
1499219296aSGreg Roach    /**
1509219296aSGreg Roach     * @var FavoritesRepository
1519219296aSGreg Roach     */
1529219296aSGreg Roach    private $favoritesRepository;
1539219296aSGreg Roach
1549219296aSGreg Roach    /**
1559219296aSGreg Roach     * @var NewsRepository
1569219296aSGreg Roach     */
1579219296aSGreg Roach    private $newsRepository;
1589219296aSGreg Roach
1599219296aSGreg Roach    /**
1609219296aSGreg Roach     * @var MessageRepository
1619219296aSGreg Roach     */
1629219296aSGreg Roach    private $messageRepository;
1639219296aSGreg Roach
1649219296aSGreg Roach    /**
1659219296aSGreg Roach     * @var ContactRepository
1669219296aSGreg Roach     */
1679219296aSGreg Roach    private $contactRepository;
1689219296aSGreg Roach
1699219296aSGreg Roach    /**
1709219296aSGreg Roach     * @var FamilyDatesRepository
1719219296aSGreg Roach     */
1729219296aSGreg Roach    private $familyDatesRepository;
1739219296aSGreg Roach
1749219296aSGreg Roach    /**
1759219296aSGreg Roach     * @var PlaceRepository
1769219296aSGreg Roach     */
1779219296aSGreg Roach    private $placeRepository;
1789219296aSGreg Roach
1799219296aSGreg Roach    /**
1809219296aSGreg Roach     * @var ModuleService
1819219296aSGreg Roach     */
1829219296aSGreg Roach    private $module_service;
1839219296aSGreg Roach
1849219296aSGreg Roach    /**
1859219296aSGreg Roach     * Create the statistics for a tree.
1869219296aSGreg Roach     *
187*4c78e066SGreg Roach     * @param CountryService $country_service
1889219296aSGreg Roach     * @param ModuleService  $module_service
1899219296aSGreg Roach     * @param Tree           $tree Generate statistics for this tree
190e5a6b4d4SGreg Roach     * @param UserService    $user_service
1919219296aSGreg Roach     */
1929219296aSGreg Roach    public function __construct(
193*4c78e066SGreg Roach        CountryService $country_service,
1949219296aSGreg Roach        ModuleService $module_service,
195e5a6b4d4SGreg Roach        Tree $tree,
196e5a6b4d4SGreg Roach        UserService $user_service
19798afcacfSGreg Roach    ) {
1989219296aSGreg Roach        $this->tree                  = $tree;
1999219296aSGreg Roach        $this->gedcomRepository      = new GedcomRepository($tree);
2009219296aSGreg Roach        $this->individualRepository  = new IndividualRepository($tree);
2019219296aSGreg Roach        $this->familyRepository      = new FamilyRepository($tree);
2029219296aSGreg Roach        $this->familyDatesRepository = new FamilyDatesRepository($tree);
2039219296aSGreg Roach        $this->mediaRepository       = new MediaRepository($tree);
2049219296aSGreg Roach        $this->eventRepository       = new EventRepository($tree);
205e5a6b4d4SGreg Roach        $this->userRepository        = new UserRepository($tree, $user_service);
2069219296aSGreg Roach        $this->serverRepository      = new ServerRepository();
2079219296aSGreg Roach        $this->browserRepository     = new BrowserRepository();
208e5a6b4d4SGreg Roach        $this->hitCountRepository    = new HitCountRepository($tree, $user_service);
209e5a6b4d4SGreg Roach        $this->latestUserRepository  = new LatestUserRepository($user_service);
210fd9aba47SGreg Roach        $this->favoritesRepository   = new FavoritesRepository($tree, $module_service);
2119219296aSGreg Roach        $this->newsRepository        = new NewsRepository($tree);
2129219296aSGreg Roach        $this->messageRepository     = new MessageRepository();
213e5a6b4d4SGreg Roach        $this->contactRepository     = new ContactRepository($tree, $user_service);
214*4c78e066SGreg Roach        $this->placeRepository       = new PlaceRepository($tree, $country_service);
2159219296aSGreg Roach        $this->module_service        = $module_service;
2169219296aSGreg Roach    }
2179219296aSGreg Roach
2189219296aSGreg Roach    /**
2199219296aSGreg Roach     * Return a string of all supported tags and an example of its output in table row form.
2209219296aSGreg Roach     *
2219219296aSGreg Roach     * @return string
2229219296aSGreg Roach     */
2239219296aSGreg Roach    public function getAllTagsTable(): string
2249219296aSGreg Roach    {
225f021177cSGreg Roach        try {
226f021177cSGreg Roach            $class = new ReflectionClass($this);
2279219296aSGreg Roach
228f021177cSGreg Roach            $public_methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
229f021177cSGreg Roach
230f021177cSGreg Roach            $examples = Collection::make($public_methods)
231f021177cSGreg Roach                ->filter(static function (ReflectionMethod $method): bool {
232f021177cSGreg Roach                    return !in_array($method->getName(), ['embedTags', 'getAllTagsTable'], true);
233f021177cSGreg Roach                })
234f021177cSGreg Roach                ->filter(static function (ReflectionMethod $method): bool {
235f021177cSGreg Roach                    $type = $method->getReturnType();
236f021177cSGreg Roach
2376dd2d083SGreg Roach                    return $type instanceof ReflectionNamedType && $type->getName() === 'string';
238f021177cSGreg Roach                })
239f021177cSGreg Roach                ->sort(static function (ReflectionMethod $x, ReflectionMethod $y): int {
240f021177cSGreg Roach                    return $x->getName() <=> $y->getName();
241f021177cSGreg Roach                })
242f021177cSGreg Roach                ->map(function (ReflectionMethod $method): string {
243f021177cSGreg Roach                    $tag = $method->getName();
244f021177cSGreg Roach
245f021177cSGreg Roach                    return '<dt>#' . $tag . '#</dt><dd>' . call_user_func([$this, $tag]) . '</dd>';
246f021177cSGreg Roach                });
247f021177cSGreg Roach
248f021177cSGreg Roach            return '<dl>' . $examples->implode('') . '</dl>';
249f021177cSGreg Roach        } catch (ReflectionException $ex) {
250f021177cSGreg Roach            return $ex->getMessage();
2519219296aSGreg Roach        }
2529219296aSGreg Roach    }
2539219296aSGreg Roach
2549219296aSGreg Roach    /**
2559219296aSGreg Roach     * Embed tags in text
2569219296aSGreg Roach     *
2579219296aSGreg Roach     * @param string $text
2589219296aSGreg Roach     *
2599219296aSGreg Roach     * @return string
2609219296aSGreg Roach     */
2619219296aSGreg Roach    public function embedTags(string $text): string
2629219296aSGreg Roach    {
263dec352c1SGreg Roach        if (str_contains($text, '#')) {
2649219296aSGreg Roach            $text = strtr($text, $this->getTags($text));
2659219296aSGreg Roach        }
2669219296aSGreg Roach
2679219296aSGreg Roach        return $text;
2689219296aSGreg Roach    }
2699219296aSGreg Roach
2709219296aSGreg Roach    /**
2710dcd9387SGreg Roach     * @return string
2729219296aSGreg Roach     */
2739219296aSGreg Roach    public function gedcomFilename(): string
2749219296aSGreg Roach    {
2759219296aSGreg Roach        return $this->gedcomRepository->gedcomFilename();
2769219296aSGreg Roach    }
2779219296aSGreg Roach
2789219296aSGreg Roach    /**
2790dcd9387SGreg Roach     * @return int
2809219296aSGreg Roach     */
2819219296aSGreg Roach    public function gedcomId(): int
2829219296aSGreg Roach    {
2839219296aSGreg Roach        return $this->gedcomRepository->gedcomId();
2849219296aSGreg Roach    }
2859219296aSGreg Roach
2869219296aSGreg Roach    /**
2870dcd9387SGreg Roach     * @return string
2889219296aSGreg Roach     */
2899219296aSGreg Roach    public function gedcomTitle(): string
2909219296aSGreg Roach    {
2919219296aSGreg Roach        return $this->gedcomRepository->gedcomTitle();
2929219296aSGreg Roach    }
2939219296aSGreg Roach
2949219296aSGreg Roach    /**
2950dcd9387SGreg Roach     * @return string
2969219296aSGreg Roach     */
2979219296aSGreg Roach    public function gedcomCreatedSoftware(): string
2989219296aSGreg Roach    {
2999219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedSoftware();
3009219296aSGreg Roach    }
3019219296aSGreg Roach
3029219296aSGreg Roach    /**
3030dcd9387SGreg Roach     * @return string
3049219296aSGreg Roach     */
3059219296aSGreg Roach    public function gedcomCreatedVersion(): string
3069219296aSGreg Roach    {
3079219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedVersion();
3089219296aSGreg Roach    }
3099219296aSGreg Roach
3109219296aSGreg Roach    /**
3110dcd9387SGreg Roach     * @return string
3129219296aSGreg Roach     */
3139219296aSGreg Roach    public function gedcomDate(): string
3149219296aSGreg Roach    {
3159219296aSGreg Roach        return $this->gedcomRepository->gedcomDate();
3169219296aSGreg Roach    }
3179219296aSGreg Roach
3189219296aSGreg Roach    /**
3190dcd9387SGreg Roach     * @return string
3209219296aSGreg Roach     */
3219219296aSGreg Roach    public function gedcomUpdated(): string
3229219296aSGreg Roach    {
3239219296aSGreg Roach        return $this->gedcomRepository->gedcomUpdated();
3249219296aSGreg Roach    }
3259219296aSGreg Roach
3269219296aSGreg Roach    /**
3270dcd9387SGreg Roach     * @return string
3289219296aSGreg Roach     */
3299219296aSGreg Roach    public function gedcomRootId(): string
3309219296aSGreg Roach    {
3319219296aSGreg Roach        return $this->gedcomRepository->gedcomRootId();
3329219296aSGreg Roach    }
3339219296aSGreg Roach
3349219296aSGreg Roach    /**
3350dcd9387SGreg Roach     * @return string
3369219296aSGreg Roach     */
3379219296aSGreg Roach    public function totalRecords(): string
3389219296aSGreg Roach    {
3399219296aSGreg Roach        return $this->individualRepository->totalRecords();
3409219296aSGreg Roach    }
3419219296aSGreg Roach
3429219296aSGreg Roach    /**
3430dcd9387SGreg Roach     * @return string
3449219296aSGreg Roach     */
3459219296aSGreg Roach    public function totalIndividuals(): string
3469219296aSGreg Roach    {
3479219296aSGreg Roach        return $this->individualRepository->totalIndividuals();
3489219296aSGreg Roach    }
3499219296aSGreg Roach
3509219296aSGreg Roach    /**
3510dcd9387SGreg Roach     * @return string
3529219296aSGreg Roach     */
3539219296aSGreg Roach    public function totalIndisWithSources(): string
3549219296aSGreg Roach    {
3559219296aSGreg Roach        return $this->individualRepository->totalIndisWithSources();
3569219296aSGreg Roach    }
3579219296aSGreg Roach
3589219296aSGreg Roach    /**
3590dcd9387SGreg Roach     * @param string|null $color_from
3600dcd9387SGreg Roach     * @param string|null $color_to
3610dcd9387SGreg Roach     *
3620dcd9387SGreg Roach     * @return string
3639219296aSGreg Roach     */
3649219296aSGreg Roach    public function chartIndisWithSources(
3659219296aSGreg Roach        string $color_from = null,
3669219296aSGreg Roach        string $color_to = null
36798afcacfSGreg Roach    ): string {
36888de55fdSRico Sonntag        return $this->individualRepository->chartIndisWithSources($color_from, $color_to);
3699219296aSGreg Roach    }
3709219296aSGreg Roach
3719219296aSGreg Roach    /**
3720dcd9387SGreg Roach     * @return string
3739219296aSGreg Roach     */
3749219296aSGreg Roach    public function totalIndividualsPercentage(): string
3759219296aSGreg Roach    {
3769219296aSGreg Roach        return $this->individualRepository->totalIndividualsPercentage();
3779219296aSGreg Roach    }
3789219296aSGreg Roach
3799219296aSGreg Roach    /**
3800dcd9387SGreg Roach     * @return string
3819219296aSGreg Roach     */
3829219296aSGreg Roach    public function totalFamilies(): string
3839219296aSGreg Roach    {
3849219296aSGreg Roach        return $this->individualRepository->totalFamilies();
3859219296aSGreg Roach    }
3869219296aSGreg Roach
3879219296aSGreg Roach    /**
3880dcd9387SGreg Roach     * @return string
3899219296aSGreg Roach     */
3909219296aSGreg Roach    public function totalFamiliesPercentage(): string
3919219296aSGreg Roach    {
3929219296aSGreg Roach        return $this->individualRepository->totalFamiliesPercentage();
3939219296aSGreg Roach    }
3949219296aSGreg Roach
3959219296aSGreg Roach    /**
3960dcd9387SGreg Roach     * @return string
3979219296aSGreg Roach     */
3989219296aSGreg Roach    public function totalFamsWithSources(): string
3999219296aSGreg Roach    {
4009219296aSGreg Roach        return $this->individualRepository->totalFamsWithSources();
4019219296aSGreg Roach    }
4029219296aSGreg Roach
4039219296aSGreg Roach    /**
4040dcd9387SGreg Roach     * @param string|null $color_from
4050dcd9387SGreg Roach     * @param string|null $color_to
4060dcd9387SGreg Roach     *
4070dcd9387SGreg Roach     * @return string
4089219296aSGreg Roach     */
4099219296aSGreg Roach    public function chartFamsWithSources(
4109219296aSGreg Roach        string $color_from = null,
4119219296aSGreg Roach        string $color_to = null
41298afcacfSGreg Roach    ): string {
41388de55fdSRico Sonntag        return $this->individualRepository->chartFamsWithSources($color_from, $color_to);
4149219296aSGreg Roach    }
4159219296aSGreg Roach
4169219296aSGreg Roach    /**
4170dcd9387SGreg Roach     * @return string
4189219296aSGreg Roach     */
4199219296aSGreg Roach    public function totalSources(): string
4209219296aSGreg Roach    {
4219219296aSGreg Roach        return $this->individualRepository->totalSources();
4229219296aSGreg Roach    }
4239219296aSGreg Roach
4249219296aSGreg Roach    /**
4250dcd9387SGreg Roach     * @return string
4269219296aSGreg Roach     */
4279219296aSGreg Roach    public function totalSourcesPercentage(): string
4289219296aSGreg Roach    {
4299219296aSGreg Roach        return $this->individualRepository->totalSourcesPercentage();
4309219296aSGreg Roach    }
4319219296aSGreg Roach
4329219296aSGreg Roach    /**
4330dcd9387SGreg Roach     * @return string
4349219296aSGreg Roach     */
4359219296aSGreg Roach    public function totalNotes(): string
4369219296aSGreg Roach    {
4379219296aSGreg Roach        return $this->individualRepository->totalNotes();
4389219296aSGreg Roach    }
4399219296aSGreg Roach
4409219296aSGreg Roach    /**
4410dcd9387SGreg Roach     * @return string
4429219296aSGreg Roach     */
4439219296aSGreg Roach    public function totalNotesPercentage(): string
4449219296aSGreg Roach    {
4459219296aSGreg Roach        return $this->individualRepository->totalNotesPercentage();
4469219296aSGreg Roach    }
4479219296aSGreg Roach
4489219296aSGreg Roach    /**
4490dcd9387SGreg Roach     * @return string
4509219296aSGreg Roach     */
4519219296aSGreg Roach    public function totalRepositories(): string
4529219296aSGreg Roach    {
4539219296aSGreg Roach        return $this->individualRepository->totalRepositories();
4549219296aSGreg Roach    }
4559219296aSGreg Roach
4569219296aSGreg Roach    /**
4570dcd9387SGreg Roach     * @return string
4589219296aSGreg Roach     */
4599219296aSGreg Roach    public function totalRepositoriesPercentage(): string
4609219296aSGreg Roach    {
4619219296aSGreg Roach        return $this->individualRepository->totalRepositoriesPercentage();
4629219296aSGreg Roach    }
4639219296aSGreg Roach
4649219296aSGreg Roach    /**
46509482a55SGreg Roach     * @param array<string> ...$params
466320f6a24SGreg Roach     *
467320f6a24SGreg Roach     * @return string
4689219296aSGreg Roach     */
4699219296aSGreg Roach    public function totalSurnames(...$params): string
4709219296aSGreg Roach    {
4719219296aSGreg Roach        return $this->individualRepository->totalSurnames(...$params);
4729219296aSGreg Roach    }
4739219296aSGreg Roach
4749219296aSGreg Roach    /**
47509482a55SGreg Roach     * @param array<string> ...$params
476320f6a24SGreg Roach     *
477320f6a24SGreg Roach     * @return string
4789219296aSGreg Roach     */
4799219296aSGreg Roach    public function totalGivennames(...$params): string
4809219296aSGreg Roach    {
4819219296aSGreg Roach        return $this->individualRepository->totalGivennames(...$params);
4829219296aSGreg Roach    }
4839219296aSGreg Roach
4849219296aSGreg Roach    /**
48509482a55SGreg Roach     * @param array<string> $events
4860dcd9387SGreg Roach     *
4870dcd9387SGreg Roach     * @return string
4889219296aSGreg Roach     */
4899219296aSGreg Roach    public function totalEvents(array $events = []): string
4909219296aSGreg Roach    {
4919219296aSGreg Roach        return $this->eventRepository->totalEvents($events);
4929219296aSGreg Roach    }
4939219296aSGreg Roach
4949219296aSGreg Roach    /**
4950dcd9387SGreg Roach     * @return string
4969219296aSGreg Roach     */
4979219296aSGreg Roach    public function totalEventsBirth(): string
4989219296aSGreg Roach    {
4999219296aSGreg Roach        return $this->eventRepository->totalEventsBirth();
5009219296aSGreg Roach    }
5019219296aSGreg Roach
5029219296aSGreg Roach    /**
5030dcd9387SGreg Roach     * @return string
5049219296aSGreg Roach     */
5059219296aSGreg Roach    public function totalBirths(): string
5069219296aSGreg Roach    {
5079219296aSGreg Roach        return $this->eventRepository->totalBirths();
5089219296aSGreg Roach    }
5099219296aSGreg Roach
5109219296aSGreg Roach    /**
5110dcd9387SGreg Roach     * @return string
5129219296aSGreg Roach     */
5139219296aSGreg Roach    public function totalEventsDeath(): string
5149219296aSGreg Roach    {
5159219296aSGreg Roach        return $this->eventRepository->totalEventsDeath();
5169219296aSGreg Roach    }
5179219296aSGreg Roach
5189219296aSGreg Roach    /**
5190dcd9387SGreg Roach     * @return string
5209219296aSGreg Roach     */
5219219296aSGreg Roach    public function totalDeaths(): string
5229219296aSGreg Roach    {
5239219296aSGreg Roach        return $this->eventRepository->totalDeaths();
5249219296aSGreg Roach    }
5259219296aSGreg Roach
5269219296aSGreg Roach    /**
5270dcd9387SGreg Roach     * @return string
5289219296aSGreg Roach     */
5299219296aSGreg Roach    public function totalEventsMarriage(): string
5309219296aSGreg Roach    {
5319219296aSGreg Roach        return $this->eventRepository->totalEventsMarriage();
5329219296aSGreg Roach    }
5339219296aSGreg Roach
5349219296aSGreg Roach    /**
5350dcd9387SGreg Roach     * @return string
5369219296aSGreg Roach     */
5379219296aSGreg Roach    public function totalMarriages(): string
5389219296aSGreg Roach    {
5399219296aSGreg Roach        return $this->eventRepository->totalMarriages();
5409219296aSGreg Roach    }
5419219296aSGreg Roach
5429219296aSGreg Roach    /**
5430dcd9387SGreg Roach     * @return string
5449219296aSGreg Roach     */
5459219296aSGreg Roach    public function totalEventsDivorce(): string
5469219296aSGreg Roach    {
5479219296aSGreg Roach        return $this->eventRepository->totalEventsDivorce();
5489219296aSGreg Roach    }
5499219296aSGreg Roach
5509219296aSGreg Roach    /**
5510dcd9387SGreg Roach     * @return string
5529219296aSGreg Roach     */
5539219296aSGreg Roach    public function totalDivorces(): string
5549219296aSGreg Roach    {
5559219296aSGreg Roach        return $this->eventRepository->totalDivorces();
5569219296aSGreg Roach    }
5579219296aSGreg Roach
5589219296aSGreg Roach    /**
5590dcd9387SGreg Roach     * @return string
5609219296aSGreg Roach     */
5619219296aSGreg Roach    public function totalEventsOther(): string
5629219296aSGreg Roach    {
5639219296aSGreg Roach        return $this->eventRepository->totalEventsOther();
5649219296aSGreg Roach    }
5659219296aSGreg Roach
5669219296aSGreg Roach    /**
5670dcd9387SGreg Roach     * @return string
5689219296aSGreg Roach     */
5699219296aSGreg Roach    public function totalSexMales(): string
5709219296aSGreg Roach    {
5719219296aSGreg Roach        return $this->individualRepository->totalSexMales();
5729219296aSGreg Roach    }
5739219296aSGreg Roach
5749219296aSGreg Roach    /**
5750dcd9387SGreg Roach     * @return string
5769219296aSGreg Roach     */
5779219296aSGreg Roach    public function totalSexMalesPercentage(): string
5789219296aSGreg Roach    {
5799219296aSGreg Roach        return $this->individualRepository->totalSexMalesPercentage();
5809219296aSGreg Roach    }
5819219296aSGreg Roach
5829219296aSGreg Roach    /**
5830dcd9387SGreg Roach     * @return string
5849219296aSGreg Roach     */
5859219296aSGreg Roach    public function totalSexFemales(): string
5869219296aSGreg Roach    {
5879219296aSGreg Roach        return $this->individualRepository->totalSexFemales();
5889219296aSGreg Roach    }
5899219296aSGreg Roach
5909219296aSGreg Roach    /**
5910dcd9387SGreg Roach     * @return string
5929219296aSGreg Roach     */
5939219296aSGreg Roach    public function totalSexFemalesPercentage(): string
5949219296aSGreg Roach    {
5959219296aSGreg Roach        return $this->individualRepository->totalSexFemalesPercentage();
5969219296aSGreg Roach    }
5979219296aSGreg Roach
5989219296aSGreg Roach    /**
5990dcd9387SGreg Roach     * @return string
6009219296aSGreg Roach     */
6019219296aSGreg Roach    public function totalSexUnknown(): string
6029219296aSGreg Roach    {
6039219296aSGreg Roach        return $this->individualRepository->totalSexUnknown();
6049219296aSGreg Roach    }
6059219296aSGreg Roach
6069219296aSGreg Roach    /**
6070dcd9387SGreg Roach     * @return string
6089219296aSGreg Roach     */
6099219296aSGreg Roach    public function totalSexUnknownPercentage(): string
6109219296aSGreg Roach    {
6119219296aSGreg Roach        return $this->individualRepository->totalSexUnknownPercentage();
6129219296aSGreg Roach    }
6139219296aSGreg Roach
6149219296aSGreg Roach    /**
6150dcd9387SGreg Roach     * @param string|null $color_female
6160dcd9387SGreg Roach     * @param string|null $color_male
6170dcd9387SGreg Roach     * @param string|null $color_unknown
6180dcd9387SGreg Roach     *
6190dcd9387SGreg Roach     * @return string
6209219296aSGreg Roach     */
6219219296aSGreg Roach    public function chartSex(
6229219296aSGreg Roach        string $color_female = null,
6239219296aSGreg Roach        string $color_male = null,
6249219296aSGreg Roach        string $color_unknown = null
62598afcacfSGreg Roach    ): string {
62688de55fdSRico Sonntag        return $this->individualRepository->chartSex($color_female, $color_male, $color_unknown);
6279219296aSGreg Roach    }
6289219296aSGreg Roach
6299219296aSGreg Roach    /**
6300dcd9387SGreg Roach     * @return string
6319219296aSGreg Roach     */
6329219296aSGreg Roach    public function totalLiving(): string
6339219296aSGreg Roach    {
6349219296aSGreg Roach        return $this->individualRepository->totalLiving();
6359219296aSGreg Roach    }
6369219296aSGreg Roach
6379219296aSGreg Roach    /**
6380dcd9387SGreg Roach     * @return string
6399219296aSGreg Roach     */
6409219296aSGreg Roach    public function totalLivingPercentage(): string
6419219296aSGreg Roach    {
6429219296aSGreg Roach        return $this->individualRepository->totalLivingPercentage();
6439219296aSGreg Roach    }
6449219296aSGreg Roach
6459219296aSGreg Roach    /**
6460dcd9387SGreg Roach     * @return string
6479219296aSGreg Roach     */
6489219296aSGreg Roach    public function totalDeceased(): string
6499219296aSGreg Roach    {
6509219296aSGreg Roach        return $this->individualRepository->totalDeceased();
6519219296aSGreg Roach    }
6529219296aSGreg Roach
6539219296aSGreg Roach    /**
6540dcd9387SGreg Roach     * @return string
6559219296aSGreg Roach     */
6569219296aSGreg Roach    public function totalDeceasedPercentage(): string
6579219296aSGreg Roach    {
6589219296aSGreg Roach        return $this->individualRepository->totalDeceasedPercentage();
6599219296aSGreg Roach    }
6609219296aSGreg Roach
6619219296aSGreg Roach    /**
6620dcd9387SGreg Roach     * @param string|null $color_living
6630dcd9387SGreg Roach     * @param string|null $color_dead
6640dcd9387SGreg Roach     *
6650dcd9387SGreg Roach     * @return string
6669219296aSGreg Roach     */
66788de55fdSRico Sonntag    public function chartMortality(string $color_living = null, string $color_dead = null): string
6689219296aSGreg Roach    {
66988de55fdSRico Sonntag        return $this->individualRepository->chartMortality($color_living, $color_dead);
6709219296aSGreg Roach    }
6719219296aSGreg Roach
6729219296aSGreg Roach    /**
6730dcd9387SGreg Roach     * @return string
6749219296aSGreg Roach     */
6759219296aSGreg Roach    public function totalMedia(): string
6769219296aSGreg Roach    {
6779219296aSGreg Roach        return $this->mediaRepository->totalMedia();
6789219296aSGreg Roach    }
6799219296aSGreg Roach
6809219296aSGreg Roach    /**
6810dcd9387SGreg Roach     * @return string
6829219296aSGreg Roach     */
6839219296aSGreg Roach    public function totalMediaAudio(): string
6849219296aSGreg Roach    {
6859219296aSGreg Roach        return $this->mediaRepository->totalMediaAudio();
6869219296aSGreg Roach    }
6879219296aSGreg Roach
6889219296aSGreg Roach    /**
6890dcd9387SGreg Roach     * @return string
6909219296aSGreg Roach     */
6919219296aSGreg Roach    public function totalMediaBook(): string
6929219296aSGreg Roach    {
6939219296aSGreg Roach        return $this->mediaRepository->totalMediaBook();
6949219296aSGreg Roach    }
6959219296aSGreg Roach
6969219296aSGreg Roach    /**
6970dcd9387SGreg Roach     * @return string
6989219296aSGreg Roach     */
6999219296aSGreg Roach    public function totalMediaCard(): string
7009219296aSGreg Roach    {
7019219296aSGreg Roach        return $this->mediaRepository->totalMediaCard();
7029219296aSGreg Roach    }
7039219296aSGreg Roach
7049219296aSGreg Roach    /**
7050dcd9387SGreg Roach     * @return string
7069219296aSGreg Roach     */
7079219296aSGreg Roach    public function totalMediaCertificate(): string
7089219296aSGreg Roach    {
7099219296aSGreg Roach        return $this->mediaRepository->totalMediaCertificate();
7109219296aSGreg Roach    }
7119219296aSGreg Roach
7129219296aSGreg Roach    /**
7130dcd9387SGreg Roach     * @return string
7149219296aSGreg Roach     */
7159219296aSGreg Roach    public function totalMediaCoatOfArms(): string
7169219296aSGreg Roach    {
7179219296aSGreg Roach        return $this->mediaRepository->totalMediaCoatOfArms();
7189219296aSGreg Roach    }
7199219296aSGreg Roach
7209219296aSGreg Roach    /**
7210dcd9387SGreg Roach     * @return string
7229219296aSGreg Roach     */
7239219296aSGreg Roach    public function totalMediaDocument(): string
7249219296aSGreg Roach    {
7259219296aSGreg Roach        return $this->mediaRepository->totalMediaDocument();
7269219296aSGreg Roach    }
7279219296aSGreg Roach
7289219296aSGreg Roach    /**
7290dcd9387SGreg Roach     * @return string
7309219296aSGreg Roach     */
7319219296aSGreg Roach    public function totalMediaElectronic(): string
7329219296aSGreg Roach    {
7339219296aSGreg Roach        return $this->mediaRepository->totalMediaElectronic();
7349219296aSGreg Roach    }
7359219296aSGreg Roach
7369219296aSGreg Roach    /**
7370dcd9387SGreg Roach     * @return string
7389219296aSGreg Roach     */
7399219296aSGreg Roach    public function totalMediaMagazine(): string
7409219296aSGreg Roach    {
7419219296aSGreg Roach        return $this->mediaRepository->totalMediaMagazine();
7429219296aSGreg Roach    }
7439219296aSGreg Roach
7449219296aSGreg Roach    /**
7450dcd9387SGreg Roach     * @return string
7469219296aSGreg Roach     */
7479219296aSGreg Roach    public function totalMediaManuscript(): string
7489219296aSGreg Roach    {
7499219296aSGreg Roach        return $this->mediaRepository->totalMediaManuscript();
7509219296aSGreg Roach    }
7519219296aSGreg Roach
7529219296aSGreg Roach    /**
7530dcd9387SGreg Roach     * @return string
7549219296aSGreg Roach     */
7559219296aSGreg Roach    public function totalMediaMap(): string
7569219296aSGreg Roach    {
7579219296aSGreg Roach        return $this->mediaRepository->totalMediaMap();
7589219296aSGreg Roach    }
7599219296aSGreg Roach
7609219296aSGreg Roach    /**
7610dcd9387SGreg Roach     * @return string
7629219296aSGreg Roach     */
7639219296aSGreg Roach    public function totalMediaFiche(): string
7649219296aSGreg Roach    {
7659219296aSGreg Roach        return $this->mediaRepository->totalMediaFiche();
7669219296aSGreg Roach    }
7679219296aSGreg Roach
7689219296aSGreg Roach    /**
7690dcd9387SGreg Roach     * @return string
7709219296aSGreg Roach     */
7719219296aSGreg Roach    public function totalMediaFilm(): string
7729219296aSGreg Roach    {
7739219296aSGreg Roach        return $this->mediaRepository->totalMediaFilm();
7749219296aSGreg Roach    }
7759219296aSGreg Roach
7769219296aSGreg Roach    /**
7770dcd9387SGreg Roach     * @return string
7789219296aSGreg Roach     */
7799219296aSGreg Roach    public function totalMediaNewspaper(): string
7809219296aSGreg Roach    {
7819219296aSGreg Roach        return $this->mediaRepository->totalMediaNewspaper();
7829219296aSGreg Roach    }
7839219296aSGreg Roach
7849219296aSGreg Roach    /**
7850dcd9387SGreg Roach     * @return string
7869219296aSGreg Roach     */
7879219296aSGreg Roach    public function totalMediaPainting(): string
7889219296aSGreg Roach    {
7899219296aSGreg Roach        return $this->mediaRepository->totalMediaPainting();
7909219296aSGreg Roach    }
7919219296aSGreg Roach
7929219296aSGreg Roach    /**
7930dcd9387SGreg Roach     * @return string
7949219296aSGreg Roach     */
7959219296aSGreg Roach    public function totalMediaPhoto(): string
7969219296aSGreg Roach    {
7979219296aSGreg Roach        return $this->mediaRepository->totalMediaPhoto();
7989219296aSGreg Roach    }
7999219296aSGreg Roach
8009219296aSGreg Roach    /**
8010dcd9387SGreg Roach     * @return string
8029219296aSGreg Roach     */
8039219296aSGreg Roach    public function totalMediaTombstone(): string
8049219296aSGreg Roach    {
8059219296aSGreg Roach        return $this->mediaRepository->totalMediaTombstone();
8069219296aSGreg Roach    }
8079219296aSGreg Roach
8089219296aSGreg Roach    /**
8090dcd9387SGreg Roach     * @return string
8109219296aSGreg Roach     */
8119219296aSGreg Roach    public function totalMediaVideo(): string
8129219296aSGreg Roach    {
8139219296aSGreg Roach        return $this->mediaRepository->totalMediaVideo();
8149219296aSGreg Roach    }
8159219296aSGreg Roach
8169219296aSGreg Roach    /**
8170dcd9387SGreg Roach     * @return string
8189219296aSGreg Roach     */
8199219296aSGreg Roach    public function totalMediaOther(): string
8209219296aSGreg Roach    {
8219219296aSGreg Roach        return $this->mediaRepository->totalMediaOther();
8229219296aSGreg Roach    }
8239219296aSGreg Roach
8249219296aSGreg Roach    /**
8250dcd9387SGreg Roach     * @return string
8269219296aSGreg Roach     */
8279219296aSGreg Roach    public function totalMediaUnknown(): string
8289219296aSGreg Roach    {
8299219296aSGreg Roach        return $this->mediaRepository->totalMediaUnknown();
8309219296aSGreg Roach    }
8319219296aSGreg Roach
8329219296aSGreg Roach    /**
8330dcd9387SGreg Roach     * @param string|null $color_from
8340dcd9387SGreg Roach     * @param string|null $color_to
8350dcd9387SGreg Roach     *
8360dcd9387SGreg Roach     * @return string
8379219296aSGreg Roach     */
83888de55fdSRico Sonntag    public function chartMedia(string $color_from = null, string $color_to = null): string
8399219296aSGreg Roach    {
84088de55fdSRico Sonntag        return $this->mediaRepository->chartMedia($color_from, $color_to);
8419219296aSGreg Roach    }
8429219296aSGreg Roach
8439219296aSGreg Roach    /**
8440dcd9387SGreg Roach     * @param string $what
8450dcd9387SGreg Roach     * @param string $fact
8460dcd9387SGreg Roach     * @param int    $parent
8470dcd9387SGreg Roach     * @param bool   $country
8480dcd9387SGreg Roach     *
849870ec5a3SGreg Roach     * @return array<stdClass>
8509219296aSGreg Roach     */
8519219296aSGreg Roach    public function statsPlaces(string $what = 'ALL', string $fact = '', int $parent = 0, bool $country = false): array
8529219296aSGreg Roach    {
8539219296aSGreg Roach        return $this->placeRepository->statsPlaces($what, $fact, $parent, $country);
8549219296aSGreg Roach    }
8559219296aSGreg Roach
8569219296aSGreg Roach    /**
8570dcd9387SGreg Roach     * @return string
8589219296aSGreg Roach     */
8599219296aSGreg Roach    public function totalPlaces(): string
8609219296aSGreg Roach    {
8619219296aSGreg Roach        return $this->placeRepository->totalPlaces();
8629219296aSGreg Roach    }
8639219296aSGreg Roach
8649219296aSGreg Roach    /**
8650dcd9387SGreg Roach     * @param string $chart_shows
8660dcd9387SGreg Roach     * @param string $chart_type
8670dcd9387SGreg Roach     * @param string $surname
8680dcd9387SGreg Roach     *
8690dcd9387SGreg Roach     * @return string
8709219296aSGreg Roach     */
8719219296aSGreg Roach    public function chartDistribution(
8729219296aSGreg Roach        string $chart_shows = 'world',
8739219296aSGreg Roach        string $chart_type = '',
8749219296aSGreg Roach        string $surname = ''
87598afcacfSGreg Roach    ): string {
8769219296aSGreg Roach        return $this->placeRepository->chartDistribution($chart_shows, $chart_type, $surname);
8779219296aSGreg Roach    }
8789219296aSGreg Roach
8799219296aSGreg Roach    /**
8800dcd9387SGreg Roach     * @return string
8819219296aSGreg Roach     */
8829219296aSGreg Roach    public function commonCountriesList(): string
8839219296aSGreg Roach    {
8849219296aSGreg Roach        return $this->placeRepository->commonCountriesList();
8859219296aSGreg Roach    }
8869219296aSGreg Roach
8879219296aSGreg Roach    /**
8880dcd9387SGreg Roach     * @return string
8899219296aSGreg Roach     */
8909219296aSGreg Roach    public function commonBirthPlacesList(): string
8919219296aSGreg Roach    {
8929219296aSGreg Roach        return $this->placeRepository->commonBirthPlacesList();
8939219296aSGreg Roach    }
8949219296aSGreg Roach
8959219296aSGreg Roach    /**
8960dcd9387SGreg Roach     * @return string
8979219296aSGreg Roach     */
8989219296aSGreg Roach    public function commonDeathPlacesList(): string
8999219296aSGreg Roach    {
9009219296aSGreg Roach        return $this->placeRepository->commonDeathPlacesList();
9019219296aSGreg Roach    }
9029219296aSGreg Roach
9039219296aSGreg Roach    /**
9040dcd9387SGreg Roach     * @return string
9059219296aSGreg Roach     */
9069219296aSGreg Roach    public function commonMarriagePlacesList(): string
9079219296aSGreg Roach    {
9089219296aSGreg Roach        return $this->placeRepository->commonMarriagePlacesList();
9099219296aSGreg Roach    }
9109219296aSGreg Roach
9119219296aSGreg Roach    /**
9120dcd9387SGreg Roach     * @return string
9139219296aSGreg Roach     */
9149219296aSGreg Roach    public function firstBirth(): string
9159219296aSGreg Roach    {
9169219296aSGreg Roach        return $this->familyDatesRepository->firstBirth();
9179219296aSGreg Roach    }
9189219296aSGreg Roach
9199219296aSGreg Roach    /**
9200dcd9387SGreg Roach     * @return string
9219219296aSGreg Roach     */
9229219296aSGreg Roach    public function firstBirthYear(): string
9239219296aSGreg Roach    {
9249219296aSGreg Roach        return $this->familyDatesRepository->firstBirthYear();
9259219296aSGreg Roach    }
9269219296aSGreg Roach
9279219296aSGreg Roach    /**
9280dcd9387SGreg Roach     * @return string
9299219296aSGreg Roach     */
9309219296aSGreg Roach    public function firstBirthName(): string
9319219296aSGreg Roach    {
9329219296aSGreg Roach        return $this->familyDatesRepository->firstBirthName();
9339219296aSGreg Roach    }
9349219296aSGreg Roach
9359219296aSGreg Roach    /**
9360dcd9387SGreg Roach     * @return string
9379219296aSGreg Roach     */
9389219296aSGreg Roach    public function firstBirthPlace(): string
9399219296aSGreg Roach    {
9409219296aSGreg Roach        return $this->familyDatesRepository->firstBirthPlace();
9419219296aSGreg Roach    }
9429219296aSGreg Roach
9439219296aSGreg Roach    /**
9440dcd9387SGreg Roach     * @return string
9459219296aSGreg Roach     */
9469219296aSGreg Roach    public function lastBirth(): string
9479219296aSGreg Roach    {
9489219296aSGreg Roach        return $this->familyDatesRepository->lastBirth();
9499219296aSGreg Roach    }
9509219296aSGreg Roach
9519219296aSGreg Roach    /**
9520dcd9387SGreg Roach     * @return string
9539219296aSGreg Roach     */
9549219296aSGreg Roach    public function lastBirthYear(): string
9559219296aSGreg Roach    {
9569219296aSGreg Roach        return $this->familyDatesRepository->lastBirthYear();
9579219296aSGreg Roach    }
9589219296aSGreg Roach
9599219296aSGreg Roach    /**
9600dcd9387SGreg Roach     * @return string
9619219296aSGreg Roach     */
9629219296aSGreg Roach    public function lastBirthName(): string
9639219296aSGreg Roach    {
9649219296aSGreg Roach        return $this->familyDatesRepository->lastBirthName();
9659219296aSGreg Roach    }
9669219296aSGreg Roach
9679219296aSGreg Roach    /**
9680dcd9387SGreg Roach     * @return string
9699219296aSGreg Roach     */
9709219296aSGreg Roach    public function lastBirthPlace(): string
9719219296aSGreg Roach    {
9729219296aSGreg Roach        return $this->familyDatesRepository->lastBirthPlace();
9739219296aSGreg Roach    }
9749219296aSGreg Roach
9759219296aSGreg Roach    /**
9760dcd9387SGreg Roach     * @param int $year1
9770dcd9387SGreg Roach     * @param int $year2
9780dcd9387SGreg Roach     *
9790dcd9387SGreg Roach     * @return Builder
9809219296aSGreg Roach     */
981cde1d378SGreg Roach    public function statsBirthQuery(int $year1 = -1, int $year2 = -1): Builder
9829219296aSGreg Roach    {
983cde1d378SGreg Roach        return $this->individualRepository->statsBirthQuery($year1, $year2);
984cde1d378SGreg Roach    }
985cde1d378SGreg Roach
986cde1d378SGreg Roach    /**
9870dcd9387SGreg Roach     * @param int $year1
9880dcd9387SGreg Roach     * @param int $year2
9890dcd9387SGreg Roach     *
9900dcd9387SGreg Roach     * @return Builder
991cde1d378SGreg Roach     */
992cde1d378SGreg Roach    public function statsBirthBySexQuery(int $year1 = -1, int $year2 = -1): Builder
993cde1d378SGreg Roach    {
994cde1d378SGreg Roach        return $this->individualRepository->statsBirthBySexQuery($year1, $year2);
9959219296aSGreg Roach    }
9969219296aSGreg Roach
9979219296aSGreg Roach    /**
9980dcd9387SGreg Roach     * @param string|null $color_from
9990dcd9387SGreg Roach     * @param string|null $color_to
10000dcd9387SGreg Roach     *
10010dcd9387SGreg Roach     * @return string
10029219296aSGreg Roach     */
100388de55fdSRico Sonntag    public function statsBirth(string $color_from = null, string $color_to = null): string
10049219296aSGreg Roach    {
100588de55fdSRico Sonntag        return $this->individualRepository->statsBirth($color_from, $color_to);
10069219296aSGreg Roach    }
10079219296aSGreg Roach
10089219296aSGreg Roach    /**
10090dcd9387SGreg Roach     * @return string
10109219296aSGreg Roach     */
10119219296aSGreg Roach    public function firstDeath(): string
10129219296aSGreg Roach    {
10139219296aSGreg Roach        return $this->familyDatesRepository->firstDeath();
10149219296aSGreg Roach    }
10159219296aSGreg Roach
10169219296aSGreg Roach    /**
10170dcd9387SGreg Roach     * @return string
10189219296aSGreg Roach     */
10199219296aSGreg Roach    public function firstDeathYear(): string
10209219296aSGreg Roach    {
10219219296aSGreg Roach        return $this->familyDatesRepository->firstDeathYear();
10229219296aSGreg Roach    }
10239219296aSGreg Roach
10249219296aSGreg Roach    /**
10250dcd9387SGreg Roach     * @return string
10269219296aSGreg Roach     */
10279219296aSGreg Roach    public function firstDeathName(): string
10289219296aSGreg Roach    {
10299219296aSGreg Roach        return $this->familyDatesRepository->firstDeathName();
10309219296aSGreg Roach    }
10319219296aSGreg Roach
10329219296aSGreg Roach    /**
10330dcd9387SGreg Roach     * @return string
10349219296aSGreg Roach     */
10359219296aSGreg Roach    public function firstDeathPlace(): string
10369219296aSGreg Roach    {
10379219296aSGreg Roach        return $this->familyDatesRepository->firstDeathPlace();
10389219296aSGreg Roach    }
10399219296aSGreg Roach
10409219296aSGreg Roach    /**
10410dcd9387SGreg Roach     * @return string
10429219296aSGreg Roach     */
10439219296aSGreg Roach    public function lastDeath(): string
10449219296aSGreg Roach    {
10459219296aSGreg Roach        return $this->familyDatesRepository->lastDeath();
10469219296aSGreg Roach    }
10479219296aSGreg Roach
10489219296aSGreg Roach    /**
10490dcd9387SGreg Roach     * @return string
10509219296aSGreg Roach     */
10519219296aSGreg Roach    public function lastDeathYear(): string
10529219296aSGreg Roach    {
10539219296aSGreg Roach        return $this->familyDatesRepository->lastDeathYear();
10549219296aSGreg Roach    }
10559219296aSGreg Roach
10569219296aSGreg Roach    /**
10570dcd9387SGreg Roach     * @return string
10589219296aSGreg Roach     */
10599219296aSGreg Roach    public function lastDeathName(): string
10609219296aSGreg Roach    {
10619219296aSGreg Roach        return $this->familyDatesRepository->lastDeathName();
10629219296aSGreg Roach    }
10639219296aSGreg Roach
10649219296aSGreg Roach    /**
10650dcd9387SGreg Roach     * @return string
10669219296aSGreg Roach     */
10679219296aSGreg Roach    public function lastDeathPlace(): string
10689219296aSGreg Roach    {
10699219296aSGreg Roach        return $this->familyDatesRepository->lastDeathPlace();
10709219296aSGreg Roach    }
10719219296aSGreg Roach
10729219296aSGreg Roach    /**
10730dcd9387SGreg Roach     * @param int $year1
10740dcd9387SGreg Roach     * @param int $year2
10750dcd9387SGreg Roach     *
10760dcd9387SGreg Roach     * @return Builder
10779219296aSGreg Roach     */
1078cde1d378SGreg Roach    public function statsDeathQuery(int $year1 = -1, int $year2 = -1): Builder
10799219296aSGreg Roach    {
1080cde1d378SGreg Roach        return $this->individualRepository->statsDeathQuery($year1, $year2);
1081cde1d378SGreg Roach    }
1082cde1d378SGreg Roach
1083cde1d378SGreg Roach    /**
10840dcd9387SGreg Roach     * @param int $year1
10850dcd9387SGreg Roach     * @param int $year2
10860dcd9387SGreg Roach     *
10870dcd9387SGreg Roach     * @return Builder
1088cde1d378SGreg Roach     */
1089cde1d378SGreg Roach    public function statsDeathBySexQuery(int $year1 = -1, int $year2 = -1): Builder
1090cde1d378SGreg Roach    {
1091cde1d378SGreg Roach        return $this->individualRepository->statsDeathBySexQuery($year1, $year2);
10929219296aSGreg Roach    }
10939219296aSGreg Roach
10949219296aSGreg Roach    /**
10950dcd9387SGreg Roach     * @param string|null $color_from
10960dcd9387SGreg Roach     * @param string|null $color_to
10970dcd9387SGreg Roach     *
10980dcd9387SGreg Roach     * @return string
10999219296aSGreg Roach     */
110088de55fdSRico Sonntag    public function statsDeath(string $color_from = null, string $color_to = null): string
11019219296aSGreg Roach    {
110288de55fdSRico Sonntag        return $this->individualRepository->statsDeath($color_from, $color_to);
11039219296aSGreg Roach    }
11049219296aSGreg Roach
11059219296aSGreg Roach    /**
1106320f6a24SGreg Roach     * General query on ages.
1107320f6a24SGreg Roach     *
1108320f6a24SGreg Roach     * @param string $related
1109320f6a24SGreg Roach     * @param string $sex
1110320f6a24SGreg Roach     * @param int    $year1
1111320f6a24SGreg Roach     * @param int    $year2
1112320f6a24SGreg Roach     *
1113320f6a24SGreg Roach     * @return array|string
11149219296aSGreg Roach     */
11159219296aSGreg Roach    public function statsAgeQuery(string $related = 'BIRT', string $sex = 'BOTH', int $year1 = -1, int $year2 = -1)
11169219296aSGreg Roach    {
11179219296aSGreg Roach        return $this->individualRepository->statsAgeQuery($related, $sex, $year1, $year2);
11189219296aSGreg Roach    }
11199219296aSGreg Roach
11209219296aSGreg Roach    /**
11210dcd9387SGreg Roach     * @return string
11229219296aSGreg Roach     */
112388de55fdSRico Sonntag    public function statsAge(): string
11249219296aSGreg Roach    {
112588de55fdSRico Sonntag        return $this->individualRepository->statsAge();
11269219296aSGreg Roach    }
11279219296aSGreg Roach
11289219296aSGreg Roach    /**
11290dcd9387SGreg Roach     * @return string
11309219296aSGreg Roach     */
11319219296aSGreg Roach    public function longestLife(): string
11329219296aSGreg Roach    {
11339219296aSGreg Roach        return $this->individualRepository->longestLife();
11349219296aSGreg Roach    }
11359219296aSGreg Roach
11369219296aSGreg Roach    /**
11370dcd9387SGreg Roach     * @return string
11389219296aSGreg Roach     */
11399219296aSGreg Roach    public function longestLifeAge(): string
11409219296aSGreg Roach    {
11419219296aSGreg Roach        return $this->individualRepository->longestLifeAge();
11429219296aSGreg Roach    }
11439219296aSGreg Roach
11449219296aSGreg Roach    /**
11450dcd9387SGreg Roach     * @return string
11469219296aSGreg Roach     */
11479219296aSGreg Roach    public function longestLifeName(): string
11489219296aSGreg Roach    {
11499219296aSGreg Roach        return $this->individualRepository->longestLifeName();
11509219296aSGreg Roach    }
11519219296aSGreg Roach
11529219296aSGreg Roach    /**
11530dcd9387SGreg Roach     * @return string
11549219296aSGreg Roach     */
11559219296aSGreg Roach    public function longestLifeFemale(): string
11569219296aSGreg Roach    {
11579219296aSGreg Roach        return $this->individualRepository->longestLifeFemale();
11589219296aSGreg Roach    }
11599219296aSGreg Roach
11609219296aSGreg Roach    /**
11610dcd9387SGreg Roach     * @return string
11629219296aSGreg Roach     */
11639219296aSGreg Roach    public function longestLifeFemaleAge(): string
11649219296aSGreg Roach    {
11659219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleAge();
11669219296aSGreg Roach    }
11679219296aSGreg Roach
11689219296aSGreg Roach    /**
11690dcd9387SGreg Roach     * @return string
11709219296aSGreg Roach     */
11719219296aSGreg Roach    public function longestLifeFemaleName(): string
11729219296aSGreg Roach    {
11739219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleName();
11749219296aSGreg Roach    }
11759219296aSGreg Roach
11769219296aSGreg Roach    /**
11770dcd9387SGreg Roach     * @return string
11789219296aSGreg Roach     */
11799219296aSGreg Roach    public function longestLifeMale(): string
11809219296aSGreg Roach    {
11819219296aSGreg Roach        return $this->individualRepository->longestLifeMale();
11829219296aSGreg Roach    }
11839219296aSGreg Roach
11849219296aSGreg Roach    /**
11850dcd9387SGreg Roach     * @return string
11869219296aSGreg Roach     */
11879219296aSGreg Roach    public function longestLifeMaleAge(): string
11889219296aSGreg Roach    {
11899219296aSGreg Roach        return $this->individualRepository->longestLifeMaleAge();
11909219296aSGreg Roach    }
11919219296aSGreg Roach
11929219296aSGreg Roach    /**
11930dcd9387SGreg Roach     * @return string
11949219296aSGreg Roach     */
11959219296aSGreg Roach    public function longestLifeMaleName(): string
11969219296aSGreg Roach    {
11979219296aSGreg Roach        return $this->individualRepository->longestLifeMaleName();
11989219296aSGreg Roach    }
11999219296aSGreg Roach
12009219296aSGreg Roach    /**
12010dcd9387SGreg Roach     * @param string $total
12020dcd9387SGreg Roach     *
12030dcd9387SGreg Roach     * @return string
12049219296aSGreg Roach     */
12059219296aSGreg Roach    public function topTenOldest(string $total = '10'): string
12069219296aSGreg Roach    {
12079219296aSGreg Roach        return $this->individualRepository->topTenOldest((int) $total);
12089219296aSGreg Roach    }
12099219296aSGreg Roach
12109219296aSGreg Roach    /**
12110dcd9387SGreg Roach     * @param string $total
12120dcd9387SGreg Roach     *
12130dcd9387SGreg Roach     * @return string
12149219296aSGreg Roach     */
12159219296aSGreg Roach    public function topTenOldestList(string $total = '10'): string
12169219296aSGreg Roach    {
12179219296aSGreg Roach        return $this->individualRepository->topTenOldestList((int) $total);
12189219296aSGreg Roach    }
12199219296aSGreg Roach
12209219296aSGreg Roach    /**
12210dcd9387SGreg Roach     * @param string $total
12220dcd9387SGreg Roach     *
12230dcd9387SGreg Roach     * @return string
12249219296aSGreg Roach     */
12259219296aSGreg Roach    public function topTenOldestFemale(string $total = '10'): string
12269219296aSGreg Roach    {
12279219296aSGreg Roach        return $this->individualRepository->topTenOldestFemale((int) $total);
12289219296aSGreg Roach    }
12299219296aSGreg Roach
12309219296aSGreg Roach    /**
12310dcd9387SGreg Roach     * @param string $total
12320dcd9387SGreg Roach     *
12330dcd9387SGreg Roach     * @return string
12349219296aSGreg Roach     */
12359219296aSGreg Roach    public function topTenOldestFemaleList(string $total = '10'): string
12369219296aSGreg Roach    {
12379219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleList((int) $total);
12389219296aSGreg Roach    }
12399219296aSGreg Roach
12409219296aSGreg Roach    /**
12410dcd9387SGreg Roach     * @param string $total
12420dcd9387SGreg Roach     *
12430dcd9387SGreg Roach     * @return string
12449219296aSGreg Roach     */
12459219296aSGreg Roach    public function topTenOldestMale(string $total = '10'): string
12469219296aSGreg Roach    {
12479219296aSGreg Roach        return $this->individualRepository->topTenOldestMale((int) $total);
12489219296aSGreg Roach    }
12499219296aSGreg Roach
12509219296aSGreg Roach    /**
12510dcd9387SGreg Roach     * @param string $total
12520dcd9387SGreg Roach     *
12530dcd9387SGreg Roach     * @return string
12549219296aSGreg Roach     */
12559219296aSGreg Roach    public function topTenOldestMaleList(string $total = '10'): string
12569219296aSGreg Roach    {
12579219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleList((int) $total);
12589219296aSGreg Roach    }
12599219296aSGreg Roach
12609219296aSGreg Roach    /**
12610dcd9387SGreg Roach     * @param string $total
12620dcd9387SGreg Roach     *
12630dcd9387SGreg Roach     * @return string
12649219296aSGreg Roach     */
12659219296aSGreg Roach    public function topTenOldestAlive(string $total = '10'): string
12669219296aSGreg Roach    {
12679219296aSGreg Roach        return $this->individualRepository->topTenOldestAlive((int) $total);
12689219296aSGreg Roach    }
12699219296aSGreg Roach
12709219296aSGreg Roach    /**
12710dcd9387SGreg Roach     * @param string $total
12720dcd9387SGreg Roach     *
12730dcd9387SGreg Roach     * @return string
12749219296aSGreg Roach     */
12759219296aSGreg Roach    public function topTenOldestListAlive(string $total = '10'): string
12769219296aSGreg Roach    {
12779219296aSGreg Roach        return $this->individualRepository->topTenOldestListAlive((int) $total);
12789219296aSGreg Roach    }
12799219296aSGreg Roach
12809219296aSGreg Roach    /**
12810dcd9387SGreg Roach     * @param string $total
12820dcd9387SGreg Roach     *
12830dcd9387SGreg Roach     * @return string
12849219296aSGreg Roach     */
12859219296aSGreg Roach    public function topTenOldestFemaleAlive(string $total = '10'): string
12869219296aSGreg Roach    {
12879219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleAlive((int) $total);
12889219296aSGreg Roach    }
12899219296aSGreg Roach
12909219296aSGreg Roach    /**
12910dcd9387SGreg Roach     * @param string $total
12920dcd9387SGreg Roach     *
12930dcd9387SGreg Roach     * @return string
12949219296aSGreg Roach     */
12959219296aSGreg Roach    public function topTenOldestFemaleListAlive(string $total = '10'): string
12969219296aSGreg Roach    {
12979219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleListAlive((int) $total);
12989219296aSGreg Roach    }
12999219296aSGreg Roach
13009219296aSGreg Roach    /**
13010dcd9387SGreg Roach     * @param string $total
13020dcd9387SGreg Roach     *
13030dcd9387SGreg Roach     * @return string
13049219296aSGreg Roach     */
13059219296aSGreg Roach    public function topTenOldestMaleAlive(string $total = '10'): string
13069219296aSGreg Roach    {
13079219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleAlive((int) $total);
13089219296aSGreg Roach    }
13099219296aSGreg Roach
13109219296aSGreg Roach    /**
13110dcd9387SGreg Roach     * @param string $total
13120dcd9387SGreg Roach     *
13130dcd9387SGreg Roach     * @return string
13149219296aSGreg Roach     */
13159219296aSGreg Roach    public function topTenOldestMaleListAlive(string $total = '10'): string
13169219296aSGreg Roach    {
13179219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleListAlive((int) $total);
13189219296aSGreg Roach    }
13199219296aSGreg Roach
13209219296aSGreg Roach    /**
13210dcd9387SGreg Roach     * @param bool $show_years
13220dcd9387SGreg Roach     *
13230dcd9387SGreg Roach     * @return string
13249219296aSGreg Roach     */
13259219296aSGreg Roach    public function averageLifespan(bool $show_years = false): string
13269219296aSGreg Roach    {
13279219296aSGreg Roach        return $this->individualRepository->averageLifespan($show_years);
13289219296aSGreg Roach    }
13299219296aSGreg Roach
13309219296aSGreg Roach    /**
13310dcd9387SGreg Roach     * @param bool $show_years
13320dcd9387SGreg Roach     *
13330dcd9387SGreg Roach     * @return string
13349219296aSGreg Roach     */
13359219296aSGreg Roach    public function averageLifespanFemale(bool $show_years = false): string
13369219296aSGreg Roach    {
13379219296aSGreg Roach        return $this->individualRepository->averageLifespanFemale($show_years);
13389219296aSGreg Roach    }
13399219296aSGreg Roach
13409219296aSGreg Roach    /**
13410dcd9387SGreg Roach     * @param bool $show_years
13420dcd9387SGreg Roach     *
13430dcd9387SGreg Roach     * @return string
13449219296aSGreg Roach     */
13459219296aSGreg Roach    public function averageLifespanMale(bool $show_years = false): string
13469219296aSGreg Roach    {
13479219296aSGreg Roach        return $this->individualRepository->averageLifespanMale($show_years);
13489219296aSGreg Roach    }
13499219296aSGreg Roach
13509219296aSGreg Roach    /**
13510dcd9387SGreg Roach     * @return string
13529219296aSGreg Roach     */
13539219296aSGreg Roach    public function firstEvent(): string
13549219296aSGreg Roach    {
13559219296aSGreg Roach        return $this->eventRepository->firstEvent();
13569219296aSGreg Roach    }
13579219296aSGreg Roach
13589219296aSGreg Roach    /**
13590dcd9387SGreg Roach     * @return string
13609219296aSGreg Roach     */
13619219296aSGreg Roach    public function firstEventYear(): string
13629219296aSGreg Roach    {
13639219296aSGreg Roach        return $this->eventRepository->firstEventYear();
13649219296aSGreg Roach    }
13659219296aSGreg Roach
13669219296aSGreg Roach    /**
13670dcd9387SGreg Roach     * @return string
13689219296aSGreg Roach     */
13699219296aSGreg Roach    public function firstEventType(): string
13709219296aSGreg Roach    {
13719219296aSGreg Roach        return $this->eventRepository->firstEventType();
13729219296aSGreg Roach    }
13739219296aSGreg Roach
13749219296aSGreg Roach    /**
13750dcd9387SGreg Roach     * @return string
13769219296aSGreg Roach     */
13779219296aSGreg Roach    public function firstEventName(): string
13789219296aSGreg Roach    {
13799219296aSGreg Roach        return $this->eventRepository->firstEventName();
13809219296aSGreg Roach    }
13819219296aSGreg Roach
13829219296aSGreg Roach    /**
13830dcd9387SGreg Roach     * @return string
13849219296aSGreg Roach     */
13859219296aSGreg Roach    public function firstEventPlace(): string
13869219296aSGreg Roach    {
13879219296aSGreg Roach        return $this->eventRepository->firstEventPlace();
13889219296aSGreg Roach    }
13899219296aSGreg Roach
13909219296aSGreg Roach    /**
13910dcd9387SGreg Roach     * @return string
13929219296aSGreg Roach     */
13939219296aSGreg Roach    public function lastEvent(): string
13949219296aSGreg Roach    {
13959219296aSGreg Roach        return $this->eventRepository->lastEvent();
13969219296aSGreg Roach    }
13979219296aSGreg Roach
13989219296aSGreg Roach    /**
13990dcd9387SGreg Roach     * @return string
14009219296aSGreg Roach     */
14019219296aSGreg Roach    public function lastEventYear(): string
14029219296aSGreg Roach    {
14039219296aSGreg Roach        return $this->eventRepository->lastEventYear();
14049219296aSGreg Roach    }
14059219296aSGreg Roach
14069219296aSGreg Roach    /**
14070dcd9387SGreg Roach     * @return string
14089219296aSGreg Roach     */
14099219296aSGreg Roach    public function lastEventType(): string
14109219296aSGreg Roach    {
14119219296aSGreg Roach        return $this->eventRepository->lastEventType();
14129219296aSGreg Roach    }
14139219296aSGreg Roach
14149219296aSGreg Roach    /**
14150dcd9387SGreg Roach     * @return string
14169219296aSGreg Roach     */
14179219296aSGreg Roach    public function lastEventName(): string
14189219296aSGreg Roach    {
14199219296aSGreg Roach        return $this->eventRepository->lastEventName();
14209219296aSGreg Roach    }
14219219296aSGreg Roach
14229219296aSGreg Roach    /**
14230dcd9387SGreg Roach     * @return string
14249219296aSGreg Roach     */
14259219296aSGreg Roach    public function lastEventPlace(): string
14269219296aSGreg Roach    {
14279219296aSGreg Roach        return $this->eventRepository->lastEventType();
14289219296aSGreg Roach    }
14299219296aSGreg Roach
14309219296aSGreg Roach    /**
14310dcd9387SGreg Roach     * @return string
14329219296aSGreg Roach     */
14339219296aSGreg Roach    public function firstMarriage(): string
14349219296aSGreg Roach    {
14359219296aSGreg Roach        return $this->familyDatesRepository->firstMarriage();
14369219296aSGreg Roach    }
14379219296aSGreg Roach
14389219296aSGreg Roach    /**
14390dcd9387SGreg Roach     * @return string
14409219296aSGreg Roach     */
14419219296aSGreg Roach    public function firstMarriageYear(): string
14429219296aSGreg Roach    {
14439219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageYear();
14449219296aSGreg Roach    }
14459219296aSGreg Roach
14469219296aSGreg Roach    /**
14470dcd9387SGreg Roach     * @return string
14489219296aSGreg Roach     */
14499219296aSGreg Roach    public function firstMarriageName(): string
14509219296aSGreg Roach    {
14519219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageName();
14529219296aSGreg Roach    }
14539219296aSGreg Roach
14549219296aSGreg Roach    /**
14550dcd9387SGreg Roach     * @return string
14569219296aSGreg Roach     */
14579219296aSGreg Roach    public function firstMarriagePlace(): string
14589219296aSGreg Roach    {
14599219296aSGreg Roach        return $this->familyDatesRepository->firstMarriagePlace();
14609219296aSGreg Roach    }
14619219296aSGreg Roach
14629219296aSGreg Roach    /**
14630dcd9387SGreg Roach     * @return string
14649219296aSGreg Roach     */
14659219296aSGreg Roach    public function lastMarriage(): string
14669219296aSGreg Roach    {
14679219296aSGreg Roach        return $this->familyDatesRepository->lastMarriage();
14689219296aSGreg Roach    }
14699219296aSGreg Roach
14709219296aSGreg Roach    /**
14710dcd9387SGreg Roach     * @return string
14729219296aSGreg Roach     */
14739219296aSGreg Roach    public function lastMarriageYear(): string
14749219296aSGreg Roach    {
14759219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageYear();
14769219296aSGreg Roach    }
14779219296aSGreg Roach
14789219296aSGreg Roach    /**
14790dcd9387SGreg Roach     * @return string
14809219296aSGreg Roach     */
14819219296aSGreg Roach    public function lastMarriageName(): string
14829219296aSGreg Roach    {
14839219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageName();
14849219296aSGreg Roach    }
14859219296aSGreg Roach
14869219296aSGreg Roach    /**
14870dcd9387SGreg Roach     * @return string
14889219296aSGreg Roach     */
14899219296aSGreg Roach    public function lastMarriagePlace(): string
14909219296aSGreg Roach    {
14919219296aSGreg Roach        return $this->familyDatesRepository->lastMarriagePlace();
14929219296aSGreg Roach    }
14939219296aSGreg Roach
14949219296aSGreg Roach    /**
14950dcd9387SGreg Roach     * @param int $year1
14960dcd9387SGreg Roach     * @param int $year2
14970dcd9387SGreg Roach     *
14980dcd9387SGreg Roach     * @return Builder
14999219296aSGreg Roach     */
1500e6f3d5e2SGreg Roach    public function statsMarriageQuery(int $year1 = -1, int $year2 = -1): Builder
15019219296aSGreg Roach    {
1502e6f3d5e2SGreg Roach        return $this->familyRepository->statsMarriageQuery($year1, $year2);
1503e6f3d5e2SGreg Roach    }
1504e6f3d5e2SGreg Roach
1505e6f3d5e2SGreg Roach    /**
15060dcd9387SGreg Roach     * @param int $year1
15070dcd9387SGreg Roach     * @param int $year2
15080dcd9387SGreg Roach     *
15090dcd9387SGreg Roach     * @return Builder
1510e6f3d5e2SGreg Roach     */
1511e6f3d5e2SGreg Roach    public function statsFirstMarriageQuery(int $year1 = -1, int $year2 = -1): Builder
1512e6f3d5e2SGreg Roach    {
1513e6f3d5e2SGreg Roach        return $this->familyRepository->statsFirstMarriageQuery($year1, $year2);
15149219296aSGreg Roach    }
15159219296aSGreg Roach
15169219296aSGreg Roach    /**
15170dcd9387SGreg Roach     * @param string|null $color_from
15180dcd9387SGreg Roach     * @param string|null $color_to
15190dcd9387SGreg Roach     *
15200dcd9387SGreg Roach     * @return string
15219219296aSGreg Roach     */
152288de55fdSRico Sonntag    public function statsMarr(string $color_from = null, string $color_to = null): string
15239219296aSGreg Roach    {
152488de55fdSRico Sonntag        return $this->familyRepository->statsMarr($color_from, $color_to);
15259219296aSGreg Roach    }
15269219296aSGreg Roach
15279219296aSGreg Roach    /**
15280dcd9387SGreg Roach     * @return string
15299219296aSGreg Roach     */
15309219296aSGreg Roach    public function firstDivorce(): string
15319219296aSGreg Roach    {
15329219296aSGreg Roach        return $this->familyDatesRepository->firstDivorce();
15339219296aSGreg Roach    }
15349219296aSGreg Roach
15359219296aSGreg Roach    /**
15360dcd9387SGreg Roach     * @return string
15379219296aSGreg Roach     */
15389219296aSGreg Roach    public function firstDivorceYear(): string
15399219296aSGreg Roach    {
15409219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceYear();
15419219296aSGreg Roach    }
15429219296aSGreg Roach
15439219296aSGreg Roach    /**
15440dcd9387SGreg Roach     * @return string
15459219296aSGreg Roach     */
15469219296aSGreg Roach    public function firstDivorceName(): string
15479219296aSGreg Roach    {
15489219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceName();
15499219296aSGreg Roach    }
15509219296aSGreg Roach
15519219296aSGreg Roach    /**
15520dcd9387SGreg Roach     * @return string
15539219296aSGreg Roach     */
15549219296aSGreg Roach    public function firstDivorcePlace(): string
15559219296aSGreg Roach    {
15569219296aSGreg Roach        return $this->familyDatesRepository->firstDivorcePlace();
15579219296aSGreg Roach    }
15589219296aSGreg Roach
15599219296aSGreg Roach    /**
15600dcd9387SGreg Roach     * @return string
15619219296aSGreg Roach     */
15629219296aSGreg Roach    public function lastDivorce(): string
15639219296aSGreg Roach    {
15649219296aSGreg Roach        return $this->familyDatesRepository->lastDivorce();
15659219296aSGreg Roach    }
15669219296aSGreg Roach
15679219296aSGreg Roach    /**
15680dcd9387SGreg Roach     * @return string
15699219296aSGreg Roach     */
15709219296aSGreg Roach    public function lastDivorceYear(): string
15719219296aSGreg Roach    {
15729219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceYear();
15739219296aSGreg Roach    }
15749219296aSGreg Roach
15759219296aSGreg Roach    /**
15760dcd9387SGreg Roach     * @return string
15779219296aSGreg Roach     */
15789219296aSGreg Roach    public function lastDivorceName(): string
15799219296aSGreg Roach    {
15809219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceName();
15819219296aSGreg Roach    }
15829219296aSGreg Roach
15839219296aSGreg Roach    /**
15840dcd9387SGreg Roach     * @return string
15859219296aSGreg Roach     */
15869219296aSGreg Roach    public function lastDivorcePlace(): string
15879219296aSGreg Roach    {
15889219296aSGreg Roach        return $this->familyDatesRepository->lastDivorcePlace();
15899219296aSGreg Roach    }
15909219296aSGreg Roach
15919219296aSGreg Roach    /**
15920dcd9387SGreg Roach     * @param string|null $color_from
15930dcd9387SGreg Roach     * @param string|null $color_to
15940dcd9387SGreg Roach     *
15950dcd9387SGreg Roach     * @return string
15969219296aSGreg Roach     */
159788de55fdSRico Sonntag    public function statsDiv(string $color_from = null, string $color_to = null): string
15989219296aSGreg Roach    {
159988de55fdSRico Sonntag        return $this->familyRepository->statsDiv($color_from, $color_to);
16009219296aSGreg Roach    }
16019219296aSGreg Roach
16029219296aSGreg Roach    /**
16030dcd9387SGreg Roach     * @return string
16049219296aSGreg Roach     */
16059219296aSGreg Roach    public function youngestMarriageFemale(): string
16069219296aSGreg Roach    {
16079219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemale();
16089219296aSGreg Roach    }
16099219296aSGreg Roach
16109219296aSGreg Roach    /**
16110dcd9387SGreg Roach     * @return string
16129219296aSGreg Roach     */
16139219296aSGreg Roach    public function youngestMarriageFemaleName(): string
16149219296aSGreg Roach    {
16159219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleName();
16169219296aSGreg Roach    }
16179219296aSGreg Roach
16189219296aSGreg Roach    /**
16190dcd9387SGreg Roach     * @param string $show_years
16200dcd9387SGreg Roach     *
16210dcd9387SGreg Roach     * @return string
16229219296aSGreg Roach     */
16239219296aSGreg Roach    public function youngestMarriageFemaleAge(string $show_years = ''): string
16249219296aSGreg Roach    {
16259219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleAge($show_years);
16269219296aSGreg Roach    }
16279219296aSGreg Roach
16289219296aSGreg Roach    /**
16290dcd9387SGreg Roach     * @return string
16309219296aSGreg Roach     */
16319219296aSGreg Roach    public function oldestMarriageFemale(): string
16329219296aSGreg Roach    {
16339219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemale();
16349219296aSGreg Roach    }
16359219296aSGreg Roach
16369219296aSGreg Roach    /**
16370dcd9387SGreg Roach     * @return string
16389219296aSGreg Roach     */
16399219296aSGreg Roach    public function oldestMarriageFemaleName(): string
16409219296aSGreg Roach    {
16419219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleName();
16429219296aSGreg Roach    }
16439219296aSGreg Roach
16449219296aSGreg Roach    /**
16450dcd9387SGreg Roach     * @param string $show_years
16460dcd9387SGreg Roach     *
16470dcd9387SGreg Roach     * @return string
16489219296aSGreg Roach     */
16499219296aSGreg Roach    public function oldestMarriageFemaleAge(string $show_years = ''): string
16509219296aSGreg Roach    {
16519219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleAge($show_years);
16529219296aSGreg Roach    }
16539219296aSGreg Roach
16549219296aSGreg Roach    /**
16550dcd9387SGreg Roach     * @return string
16569219296aSGreg Roach     */
16579219296aSGreg Roach    public function youngestMarriageMale(): string
16589219296aSGreg Roach    {
16599219296aSGreg Roach        return $this->familyRepository->youngestMarriageMale();
16609219296aSGreg Roach    }
16619219296aSGreg Roach
16629219296aSGreg Roach    /**
16630dcd9387SGreg Roach     * @return string
16649219296aSGreg Roach     */
16659219296aSGreg Roach    public function youngestMarriageMaleName(): string
16669219296aSGreg Roach    {
16679219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleName();
16689219296aSGreg Roach    }
16699219296aSGreg Roach
16709219296aSGreg Roach    /**
16710dcd9387SGreg Roach     * @param string $show_years
16720dcd9387SGreg Roach     *
16730dcd9387SGreg Roach     * @return string
16749219296aSGreg Roach     */
16759219296aSGreg Roach    public function youngestMarriageMaleAge(string $show_years = ''): string
16769219296aSGreg Roach    {
16779219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleAge($show_years);
16789219296aSGreg Roach    }
16799219296aSGreg Roach
16809219296aSGreg Roach    /**
16810dcd9387SGreg Roach     * @return string
16829219296aSGreg Roach     */
16839219296aSGreg Roach    public function oldestMarriageMale(): string
16849219296aSGreg Roach    {
16859219296aSGreg Roach        return $this->familyRepository->oldestMarriageMale();
16869219296aSGreg Roach    }
16879219296aSGreg Roach
16889219296aSGreg Roach    /**
16890dcd9387SGreg Roach     * @return string
16909219296aSGreg Roach     */
16919219296aSGreg Roach    public function oldestMarriageMaleName(): string
16929219296aSGreg Roach    {
16939219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleName();
16949219296aSGreg Roach    }
16959219296aSGreg Roach
16969219296aSGreg Roach    /**
16970dcd9387SGreg Roach     * @param string $show_years
16980dcd9387SGreg Roach     *
16990dcd9387SGreg Roach     * @return string
17009219296aSGreg Roach     */
17019219296aSGreg Roach    public function oldestMarriageMaleAge(string $show_years = ''): string
17029219296aSGreg Roach    {
17039219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleAge($show_years);
17049219296aSGreg Roach    }
17059219296aSGreg Roach
17069219296aSGreg Roach    /**
17070dcd9387SGreg Roach     * @param string $sex
17080dcd9387SGreg Roach     * @param int    $year1
17090dcd9387SGreg Roach     * @param int    $year2
17100dcd9387SGreg Roach     *
17110dcd9387SGreg Roach     * @return array
17129219296aSGreg Roach     */
1713afa8d404SGreg Roach    public function statsMarrAgeQuery(string $sex, int $year1 = -1, int $year2 = -1): array
17149219296aSGreg Roach    {
17159219296aSGreg Roach        return $this->familyRepository->statsMarrAgeQuery($sex, $year1, $year2);
17169219296aSGreg Roach    }
17179219296aSGreg Roach
17189219296aSGreg Roach    /**
17190dcd9387SGreg Roach     * @return string
17209219296aSGreg Roach     */
172188de55fdSRico Sonntag    public function statsMarrAge(): string
17229219296aSGreg Roach    {
172388de55fdSRico Sonntag        return $this->familyRepository->statsMarrAge();
17249219296aSGreg Roach    }
17259219296aSGreg Roach
17269219296aSGreg Roach    /**
17270dcd9387SGreg Roach     * @param string $total
17280dcd9387SGreg Roach     *
17290dcd9387SGreg Roach     * @return string
17309219296aSGreg Roach     */
17319219296aSGreg Roach    public function ageBetweenSpousesMF(string $total = '10'): string
17329219296aSGreg Roach    {
17339219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMF((int) $total);
17349219296aSGreg Roach    }
17359219296aSGreg Roach
17369219296aSGreg Roach    /**
17370dcd9387SGreg Roach     * @param string $total
17380dcd9387SGreg Roach     *
17390dcd9387SGreg Roach     * @return string
17409219296aSGreg Roach     */
17419219296aSGreg Roach    public function ageBetweenSpousesMFList(string $total = '10'): string
17429219296aSGreg Roach    {
17439219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMFList((int) $total);
17449219296aSGreg Roach    }
17459219296aSGreg Roach
17469219296aSGreg Roach    /**
17470dcd9387SGreg Roach     * @param string $total
17480dcd9387SGreg Roach     *
17490dcd9387SGreg Roach     * @return string
17509219296aSGreg Roach     */
17519219296aSGreg Roach    public function ageBetweenSpousesFM(string $total = '10'): string
17529219296aSGreg Roach    {
17539219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFM((int) $total);
17549219296aSGreg Roach    }
17559219296aSGreg Roach
17569219296aSGreg Roach    /**
17570dcd9387SGreg Roach     * @param string $total
17580dcd9387SGreg Roach     *
17590dcd9387SGreg Roach     * @return string
17609219296aSGreg Roach     */
17619219296aSGreg Roach    public function ageBetweenSpousesFMList(string $total = '10'): string
17629219296aSGreg Roach    {
17639219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFMList((int) $total);
17649219296aSGreg Roach    }
17659219296aSGreg Roach
17669219296aSGreg Roach    /**
17670dcd9387SGreg Roach     * @return string
17689219296aSGreg Roach     */
17699219296aSGreg Roach    public function topAgeOfMarriageFamily(): string
17709219296aSGreg Roach    {
17719219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamily();
17729219296aSGreg Roach    }
17739219296aSGreg Roach
17749219296aSGreg Roach    /**
17750dcd9387SGreg Roach     * @return string
17769219296aSGreg Roach     */
17779219296aSGreg Roach    public function topAgeOfMarriage(): string
17789219296aSGreg Roach    {
17799219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriage();
17809219296aSGreg Roach    }
17819219296aSGreg Roach
17829219296aSGreg Roach    /**
17830dcd9387SGreg Roach     * @param string $total
17840dcd9387SGreg Roach     *
17850dcd9387SGreg Roach     * @return string
17869219296aSGreg Roach     */
17879219296aSGreg Roach    public function topAgeOfMarriageFamilies(string $total = '10'): string
17889219296aSGreg Roach    {
17899219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamilies((int) $total);
17909219296aSGreg Roach    }
17919219296aSGreg Roach
17929219296aSGreg Roach    /**
17930dcd9387SGreg Roach     * @param string $total
17940dcd9387SGreg Roach     *
17950dcd9387SGreg Roach     * @return string
17969219296aSGreg Roach     */
17979219296aSGreg Roach    public function topAgeOfMarriageFamiliesList(string $total = '10'): string
17989219296aSGreg Roach    {
17999219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamiliesList((int) $total);
18009219296aSGreg Roach    }
18019219296aSGreg Roach
18029219296aSGreg Roach    /**
18030dcd9387SGreg Roach     * @return string
18049219296aSGreg Roach     */
18059219296aSGreg Roach    public function minAgeOfMarriageFamily(): string
18069219296aSGreg Roach    {
18079219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamily();
18089219296aSGreg Roach    }
18099219296aSGreg Roach
18109219296aSGreg Roach    /**
18110dcd9387SGreg Roach     * @return string
18129219296aSGreg Roach     */
18139219296aSGreg Roach    public function minAgeOfMarriage(): string
18149219296aSGreg Roach    {
18159219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriage();
18169219296aSGreg Roach    }
18179219296aSGreg Roach
18189219296aSGreg Roach    /**
18190dcd9387SGreg Roach     * @param string $total
18200dcd9387SGreg Roach     *
18210dcd9387SGreg Roach     * @return string
18229219296aSGreg Roach     */
18239219296aSGreg Roach    public function minAgeOfMarriageFamilies(string $total = '10'): string
18249219296aSGreg Roach    {
18259219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamilies((int) $total);
18269219296aSGreg Roach    }
18279219296aSGreg Roach
18289219296aSGreg Roach    /**
18290dcd9387SGreg Roach     * @param string $total
18300dcd9387SGreg Roach     *
18310dcd9387SGreg Roach     * @return string
18329219296aSGreg Roach     */
18339219296aSGreg Roach    public function minAgeOfMarriageFamiliesList(string $total = '10'): string
18349219296aSGreg Roach    {
18359219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamiliesList((int) $total);
18369219296aSGreg Roach    }
18379219296aSGreg Roach
18389219296aSGreg Roach    /**
18390dcd9387SGreg Roach     * @return string
18409219296aSGreg Roach     */
18419219296aSGreg Roach    public function youngestMother(): string
18429219296aSGreg Roach    {
18439219296aSGreg Roach        return $this->familyRepository->youngestMother();
18449219296aSGreg Roach    }
18459219296aSGreg Roach
18469219296aSGreg Roach    /**
18470dcd9387SGreg Roach     * @return string
18489219296aSGreg Roach     */
18499219296aSGreg Roach    public function youngestMotherName(): string
18509219296aSGreg Roach    {
18519219296aSGreg Roach        return $this->familyRepository->youngestMotherName();
18529219296aSGreg Roach    }
18539219296aSGreg Roach
18549219296aSGreg Roach    /**
18550dcd9387SGreg Roach     * @param string $show_years
18560dcd9387SGreg Roach     *
18570dcd9387SGreg Roach     * @return string
18589219296aSGreg Roach     */
18599219296aSGreg Roach    public function youngestMotherAge(string $show_years = ''): string
18609219296aSGreg Roach    {
18619219296aSGreg Roach        return $this->familyRepository->youngestMotherAge($show_years);
18629219296aSGreg Roach    }
18639219296aSGreg Roach
18649219296aSGreg Roach    /**
18650dcd9387SGreg Roach     * @return string
18669219296aSGreg Roach     */
18679219296aSGreg Roach    public function oldestMother(): string
18689219296aSGreg Roach    {
18699219296aSGreg Roach        return $this->familyRepository->oldestMother();
18709219296aSGreg Roach    }
18719219296aSGreg Roach
18729219296aSGreg Roach    /**
18730dcd9387SGreg Roach     * @return string
18749219296aSGreg Roach     */
18759219296aSGreg Roach    public function oldestMotherName(): string
18769219296aSGreg Roach    {
18779219296aSGreg Roach        return $this->familyRepository->oldestMotherName();
18789219296aSGreg Roach    }
18799219296aSGreg Roach
18809219296aSGreg Roach    /**
18810dcd9387SGreg Roach     * @param string $show_years
18820dcd9387SGreg Roach     *
18830dcd9387SGreg Roach     * @return string
18849219296aSGreg Roach     */
18859219296aSGreg Roach    public function oldestMotherAge(string $show_years = ''): string
18869219296aSGreg Roach    {
18879219296aSGreg Roach        return $this->familyRepository->oldestMotherAge($show_years);
18889219296aSGreg Roach    }
18899219296aSGreg Roach
18909219296aSGreg Roach    /**
18910dcd9387SGreg Roach     * @return string
18929219296aSGreg Roach     */
18939219296aSGreg Roach    public function youngestFather(): string
18949219296aSGreg Roach    {
18959219296aSGreg Roach        return $this->familyRepository->youngestFather();
18969219296aSGreg Roach    }
18979219296aSGreg Roach
18989219296aSGreg Roach    /**
18990dcd9387SGreg Roach     * @return string
19009219296aSGreg Roach     */
19019219296aSGreg Roach    public function youngestFatherName(): string
19029219296aSGreg Roach    {
19039219296aSGreg Roach        return $this->familyRepository->youngestFatherName();
19049219296aSGreg Roach    }
19059219296aSGreg Roach
19069219296aSGreg Roach    /**
19070dcd9387SGreg Roach     * @param string $show_years
19080dcd9387SGreg Roach     *
19090dcd9387SGreg Roach     * @return string
19109219296aSGreg Roach     */
19119219296aSGreg Roach    public function youngestFatherAge(string $show_years = ''): string
19129219296aSGreg Roach    {
19139219296aSGreg Roach        return $this->familyRepository->youngestFatherAge($show_years);
19149219296aSGreg Roach    }
19159219296aSGreg Roach
19169219296aSGreg Roach    /**
19170dcd9387SGreg Roach     * @return string
19189219296aSGreg Roach     */
19199219296aSGreg Roach    public function oldestFather(): string
19209219296aSGreg Roach    {
19219219296aSGreg Roach        return $this->familyRepository->oldestFather();
19229219296aSGreg Roach    }
19239219296aSGreg Roach
19249219296aSGreg Roach    /**
19250dcd9387SGreg Roach     * @return string
19269219296aSGreg Roach     */
19279219296aSGreg Roach    public function oldestFatherName(): string
19289219296aSGreg Roach    {
19299219296aSGreg Roach        return $this->familyRepository->oldestFatherName();
19309219296aSGreg Roach    }
19319219296aSGreg Roach
19329219296aSGreg Roach    /**
19330dcd9387SGreg Roach     * @param string $show_years
19340dcd9387SGreg Roach     *
19350dcd9387SGreg Roach     * @return string
19369219296aSGreg Roach     */
19379219296aSGreg Roach    public function oldestFatherAge(string $show_years = ''): string
19389219296aSGreg Roach    {
19399219296aSGreg Roach        return $this->familyRepository->oldestFatherAge($show_years);
19409219296aSGreg Roach    }
19419219296aSGreg Roach
19429219296aSGreg Roach    /**
19430dcd9387SGreg Roach     * @return string
19449219296aSGreg Roach     */
19459219296aSGreg Roach    public function totalMarriedMales(): string
19469219296aSGreg Roach    {
19479219296aSGreg Roach        return $this->familyRepository->totalMarriedMales();
19489219296aSGreg Roach    }
19499219296aSGreg Roach
19509219296aSGreg Roach    /**
19510dcd9387SGreg Roach     * @return string
19529219296aSGreg Roach     */
19539219296aSGreg Roach    public function totalMarriedFemales(): string
19549219296aSGreg Roach    {
19559219296aSGreg Roach        return $this->familyRepository->totalMarriedFemales();
19569219296aSGreg Roach    }
19579219296aSGreg Roach
19589219296aSGreg Roach    /**
19590dcd9387SGreg Roach     * @param int $year1
19600dcd9387SGreg Roach     * @param int $year2
19610dcd9387SGreg Roach     *
19620dcd9387SGreg Roach     * @return Builder
19639219296aSGreg Roach     */
1964999da590SGreg Roach    public function monthFirstChildQuery(int $year1 = -1, int $year2 = -1): Builder
19659219296aSGreg Roach    {
1966999da590SGreg Roach        return $this->familyRepository->monthFirstChildQuery($year1, $year2);
1967999da590SGreg Roach    }
1968999da590SGreg Roach
1969999da590SGreg Roach    /**
19700dcd9387SGreg Roach     * @param int $year1
19710dcd9387SGreg Roach     * @param int $year2
19720dcd9387SGreg Roach     *
19730dcd9387SGreg Roach     * @return Builder
1974999da590SGreg Roach     */
1975999da590SGreg Roach    public function monthFirstChildBySexQuery(int $year1 = -1, int $year2 = -1): Builder
1976999da590SGreg Roach    {
1977999da590SGreg Roach        return $this->familyRepository->monthFirstChildBySexQuery($year1, $year2);
19789219296aSGreg Roach    }
19799219296aSGreg Roach
19809219296aSGreg Roach    /**
19810dcd9387SGreg Roach     * @return string
19829219296aSGreg Roach     */
19839219296aSGreg Roach    public function largestFamily(): string
19849219296aSGreg Roach    {
19859219296aSGreg Roach        return $this->familyRepository->largestFamily();
19869219296aSGreg Roach    }
19879219296aSGreg Roach
19889219296aSGreg Roach    /**
19890dcd9387SGreg Roach     * @return string
19909219296aSGreg Roach     */
19919219296aSGreg Roach    public function largestFamilySize(): string
19929219296aSGreg Roach    {
19939219296aSGreg Roach        return $this->familyRepository->largestFamilySize();
19949219296aSGreg Roach    }
19959219296aSGreg Roach
19969219296aSGreg Roach    /**
19970dcd9387SGreg Roach     * @return string
19989219296aSGreg Roach     */
19999219296aSGreg Roach    public function largestFamilyName(): string
20009219296aSGreg Roach    {
20019219296aSGreg Roach        return $this->familyRepository->largestFamilyName();
20029219296aSGreg Roach    }
20039219296aSGreg Roach
20049219296aSGreg Roach    /**
20050dcd9387SGreg Roach     * @param string $total
20060dcd9387SGreg Roach     *
20070dcd9387SGreg Roach     * @return string
20089219296aSGreg Roach     */
20099219296aSGreg Roach    public function topTenLargestFamily(string $total = '10'): string
20109219296aSGreg Roach    {
20119219296aSGreg Roach        return $this->familyRepository->topTenLargestFamily((int) $total);
20129219296aSGreg Roach    }
20139219296aSGreg Roach
20149219296aSGreg Roach    /**
20150dcd9387SGreg Roach     * @param string $total
20160dcd9387SGreg Roach     *
20170dcd9387SGreg Roach     * @return string
20189219296aSGreg Roach     */
20199219296aSGreg Roach    public function topTenLargestFamilyList(string $total = '10'): string
20209219296aSGreg Roach    {
20219219296aSGreg Roach        return $this->familyRepository->topTenLargestFamilyList((int) $total);
20229219296aSGreg Roach    }
20239219296aSGreg Roach
20249219296aSGreg Roach    /**
20250dcd9387SGreg Roach     * @param string|null $color_from
20260dcd9387SGreg Roach     * @param string|null $color_to
20270dcd9387SGreg Roach     * @param string      $total
20280dcd9387SGreg Roach     *
20290dcd9387SGreg Roach     * @return string
20309219296aSGreg Roach     */
20319219296aSGreg Roach    public function chartLargestFamilies(
20329219296aSGreg Roach        string $color_from = null,
20339219296aSGreg Roach        string $color_to = null,
20349219296aSGreg Roach        string $total = '10'
2035c81b7bf1SGreg Roach    ): string {
203688de55fdSRico Sonntag        return $this->familyRepository->chartLargestFamilies($color_from, $color_to, (int) $total);
20379219296aSGreg Roach    }
20389219296aSGreg Roach
20399219296aSGreg Roach    /**
20400dcd9387SGreg Roach     * @return string
20419219296aSGreg Roach     */
20429219296aSGreg Roach    public function totalChildren(): string
20439219296aSGreg Roach    {
20449219296aSGreg Roach        return $this->familyRepository->totalChildren();
20459219296aSGreg Roach    }
20469219296aSGreg Roach
20479219296aSGreg Roach    /**
20480dcd9387SGreg Roach     * @return string
20499219296aSGreg Roach     */
20509219296aSGreg Roach    public function averageChildren(): string
20519219296aSGreg Roach    {
20529219296aSGreg Roach        return $this->familyRepository->averageChildren();
20539219296aSGreg Roach    }
20549219296aSGreg Roach
20559219296aSGreg Roach    /**
20560dcd9387SGreg Roach     * @param int $year1
20570dcd9387SGreg Roach     * @param int $year2
20580dcd9387SGreg Roach     *
20590dcd9387SGreg Roach     * @return array
20609219296aSGreg Roach     */
2061b1126ab4SGreg Roach    public function statsChildrenQuery(int $year1 = -1, int $year2 = -1): array
20629219296aSGreg Roach    {
2063b1126ab4SGreg Roach        return $this->familyRepository->statsChildrenQuery($year1, $year2);
20649219296aSGreg Roach    }
20659219296aSGreg Roach
20669219296aSGreg Roach    /**
20670dcd9387SGreg Roach     * @return string
20689219296aSGreg Roach     */
2069cde1d378SGreg Roach    public function statsChildren(): string
20709219296aSGreg Roach    {
2071cde1d378SGreg Roach        return $this->familyRepository->statsChildren();
20729219296aSGreg Roach    }
20739219296aSGreg Roach
20749219296aSGreg Roach    /**
20750dcd9387SGreg Roach     * @param string $total
20760dcd9387SGreg Roach     *
20770dcd9387SGreg Roach     * @return string
20789219296aSGreg Roach     */
20799219296aSGreg Roach    public function topAgeBetweenSiblingsName(string $total = '10'): string
20809219296aSGreg Roach    {
20819219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsName((int) $total);
20829219296aSGreg Roach    }
20839219296aSGreg Roach
20849219296aSGreg Roach    /**
20850dcd9387SGreg Roach     * @param string $total
20860dcd9387SGreg Roach     *
20870dcd9387SGreg Roach     * @return string
20889219296aSGreg Roach     */
20899219296aSGreg Roach    public function topAgeBetweenSiblings(string $total = '10'): string
20909219296aSGreg Roach    {
20919219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblings((int) $total);
20929219296aSGreg Roach    }
20939219296aSGreg Roach
20949219296aSGreg Roach    /**
20950dcd9387SGreg Roach     * @param string $total
20960dcd9387SGreg Roach     *
20970dcd9387SGreg Roach     * @return string
20989219296aSGreg Roach     */
20999219296aSGreg Roach    public function topAgeBetweenSiblingsFullName(string $total = '10'): string
21009219296aSGreg Roach    {
21019219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsFullName((int) $total);
21029219296aSGreg Roach    }
21039219296aSGreg Roach
21049219296aSGreg Roach    /**
21050dcd9387SGreg Roach     * @param string $total
21060dcd9387SGreg Roach     * @param string $one
21070dcd9387SGreg Roach     *
21080dcd9387SGreg Roach     * @return string
21099219296aSGreg Roach     */
21109219296aSGreg Roach    public function topAgeBetweenSiblingsList(string $total = '10', string $one = ''): string
21119219296aSGreg Roach    {
21129219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsList((int) $total, $one);
21139219296aSGreg Roach    }
21149219296aSGreg Roach
21159219296aSGreg Roach    /**
21160dcd9387SGreg Roach     * @return string
21179219296aSGreg Roach     */
21189219296aSGreg Roach    public function noChildrenFamilies(): string
21199219296aSGreg Roach    {
21209219296aSGreg Roach        return $this->familyRepository->noChildrenFamilies();
21219219296aSGreg Roach    }
21229219296aSGreg Roach
21239219296aSGreg Roach    /**
21240dcd9387SGreg Roach     * @param string $type
21250dcd9387SGreg Roach     *
21260dcd9387SGreg Roach     * @return string
21279219296aSGreg Roach     */
21289219296aSGreg Roach    public function noChildrenFamiliesList(string $type = 'list'): string
21299219296aSGreg Roach    {
21309219296aSGreg Roach        return $this->familyRepository->noChildrenFamiliesList($type);
21319219296aSGreg Roach    }
21329219296aSGreg Roach
21339219296aSGreg Roach    /**
21340dcd9387SGreg Roach     * @param string $year1
21350dcd9387SGreg Roach     * @param string $year2
21360dcd9387SGreg Roach     *
21370dcd9387SGreg Roach     * @return string
21389219296aSGreg Roach     */
21399219296aSGreg Roach    public function chartNoChildrenFamilies(
21409219296aSGreg Roach        string $year1 = '-1',
21419219296aSGreg Roach        string $year2 = '-1'
2142c81b7bf1SGreg Roach    ): string {
214388de55fdSRico Sonntag        return $this->familyRepository->chartNoChildrenFamilies((int) $year1, (int) $year2);
21449219296aSGreg Roach    }
21459219296aSGreg Roach
21469219296aSGreg Roach    /**
21470dcd9387SGreg Roach     * @param string $total
21480dcd9387SGreg Roach     *
21490dcd9387SGreg Roach     * @return string
21509219296aSGreg Roach     */
21519219296aSGreg Roach    public function topTenLargestGrandFamily(string $total = '10'): string
21529219296aSGreg Roach    {
21539219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamily((int) $total);
21549219296aSGreg Roach    }
21559219296aSGreg Roach
21569219296aSGreg Roach    /**
21570dcd9387SGreg Roach     * @param string $total
21580dcd9387SGreg Roach     *
21590dcd9387SGreg Roach     * @return string
21609219296aSGreg Roach     */
21619219296aSGreg Roach    public function topTenLargestGrandFamilyList(string $total = '10'): string
21629219296aSGreg Roach    {
21639219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamilyList((int) $total);
21649219296aSGreg Roach    }
21659219296aSGreg Roach
21669219296aSGreg Roach    /**
21670dcd9387SGreg Roach     * @return string
21689219296aSGreg Roach     */
21699219296aSGreg Roach    public function getCommonSurname(): string
21709219296aSGreg Roach    {
21719219296aSGreg Roach        return $this->individualRepository->getCommonSurname();
21729219296aSGreg Roach    }
21739219296aSGreg Roach
21749219296aSGreg Roach    /**
21750dcd9387SGreg Roach     * @param string $threshold
21760dcd9387SGreg Roach     * @param string $number_of_surnames
21770dcd9387SGreg Roach     * @param string $sorting
21780dcd9387SGreg Roach     *
21790dcd9387SGreg Roach     * @return string
21809219296aSGreg Roach     */
21819219296aSGreg Roach    public function commonSurnames(
21829219296aSGreg Roach        string $threshold = '1',
21839219296aSGreg Roach        string $number_of_surnames = '10',
21849219296aSGreg Roach        string $sorting = 'alpha'
2185c81b7bf1SGreg Roach    ): string {
21869219296aSGreg Roach        return $this->individualRepository->commonSurnames((int) $threshold, (int) $number_of_surnames, $sorting);
21879219296aSGreg Roach    }
21889219296aSGreg Roach
21899219296aSGreg Roach    /**
21900dcd9387SGreg Roach     * @param string $threshold
21910dcd9387SGreg Roach     * @param string $number_of_surnames
21920dcd9387SGreg Roach     * @param string $sorting
21930dcd9387SGreg Roach     *
21940dcd9387SGreg Roach     * @return string
21959219296aSGreg Roach     */
21969219296aSGreg Roach    public function commonSurnamesTotals(
21979219296aSGreg Roach        string $threshold = '1',
21989219296aSGreg Roach        string $number_of_surnames = '10',
21992da2e0a6SGreg Roach        string $sorting = 'count'
2200c81b7bf1SGreg Roach    ): string {
22019219296aSGreg Roach        return $this->individualRepository->commonSurnamesTotals((int) $threshold, (int) $number_of_surnames, $sorting);
22029219296aSGreg Roach    }
22039219296aSGreg Roach
22049219296aSGreg Roach    /**
22050dcd9387SGreg Roach     * @param string $threshold
22060dcd9387SGreg Roach     * @param string $number_of_surnames
22070dcd9387SGreg Roach     * @param string $sorting
22080dcd9387SGreg Roach     *
22090dcd9387SGreg Roach     * @return string
22109219296aSGreg Roach     */
22119219296aSGreg Roach    public function commonSurnamesList(
22129219296aSGreg Roach        string $threshold = '1',
22139219296aSGreg Roach        string $number_of_surnames = '10',
22149219296aSGreg Roach        string $sorting = 'alpha'
2215c81b7bf1SGreg Roach    ): string {
22169219296aSGreg Roach        return $this->individualRepository->commonSurnamesList((int) $threshold, (int) $number_of_surnames, $sorting);
22179219296aSGreg Roach    }
22189219296aSGreg Roach
22199219296aSGreg Roach    /**
22200dcd9387SGreg Roach     * @param string $threshold
22210dcd9387SGreg Roach     * @param string $number_of_surnames
22220dcd9387SGreg Roach     * @param string $sorting
22230dcd9387SGreg Roach     *
22240dcd9387SGreg Roach     * @return string
22259219296aSGreg Roach     */
22269219296aSGreg Roach    public function commonSurnamesListTotals(
22279219296aSGreg Roach        string $threshold = '1',
22289219296aSGreg Roach        string $number_of_surnames = '10',
22292da2e0a6SGreg Roach        string $sorting = 'count'
2230c81b7bf1SGreg Roach    ): string {
22319219296aSGreg Roach        return $this->individualRepository
22329219296aSGreg Roach            ->commonSurnamesListTotals((int) $threshold, (int) $number_of_surnames, $sorting);
22339219296aSGreg Roach    }
22349219296aSGreg Roach
22359219296aSGreg Roach    /**
22360dcd9387SGreg Roach     * @param string|null $color_from
22370dcd9387SGreg Roach     * @param string|null $color_to
22380dcd9387SGreg Roach     * @param string      $number_of_surnames
22390dcd9387SGreg Roach     *
22400dcd9387SGreg Roach     * @return string
22419219296aSGreg Roach     */
22429219296aSGreg Roach    public function chartCommonSurnames(
22439219296aSGreg Roach        string $color_from = null,
22449219296aSGreg Roach        string $color_to = null,
22459219296aSGreg Roach        string $number_of_surnames = '10'
2246c81b7bf1SGreg Roach    ): string {
22479219296aSGreg Roach        return $this->individualRepository
224888de55fdSRico Sonntag            ->chartCommonSurnames($color_from, $color_to, (int) $number_of_surnames);
22499219296aSGreg Roach    }
22509219296aSGreg Roach
22519219296aSGreg Roach    /**
22520dcd9387SGreg Roach     * @param string $threshold
22530dcd9387SGreg Roach     * @param string $maxtoshow
22540dcd9387SGreg Roach     *
22550dcd9387SGreg Roach     * @return string
22569219296aSGreg Roach     */
22579219296aSGreg Roach    public function commonGiven(string $threshold = '1', string $maxtoshow = '10'): string
22589219296aSGreg Roach    {
22599219296aSGreg Roach        return $this->individualRepository->commonGiven((int) $threshold, (int) $maxtoshow);
22609219296aSGreg Roach    }
22619219296aSGreg Roach
22629219296aSGreg Roach    /**
22630dcd9387SGreg Roach     * @param string $threshold
22640dcd9387SGreg Roach     * @param string $maxtoshow
22650dcd9387SGreg Roach     *
22660dcd9387SGreg Roach     * @return string
22679219296aSGreg Roach     */
22689219296aSGreg Roach    public function commonGivenTotals(string $threshold = '1', string $maxtoshow = '10'): string
22699219296aSGreg Roach    {
22709219296aSGreg Roach        return $this->individualRepository->commonGivenTotals((int) $threshold, (int) $maxtoshow);
22719219296aSGreg Roach    }
22729219296aSGreg Roach
22739219296aSGreg Roach    /**
22740dcd9387SGreg Roach     * @param string $threshold
22750dcd9387SGreg Roach     * @param string $maxtoshow
22760dcd9387SGreg Roach     *
22770dcd9387SGreg Roach     * @return string
22789219296aSGreg Roach     */
22799219296aSGreg Roach    public function commonGivenList(string $threshold = '1', string $maxtoshow = '10'): string
22809219296aSGreg Roach    {
22819219296aSGreg Roach        return $this->individualRepository->commonGivenList((int) $threshold, (int) $maxtoshow);
22829219296aSGreg Roach    }
22839219296aSGreg Roach
22849219296aSGreg Roach    /**
22850dcd9387SGreg Roach     * @param string $threshold
22860dcd9387SGreg Roach     * @param string $maxtoshow
22870dcd9387SGreg Roach     *
22880dcd9387SGreg Roach     * @return string
22899219296aSGreg Roach     */
22909219296aSGreg Roach    public function commonGivenListTotals(string $threshold = '1', string $maxtoshow = '10'): string
22919219296aSGreg Roach    {
22929219296aSGreg Roach        return $this->individualRepository->commonGivenListTotals((int) $threshold, (int) $maxtoshow);
22939219296aSGreg Roach    }
22949219296aSGreg Roach
22959219296aSGreg Roach    /**
22960dcd9387SGreg Roach     * @param string $threshold
22970dcd9387SGreg Roach     * @param string $maxtoshow
22980dcd9387SGreg Roach     *
22990dcd9387SGreg Roach     * @return string
23009219296aSGreg Roach     */
23019219296aSGreg Roach    public function commonGivenTable(string $threshold = '1', string $maxtoshow = '10'): string
23029219296aSGreg Roach    {
23039219296aSGreg Roach        return $this->individualRepository->commonGivenTable((int) $threshold, (int) $maxtoshow);
23049219296aSGreg Roach    }
23059219296aSGreg Roach
23069219296aSGreg Roach    /**
23070dcd9387SGreg Roach     * @param string $threshold
23080dcd9387SGreg Roach     * @param string $maxtoshow
23090dcd9387SGreg Roach     *
23100dcd9387SGreg Roach     * @return string
23119219296aSGreg Roach     */
23129219296aSGreg Roach    public function commonGivenFemale(string $threshold = '1', string $maxtoshow = '10'): string
23139219296aSGreg Roach    {
23149219296aSGreg Roach        return $this->individualRepository->commonGivenFemale((int) $threshold, (int) $maxtoshow);
23159219296aSGreg Roach    }
23169219296aSGreg Roach
23179219296aSGreg Roach    /**
23180dcd9387SGreg Roach     * @param string $threshold
23190dcd9387SGreg Roach     * @param string $maxtoshow
23200dcd9387SGreg Roach     *
23210dcd9387SGreg Roach     * @return string
23229219296aSGreg Roach     */
23239219296aSGreg Roach    public function commonGivenFemaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
23249219296aSGreg Roach    {
23259219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTotals((int) $threshold, (int) $maxtoshow);
23269219296aSGreg Roach    }
23279219296aSGreg Roach
23289219296aSGreg Roach    /**
23290dcd9387SGreg Roach     * @param string $threshold
23300dcd9387SGreg Roach     * @param string $maxtoshow
23310dcd9387SGreg Roach     *
23320dcd9387SGreg Roach     * @return string
23339219296aSGreg Roach     */
23349219296aSGreg Roach    public function commonGivenFemaleList(string $threshold = '1', string $maxtoshow = '10'): string
23359219296aSGreg Roach    {
23369219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleList((int) $threshold, (int) $maxtoshow);
23379219296aSGreg Roach    }
23389219296aSGreg Roach
23399219296aSGreg Roach    /**
23400dcd9387SGreg Roach     * @param string $threshold
23410dcd9387SGreg Roach     * @param string $maxtoshow
23420dcd9387SGreg Roach     *
23430dcd9387SGreg Roach     * @return string
23449219296aSGreg Roach     */
23459219296aSGreg Roach    public function commonGivenFemaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
23469219296aSGreg Roach    {
23479219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleListTotals((int) $threshold, (int) $maxtoshow);
23489219296aSGreg Roach    }
23499219296aSGreg Roach
23509219296aSGreg Roach    /**
23510dcd9387SGreg Roach     * @param string $threshold
23520dcd9387SGreg Roach     * @param string $maxtoshow
23530dcd9387SGreg Roach     *
23540dcd9387SGreg Roach     * @return string
23559219296aSGreg Roach     */
23569219296aSGreg Roach    public function commonGivenFemaleTable(string $threshold = '1', string $maxtoshow = '10'): string
23579219296aSGreg Roach    {
23589219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTable((int) $threshold, (int) $maxtoshow);
23599219296aSGreg Roach    }
23609219296aSGreg Roach
23619219296aSGreg Roach    /**
23620dcd9387SGreg Roach     * @param string $threshold
23630dcd9387SGreg Roach     * @param string $maxtoshow
23640dcd9387SGreg Roach     *
23650dcd9387SGreg Roach     * @return string
23669219296aSGreg Roach     */
23679219296aSGreg Roach    public function commonGivenMale(string $threshold = '1', string $maxtoshow = '10'): string
23689219296aSGreg Roach    {
23699219296aSGreg Roach        return $this->individualRepository->commonGivenMale((int) $threshold, (int) $maxtoshow);
23709219296aSGreg Roach    }
23719219296aSGreg Roach
23729219296aSGreg Roach    /**
23730dcd9387SGreg Roach     * @param string $threshold
23740dcd9387SGreg Roach     * @param string $maxtoshow
23750dcd9387SGreg Roach     *
23760dcd9387SGreg Roach     * @return string
23779219296aSGreg Roach     */
23789219296aSGreg Roach    public function commonGivenMaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
23799219296aSGreg Roach    {
23809219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTotals((int) $threshold, (int) $maxtoshow);
23819219296aSGreg Roach    }
23829219296aSGreg Roach
23839219296aSGreg Roach    /**
23840dcd9387SGreg Roach     * @param string $threshold
23850dcd9387SGreg Roach     * @param string $maxtoshow
23860dcd9387SGreg Roach     *
23870dcd9387SGreg Roach     * @return string
23889219296aSGreg Roach     */
23899219296aSGreg Roach    public function commonGivenMaleList(string $threshold = '1', string $maxtoshow = '10'): string
23909219296aSGreg Roach    {
23919219296aSGreg Roach        return $this->individualRepository->commonGivenMaleList((int) $threshold, (int) $maxtoshow);
23929219296aSGreg Roach    }
23939219296aSGreg Roach
23949219296aSGreg Roach    /**
23950dcd9387SGreg Roach     * @param string $threshold
23960dcd9387SGreg Roach     * @param string $maxtoshow
23970dcd9387SGreg Roach     *
23980dcd9387SGreg Roach     * @return string
23999219296aSGreg Roach     */
24009219296aSGreg Roach    public function commonGivenMaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
24019219296aSGreg Roach    {
24029219296aSGreg Roach        return $this->individualRepository->commonGivenMaleListTotals((int) $threshold, (int) $maxtoshow);
24039219296aSGreg Roach    }
24049219296aSGreg Roach
24059219296aSGreg Roach    /**
24060dcd9387SGreg Roach     * @param string $threshold
24070dcd9387SGreg Roach     * @param string $maxtoshow
24080dcd9387SGreg Roach     *
24090dcd9387SGreg Roach     * @return string
24109219296aSGreg Roach     */
24119219296aSGreg Roach    public function commonGivenMaleTable(string $threshold = '1', string $maxtoshow = '10'): string
24129219296aSGreg Roach    {
24139219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTable((int) $threshold, (int) $maxtoshow);
24149219296aSGreg Roach    }
24159219296aSGreg Roach
24169219296aSGreg Roach    /**
24170dcd9387SGreg Roach     * @param string $threshold
24180dcd9387SGreg Roach     * @param string $maxtoshow
24190dcd9387SGreg Roach     *
24200dcd9387SGreg Roach     * @return string
24219219296aSGreg Roach     */
24229219296aSGreg Roach    public function commonGivenUnknown(string $threshold = '1', string $maxtoshow = '10'): string
24239219296aSGreg Roach    {
24249219296aSGreg Roach        return $this->individualRepository->commonGivenUnknown((int) $threshold, (int) $maxtoshow);
24259219296aSGreg Roach    }
24269219296aSGreg Roach
24279219296aSGreg Roach    /**
24280dcd9387SGreg Roach     * @param string $threshold
24290dcd9387SGreg Roach     * @param string $maxtoshow
24300dcd9387SGreg Roach     *
24310dcd9387SGreg Roach     * @return string
24329219296aSGreg Roach     */
24339219296aSGreg Roach    public function commonGivenUnknownTotals(string $threshold = '1', string $maxtoshow = '10'): string
24349219296aSGreg Roach    {
24359219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTotals((int) $threshold, (int) $maxtoshow);
24369219296aSGreg Roach    }
24379219296aSGreg Roach
24389219296aSGreg Roach    /**
24390dcd9387SGreg Roach     * @param string $threshold
24400dcd9387SGreg Roach     * @param string $maxtoshow
24410dcd9387SGreg Roach     *
24420dcd9387SGreg Roach     * @return string
24439219296aSGreg Roach     */
24449219296aSGreg Roach    public function commonGivenUnknownList(string $threshold = '1', string $maxtoshow = '10'): string
24459219296aSGreg Roach    {
24469219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownList((int) $threshold, (int) $maxtoshow);
24479219296aSGreg Roach    }
24489219296aSGreg Roach
24499219296aSGreg Roach    /**
24500dcd9387SGreg Roach     * @param string $threshold
24510dcd9387SGreg Roach     * @param string $maxtoshow
24520dcd9387SGreg Roach     *
24530dcd9387SGreg Roach     * @return string
24549219296aSGreg Roach     */
24559219296aSGreg Roach    public function commonGivenUnknownListTotals(string $threshold = '1', string $maxtoshow = '10'): string
24569219296aSGreg Roach    {
24579219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownListTotals((int) $threshold, (int) $maxtoshow);
24589219296aSGreg Roach    }
24599219296aSGreg Roach
24609219296aSGreg Roach    /**
24610dcd9387SGreg Roach     * @param string $threshold
24620dcd9387SGreg Roach     * @param string $maxtoshow
24630dcd9387SGreg Roach     *
24640dcd9387SGreg Roach     * @return string
24659219296aSGreg Roach     */
24669219296aSGreg Roach    public function commonGivenUnknownTable(string $threshold = '1', string $maxtoshow = '10'): string
24679219296aSGreg Roach    {
24689219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTable((int) $threshold, (int) $maxtoshow);
24699219296aSGreg Roach    }
24709219296aSGreg Roach
24719219296aSGreg Roach    /**
24720dcd9387SGreg Roach     * @param string|null $color_from
24730dcd9387SGreg Roach     * @param string|null $color_to
24740dcd9387SGreg Roach     * @param string      $maxtoshow
24750dcd9387SGreg Roach     *
24760dcd9387SGreg Roach     * @return string
24779219296aSGreg Roach     */
24789219296aSGreg Roach    public function chartCommonGiven(
24799219296aSGreg Roach        string $color_from = null,
24809219296aSGreg Roach        string $color_to = null,
24819219296aSGreg Roach        string $maxtoshow = '7'
2482c81b7bf1SGreg Roach    ): string {
248388de55fdSRico Sonntag        return $this->individualRepository->chartCommonGiven($color_from, $color_to, (int) $maxtoshow);
24849219296aSGreg Roach    }
24859219296aSGreg Roach
24869219296aSGreg Roach    /**
24870dcd9387SGreg Roach     * @return string
24889219296aSGreg Roach     */
24899219296aSGreg Roach    public function usersLoggedIn(): string
24909219296aSGreg Roach    {
24919219296aSGreg Roach        return $this->userRepository->usersLoggedIn();
24929219296aSGreg Roach    }
24939219296aSGreg Roach
24949219296aSGreg Roach    /**
24950dcd9387SGreg Roach     * @return string
24969219296aSGreg Roach     */
24979219296aSGreg Roach    public function usersLoggedInList(): string
24989219296aSGreg Roach    {
24999219296aSGreg Roach        return $this->userRepository->usersLoggedInList();
25009219296aSGreg Roach    }
25019219296aSGreg Roach
25029219296aSGreg Roach    /**
25030dcd9387SGreg Roach     * @return int
25049219296aSGreg Roach     */
25059219296aSGreg Roach    public function usersLoggedInTotal(): int
25069219296aSGreg Roach    {
25079219296aSGreg Roach        return $this->userRepository->usersLoggedInTotal();
25089219296aSGreg Roach    }
25099219296aSGreg Roach
25109219296aSGreg Roach    /**
25110dcd9387SGreg Roach     * @return int
25129219296aSGreg Roach     */
25139219296aSGreg Roach    public function usersLoggedInTotalAnon(): int
25149219296aSGreg Roach    {
25159219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalAnon();
25169219296aSGreg Roach    }
25179219296aSGreg Roach
25189219296aSGreg Roach    /**
25190dcd9387SGreg Roach     * @return int
25209219296aSGreg Roach     */
25219219296aSGreg Roach    public function usersLoggedInTotalVisible(): int
25229219296aSGreg Roach    {
25239219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalVisible();
25249219296aSGreg Roach    }
25259219296aSGreg Roach
25269219296aSGreg Roach    /**
25270dcd9387SGreg Roach     * @return string
25289219296aSGreg Roach     */
25299219296aSGreg Roach    public function userId(): string
25309219296aSGreg Roach    {
25319219296aSGreg Roach        return $this->userRepository->userId();
25329219296aSGreg Roach    }
25339219296aSGreg Roach
25349219296aSGreg Roach    /**
25350dcd9387SGreg Roach     * @param string $visitor_text
25360dcd9387SGreg Roach     *
25370dcd9387SGreg Roach     * @return string
25389219296aSGreg Roach     */
25399219296aSGreg Roach    public function userName(string $visitor_text = ''): string
25409219296aSGreg Roach    {
254118483248SGreg Roach        return $this->userRepository->userName($visitor_text);
25429219296aSGreg Roach    }
25439219296aSGreg Roach
25449219296aSGreg Roach    /**
25450dcd9387SGreg Roach     * @return string
25469219296aSGreg Roach     */
25479219296aSGreg Roach    public function userFullName(): string
25489219296aSGreg Roach    {
25499219296aSGreg Roach        return $this->userRepository->userFullName();
25509219296aSGreg Roach    }
25519219296aSGreg Roach
25529219296aSGreg Roach    /**
25530dcd9387SGreg Roach     * @return string
25549219296aSGreg Roach     */
25559219296aSGreg Roach    public function totalUsers(): string
25569219296aSGreg Roach    {
25579219296aSGreg Roach        return $this->userRepository->totalUsers();
25589219296aSGreg Roach    }
25599219296aSGreg Roach
25609219296aSGreg Roach    /**
25610dcd9387SGreg Roach     * @return string
25629219296aSGreg Roach     */
25639219296aSGreg Roach    public function totalAdmins(): string
25649219296aSGreg Roach    {
25659219296aSGreg Roach        return $this->userRepository->totalAdmins();
25669219296aSGreg Roach    }
25679219296aSGreg Roach
25689219296aSGreg Roach    /**
25690dcd9387SGreg Roach     * @return string
25709219296aSGreg Roach     */
25719219296aSGreg Roach    public function totalNonAdmins(): string
25729219296aSGreg Roach    {
25739219296aSGreg Roach        return $this->userRepository->totalNonAdmins();
25749219296aSGreg Roach    }
25759219296aSGreg Roach
25769219296aSGreg Roach    /**
25770dcd9387SGreg Roach     * @return string
25789219296aSGreg Roach     */
25799219296aSGreg Roach    public function latestUserId(): string
25809219296aSGreg Roach    {
25819219296aSGreg Roach        return $this->latestUserRepository->latestUserId();
25829219296aSGreg Roach    }
25839219296aSGreg Roach
25849219296aSGreg Roach    /**
25850dcd9387SGreg Roach     * @return string
25869219296aSGreg Roach     */
25879219296aSGreg Roach    public function latestUserName(): string
25889219296aSGreg Roach    {
25899219296aSGreg Roach        return $this->latestUserRepository->latestUserName();
25909219296aSGreg Roach    }
25919219296aSGreg Roach
25929219296aSGreg Roach    /**
25930dcd9387SGreg Roach     * @return string
25949219296aSGreg Roach     */
25959219296aSGreg Roach    public function latestUserFullName(): string
25969219296aSGreg Roach    {
25979219296aSGreg Roach        return $this->latestUserRepository->latestUserFullName();
25989219296aSGreg Roach    }
25999219296aSGreg Roach
26009219296aSGreg Roach    /**
26010dcd9387SGreg Roach     * @param string|null $format
26020dcd9387SGreg Roach     *
26030dcd9387SGreg Roach     * @return string
26049219296aSGreg Roach     */
26059219296aSGreg Roach    public function latestUserRegDate(string $format = null): string
26069219296aSGreg Roach    {
260718483248SGreg Roach        return $this->latestUserRepository->latestUserRegDate($format);
26089219296aSGreg Roach    }
26099219296aSGreg Roach
26109219296aSGreg Roach    /**
26110dcd9387SGreg Roach     * @param string|null $format
26120dcd9387SGreg Roach     *
26130dcd9387SGreg Roach     * @return string
26149219296aSGreg Roach     */
26159219296aSGreg Roach    public function latestUserRegTime(string $format = null): string
26169219296aSGreg Roach    {
261718483248SGreg Roach        return $this->latestUserRepository->latestUserRegTime($format);
26189219296aSGreg Roach    }
26199219296aSGreg Roach
26209219296aSGreg Roach    /**
26210dcd9387SGreg Roach     * @param string|null $yes
26220dcd9387SGreg Roach     * @param string|null $no
26230dcd9387SGreg Roach     *
26240dcd9387SGreg Roach     * @return string
26259219296aSGreg Roach     */
26269219296aSGreg Roach    public function latestUserLoggedin(string $yes = null, string $no = null): string
26279219296aSGreg Roach    {
262818483248SGreg Roach        return $this->latestUserRepository->latestUserLoggedin($yes, $no);
26299219296aSGreg Roach    }
26309219296aSGreg Roach
26319219296aSGreg Roach    /**
26320dcd9387SGreg Roach     * @return string
26339219296aSGreg Roach     */
26349219296aSGreg Roach    public function contactWebmaster(): string
26359219296aSGreg Roach    {
263671378461SGreg Roach        return $this->contactRepository->contactWebmaster();
26379219296aSGreg Roach    }
26389219296aSGreg Roach
26399219296aSGreg Roach    /**
26400dcd9387SGreg Roach     * @return string
26419219296aSGreg Roach     */
26429219296aSGreg Roach    public function contactGedcom(): string
26439219296aSGreg Roach    {
264471378461SGreg Roach        return $this->contactRepository->contactGedcom();
26459219296aSGreg Roach    }
26469219296aSGreg Roach
26479219296aSGreg Roach    /**
26480dcd9387SGreg Roach     * @return string
26499219296aSGreg Roach     */
26509219296aSGreg Roach    public function serverDate(): string
26519219296aSGreg Roach    {
26529219296aSGreg Roach        return $this->serverRepository->serverDate();
26539219296aSGreg Roach    }
26549219296aSGreg Roach
26559219296aSGreg Roach    /**
26560dcd9387SGreg Roach     * @return string
26579219296aSGreg Roach     */
26589219296aSGreg Roach    public function serverTime(): string
26599219296aSGreg Roach    {
26609219296aSGreg Roach        return $this->serverRepository->serverTime();
26619219296aSGreg Roach    }
26629219296aSGreg Roach
26639219296aSGreg Roach    /**
26640dcd9387SGreg Roach     * @return string
26659219296aSGreg Roach     */
26669219296aSGreg Roach    public function serverTime24(): string
26679219296aSGreg Roach    {
26689219296aSGreg Roach        return $this->serverRepository->serverTime24();
26699219296aSGreg Roach    }
26709219296aSGreg Roach
26719219296aSGreg Roach    /**
26729219296aSGreg Roach     * What is the timezone of the server.
26739219296aSGreg Roach     *
26749219296aSGreg Roach     * @return string
26759219296aSGreg Roach     */
26769219296aSGreg Roach    public function serverTimezone(): string
26779219296aSGreg Roach    {
26789219296aSGreg Roach        return $this->serverRepository->serverTimezone();
26799219296aSGreg Roach    }
26809219296aSGreg Roach
26819219296aSGreg Roach    /**
26820dcd9387SGreg Roach     * @return string
26839219296aSGreg Roach     */
26849219296aSGreg Roach    public function browserDate(): string
26859219296aSGreg Roach    {
26869219296aSGreg Roach        return $this->browserRepository->browserDate();
26879219296aSGreg Roach    }
26889219296aSGreg Roach
26899219296aSGreg Roach    /**
26900dcd9387SGreg Roach     * @return string
26919219296aSGreg Roach     */
26929219296aSGreg Roach    public function browserTime(): string
26939219296aSGreg Roach    {
26949219296aSGreg Roach        return $this->browserRepository->browserTime();
26959219296aSGreg Roach    }
26969219296aSGreg Roach
26979219296aSGreg Roach    /**
26980dcd9387SGreg Roach     * @return string
26999219296aSGreg Roach     */
27009219296aSGreg Roach    public function browserTimezone(): string
27019219296aSGreg Roach    {
27029219296aSGreg Roach        return $this->browserRepository->browserTimezone();
27039219296aSGreg Roach    }
27049219296aSGreg Roach
27059219296aSGreg Roach    /**
27060dcd9387SGreg Roach     * @param string $page_parameter
27070dcd9387SGreg Roach     *
27080dcd9387SGreg Roach     * @return string
27099219296aSGreg Roach     */
27109219296aSGreg Roach    public function hitCount(string $page_parameter = ''): string
27119219296aSGreg Roach    {
27129219296aSGreg Roach        return $this->hitCountRepository->hitCount($page_parameter);
27139219296aSGreg Roach    }
27149219296aSGreg Roach
27159219296aSGreg Roach    /**
27160dcd9387SGreg Roach     * @param string $page_parameter
27170dcd9387SGreg Roach     *
27180dcd9387SGreg Roach     * @return string
27199219296aSGreg Roach     */
27209219296aSGreg Roach    public function hitCountUser(string $page_parameter = ''): string
27219219296aSGreg Roach    {
27229219296aSGreg Roach        return $this->hitCountRepository->hitCountUser($page_parameter);
27239219296aSGreg Roach    }
27249219296aSGreg Roach
27259219296aSGreg Roach    /**
27260dcd9387SGreg Roach     * @param string $page_parameter
27270dcd9387SGreg Roach     *
27280dcd9387SGreg Roach     * @return string
27299219296aSGreg Roach     */
27309219296aSGreg Roach    public function hitCountIndi(string $page_parameter = ''): string
27319219296aSGreg Roach    {
27329219296aSGreg Roach        return $this->hitCountRepository->hitCountIndi($page_parameter);
27339219296aSGreg Roach    }
27349219296aSGreg Roach
27359219296aSGreg Roach    /**
27360dcd9387SGreg Roach     * @param string $page_parameter
27370dcd9387SGreg Roach     *
27380dcd9387SGreg Roach     * @return string
27399219296aSGreg Roach     */
27409219296aSGreg Roach    public function hitCountFam(string $page_parameter = ''): string
27419219296aSGreg Roach    {
27429219296aSGreg Roach        return $this->hitCountRepository->hitCountFam($page_parameter);
27439219296aSGreg Roach    }
27449219296aSGreg Roach
27459219296aSGreg Roach    /**
27460dcd9387SGreg Roach     * @param string $page_parameter
27470dcd9387SGreg Roach     *
27480dcd9387SGreg Roach     * @return string
27499219296aSGreg Roach     */
27509219296aSGreg Roach    public function hitCountSour(string $page_parameter = ''): string
27519219296aSGreg Roach    {
27529219296aSGreg Roach        return $this->hitCountRepository->hitCountSour($page_parameter);
27539219296aSGreg Roach    }
27549219296aSGreg Roach
27559219296aSGreg Roach    /**
27560dcd9387SGreg Roach     * @param string $page_parameter
27570dcd9387SGreg Roach     *
27580dcd9387SGreg Roach     * @return string
27599219296aSGreg Roach     */
27609219296aSGreg Roach    public function hitCountRepo(string $page_parameter = ''): string
27619219296aSGreg Roach    {
27629219296aSGreg Roach        return $this->hitCountRepository->hitCountRepo($page_parameter);
27639219296aSGreg Roach    }
27649219296aSGreg Roach
27659219296aSGreg Roach    /**
27660dcd9387SGreg Roach     * @param string $page_parameter
27670dcd9387SGreg Roach     *
27680dcd9387SGreg Roach     * @return string
27699219296aSGreg Roach     */
27709219296aSGreg Roach    public function hitCountNote(string $page_parameter = ''): string
27719219296aSGreg Roach    {
27729219296aSGreg Roach        return $this->hitCountRepository->hitCountNote($page_parameter);
27739219296aSGreg Roach    }
27749219296aSGreg Roach
27759219296aSGreg Roach    /**
27760dcd9387SGreg Roach     * @param string $page_parameter
27770dcd9387SGreg Roach     *
27780dcd9387SGreg Roach     * @return string
27799219296aSGreg Roach     */
27809219296aSGreg Roach    public function hitCountObje(string $page_parameter = ''): string
27819219296aSGreg Roach    {
27829219296aSGreg Roach        return $this->hitCountRepository->hitCountObje($page_parameter);
27839219296aSGreg Roach    }
27849219296aSGreg Roach
27859219296aSGreg Roach    /**
27860dcd9387SGreg Roach     * @return string
27879219296aSGreg Roach     */
27889219296aSGreg Roach    public function gedcomFavorites(): string
27899219296aSGreg Roach    {
27909219296aSGreg Roach        return $this->favoritesRepository->gedcomFavorites();
27919219296aSGreg Roach    }
27929219296aSGreg Roach
27939219296aSGreg Roach    /**
27940dcd9387SGreg Roach     * @return string
27959219296aSGreg Roach     */
27969219296aSGreg Roach    public function userFavorites(): string
27979219296aSGreg Roach    {
27989219296aSGreg Roach        return $this->favoritesRepository->userFavorites();
27999219296aSGreg Roach    }
28009219296aSGreg Roach
28019219296aSGreg Roach    /**
28020dcd9387SGreg Roach     * @return string
28039219296aSGreg Roach     */
28049219296aSGreg Roach    public function totalGedcomFavorites(): string
28059219296aSGreg Roach    {
28069219296aSGreg Roach        return $this->favoritesRepository->totalGedcomFavorites();
28079219296aSGreg Roach    }
28089219296aSGreg Roach
28099219296aSGreg Roach    /**
28100dcd9387SGreg Roach     * @return string
28119219296aSGreg Roach     */
28129219296aSGreg Roach    public function totalUserFavorites(): string
28139219296aSGreg Roach    {
28149219296aSGreg Roach        return $this->favoritesRepository->totalUserFavorites();
28159219296aSGreg Roach    }
28169219296aSGreg Roach
28179219296aSGreg Roach    /**
28180dcd9387SGreg Roach     * @return string
28199219296aSGreg Roach     */
28209219296aSGreg Roach    public function totalUserMessages(): string
28219219296aSGreg Roach    {
28229219296aSGreg Roach        return $this->messageRepository->totalUserMessages();
28239219296aSGreg Roach    }
28249219296aSGreg Roach
28259219296aSGreg Roach    /**
28260dcd9387SGreg Roach     * @return string
28279219296aSGreg Roach     */
28289219296aSGreg Roach    public function totalUserJournal(): string
28299219296aSGreg Roach    {
28309219296aSGreg Roach        return $this->newsRepository->totalUserJournal();
28319219296aSGreg Roach    }
28329219296aSGreg Roach
28339219296aSGreg Roach    /**
28340dcd9387SGreg Roach     * @return string
28359219296aSGreg Roach     */
28369219296aSGreg Roach    public function totalGedcomNews(): string
28379219296aSGreg Roach    {
28389219296aSGreg Roach        return $this->newsRepository->totalGedcomNews();
28399219296aSGreg Roach    }
28409219296aSGreg Roach
28419219296aSGreg Roach    /**
28429219296aSGreg Roach     * Create any of the other blocks.
28439219296aSGreg Roach     * Use as #callBlock:block_name#
28449219296aSGreg Roach     *
28459219296aSGreg Roach     * @param string $block
28469219296aSGreg Roach     * @param string ...$params
28479219296aSGreg Roach     *
2848e364afe4SGreg Roach     * @return string|null
28499219296aSGreg Roach     */
28509219296aSGreg Roach    public function callBlock(string $block = '', ...$params): ?string
28519219296aSGreg Roach    {
285287cca37cSGreg Roach        /** @var ModuleBlockInterface|null $module */
2853fd9aba47SGreg Roach        $module = $this->module_service
285487cca37cSGreg Roach            ->findByComponent(ModuleBlockInterface::class, $this->tree, Auth::user())
28556c2179e2SGreg Roach            ->first(static function (ModuleInterface $module) use ($block): bool {
28569219296aSGreg Roach                return $module->name() === $block && $module->name() !== 'html';
28570797053bSGreg Roach            });
28589219296aSGreg Roach
28599219296aSGreg Roach        if ($module === null) {
28609219296aSGreg Roach            return '';
28619219296aSGreg Roach        }
28629219296aSGreg Roach
28639219296aSGreg Roach        // Build the config array
28649219296aSGreg Roach        $cfg = [];
28659219296aSGreg Roach        foreach ($params as $config) {
28669219296aSGreg Roach            $bits = explode('=', $config);
28679219296aSGreg Roach
28686ccdf4f0SGreg Roach            if (count($bits) < 2) {
28699219296aSGreg Roach                continue;
28709219296aSGreg Roach            }
28719219296aSGreg Roach
28729219296aSGreg Roach            $v       = array_shift($bits);
28739219296aSGreg Roach            $cfg[$v] = implode('=', $bits);
28749219296aSGreg Roach        }
28759219296aSGreg Roach
28763caaa4d2SGreg Roach        return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED, $cfg);
28779219296aSGreg Roach    }
28789219296aSGreg Roach
28799219296aSGreg Roach    /**
28809219296aSGreg Roach     * What is the current version of webtrees.
28819219296aSGreg Roach     *
28829219296aSGreg Roach     * @return string
28839219296aSGreg Roach     */
28849219296aSGreg Roach    public function webtreesVersion(): string
28859219296aSGreg Roach    {
28869219296aSGreg Roach        return Webtrees::VERSION;
28879219296aSGreg Roach    }
288871378461SGreg Roach
288971378461SGreg Roach    /**
289071378461SGreg Roach     * Get tags and their parsed results.
289171378461SGreg Roach     *
289271378461SGreg Roach     * @param string $text
289371378461SGreg Roach     *
289424f2a3afSGreg Roach     * @return array<string>
289571378461SGreg Roach     */
289671378461SGreg Roach    private function getTags(string $text): array
289771378461SGreg Roach    {
289871378461SGreg Roach        $tags    = [];
289971378461SGreg Roach        $matches = [];
290071378461SGreg Roach
2901b25599e6SGreg Roach        preg_match_all('/#([^#\n]+)(?=#)/', $text, $matches, PREG_SET_ORDER);
290271378461SGreg Roach
290371378461SGreg Roach        foreach ($matches as $match) {
290471378461SGreg Roach            $params = explode(':', $match[1]);
290571378461SGreg Roach            $method = array_shift($params);
290671378461SGreg Roach
290771378461SGreg Roach            if (method_exists($this, $method)) {
2908e29653ffSGreg Roach                $tags[$match[0] . '#'] = call_user_func([$this, $method], ...$params);
290971378461SGreg Roach            }
291071378461SGreg Roach        }
291171378461SGreg Roach
291271378461SGreg Roach        return $tags;
291371378461SGreg Roach    }
29149219296aSGreg Roach}
2915