yf_logs_user_error class

User errors handler.

Fileplugins/logs/classes/logs/yf_logs_user_error.class.php
Use_class('logs_user_error', 'classes/logs/')

Public properties

A site sets them in its config with $PROJECT_CONF['logs_user_error']['NAME'] = ...;

PropertyDefaultDescription
$DB_LOG_ENV
bool
false
$ENV_ARRAYS
string
'GPF' Could be any sequence from GPFCS
$LOG_INTO_DB
bool
true
$LOG_USER_ERRORS_FILE_NAME
string
'user_errors.log'

Public methods 2

None without a leading underscore.

Methods starting with _ hooks and helpers; not routable as page actions

_prepare_env

public 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) : '';
    }

_track_error

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),
            ]);
        }
    }