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