$events Events. * @param int $retention_days Retention days. * @param int $max_records Max records. * @param int|null $now Current timestamp. * * @return array */ public function filter_events( array $events, int $retention_days, int $max_records, ?int $now = null ): array { $now = null === $now ? time() : max( 1, $now ); $retention_days = max( 1, min( 90, $retention_days ) ); $max_records = max( 25, min( 1000, $max_records ) ); $cutoff = $now - ( $retention_days * DAY_IN_SECONDS ); $filtered = array(); foreach ( $events as $event ) { if ( ! $event instanceof SpamEvent ) { continue; } if ( $event->get_created_at() < $cutoff ) { continue; } $filtered[] = $event; } usort( $filtered, static function ( SpamEvent $first, SpamEvent $second ): int { return $second->get_created_at() <=> $first->get_created_at(); } ); return array_slice( $filtered, 0, $max_records ); } }