wp_generate_uuid4(), 'time' => gmdate( 'c' ), 'label' => sanitize_text_field( ! empty( $label ) ? $label : __( 'SEO configuration snapshot', 'publishrank' ) ), 'actor' => sanitize_text_field( ! empty( $actor ) ? $actor : ( is_user_logged_in() ? wp_get_current_user()->user_login : 'system' ) ), 'data' => $data, ); $all = self::all(); array_unshift( $all, $event ); update_option( self::OPTION, array_slice( $all, 0, self::MAX ), false ); return $event; } public static function get( $id ) { foreach ( self::all() as $event ) { if ( isset( $event['id'] ) && hash_equals( (string) $event['id'], (string) $id ) ) { return $event; } } return null; } public static function restore( $id ) { $event = self::get( $id ); if ( ! $event || empty( $event['data'] ) || ! is_array( $event['data'] ) ) { return new \WP_Error( 'publishrank_snapshot_missing', __( 'Snapshot not found.', 'publishrank' ) ); } self::snapshot( __( 'Pre-restore safety snapshot', 'publishrank' ) ); foreach ( $event['data'] as $key => $value ) { if ( in_array( $key, self::tracked_options(), true ) ) { update_option( $key, $value, false ); } } return true; } private static function safe_value( $value ) { if ( is_scalar( $value ) || null === $value ) { return $value; } return is_array( $value ) ? array_slice( $value, 0, 500, true ) : (string) $value; } }