xref: /webtrees/app/Statistics/Repository/FavoritesRepository.php (revision d11be7027e34e3121be11cc025421873364403f9)
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