prefix . 'oc_events'; $insert_data = array( 'created_gmt' => current_time( 'mysql', true ), 'event' => sanitize_text_field( $event ), 'source' => isset( $data['source'] ) ? sanitize_text_field( $data['source'] ) : '', 'product_id' => isset( $data['product_id'] ) ? absint( $data['product_id'] ) : null, 'order_id' => isset( $data['order_id'] ) ? absint( $data['order_id'] ) : null, 'agent_id' => isset( $data['agent_id'] ) ? absint( $data['agent_id'] ) : null, 'session_hash' => self::get_session_hash(), ); /** * Filter event data before logging. * * @since 1.0.0 * @param array $insert_data Data to be inserted. * @param string $event Event type. * @param array $data Original event data. */ $insert_data = apply_filters( 'ordercourier_event_data', $insert_data, $event, $data ); $wpdb->insert( $table_name, $insert_data, array( '%s', '%s', '%s', '%d', '%d', '%d', '%s' ) ); /** * Action fired after an event is logged. * * @since 1.0.0 * @param string $event Event type. * @param array $data Event data. */ do_action( 'ordercourier_log_event', $event, $data ); } /** * Get session hash. * * @return string */ private static function get_session_hash() { $identifier = Rate_Limiter::get_identifier(); return md5( $identifier ); } /** * Cleanup old events. */ public static function cleanup_old_events() { global $wpdb; $retention_days = Settings::get( 'data_retention_days', 90 ); $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE created_gmt < DATE_SUB(NOW(), INTERVAL %d DAY)', $wpdb->prefix . 'oc_events', $retention_days ) ); } /** * Get events count. * * @param array $args Query arguments. * @return array */ public static function get_events_summary( $args = array() ) { global $wpdb; $from = ! empty( $args['from'] ) ? (string) $args['from'] : ''; $to = ! empty( $args['to'] ) ? (string) $args['to'] : ''; $source = ! empty( $args['source'] ) ? (string) $args['source'] : ''; // Empty filters are skipped inside the prepared statement, so the SQL is a single literal. $results = $wpdb->get_results( $wpdb->prepare( "SELECT event, source, COUNT(*) AS count FROM %i WHERE ( %s = '' OR created_gmt >= %s ) AND ( %s = '' OR created_gmt <= %s ) AND ( %s = '' OR source = %s ) GROUP BY event, source", $wpdb->prefix . 'oc_events', $from, $from, $to, $to, $source, $source ) ); /** * Filter events summary data. * * @since 1.0.0 * @param array $results Query results. * @param array $args Query arguments. */ return apply_filters( 'ordercourier_events_summary', $results, $args ); } }