function fn_stat_save_session_data(&$stat_data) { $stat_data['user_agent'] = $_SERVER['HTTP_USER_AGENT']; $ip = fn_get_ip(true); $stat_data['host_ip'] = $ip['host']; $stat_data['proxy_ip'] = $ip['proxy']; $stat_data['client_language'] = strtoupper(empty($stat_data['client_language']) ? empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? '' : $_SERVER['HTTP_ACCEPT_LANGUAGE'] : $stat_data['client_language']); $stat_data['session'] = Session::get_id(); $stat_data['host_ip'] = $ip['host']; $stat_data['proxy_ip'] = $ip['proxy']; $stat_data['ip_id'] = fn_stat_ip_exist($ip); if (!empty($stat_data['browser'])) { $browser_id = db_get_field("SELECT browser_id FROM ?:stat_browsers WHERE browser = ?s AND version = ?s", $stat_data['browser'], $stat_data['browser_version']); if (empty($browser_id)) { $browser_id = db_query('INSERT INTO ?:stat_browsers ?e', array('browser' => $stat_data['browser'], 'version' => $stat_data['browser_version'])); } $stat_data['browser_id'] = $browser_id; } $parse_url = parse_url(@$stat_data['referrer']); $stat_data['referrer_scheme'] = empty($parse_url['scheme']) ? '' : $parse_url['scheme']; $stat_data['referrer_host'] = empty($parse_url['host']) ? '' : $parse_url['host']; $search_data = fn_get_search_words(@$stat_data['referrer']); if (!empty($search_data['engine'])) { //$stat_data['engine'] = $search_data['engine']; $engine_id = db_get_field("SELECT engine_id FROM ?:stat_search_engines WHERE engine = ?s", $search_data['engine']); if (empty($engine_id)) { $engine_id = db_query('INSERT INTO ?:stat_search_engines ?e', array('engine' => $search_data['engine'])); } $stat_data['engine_id'] = empty($engine_id) ? 0 : $engine_id; } if (!empty($search_data['phrase'])) { $phrase_id = db_get_field("SELECT phrase_id FROM ?:stat_search_phrases WHERE phrase = ?s", $search_data['phrase']); if (empty($phrase_id)) { $phrase_id = db_query('INSERT INTO ?:stat_search_phrases ?e', array('phrase' => $search_data['phrase'])); } $stat_data['phrase_id'] = empty($phrase_id) ? 0 : $phrase_id; } if (!empty($stat_data['client_language'])) { $is_lang = db_get_field("SELECT lang_code FROM ?:stat_languages WHERE lang_code = ?s", $stat_data['client_language']); // If there is not long language code in DB then save short language code if (empty($is_lang)) { $stat_data['client_language'] = substr($stat_data['client_language'], 0, 2); } } $stat_data['expiry'] = TIME + SESSION_ALIVE_TIME; $session_data = fn_check_table_fields($stat_data, 'stat_sessions'); $sess_id = db_query('INSERT INTO ?:stat_sessions ?e', $session_data); // Set the cookie 'stat_uniq_code' to identify unique clients. $stat_uniq_code = fn_get_cookie('stat_uniq_code'); if (!empty($sess_id) && (empty($stat_uniq_code) || $stat_uniq_code >= $sess_id)) { $stat_uniq_code = $sess_id; } fn_set_cookie('stat_uniq_code', $stat_uniq_code, 365 * 24 * 3600); if (!empty($sess_id)) { db_query('UPDATE ?:stat_sessions SET ?u WHERE sess_id = ?i', array('uniq_code' => $stat_uniq_code), $sess_id); } return $sess_id; }
function fn_statistics_track_robots($tpl_output, &$view) { if (strpos($tpl_output, '<title>') === false) { return $tpl_output; } $sess_id = db_get_field('SELECT sess_id FROM ?:stat_sessions WHERE uniq_code = ?i AND timestamp > ?i', fn_crc32($_SERVER['HTTP_USER_AGENT']), TIME - 24 * 60 * 60); if (empty($sess_id)) { $ip = fn_get_ip(true); $referer = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; $parse_url = parse_url($referer); $stat_data = array('user_agent' => $_SERVER['HTTP_USER_AGENT'], 'host_ip' => $ip['host'], 'proxy_ip' => $ip['proxy'], 'client_language' => $_SERVER['HTTP_ACCEPT_LANGUAGE'], 'ip_id' => fn_stat_ip_exist($ip), 'client_type' => 'B', 'robot' => CRAWLER, 'referrer' => $referer, 'timestamp' => TIME, 'referrer_scheme' => empty($parse_url['scheme']) ? '' : $parse_url['scheme'], 'referrer_host' => empty($parse_url['host']) ? '' : $parse_url['host'], 'expiry' => 0, 'uniq_code' => fn_crc32($_SERVER['HTTP_USER_AGENT'])); $request_type = STAT_LAST_REQUEST; $sess_id = db_query('INSERT INTO ?:stat_sessions ?e', $stat_data); $last_url = ''; } else { $last_url = db_get_field("SELECT url FROM ?:stat_requests WHERE sess_id = ?i AND (request_type & ?i) = ?i", $sess_id, STAT_LAST_REQUEST, STAT_LAST_REQUEST); db_query("UPDATE ?:stat_requests SET request_type = request_type & " . STAT_ORDINARY_REQUEST . " WHERE sess_id = ?s", $sess_id); $request_type = STAT_END_REQUEST; } // Add to stat requests $this_url = fn_stat_prepare_url(REAL_URL); if ($last_url != $this_url) { $title = ''; if (preg_match_all('/\\<title\\>(.*?)\\<\\/title\\>/', $tpl_output, $m)) { $title = fn_html_escape($m[1][0], true); } $ve = array('sess_id' => $sess_id, 'timestamp' => TIME, 'url' => $this_url, 'title' => $title, 'https' => defined('HTTPS') ? 'Y' : 'N', 'loadtime' => microtime(true) - MICROTIME, 'request_type' => $request_type); db_query("INSERT INTO ?:stat_requests ?e", $ve); } return $tpl_output; }