18add1155SRico Sonntag<?php 23976b470SGreg Roach 38add1155SRico Sonntag/** 48add1155SRico Sonntag * webtrees: online genealogy 5*d11be702SGreg Roach * Copyright (C) 2023 webtrees development team 68add1155SRico Sonntag * This program is free software: you can redistribute it and/or modify 78add1155SRico Sonntag * it under the terms of the GNU General Public License as published by 88add1155SRico Sonntag * the Free Software Foundation, either version 3 of the License, or 98add1155SRico Sonntag * (at your option) any later version. 108add1155SRico Sonntag * This program is distributed in the hope that it will be useful, 118add1155SRico Sonntag * but WITHOUT ANY WARRANTY; without even the implied warranty of 128add1155SRico Sonntag * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 138add1155SRico Sonntag * GNU General Public License for more details. 148add1155SRico Sonntag * You should have received a copy of the GNU General Public License 1589f7189bSGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 168add1155SRico Sonntag */ 17fcfa147eSGreg Roach 188add1155SRico Sonntagdeclare(strict_types=1); 198add1155SRico Sonntag 208add1155SRico Sonntagnamespace Fisharebest\Webtrees\Statistics\Repository; 218add1155SRico Sonntag 228add1155SRico Sonntaguse Fisharebest\Webtrees\Auth; 238add1155SRico Sonntaguse Fisharebest\Webtrees\I18N; 248add1155SRico Sonntaguse Fisharebest\Webtrees\Module\FamilyTreeFavoritesModule; 253caaa4d2SGreg Roachuse Fisharebest\Webtrees\Module\ModuleBlockInterface; 268add1155SRico Sonntaguse Fisharebest\Webtrees\Module\UserFavoritesModule; 274ca7e03cSGreg Roachuse Fisharebest\Webtrees\Services\ModuleService; 288add1155SRico Sonntaguse Fisharebest\Webtrees\Statistics\Repository\Interfaces\FavoritesRepositoryInterface; 298add1155SRico Sonntaguse Fisharebest\Webtrees\Tree; 308add1155SRico Sonntag 3171378461SGreg Roachuse function count; 3271378461SGreg Roach 338add1155SRico Sonntag/** 348add1155SRico Sonntag * A repository providing methods for favorites related statistics. 358add1155SRico Sonntag */ 368add1155SRico Sonntagclass FavoritesRepository implements FavoritesRepositoryInterface 378add1155SRico Sonntag{ 384c78e066SGreg Roach private Tree $tree; 39fd9aba47SGreg Roach 404c78e066SGreg Roach private ModuleService $module_service; 418add1155SRico Sonntag 428add1155SRico Sonntag /** 438add1155SRico Sonntag * @param Tree $tree 44fd9aba47SGreg Roach * @param ModuleService $module_service 458add1155SRico Sonntag */ 46fd9aba47SGreg Roach public function __construct(Tree $tree, ModuleService $module_service) 478add1155SRico Sonntag { 488add1155SRico Sonntag $this->tree = $tree; 49fd9aba47SGreg Roach $this->module_service = $module_service; 508add1155SRico Sonntag } 518add1155SRico Sonntag 528add1155SRico Sonntag /** 530dcd9387SGreg Roach * @return string 548add1155SRico Sonntag */ 558add1155SRico Sonntag public function gedcomFavorites(): string 568add1155SRico Sonntag { 57fd9aba47SGreg Roach $module = $this->module_service 587ef4c0b1SGreg Roach ->findByInterface(FamilyTreeFavoritesModule::class) 597ef4c0b1SGreg Roach ->first(); 608add1155SRico Sonntag 618add1155SRico Sonntag if ($module instanceof FamilyTreeFavoritesModule) { 623caaa4d2SGreg Roach return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED); 638add1155SRico Sonntag } 648add1155SRico Sonntag 658add1155SRico Sonntag return ''; 668add1155SRico Sonntag } 678add1155SRico Sonntag 688add1155SRico Sonntag /** 690dcd9387SGreg Roach * @return string 708add1155SRico Sonntag */ 718add1155SRico Sonntag public function userFavorites(): string 728add1155SRico Sonntag { 73fd9aba47SGreg Roach $module = $this->module_service 747ef4c0b1SGreg Roach ->findByInterface(UserFavoritesModule::class) 757ef4c0b1SGreg Roach ->first(); 768add1155SRico Sonntag 778add1155SRico Sonntag if ($module instanceof UserFavoritesModule) { 783caaa4d2SGreg Roach return $module->getBlock($this->tree, 0, ModuleBlockInterface::CONTEXT_EMBED); 798add1155SRico Sonntag } 808add1155SRico Sonntag 818add1155SRico Sonntag return ''; 828add1155SRico Sonntag } 838add1155SRico Sonntag 848add1155SRico Sonntag /** 850dcd9387SGreg Roach * @return string 868add1155SRico Sonntag */ 878add1155SRico Sonntag public function totalGedcomFavorites(): string 888add1155SRico Sonntag { 898add1155SRico Sonntag $count = 0; 90fd9aba47SGreg Roach $module = $this->module_service 917ef4c0b1SGreg Roach ->findByInterface(FamilyTreeFavoritesModule::class) 927ef4c0b1SGreg Roach ->first(); 938add1155SRico Sonntag 948add1155SRico Sonntag if ($module instanceof FamilyTreeFavoritesModule) { 956ccdf4f0SGreg Roach $count = count($module->getFavorites($this->tree)); 968add1155SRico Sonntag } 978add1155SRico Sonntag 988add1155SRico Sonntag return I18N::number($count); 998add1155SRico Sonntag } 1008add1155SRico Sonntag 1018add1155SRico Sonntag /** 1020dcd9387SGreg Roach * @return string 1038add1155SRico Sonntag */ 1048add1155SRico Sonntag public function totalUserFavorites(): string 1058add1155SRico Sonntag { 1068add1155SRico Sonntag $count = 0; 107fd9aba47SGreg Roach $module = $this->module_service 1087ef4c0b1SGreg Roach ->findByInterface(UserFavoritesModule::class) 1097ef4c0b1SGreg Roach ->first(); 1108add1155SRico Sonntag 1118add1155SRico Sonntag if ($module instanceof UserFavoritesModule) { 1126ccdf4f0SGreg Roach $count = count($module->getFavorites($this->tree, Auth::user())); 1138add1155SRico Sonntag } 1148add1155SRico Sonntag 1158add1155SRico Sonntag return I18N::number($count); 1168add1155SRico Sonntag } 1178add1155SRico Sonntag} 118