'object', 'properties' => [ 'limit' => [ 'description' => esc_html__( 'Maximum number of events to return.', 'wp-mail-smtp' ), 'type' => 'integer', 'minimum' => 1, 'maximum' => 100, 'default' => 20, ], 'offset' => [ 'description' => esc_html__( 'Number of events to skip.', 'wp-mail-smtp' ), 'type' => 'integer', 'minimum' => 0, 'default' => 0, ], 'severity' => [ 'description' => esc_html__( 'Filter events by severity.', 'wp-mail-smtp' ), 'type' => 'string', 'enum' => [ 'error', 'debug' ], ], ], ]; } /** * Output schema. * * @since 4.9.0 * * @return array */ public function get_output_schema() { return [ 'type' => 'object', 'properties' => [ 'events' => [ 'type' => 'array', 'items' => [ 'type' => 'object', 'properties' => [ 'id' => [ 'type' => 'integer' ], 'created_date' => [ 'type' => 'string' ], 'severity' => [ 'type' => 'string' ], 'content' => [ 'type' => 'string' ], ], ], ], 'total' => [ 'type' => 'integer' ], 'limit' => [ 'type' => 'integer' ], 'offset' => [ 'type' => 'integer' ], ], ]; } /** * Execute: list debug events. * * @since 4.9.0 * * @param mixed $input Input data. * * @return array */ public function execute( $input = null ) { $args = $this->normalize_input( $input ); $pagination = $this->get_pagination( $args ); $limit = $pagination['limit']; $offset = $pagination['offset']; $params = [ 'per_page' => $limit, 'offset' => $offset, ]; if ( isset( $args['severity'] ) ) { $severity = sanitize_text_field( $args['severity'] ); if ( $severity === 'error' ) { $params['type'] = Event::TYPE_ERROR; } elseif ( $severity === 'debug' ) { $params['type'] = Event::TYPE_DEBUG; } } $collection = new EventsCollection( $params ); $total = $collection->get_count(); $events = []; foreach ( $collection->get() as $event ) { $events[] = $this->format_event( $event ); } return [ 'events' => $events, 'total' => $total, 'limit' => $limit, 'offset' => $offset, ]; } /** * Format a single debug event for output. * * @since 4.9.0 * * @param Event $event Debug event model. * * @return array */ private function format_event( Event $event ) { return [ 'id' => $event->get_id(), 'created_date' => $this->to_iso8601( $event->get_created_at() ), 'severity' => $event->get_type() === Event::TYPE_ERROR ? 'error' : 'debug', 'content' => $event->get_content(), ]; } }