<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ( ! class_exists( 'Gutentor_Featured' ) ) {

	/**
	 * Gutentor_Featured Class For Gutentor
	 *
	 * @package Gutentor
	 * @since 2.0.5
	 */
	class Gutentor_Featured extends Gutentor_Query_Elements {

		/**
		 * Gets an instance of this object.
		 * Prevents duplicate instances which avoid interface and improves performance.
		 *
		 * @static
		 * @access public
		 * @since 2.0.0
		 * @return object
		 */
		public static function get_instance() {

			// Store the instance locally to avoid private static replication.
			static $instance = null;

			// Only run these methods if they haven't been ran previously.
			if ( null === $instance ) {
				$instance = new self();
			}

			// Always return the instance.
			return $instance;
		}

		/**
		 * Run Block
		 *
		 * @access public
		 * @since 2.0.0
		 * @return void
		 */
		public function run() {
			add_filter( 'gutentor_post_module_p2_query_data', array( $this, 'post_template' ), 999, 3 );
			add_filter( 'gutentor_term_module_t2_query_data', array( $this, 'term_template' ), 999, 3 );
		}

		/**
		 * Load Dependencies
		 * Used for blog template loading
		 *
		 * @since      1.0.1
		 * @package    Gutentor
		 * @author     Gutentor <info@gutentor.com>
		 */
		public function load_dependencies() {
			/*Load file once*/
			static $loaded = false;
			if ( ! $loaded ) {
				$loaded = true;
				/*Template 1*/
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-1/t-1.php';
				/*Template 2*/
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-2/t-1.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-2/t-2.php';
				/*Template 3*/
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-3/t-1.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-3/t-2.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-3/t-3.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-3/t-4.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-3/t-5.php';
				/*Template 4*/
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-1.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-2.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-3.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-4.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-5.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-6.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-7.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-8.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-9.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-4/t-10.php';
				/*Template 5*/
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-1.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-2.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-3.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-4.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-5.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-6.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-7.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-8.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-9.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-10.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-11.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-5/t-12.php';
				/*Template 6*/
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-1.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-2.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-3.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-4.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-5.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-6.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-7.php';
				require_once GUTENTOR_PATH . 'includes/block-templates/featured/n-6/t-8.php';
			}
		}

		/**
		 * Check if P2
		 *
		 * @param {array} output
		 *
		 * @return {boolean}
		 */
		public function isP2( $attributes ) {
			$block_name = ( isset( $attributes['gName'] ) ) ? $attributes['gName'] : '';
			if ( 'gutentor/p2' !== $block_name ) {
				return false;
			}
			$template = ( isset( $attributes['p2Temp'] ) ) ? $attributes['p2Temp'] : '';
			if ( $this->template !== $template ) {
				return false;
			}
			$number = ( isset( $attributes['postsToShow'] ) ) ? $attributes['postsToShow'] : '';
			if ( $this->number !== $number ) {
				return false;
			}
			return true;
		}

		/**
		 * Check if T2
		 *
		 * @param {array} output
		 *
		 * @return {boolean}
		 */
		public function isT2( $attributes ) {
			$block_name = ( isset( $attributes['gName'] ) ) ? $attributes['gName'] : '';
			if ( 'gutentor/t2' !== $block_name ) {
				return false;
			}
			$template = ( isset( $attributes['t2Temp'] ) ) ? $attributes['t2Temp'] : '';
			if ( $this->template !== $template ) {
				return false;
			}
			$number = ( isset( $attributes['t2Number'] ) ) ? $attributes['t2Number'] : '';
			if ( $this->number !== $number ) {
				return false;
			}
			return true;
		}

		/**
		 * Get Single block
		 *
		 * @param {string} $data
		 * @param {array}  $post
		 * @param {array}  $attributes
		 * @return {mix}
		 */
		public function p2_single_article( $post, $attributes, $index ) {
			$output              = '';
			$enable_post_format  = isset( $attributes['pOnPostFormatOpt'] ) && $attributes['pOnPostFormatOpt'];
			$post_format_pos     = ( isset( $attributes['pPostFormatPos'] ) ) ? $attributes['pPostFormatPos'] : false;
			$cat_pos             = ( isset( $attributes['pPostCatPos'] ) ) ? $attributes['pPostCatPos'] : false;
			$enable_featured_cat = isset( $attributes['pOnFeaturedCat'] ) && $attributes['pOnFeaturedCat'];
			$enable_avatar       = isset( $attributes['pOnAvatar'] ) && $attributes['pOnAvatar'];
			$avatar_pos          = ( isset( $attributes['pAvatarPos'] ) ) ? $attributes['pAvatarPos'] : false;
			$thumb_class         = has_post_thumbnail() ? '' : 'gutentor-post-no-thumb gtf-no-thumb';
			$output             .= "<article class='" . esc_attr( apply_filters( 'gutentor_post_module_article_class', gutentor_concat_space( 'gutentor-post gtf-item-wrap', $thumb_class, 'gutentor-post-item-' . $index, 'gtf-item-' . $index ), $attributes ) ) . "'>";
			$output             .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item', gutentor_concat_space( 'gutentor-post-item', 'gtf-item' ), $attributes ) ) . "'>";

			if ( has_post_thumbnail( $post->ID ) ) {
				$enable_overlayImage = false;
				$overlayImage        = ( isset( $attributes['pFImgOColor'] ) ) ? $attributes['pFImgOColor'] : false;
				if ( $overlayImage ) {
					$enable_overlayImage = ( isset( $attributes['pFImgOColor']['enable'] ) ) ? $attributes['pFImgOColor']['enable'] : false;
				}
				$url        = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), $attributes['pFImgSize'] );
				$background = '';
				if ( isset( $url[0] ) ) {
					$background = 'style="background-image:url(' . esc_url( $url[0] ) . ')"';
				}
				$overlay = $enable_overlayImage ? 'gutentor-overlay g-overlay' : '';/*gutentor-overlay for bc*/
				$output .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item_height', gutentor_concat_space( 'gutentor-bg-image gtf-bg-image', 'gutentor-post-height gtf-item-height', $overlay ), $attributes ) ) . "' " . $background . '>';

				if ( $enable_avatar && $this->avatar_on_image_condition( $avatar_pos ) ) {
					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $this->post_format_on_image_condition( $post_format_pos ) ) {
					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $this->categories_on_image_condition( $cat_pos ) ) {
					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= apply_filters( 'gutentor_edit_post_module_featured_image_popup_data', '', $post, $attributes );
				$output .= '<div class="gutentor-post-content gtf-content">';/*gutentor-post-content for bc*/
				$output .= $this->get_primary_meta( $post, $attributes );
				if ( $enable_avatar && $avatar_pos === 'g-avatar-b-title' ) {
					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-title' ) {

					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-title' ) {

					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= $this->get_title( $post, $attributes );
				if ( $enable_avatar && $avatar_pos === 'g-avatar-b-content' ) {

					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-ct-box' ) {

					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-ct-box' ) {

					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= $this->get_description( $post, $attributes );
				$output .= $this->get_secondary_meta( $post, $attributes );
				if ( $enable_avatar && $avatar_pos === 'g-avatar-b-button' ) {

					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-button' ) {

					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-button' ) {

					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= $this->get_button( $post, $attributes );
				$output .= '</div>';/*.gtf-content*/
				$output .= apply_filters( 'gutentor_post_type_featured_after_content', '', $post, $attributes );
				$output .= '</div>';/*.gtf-bg-image*/
			} else {
				$output .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item_height', gutentor_concat_space( 'gutentor-post-height', 'gtf-item-height' ), $attributes ) ) . "'>";
				if ( $enable_avatar && $this->avatar_on_image_condition( $avatar_pos ) ) {
					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $this->post_format_on_image_condition( $post_format_pos ) ) {
					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $this->categories_on_image_condition( $cat_pos ) ) {
					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= apply_filters( 'gutentor_edit_post_module_featured_image_popup_data', '', $post, $attributes );
				$output .= '<div class="gutentor-post-content gtf-content">';/*gutentor-post-content for bc*/
				$output .= $this->get_primary_meta( $post, $attributes );
				if ( $enable_avatar && $avatar_pos === 'g-avatar-b-title' ) {
					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-title' ) {

					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-title' ) {

					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= $this->get_title( $post, $attributes );
				if ( $enable_avatar && $avatar_pos === 'g-avatar-b-content' ) {

					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-ct-box' ) {

					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-ct-box' ) {

					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= $this->get_description( $post, $attributes );
				$output .= $this->get_secondary_meta( $post, $attributes );
				if ( $enable_avatar && $avatar_pos === 'g-avatar-b-button' ) {

					$output .= $this->get_avatar_data( $post, $attributes );
				}
				if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-button' ) {

					$output .= $this->get_post_format_data( $post, $attributes );
				}
				if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-button' ) {

					$output .= $this->get_post_module_badges_collection( $post, $attributes );
				}
				$output .= $this->get_button( $post, $attributes );
				$output .= '</div>';/*.gtf-content*/
				$output .= apply_filters( 'gutentor_post_type_featured_after_content', '', $post, $attributes );
				$output .= '</div>';/*.gtf-item-height*/
			}
			$output .= '</div>';/*.gutentor-post-item*/
			$output .= '</article>';/*.article*/
			return $output;
		}

		/**
		 * Get Woo Single block
		 *
		 * @param {string} $data
		 * @param {array}  $post
		 * @param {array}  $attributes
		 * @return {mix}
		 */
		public function p2_woo_single_article( $post, $attributes, $index ) {

			$output = '';
			if ( ! gutentor_is_woocommerce_active() ) {
				return $output;
			}

			$product     = wc_get_product( $post->ID );
			$rating      = $product->get_average_rating();
			$count       = $product->get_rating_count();
			$rating_html = wc_get_rating_html( $rating, $count );

			$enable_post_format  = isset( $attributes['pOnPostFormatOpt'] ) && $attributes['pOnPostFormatOpt'];
			$post_format_pos     = ( isset( $attributes['pPostFormatPos'] ) ) ? $attributes['pPostFormatPos'] : false;
			$cat_pos             = ( isset( $attributes['pPostCatPos'] ) ) ? $attributes['pPostCatPos'] : false;
			$enable_featured_cat = isset( $attributes['pOnFeaturedCat'] ) && $attributes['pOnFeaturedCat'];
			$output             .= "<article class='" . esc_attr( apply_filters( 'gutentor_post_module_article_class', gutentor_concat_space( 'gutentor-post gtf-item-wrap', 'gutentor-post-item-' . $index, 'gtf-item-' . $index ), $attributes ) ) . "'>";
			$output             .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item', gutentor_concat_space( 'gutentor-post-item', 'gtf-item' ), $attributes ) ) . "'>";

			$enable_overlayImage = false;
			$overlayImage        = isset( $attributes['pFImgOColor'] ) && $attributes['pFImgOColor'];
			if ( $overlayImage ) {
				$enable_overlayImage = ( isset( $attributes['pFImgOColor']['enable'] ) ) ? $attributes['pFImgOColor']['enable'] : false;
			}
			$url         = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), $attributes['pFImgSize'] );
			$default_url = WC()->plugin_url() . '/assets/images/placeholder.png';
			$overlay     = $enable_overlayImage ? 'gutentor-overlay g-overlay' : '';/*gutentor-overlay for bc*/
			$output     .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item_height', gutentor_concat_space( 'gutentor-bg-image gtf-bg-image', 'gutentor-post-height gtf-item-height', $overlay ), $attributes ) ) . "' style='background-image:url(" . esc_url( is_array( $url ) && ! empty( $url ) ? $url[0] : $default_url ) . ")'>";
			if ( $enable_post_format && $this->post_format_on_image_condition( $post_format_pos ) ) {
				$output .= $this->new_badge_product( $post, $product );
			}
			if ( $enable_featured_cat && $this->categories_on_image_condition( $cat_pos ) ) {
				$output .= $this->get_woo_badge( $post, $product, $attributes );
			}
			$output .= apply_filters( 'gutentor_edit_post_module_featured_image_popup_data', '', $post, $attributes );
			$output .= '<div class="gutentor-post-content gtf-content">';/*gutentor-post-content for bc*/
			$output .= $this->get_primary_meta( $post, $attributes );
			if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-title' ) {

				$output .= $this->new_badge_product( $post, $product );
			}
			if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-title' ) {

				$output .= $this->get_woo_badge( $post, $product, $attributes );

			}
			$output .= $this->get_title( $post, $attributes );
			$output .= $this->updated_wc_price( $post, $product, $attributes );
			if ( isset( $attributes['wooOnRating'] ) && $attributes['wooOnRating'] ) {
				if ( $rating_html ) {
					$output .= '<div class="gutentor-wc-rating">';
					$output .= $rating_html;
					$output .= '</div>';
				}
			}
			if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-ct-box' ) {

				$output .= $this->new_badge_product( $post, $product );
			}
			if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-ct-box' ) {

				$output .= $this->get_woo_badge( $post, $product, $attributes );

			}
			$output .= $this->get_description( $post, $attributes );
			$output .= $this->get_secondary_meta( $post, $attributes );
			if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-button' ) {

				$output .= $this->new_badge_product( $post, $product );
			}
			if ( $enable_featured_cat && $cat_pos === 'gutentor-cat-pos-before-button' ) {

				$output .= $this->get_woo_badge( $post, $product, $attributes );

			}
			if ( isset( $attributes['pOnBtn'] ) && $attributes['pOnBtn'] ) {
				$output .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_product_button_class', 'gutentor-woo-add-to-cart wc-block-grid__product-add-to-cart', $post, $attributes ) ) . "'>";
				ob_start();
				woocommerce_template_loop_add_to_cart( array( 'gutentor-attributes' => $attributes ) );
				$output .= ob_get_clean();
				$output .= '</div>';
			}
			$output .= '</div>';/*.gtf-content*/
			$output .= apply_filters( 'gutentor_post_type_featured_after_content', '', $post, $attributes );
			$output .= '</div>';/*.gtf-bg-image*/
			$output .= '</div>';/*.gutentor-post-item*/
			$output .= '</article>';/*.article*/
			return $output;
		}


		/**
		 * Get Edd Single block
		 *
		 * @param {string} $data
		 * @param {array}  $post
		 * @param {array}  $attributes
		 * @return {mix}
		 */
		public function p2_edd_single_article( $post, $attributes, $index ) {
			if ( ! gutentor_is_edd_active() ) {
				return '';
			}
			$download            = edd_get_download( $post->ID );
			$output              = '';
			$enable_avatar       = isset( $attributes['pOnAvatar'] ) && $attributes['pOnAvatar'];
			$avatar_pos          = ( isset( $attributes['pAvatarPos'] ) ) ? $attributes['pAvatarPos'] : false;
			$enable_post_format  = isset( $attributes['pOnPostFormatOpt'] ) && $attributes['pOnPostFormatOpt'];
			$post_format_pos     = ( isset( $attributes['pPostFormatPos'] ) ) ? $attributes['pPostFormatPos'] : false;
			$output             .= "<article class='" . esc_attr( apply_filters( 'gutentor_post_module_article_class', gutentor_concat_space( 'gutentor-post gtf-item-wrap', 'gutentor-post-item-' . $index, 'gtf-item-' . $index ), $attributes ) ) . "'>";
			$output             .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item', gutentor_concat_space( 'gutentor-post-item', 'gtf-item' ), $attributes ) ) . "'>";
			$enable_overlayImage = false;
			$overlayImage        = isset( $attributes['pFImgOColor'] ) && $attributes['pFImgOColor'];
			if ( $overlayImage ) {
				$enable_overlayImage = ( isset( $attributes['pFImgOColor']['enable'] ) ) ? $attributes['pFImgOColor']['enable'] : false;
			}
			$url         = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), $attributes['pFImgSize'] );
			$default_url = GUTENTOR_URL . 'assets/img/default-image.jpg';
			$overlay     = $enable_overlayImage ? 'gutentor-overlay g-overlay' : '';/*gutentor-overlay for bc*/
			$output     .= "<div class='" . esc_attr( apply_filters( 'gutentor_post_module_post_item_height', gutentor_concat_space( 'gutentor-bg-image gtf-bg-image', 'gutentor-post-height gtf-item-height', $overlay ), $attributes ) ) . "' style='background-image:url(" . esc_url( is_array( $url ) && ! empty( $url ) ? $url[0] : $default_url ) . ")'>";

			if ( $enable_avatar && $this->avatar_on_image_condition( $avatar_pos ) ) {
				$output .= $this->get_avatar_data( $post, $attributes );
			}
			if ( $enable_post_format && $this->post_format_on_image_condition( $post_format_pos ) ) {
				$output .= $this->edd_new_badge_product( $post, $download );

			}
			$output .= apply_filters( 'gutentor_edit_post_module_featured_image_popup_data', '', $post, $attributes );
			$output .= '<div class="gutentor-post-content gtf-content">';/*gutentor-post-content for bc*/
			$output .= $this->get_primary_meta( $post, $attributes );
			if ( $enable_avatar && $avatar_pos === 'g-avatar-b-title' ) {
				$output .= $this->get_avatar_data( $post, $attributes );
			}
			if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-title' ) {
				$output .= $this->edd_new_badge_product( $post, $download );
			}
			$output .= $this->get_title( $post, $attributes );
			$output .= $this->updated_edd_price( $post, $attributes );
			if ( isset( $attributes['wooOnRating'] ) && $attributes['wooOnRating'] ) {
				if ( gutentor_custom_edd_review( $post->ID ) ) {
					$output .= '<div class="gutentor-edd-rating">';
					$output .= gutentor_custom_edd_review( $post->ID );
					$output .= '</div>';
				}
			}
			if ( $enable_avatar && $avatar_pos === 'g-avatar-b-content' ) {
				$output .= $this->get_avatar_data( $post, $attributes );
			}
			if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-ct-box' ) {
				$output .= $this->edd_new_badge_product( $post, $download );
			}
			$output .= $this->get_description( $post, $attributes );
			$output .= $this->get_secondary_meta( $post, $attributes );
			if ( $enable_avatar && $avatar_pos === 'g-avatar-b-button' ) {
				$output .= $this->get_avatar_data( $post, $attributes );
			}
			if ( $enable_post_format && $post_format_pos === 'gutentor-pf-pos-before-button' ) {
				$output .= $this->edd_new_badge_product( $post, $download );
			}
			$output .= $this->get_edd_wish_list( $post, $attributes );
			$output .= $this->get_edd_button( $post, $attributes );
			$output .= '</div>';/*.gtf-content*/
			$output .= apply_filters( 'gutentor_post_type_featured_after_content', '', $post, $attributes );
			$output .= '</div>';/*.gtf-bg-image*/
			$output .= '</div>';/*.gutentor-post-item*/
			$output .= '</article>';/*.article*/
			return $output;
		}

		/**
		 * Featured Post type template
		 *
		 * @param {string} $data
		 * @param {object} $post
		 * @param {array}  $attributes
		 * @return {mix}
		 *
		 * @return {boolean}
		 */
		public function featured_post_type_template( $post, $attributes, $index ) {
			$post_type = ( isset( $attributes['pPostType'] ) ) ? $attributes['pPostType'] : 'post';
			if ( 'product' === $post_type ) {
				return $this->p2_woo_single_article( $post, $attributes, $index );
			} elseif ( 'download' === $post_type ) {
				return $this->p2_edd_single_article( $post, $attributes, $index );

			} else {
				return $this->p2_single_article( $post, $attributes, $index );
			}
		}

		/**
		 * Get T2 Single item
		 *
		 * @param {string} $data
		 * @param {array}  $term
		 * @param {array}  $attributes
		 * @return {mix}
		 */
		public function t2_single_article( $term, $attributes, $index ) {
			$output         = '';
			$no_thumb       = '';
			$bg_image       = '';
			$url            = '';
			$thumbnail_size = ( isset( $attributes['tFImgSize'] ) ) ? $attributes['tFImgSize'] : 'large';

			if ( $this->has_term_thumbnail( $term ) ) {
				$image_url = wp_get_attachment_image_src( $this->get_term_thumbnail_id( $term ), $thumbnail_size );
				if ( ! $image_url ) {
					$image_url[0] = GUTENTOR_URL . 'assets/img/default-image.jpg';
				}
				$url      = $image_url[0];
				$url      = 'style="background-image:url(' . esc_url( $url ) . ')"';
				$bg_image = 'gtf-bg-image';

			} else {
				$no_thumb = 'gtf-no-thumb';
			}

			$output             .= "<article class='" . esc_attr( apply_filters( 'gutentor_term_module_article_class', gutentor_concat_space( 'gtf-item-wrap', 'gtf-item-' . $index, $no_thumb ), $attributes ) ) . "'>";
			$output             .= '<div class="gtf-item">';
			$enable_overlayImage = false;
			$overlayImage        = isset( $attributes['tFImgOC'] ) && $attributes['tFImgOC'];
			if ( $overlayImage ) {
				$enable_overlayImage = ( isset( $attributes['tFImgOC']['enable'] ) ) ? $attributes['tFImgOC']['enable'] : false;
			}
			$overlay = $enable_overlayImage ? 'g-overlay' : '';
			$output .= '<div class="' . esc_attr( gutentor_concat_space( $bg_image, 'gtf-item-height', $overlay ) ) . '" ' . $url . '>';
			$output .= '<div class="gtf-content">';

			$output .= $this->get_term_title_and_count( $term, $attributes );

			$output .= $this->get_term_description( $term, $attributes );
			$output .= $this->get_term_button( $term, $attributes );
			$output .= '</div>';/*.g-term-content*/
			$output .= '</div>';/*.gtf-bg-image*/

			$output .= '</div>';/*.gutentor-term-item*/
			$output .= '</article>';/*.article*/
			return $output;
		}
	}
}

Gutentor_Featured::get_instance()->load_dependencies();
