/home/lafermj/www/wp-content/plugins/the-post-grid/app/Controllers/Api/RestApi.php
<?php

namespace RT\ThePostGrid\Controllers\Api;

use RT\ThePostGrid\Helpers\Fns;

/**
 * RestApi Class
 */
class RestApi {
	/**
	 * Register rest route
	 */
	public function __construct() {
		add_action( 'rest_api_init', [ $this, 'init_rest_routes' ], 99 );
		new ImageSizeV1();
		new GetPostsV1();
		new GetTickerPostsV1();
		new ACFV1();
		new FrontEndFilterV1();
		//new ElImport();
		new GetCategories();
		new GetBuilderData();
		new GetTermObject();
	}

	/**
	 * Init rest route
	 *
	 * @return void
	 */
	public function init_rest_routes() {
		$this->rttpg_register_rest_fields();
	}

	function rttpg_register_rest_fields() {
		$post_type = Fns::get_post_types();

		foreach ( $post_type as $key => $value ) {

			// Featured image.
			register_rest_field(
				$key,
				'rttpg_featured_image_url',
				[
					'get_callback'    => [ $this, 'rttpg_get_featured_image_url' ],
					'update_callback' => null,
					'schema'          => [
						'description' => __( 'Different sized featured images' ),
						'type'        => 'array',
					],
				]
			);

			// Author info.
			register_rest_field(
				$key,
				'rttpg_author',
				[
					'get_callback'    => [ $this, 'rttpg_get_author_info' ],
					'update_callback' => null,
					'schema'          => null,
				]
			);

			// Add comment info.
			register_rest_field(
				$key,
				'rttpg_comment',
				[
					'get_callback'    => [ $this, 'rttpg_get_comment_info' ],
					'update_callback' => null,
					'schema'          => null,
				]
			);

			// Category links.
			register_rest_field(
				$key,
				'rttpg_category',
				[
					'get_callback'    => [ $this, 'rttpg_get_category_list' ],
					'update_callback' => null,
					'schema'          => [
						'description' => __( 'Category list links' ),
						'type'        => 'string',
					],
				]
			);

			// Excerpt.
			register_rest_field(
				$key,
				'rttpg_excerpt',
				[
					'get_callback'    => [ $this, 'rttpg_get_excerpt' ],
					'update_callback' => null,
					'schema'          => null,
				]
			);
		}
	}


	// Author.
	function rttpg_get_author_info( $object ) {
		$author = ( isset( $object['author'] ) ) ? $object['author'] : '';

		$author_data['display_name'] = get_the_author_meta( 'display_name', $author );
		$author_data['author_link']  = get_author_posts_url( $author );

		return $author_data;
	}

// Comment.
	function rttpg_get_comment_info( $object ) {
		$comments_count = wp_count_comments( $object['id'] );

		return $comments_count->total_comments;
	}

// Category list.

	function rttpg_get_category_list( $object ) {
		$taxonomies = get_post_taxonomies( $object['id'] );
		if ( 'post' === get_post_type() ) {
			return get_the_category_list( esc_html( ' ' ), '', $object['id'] );
		} else {
			if ( ! empty( $taxonomies ) ) {
				return get_the_term_list( $object['id'], $taxonomies[0], ' ' );
			}
		}
	}


	// Feature image.
	function rttpg_get_featured_image_url( $object ) {

		$featured_images = [];
		if ( ! isset( $object['featured_media'] ) ) {
			return $featured_images;
		}

		$image = wp_get_attachment_image_src( $object['featured_media'], 'full', false );
		if ( is_array( $image ) ) {
			$featured_images['full']      = $image;
			$featured_images['landscape'] = wp_get_attachment_image_src( $object['featured_media'], 'rttpg_landscape', false );
			$featured_images['portraits'] = wp_get_attachment_image_src( $object['featured_media'], 'rttpg_portrait', false );
			$featured_images['thumbnail'] = wp_get_attachment_image_src( $object['featured_media'], 'rttpg_thumbnail', false );

			$image_sizes = Fns::get_image_sizes();
			foreach ( $image_sizes as $key => $value ) {
				$size                     = $key;
				$featured_images[ $size ] = wp_get_attachment_image_src(
					$object['featured_media'],
					$size,
					false
				);
			}

			return $featured_images;
		}

	}

	// Excerpt.
	function rttpg_get_excerpt( $object ) {
		$excerpt = wp_trim_words( get_the_excerpt( $object['id'] ) );
		if ( ! $excerpt ) {
			$excerpt = null;
		}

		return $excerpt;
	}

}