1*8add1155SRico Sonntag<?php 2*8add1155SRico Sonntag/** 3*8add1155SRico Sonntag * webtrees: online genealogy 4*8add1155SRico Sonntag * Copyright (C) 2018 webtrees development team 5*8add1155SRico Sonntag * This program is free software: you can redistribute it and/or modify 6*8add1155SRico Sonntag * it under the terms of the GNU General Public License as published by 7*8add1155SRico Sonntag * the Free Software Foundation, either version 3 of the License, or 8*8add1155SRico Sonntag * (at your option) any later version. 9*8add1155SRico Sonntag * This program is distributed in the hope that it will be useful, 10*8add1155SRico Sonntag * but WITHOUT ANY WARRANTY; without even the implied warranty of 11*8add1155SRico Sonntag * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*8add1155SRico Sonntag * GNU General Public License for more details. 13*8add1155SRico Sonntag * You should have received a copy of the GNU General Public License 14*8add1155SRico Sonntag * along with this program. If not, see <http://www.gnu.org/licenses/>. 15*8add1155SRico Sonntag */ 16*8add1155SRico Sonntagdeclare(strict_types=1); 17*8add1155SRico Sonntag 18*8add1155SRico Sonntagnamespace Fisharebest\Webtrees\Statistics\Repository; 19*8add1155SRico Sonntag 20*8add1155SRico Sonntaguse Fisharebest\Webtrees\Auth; 21*8add1155SRico Sonntaguse Fisharebest\Webtrees\Statistics\Repository\Interfaces\HitCountRepositoryInterface; 22*8add1155SRico Sonntaguse Fisharebest\Webtrees\Tree; 23*8add1155SRico Sonntaguse Fisharebest\Webtrees\User; 24*8add1155SRico Sonntaguse Illuminate\Database\Capsule\Manager as DB; 25*8add1155SRico Sonntag 26*8add1155SRico Sonntag/** 27*8add1155SRico Sonntag * A repository providing methods for hit count related statistics. 28*8add1155SRico Sonntag */ 29*8add1155SRico Sonntagclass HitCountRepository implements HitCountRepositoryInterface 30*8add1155SRico Sonntag{ 31*8add1155SRico Sonntag /** 32*8add1155SRico Sonntag * @var Tree 33*8add1155SRico Sonntag */ 34*8add1155SRico Sonntag private $tree; 35*8add1155SRico Sonntag 36*8add1155SRico Sonntag /** 37*8add1155SRico Sonntag * Constructor. 38*8add1155SRico Sonntag * 39*8add1155SRico Sonntag * @param Tree $tree 40*8add1155SRico Sonntag */ 41*8add1155SRico Sonntag public function __construct(Tree $tree) 42*8add1155SRico Sonntag { 43*8add1155SRico Sonntag $this->tree = $tree; 44*8add1155SRico Sonntag } 45*8add1155SRico Sonntag 46*8add1155SRico Sonntag /** 47*8add1155SRico Sonntag * These functions provide access to hitcounter for use in the HTML block. 48*8add1155SRico Sonntag * 49*8add1155SRico Sonntag * @param string $page_name 50*8add1155SRico Sonntag * @param string $page_parameter 51*8add1155SRico Sonntag * 52*8add1155SRico Sonntag * @return string 53*8add1155SRico Sonntag */ 54*8add1155SRico Sonntag private function hitCountQuery($page_name, string $page_parameter = ''): string 55*8add1155SRico Sonntag { 56*8add1155SRico Sonntag if ($page_name === '') { 57*8add1155SRico Sonntag // index.php?ctype=gedcom 58*8add1155SRico Sonntag $page_name = 'index.php'; 59*8add1155SRico Sonntag $page_parameter = 'gedcom:' . $this->tree->id(); 60*8add1155SRico Sonntag } elseif ($page_name === 'index.php') { 61*8add1155SRico Sonntag // index.php?ctype=user 62*8add1155SRico Sonntag $user = User::findByIdentifier($page_parameter); 63*8add1155SRico Sonntag $page_parameter = 'user:' . ($user ? $user->id() : Auth::id()); 64*8add1155SRico Sonntag } 65*8add1155SRico Sonntag 66*8add1155SRico Sonntag $count = (int) DB::table('hit_counter') 67*8add1155SRico Sonntag ->where('gedcom_id', '=', $this->tree->id()) 68*8add1155SRico Sonntag ->where('page_name', '=', $page_name) 69*8add1155SRico Sonntag ->where('page_parameter', '=', $page_parameter) 70*8add1155SRico Sonntag ->value('page_count'); 71*8add1155SRico Sonntag 72*8add1155SRico Sonntag return view( 73*8add1155SRico Sonntag 'statistics/hit-count', 74*8add1155SRico Sonntag [ 75*8add1155SRico Sonntag 'count' => $count, 76*8add1155SRico Sonntag ] 77*8add1155SRico Sonntag ); 78*8add1155SRico Sonntag } 79*8add1155SRico Sonntag 80*8add1155SRico Sonntag /** 81*8add1155SRico Sonntag * @inheritDoc 82*8add1155SRico Sonntag */ 83*8add1155SRico Sonntag public function hitCount(string $page_parameter = ''): string 84*8add1155SRico Sonntag { 85*8add1155SRico Sonntag return $this->hitCountQuery('', $page_parameter); 86*8add1155SRico Sonntag } 87*8add1155SRico Sonntag 88*8add1155SRico Sonntag /** 89*8add1155SRico Sonntag * @inheritDoc 90*8add1155SRico Sonntag */ 91*8add1155SRico Sonntag public function hitCountUser(string $page_parameter = ''): string 92*8add1155SRico Sonntag { 93*8add1155SRico Sonntag return $this->hitCountQuery('index.php', $page_parameter); 94*8add1155SRico Sonntag } 95*8add1155SRico Sonntag 96*8add1155SRico Sonntag /** 97*8add1155SRico Sonntag * @inheritDoc 98*8add1155SRico Sonntag */ 99*8add1155SRico Sonntag public function hitCountIndi(string $page_parameter = ''): string 100*8add1155SRico Sonntag { 101*8add1155SRico Sonntag return $this->hitCountQuery('individual.php', $page_parameter); 102*8add1155SRico Sonntag } 103*8add1155SRico Sonntag 104*8add1155SRico Sonntag /** 105*8add1155SRico Sonntag * @inheritDoc 106*8add1155SRico Sonntag */ 107*8add1155SRico Sonntag public function hitCountFam(string $page_parameter = ''): string 108*8add1155SRico Sonntag { 109*8add1155SRico Sonntag return $this->hitCountQuery('family.php', $page_parameter); 110*8add1155SRico Sonntag } 111*8add1155SRico Sonntag 112*8add1155SRico Sonntag /** 113*8add1155SRico Sonntag * @inheritDoc 114*8add1155SRico Sonntag */ 115*8add1155SRico Sonntag public function hitCountSour(string $page_parameter = ''): string 116*8add1155SRico Sonntag { 117*8add1155SRico Sonntag return $this->hitCountQuery('source.php', $page_parameter); 118*8add1155SRico Sonntag } 119*8add1155SRico Sonntag 120*8add1155SRico Sonntag /** 121*8add1155SRico Sonntag * @inheritDoc 122*8add1155SRico Sonntag */ 123*8add1155SRico Sonntag public function hitCountRepo(string $page_parameter = ''): string 124*8add1155SRico Sonntag { 125*8add1155SRico Sonntag return $this->hitCountQuery('repo.php', $page_parameter); 126*8add1155SRico Sonntag } 127*8add1155SRico Sonntag 128*8add1155SRico Sonntag /** 129*8add1155SRico Sonntag * @inheritDoc 130*8add1155SRico Sonntag */ 131*8add1155SRico Sonntag public function hitCountNote(string $page_parameter = ''): string 132*8add1155SRico Sonntag { 133*8add1155SRico Sonntag return $this->hitCountQuery('note.php', $page_parameter); 134*8add1155SRico Sonntag } 135*8add1155SRico Sonntag 136*8add1155SRico Sonntag /** 137*8add1155SRico Sonntag * @inheritDoc 138*8add1155SRico Sonntag */ 139*8add1155SRico Sonntag public function hitCountObje(string $page_parameter = ''): string 140*8add1155SRico Sonntag { 141*8add1155SRico Sonntag return $this->hitCountQuery('mediaviewer.php', $page_parameter); 142*8add1155SRico Sonntag } 143*8add1155SRico Sonntag} 144