Issues (2564)

app/Log.php (1 issue)

Labels
Severity
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2025 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 <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees;
21
22
use Psr\Http\Message\ServerRequestInterface;
23
24
/**
25
 * Record webtrees events in the database
26
 */
27
class Log
28
{
29
    // We can log the following types of message in the wt_log table.
30
    private const string TYPE_AUTHENTICATION = 'auth';
0 ignored issues
show
A parse error occurred: Syntax error, unexpected T_STRING, expecting '=' on line 30 at column 25
Loading history...
31
    private const string TYPE_CONFIGURATION  = 'config';
32
    private const string TYPE_EDIT           = 'edit';
33
    private const string TYPE_ERROR          = 'error';
34
    private const string TYPE_MEDIA          = 'media';
35
    private const string TYPE_SEARCH         = 'search';
36
37
    /**
38
     * Store an authentication message in the message log.
39
     *
40
     * @param string $message
41
     *
42
     * @return void
43
     */
44
    public static function addAuthenticationLog(string $message): void
45
    {
46
        self::addLog($message, self::TYPE_AUTHENTICATION);
47
    }
48
49
    /**
50
     * Store a new message (of the appropriate type) in the message log.
51
     *
52
     * @param string    $message
53
     * @param string    $log_type
54
     * @param Tree|null $tree
55
     *
56
     * @return void
57
     */
58
    private static function addLog(string $message, string $log_type, Tree|null $tree = null): void
59
    {
60
        if (Registry::container()->has(ServerRequestInterface::class)) {
61
            $request    = Registry::container()->get(ServerRequestInterface::class);
62
            $ip_address = Validator::attributes($request)->string('client-ip');
63
        } else {
64
            $ip_address = '127.0.0.1';
65
        }
66
67
        DB::table('log')->insert([
68
            'log_type'    => $log_type,
69
            'log_message' => $message,
70
            'ip_address'  => $ip_address,
71
            'user_id'     => Auth::id(),
72
            'gedcom_id'   => $tree?->id(),
73
        ]);
74
    }
75
76
    /**
77
     * Store a configuration message in the message log.
78
     *
79
     * @param string    $message
80
     * @param Tree|null $tree
81
     *
82
     * @return void
83
     */
84
    public static function addConfigurationLog(string $message, Tree|null $tree = null): void
85
    {
86
        self::addLog($message, self::TYPE_CONFIGURATION, $tree);
87
    }
88
89
    /**
90
     * Store an edit message in the message log.
91
     *
92
     * @param string $message
93
     * @param Tree   $tree
94
     *
95
     * @return void
96
     */
97
    public static function addEditLog(string $message, Tree $tree): void
98
    {
99
        self::addLog($message, self::TYPE_EDIT, $tree);
100
    }
101
102
    /**
103
     * Store an error message in the message log.
104
     *
105
     * @param string $message
106
     *
107
     * @return void
108
     */
109
    public static function addErrorLog(string $message): void
110
    {
111
        self::addLog($message, self::TYPE_ERROR);
112
    }
113
114
    /**
115
     * Store an media management message in the message log.
116
     *
117
     * @param string $message
118
     *
119
     * @return void
120
     */
121
    public static function addMediaLog(string $message): void
122
    {
123
        self::addLog($message, self::TYPE_MEDIA);
124
    }
125
126
    /**
127
     * Store a search event in the message log.
128
     * Unlike most webtrees activity, search is not restricted to a single tree,
129
     * so we need to record which trees were searched.
130
     *
131
     * @param string      $message
132
     * @param array<Tree> $trees Which trees were searched
133
     *
134
     * @return void
135
     */
136
    public static function addSearchLog(string $message, array $trees): void
137
    {
138
        foreach ($trees as $tree) {
139
            self::addLog($message, self::TYPE_SEARCH, $tree);
140
        }
141
    }
142
}
143