1<?php 2 3/** 4 * webtrees: online genealogy 5 * Copyright (C) 2019 webtrees development team 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18declare(strict_types=1); 19 20namespace Fisharebest\Webtrees\Services; 21 22use Fisharebest\Webtrees\Carbon; 23use Illuminate\Database\Capsule\Manager as DB; 24use Illuminate\Database\Query\Builder; 25use Illuminate\Database\Query\Expression; 26 27/** 28 * Manage site logs 29 */ 30class SiteLogsService 31{ 32 /** 33 * Generate a query for filtering the changes log. 34 * 35 * @param string[] $params 36 * 37 * @return Builder 38 */ 39 public function logsQuery(array $params): Builder 40 { 41 $tree = $params['tree']; 42 $from = $params['from']; 43 $to = $params['to']; 44 $type = $params['type']; 45 $text = $params['text']; 46 $ip = $params['ip']; 47 $username = $params['username']; 48 49 $query = DB::table('log') 50 ->leftJoin('user', 'user.user_id', '=', 'log.user_id') 51 ->leftJoin('gedcom', 'gedcom.gedcom_id', '=', 'log.gedcom_id') 52 ->select(['log.*', new Expression("COALESCE(user_name, '<none>') AS user_name"), new Expression("COALESCE(gedcom_name, '<none>') AS gedcom_name")]); 53 54 if ($from !== '') { 55 $query->where('log_time', '>=', $from); 56 } 57 58 if ($to !== '') { 59 // before end of the day 60 $query->where('log_time', '<', Carbon::make($to)->addDay()); 61 } 62 63 if ($type !== '') { 64 $query->where('log_type', '=', $type); 65 } 66 67 if ($text !== '') { 68 $query->whereContains('log_message', $text); 69 } 70 71 if ($ip !== '') { 72 $query->whereContains('ip_address', $ip); 73 } 74 75 if ($username !== '') { 76 $query->whereContains('user_name', $ip); 77 } 78 79 if ($tree !== '') { 80 $query->where('gedcom_name', '=', $tree); 81 } 82 83 return $query; 84 } 85} 86