1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
<?php
/**
*
* @package phpbb_log
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* This class is used to add entries into the log table.
*
* @package phpbb_log
*/
class phpbb_log implements phpbb_log_interface
{
/**
* Keeps the status of the log-system. Is the log enabled or disabled?
*/
private $enabled;
/**
* The table we use to store our logs.
*/
private $log_table;
/**
* Constructor
*/
public function __construct($log_table)
{
$this->log_table = $log_table;
$this->enable();
}
/**
* This function returns the state of the log-system.
*
* @return bool True if log is enabled
*/
public function is_enabled()
{
return $this->enabled;
}
/**
* This function allows disable the log-system. When add_log is called, the log will not be added to the database.
*/
public function disable()
{
$this->enabled = false;
}
/**
* This function allows re-enable the log-system.
*/
public function enable()
{
$this->enabled = true;
}
/**
* Adds a log to the database
*
* @param string $mode The mode defines which log_type is used and in which log the entry is displayed.
* @param int $user_id User ID of the user
* @param string $log_ip IP address of the user
* @param string $log_operation Name of the operation
* @param int $log_time Timestamp when the log was added.
* @param array $additional_data More arguments can be added, depending on the log_type
*
* @return int|bool Returns the log_id, if the entry was added to the database, false otherwise.
*/
public function add($mode, $user_id, $log_ip, $log_operation, $log_time = false, $additional_data = array())
{
if (!$this->is_enabled())
{
return false;
}
global $db;
/**
* @todo: enable when events are merged
*
global $db, $phpbb_dispatcher;
*/
if ($log_time == false)
{
$log_time = time();
}
$sql_ary = array(
'user_id' => $user_id,
'log_ip' => $log_ip,
'log_time' => $log_time,
'log_operation' => $log_operation,
);
switch ($mode)
{
case 'admin':
$sql_ary += array(
'log_type' => LOG_ADMIN,
'log_data' => (!sizeof($additional_data)) ? '' : serialize($additional_data),
);
break;
case 'mod':
$forum_id = (int) $additional_data['forum_id'];
unset($additional_data['forum_id']);
$topic_id = (int) $additional_data['topic_id'];
unset($additional_data['topic_id']);
$sql_ary += array(
'log_type' => LOG_MOD,
'forum_id' => $forum_id,
'topic_id' => $topic_id,
'log_data' => (!sizeof($additional_data)) ? '' : serialize($additional_data),
);
break;
case 'user':
$reportee_id = (int) $additional_data['reportee_id'];
unset($additional_data['reportee_id']);
$sql_ary += array(
'log_type' => LOG_USERS,
'reportee_id' => $reportee_id,
'log_data' => (!sizeof($additional_data)) ? '' : serialize($additional_data),
);
break;
case 'critical':
$sql_ary += array(
'log_type' => LOG_CRITICAL,
'log_data' => (!sizeof($additional_data)) ? '' : serialize($additional_data),
);
break;
default:
/**
* @todo: enable when events are merged
*
if ($phpbb_dispatcher != null)
{
$vars = array('mode', 'user_id', 'log_ip', 'log_time', 'additional_data', 'sql_ary');
$event = new phpbb_event_data(compact($vars));
$phpbb_dispatcher->dispatch('core.add_log_case', $event);
extract($event->get_data_filtered($vars));
}
*/
// We didn't find a log_type, so we don't save it in the database.
if (!isset($sql_ary['log_type']))
{
return false;
}
}
/**
* @todo: enable when events are merged
*
if ($phpbb_dispatcher != null)
{
$vars = array('mode', 'user_id', 'log_ip', 'log_time', 'additional_data', 'sql_ary');
$event = new phpbb_event_data(compact($vars));
$phpbb_dispatcher->dispatch('core.add_log', $event);
extract($event->get_data_filtered($vars));
}
*/
$db->sql_query('INSERT INTO ' . $this->log_table . ' ' . $db->sql_build_array('INSERT', $sql_ary));
return $db->sql_nextid();
}
}
|