static function ( $key, $default ) { return get_option( 'hfe_' . $key, $default ); }, 'update' => static function ( $key, $value ) { $autoload = ( 'usage_events_pushed' === $key ); update_option( 'hfe_' . $key, $value, $autoload ); }, ] ); return self::$instance; } /** * Track an event. See BSF_Analytics_Events::track() for behavior. * * @param string $event_name Event identifier. * @param string $event_value Primary value (version, mode, etc.). * @param array $properties Additional context as key-value pairs. * @param bool $force When true, bypass pushed dedup and overwrite pending entry. * @since 2.8.6 * @since 2.8.7 Added the $force parameter. * @return void */ public static function track( $event_name, $event_value = '', $properties = [], $force = false ) { $events = self::instance(); if ( null === $events ) { return; } $events->track( $event_name, $event_value, $properties, $force ); } /** * Flush pending events into payload, then clean up. * * @since 2.8.6 * @return array Pending events. Empty array if none or library unavailable. */ public static function flush_pending() { $events = self::instance(); if ( null === $events ) { return []; } return $events->flush_pending(); } /** * Check if an event has already been tracked (sent or pending). * * @param string $event_name Event identifier. * @since 2.8.6 * @return bool */ public static function is_tracked( $event_name ) { $events = self::instance(); if ( null === $events ) { return false; } return $events->is_tracked( $event_name ); } /** * Remove specific event names from the pushed dedup flag, allowing them to be re-tracked. * Empty array clears all pushed events. * * @param array $event_names Event names to remove. * @since 2.8.7 * @return void */ public static function flush_pushed( $event_names = [] ) { $events = self::instance(); if ( null === $events ) { return; } $events->flush_pushed( $event_names ); } } }