<?php /** * Suppress "error - 0 - No summary was found for this file" on phpdoc generation * * @package WPDataAccess\Utilities */ namespace WPDataAccess\Utilities { use WPDataAccess\WPDA; /** * Class WPDA_Export_Json * * @author Peter Schulz * @since 2.0.13 */ class WPDA_Export_Json extends WPDA_Export_Formatted { /** * Variable used for loop processing * * @var bool */ protected $first_row = true; /** * File header for JSON export * * @since 2.0.13 */ protected function header() { WPDA::sent_header( 'application/json', null, "{$this->table_names}.json" ); echo '{ "table": "' . esc_attr( $this->table_names ) . '"'; echo ', "info": "Generated by WP Data Access"'; echo ', "time": "' . esc_attr( gmdate( 'Y-m-d\TH:i:s\Z' ) ) . '"'; if ( is_array( $this->rows ) && count( $this->rows ) > 0 ) {//phpcs:ignore - 8.1 proof echo ', "columns": ['; $first_col = true; foreach ( $this->rows[0] as $column_name => $column_value ) { if ( $first_col ) { $first_col = false; } else { echo ', '; } echo '"' . esc_attr( $column_name) . '"'; } echo ']'; } echo ', "row_count": ' . esc_attr( $this->row_count ); echo ', "rows": ['; } /** * Process one row to be export in JSON format * * @param array $row * * @since 2.0.13 */ protected function row( $row ) { if ( $this->first_row ) { $this->first_row = false; } else { echo ', '; } echo '['; $first_col = true; foreach ( $row as $column_name => $column_value ) { if ( $first_col ) { $first_col = false; } else { echo ', '; } if ( null === $column_value ) { echo 'null'; } else { $is_string = 'number' === WPDA::get_type( $this->data_types[ $column_name ] ) ? '' : '"'; echo $is_string . $column_value . $is_string; // phpcs:ignore WordPress.Security.EscapeOutput } } echo ']'; } /** * File footer for JSON export * * @since 2.0.13 */ protected function footer() { echo ']}'; } } }