File "class-kco-logger.php"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/klarna-checkout-for-woocommerce/classes/class-kco-logger.php
File size: 3.89 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Logging class file.
*
* @package Klarna_Checkout/Classes
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* KCO_Logger class.
*/
class KCO_Logger {
/**
* Log message string
*
* @var $log
*/
private static $log;
/**
* Logs an event.
*
* @param string $data The data string.
*/
public static function log( $data ) {
$settings = get_option( 'woocommerce_kco_settings' );
if ( 'yes' === $settings['logging'] ) {
$message = self::format_data( $data );
if ( empty( self::$log ) ) {
self::$log = new WC_Logger();
}
self::$log->add( 'klarna-checkout-for-woocommerce', wp_json_encode( $message ) );
}
if ( isset( $data['response']['code'] ) && ( $data['response']['code'] < 200 || $data['response']['code'] > 299 ) ) {
self::log_to_db( $data );
}
}
/**
* Formats the log data to prevent json error.
*
* @param string $data Json string of data.
* @return array
*/
public static function format_data( $data ) {
if ( isset( $data['request']['body'] ) ) {
$data['request']['body'] = json_decode( $data['request']['body'], true );
}
return $data;
}
/**
* Formats the log data to be logged.
*
* @param string $klarna_order_id The Klarna order id.
* @param string $method The method.
* @param string $title The title for the log.
* @param array $request_args The request args.
* @param array $response The response.
* @param string $code The status code.
* @param string $request_url The request url.
* @return array
*/
public static function format_log( $klarna_order_id, $method, $title, $request_args, $response, $code, $request_url = null ) {
// Unset the snippet to prevent issues in the response.
if ( isset( $response['html_snippet'] ) ) {
unset( $response['html_snippet'] );
}
// Unset the snippet to prevent issues in the request body.
if ( isset( $request_args['body'] ) ) {
$request_body = json_decode( $request_args['body'], true );
if ( isset( $request_body['html_snippet'] ) && $request_body['snippet'] ) {
unset( $request_body['html_snippet'] );
$request_args['body'] = wp_json_encode( $request_body );
}
}
return array(
'id' => $klarna_order_id,
'type' => $method,
'title' => $title,
'request' => $request_args,
'request_url' => $request_url,
'response' => array(
'body' => $response,
'code' => $code,
),
'timestamp' => date( 'Y-m-d H:i:s' ), // phpcs:ignore WordPress.DateTime.RestrictedFunctions -- Date is not used for display.
'stack' => self::get_stack(),
'plugin_version' => KCO_WC_VERSION,
'user_agent' => wc_get_user_agent(),
);
}
/**
* Gets the stack for the request.
*
* @return array
*/
public static function get_stack() {
$debug_data = debug_backtrace(); // phpcs:ignore WordPress.PHP.DevelopmentFunctions -- Data is not used for display.
$stack = array();
foreach ( $debug_data as $data ) {
$extra_data = '';
if ( ! in_array( $data['function'], array( 'get_stack', 'format_log' ), true ) ) {
if ( in_array( $data['function'], array( 'do_action', 'apply_filters' ), true ) ) {
if ( isset( $data['object'] ) && $data['object'] instanceof WP_Hook ) {
$priority = $data['object']->current_priority();
$name = is_array( $data['object']->current() ) ? key( $data['object']->current() ) : '';
$extra_data = $name . ' : ' . $priority;
}
}
}
$stack[] = $data['function'] . $extra_data;
}
return $stack;
}
/**
* Logs an event in the WP DB.
*
* @param array $data The data to be logged.
*/
public static function log_to_db( $data ) {
$logs = get_option( 'krokedil_debuglog_kco', array() );
if ( ! empty( $logs ) ) {
$logs = json_decode( $logs );
}
$logs = array_slice( $logs, -14 );
$logs[] = $data;
$logs = wp_json_encode( $logs );
update_option( 'krokedil_debuglog_kco', $logs, false );
}
}