yf_logs_user_error classUser errors handler.
| File | plugins/logs/classes/logs/yf_logs_user_error.class.php |
|---|---|
| Use | _class('logs_user_error', 'classes/logs/') |
A site sets them in its config with $PROJECT_CONF['logs_user_error']['NAME'] = ...;
| Property | Default | Description |
|---|---|---|
$DB_LOG_ENVbool |
false |
|
$ENV_ARRAYSstring |
'GPF' |
Could be any sequence from GPFCS |
$LOG_INTO_DBbool |
true |
|
$LOG_USER_ERRORS_FILE_NAMEstring |
'user_errors.log' |
None without a leading underscore.
_ hooks and helpers; not routable as page actionspublic function _prepare_env()
Track user error message.
public function _prepare_env()
{
$this->ENV_ARRAYS = strtoupper($this->ENV_ARRAYS);
$data = [];
// Include only desired arrays
if (false !== strpos($this->ENV_ARRAYS, 'G') && ! empty($_GET)) {
$data['_GET'] = $_GET;
}
if (false !== strpos($this->ENV_ARRAYS, 'P') && ! empty($_POST)) {
$data['_POST'] = $_POST;
}
if (false !== strpos($this->ENV_ARRAYS, 'F') && ! empty($_FILES)) {
$data['_FILES'] = $_FILES;
}
if (false !== strpos($this->ENV_ARRAYS, 'C') && ! empty($_COOKIE)) {
$data['_COOKIE'] = $_COOKIE;
}
if (false !== strpos($this->ENV_ARRAYS, 'S') && ! empty($_SESSION)) {
$data['_SESSION'] = $_SESSION;
}
return ! empty($data) ? serialize($data) : '';
}
public function _track_error($error_message = '')
Track user error message.
public function _track_error($error_message = '')
{
if (empty($error_message)) {
return false;
}
// Try to get user error message source
$backtrace = debug_backtrace();
$cur_trace = $backtrace[1];
$next_trace = $backtrace[2];
// Prepare log text
$text = '## LOG STARTS AT ' . date('Y-m-d H:i:s') . '; QUERY_STRING: ' . ($_SERVER['QUERY_STRING'] ?? null) . '; REFERER: ' . ($_SERVER['HTTP_REFERER'] ?? null) . '; USER_ID: ' . main()->USER_ID . '; USER_GROUP: ' . main()->USER_GROUP . '; SITE_ID: ' . SITE_ID . '; USER_AGENT: ' . ($_SERVER['HTTP_USER_AGENT'] ?? null) . " ##\r\n";
$text .= 'URL: http://' . ($_SERVER['HTTP_HOST'] ?? null) . ($_SERVER['REQUEST_URI'] ?? null) . "\r\n";
$text .= 'SOURCE FILE: "' . $cur_trace['file'] . '" at LINE ' . $cur_trace['line'] . '; ' . ( ! empty($next_trace['class']) ? 'METHOD: ' . $next_trace['class'] . '->' . $next_trace['function'] : 'FUNCTION: ' . $next_trace['function']) . ";\r\n";
$text .= 'MESSAGE: ' . $error_message . "\r\n";
$text .= "## LOG ENDS ##\r\n";
// Do add current error info to the log file
$h = fopen(INCLUDE_PATH . $this->LOG_USER_ERRORS_FILE_NAME, 'a');
fwrite($h, $text);
fclose($h);
// Do store message into database (also check if that possible)
if ($this->LOG_INTO_DB && is_object(db())) {
$error_type = 0;
db()->insert_safe('log_user_errors', [
'error_level' => (int) $error_type,
'error_text' => $error_message,
'source_file' => $cur_trace['file'],
'source_line' => (int) ($cur_trace['line']),
'date' => time(),
'site_id' => (int) conf('SITE_ID'),
'user_id' => (int) (($_SESSION[MAIN_TYPE_ADMIN ? 'admin_id' : 'user_id'] ?? null)),
'user_group' => (int) (($_SESSION[MAIN_TYPE_ADMIN ? 'admin_group' : 'user_group'] ?? null)),
'is_admin' => MAIN_TYPE_ADMIN ? 1 : 0,
'ip' => common()->get_ip(),
'query_string' => WEB_PATH . '?' . ($_SERVER['QUERY_STRING'] ?? null),
'user_agent' => ($_SERVER['HTTP_USER_AGENT'] ?? null),
'referer' => ($_SERVER['HTTP_REFERER'] ?? null),
'request_uri' => ($_SERVER['REQUEST_URI'] ?? null),
'env_data' => $this->DB_LOG_ENV ? $this->_prepare_env() : '',
'object' => ($_GET['object'] ?? null),
'action' => ($_GET['action'] ?? null),
]);
}
}