$v) { if ($v) { $auto[] = $k; } } if ($auto !== []) { $parts[] = 'automation=' . implode(',', $auto); } } if ($parts !== []) { return implode(' | ', $parts); } return json_encode($decoded, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } } if (!function_exists('cloak_visitor_log_fp_risk_explain')) { /** * 二次风控 hdata + reason 判定过程解析 * * @return array{summary:string,html:string,data:array} */ function cloak_visitor_log_fp_risk_explain($fpHdata, $reason, $result, $domain = '') { if (!class_exists('FpRiskExplain', false)) { require_once dirname(__DIR__) . '/Cloak/FpRiskExplain.php'; } return FpRiskExplain::build($fpHdata, $reason, $result, $domain); } } if (!function_exists('cloak_visitor_log_apply_result_filter')) { /** * 日志列表 result 筛选:默认排除 wait(检测中);显式选 wait/true/false 时精确匹配 * * @return string SQL 片段(含前导 AND) */ function cloak_visitor_log_apply_result_filter(mysqli $conn, $resultParam): string { $resultParam = trim((string) $resultParam); if ($resultParam === 'wait') { return " AND `result` = 'wait'"; } if ($resultParam === 'true' || $resultParam === 'false') { return " AND `result` = '" . cloak_db_escape($conn, $resultParam) . "'"; } return " AND (`result` IS NULL OR `result` <> 'wait')"; } }