xref: /webtrees/app/Statistics.php (revision 9219296a1acfac69c7d7f13505951ddeee5f8899)
1*9219296aSGreg Roach<?php
2*9219296aSGreg Roach/**
3*9219296aSGreg Roach * webtrees: online genealogy
4*9219296aSGreg Roach * Copyright (C) 2019 webtrees development team
5*9219296aSGreg Roach * This program is free software: you can redistribute it and/or modify
6*9219296aSGreg Roach * it under the terms of the GNU General Public License as published by
7*9219296aSGreg Roach * the Free Software Foundation, either version 3 of the License, or
8*9219296aSGreg Roach * (at your option) any later version.
9*9219296aSGreg Roach * This program is distributed in the hope that it will be useful,
10*9219296aSGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of
11*9219296aSGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12*9219296aSGreg Roach * GNU General Public License for more details.
13*9219296aSGreg Roach * You should have received a copy of the GNU General Public License
14*9219296aSGreg Roach * along with this program. If not, see <http://www.gnu.org/licenses/>.
15*9219296aSGreg Roach */
16*9219296aSGreg Roachdeclare(strict_types=1);
17*9219296aSGreg Roach
18*9219296aSGreg Roachnamespace Fisharebest\Webtrees;
19*9219296aSGreg Roach
20*9219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface;
21*9219296aSGreg Roachuse Fisharebest\Webtrees\Module\ModuleInterface;
22*9219296aSGreg Roachuse Fisharebest\Webtrees\Services\ModuleService;
23*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\BrowserRepository;
24*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ContactRepository;
25*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\EventRepository;
26*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyDatesRepository;
27*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FamilyRepository;
28*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\FavoritesRepository;
29*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\GedcomRepository;
30*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\HitCountRepository;
31*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\IndividualRepository;
32*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\BrowserRepositoryInterface;
33*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ContactRepositoryInterface;
34*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\EventRepositoryInterface;
35*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FamilyDatesRepositoryInterface;
36*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FavoritesRepositoryInterface;
37*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\GedcomRepositoryInterface;
38*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\HitCountRepositoryInterface;
39*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\IndividualRepositoryInterface;
40*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\LatestUserRepositoryInterface;
41*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MediaRepositoryInterface;
42*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\MessageRepositoryInterface;
43*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\NewsRepositoryInterface;
44*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\PlaceRepositoryInterface;
45*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\ServerRepositoryInterface;
46*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\Interfaces\UserRepositoryInterface;
47*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\LatestUserRepository;
48*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MediaRepository;
49*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\MessageRepository;
50*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\NewsRepository;
51*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\PlaceRepository;
52*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\ServerRepository;
53*9219296aSGreg Roachuse Fisharebest\Webtrees\Statistics\Repository\UserRepository;
54*9219296aSGreg Roachuse ReflectionMethod;
55*9219296aSGreg Roach
56*9219296aSGreg Roach/**
57*9219296aSGreg Roach * A selection of pre-formatted statistical queries.
58*9219296aSGreg Roach * These are primarily used for embedded keywords on HTML blocks, but
59*9219296aSGreg Roach * are also used elsewhere in the code.
60*9219296aSGreg Roach */
61*9219296aSGreg Roachclass Statistics implements
62*9219296aSGreg Roach    GedcomRepositoryInterface,
63*9219296aSGreg Roach    IndividualRepositoryInterface,
64*9219296aSGreg Roach    EventRepositoryInterface,
65*9219296aSGreg Roach    MediaRepositoryInterface,
66*9219296aSGreg Roach    UserRepositoryInterface,
67*9219296aSGreg Roach    ServerRepositoryInterface,
68*9219296aSGreg Roach    BrowserRepositoryInterface,
69*9219296aSGreg Roach    HitCountRepositoryInterface,
70*9219296aSGreg Roach    LatestUserRepositoryInterface,
71*9219296aSGreg Roach    FavoritesRepositoryInterface,
72*9219296aSGreg Roach    NewsRepositoryInterface,
73*9219296aSGreg Roach    MessageRepositoryInterface,
74*9219296aSGreg Roach    ContactRepositoryInterface,
75*9219296aSGreg Roach    FamilyDatesRepositoryInterface,
76*9219296aSGreg Roach    PlaceRepositoryInterface
77*9219296aSGreg Roach{
78*9219296aSGreg Roach    /**
79*9219296aSGreg Roach     * Generate statistics for a specified tree.
80*9219296aSGreg Roach     *
81*9219296aSGreg Roach     * @var Tree
82*9219296aSGreg Roach     */
83*9219296aSGreg Roach    private $tree;
84*9219296aSGreg Roach
85*9219296aSGreg Roach    /**
86*9219296aSGreg Roach     * All public functions are available as keywords - except these ones
87*9219296aSGreg Roach     *
88*9219296aSGreg Roach     * @var string[]
89*9219296aSGreg Roach     */
90*9219296aSGreg Roach    private static $public_but_not_allowed = [
91*9219296aSGreg Roach        '__construct',
92*9219296aSGreg Roach        'embedTags',
93*9219296aSGreg Roach        'iso3166',
94*9219296aSGreg Roach        'getAllCountries',
95*9219296aSGreg Roach        'getAllTagsTable',
96*9219296aSGreg Roach        'getAllTagsText',
97*9219296aSGreg Roach        'statsPlaces',
98*9219296aSGreg Roach        'statsBirthQuery',
99*9219296aSGreg Roach        'statsDeathQuery',
100*9219296aSGreg Roach        'statsMarrQuery',
101*9219296aSGreg Roach        'statsAgeQuery',
102*9219296aSGreg Roach        'monthFirstChildQuery',
103*9219296aSGreg Roach        'statsChildrenQuery',
104*9219296aSGreg Roach        'statsMarrAgeQuery',
105*9219296aSGreg Roach    ];
106*9219296aSGreg Roach
107*9219296aSGreg Roach    /**
108*9219296aSGreg Roach     * @var GedcomRepository
109*9219296aSGreg Roach     */
110*9219296aSGreg Roach    private $gedcomRepository;
111*9219296aSGreg Roach
112*9219296aSGreg Roach    /**
113*9219296aSGreg Roach     * @var IndividualRepository
114*9219296aSGreg Roach     */
115*9219296aSGreg Roach    private $individualRepository;
116*9219296aSGreg Roach
117*9219296aSGreg Roach    /**
118*9219296aSGreg Roach     * @var FamilyRepository
119*9219296aSGreg Roach     */
120*9219296aSGreg Roach    private $familyRepository;
121*9219296aSGreg Roach
122*9219296aSGreg Roach    /**
123*9219296aSGreg Roach     * @var MediaRepository
124*9219296aSGreg Roach     */
125*9219296aSGreg Roach    private $mediaRepository;
126*9219296aSGreg Roach
127*9219296aSGreg Roach    /**
128*9219296aSGreg Roach     * @var EventRepository
129*9219296aSGreg Roach     */
130*9219296aSGreg Roach    private $eventRepository;
131*9219296aSGreg Roach
132*9219296aSGreg Roach    /**
133*9219296aSGreg Roach     * @var UserRepository
134*9219296aSGreg Roach     */
135*9219296aSGreg Roach    private $userRepository;
136*9219296aSGreg Roach
137*9219296aSGreg Roach    /**
138*9219296aSGreg Roach     * @var ServerRepository
139*9219296aSGreg Roach     */
140*9219296aSGreg Roach    private $serverRepository;
141*9219296aSGreg Roach
142*9219296aSGreg Roach    /**
143*9219296aSGreg Roach     * @var BrowserRepository
144*9219296aSGreg Roach     */
145*9219296aSGreg Roach    private $browserRepository;
146*9219296aSGreg Roach
147*9219296aSGreg Roach    /**
148*9219296aSGreg Roach     * @var HitCountRepository
149*9219296aSGreg Roach     */
150*9219296aSGreg Roach    private $hitCountRepository;
151*9219296aSGreg Roach
152*9219296aSGreg Roach    /**
153*9219296aSGreg Roach     * @var LatestUserRepository
154*9219296aSGreg Roach     */
155*9219296aSGreg Roach    private $latestUserRepository;
156*9219296aSGreg Roach
157*9219296aSGreg Roach    /**
158*9219296aSGreg Roach     * @var FavoritesRepository
159*9219296aSGreg Roach     */
160*9219296aSGreg Roach    private $favoritesRepository;
161*9219296aSGreg Roach
162*9219296aSGreg Roach    /**
163*9219296aSGreg Roach     * @var NewsRepository
164*9219296aSGreg Roach     */
165*9219296aSGreg Roach    private $newsRepository;
166*9219296aSGreg Roach
167*9219296aSGreg Roach    /**
168*9219296aSGreg Roach     * @var MessageRepository
169*9219296aSGreg Roach     */
170*9219296aSGreg Roach    private $messageRepository;
171*9219296aSGreg Roach
172*9219296aSGreg Roach    /**
173*9219296aSGreg Roach     * @var ContactRepository
174*9219296aSGreg Roach     */
175*9219296aSGreg Roach    private $contactRepository;
176*9219296aSGreg Roach
177*9219296aSGreg Roach    /**
178*9219296aSGreg Roach     * @var FamilyDatesRepository
179*9219296aSGreg Roach     */
180*9219296aSGreg Roach    private $familyDatesRepository;
181*9219296aSGreg Roach
182*9219296aSGreg Roach    /**
183*9219296aSGreg Roach     * @var PlaceRepository
184*9219296aSGreg Roach     */
185*9219296aSGreg Roach    private $placeRepository;
186*9219296aSGreg Roach
187*9219296aSGreg Roach    /**
188*9219296aSGreg Roach     * @var ModuleService
189*9219296aSGreg Roach     */
190*9219296aSGreg Roach    private $module_service;
191*9219296aSGreg Roach
192*9219296aSGreg Roach    /**
193*9219296aSGreg Roach     * Create the statistics for a tree.
194*9219296aSGreg Roach     *
195*9219296aSGreg Roach     * @param ModuleService $module_service
196*9219296aSGreg Roach     * @param Tree          $tree Generate statistics for this tree
197*9219296aSGreg Roach     */
198*9219296aSGreg Roach    public function __construct(
199*9219296aSGreg Roach        ModuleService $module_service,
200*9219296aSGreg Roach        Tree $tree
201*9219296aSGreg Roach    )
202*9219296aSGreg Roach    {
203*9219296aSGreg Roach        $this->tree                  = $tree;
204*9219296aSGreg Roach        $this->gedcomRepository      = new GedcomRepository($tree);
205*9219296aSGreg Roach        $this->individualRepository  = new IndividualRepository($tree);
206*9219296aSGreg Roach        $this->familyRepository      = new FamilyRepository($tree);
207*9219296aSGreg Roach        $this->familyDatesRepository = new FamilyDatesRepository($tree);
208*9219296aSGreg Roach        $this->mediaRepository       = new MediaRepository($tree);
209*9219296aSGreg Roach        $this->eventRepository       = new EventRepository($tree);
210*9219296aSGreg Roach        $this->userRepository        = new UserRepository($tree);
211*9219296aSGreg Roach        $this->serverRepository      = new ServerRepository();
212*9219296aSGreg Roach        $this->browserRepository     = new BrowserRepository();
213*9219296aSGreg Roach        $this->hitCountRepository    = new HitCountRepository($tree);
214*9219296aSGreg Roach        $this->latestUserRepository  = new LatestUserRepository();
215*9219296aSGreg Roach        $this->favoritesRepository   = new FavoritesRepository($tree);
216*9219296aSGreg Roach        $this->newsRepository        = new NewsRepository($tree);
217*9219296aSGreg Roach        $this->messageRepository     = new MessageRepository();
218*9219296aSGreg Roach        $this->contactRepository     = new ContactRepository($tree);
219*9219296aSGreg Roach        $this->placeRepository       = new PlaceRepository($tree);
220*9219296aSGreg Roach        $this->module_service        = $module_service;
221*9219296aSGreg Roach    }
222*9219296aSGreg Roach
223*9219296aSGreg Roach    /**
224*9219296aSGreg Roach     * Return a string of all supported tags and an example of its output in table row form.
225*9219296aSGreg Roach     *
226*9219296aSGreg Roach     * @return string
227*9219296aSGreg Roach     */
228*9219296aSGreg Roach    public function getAllTagsTable(): string
229*9219296aSGreg Roach    {
230*9219296aSGreg Roach        $examples = [];
231*9219296aSGreg Roach
232*9219296aSGreg Roach        foreach (get_class_methods($this) as $method) {
233*9219296aSGreg Roach            $reflection = new ReflectionMethod($this, $method);
234*9219296aSGreg Roach            if ($reflection->isPublic() && !\in_array($method, self::$public_but_not_allowed, true)) {
235*9219296aSGreg Roach                $examples[$method] = $this->$method();
236*9219296aSGreg Roach            }
237*9219296aSGreg Roach        }
238*9219296aSGreg Roach
239*9219296aSGreg Roach        ksort($examples);
240*9219296aSGreg Roach
241*9219296aSGreg Roach        $html = '';
242*9219296aSGreg Roach        foreach ($examples as $tag => $value) {
243*9219296aSGreg Roach            $html .= '<dt>#' . $tag . '#</dt>';
244*9219296aSGreg Roach            $html .= '<dd>' . $value . '</dd>';
245*9219296aSGreg Roach        }
246*9219296aSGreg Roach
247*9219296aSGreg Roach        return '<dl>' . $html . '</dl>';
248*9219296aSGreg Roach    }
249*9219296aSGreg Roach
250*9219296aSGreg Roach    /**
251*9219296aSGreg Roach     * Return a string of all supported tags in plain text.
252*9219296aSGreg Roach     *
253*9219296aSGreg Roach     * @return string
254*9219296aSGreg Roach     */
255*9219296aSGreg Roach    public function getAllTagsText(): string
256*9219296aSGreg Roach    {
257*9219296aSGreg Roach        $examples = [];
258*9219296aSGreg Roach
259*9219296aSGreg Roach        foreach (get_class_methods($this) as $method) {
260*9219296aSGreg Roach            $reflection = new ReflectionMethod($this, $method);
261*9219296aSGreg Roach            if ($reflection->isPublic() && !\in_array($method, self::$public_but_not_allowed, true)) {
262*9219296aSGreg Roach                $examples[$method] = $method;
263*9219296aSGreg Roach            }
264*9219296aSGreg Roach        }
265*9219296aSGreg Roach
266*9219296aSGreg Roach        ksort($examples);
267*9219296aSGreg Roach
268*9219296aSGreg Roach        return implode('<br>', $examples);
269*9219296aSGreg Roach    }
270*9219296aSGreg Roach
271*9219296aSGreg Roach    /**
272*9219296aSGreg Roach     * Get tags and their parsed results.
273*9219296aSGreg Roach     *
274*9219296aSGreg Roach     * @param string $text
275*9219296aSGreg Roach     *
276*9219296aSGreg Roach     * @return string[]
277*9219296aSGreg Roach     */
278*9219296aSGreg Roach    private function getTags(string $text): array
279*9219296aSGreg Roach    {
280*9219296aSGreg Roach        $tags    = [];
281*9219296aSGreg Roach        $matches = [];
282*9219296aSGreg Roach
283*9219296aSGreg Roach        preg_match_all('/#([^#]+)#/', $text, $matches, PREG_SET_ORDER);
284*9219296aSGreg Roach
285*9219296aSGreg Roach        foreach ($matches as $match) {
286*9219296aSGreg Roach            $params = explode(':', $match[1]);
287*9219296aSGreg Roach            $method = array_shift($params);
288*9219296aSGreg Roach
289*9219296aSGreg Roach            if (method_exists($this, $method)) {
290*9219296aSGreg Roach                $tags[$match[0]] = $this->$method(...$params);
291*9219296aSGreg Roach            }
292*9219296aSGreg Roach        }
293*9219296aSGreg Roach
294*9219296aSGreg Roach        return $tags;
295*9219296aSGreg Roach    }
296*9219296aSGreg Roach
297*9219296aSGreg Roach    /**
298*9219296aSGreg Roach     * Embed tags in text
299*9219296aSGreg Roach     *
300*9219296aSGreg Roach     * @param string $text
301*9219296aSGreg Roach     *
302*9219296aSGreg Roach     * @return string
303*9219296aSGreg Roach     */
304*9219296aSGreg Roach    public function embedTags(string $text): string
305*9219296aSGreg Roach    {
306*9219296aSGreg Roach        if (strpos($text, '#') !== false) {
307*9219296aSGreg Roach            $text = strtr($text, $this->getTags($text));
308*9219296aSGreg Roach        }
309*9219296aSGreg Roach
310*9219296aSGreg Roach        return $text;
311*9219296aSGreg Roach    }
312*9219296aSGreg Roach
313*9219296aSGreg Roach    /**
314*9219296aSGreg Roach     * @inheritDoc
315*9219296aSGreg Roach     */
316*9219296aSGreg Roach    public function gedcomFilename(): string
317*9219296aSGreg Roach    {
318*9219296aSGreg Roach        return $this->gedcomRepository->gedcomFilename();
319*9219296aSGreg Roach    }
320*9219296aSGreg Roach
321*9219296aSGreg Roach    /**
322*9219296aSGreg Roach     * @inheritDoc
323*9219296aSGreg Roach     */
324*9219296aSGreg Roach    public function gedcomId(): int
325*9219296aSGreg Roach    {
326*9219296aSGreg Roach        return $this->gedcomRepository->gedcomId();
327*9219296aSGreg Roach    }
328*9219296aSGreg Roach
329*9219296aSGreg Roach    /**
330*9219296aSGreg Roach     * @inheritDoc
331*9219296aSGreg Roach     */
332*9219296aSGreg Roach    public function gedcomTitle(): string
333*9219296aSGreg Roach    {
334*9219296aSGreg Roach        return $this->gedcomRepository->gedcomTitle();
335*9219296aSGreg Roach    }
336*9219296aSGreg Roach
337*9219296aSGreg Roach    /**
338*9219296aSGreg Roach     * @inheritDoc
339*9219296aSGreg Roach     */
340*9219296aSGreg Roach    public function gedcomCreatedSoftware(): string
341*9219296aSGreg Roach    {
342*9219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedSoftware();
343*9219296aSGreg Roach    }
344*9219296aSGreg Roach
345*9219296aSGreg Roach    /**
346*9219296aSGreg Roach     * @inheritDoc
347*9219296aSGreg Roach     */
348*9219296aSGreg Roach    public function gedcomCreatedVersion(): string
349*9219296aSGreg Roach    {
350*9219296aSGreg Roach        return $this->gedcomRepository->gedcomCreatedVersion();
351*9219296aSGreg Roach    }
352*9219296aSGreg Roach
353*9219296aSGreg Roach    /**
354*9219296aSGreg Roach     * @inheritDoc
355*9219296aSGreg Roach     */
356*9219296aSGreg Roach    public function gedcomDate(): string
357*9219296aSGreg Roach    {
358*9219296aSGreg Roach        return $this->gedcomRepository->gedcomDate();
359*9219296aSGreg Roach    }
360*9219296aSGreg Roach
361*9219296aSGreg Roach    /**
362*9219296aSGreg Roach     * @inheritDoc
363*9219296aSGreg Roach     */
364*9219296aSGreg Roach    public function gedcomUpdated(): string
365*9219296aSGreg Roach    {
366*9219296aSGreg Roach        return $this->gedcomRepository->gedcomUpdated();
367*9219296aSGreg Roach    }
368*9219296aSGreg Roach
369*9219296aSGreg Roach    /**
370*9219296aSGreg Roach     * @inheritDoc
371*9219296aSGreg Roach     */
372*9219296aSGreg Roach    public function gedcomRootId(): string
373*9219296aSGreg Roach    {
374*9219296aSGreg Roach        return $this->gedcomRepository->gedcomRootId();
375*9219296aSGreg Roach    }
376*9219296aSGreg Roach
377*9219296aSGreg Roach    /**
378*9219296aSGreg Roach     * @inheritDoc
379*9219296aSGreg Roach     */
380*9219296aSGreg Roach    public function totalRecords(): string
381*9219296aSGreg Roach    {
382*9219296aSGreg Roach        return $this->individualRepository->totalRecords();
383*9219296aSGreg Roach    }
384*9219296aSGreg Roach
385*9219296aSGreg Roach    /**
386*9219296aSGreg Roach     * @inheritDoc
387*9219296aSGreg Roach     */
388*9219296aSGreg Roach    public function totalIndividuals(): string
389*9219296aSGreg Roach    {
390*9219296aSGreg Roach        return $this->individualRepository->totalIndividuals();
391*9219296aSGreg Roach    }
392*9219296aSGreg Roach
393*9219296aSGreg Roach    /**
394*9219296aSGreg Roach     * @inheritDoc
395*9219296aSGreg Roach     */
396*9219296aSGreg Roach    public function totalIndisWithSources(): string
397*9219296aSGreg Roach    {
398*9219296aSGreg Roach        return $this->individualRepository->totalIndisWithSources();
399*9219296aSGreg Roach    }
400*9219296aSGreg Roach
401*9219296aSGreg Roach    /**
402*9219296aSGreg Roach     * @inheritDoc
403*9219296aSGreg Roach     */
404*9219296aSGreg Roach    public function chartIndisWithSources(
405*9219296aSGreg Roach        string $size = null,
406*9219296aSGreg Roach        string $color_from = null,
407*9219296aSGreg Roach        string $color_to = null
408*9219296aSGreg Roach    ): string
409*9219296aSGreg Roach    {
410*9219296aSGreg Roach        return $this->individualRepository->chartIndisWithSources($size, $color_from, $color_to);
411*9219296aSGreg Roach    }
412*9219296aSGreg Roach
413*9219296aSGreg Roach    /**
414*9219296aSGreg Roach     * @inheritDoc
415*9219296aSGreg Roach     */
416*9219296aSGreg Roach    public function totalIndividualsPercentage(): string
417*9219296aSGreg Roach    {
418*9219296aSGreg Roach        return $this->individualRepository->totalIndividualsPercentage();
419*9219296aSGreg Roach    }
420*9219296aSGreg Roach
421*9219296aSGreg Roach    /**
422*9219296aSGreg Roach     * @inheritDoc
423*9219296aSGreg Roach     */
424*9219296aSGreg Roach    public function totalFamilies(): string
425*9219296aSGreg Roach    {
426*9219296aSGreg Roach        return $this->individualRepository->totalFamilies();
427*9219296aSGreg Roach    }
428*9219296aSGreg Roach
429*9219296aSGreg Roach    /**
430*9219296aSGreg Roach     * @inheritDoc
431*9219296aSGreg Roach     */
432*9219296aSGreg Roach    public function totalFamiliesPercentage(): string
433*9219296aSGreg Roach    {
434*9219296aSGreg Roach        return $this->individualRepository->totalFamiliesPercentage();
435*9219296aSGreg Roach    }
436*9219296aSGreg Roach
437*9219296aSGreg Roach    /**
438*9219296aSGreg Roach     * @inheritDoc
439*9219296aSGreg Roach     */
440*9219296aSGreg Roach    public function totalFamsWithSources(): string
441*9219296aSGreg Roach    {
442*9219296aSGreg Roach        return $this->individualRepository->totalFamsWithSources();
443*9219296aSGreg Roach    }
444*9219296aSGreg Roach
445*9219296aSGreg Roach    /**
446*9219296aSGreg Roach     * @inheritDoc
447*9219296aSGreg Roach     */
448*9219296aSGreg Roach    public function chartFamsWithSources(
449*9219296aSGreg Roach        string $size = null,
450*9219296aSGreg Roach        string $color_from = null,
451*9219296aSGreg Roach        string $color_to = null
452*9219296aSGreg Roach    ): string
453*9219296aSGreg Roach    {
454*9219296aSGreg Roach        return $this->individualRepository->chartFamsWithSources($size, $color_from, $color_to);
455*9219296aSGreg Roach    }
456*9219296aSGreg Roach
457*9219296aSGreg Roach    /**
458*9219296aSGreg Roach     * @inheritDoc
459*9219296aSGreg Roach     */
460*9219296aSGreg Roach    public function totalSources(): string
461*9219296aSGreg Roach    {
462*9219296aSGreg Roach        return $this->individualRepository->totalSources();
463*9219296aSGreg Roach    }
464*9219296aSGreg Roach
465*9219296aSGreg Roach    /**
466*9219296aSGreg Roach     * @inheritDoc
467*9219296aSGreg Roach     */
468*9219296aSGreg Roach    public function totalSourcesPercentage(): string
469*9219296aSGreg Roach    {
470*9219296aSGreg Roach        return $this->individualRepository->totalSourcesPercentage();
471*9219296aSGreg Roach    }
472*9219296aSGreg Roach
473*9219296aSGreg Roach    /**
474*9219296aSGreg Roach     * @inheritDoc
475*9219296aSGreg Roach     */
476*9219296aSGreg Roach    public function totalNotes(): string
477*9219296aSGreg Roach    {
478*9219296aSGreg Roach        return $this->individualRepository->totalNotes();
479*9219296aSGreg Roach    }
480*9219296aSGreg Roach
481*9219296aSGreg Roach    /**
482*9219296aSGreg Roach     * @inheritDoc
483*9219296aSGreg Roach     */
484*9219296aSGreg Roach    public function totalNotesPercentage(): string
485*9219296aSGreg Roach    {
486*9219296aSGreg Roach        return $this->individualRepository->totalNotesPercentage();
487*9219296aSGreg Roach    }
488*9219296aSGreg Roach
489*9219296aSGreg Roach    /**
490*9219296aSGreg Roach     * @inheritDoc
491*9219296aSGreg Roach     */
492*9219296aSGreg Roach    public function totalRepositories(): string
493*9219296aSGreg Roach    {
494*9219296aSGreg Roach        return $this->individualRepository->totalRepositories();
495*9219296aSGreg Roach    }
496*9219296aSGreg Roach
497*9219296aSGreg Roach    /**
498*9219296aSGreg Roach     * @inheritDoc
499*9219296aSGreg Roach     */
500*9219296aSGreg Roach    public function totalRepositoriesPercentage(): string
501*9219296aSGreg Roach    {
502*9219296aSGreg Roach        return $this->individualRepository->totalRepositoriesPercentage();
503*9219296aSGreg Roach    }
504*9219296aSGreg Roach
505*9219296aSGreg Roach    /**
506*9219296aSGreg Roach     * @inheritDoc
507*9219296aSGreg Roach     */
508*9219296aSGreg Roach    public function totalSurnames(...$params): string
509*9219296aSGreg Roach    {
510*9219296aSGreg Roach        return $this->individualRepository->totalSurnames(...$params);
511*9219296aSGreg Roach    }
512*9219296aSGreg Roach
513*9219296aSGreg Roach    /**
514*9219296aSGreg Roach     * @inheritDoc
515*9219296aSGreg Roach     */
516*9219296aSGreg Roach    public function totalGivennames(...$params): string
517*9219296aSGreg Roach    {
518*9219296aSGreg Roach        return $this->individualRepository->totalGivennames(...$params);
519*9219296aSGreg Roach    }
520*9219296aSGreg Roach
521*9219296aSGreg Roach    /**
522*9219296aSGreg Roach     * @inheritDoc
523*9219296aSGreg Roach     */
524*9219296aSGreg Roach    public function totalEvents(array $events = []): string
525*9219296aSGreg Roach    {
526*9219296aSGreg Roach        return $this->eventRepository->totalEvents($events);
527*9219296aSGreg Roach    }
528*9219296aSGreg Roach
529*9219296aSGreg Roach    /**
530*9219296aSGreg Roach     * @inheritDoc
531*9219296aSGreg Roach     */
532*9219296aSGreg Roach    public function totalEventsBirth(): string
533*9219296aSGreg Roach    {
534*9219296aSGreg Roach        return $this->eventRepository->totalEventsBirth();
535*9219296aSGreg Roach    }
536*9219296aSGreg Roach
537*9219296aSGreg Roach    /**
538*9219296aSGreg Roach     * @inheritDoc
539*9219296aSGreg Roach     */
540*9219296aSGreg Roach    public function totalBirths(): string
541*9219296aSGreg Roach    {
542*9219296aSGreg Roach        return $this->eventRepository->totalBirths();
543*9219296aSGreg Roach    }
544*9219296aSGreg Roach
545*9219296aSGreg Roach    /**
546*9219296aSGreg Roach     * @inheritDoc
547*9219296aSGreg Roach     */
548*9219296aSGreg Roach    public function totalEventsDeath(): string
549*9219296aSGreg Roach    {
550*9219296aSGreg Roach        return $this->eventRepository->totalEventsDeath();
551*9219296aSGreg Roach    }
552*9219296aSGreg Roach
553*9219296aSGreg Roach    /**
554*9219296aSGreg Roach     * @inheritDoc
555*9219296aSGreg Roach     */
556*9219296aSGreg Roach    public function totalDeaths(): string
557*9219296aSGreg Roach    {
558*9219296aSGreg Roach        return $this->eventRepository->totalDeaths();
559*9219296aSGreg Roach    }
560*9219296aSGreg Roach
561*9219296aSGreg Roach    /**
562*9219296aSGreg Roach     * @inheritDoc
563*9219296aSGreg Roach     */
564*9219296aSGreg Roach    public function totalEventsMarriage(): string
565*9219296aSGreg Roach    {
566*9219296aSGreg Roach        return $this->eventRepository->totalEventsMarriage();
567*9219296aSGreg Roach    }
568*9219296aSGreg Roach
569*9219296aSGreg Roach    /**
570*9219296aSGreg Roach     * @inheritDoc
571*9219296aSGreg Roach     */
572*9219296aSGreg Roach    public function totalMarriages(): string
573*9219296aSGreg Roach    {
574*9219296aSGreg Roach        return $this->eventRepository->totalMarriages();
575*9219296aSGreg Roach    }
576*9219296aSGreg Roach
577*9219296aSGreg Roach    /**
578*9219296aSGreg Roach     * @inheritDoc
579*9219296aSGreg Roach     */
580*9219296aSGreg Roach    public function totalEventsDivorce(): string
581*9219296aSGreg Roach    {
582*9219296aSGreg Roach        return $this->eventRepository->totalEventsDivorce();
583*9219296aSGreg Roach    }
584*9219296aSGreg Roach
585*9219296aSGreg Roach    /**
586*9219296aSGreg Roach     * @inheritDoc
587*9219296aSGreg Roach     */
588*9219296aSGreg Roach    public function totalDivorces(): string
589*9219296aSGreg Roach    {
590*9219296aSGreg Roach        return $this->eventRepository->totalDivorces();
591*9219296aSGreg Roach    }
592*9219296aSGreg Roach
593*9219296aSGreg Roach    /**
594*9219296aSGreg Roach     * @inheritDoc
595*9219296aSGreg Roach     */
596*9219296aSGreg Roach    public function totalEventsOther(): string
597*9219296aSGreg Roach    {
598*9219296aSGreg Roach        return $this->eventRepository->totalEventsOther();
599*9219296aSGreg Roach    }
600*9219296aSGreg Roach
601*9219296aSGreg Roach    /**
602*9219296aSGreg Roach     * @inheritDoc
603*9219296aSGreg Roach     */
604*9219296aSGreg Roach    public function totalSexMales(): string
605*9219296aSGreg Roach    {
606*9219296aSGreg Roach        return $this->individualRepository->totalSexMales();
607*9219296aSGreg Roach    }
608*9219296aSGreg Roach
609*9219296aSGreg Roach    /**
610*9219296aSGreg Roach     * @inheritDoc
611*9219296aSGreg Roach     */
612*9219296aSGreg Roach    public function totalSexMalesPercentage(): string
613*9219296aSGreg Roach    {
614*9219296aSGreg Roach        return $this->individualRepository->totalSexMalesPercentage();
615*9219296aSGreg Roach    }
616*9219296aSGreg Roach
617*9219296aSGreg Roach    /**
618*9219296aSGreg Roach     * @inheritDoc
619*9219296aSGreg Roach     */
620*9219296aSGreg Roach    public function totalSexFemales(): string
621*9219296aSGreg Roach    {
622*9219296aSGreg Roach        return $this->individualRepository->totalSexFemales();
623*9219296aSGreg Roach    }
624*9219296aSGreg Roach
625*9219296aSGreg Roach    /**
626*9219296aSGreg Roach     * @inheritDoc
627*9219296aSGreg Roach     */
628*9219296aSGreg Roach    public function totalSexFemalesPercentage(): string
629*9219296aSGreg Roach    {
630*9219296aSGreg Roach        return $this->individualRepository->totalSexFemalesPercentage();
631*9219296aSGreg Roach    }
632*9219296aSGreg Roach
633*9219296aSGreg Roach    /**
634*9219296aSGreg Roach     * @inheritDoc
635*9219296aSGreg Roach     */
636*9219296aSGreg Roach    public function totalSexUnknown(): string
637*9219296aSGreg Roach    {
638*9219296aSGreg Roach        return $this->individualRepository->totalSexUnknown();
639*9219296aSGreg Roach    }
640*9219296aSGreg Roach
641*9219296aSGreg Roach    /**
642*9219296aSGreg Roach     * @inheritDoc
643*9219296aSGreg Roach     */
644*9219296aSGreg Roach    public function totalSexUnknownPercentage(): string
645*9219296aSGreg Roach    {
646*9219296aSGreg Roach        return $this->individualRepository->totalSexUnknownPercentage();
647*9219296aSGreg Roach    }
648*9219296aSGreg Roach
649*9219296aSGreg Roach    /**
650*9219296aSGreg Roach     * @inheritDoc
651*9219296aSGreg Roach     */
652*9219296aSGreg Roach    public function chartSex(
653*9219296aSGreg Roach        string $size = null,
654*9219296aSGreg Roach        string $color_female = null,
655*9219296aSGreg Roach        string $color_male = null,
656*9219296aSGreg Roach        string $color_unknown = null
657*9219296aSGreg Roach    ): string
658*9219296aSGreg Roach    {
659*9219296aSGreg Roach        return $this->individualRepository->chartSex($size, $color_female, $color_male, $color_unknown);
660*9219296aSGreg Roach    }
661*9219296aSGreg Roach
662*9219296aSGreg Roach    /**
663*9219296aSGreg Roach     * @inheritDoc
664*9219296aSGreg Roach     */
665*9219296aSGreg Roach    public function totalLiving(): string
666*9219296aSGreg Roach    {
667*9219296aSGreg Roach        return $this->individualRepository->totalLiving();
668*9219296aSGreg Roach    }
669*9219296aSGreg Roach
670*9219296aSGreg Roach    /**
671*9219296aSGreg Roach     * @inheritDoc
672*9219296aSGreg Roach     */
673*9219296aSGreg Roach    public function totalLivingPercentage(): string
674*9219296aSGreg Roach    {
675*9219296aSGreg Roach        return $this->individualRepository->totalLivingPercentage();
676*9219296aSGreg Roach    }
677*9219296aSGreg Roach
678*9219296aSGreg Roach    /**
679*9219296aSGreg Roach     * @inheritDoc
680*9219296aSGreg Roach     */
681*9219296aSGreg Roach    public function totalDeceased(): string
682*9219296aSGreg Roach    {
683*9219296aSGreg Roach        return $this->individualRepository->totalDeceased();
684*9219296aSGreg Roach    }
685*9219296aSGreg Roach
686*9219296aSGreg Roach    /**
687*9219296aSGreg Roach     * @inheritDoc
688*9219296aSGreg Roach     */
689*9219296aSGreg Roach    public function totalDeceasedPercentage(): string
690*9219296aSGreg Roach    {
691*9219296aSGreg Roach        return $this->individualRepository->totalDeceasedPercentage();
692*9219296aSGreg Roach    }
693*9219296aSGreg Roach
694*9219296aSGreg Roach    /**
695*9219296aSGreg Roach     * @inheritDoc
696*9219296aSGreg Roach     */
697*9219296aSGreg Roach    public function chartMortality(string $size = null, string $color_living = null, string $color_dead = null): string
698*9219296aSGreg Roach    {
699*9219296aSGreg Roach        return $this->individualRepository->chartMortality($size, $color_living, $color_dead);
700*9219296aSGreg Roach    }
701*9219296aSGreg Roach
702*9219296aSGreg Roach    /**
703*9219296aSGreg Roach     * @inheritDoc
704*9219296aSGreg Roach     */
705*9219296aSGreg Roach    public function totalMedia(): string
706*9219296aSGreg Roach    {
707*9219296aSGreg Roach        return $this->mediaRepository->totalMedia();
708*9219296aSGreg Roach    }
709*9219296aSGreg Roach
710*9219296aSGreg Roach    /**
711*9219296aSGreg Roach     * @inheritDoc
712*9219296aSGreg Roach     */
713*9219296aSGreg Roach    public function totalMediaAudio(): string
714*9219296aSGreg Roach    {
715*9219296aSGreg Roach        return $this->mediaRepository->totalMediaAudio();
716*9219296aSGreg Roach    }
717*9219296aSGreg Roach
718*9219296aSGreg Roach    /**
719*9219296aSGreg Roach     * @inheritDoc
720*9219296aSGreg Roach     */
721*9219296aSGreg Roach    public function totalMediaBook(): string
722*9219296aSGreg Roach    {
723*9219296aSGreg Roach        return $this->mediaRepository->totalMediaBook();
724*9219296aSGreg Roach    }
725*9219296aSGreg Roach
726*9219296aSGreg Roach    /**
727*9219296aSGreg Roach     * @inheritDoc
728*9219296aSGreg Roach     */
729*9219296aSGreg Roach    public function totalMediaCard(): string
730*9219296aSGreg Roach    {
731*9219296aSGreg Roach        return $this->mediaRepository->totalMediaCard();
732*9219296aSGreg Roach    }
733*9219296aSGreg Roach
734*9219296aSGreg Roach    /**
735*9219296aSGreg Roach     * @inheritDoc
736*9219296aSGreg Roach     */
737*9219296aSGreg Roach    public function totalMediaCertificate(): string
738*9219296aSGreg Roach    {
739*9219296aSGreg Roach        return $this->mediaRepository->totalMediaCertificate();
740*9219296aSGreg Roach    }
741*9219296aSGreg Roach
742*9219296aSGreg Roach    /**
743*9219296aSGreg Roach     * @inheritDoc
744*9219296aSGreg Roach     */
745*9219296aSGreg Roach    public function totalMediaCoatOfArms(): string
746*9219296aSGreg Roach    {
747*9219296aSGreg Roach        return $this->mediaRepository->totalMediaCoatOfArms();
748*9219296aSGreg Roach    }
749*9219296aSGreg Roach
750*9219296aSGreg Roach    /**
751*9219296aSGreg Roach     * @inheritDoc
752*9219296aSGreg Roach     */
753*9219296aSGreg Roach    public function totalMediaDocument(): string
754*9219296aSGreg Roach    {
755*9219296aSGreg Roach        return $this->mediaRepository->totalMediaDocument();
756*9219296aSGreg Roach    }
757*9219296aSGreg Roach
758*9219296aSGreg Roach    /**
759*9219296aSGreg Roach     * @inheritDoc
760*9219296aSGreg Roach     */
761*9219296aSGreg Roach    public function totalMediaElectronic(): string
762*9219296aSGreg Roach    {
763*9219296aSGreg Roach        return $this->mediaRepository->totalMediaElectronic();
764*9219296aSGreg Roach    }
765*9219296aSGreg Roach
766*9219296aSGreg Roach    /**
767*9219296aSGreg Roach     * @inheritDoc
768*9219296aSGreg Roach     */
769*9219296aSGreg Roach    public function totalMediaMagazine(): string
770*9219296aSGreg Roach    {
771*9219296aSGreg Roach        return $this->mediaRepository->totalMediaMagazine();
772*9219296aSGreg Roach    }
773*9219296aSGreg Roach
774*9219296aSGreg Roach    /**
775*9219296aSGreg Roach     * @inheritDoc
776*9219296aSGreg Roach     */
777*9219296aSGreg Roach    public function totalMediaManuscript(): string
778*9219296aSGreg Roach    {
779*9219296aSGreg Roach        return $this->mediaRepository->totalMediaManuscript();
780*9219296aSGreg Roach    }
781*9219296aSGreg Roach
782*9219296aSGreg Roach    /**
783*9219296aSGreg Roach     * @inheritDoc
784*9219296aSGreg Roach     */
785*9219296aSGreg Roach    public function totalMediaMap(): string
786*9219296aSGreg Roach    {
787*9219296aSGreg Roach        return $this->mediaRepository->totalMediaMap();
788*9219296aSGreg Roach    }
789*9219296aSGreg Roach
790*9219296aSGreg Roach    /**
791*9219296aSGreg Roach     * @inheritDoc
792*9219296aSGreg Roach     */
793*9219296aSGreg Roach    public function totalMediaFiche(): string
794*9219296aSGreg Roach    {
795*9219296aSGreg Roach        return $this->mediaRepository->totalMediaFiche();
796*9219296aSGreg Roach    }
797*9219296aSGreg Roach
798*9219296aSGreg Roach    /**
799*9219296aSGreg Roach     * @inheritDoc
800*9219296aSGreg Roach     */
801*9219296aSGreg Roach    public function totalMediaFilm(): string
802*9219296aSGreg Roach    {
803*9219296aSGreg Roach        return $this->mediaRepository->totalMediaFilm();
804*9219296aSGreg Roach    }
805*9219296aSGreg Roach
806*9219296aSGreg Roach    /**
807*9219296aSGreg Roach     * @inheritDoc
808*9219296aSGreg Roach     */
809*9219296aSGreg Roach    public function totalMediaNewspaper(): string
810*9219296aSGreg Roach    {
811*9219296aSGreg Roach        return $this->mediaRepository->totalMediaNewspaper();
812*9219296aSGreg Roach    }
813*9219296aSGreg Roach
814*9219296aSGreg Roach    /**
815*9219296aSGreg Roach     * @inheritDoc
816*9219296aSGreg Roach     */
817*9219296aSGreg Roach    public function totalMediaPainting(): string
818*9219296aSGreg Roach    {
819*9219296aSGreg Roach        return $this->mediaRepository->totalMediaPainting();
820*9219296aSGreg Roach    }
821*9219296aSGreg Roach
822*9219296aSGreg Roach    /**
823*9219296aSGreg Roach     * @inheritDoc
824*9219296aSGreg Roach     */
825*9219296aSGreg Roach    public function totalMediaPhoto(): string
826*9219296aSGreg Roach    {
827*9219296aSGreg Roach        return $this->mediaRepository->totalMediaPhoto();
828*9219296aSGreg Roach    }
829*9219296aSGreg Roach
830*9219296aSGreg Roach    /**
831*9219296aSGreg Roach     * @inheritDoc
832*9219296aSGreg Roach     */
833*9219296aSGreg Roach    public function totalMediaTombstone(): string
834*9219296aSGreg Roach    {
835*9219296aSGreg Roach        return $this->mediaRepository->totalMediaTombstone();
836*9219296aSGreg Roach    }
837*9219296aSGreg Roach
838*9219296aSGreg Roach    /**
839*9219296aSGreg Roach     * @inheritDoc
840*9219296aSGreg Roach     */
841*9219296aSGreg Roach    public function totalMediaVideo(): string
842*9219296aSGreg Roach    {
843*9219296aSGreg Roach        return $this->mediaRepository->totalMediaVideo();
844*9219296aSGreg Roach    }
845*9219296aSGreg Roach
846*9219296aSGreg Roach    /**
847*9219296aSGreg Roach     * @inheritDoc
848*9219296aSGreg Roach     */
849*9219296aSGreg Roach    public function totalMediaOther(): string
850*9219296aSGreg Roach    {
851*9219296aSGreg Roach        return $this->mediaRepository->totalMediaOther();
852*9219296aSGreg Roach    }
853*9219296aSGreg Roach
854*9219296aSGreg Roach    /**
855*9219296aSGreg Roach     * @inheritDoc
856*9219296aSGreg Roach     */
857*9219296aSGreg Roach    public function totalMediaUnknown(): string
858*9219296aSGreg Roach    {
859*9219296aSGreg Roach        return $this->mediaRepository->totalMediaUnknown();
860*9219296aSGreg Roach    }
861*9219296aSGreg Roach
862*9219296aSGreg Roach    /**
863*9219296aSGreg Roach     * @inheritDoc
864*9219296aSGreg Roach     */
865*9219296aSGreg Roach    public function chartMedia(string $size = null, string $color_from = null, string $color_to = null): string
866*9219296aSGreg Roach    {
867*9219296aSGreg Roach        return $this->mediaRepository->chartMedia($size, $color_from, $color_to);
868*9219296aSGreg Roach    }
869*9219296aSGreg Roach
870*9219296aSGreg Roach    /**
871*9219296aSGreg Roach     * @inheritDoc
872*9219296aSGreg Roach     */
873*9219296aSGreg Roach    public function statsPlaces(string $what = 'ALL', string $fact = '', int $parent = 0, bool $country = false): array
874*9219296aSGreg Roach    {
875*9219296aSGreg Roach        return $this->placeRepository->statsPlaces($what, $fact, $parent, $country);
876*9219296aSGreg Roach    }
877*9219296aSGreg Roach
878*9219296aSGreg Roach    /**
879*9219296aSGreg Roach     * @inheritDoc
880*9219296aSGreg Roach     */
881*9219296aSGreg Roach    public function totalPlaces(): string
882*9219296aSGreg Roach    {
883*9219296aSGreg Roach        return $this->placeRepository->totalPlaces();
884*9219296aSGreg Roach    }
885*9219296aSGreg Roach
886*9219296aSGreg Roach    /**
887*9219296aSGreg Roach     * @inheritDoc
888*9219296aSGreg Roach     */
889*9219296aSGreg Roach    public function chartDistribution(
890*9219296aSGreg Roach        string $chart_shows = 'world',
891*9219296aSGreg Roach        string $chart_type = '',
892*9219296aSGreg Roach        string $surname = ''
893*9219296aSGreg Roach    ): string
894*9219296aSGreg Roach    {
895*9219296aSGreg Roach        return $this->placeRepository->chartDistribution($chart_shows, $chart_type, $surname);
896*9219296aSGreg Roach    }
897*9219296aSGreg Roach
898*9219296aSGreg Roach    /**
899*9219296aSGreg Roach     * @inheritDoc
900*9219296aSGreg Roach     */
901*9219296aSGreg Roach    public function commonCountriesList(): string
902*9219296aSGreg Roach    {
903*9219296aSGreg Roach        return $this->placeRepository->commonCountriesList();
904*9219296aSGreg Roach    }
905*9219296aSGreg Roach
906*9219296aSGreg Roach    /**
907*9219296aSGreg Roach     * @inheritDoc
908*9219296aSGreg Roach     */
909*9219296aSGreg Roach    public function commonBirthPlacesList(): string
910*9219296aSGreg Roach    {
911*9219296aSGreg Roach        return $this->placeRepository->commonBirthPlacesList();
912*9219296aSGreg Roach    }
913*9219296aSGreg Roach
914*9219296aSGreg Roach    /**
915*9219296aSGreg Roach     * @inheritDoc
916*9219296aSGreg Roach     */
917*9219296aSGreg Roach    public function commonDeathPlacesList(): string
918*9219296aSGreg Roach    {
919*9219296aSGreg Roach        return $this->placeRepository->commonDeathPlacesList();
920*9219296aSGreg Roach    }
921*9219296aSGreg Roach
922*9219296aSGreg Roach    /**
923*9219296aSGreg Roach     * @inheritDoc
924*9219296aSGreg Roach     */
925*9219296aSGreg Roach    public function commonMarriagePlacesList(): string
926*9219296aSGreg Roach    {
927*9219296aSGreg Roach        return $this->placeRepository->commonMarriagePlacesList();
928*9219296aSGreg Roach    }
929*9219296aSGreg Roach
930*9219296aSGreg Roach    /**
931*9219296aSGreg Roach     * @inheritDoc
932*9219296aSGreg Roach     */
933*9219296aSGreg Roach    public function firstBirth(): string
934*9219296aSGreg Roach    {
935*9219296aSGreg Roach        return $this->familyDatesRepository->firstBirth();
936*9219296aSGreg Roach    }
937*9219296aSGreg Roach
938*9219296aSGreg Roach    /**
939*9219296aSGreg Roach     * @inheritDoc
940*9219296aSGreg Roach     */
941*9219296aSGreg Roach    public function firstBirthYear(): string
942*9219296aSGreg Roach    {
943*9219296aSGreg Roach        return $this->familyDatesRepository->firstBirthYear();
944*9219296aSGreg Roach    }
945*9219296aSGreg Roach
946*9219296aSGreg Roach    /**
947*9219296aSGreg Roach     * @inheritDoc
948*9219296aSGreg Roach     */
949*9219296aSGreg Roach    public function firstBirthName(): string
950*9219296aSGreg Roach    {
951*9219296aSGreg Roach        return $this->familyDatesRepository->firstBirthName();
952*9219296aSGreg Roach    }
953*9219296aSGreg Roach
954*9219296aSGreg Roach    /**
955*9219296aSGreg Roach     * @inheritDoc
956*9219296aSGreg Roach     */
957*9219296aSGreg Roach    public function firstBirthPlace(): string
958*9219296aSGreg Roach    {
959*9219296aSGreg Roach        return $this->familyDatesRepository->firstBirthPlace();
960*9219296aSGreg Roach    }
961*9219296aSGreg Roach
962*9219296aSGreg Roach    /**
963*9219296aSGreg Roach     * @inheritDoc
964*9219296aSGreg Roach     */
965*9219296aSGreg Roach    public function lastBirth(): string
966*9219296aSGreg Roach    {
967*9219296aSGreg Roach        return $this->familyDatesRepository->lastBirth();
968*9219296aSGreg Roach    }
969*9219296aSGreg Roach
970*9219296aSGreg Roach    /**
971*9219296aSGreg Roach     * @inheritDoc
972*9219296aSGreg Roach     */
973*9219296aSGreg Roach    public function lastBirthYear(): string
974*9219296aSGreg Roach    {
975*9219296aSGreg Roach        return $this->familyDatesRepository->lastBirthYear();
976*9219296aSGreg Roach    }
977*9219296aSGreg Roach
978*9219296aSGreg Roach    /**
979*9219296aSGreg Roach     * @inheritDoc
980*9219296aSGreg Roach     */
981*9219296aSGreg Roach    public function lastBirthName(): string
982*9219296aSGreg Roach    {
983*9219296aSGreg Roach        return $this->familyDatesRepository->lastBirthName();
984*9219296aSGreg Roach    }
985*9219296aSGreg Roach
986*9219296aSGreg Roach    /**
987*9219296aSGreg Roach     * @inheritDoc
988*9219296aSGreg Roach     */
989*9219296aSGreg Roach    public function lastBirthPlace(): string
990*9219296aSGreg Roach    {
991*9219296aSGreg Roach        return $this->familyDatesRepository->lastBirthPlace();
992*9219296aSGreg Roach    }
993*9219296aSGreg Roach
994*9219296aSGreg Roach    /**
995*9219296aSGreg Roach     * @inheritDoc
996*9219296aSGreg Roach     */
997*9219296aSGreg Roach    public function statsBirthQuery(bool $sex = false, int $year1 = -1, int $year2 = -1): array
998*9219296aSGreg Roach    {
999*9219296aSGreg Roach        return $this->individualRepository->statsBirthQuery($sex, $year1, $year2);
1000*9219296aSGreg Roach    }
1001*9219296aSGreg Roach
1002*9219296aSGreg Roach    /**
1003*9219296aSGreg Roach     * @inheritDoc
1004*9219296aSGreg Roach     */
1005*9219296aSGreg Roach    public function statsBirth(string $size = null, string $color_from = null, string $color_to = null): string
1006*9219296aSGreg Roach    {
1007*9219296aSGreg Roach        return $this->individualRepository->statsBirth($size, $color_from, $color_to);
1008*9219296aSGreg Roach    }
1009*9219296aSGreg Roach
1010*9219296aSGreg Roach    /**
1011*9219296aSGreg Roach     * @inheritDoc
1012*9219296aSGreg Roach     */
1013*9219296aSGreg Roach    public function firstDeath(): string
1014*9219296aSGreg Roach    {
1015*9219296aSGreg Roach        return $this->familyDatesRepository->firstDeath();
1016*9219296aSGreg Roach    }
1017*9219296aSGreg Roach
1018*9219296aSGreg Roach    /**
1019*9219296aSGreg Roach     * @inheritDoc
1020*9219296aSGreg Roach     */
1021*9219296aSGreg Roach    public function firstDeathYear(): string
1022*9219296aSGreg Roach    {
1023*9219296aSGreg Roach        return $this->familyDatesRepository->firstDeathYear();
1024*9219296aSGreg Roach    }
1025*9219296aSGreg Roach
1026*9219296aSGreg Roach    /**
1027*9219296aSGreg Roach     * @inheritDoc
1028*9219296aSGreg Roach     */
1029*9219296aSGreg Roach    public function firstDeathName(): string
1030*9219296aSGreg Roach    {
1031*9219296aSGreg Roach        return $this->familyDatesRepository->firstDeathName();
1032*9219296aSGreg Roach    }
1033*9219296aSGreg Roach
1034*9219296aSGreg Roach    /**
1035*9219296aSGreg Roach     * @inheritDoc
1036*9219296aSGreg Roach     */
1037*9219296aSGreg Roach    public function firstDeathPlace(): string
1038*9219296aSGreg Roach    {
1039*9219296aSGreg Roach        return $this->familyDatesRepository->firstDeathPlace();
1040*9219296aSGreg Roach    }
1041*9219296aSGreg Roach
1042*9219296aSGreg Roach    /**
1043*9219296aSGreg Roach     * @inheritDoc
1044*9219296aSGreg Roach     */
1045*9219296aSGreg Roach    public function lastDeath(): string
1046*9219296aSGreg Roach    {
1047*9219296aSGreg Roach        return $this->familyDatesRepository->lastDeath();
1048*9219296aSGreg Roach    }
1049*9219296aSGreg Roach
1050*9219296aSGreg Roach    /**
1051*9219296aSGreg Roach     * @inheritDoc
1052*9219296aSGreg Roach     */
1053*9219296aSGreg Roach    public function lastDeathYear(): string
1054*9219296aSGreg Roach    {
1055*9219296aSGreg Roach        return $this->familyDatesRepository->lastDeathYear();
1056*9219296aSGreg Roach    }
1057*9219296aSGreg Roach
1058*9219296aSGreg Roach    /**
1059*9219296aSGreg Roach     * @inheritDoc
1060*9219296aSGreg Roach     */
1061*9219296aSGreg Roach    public function lastDeathName(): string
1062*9219296aSGreg Roach    {
1063*9219296aSGreg Roach        return $this->familyDatesRepository->lastDeathName();
1064*9219296aSGreg Roach    }
1065*9219296aSGreg Roach
1066*9219296aSGreg Roach    /**
1067*9219296aSGreg Roach     * @inheritDoc
1068*9219296aSGreg Roach     */
1069*9219296aSGreg Roach    public function lastDeathPlace(): string
1070*9219296aSGreg Roach    {
1071*9219296aSGreg Roach        return $this->familyDatesRepository->lastDeathPlace();
1072*9219296aSGreg Roach    }
1073*9219296aSGreg Roach
1074*9219296aSGreg Roach    /**
1075*9219296aSGreg Roach     * @inheritDoc
1076*9219296aSGreg Roach     */
1077*9219296aSGreg Roach    public function statsDeathQuery(bool $sex = false, int $year1 = -1, int $year2 = -1): array
1078*9219296aSGreg Roach    {
1079*9219296aSGreg Roach        return $this->individualRepository->statsDeathQuery($sex, $year1, $year2);
1080*9219296aSGreg Roach    }
1081*9219296aSGreg Roach
1082*9219296aSGreg Roach    /**
1083*9219296aSGreg Roach     * @inheritDoc
1084*9219296aSGreg Roach     */
1085*9219296aSGreg Roach    public function statsDeath(string $size = null, string $color_from = null, string $color_to = null): string
1086*9219296aSGreg Roach    {
1087*9219296aSGreg Roach        return $this->individualRepository->statsDeath($size, $color_from, $color_to);
1088*9219296aSGreg Roach    }
1089*9219296aSGreg Roach
1090*9219296aSGreg Roach    /**
1091*9219296aSGreg Roach     * @inheritDoc
1092*9219296aSGreg Roach     */
1093*9219296aSGreg Roach    public function statsAgeQuery(string $related = 'BIRT', string $sex = 'BOTH', int $year1 = -1, int $year2 = -1)
1094*9219296aSGreg Roach    {
1095*9219296aSGreg Roach        return $this->individualRepository->statsAgeQuery($related, $sex, $year1, $year2);
1096*9219296aSGreg Roach    }
1097*9219296aSGreg Roach
1098*9219296aSGreg Roach    /**
1099*9219296aSGreg Roach     * @inheritDoc
1100*9219296aSGreg Roach     */
1101*9219296aSGreg Roach    public function statsAge(string $size = '230x250'): string
1102*9219296aSGreg Roach    {
1103*9219296aSGreg Roach        return $this->individualRepository->statsAge($size);
1104*9219296aSGreg Roach    }
1105*9219296aSGreg Roach
1106*9219296aSGreg Roach    /**
1107*9219296aSGreg Roach     * @inheritDoc
1108*9219296aSGreg Roach     */
1109*9219296aSGreg Roach    public function longestLife(): string
1110*9219296aSGreg Roach    {
1111*9219296aSGreg Roach        return $this->individualRepository->longestLife();
1112*9219296aSGreg Roach    }
1113*9219296aSGreg Roach
1114*9219296aSGreg Roach    /**
1115*9219296aSGreg Roach     * @inheritDoc
1116*9219296aSGreg Roach     */
1117*9219296aSGreg Roach    public function longestLifeAge(): string
1118*9219296aSGreg Roach    {
1119*9219296aSGreg Roach        return $this->individualRepository->longestLifeAge();
1120*9219296aSGreg Roach    }
1121*9219296aSGreg Roach
1122*9219296aSGreg Roach    /**
1123*9219296aSGreg Roach     * @inheritDoc
1124*9219296aSGreg Roach     */
1125*9219296aSGreg Roach    public function longestLifeName(): string
1126*9219296aSGreg Roach    {
1127*9219296aSGreg Roach        return $this->individualRepository->longestLifeName();
1128*9219296aSGreg Roach    }
1129*9219296aSGreg Roach
1130*9219296aSGreg Roach    /**
1131*9219296aSGreg Roach     * @inheritDoc
1132*9219296aSGreg Roach     */
1133*9219296aSGreg Roach    public function longestLifeFemale(): string
1134*9219296aSGreg Roach    {
1135*9219296aSGreg Roach        return $this->individualRepository->longestLifeFemale();
1136*9219296aSGreg Roach    }
1137*9219296aSGreg Roach
1138*9219296aSGreg Roach    /**
1139*9219296aSGreg Roach     * @inheritDoc
1140*9219296aSGreg Roach     */
1141*9219296aSGreg Roach    public function longestLifeFemaleAge(): string
1142*9219296aSGreg Roach    {
1143*9219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleAge();
1144*9219296aSGreg Roach    }
1145*9219296aSGreg Roach
1146*9219296aSGreg Roach    /**
1147*9219296aSGreg Roach     * @inheritDoc
1148*9219296aSGreg Roach     */
1149*9219296aSGreg Roach    public function longestLifeFemaleName(): string
1150*9219296aSGreg Roach    {
1151*9219296aSGreg Roach        return $this->individualRepository->longestLifeFemaleName();
1152*9219296aSGreg Roach    }
1153*9219296aSGreg Roach
1154*9219296aSGreg Roach    /**
1155*9219296aSGreg Roach     * @inheritDoc
1156*9219296aSGreg Roach     */
1157*9219296aSGreg Roach    public function longestLifeMale(): string
1158*9219296aSGreg Roach    {
1159*9219296aSGreg Roach        return $this->individualRepository->longestLifeMale();
1160*9219296aSGreg Roach    }
1161*9219296aSGreg Roach
1162*9219296aSGreg Roach    /**
1163*9219296aSGreg Roach     * @inheritDoc
1164*9219296aSGreg Roach     */
1165*9219296aSGreg Roach    public function longestLifeMaleAge(): string
1166*9219296aSGreg Roach    {
1167*9219296aSGreg Roach        return $this->individualRepository->longestLifeMaleAge();
1168*9219296aSGreg Roach    }
1169*9219296aSGreg Roach
1170*9219296aSGreg Roach    /**
1171*9219296aSGreg Roach     * @inheritDoc
1172*9219296aSGreg Roach     */
1173*9219296aSGreg Roach    public function longestLifeMaleName(): string
1174*9219296aSGreg Roach    {
1175*9219296aSGreg Roach        return $this->individualRepository->longestLifeMaleName();
1176*9219296aSGreg Roach    }
1177*9219296aSGreg Roach
1178*9219296aSGreg Roach    /**
1179*9219296aSGreg Roach     * @inheritDoc
1180*9219296aSGreg Roach     */
1181*9219296aSGreg Roach    public function topTenOldest(string $total = '10'): string
1182*9219296aSGreg Roach    {
1183*9219296aSGreg Roach        return $this->individualRepository->topTenOldest((int) $total);
1184*9219296aSGreg Roach    }
1185*9219296aSGreg Roach
1186*9219296aSGreg Roach    /**
1187*9219296aSGreg Roach     * @inheritDoc
1188*9219296aSGreg Roach     */
1189*9219296aSGreg Roach    public function topTenOldestList(string $total = '10'): string
1190*9219296aSGreg Roach    {
1191*9219296aSGreg Roach        return $this->individualRepository->topTenOldestList((int) $total);
1192*9219296aSGreg Roach    }
1193*9219296aSGreg Roach
1194*9219296aSGreg Roach    /**
1195*9219296aSGreg Roach     * @inheritDoc
1196*9219296aSGreg Roach     */
1197*9219296aSGreg Roach    public function topTenOldestFemale(string $total = '10'): string
1198*9219296aSGreg Roach    {
1199*9219296aSGreg Roach        return $this->individualRepository->topTenOldestFemale((int) $total);
1200*9219296aSGreg Roach    }
1201*9219296aSGreg Roach
1202*9219296aSGreg Roach    /**
1203*9219296aSGreg Roach     * @inheritDoc
1204*9219296aSGreg Roach     */
1205*9219296aSGreg Roach    public function topTenOldestFemaleList(string $total = '10'): string
1206*9219296aSGreg Roach    {
1207*9219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleList((int) $total);
1208*9219296aSGreg Roach    }
1209*9219296aSGreg Roach
1210*9219296aSGreg Roach    /**
1211*9219296aSGreg Roach     * @inheritDoc
1212*9219296aSGreg Roach     */
1213*9219296aSGreg Roach    public function topTenOldestMale(string $total = '10'): string
1214*9219296aSGreg Roach    {
1215*9219296aSGreg Roach        return $this->individualRepository->topTenOldestMale((int) $total);
1216*9219296aSGreg Roach    }
1217*9219296aSGreg Roach
1218*9219296aSGreg Roach    /**
1219*9219296aSGreg Roach     * @inheritDoc
1220*9219296aSGreg Roach     */
1221*9219296aSGreg Roach    public function topTenOldestMaleList(string $total = '10'): string
1222*9219296aSGreg Roach    {
1223*9219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleList((int) $total);
1224*9219296aSGreg Roach    }
1225*9219296aSGreg Roach
1226*9219296aSGreg Roach    /**
1227*9219296aSGreg Roach     * @inheritDoc
1228*9219296aSGreg Roach     */
1229*9219296aSGreg Roach    public function topTenOldestAlive(string $total = '10'): string
1230*9219296aSGreg Roach    {
1231*9219296aSGreg Roach        return $this->individualRepository->topTenOldestAlive((int) $total);
1232*9219296aSGreg Roach    }
1233*9219296aSGreg Roach
1234*9219296aSGreg Roach    /**
1235*9219296aSGreg Roach     * @inheritDoc
1236*9219296aSGreg Roach     */
1237*9219296aSGreg Roach    public function topTenOldestListAlive(string $total = '10'): string
1238*9219296aSGreg Roach    {
1239*9219296aSGreg Roach        return $this->individualRepository->topTenOldestListAlive((int) $total);
1240*9219296aSGreg Roach    }
1241*9219296aSGreg Roach
1242*9219296aSGreg Roach    /**
1243*9219296aSGreg Roach     * @inheritDoc
1244*9219296aSGreg Roach     */
1245*9219296aSGreg Roach    public function topTenOldestFemaleAlive(string $total = '10'): string
1246*9219296aSGreg Roach    {
1247*9219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleAlive((int) $total);
1248*9219296aSGreg Roach    }
1249*9219296aSGreg Roach
1250*9219296aSGreg Roach    /**
1251*9219296aSGreg Roach     * @inheritDoc
1252*9219296aSGreg Roach     */
1253*9219296aSGreg Roach    public function topTenOldestFemaleListAlive(string $total = '10'): string
1254*9219296aSGreg Roach    {
1255*9219296aSGreg Roach        return $this->individualRepository->topTenOldestFemaleListAlive((int) $total);
1256*9219296aSGreg Roach    }
1257*9219296aSGreg Roach
1258*9219296aSGreg Roach    /**
1259*9219296aSGreg Roach     * @inheritDoc
1260*9219296aSGreg Roach     */
1261*9219296aSGreg Roach    public function topTenOldestMaleAlive(string $total = '10'): string
1262*9219296aSGreg Roach    {
1263*9219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleAlive((int) $total);
1264*9219296aSGreg Roach    }
1265*9219296aSGreg Roach
1266*9219296aSGreg Roach    /**
1267*9219296aSGreg Roach     * @inheritDoc
1268*9219296aSGreg Roach     */
1269*9219296aSGreg Roach    public function topTenOldestMaleListAlive(string $total = '10'): string
1270*9219296aSGreg Roach    {
1271*9219296aSGreg Roach        return $this->individualRepository->topTenOldestMaleListAlive((int) $total);
1272*9219296aSGreg Roach    }
1273*9219296aSGreg Roach
1274*9219296aSGreg Roach    /**
1275*9219296aSGreg Roach     * @inheritDoc
1276*9219296aSGreg Roach     */
1277*9219296aSGreg Roach    public function averageLifespan(bool $show_years = false): string
1278*9219296aSGreg Roach    {
1279*9219296aSGreg Roach        return $this->individualRepository->averageLifespan($show_years);
1280*9219296aSGreg Roach    }
1281*9219296aSGreg Roach
1282*9219296aSGreg Roach    /**
1283*9219296aSGreg Roach     * @inheritDoc
1284*9219296aSGreg Roach     */
1285*9219296aSGreg Roach    public function averageLifespanFemale(bool $show_years = false): string
1286*9219296aSGreg Roach    {
1287*9219296aSGreg Roach        return $this->individualRepository->averageLifespanFemale($show_years);
1288*9219296aSGreg Roach    }
1289*9219296aSGreg Roach
1290*9219296aSGreg Roach    /**
1291*9219296aSGreg Roach     * @inheritDoc
1292*9219296aSGreg Roach     */
1293*9219296aSGreg Roach    public function averageLifespanMale(bool $show_years = false): string
1294*9219296aSGreg Roach    {
1295*9219296aSGreg Roach        return $this->individualRepository->averageLifespanMale($show_years);
1296*9219296aSGreg Roach    }
1297*9219296aSGreg Roach
1298*9219296aSGreg Roach    /**
1299*9219296aSGreg Roach     * @inheritDoc
1300*9219296aSGreg Roach     */
1301*9219296aSGreg Roach    public function firstEvent(): string
1302*9219296aSGreg Roach    {
1303*9219296aSGreg Roach        return $this->eventRepository->firstEvent();
1304*9219296aSGreg Roach    }
1305*9219296aSGreg Roach
1306*9219296aSGreg Roach    /**
1307*9219296aSGreg Roach     * @inheritDoc
1308*9219296aSGreg Roach     */
1309*9219296aSGreg Roach    public function firstEventYear(): string
1310*9219296aSGreg Roach    {
1311*9219296aSGreg Roach        return $this->eventRepository->firstEventYear();
1312*9219296aSGreg Roach    }
1313*9219296aSGreg Roach
1314*9219296aSGreg Roach    /**
1315*9219296aSGreg Roach     * @inheritDoc
1316*9219296aSGreg Roach     */
1317*9219296aSGreg Roach    public function firstEventType(): string
1318*9219296aSGreg Roach    {
1319*9219296aSGreg Roach        return $this->eventRepository->firstEventType();
1320*9219296aSGreg Roach    }
1321*9219296aSGreg Roach
1322*9219296aSGreg Roach    /**
1323*9219296aSGreg Roach     * @inheritDoc
1324*9219296aSGreg Roach     */
1325*9219296aSGreg Roach    public function firstEventName(): string
1326*9219296aSGreg Roach    {
1327*9219296aSGreg Roach        return $this->eventRepository->firstEventName();
1328*9219296aSGreg Roach    }
1329*9219296aSGreg Roach
1330*9219296aSGreg Roach    /**
1331*9219296aSGreg Roach     * @inheritDoc
1332*9219296aSGreg Roach     */
1333*9219296aSGreg Roach    public function firstEventPlace(): string
1334*9219296aSGreg Roach    {
1335*9219296aSGreg Roach        return $this->eventRepository->firstEventPlace();
1336*9219296aSGreg Roach    }
1337*9219296aSGreg Roach
1338*9219296aSGreg Roach    /**
1339*9219296aSGreg Roach     * @inheritDoc
1340*9219296aSGreg Roach     */
1341*9219296aSGreg Roach    public function lastEvent(): string
1342*9219296aSGreg Roach    {
1343*9219296aSGreg Roach        return $this->eventRepository->lastEvent();
1344*9219296aSGreg Roach    }
1345*9219296aSGreg Roach
1346*9219296aSGreg Roach    /**
1347*9219296aSGreg Roach     * @inheritDoc
1348*9219296aSGreg Roach     */
1349*9219296aSGreg Roach    public function lastEventYear(): string
1350*9219296aSGreg Roach    {
1351*9219296aSGreg Roach        return $this->eventRepository->lastEventYear();
1352*9219296aSGreg Roach    }
1353*9219296aSGreg Roach
1354*9219296aSGreg Roach    /**
1355*9219296aSGreg Roach     * @inheritDoc
1356*9219296aSGreg Roach     */
1357*9219296aSGreg Roach    public function lastEventType(): string
1358*9219296aSGreg Roach    {
1359*9219296aSGreg Roach        return $this->eventRepository->lastEventType();
1360*9219296aSGreg Roach    }
1361*9219296aSGreg Roach
1362*9219296aSGreg Roach    /**
1363*9219296aSGreg Roach     * @inheritDoc
1364*9219296aSGreg Roach     */
1365*9219296aSGreg Roach    public function lastEventName(): string
1366*9219296aSGreg Roach    {
1367*9219296aSGreg Roach        return $this->eventRepository->lastEventName();
1368*9219296aSGreg Roach    }
1369*9219296aSGreg Roach
1370*9219296aSGreg Roach    /**
1371*9219296aSGreg Roach     * @inheritDoc
1372*9219296aSGreg Roach     */
1373*9219296aSGreg Roach    public function lastEventPlace(): string
1374*9219296aSGreg Roach    {
1375*9219296aSGreg Roach        return $this->eventRepository->lastEventType();
1376*9219296aSGreg Roach    }
1377*9219296aSGreg Roach
1378*9219296aSGreg Roach    /**
1379*9219296aSGreg Roach     * @inheritDoc
1380*9219296aSGreg Roach     */
1381*9219296aSGreg Roach    public function firstMarriage(): string
1382*9219296aSGreg Roach    {
1383*9219296aSGreg Roach        return $this->familyDatesRepository->firstMarriage();
1384*9219296aSGreg Roach    }
1385*9219296aSGreg Roach
1386*9219296aSGreg Roach    /**
1387*9219296aSGreg Roach     * @inheritDoc
1388*9219296aSGreg Roach     */
1389*9219296aSGreg Roach    public function firstMarriageYear(): string
1390*9219296aSGreg Roach    {
1391*9219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageYear();
1392*9219296aSGreg Roach    }
1393*9219296aSGreg Roach
1394*9219296aSGreg Roach    /**
1395*9219296aSGreg Roach     * @inheritDoc
1396*9219296aSGreg Roach     */
1397*9219296aSGreg Roach    public function firstMarriageName(): string
1398*9219296aSGreg Roach    {
1399*9219296aSGreg Roach        return $this->familyDatesRepository->firstMarriageName();
1400*9219296aSGreg Roach    }
1401*9219296aSGreg Roach
1402*9219296aSGreg Roach    /**
1403*9219296aSGreg Roach     * @inheritDoc
1404*9219296aSGreg Roach     */
1405*9219296aSGreg Roach    public function firstMarriagePlace(): string
1406*9219296aSGreg Roach    {
1407*9219296aSGreg Roach        return $this->familyDatesRepository->firstMarriagePlace();
1408*9219296aSGreg Roach    }
1409*9219296aSGreg Roach
1410*9219296aSGreg Roach    /**
1411*9219296aSGreg Roach     * @inheritDoc
1412*9219296aSGreg Roach     */
1413*9219296aSGreg Roach    public function lastMarriage(): string
1414*9219296aSGreg Roach    {
1415*9219296aSGreg Roach        return $this->familyDatesRepository->lastMarriage();
1416*9219296aSGreg Roach    }
1417*9219296aSGreg Roach
1418*9219296aSGreg Roach    /**
1419*9219296aSGreg Roach     * @inheritDoc
1420*9219296aSGreg Roach     */
1421*9219296aSGreg Roach    public function lastMarriageYear(): string
1422*9219296aSGreg Roach    {
1423*9219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageYear();
1424*9219296aSGreg Roach    }
1425*9219296aSGreg Roach
1426*9219296aSGreg Roach    /**
1427*9219296aSGreg Roach     * @inheritDoc
1428*9219296aSGreg Roach     */
1429*9219296aSGreg Roach    public function lastMarriageName(): string
1430*9219296aSGreg Roach    {
1431*9219296aSGreg Roach        return $this->familyDatesRepository->lastMarriageName();
1432*9219296aSGreg Roach    }
1433*9219296aSGreg Roach
1434*9219296aSGreg Roach    /**
1435*9219296aSGreg Roach     * @inheritDoc
1436*9219296aSGreg Roach     */
1437*9219296aSGreg Roach    public function lastMarriagePlace(): string
1438*9219296aSGreg Roach    {
1439*9219296aSGreg Roach        return $this->familyDatesRepository->lastMarriagePlace();
1440*9219296aSGreg Roach    }
1441*9219296aSGreg Roach
1442*9219296aSGreg Roach    /**
1443*9219296aSGreg Roach     * @inheritDoc
1444*9219296aSGreg Roach     */
1445*9219296aSGreg Roach    public function statsMarrQuery(bool $first = false, int $year1 = -1, int $year2 = -1): array
1446*9219296aSGreg Roach    {
1447*9219296aSGreg Roach        return $this->familyRepository->statsMarrQuery($first, $year1, $year2);
1448*9219296aSGreg Roach    }
1449*9219296aSGreg Roach
1450*9219296aSGreg Roach    /**
1451*9219296aSGreg Roach     * @inheritDoc
1452*9219296aSGreg Roach     */
1453*9219296aSGreg Roach    public function statsMarr(string $size = null, string $color_from = null, string $color_to = null): string
1454*9219296aSGreg Roach    {
1455*9219296aSGreg Roach        return $this->familyRepository->statsMarr($size, $color_from, $color_to);
1456*9219296aSGreg Roach    }
1457*9219296aSGreg Roach
1458*9219296aSGreg Roach    /**
1459*9219296aSGreg Roach     * @inheritDoc
1460*9219296aSGreg Roach     */
1461*9219296aSGreg Roach    public function firstDivorce(): string
1462*9219296aSGreg Roach    {
1463*9219296aSGreg Roach        return $this->familyDatesRepository->firstDivorce();
1464*9219296aSGreg Roach    }
1465*9219296aSGreg Roach
1466*9219296aSGreg Roach    /**
1467*9219296aSGreg Roach     * @inheritDoc
1468*9219296aSGreg Roach     */
1469*9219296aSGreg Roach    public function firstDivorceYear(): string
1470*9219296aSGreg Roach    {
1471*9219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceYear();
1472*9219296aSGreg Roach    }
1473*9219296aSGreg Roach
1474*9219296aSGreg Roach    /**
1475*9219296aSGreg Roach     * @inheritDoc
1476*9219296aSGreg Roach     */
1477*9219296aSGreg Roach    public function firstDivorceName(): string
1478*9219296aSGreg Roach    {
1479*9219296aSGreg Roach        return $this->familyDatesRepository->firstDivorceName();
1480*9219296aSGreg Roach    }
1481*9219296aSGreg Roach
1482*9219296aSGreg Roach    /**
1483*9219296aSGreg Roach     * @inheritDoc
1484*9219296aSGreg Roach     */
1485*9219296aSGreg Roach    public function firstDivorcePlace(): string
1486*9219296aSGreg Roach    {
1487*9219296aSGreg Roach        return $this->familyDatesRepository->firstDivorcePlace();
1488*9219296aSGreg Roach    }
1489*9219296aSGreg Roach
1490*9219296aSGreg Roach    /**
1491*9219296aSGreg Roach     * @inheritDoc
1492*9219296aSGreg Roach     */
1493*9219296aSGreg Roach    public function lastDivorce(): string
1494*9219296aSGreg Roach    {
1495*9219296aSGreg Roach        return $this->familyDatesRepository->lastDivorce();
1496*9219296aSGreg Roach    }
1497*9219296aSGreg Roach
1498*9219296aSGreg Roach    /**
1499*9219296aSGreg Roach     * @inheritDoc
1500*9219296aSGreg Roach     */
1501*9219296aSGreg Roach    public function lastDivorceYear(): string
1502*9219296aSGreg Roach    {
1503*9219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceYear();
1504*9219296aSGreg Roach    }
1505*9219296aSGreg Roach
1506*9219296aSGreg Roach    /**
1507*9219296aSGreg Roach     * @inheritDoc
1508*9219296aSGreg Roach     */
1509*9219296aSGreg Roach    public function lastDivorceName(): string
1510*9219296aSGreg Roach    {
1511*9219296aSGreg Roach        return $this->familyDatesRepository->lastDivorceName();
1512*9219296aSGreg Roach    }
1513*9219296aSGreg Roach
1514*9219296aSGreg Roach    /**
1515*9219296aSGreg Roach     * @inheritDoc
1516*9219296aSGreg Roach     */
1517*9219296aSGreg Roach    public function lastDivorcePlace(): string
1518*9219296aSGreg Roach    {
1519*9219296aSGreg Roach        return $this->familyDatesRepository->lastDivorcePlace();
1520*9219296aSGreg Roach    }
1521*9219296aSGreg Roach
1522*9219296aSGreg Roach    /**
1523*9219296aSGreg Roach     * @inheritDoc
1524*9219296aSGreg Roach     */
1525*9219296aSGreg Roach    public function statsDiv(string $size = null, string $color_from = null, string $color_to = null): string
1526*9219296aSGreg Roach    {
1527*9219296aSGreg Roach        return $this->familyRepository->statsDiv($size, $color_from, $color_to);
1528*9219296aSGreg Roach    }
1529*9219296aSGreg Roach
1530*9219296aSGreg Roach    /**
1531*9219296aSGreg Roach     * @inheritDoc
1532*9219296aSGreg Roach     */
1533*9219296aSGreg Roach    public function youngestMarriageFemale(): string
1534*9219296aSGreg Roach    {
1535*9219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemale();
1536*9219296aSGreg Roach    }
1537*9219296aSGreg Roach
1538*9219296aSGreg Roach    /**
1539*9219296aSGreg Roach     * @inheritDoc
1540*9219296aSGreg Roach     */
1541*9219296aSGreg Roach    public function youngestMarriageFemaleName(): string
1542*9219296aSGreg Roach    {
1543*9219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleName();
1544*9219296aSGreg Roach    }
1545*9219296aSGreg Roach
1546*9219296aSGreg Roach    /**
1547*9219296aSGreg Roach     * @inheritDoc
1548*9219296aSGreg Roach     */
1549*9219296aSGreg Roach    public function youngestMarriageFemaleAge(string $show_years = ''): string
1550*9219296aSGreg Roach    {
1551*9219296aSGreg Roach        return $this->familyRepository->youngestMarriageFemaleAge($show_years);
1552*9219296aSGreg Roach    }
1553*9219296aSGreg Roach
1554*9219296aSGreg Roach    /**
1555*9219296aSGreg Roach     * @inheritDoc
1556*9219296aSGreg Roach     */
1557*9219296aSGreg Roach    public function oldestMarriageFemale(): string
1558*9219296aSGreg Roach    {
1559*9219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemale();
1560*9219296aSGreg Roach    }
1561*9219296aSGreg Roach
1562*9219296aSGreg Roach    /**
1563*9219296aSGreg Roach     * @inheritDoc
1564*9219296aSGreg Roach     */
1565*9219296aSGreg Roach    public function oldestMarriageFemaleName(): string
1566*9219296aSGreg Roach    {
1567*9219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleName();
1568*9219296aSGreg Roach    }
1569*9219296aSGreg Roach
1570*9219296aSGreg Roach    /**
1571*9219296aSGreg Roach     * @inheritDoc
1572*9219296aSGreg Roach     */
1573*9219296aSGreg Roach    public function oldestMarriageFemaleAge(string $show_years = ''): string
1574*9219296aSGreg Roach    {
1575*9219296aSGreg Roach        return $this->familyRepository->oldestMarriageFemaleAge($show_years);
1576*9219296aSGreg Roach    }
1577*9219296aSGreg Roach
1578*9219296aSGreg Roach    /**
1579*9219296aSGreg Roach     * @inheritDoc
1580*9219296aSGreg Roach     */
1581*9219296aSGreg Roach    public function youngestMarriageMale(): string
1582*9219296aSGreg Roach    {
1583*9219296aSGreg Roach        return $this->familyRepository->youngestMarriageMale();
1584*9219296aSGreg Roach    }
1585*9219296aSGreg Roach
1586*9219296aSGreg Roach    /**
1587*9219296aSGreg Roach     * @inheritDoc
1588*9219296aSGreg Roach     */
1589*9219296aSGreg Roach    public function youngestMarriageMaleName(): string
1590*9219296aSGreg Roach    {
1591*9219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleName();
1592*9219296aSGreg Roach    }
1593*9219296aSGreg Roach
1594*9219296aSGreg Roach    /**
1595*9219296aSGreg Roach     * @inheritDoc
1596*9219296aSGreg Roach     */
1597*9219296aSGreg Roach    public function youngestMarriageMaleAge(string $show_years = ''): string
1598*9219296aSGreg Roach    {
1599*9219296aSGreg Roach        return $this->familyRepository->youngestMarriageMaleAge($show_years);
1600*9219296aSGreg Roach    }
1601*9219296aSGreg Roach
1602*9219296aSGreg Roach    /**
1603*9219296aSGreg Roach     * @inheritDoc
1604*9219296aSGreg Roach     */
1605*9219296aSGreg Roach    public function oldestMarriageMale(): string
1606*9219296aSGreg Roach    {
1607*9219296aSGreg Roach        return $this->familyRepository->oldestMarriageMale();
1608*9219296aSGreg Roach    }
1609*9219296aSGreg Roach
1610*9219296aSGreg Roach    /**
1611*9219296aSGreg Roach     * @inheritDoc
1612*9219296aSGreg Roach     */
1613*9219296aSGreg Roach    public function oldestMarriageMaleName(): string
1614*9219296aSGreg Roach    {
1615*9219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleName();
1616*9219296aSGreg Roach    }
1617*9219296aSGreg Roach
1618*9219296aSGreg Roach    /**
1619*9219296aSGreg Roach     * @inheritDoc
1620*9219296aSGreg Roach     */
1621*9219296aSGreg Roach    public function oldestMarriageMaleAge(string $show_years = ''): string
1622*9219296aSGreg Roach    {
1623*9219296aSGreg Roach        return $this->familyRepository->oldestMarriageMaleAge($show_years);
1624*9219296aSGreg Roach    }
1625*9219296aSGreg Roach
1626*9219296aSGreg Roach    /**
1627*9219296aSGreg Roach     * @inheritDoc
1628*9219296aSGreg Roach     */
1629*9219296aSGreg Roach    public function statsMarrAgeQuery(string $sex = 'M', int $year1 = -1, int $year2 = -1): array
1630*9219296aSGreg Roach    {
1631*9219296aSGreg Roach        return $this->familyRepository->statsMarrAgeQuery($sex, $year1, $year2);
1632*9219296aSGreg Roach    }
1633*9219296aSGreg Roach
1634*9219296aSGreg Roach    /**
1635*9219296aSGreg Roach     * @inheritDoc
1636*9219296aSGreg Roach     */
1637*9219296aSGreg Roach    public function statsMarrAge(string $size = '200x250'): string
1638*9219296aSGreg Roach    {
1639*9219296aSGreg Roach        return $this->familyRepository->statsMarrAge($size);
1640*9219296aSGreg Roach    }
1641*9219296aSGreg Roach
1642*9219296aSGreg Roach    /**
1643*9219296aSGreg Roach     * @inheritDoc
1644*9219296aSGreg Roach     */
1645*9219296aSGreg Roach    public function ageBetweenSpousesMF(string $total = '10'): string
1646*9219296aSGreg Roach    {
1647*9219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMF((int) $total);
1648*9219296aSGreg Roach    }
1649*9219296aSGreg Roach
1650*9219296aSGreg Roach    /**
1651*9219296aSGreg Roach     * @inheritDoc
1652*9219296aSGreg Roach     */
1653*9219296aSGreg Roach    public function ageBetweenSpousesMFList(string $total = '10'): string
1654*9219296aSGreg Roach    {
1655*9219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesMFList((int) $total);
1656*9219296aSGreg Roach    }
1657*9219296aSGreg Roach
1658*9219296aSGreg Roach    /**
1659*9219296aSGreg Roach     * @inheritDoc
1660*9219296aSGreg Roach     */
1661*9219296aSGreg Roach    public function ageBetweenSpousesFM(string $total = '10'): string
1662*9219296aSGreg Roach    {
1663*9219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFM((int) $total);
1664*9219296aSGreg Roach    }
1665*9219296aSGreg Roach
1666*9219296aSGreg Roach    /**
1667*9219296aSGreg Roach     * @inheritDoc
1668*9219296aSGreg Roach     */
1669*9219296aSGreg Roach    public function ageBetweenSpousesFMList(string $total = '10'): string
1670*9219296aSGreg Roach    {
1671*9219296aSGreg Roach        return $this->familyRepository->ageBetweenSpousesFMList((int) $total);
1672*9219296aSGreg Roach    }
1673*9219296aSGreg Roach
1674*9219296aSGreg Roach    /**
1675*9219296aSGreg Roach     * @inheritDoc
1676*9219296aSGreg Roach     */
1677*9219296aSGreg Roach    public function topAgeOfMarriageFamily(): string
1678*9219296aSGreg Roach    {
1679*9219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamily();
1680*9219296aSGreg Roach    }
1681*9219296aSGreg Roach
1682*9219296aSGreg Roach    /**
1683*9219296aSGreg Roach     * @inheritDoc
1684*9219296aSGreg Roach     */
1685*9219296aSGreg Roach    public function topAgeOfMarriage(): string
1686*9219296aSGreg Roach    {
1687*9219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriage();
1688*9219296aSGreg Roach    }
1689*9219296aSGreg Roach
1690*9219296aSGreg Roach    /**
1691*9219296aSGreg Roach     * @inheritDoc
1692*9219296aSGreg Roach     */
1693*9219296aSGreg Roach    public function topAgeOfMarriageFamilies(string $total = '10'): string
1694*9219296aSGreg Roach    {
1695*9219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamilies((int) $total);
1696*9219296aSGreg Roach    }
1697*9219296aSGreg Roach
1698*9219296aSGreg Roach    /**
1699*9219296aSGreg Roach     * @inheritDoc
1700*9219296aSGreg Roach     */
1701*9219296aSGreg Roach    public function topAgeOfMarriageFamiliesList(string $total = '10'): string
1702*9219296aSGreg Roach    {
1703*9219296aSGreg Roach        return $this->familyRepository->topAgeOfMarriageFamiliesList((int) $total);
1704*9219296aSGreg Roach    }
1705*9219296aSGreg Roach
1706*9219296aSGreg Roach    /**
1707*9219296aSGreg Roach     * @inheritDoc
1708*9219296aSGreg Roach     */
1709*9219296aSGreg Roach    public function minAgeOfMarriageFamily(): string
1710*9219296aSGreg Roach    {
1711*9219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamily();
1712*9219296aSGreg Roach    }
1713*9219296aSGreg Roach
1714*9219296aSGreg Roach    /**
1715*9219296aSGreg Roach     * @inheritDoc
1716*9219296aSGreg Roach     */
1717*9219296aSGreg Roach    public function minAgeOfMarriage(): string
1718*9219296aSGreg Roach    {
1719*9219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriage();
1720*9219296aSGreg Roach    }
1721*9219296aSGreg Roach
1722*9219296aSGreg Roach    /**
1723*9219296aSGreg Roach     * @inheritDoc
1724*9219296aSGreg Roach     */
1725*9219296aSGreg Roach    public function minAgeOfMarriageFamilies(string $total = '10'): string
1726*9219296aSGreg Roach    {
1727*9219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamilies((int) $total);
1728*9219296aSGreg Roach    }
1729*9219296aSGreg Roach
1730*9219296aSGreg Roach    /**
1731*9219296aSGreg Roach     * @inheritDoc
1732*9219296aSGreg Roach     */
1733*9219296aSGreg Roach    public function minAgeOfMarriageFamiliesList(string $total = '10'): string
1734*9219296aSGreg Roach    {
1735*9219296aSGreg Roach        return $this->familyRepository->minAgeOfMarriageFamiliesList((int) $total);
1736*9219296aSGreg Roach    }
1737*9219296aSGreg Roach
1738*9219296aSGreg Roach    /**
1739*9219296aSGreg Roach     * @inheritDoc
1740*9219296aSGreg Roach     */
1741*9219296aSGreg Roach    public function youngestMother(): string
1742*9219296aSGreg Roach    {
1743*9219296aSGreg Roach        return $this->familyRepository->youngestMother();
1744*9219296aSGreg Roach    }
1745*9219296aSGreg Roach
1746*9219296aSGreg Roach    /**
1747*9219296aSGreg Roach     * @inheritDoc
1748*9219296aSGreg Roach     */
1749*9219296aSGreg Roach    public function youngestMotherName(): string
1750*9219296aSGreg Roach    {
1751*9219296aSGreg Roach        return $this->familyRepository->youngestMotherName();
1752*9219296aSGreg Roach    }
1753*9219296aSGreg Roach
1754*9219296aSGreg Roach    /**
1755*9219296aSGreg Roach     * @inheritDoc
1756*9219296aSGreg Roach     */
1757*9219296aSGreg Roach    public function youngestMotherAge(string $show_years = ''): string
1758*9219296aSGreg Roach    {
1759*9219296aSGreg Roach        return $this->familyRepository->youngestMotherAge($show_years);
1760*9219296aSGreg Roach    }
1761*9219296aSGreg Roach
1762*9219296aSGreg Roach    /**
1763*9219296aSGreg Roach     * @inheritDoc
1764*9219296aSGreg Roach     */
1765*9219296aSGreg Roach    public function oldestMother(): string
1766*9219296aSGreg Roach    {
1767*9219296aSGreg Roach        return $this->familyRepository->oldestMother();
1768*9219296aSGreg Roach    }
1769*9219296aSGreg Roach
1770*9219296aSGreg Roach    /**
1771*9219296aSGreg Roach     * @inheritDoc
1772*9219296aSGreg Roach     */
1773*9219296aSGreg Roach    public function oldestMotherName(): string
1774*9219296aSGreg Roach    {
1775*9219296aSGreg Roach        return $this->familyRepository->oldestMotherName();
1776*9219296aSGreg Roach    }
1777*9219296aSGreg Roach
1778*9219296aSGreg Roach    /**
1779*9219296aSGreg Roach     * @inheritDoc
1780*9219296aSGreg Roach     */
1781*9219296aSGreg Roach    public function oldestMotherAge(string $show_years = ''): string
1782*9219296aSGreg Roach    {
1783*9219296aSGreg Roach        return $this->familyRepository->oldestMotherAge($show_years);
1784*9219296aSGreg Roach    }
1785*9219296aSGreg Roach
1786*9219296aSGreg Roach    /**
1787*9219296aSGreg Roach     * @inheritDoc
1788*9219296aSGreg Roach     */
1789*9219296aSGreg Roach    public function youngestFather(): string
1790*9219296aSGreg Roach    {
1791*9219296aSGreg Roach        return $this->familyRepository->youngestFather();
1792*9219296aSGreg Roach    }
1793*9219296aSGreg Roach
1794*9219296aSGreg Roach    /**
1795*9219296aSGreg Roach     * @inheritDoc
1796*9219296aSGreg Roach     */
1797*9219296aSGreg Roach    public function youngestFatherName(): string
1798*9219296aSGreg Roach    {
1799*9219296aSGreg Roach        return $this->familyRepository->youngestFatherName();
1800*9219296aSGreg Roach    }
1801*9219296aSGreg Roach
1802*9219296aSGreg Roach    /**
1803*9219296aSGreg Roach     * @inheritDoc
1804*9219296aSGreg Roach     */
1805*9219296aSGreg Roach    public function youngestFatherAge(string $show_years = ''): string
1806*9219296aSGreg Roach    {
1807*9219296aSGreg Roach        return $this->familyRepository->youngestFatherAge($show_years);
1808*9219296aSGreg Roach    }
1809*9219296aSGreg Roach
1810*9219296aSGreg Roach    /**
1811*9219296aSGreg Roach     * @inheritDoc
1812*9219296aSGreg Roach     */
1813*9219296aSGreg Roach    public function oldestFather(): string
1814*9219296aSGreg Roach    {
1815*9219296aSGreg Roach        return $this->familyRepository->oldestFather();
1816*9219296aSGreg Roach    }
1817*9219296aSGreg Roach
1818*9219296aSGreg Roach    /**
1819*9219296aSGreg Roach     * @inheritDoc
1820*9219296aSGreg Roach     */
1821*9219296aSGreg Roach    public function oldestFatherName(): string
1822*9219296aSGreg Roach    {
1823*9219296aSGreg Roach        return $this->familyRepository->oldestFatherName();
1824*9219296aSGreg Roach    }
1825*9219296aSGreg Roach
1826*9219296aSGreg Roach    /**
1827*9219296aSGreg Roach     * @inheritDoc
1828*9219296aSGreg Roach     */
1829*9219296aSGreg Roach    public function oldestFatherAge(string $show_years = ''): string
1830*9219296aSGreg Roach    {
1831*9219296aSGreg Roach        return $this->familyRepository->oldestFatherAge($show_years);
1832*9219296aSGreg Roach    }
1833*9219296aSGreg Roach
1834*9219296aSGreg Roach    /**
1835*9219296aSGreg Roach     * @inheritDoc
1836*9219296aSGreg Roach     */
1837*9219296aSGreg Roach    public function totalMarriedMales(): string
1838*9219296aSGreg Roach    {
1839*9219296aSGreg Roach        return $this->familyRepository->totalMarriedMales();
1840*9219296aSGreg Roach    }
1841*9219296aSGreg Roach
1842*9219296aSGreg Roach    /**
1843*9219296aSGreg Roach     * @inheritDoc
1844*9219296aSGreg Roach     */
1845*9219296aSGreg Roach    public function totalMarriedFemales(): string
1846*9219296aSGreg Roach    {
1847*9219296aSGreg Roach        return $this->familyRepository->totalMarriedFemales();
1848*9219296aSGreg Roach    }
1849*9219296aSGreg Roach
1850*9219296aSGreg Roach    /**
1851*9219296aSGreg Roach     * @inheritDoc
1852*9219296aSGreg Roach     */
1853*9219296aSGreg Roach    public function monthFirstChildQuery(bool $sex = false): array
1854*9219296aSGreg Roach    {
1855*9219296aSGreg Roach        return $this->familyRepository->monthFirstChildQuery($sex);
1856*9219296aSGreg Roach    }
1857*9219296aSGreg Roach
1858*9219296aSGreg Roach    /**
1859*9219296aSGreg Roach     * @inheritDoc
1860*9219296aSGreg Roach     */
1861*9219296aSGreg Roach    public function largestFamily(): string
1862*9219296aSGreg Roach    {
1863*9219296aSGreg Roach        return $this->familyRepository->largestFamily();
1864*9219296aSGreg Roach    }
1865*9219296aSGreg Roach
1866*9219296aSGreg Roach    /**
1867*9219296aSGreg Roach     * @inheritDoc
1868*9219296aSGreg Roach     */
1869*9219296aSGreg Roach    public function largestFamilySize(): string
1870*9219296aSGreg Roach    {
1871*9219296aSGreg Roach        return $this->familyRepository->largestFamilySize();
1872*9219296aSGreg Roach    }
1873*9219296aSGreg Roach
1874*9219296aSGreg Roach    /**
1875*9219296aSGreg Roach     * @inheritDoc
1876*9219296aSGreg Roach     */
1877*9219296aSGreg Roach    public function largestFamilyName(): string
1878*9219296aSGreg Roach    {
1879*9219296aSGreg Roach        return $this->familyRepository->largestFamilyName();
1880*9219296aSGreg Roach    }
1881*9219296aSGreg Roach
1882*9219296aSGreg Roach    /**
1883*9219296aSGreg Roach     * @inheritDoc
1884*9219296aSGreg Roach     */
1885*9219296aSGreg Roach    public function topTenLargestFamily(string $total = '10'): string
1886*9219296aSGreg Roach    {
1887*9219296aSGreg Roach        return $this->familyRepository->topTenLargestFamily((int) $total);
1888*9219296aSGreg Roach    }
1889*9219296aSGreg Roach
1890*9219296aSGreg Roach    /**
1891*9219296aSGreg Roach     * @inheritDoc
1892*9219296aSGreg Roach     */
1893*9219296aSGreg Roach    public function topTenLargestFamilyList(string $total = '10'): string
1894*9219296aSGreg Roach    {
1895*9219296aSGreg Roach        return $this->familyRepository->topTenLargestFamilyList((int) $total);
1896*9219296aSGreg Roach    }
1897*9219296aSGreg Roach
1898*9219296aSGreg Roach    /**
1899*9219296aSGreg Roach     * @inheritDoc
1900*9219296aSGreg Roach     */
1901*9219296aSGreg Roach    public function chartLargestFamilies(
1902*9219296aSGreg Roach        string $size = null,
1903*9219296aSGreg Roach        string $color_from = null,
1904*9219296aSGreg Roach        string $color_to = null,
1905*9219296aSGreg Roach        string $total = '10'
1906*9219296aSGreg Roach    ): string
1907*9219296aSGreg Roach    {
1908*9219296aSGreg Roach        return $this->familyRepository->chartLargestFamilies($size, $color_from, $color_to, (int) $total);
1909*9219296aSGreg Roach    }
1910*9219296aSGreg Roach
1911*9219296aSGreg Roach    /**
1912*9219296aSGreg Roach     * @inheritDoc
1913*9219296aSGreg Roach     */
1914*9219296aSGreg Roach    public function totalChildren(): string
1915*9219296aSGreg Roach    {
1916*9219296aSGreg Roach        return $this->familyRepository->totalChildren();
1917*9219296aSGreg Roach    }
1918*9219296aSGreg Roach
1919*9219296aSGreg Roach    /**
1920*9219296aSGreg Roach     * @inheritDoc
1921*9219296aSGreg Roach     */
1922*9219296aSGreg Roach    public function averageChildren(): string
1923*9219296aSGreg Roach    {
1924*9219296aSGreg Roach        return $this->familyRepository->averageChildren();
1925*9219296aSGreg Roach    }
1926*9219296aSGreg Roach
1927*9219296aSGreg Roach    /**
1928*9219296aSGreg Roach     * @inheritDoc
1929*9219296aSGreg Roach     */
1930*9219296aSGreg Roach    public function statsChildrenQuery(string $sex = 'BOTH', int $year1 = -1, int $year2 = -1): array
1931*9219296aSGreg Roach    {
1932*9219296aSGreg Roach        return $this->familyRepository->statsChildrenQuery($sex, $year1, $year2);
1933*9219296aSGreg Roach    }
1934*9219296aSGreg Roach
1935*9219296aSGreg Roach    /**
1936*9219296aSGreg Roach     * @inheritDoc
1937*9219296aSGreg Roach     */
1938*9219296aSGreg Roach    public function statsChildren(string $size = '220x200'): string
1939*9219296aSGreg Roach    {
1940*9219296aSGreg Roach        return $this->familyRepository->statsChildren($size);
1941*9219296aSGreg Roach    }
1942*9219296aSGreg Roach
1943*9219296aSGreg Roach    /**
1944*9219296aSGreg Roach     * @inheritDoc
1945*9219296aSGreg Roach     */
1946*9219296aSGreg Roach    public function topAgeBetweenSiblingsName(string $total = '10'): string
1947*9219296aSGreg Roach    {
1948*9219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsName((int) $total);
1949*9219296aSGreg Roach    }
1950*9219296aSGreg Roach
1951*9219296aSGreg Roach    /**
1952*9219296aSGreg Roach     * @inheritDoc
1953*9219296aSGreg Roach     */
1954*9219296aSGreg Roach    public function topAgeBetweenSiblings(string $total = '10'): string
1955*9219296aSGreg Roach    {
1956*9219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblings((int) $total);
1957*9219296aSGreg Roach    }
1958*9219296aSGreg Roach
1959*9219296aSGreg Roach    /**
1960*9219296aSGreg Roach     * @inheritDoc
1961*9219296aSGreg Roach     */
1962*9219296aSGreg Roach    public function topAgeBetweenSiblingsFullName(string $total = '10'): string
1963*9219296aSGreg Roach    {
1964*9219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsFullName((int) $total);
1965*9219296aSGreg Roach    }
1966*9219296aSGreg Roach
1967*9219296aSGreg Roach    /**
1968*9219296aSGreg Roach     * @inheritDoc
1969*9219296aSGreg Roach     */
1970*9219296aSGreg Roach    public function topAgeBetweenSiblingsList(string $total = '10', string $one = ''): string
1971*9219296aSGreg Roach    {
1972*9219296aSGreg Roach        return $this->familyRepository->topAgeBetweenSiblingsList((int) $total, $one);
1973*9219296aSGreg Roach    }
1974*9219296aSGreg Roach
1975*9219296aSGreg Roach    /**
1976*9219296aSGreg Roach     * @inheritDoc
1977*9219296aSGreg Roach     */
1978*9219296aSGreg Roach    public function noChildrenFamilies(): string
1979*9219296aSGreg Roach    {
1980*9219296aSGreg Roach        return $this->familyRepository->noChildrenFamilies();
1981*9219296aSGreg Roach    }
1982*9219296aSGreg Roach
1983*9219296aSGreg Roach    /**
1984*9219296aSGreg Roach     * @inheritDoc
1985*9219296aSGreg Roach     */
1986*9219296aSGreg Roach    public function noChildrenFamiliesList(string $type = 'list'): string
1987*9219296aSGreg Roach    {
1988*9219296aSGreg Roach        return $this->familyRepository->noChildrenFamiliesList($type);
1989*9219296aSGreg Roach    }
1990*9219296aSGreg Roach
1991*9219296aSGreg Roach    /**
1992*9219296aSGreg Roach     * @inheritDoc
1993*9219296aSGreg Roach     */
1994*9219296aSGreg Roach    public function chartNoChildrenFamilies(
1995*9219296aSGreg Roach        string $size = '220x200',
1996*9219296aSGreg Roach        string $year1 = '-1',
1997*9219296aSGreg Roach        string $year2 = '-1'
1998*9219296aSGreg Roach    ): string
1999*9219296aSGreg Roach    {
2000*9219296aSGreg Roach        return $this->familyRepository->chartNoChildrenFamilies($size, (int) $year1, (int) $year2);
2001*9219296aSGreg Roach    }
2002*9219296aSGreg Roach
2003*9219296aSGreg Roach    /**
2004*9219296aSGreg Roach     * @inheritDoc
2005*9219296aSGreg Roach     */
2006*9219296aSGreg Roach    public function topTenLargestGrandFamily(string $total = '10'): string
2007*9219296aSGreg Roach    {
2008*9219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamily((int) $total);
2009*9219296aSGreg Roach    }
2010*9219296aSGreg Roach
2011*9219296aSGreg Roach    /**
2012*9219296aSGreg Roach     * @inheritDoc
2013*9219296aSGreg Roach     */
2014*9219296aSGreg Roach    public function topTenLargestGrandFamilyList(string $total = '10'): string
2015*9219296aSGreg Roach    {
2016*9219296aSGreg Roach        return $this->familyRepository->topTenLargestGrandFamilyList((int) $total);
2017*9219296aSGreg Roach    }
2018*9219296aSGreg Roach
2019*9219296aSGreg Roach    /**
2020*9219296aSGreg Roach     * @inheritDoc
2021*9219296aSGreg Roach     */
2022*9219296aSGreg Roach    public function getCommonSurname(): string
2023*9219296aSGreg Roach    {
2024*9219296aSGreg Roach        return $this->individualRepository->getCommonSurname();
2025*9219296aSGreg Roach    }
2026*9219296aSGreg Roach
2027*9219296aSGreg Roach    /**
2028*9219296aSGreg Roach     * @inheritDoc
2029*9219296aSGreg Roach     */
2030*9219296aSGreg Roach    public function commonSurnames(
2031*9219296aSGreg Roach        string $threshold = '1',
2032*9219296aSGreg Roach        string $number_of_surnames = '10',
2033*9219296aSGreg Roach        string $sorting = 'alpha'
2034*9219296aSGreg Roach    ): string
2035*9219296aSGreg Roach    {
2036*9219296aSGreg Roach        return $this->individualRepository->commonSurnames((int) $threshold, (int) $number_of_surnames, $sorting);
2037*9219296aSGreg Roach    }
2038*9219296aSGreg Roach
2039*9219296aSGreg Roach    /**
2040*9219296aSGreg Roach     * @inheritDoc
2041*9219296aSGreg Roach     */
2042*9219296aSGreg Roach    public function commonSurnamesTotals(
2043*9219296aSGreg Roach        string $threshold = '1',
2044*9219296aSGreg Roach        string $number_of_surnames = '10',
2045*9219296aSGreg Roach        string $sorting = 'rcount'
2046*9219296aSGreg Roach    ): string
2047*9219296aSGreg Roach    {
2048*9219296aSGreg Roach        return $this->individualRepository->commonSurnamesTotals((int) $threshold, (int) $number_of_surnames, $sorting);
2049*9219296aSGreg Roach    }
2050*9219296aSGreg Roach
2051*9219296aSGreg Roach    /**
2052*9219296aSGreg Roach     * @inheritDoc
2053*9219296aSGreg Roach     */
2054*9219296aSGreg Roach    public function commonSurnamesList(
2055*9219296aSGreg Roach        string $threshold = '1',
2056*9219296aSGreg Roach        string $number_of_surnames = '10',
2057*9219296aSGreg Roach        string $sorting = 'alpha'
2058*9219296aSGreg Roach    ): string
2059*9219296aSGreg Roach    {
2060*9219296aSGreg Roach        return $this->individualRepository->commonSurnamesList((int) $threshold, (int) $number_of_surnames, $sorting);
2061*9219296aSGreg Roach    }
2062*9219296aSGreg Roach
2063*9219296aSGreg Roach    /**
2064*9219296aSGreg Roach     * @inheritDoc
2065*9219296aSGreg Roach     */
2066*9219296aSGreg Roach    public function commonSurnamesListTotals(
2067*9219296aSGreg Roach        string $threshold = '1',
2068*9219296aSGreg Roach        string $number_of_surnames = '10',
2069*9219296aSGreg Roach        string $sorting = 'rcount'
2070*9219296aSGreg Roach    ): string
2071*9219296aSGreg Roach    {
2072*9219296aSGreg Roach        return $this->individualRepository
2073*9219296aSGreg Roach            ->commonSurnamesListTotals((int) $threshold, (int) $number_of_surnames, $sorting);
2074*9219296aSGreg Roach    }
2075*9219296aSGreg Roach
2076*9219296aSGreg Roach    /**
2077*9219296aSGreg Roach     * @inheritDoc
2078*9219296aSGreg Roach     */
2079*9219296aSGreg Roach    public function chartCommonSurnames(
2080*9219296aSGreg Roach        string $size = null,
2081*9219296aSGreg Roach        string $color_from = null,
2082*9219296aSGreg Roach        string $color_to = null,
2083*9219296aSGreg Roach        string $number_of_surnames = '10'
2084*9219296aSGreg Roach    ): string
2085*9219296aSGreg Roach    {
2086*9219296aSGreg Roach        return $this->individualRepository
2087*9219296aSGreg Roach            ->chartCommonSurnames($size, $color_from, $color_to, (int) $number_of_surnames);
2088*9219296aSGreg Roach    }
2089*9219296aSGreg Roach
2090*9219296aSGreg Roach    /**
2091*9219296aSGreg Roach     * @inheritDoc
2092*9219296aSGreg Roach     */
2093*9219296aSGreg Roach    public function commonGiven(string $threshold = '1', string $maxtoshow = '10'): string
2094*9219296aSGreg Roach    {
2095*9219296aSGreg Roach        return $this->individualRepository->commonGiven((int) $threshold, (int) $maxtoshow);
2096*9219296aSGreg Roach    }
2097*9219296aSGreg Roach
2098*9219296aSGreg Roach    /**
2099*9219296aSGreg Roach     * @inheritDoc
2100*9219296aSGreg Roach     */
2101*9219296aSGreg Roach    public function commonGivenTotals(string $threshold = '1', string $maxtoshow = '10'): string
2102*9219296aSGreg Roach    {
2103*9219296aSGreg Roach        return $this->individualRepository->commonGivenTotals((int) $threshold, (int) $maxtoshow);
2104*9219296aSGreg Roach    }
2105*9219296aSGreg Roach
2106*9219296aSGreg Roach    /**
2107*9219296aSGreg Roach     * @inheritDoc
2108*9219296aSGreg Roach     */
2109*9219296aSGreg Roach    public function commonGivenList(string $threshold = '1', string $maxtoshow = '10'): string
2110*9219296aSGreg Roach    {
2111*9219296aSGreg Roach        return $this->individualRepository->commonGivenList((int) $threshold, (int) $maxtoshow);
2112*9219296aSGreg Roach    }
2113*9219296aSGreg Roach
2114*9219296aSGreg Roach    /**
2115*9219296aSGreg Roach     * @inheritDoc
2116*9219296aSGreg Roach     */
2117*9219296aSGreg Roach    public function commonGivenListTotals(string $threshold = '1', string $maxtoshow = '10'): string
2118*9219296aSGreg Roach    {
2119*9219296aSGreg Roach        return $this->individualRepository->commonGivenListTotals((int) $threshold, (int) $maxtoshow);
2120*9219296aSGreg Roach    }
2121*9219296aSGreg Roach
2122*9219296aSGreg Roach    /**
2123*9219296aSGreg Roach     * @inheritDoc
2124*9219296aSGreg Roach     */
2125*9219296aSGreg Roach    public function commonGivenTable(string $threshold = '1', string $maxtoshow = '10'): string
2126*9219296aSGreg Roach    {
2127*9219296aSGreg Roach        return $this->individualRepository->commonGivenTable((int) $threshold, (int) $maxtoshow);
2128*9219296aSGreg Roach    }
2129*9219296aSGreg Roach
2130*9219296aSGreg Roach    /**
2131*9219296aSGreg Roach     * @inheritDoc
2132*9219296aSGreg Roach     */
2133*9219296aSGreg Roach    public function commonGivenFemale(string $threshold = '1', string $maxtoshow = '10'): string
2134*9219296aSGreg Roach    {
2135*9219296aSGreg Roach        return $this->individualRepository->commonGivenFemale((int) $threshold, (int) $maxtoshow);
2136*9219296aSGreg Roach    }
2137*9219296aSGreg Roach
2138*9219296aSGreg Roach    /**
2139*9219296aSGreg Roach     * @inheritDoc
2140*9219296aSGreg Roach     */
2141*9219296aSGreg Roach    public function commonGivenFemaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
2142*9219296aSGreg Roach    {
2143*9219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTotals((int) $threshold, (int) $maxtoshow);
2144*9219296aSGreg Roach    }
2145*9219296aSGreg Roach
2146*9219296aSGreg Roach    /**
2147*9219296aSGreg Roach     * @inheritDoc
2148*9219296aSGreg Roach     */
2149*9219296aSGreg Roach    public function commonGivenFemaleList(string $threshold = '1', string $maxtoshow = '10'): string
2150*9219296aSGreg Roach    {
2151*9219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleList((int) $threshold, (int) $maxtoshow);
2152*9219296aSGreg Roach    }
2153*9219296aSGreg Roach
2154*9219296aSGreg Roach    /**
2155*9219296aSGreg Roach     * @inheritDoc
2156*9219296aSGreg Roach     */
2157*9219296aSGreg Roach    public function commonGivenFemaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
2158*9219296aSGreg Roach    {
2159*9219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleListTotals((int) $threshold, (int) $maxtoshow);
2160*9219296aSGreg Roach    }
2161*9219296aSGreg Roach
2162*9219296aSGreg Roach    /**
2163*9219296aSGreg Roach     * @inheritDoc
2164*9219296aSGreg Roach     */
2165*9219296aSGreg Roach    public function commonGivenFemaleTable(string $threshold = '1', string $maxtoshow = '10'): string
2166*9219296aSGreg Roach    {
2167*9219296aSGreg Roach        return $this->individualRepository->commonGivenFemaleTable((int) $threshold, (int) $maxtoshow);
2168*9219296aSGreg Roach    }
2169*9219296aSGreg Roach
2170*9219296aSGreg Roach    /**
2171*9219296aSGreg Roach     * @inheritDoc
2172*9219296aSGreg Roach     */
2173*9219296aSGreg Roach    public function commonGivenMale(string $threshold = '1', string $maxtoshow = '10'): string
2174*9219296aSGreg Roach    {
2175*9219296aSGreg Roach        return $this->individualRepository->commonGivenMale((int) $threshold, (int) $maxtoshow);
2176*9219296aSGreg Roach    }
2177*9219296aSGreg Roach
2178*9219296aSGreg Roach    /**
2179*9219296aSGreg Roach     * @inheritDoc
2180*9219296aSGreg Roach     */
2181*9219296aSGreg Roach    public function commonGivenMaleTotals(string $threshold = '1', string $maxtoshow = '10'): string
2182*9219296aSGreg Roach    {
2183*9219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTotals((int) $threshold, (int) $maxtoshow);
2184*9219296aSGreg Roach    }
2185*9219296aSGreg Roach
2186*9219296aSGreg Roach    /**
2187*9219296aSGreg Roach     * @inheritDoc
2188*9219296aSGreg Roach     */
2189*9219296aSGreg Roach    public function commonGivenMaleList(string $threshold = '1', string $maxtoshow = '10'): string
2190*9219296aSGreg Roach    {
2191*9219296aSGreg Roach        return $this->individualRepository->commonGivenMaleList((int) $threshold, (int) $maxtoshow);
2192*9219296aSGreg Roach    }
2193*9219296aSGreg Roach
2194*9219296aSGreg Roach    /**
2195*9219296aSGreg Roach     * @inheritDoc
2196*9219296aSGreg Roach     */
2197*9219296aSGreg Roach    public function commonGivenMaleListTotals(string $threshold = '1', string $maxtoshow = '10'): string
2198*9219296aSGreg Roach    {
2199*9219296aSGreg Roach        return $this->individualRepository->commonGivenMaleListTotals((int) $threshold, (int) $maxtoshow);
2200*9219296aSGreg Roach    }
2201*9219296aSGreg Roach
2202*9219296aSGreg Roach    /**
2203*9219296aSGreg Roach     * @inheritDoc
2204*9219296aSGreg Roach     */
2205*9219296aSGreg Roach    public function commonGivenMaleTable(string $threshold = '1', string $maxtoshow = '10'): string
2206*9219296aSGreg Roach    {
2207*9219296aSGreg Roach        return $this->individualRepository->commonGivenMaleTable((int) $threshold, (int) $maxtoshow);
2208*9219296aSGreg Roach    }
2209*9219296aSGreg Roach
2210*9219296aSGreg Roach    /**
2211*9219296aSGreg Roach     * @inheritDoc
2212*9219296aSGreg Roach     */
2213*9219296aSGreg Roach    public function commonGivenUnknown(string $threshold = '1', string $maxtoshow = '10'): string
2214*9219296aSGreg Roach    {
2215*9219296aSGreg Roach        return $this->individualRepository->commonGivenUnknown((int) $threshold, (int) $maxtoshow);
2216*9219296aSGreg Roach    }
2217*9219296aSGreg Roach
2218*9219296aSGreg Roach    /**
2219*9219296aSGreg Roach     * @inheritDoc
2220*9219296aSGreg Roach     */
2221*9219296aSGreg Roach    public function commonGivenUnknownTotals(string $threshold = '1', string $maxtoshow = '10'): string
2222*9219296aSGreg Roach    {
2223*9219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTotals((int) $threshold, (int) $maxtoshow);
2224*9219296aSGreg Roach    }
2225*9219296aSGreg Roach
2226*9219296aSGreg Roach    /**
2227*9219296aSGreg Roach     * @inheritDoc
2228*9219296aSGreg Roach     */
2229*9219296aSGreg Roach    public function commonGivenUnknownList(string $threshold = '1', string $maxtoshow = '10'): string
2230*9219296aSGreg Roach    {
2231*9219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownList((int) $threshold, (int) $maxtoshow);
2232*9219296aSGreg Roach    }
2233*9219296aSGreg Roach
2234*9219296aSGreg Roach    /**
2235*9219296aSGreg Roach     * @inheritDoc
2236*9219296aSGreg Roach     */
2237*9219296aSGreg Roach    public function commonGivenUnknownListTotals(string $threshold = '1', string $maxtoshow = '10'): string
2238*9219296aSGreg Roach    {
2239*9219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownListTotals((int) $threshold, (int) $maxtoshow);
2240*9219296aSGreg Roach    }
2241*9219296aSGreg Roach
2242*9219296aSGreg Roach    /**
2243*9219296aSGreg Roach     * @inheritDoc
2244*9219296aSGreg Roach     */
2245*9219296aSGreg Roach    public function commonGivenUnknownTable(string $threshold = '1', string $maxtoshow = '10'): string
2246*9219296aSGreg Roach    {
2247*9219296aSGreg Roach        return $this->individualRepository->commonGivenUnknownTable((int) $threshold, (int) $maxtoshow);
2248*9219296aSGreg Roach    }
2249*9219296aSGreg Roach
2250*9219296aSGreg Roach    /**
2251*9219296aSGreg Roach     * @inheritDoc
2252*9219296aSGreg Roach     */
2253*9219296aSGreg Roach    public function chartCommonGiven(
2254*9219296aSGreg Roach        string $size = null,
2255*9219296aSGreg Roach        string $color_from = null,
2256*9219296aSGreg Roach        string $color_to = null,
2257*9219296aSGreg Roach        string $maxtoshow = '7'
2258*9219296aSGreg Roach    ): string
2259*9219296aSGreg Roach    {
2260*9219296aSGreg Roach        return $this->individualRepository->chartCommonGiven($size, $color_from, $color_to, (int) $maxtoshow);
2261*9219296aSGreg Roach    }
2262*9219296aSGreg Roach
2263*9219296aSGreg Roach    /**
2264*9219296aSGreg Roach     * @inheritDoc
2265*9219296aSGreg Roach     */
2266*9219296aSGreg Roach    public function usersLoggedIn(): string
2267*9219296aSGreg Roach    {
2268*9219296aSGreg Roach        return $this->userRepository->usersLoggedIn();
2269*9219296aSGreg Roach    }
2270*9219296aSGreg Roach
2271*9219296aSGreg Roach    /**
2272*9219296aSGreg Roach     * @inheritDoc
2273*9219296aSGreg Roach     */
2274*9219296aSGreg Roach    public function usersLoggedInList(): string
2275*9219296aSGreg Roach    {
2276*9219296aSGreg Roach        return $this->userRepository->usersLoggedInList();
2277*9219296aSGreg Roach    }
2278*9219296aSGreg Roach
2279*9219296aSGreg Roach    /**
2280*9219296aSGreg Roach     * @inheritDoc
2281*9219296aSGreg Roach     */
2282*9219296aSGreg Roach    public function usersLoggedInTotal(): int
2283*9219296aSGreg Roach    {
2284*9219296aSGreg Roach        return $this->userRepository->usersLoggedInTotal();
2285*9219296aSGreg Roach    }
2286*9219296aSGreg Roach
2287*9219296aSGreg Roach    /**
2288*9219296aSGreg Roach     * @inheritDoc
2289*9219296aSGreg Roach     */
2290*9219296aSGreg Roach    public function usersLoggedInTotalAnon(): int
2291*9219296aSGreg Roach    {
2292*9219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalAnon();
2293*9219296aSGreg Roach    }
2294*9219296aSGreg Roach
2295*9219296aSGreg Roach    /**
2296*9219296aSGreg Roach     * @inheritDoc
2297*9219296aSGreg Roach     */
2298*9219296aSGreg Roach    public function usersLoggedInTotalVisible(): int
2299*9219296aSGreg Roach    {
2300*9219296aSGreg Roach        return $this->userRepository->usersLoggedInTotalVisible();
2301*9219296aSGreg Roach    }
2302*9219296aSGreg Roach
2303*9219296aSGreg Roach    /**
2304*9219296aSGreg Roach     * @inheritDoc
2305*9219296aSGreg Roach     */
2306*9219296aSGreg Roach    public function userId(): string
2307*9219296aSGreg Roach    {
2308*9219296aSGreg Roach        return $this->userRepository->userId();
2309*9219296aSGreg Roach    }
2310*9219296aSGreg Roach
2311*9219296aSGreg Roach    /**
2312*9219296aSGreg Roach     * @inheritDoc
2313*9219296aSGreg Roach     */
2314*9219296aSGreg Roach    public function userName(string $visitor_text = ''): string
2315*9219296aSGreg Roach    {
2316*9219296aSGreg Roach        return $this->userRepository->userName();
2317*9219296aSGreg Roach    }
2318*9219296aSGreg Roach
2319*9219296aSGreg Roach    /**
2320*9219296aSGreg Roach     * @inheritDoc
2321*9219296aSGreg Roach     */
2322*9219296aSGreg Roach    public function userFullName(): string
2323*9219296aSGreg Roach    {
2324*9219296aSGreg Roach        return $this->userRepository->userFullName();
2325*9219296aSGreg Roach    }
2326*9219296aSGreg Roach
2327*9219296aSGreg Roach    /**
2328*9219296aSGreg Roach     * @inheritDoc
2329*9219296aSGreg Roach     */
2330*9219296aSGreg Roach    public function totalUsers(): string
2331*9219296aSGreg Roach    {
2332*9219296aSGreg Roach        return $this->userRepository->totalUsers();
2333*9219296aSGreg Roach    }
2334*9219296aSGreg Roach
2335*9219296aSGreg Roach    /**
2336*9219296aSGreg Roach     * @inheritDoc
2337*9219296aSGreg Roach     */
2338*9219296aSGreg Roach    public function totalAdmins(): string
2339*9219296aSGreg Roach    {
2340*9219296aSGreg Roach        return $this->userRepository->totalAdmins();
2341*9219296aSGreg Roach    }
2342*9219296aSGreg Roach
2343*9219296aSGreg Roach    /**
2344*9219296aSGreg Roach     * @inheritDoc
2345*9219296aSGreg Roach     */
2346*9219296aSGreg Roach    public function totalNonAdmins(): string
2347*9219296aSGreg Roach    {
2348*9219296aSGreg Roach        return $this->userRepository->totalNonAdmins();
2349*9219296aSGreg Roach    }
2350*9219296aSGreg Roach
2351*9219296aSGreg Roach    /**
2352*9219296aSGreg Roach     * @inheritDoc
2353*9219296aSGreg Roach     */
2354*9219296aSGreg Roach    public function latestUserId(): string
2355*9219296aSGreg Roach    {
2356*9219296aSGreg Roach        return $this->latestUserRepository->latestUserId();
2357*9219296aSGreg Roach    }
2358*9219296aSGreg Roach
2359*9219296aSGreg Roach    /**
2360*9219296aSGreg Roach     * @inheritDoc
2361*9219296aSGreg Roach     */
2362*9219296aSGreg Roach    public function latestUserName(): string
2363*9219296aSGreg Roach    {
2364*9219296aSGreg Roach        return $this->latestUserRepository->latestUserName();
2365*9219296aSGreg Roach    }
2366*9219296aSGreg Roach
2367*9219296aSGreg Roach    /**
2368*9219296aSGreg Roach     * @inheritDoc
2369*9219296aSGreg Roach     */
2370*9219296aSGreg Roach    public function latestUserFullName(): string
2371*9219296aSGreg Roach    {
2372*9219296aSGreg Roach        return $this->latestUserRepository->latestUserFullName();
2373*9219296aSGreg Roach    }
2374*9219296aSGreg Roach
2375*9219296aSGreg Roach    /**
2376*9219296aSGreg Roach     * @inheritDoc
2377*9219296aSGreg Roach     */
2378*9219296aSGreg Roach    public function latestUserRegDate(string $format = null): string
2379*9219296aSGreg Roach    {
2380*9219296aSGreg Roach        return $this->latestUserRepository->latestUserRegDate();
2381*9219296aSGreg Roach    }
2382*9219296aSGreg Roach
2383*9219296aSGreg Roach    /**
2384*9219296aSGreg Roach     * @inheritDoc
2385*9219296aSGreg Roach     */
2386*9219296aSGreg Roach    public function latestUserRegTime(string $format = null): string
2387*9219296aSGreg Roach    {
2388*9219296aSGreg Roach        return $this->latestUserRepository->latestUserRegTime();
2389*9219296aSGreg Roach    }
2390*9219296aSGreg Roach
2391*9219296aSGreg Roach    /**
2392*9219296aSGreg Roach     * @inheritDoc
2393*9219296aSGreg Roach     */
2394*9219296aSGreg Roach    public function latestUserLoggedin(string $yes = null, string $no = null): string
2395*9219296aSGreg Roach    {
2396*9219296aSGreg Roach        return $this->latestUserRepository->latestUserLoggedin();
2397*9219296aSGreg Roach    }
2398*9219296aSGreg Roach
2399*9219296aSGreg Roach    /**
2400*9219296aSGreg Roach     * @inheritDoc
2401*9219296aSGreg Roach     */
2402*9219296aSGreg Roach    public function contactWebmaster(): string
2403*9219296aSGreg Roach    {
2404*9219296aSGreg Roach        return $this->contactRepository->contactWebmaster();
2405*9219296aSGreg Roach    }
2406*9219296aSGreg Roach
2407*9219296aSGreg Roach    /**
2408*9219296aSGreg Roach     * @inheritDoc
2409*9219296aSGreg Roach     */
2410*9219296aSGreg Roach    public function contactGedcom(): string
2411*9219296aSGreg Roach    {
2412*9219296aSGreg Roach        return $this->contactRepository->contactGedcom();
2413*9219296aSGreg Roach    }
2414*9219296aSGreg Roach
2415*9219296aSGreg Roach    /**
2416*9219296aSGreg Roach     * @inheritDoc
2417*9219296aSGreg Roach     */
2418*9219296aSGreg Roach    public function serverDate(): string
2419*9219296aSGreg Roach    {
2420*9219296aSGreg Roach        return $this->serverRepository->serverDate();
2421*9219296aSGreg Roach    }
2422*9219296aSGreg Roach
2423*9219296aSGreg Roach    /**
2424*9219296aSGreg Roach     * @inheritDoc
2425*9219296aSGreg Roach     */
2426*9219296aSGreg Roach    public function serverTime(): string
2427*9219296aSGreg Roach    {
2428*9219296aSGreg Roach        return $this->serverRepository->serverTime();
2429*9219296aSGreg Roach    }
2430*9219296aSGreg Roach
2431*9219296aSGreg Roach    /**
2432*9219296aSGreg Roach     * @inheritDoc
2433*9219296aSGreg Roach     */
2434*9219296aSGreg Roach    public function serverTime24(): string
2435*9219296aSGreg Roach    {
2436*9219296aSGreg Roach        return $this->serverRepository->serverTime24();
2437*9219296aSGreg Roach    }
2438*9219296aSGreg Roach
2439*9219296aSGreg Roach    /**
2440*9219296aSGreg Roach     * What is the timezone of the server.
2441*9219296aSGreg Roach     *
2442*9219296aSGreg Roach     * @return string
2443*9219296aSGreg Roach     */
2444*9219296aSGreg Roach    public function serverTimezone(): string
2445*9219296aSGreg Roach    {
2446*9219296aSGreg Roach        return $this->serverRepository->serverTimezone();
2447*9219296aSGreg Roach    }
2448*9219296aSGreg Roach
2449*9219296aSGreg Roach    /**
2450*9219296aSGreg Roach     * @inheritDoc
2451*9219296aSGreg Roach     */
2452*9219296aSGreg Roach    public function browserDate(): string
2453*9219296aSGreg Roach    {
2454*9219296aSGreg Roach        return $this->browserRepository->browserDate();
2455*9219296aSGreg Roach    }
2456*9219296aSGreg Roach
2457*9219296aSGreg Roach    /**
2458*9219296aSGreg Roach     * @inheritDoc
2459*9219296aSGreg Roach     */
2460*9219296aSGreg Roach    public function browserTime(): string
2461*9219296aSGreg Roach    {
2462*9219296aSGreg Roach        return $this->browserRepository->browserTime();
2463*9219296aSGreg Roach    }
2464*9219296aSGreg Roach
2465*9219296aSGreg Roach    /**
2466*9219296aSGreg Roach     * @inheritDoc
2467*9219296aSGreg Roach     */
2468*9219296aSGreg Roach    public function browserTimezone(): string
2469*9219296aSGreg Roach    {
2470*9219296aSGreg Roach        return $this->browserRepository->browserTimezone();
2471*9219296aSGreg Roach    }
2472*9219296aSGreg Roach
2473*9219296aSGreg Roach    /**
2474*9219296aSGreg Roach     * @inheritDoc
2475*9219296aSGreg Roach     */
2476*9219296aSGreg Roach    public function hitCount(string $page_parameter = ''): string
2477*9219296aSGreg Roach    {
2478*9219296aSGreg Roach        return $this->hitCountRepository->hitCount($page_parameter);
2479*9219296aSGreg Roach    }
2480*9219296aSGreg Roach
2481*9219296aSGreg Roach    /**
2482*9219296aSGreg Roach     * @inheritDoc
2483*9219296aSGreg Roach     */
2484*9219296aSGreg Roach    public function hitCountUser(string $page_parameter = ''): string
2485*9219296aSGreg Roach    {
2486*9219296aSGreg Roach        return $this->hitCountRepository->hitCountUser($page_parameter);
2487*9219296aSGreg Roach    }
2488*9219296aSGreg Roach
2489*9219296aSGreg Roach    /**
2490*9219296aSGreg Roach     * @inheritDoc
2491*9219296aSGreg Roach     */
2492*9219296aSGreg Roach    public function hitCountIndi(string $page_parameter = ''): string
2493*9219296aSGreg Roach    {
2494*9219296aSGreg Roach        return $this->hitCountRepository->hitCountIndi($page_parameter);
2495*9219296aSGreg Roach    }
2496*9219296aSGreg Roach
2497*9219296aSGreg Roach    /**
2498*9219296aSGreg Roach     * @inheritDoc
2499*9219296aSGreg Roach     */
2500*9219296aSGreg Roach    public function hitCountFam(string $page_parameter = ''): string
2501*9219296aSGreg Roach    {
2502*9219296aSGreg Roach        return $this->hitCountRepository->hitCountFam($page_parameter);
2503*9219296aSGreg Roach    }
2504*9219296aSGreg Roach
2505*9219296aSGreg Roach    /**
2506*9219296aSGreg Roach     * @inheritDoc
2507*9219296aSGreg Roach     */
2508*9219296aSGreg Roach    public function hitCountSour(string $page_parameter = ''): string
2509*9219296aSGreg Roach    {
2510*9219296aSGreg Roach        return $this->hitCountRepository->hitCountSour($page_parameter);
2511*9219296aSGreg Roach    }
2512*9219296aSGreg Roach
2513*9219296aSGreg Roach    /**
2514*9219296aSGreg Roach     * @inheritDoc
2515*9219296aSGreg Roach     */
2516*9219296aSGreg Roach    public function hitCountRepo(string $page_parameter = ''): string
2517*9219296aSGreg Roach    {
2518*9219296aSGreg Roach        return $this->hitCountRepository->hitCountRepo($page_parameter);
2519*9219296aSGreg Roach    }
2520*9219296aSGreg Roach
2521*9219296aSGreg Roach    /**
2522*9219296aSGreg Roach     * @inheritDoc
2523*9219296aSGreg Roach     */
2524*9219296aSGreg Roach    public function hitCountNote(string $page_parameter = ''): string
2525*9219296aSGreg Roach    {
2526*9219296aSGreg Roach        return $this->hitCountRepository->hitCountNote($page_parameter);
2527*9219296aSGreg Roach    }
2528*9219296aSGreg Roach
2529*9219296aSGreg Roach    /**
2530*9219296aSGreg Roach     * @inheritDoc
2531*9219296aSGreg Roach     */
2532*9219296aSGreg Roach    public function hitCountObje(string $page_parameter = ''): string
2533*9219296aSGreg Roach    {
2534*9219296aSGreg Roach        return $this->hitCountRepository->hitCountObje($page_parameter);
2535*9219296aSGreg Roach    }
2536*9219296aSGreg Roach
2537*9219296aSGreg Roach    /**
2538*9219296aSGreg Roach     * @inheritDoc
2539*9219296aSGreg Roach     */
2540*9219296aSGreg Roach    public function gedcomFavorites(): string
2541*9219296aSGreg Roach    {
2542*9219296aSGreg Roach        return $this->favoritesRepository->gedcomFavorites();
2543*9219296aSGreg Roach    }
2544*9219296aSGreg Roach
2545*9219296aSGreg Roach    /**
2546*9219296aSGreg Roach     * @inheritDoc
2547*9219296aSGreg Roach     */
2548*9219296aSGreg Roach    public function userFavorites(): string
2549*9219296aSGreg Roach    {
2550*9219296aSGreg Roach        return $this->favoritesRepository->userFavorites();
2551*9219296aSGreg Roach    }
2552*9219296aSGreg Roach
2553*9219296aSGreg Roach    /**
2554*9219296aSGreg Roach     * @inheritDoc
2555*9219296aSGreg Roach     */
2556*9219296aSGreg Roach    public function totalGedcomFavorites(): string
2557*9219296aSGreg Roach    {
2558*9219296aSGreg Roach        return $this->favoritesRepository->totalGedcomFavorites();
2559*9219296aSGreg Roach    }
2560*9219296aSGreg Roach
2561*9219296aSGreg Roach    /**
2562*9219296aSGreg Roach     * @inheritDoc
2563*9219296aSGreg Roach     */
2564*9219296aSGreg Roach    public function totalUserFavorites(): string
2565*9219296aSGreg Roach    {
2566*9219296aSGreg Roach        return $this->favoritesRepository->totalUserFavorites();
2567*9219296aSGreg Roach    }
2568*9219296aSGreg Roach
2569*9219296aSGreg Roach    /**
2570*9219296aSGreg Roach     * @inheritDoc
2571*9219296aSGreg Roach     */
2572*9219296aSGreg Roach    public function totalUserMessages(): string
2573*9219296aSGreg Roach    {
2574*9219296aSGreg Roach        return $this->messageRepository->totalUserMessages();
2575*9219296aSGreg Roach    }
2576*9219296aSGreg Roach
2577*9219296aSGreg Roach    /**
2578*9219296aSGreg Roach     * @inheritDoc
2579*9219296aSGreg Roach     */
2580*9219296aSGreg Roach    public function totalUserJournal(): string
2581*9219296aSGreg Roach    {
2582*9219296aSGreg Roach        return $this->newsRepository->totalUserJournal();
2583*9219296aSGreg Roach    }
2584*9219296aSGreg Roach
2585*9219296aSGreg Roach    /**
2586*9219296aSGreg Roach     * @inheritDoc
2587*9219296aSGreg Roach     */
2588*9219296aSGreg Roach    public function totalGedcomNews(): string
2589*9219296aSGreg Roach    {
2590*9219296aSGreg Roach        return $this->newsRepository->totalGedcomNews();
2591*9219296aSGreg Roach    }
2592*9219296aSGreg Roach
2593*9219296aSGreg Roach    /**
2594*9219296aSGreg Roach     * Create any of the other blocks.
2595*9219296aSGreg Roach     * Use as #callBlock:block_name#
2596*9219296aSGreg Roach     *
2597*9219296aSGreg Roach     * @param string $block
2598*9219296aSGreg Roach     * @param string ...$params
2599*9219296aSGreg Roach     *
2600*9219296aSGreg Roach     * @return null|string
2601*9219296aSGreg Roach     */
2602*9219296aSGreg Roach    public function callBlock(string $block = '', ...$params): ?string
2603*9219296aSGreg Roach    {
2604*9219296aSGreg Roach        /** @var ModuleBlockInterface $module */
2605*9219296aSGreg Roach        $module = app(ModuleService::class)->findByComponent('block', $this->tree, Auth::user())
2606*9219296aSGreg Roach            ->filter(function (ModuleInterface $module) use ($block): bool {
2607*9219296aSGreg Roach                return $module->name() === $block && $module->name() !== 'html';
2608*9219296aSGreg Roach            })
2609*9219296aSGreg Roach            ->first();
2610*9219296aSGreg Roach
2611*9219296aSGreg Roach        if ($module === null) {
2612*9219296aSGreg Roach            return '';
2613*9219296aSGreg Roach        }
2614*9219296aSGreg Roach
2615*9219296aSGreg Roach        // Build the config array
2616*9219296aSGreg Roach        $cfg = [];
2617*9219296aSGreg Roach        foreach ($params as $config) {
2618*9219296aSGreg Roach            $bits = explode('=', $config);
2619*9219296aSGreg Roach
2620*9219296aSGreg Roach            if (\count($bits) < 2) {
2621*9219296aSGreg Roach                continue;
2622*9219296aSGreg Roach            }
2623*9219296aSGreg Roach
2624*9219296aSGreg Roach            $v       = array_shift($bits);
2625*9219296aSGreg Roach            $cfg[$v] = implode('=', $bits);
2626*9219296aSGreg Roach        }
2627*9219296aSGreg Roach
2628*9219296aSGreg Roach        return $module->getBlock($this->tree, 0, '', $cfg);
2629*9219296aSGreg Roach    }
2630*9219296aSGreg Roach
2631*9219296aSGreg Roach    /**
2632*9219296aSGreg Roach     * What is the current version of webtrees.
2633*9219296aSGreg Roach     *
2634*9219296aSGreg Roach     * @return string
2635*9219296aSGreg Roach     */
2636*9219296aSGreg Roach    public function webtreesVersion(): string
2637*9219296aSGreg Roach    {
2638*9219296aSGreg Roach        return Webtrees::VERSION;
2639*9219296aSGreg Roach    }
2640*9219296aSGreg Roach}
2641