MOON
Server: Apache
System: Linux 54-179-220-51.cprapid.com 3.10.0-1160.144.1.el7.tuxcare.els4.x86_64 #1 SMP Tue Apr 7 08:40:40 UTC 2026 x86_64
User: hunarpak (1005)
PHP: 7.4.29
Disabled: NONE
Upload Files
File: /home/hunarpak/public_html/wp-content/plugins/tlp-portfolio/lib/classes/TLPportShortCode.php
<?php
/**
 * Shortcode class.
 *
 * @package RT_Portfolio
 */

// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
	exit( 'This script cannot be accessed directly.' );
}

if ( ! class_exists( 'TLPportShortCode' ) ) :
	/**
	 * Shortcode class.
	 */
	class TLPportShortCode {
		public function __construct() {
			add_shortcode( 'tlpportfolio', [ $this, 'portfolio_shortcode' ] );
			add_action( 'wp_ajax_tlp_portfolio_preview_ajax_call', [ $this, 'portfolio_shortcode' ] );
		}

		public function load_scripts() {
			wp_enqueue_style(
				[
					'tlp-owl-carousel',
					'tlp-owl-carousel-theme',
				]
			);

			wp_enqueue_script(
				[
					'tlp-magnific',
					'tlp-isotope',
					'tlp-owl-carousel',
					'tlp-portfolio',
				]
			);
		}

		public function portfolio_shortcode( $atts, $content = '' ) {
			global $TLPportfolio;

			$error   = true;
			$html    = $msg = null;
			$preview = isset( $_REQUEST['sc_id'] ) ? absint( $_REQUEST['sc_id'] ) : 0;
			$scID    = isset( $atts['id'] ) ? absint( $atts['id'] ) : 0;

			if ( $scID || $preview ) {
				$post = get_post( $scID );

				if ( ( ! $preview && ! is_null( $post ) && $post->post_type === TLPPortfolio()->getScPostType() ) || ( $preview && TLPPortfolio()->verifyNonce() ) ) {
					$rand         = wp_rand();
					$container_id = $scID ? $scID : $preview;
					$layoutID     = 'tlp-portfolio-container-' . $container_id;
					$arg          = [];
					$query_args   = [
						'post_type'   => TLPPortfolio()->post_type,
						'post_status' => 'publish',
					];

					if ( $preview ) {
						$error         = false;
						$scMeta        = $_REQUEST;
						$layout        = isset( $scMeta['pfp_layout'] ) && ! empty( $scMeta['pfp_layout'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_layout'] ) ) : 'layout1';
						$dCol          = isset( $scMeta['pfp_desktop_column'] ) && ! empty( $scMeta['pfp_desktop_column'] ) ? absint( $scMeta['pfp_desktop_column'] ) : 3;
						$tCol          = isset( $scMeta['pfp_tab_column'] ) && ! empty( $scMeta['pfp_tab_column'] ) ? absint( $scMeta['pfp_tab_column'] ) : 2;
						$mCol          = isset( $scMeta['pfp_mobile_column'] ) && ! empty( $scMeta['pfp_mobile_column'] ) ? absint( $scMeta['pfp_mobile_column'] ) : 1;
						$imgSize       = isset( $scMeta['pfp_image_size'] ) && ! empty( $scMeta['pfp_image_size'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_image_size'] ) ) : 'medium';
						$customImgSize = isset( $scMeta['pfp_custom_image_size'] ) ? TLPPortfolio()->array_text_sanitization( $scMeta['pfp_custom_image_size'] ) : [];

						$excerpt_limit = isset( $scMeta['pfp_excerpt_limit'] ) && ! empty( $scMeta['pfp_excerpt_limit'] ) ? absint( $scMeta['pfp_excerpt_limit'] ) : 0;
						$disable_image = isset( $scMeta['pfp_disable_image'] ) && ! empty( $scMeta['pfp_disable_image'] ) ? true : false;
						$post__in      = isset( $scMeta['pfp_post__in'] ) && ! empty( $scMeta['pfp_post__in'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_post__in'] ) ) : null;
						$post__not_in  = isset( $scMeta['pfp_post__not_in'] ) && ! empty( $scMeta['pfp_post__not_in'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_post__not_in'] ) ) : null;

						$limit = $query_args['posts_per_page'] = ! isset( $scMeta['pfp_limit'] ) || ( isset( $scMeta['pfp_limit'] ) && ( empty( $scMeta['pfp_limit'] ) || $scMeta['pfp_limit'] === '-1' ) ) ? 10000000 : absint( $scMeta['pfp_limit'] );

						$pagination = isset( $scMeta['pfp_pagination'] ) && ! empty( $scMeta['pfp_pagination'] ) ? true : false;

						$cats = isset( $scMeta['pfp_categories'] ) ? TLPPortfolio()->array_int_sanitization( $scMeta['pfp_categories'] ) : [];
						$tags = isset( $scMeta['pfp_tags'] ) ? TLPPortfolio()->array_int_sanitization( $scMeta['pfp_tags'] ) : [];

						$relation = isset( $scMeta['pfp_taxonomy_relation'] ) && ! empty( $scMeta['pfp_taxonomy_relation'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_taxonomy_relation'] ) ) : 'AND';

						$order_by = isset( $scMeta['pfp_order_by'] ) && ! empty( $scMeta['pfp_order_by'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_order_by'] ) ) : null;

						$order       = isset( $scMeta['pfp_order'] ) && ! empty( $scMeta['pfp_order'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_order'] ) ) : null;
						$parentClass = isset( $scMeta['pfp_parent_class'] ) && ! empty( $scMeta['pfp_parent_class'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_parent_class'] ) ) : null;

						$arg['link'] = isset( $scMeta['pfp_detail_page_link'] ) && ! empty( $scMeta['pfp_detail_page_link'] );

						$arg['link_type'] = isset( $scMeta['pfp_detail_page_link_type'] ) && ! empty( $scMeta['pfp_detail_page_link_type'] ) ? sanitize_text_field( wp_unslash( $scMeta['pfp_detail_page_link_type'] ) ) : 'inner_link';

						$arg['link_target'] = $arg['link_type'] == 'external_link' && isset( $scMeta['pfp_link_target'] ) && $scMeta['pfp_link_target'] == '_blank' ? '_blank' : null;

						$disable_equal_height = isset( $scMeta['pfp_disable_equal_height'] ) && ! empty( $scMeta['pfp_disable_equal_height'] );

					} else {
						$scMeta = get_post_meta( $scID );
						$layout = isset( $scMeta['pfp_layout'][0] ) && ! empty( $scMeta['pfp_layout'][0] ) ? sanitize_text_field( $scMeta['pfp_layout'][0] ) : 'layout1';
						$dCol   = isset( $scMeta['pfp_desktop_column'][0] ) && ! empty( $scMeta['pfp_desktop_column'][0] ) ? absint( $scMeta['pfp_desktop_column'][0] ) : 3;

						$tCol    = isset( $scMeta['pfp_tab_column'][0] ) && ! empty( $scMeta['pfp_tab_column'][0] ) ? absint( $scMeta['pfp_tab_column'][0] ) : 2;
						$mCol    = isset( $scMeta['pfp_mobile_column'][0] ) && ! empty( $scMeta['pfp_mobile_column'][0] ) ? absint( $scMeta['pfp_mobile_column'][0] ) : 1;
						$imgSize = isset( $scMeta['pfp_image_size'][0] ) && ! empty( $scMeta['pfp_image_size'][0] ) ? sanitize_text_field( $scMeta['pfp_image_size'][0] ) : 'medium';

						$customImgSize = isset( $scMeta['pfp_custom_image_size'][0] ) && ! empty( $scMeta['pfp_custom_image_size'][0] ) ? TLPPortfolio()->array_text_sanitization( $scMeta['pfp_custom_image_size'][0] ) : [];

						$excerpt_limit = isset( $scMeta['pfp_excerpt_limit'][0] ) && ! empty( $scMeta['pfp_excerpt_limit'][0] ) ? absint( $scMeta['pfp_excerpt_limit'][0] ) : 0;
						$disable_image = isset( $scMeta['pfp_disable_image'][0] ) && ! empty( $scMeta['pfp_disable_image'][0] ) ? true : false;

						$post__in     = isset( $scMeta['pfp_post__in'][0] ) && ! empty( $scMeta['pfp_post__in'][0] ) ? sanitize_text_field( trim( $scMeta['pfp_post__in'][0] ) ) : null;
						$post__not_in = isset( $scMeta['pfp_post__not_in'][0] ) && ! empty( $scMeta['pfp_post__not_in'][0] ) ? sanitize_text_field( trim( $scMeta['pfp_post__not_in'][0] ) ) : null;

						$limit      = $query_args['posts_per_page'] = ! isset( $scMeta['pfp_limit'][0] ) || ( isset( $scMeta['pfp_limit'][0] ) && ( empty( $scMeta['pfp_limit'][0] ) || $scMeta['pfp_limit'][0] === '-1' ) ) ? 10000000 : absint( $scMeta['pfp_limit'][0] );
						$pagination = isset( $scMeta['pfp_pagination'][0] ) && ! empty( $scMeta['pfp_pagination'][0] ) ? true : false;

						$cats = isset( $scMeta['pfp_categories'] ) && ! empty( $scMeta['pfp_categories'] ) ? TLPPortfolio()->array_int_sanitization( $scMeta['pfp_categories'] ) : [];

						$tags = isset( $scMeta['pfp_tags'] ) && ! empty( $scMeta['pfp_tags'] ) ? TLPPortfolio()->array_int_sanitization( $scMeta['pfp_tags'] ) : [];

						$relation = isset( $scMeta['pfp_taxonomy_relation'][0] ) && ! empty( $scMeta['pfp_taxonomy_relation'][0] ) ? sanitize_text_field( $scMeta['pfp_taxonomy_relation'][0] ) : 'AND';

						$order_by    = isset( $scMeta['pfp_order_by'][0] ) && ! empty( $scMeta['pfp_order_by'][0] ) ? sanitize_text_field( $scMeta['pfp_order_by'][0] ) : null;
						$order       = isset( $scMeta['pfp_order'][0] ) && ! empty( $scMeta['pfp_order'][0] ) ? sanitize_text_field( $scMeta['pfp_order'][0] ) : null;
						$parentClass = isset( $scMeta['pfp_parent_class'][0] ) && ! empty( $scMeta['pfp_parent_class'][0] ) ? sanitize_text_field( $scMeta['pfp_parent_class'][0] ) : null;

						$arg['link']          = isset( $scMeta['pfp_detail_page_link'][0] ) && ! empty( $scMeta['pfp_detail_page_link'][0] );
						$arg['link_type']     = isset( $scMeta['pfp_detail_page_link_type'][0] ) && ! empty( $scMeta['pfp_detail_page_link_type'][0] ) ? sanitize_text_field( $scMeta['pfp_detail_page_link_type'][0] ) : 'inner_link';
						$arg['link_target']   = $arg['link_type'] == 'external_link' && isset( $scMeta['pfp_link_target'][0] ) && $scMeta['pfp_link_target'][0] == '_blank' ? '_blank' : null;
						$disable_equal_height = isset( $scMeta['pfp_disable_equal_height'][0] ) && ! empty( $scMeta['pfp_disable_equal_height'][0] );
					}

					$cat_ids = $cats;

					if ( isset( $scMeta['pfp_item_fields'] ) ) {
						$arg['items'] = ! empty( $scMeta['pfp_item_fields'] ) ? TLPPortfolio()->array_text_sanitization( $scMeta['pfp_item_fields'] ) : [];
					} else {
						$arg['items'] = [
							'name',
							'short_description',
							'zoom_image',
						];
					}

					$dColItems = $dCol;
					$tColItems = $tCol;
					$mColItems = $mCol;

					if ( ! in_array( $layout, array_keys( TLPPortfolio()->scLayouts() ) ) ) {
						$layout = 'layout1';
					}

					if ( ! in_array( $dCol, array_keys( TLPPortfolio()->scColumns() ) ) ) {
						$dCol = 3;
					}
					if ( ! in_array( $tCol, array_keys( TLPPortfolio()->scColumns() ) ) ) {
						$tCol = 2;
					}
					if ( ! in_array( $mCol, array_keys( TLPPortfolio()->scColumns() ) ) ) {
						$mCol = 1;
					}

					$isIsotope  = preg_match( '/isotope/', $layout );
					$isCarousel = preg_match( '/carousel/', $layout );
					$isLayout   = preg_match( '/layout/', $layout );

					/* post__in */
					if ( $post__in ) {
						$query_args['post__in'] = explode( ',', $post__in );
					}
					/* post__not_in */
					if ( $post__not_in ) {
						$query_args['post__not_in'] = explode( ',', $post__not_in );
					}

					/* LIMIT */
					if ( $pagination && ! ( $isCarousel || $isIsotope ) ) {
						$posts_per_page = ( isset( $scMeta['pfp_posts_per_page'][0] ) ? absint( $scMeta['pfp_posts_per_page'][0] ) : $limit );

						// $limit.
						if ( $posts_per_page > $limit ) {
							$posts_per_page = $limit;
						}

						// Set 'posts_per_page' parameter.
						$query_args['posts_per_page']      = $posts_per_page;
						$query_args['posts_per_page_meta'] = $posts_per_page;

						if ( is_front_page() ) {
							$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;
						} else {
							$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
						}

						$offset              = $posts_per_page * ( (int) $paged - 1 );
						$query_args['paged'] = $paged;

						// Update posts_per_page.
						$remaining_post = $limit - $offset;

						if ( 0 < $remaining_post ) {
							if ( intval( $query_args['posts_per_page'] ) > $remaining_post ) {
								$query_args['posts_per_page'] = $remaining_post;
								$query_args['offset']         = $offset;
							}
						} else {
							$query_args['posts_per_page'] = 0;
						}
					}

					if ( $isCarousel || $isIsotope ) {
						$query_args['posts_per_page'] = $limit;
					}

					$taxQ = [];

					if ( is_array( $cats ) && ! empty( $cats ) ) {
						$taxQ[] = [
							'taxonomy' => TLPPortfolio()->taxonomies['category'],
							'field'    => 'term_id',
							'terms'    => $cats,
						];
					}

					if ( is_array( $tags ) && ! empty( $tags ) ) {
						$taxQ[] = [
							'taxonomy' => TLPPortfolio()->taxonomies['tag'],
							'field'    => 'term_id',
							'terms'    => $tags,
						];
					}

					if ( ! empty( $taxQ ) ) {
						if ( count( $taxQ ) > 1 ) {
							$taxQ['relation'] = $relation;
						}
						$query_args['tax_query'] = $taxQ;
					}

					if ( $order ) {
						$query_args['order'] = $order;
					}

					if ( $order_by ) {
						$query_args['orderby'] = $order_by;
					}

					// Validation.
					$containerDataAttr = " data-layout='{$layout}' data-desktop-col='{$dCol}'  data-tab-col='{$tCol}'  data-mobile-col='{$mCol}'";
					$old_dCol          = $dCol;
					$dCol              = round( 12 / $dCol );
					$tCol              = round( 12 / $tCol );
					$mCol              = round( 12 / $mCol );

					if ( $isCarousel ) {
						$dCol = $tCol = $mCol = 12;
					}

					$arg['grid'] = sprintf(
						'tlp-col-md-%d tlp-col-sm-%d tlp-col-xs-%d tlp-single-item%s%s%s%s',
						$dCol,
						$tCol,
						$mCol,
						$isIsotope ? ' tlp-isotope-item' : null,
						$isCarousel ? ' tlp-carousel-item' : null,
						$isLayout ? ' tlp-grid-item' : null,
						! $isIsotope && ! $disable_equal_height ? ' tlp-equal-height' : null
					);

					if ( $old_dCol == 2 ) {
						$arg['image_area']   = 'tlp-col-lg-5 tlp-col-md-5 tlp-col-sm-6 tlp-col-xs-12 ';
						$arg['content_area'] = 'tlp-col-lg-7 tlp-col-md-7 tlp-col-sm-6 tlp-col-xs-12 ';
					} else {
						$arg['image_area']   = 'tlp-col-lg-3 tlp-col-md-3 tlp-col-sm-6 tlp-col-xs-12 ';
						$arg['content_area'] = 'tlp-col-lg-9 tlp-col-md-9 tlp-col-sm-6 tlp-col-xs-12 ';
					}

					$portfolioQuery = new WP_Query( apply_filters( 'tlp_portfolio_sc_query_args', $query_args ) );
					$class          = [
						'rt-container-fluid',
						'tlp-portfolio',
						'tlp-portfolio-container',
					];

					if ( $parentClass ) {
						$class[] = $parentClass;
					}

					$preLoader = null;

					if ( $isIsotope ) {
						$class[] = 'is-isotope';
					}

					if ( $isCarousel ) {
						$class[]   = 'is-carousel';
						$preLoader = 'pfp-pre-loader';
					}

					/**
					 *
					 */
					if ( $preview ) {
						$html .= $this->customStyle( $layoutID, $scMeta, true, $preview );
					}

					if ( $portfolioQuery->have_posts() ) {
						$dataAttr = "data-title='" . esc_html__( 'Loading ...', 'tlp-portfolio' ) . "'";
						$html    .= sprintf( '<div class="%s" id="%s" data-layout="%s"><div class="rt-row %s %s" %s>', implode( ' ', $class ), $layoutID, $layout, $layout, $preLoader, $dataAttr );

						if ( $isCarousel ) {
							$smartSpeed      = ! empty( $scMeta['pfp_carousel_speed'][0] ) ? absint( $scMeta['pfp_carousel_speed'][0] ) : 250;
							$autoplayTimeout = ! empty( $scMeta['pfp_carousel_autoplay_timeout'][0] ) ? absint( $scMeta['pfp_carousel_autoplay_timeout'][0] ) : 5000;
							$cOpt            = ! empty( $scMeta['pfp_carousel_options'] ) ? TLPPortfolio()->array_text_sanitization( $scMeta['pfp_carousel_options'] ) : [];

							$autoPlay           = ( in_array( 'autoplay', $cOpt ) ? 'true' : 'false' );
							$autoPlayHoverPause = ( in_array( 'autoplayHoverPause', $cOpt ) ? 'true' : 'false' );

							$nav        = ( in_array( 'nav', $cOpt ) ? 'true' : 'false' );
							$dots       = ( in_array( 'dots', $cOpt ) ? 'true' : 'false' );
							$loop       = ( in_array( 'loop', $cOpt ) ? 'true' : 'false' );
							$lazyLoad   = ( in_array( 'lazy_load', $cOpt ) ? 'true' : 'false' );
							$autoHeight = ( in_array( 'auto_height', $cOpt ) ? 'true' : 'false' );
							$rtl        = ( in_array( 'rtl', $cOpt ) ? 'true' : 'false' );
							$html      .= "<div class='pfp-carousel owl-carousel owl-theme '
												data-loop='{$loop}'
												data-items='{$dColItems}'
												data-autoplay='{$autoPlay}'
												data-autoplay-timeout='{$autoplayTimeout}'
												data-autoplay-hover-pause='{$autoPlayHoverPause}'
												data-dots='{$dots}'
												data-nav='{$nav}'
												data-lazyload='{$lazyLoad}'
												data-autoheight='{$autoHeight}'
												data-rtl='{$rtl}'
												data-smart-speed='{$smartSpeed}'
												data-tabcolumn='{$tColItems}'
												data-mobilecolumn='{$mColItems}'
											>";
						}

						$current_page_term = [];
						$loops_content     = '';

						while ( $portfolioQuery->have_posts() ) :
							$portfolioQuery->the_post();
							$iID                   = get_the_ID();
							$arg['categories']     = wp_strip_all_tags( get_the_term_list( $iID, $TLPportfolio->taxonomies['category'], '', ', ' ) );
							$arg['title']          = get_the_title();
							$arg['iID']            = $iID;
							$arg['item_link']      = get_permalink();
							$arg['project_url']    = get_post_meta( $iID, 'project_url', true );
							$arg['client_name']    = get_post_meta( $iID, 'client_name', true );
							$arg['completed_date'] = get_post_meta( $iID, 'completed_date', true );
							$arg['tools']          = get_post_meta( $iID, 'tools', true );
							$arg['pLink']          = get_permalink();

							if ( $arg['link_type'] == 'external_link' && $arg['project_url'] ) {
								$arg['item_link'] = $arg['project_url'];
							}

							$short_d        = get_post_meta( $iID, 'short_description', true );
							$arg['short_d'] = TLPPortfolio()->get_short_description( $short_d, $excerpt_limit );

							if ( $isIsotope ) {
								$termAs    = wp_get_post_terms( $iID, TLPPortfolio()->taxonomies['category'], [ 'fields' => 'all' ] );
								$isoFilter = null;

								if ( ! empty( $termAs ) ) {
									foreach ( $termAs as $term ) {
										$isoFilter          .= ' ' . 'iso_' . $term->term_id;
										$isoFilter          .= ' ' . $term->slug;
										$current_page_term[] = $term->term_id;
									}
								}

								$arg['isoFilter'] = $isoFilter;
							}

							if ( $disable_image ) {
								$arg['content_area'] = 'tlp-col-md-12';
								$arg['imgFull']      = $arg['img'] = null;
							} else {
								if ( has_post_thumbnail() ) {
									$arg['img']     = TLPPortfolio()->getFeatureImageSrc( $iID, $imgSize, $customImgSize );
									$imageFull      = wp_get_attachment_image_src( get_post_thumbnail_id( $iID ), 'full' );
									$arg['imgFull'] = isset( $imageFull[0] ) ? $imageFull[0] : '';
								} else {
									$arg['img'] = $arg['imgFull'] = null;
								}
								$arg['imgFull'] = ! $arg['imgFull'] && $arg['img'] ? $arg['img'] : $arg['imgFull'];
							}

							$loops_content .= TLPPortfolio()->render( 'layouts/' . $layout, $arg, true );
						endwhile;

						$filter_button = '';

						if ( $isIsotope ) {
							$terms = get_terms(
								apply_filters(
									'tlp_portfolio_sc_isotope_button_args',
									[
										'taxonomy'   => TLPPortfolio()->taxonomies['category'],
										'orderby'    => 'name',
										'order'      => 'ASC',
										'hide_empty' => false,
									]
								)
							);

							if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
								$filter_button .= sprintf( '<div class="tlp-portfolio-isotope-button button-group filter-button-group option-set"><button data-filter="*" class="selected">%s</button>', __( 'Show all', 'tlp-portfolio' ) );

								foreach ( $terms as $term ) {
									if ( ! empty( $cat_ids ) ) {
										if ( in_array( $term->term_id, $cat_ids ) && in_array( $term->term_id, $current_page_term ) ) {
											$filter_button .= "<button data-filter='.$term->slug'>" . $term->name . '</button>';
										}
									} else {
										if ( in_array( $term->term_id, $current_page_term ) ) {
											$filter_button .= "<button data-filter='.$term->slug'>" . $term->name . '</button>';
										}
									}
								}

								$filter_button .= '</div>';
							}

							$filter_button .= '<div class="tlp-portfolio-isotope">';
						}

						$html .= $filter_button . $loops_content;

						if ( $isIsotope || $isCarousel ) {
							$html .= ' </div>'; // end tlp-team-isotope // end carosel.
						}

						$html .= '</div>'; // end row.

						if ( $pagination && ! ( $isCarousel || $isIsotope ) ) {
							$html .= TLPPortfolio()->pagination( $portfolioQuery, $query_args, $scMeta );
						}

						$html .= '</div>'; // end container.

						add_action( 'wp_footer', [ $this, 'load_scripts' ] );
						wp_reset_postdata();

					} else {
						$html .= sprintf( '<p>%s</p>', esc_html__( 'No portfolio found', 'tlp-portfolio' ) );
					}
				} else {
					if ( $preview ) {
						$msg = esc_html__( 'Session Error !!', 'tlp-portfolio' );
					} else {
						$html .= '<p>' . esc_html__( 'No shortCode found', 'tlp-portfolio' ) . '</p>';
					}
				}
				if ( $preview ) {
					wp_send_json(
						[
							'error' => $error,
							'msg'   => $msg,
							'data'  => $html,
						]
					);
				} else {
					return $html;
				}
			} else {
				return $this->get_team_old_layout( $atts );
			}
		}

		public function templateOne( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/layout1', $itemArg, true );
		}

		public function templateTwo( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/layout2', $itemArg, true );
		}

		public function templateThree( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/layout3', $itemArg, true );
		}

		public function layoutIsotope1( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/isotope1', $itemArg, true );
		}

		public function layoutIsotope2( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/isotope2', $itemArg, true );
		}

		public function layoutIsotope3( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/isotope3', $itemArg, true );
		}

		public function carousel3( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/carousel3', $itemArg, true );
		}

		public function carousel2( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/carousel2', $itemArg, true );
		}

		public function carousel1( $itemArg ) {
			return TLPPortfolio()->render( 'elementor/carousel1', $itemArg, true );
		}

		private function customStyle( $layoutID, $scMeta, $new_layout = false, $preview = false ) {
			$style = null;

			if ( $new_layout ) {
				$primaryColor        = isset( $scMeta['pfp_primary_color'] ) && ! empty( $scMeta['pfp_primary_color'] ) ? $scMeta['pfp_primary_color'] : null;
				$overlayColor        = isset( $scMeta['pfp_overlay_color'] ) && ! empty( $scMeta['pfp_overlay_color'] ) ? $scMeta['pfp_overlay_color'] : null;
				$buttonBgColor       = isset( $scMeta['pfp_button_bg_color'] ) && ! empty( $scMeta['pfp_button_bg_color'] ) ? $scMeta['pfp_button_bg_color'] : null;
				$buttonTxtColor      = isset( $scMeta['pfp_button_text_color'] ) && ! empty( $scMeta['pfp_button_text_color'] ) ? $scMeta['pfp_button_text_color'] : null;
				$buttonHoverBgColor  = isset( $scMeta['pfp_button_hover_bg_color'] ) && ! empty( $scMeta['pfp_button_hover_bg_color'] ) ? $scMeta['pfp_button_hover_bg_color'] : null;
				$buttonActiveBgColor = isset( $scMeta['pfp_button_active_bg_color'] ) && ! empty( $scMeta['pfp_button_active_bg_color'] ) ? $scMeta['pfp_button_active_bg_color'] : null;
				$name                = isset( $scMeta['pfp_name_style'] ) && ! empty( $scMeta['pfp_name_style'] ) ? $scMeta['pfp_name_style'] : [];
				$name_hover          = isset( $scMeta['pfp_name_hover_style'] ) && ! empty( $scMeta['pfp_name_hover_style'] ) ? $scMeta['pfp_name_hover_style'] : [];

				$short_desc = isset( $scMeta['pfp_short_description_style'] ) && ! empty( $scMeta['pfp_short_description_style'] ) ? $scMeta['pfp_short_description_style'] : [];
				$gutter     = isset( $scMeta['pfp_gutter'] ) && ! empty( $scMeta['pfp_gutter'] ) ? absint( $scMeta['pfp_gutter'] ) : null;
				$iconStyle  = isset( $scMeta['pfp_icon_style'] ) && ! empty( $scMeta['pfp_icon_style'] ) ? $scMeta['pfp_icon_style'] : [];

				$meta_style = ( isset( $scMeta['pfp_meta_style'] ) ? TLPPortfolio()->array_text_sanitization( $scMeta['pfp_meta_style'] ) : [] );

				if ( $primaryColor ) {
					$style .= "#{$layoutID} .tlp-pagination ul.page-numbers li .page-numbers {";
					$style .= 'background:' . $primaryColor . ';';
					$style .= '}';

					$style .= "#{$layoutID} .isotope2 .tlp-portfolio-item .tlp-overlay .tlp-title,#{$layoutID} .carousel2 .tlp-portfolio-item .tlp-overlay .tlp-title,";
					$style .= "#{$layoutID} .tlp-portfolio-item .tlp-content{";
					$style .= 'background:' . $primaryColor . ';';
					$style .= '}';
					$style .= "#{$layoutID} .tlp-portfolio-item .tlp-content .tlp-content-holder{padding:15px}";
					$style .= "#{$layoutID} .owl-theme .owl-nav [class*=owl-]{background:{$primaryColor}}";
					$style .= "#{$layoutID} .owl-theme .owl-dots .owl-dot.active span, #{$layoutID}  .owl-theme .owl-dots .owl-dot:hover span{background:{$primaryColor}}";
				}
				if ( $overlayColor ) {
					$style .= "#{$layoutID} .tlp-overlay {";
					$style .= 'background:' . $overlayColor . ';';
					$style .= '}';
				}

				/* Button background color */
				if ( $buttonBgColor ) {

					$style .= "#{$layoutID} .tlp-portfolio-isotope-button button,
								#{$layoutID} .owl-theme .owl-nav [class*=owl-],
								#{$layoutID} .owl-theme .owl-dots .owl-dot span,
								#{$layoutID} .tlp-pagination li span,
								#{$layoutID} .tlp-pagination li a {";
					$style .= "background: {$buttonBgColor};";
					$style .= ( $buttonTxtColor ? "color: {$buttonTxtColor}" : null );
					$style .= '}';
				}

				/* Button hover background color */
				if ( $buttonHoverBgColor ) {
					$style .= "#{$layoutID} .tlp-portfolio-isotope-button button:hover,
								#{$layoutID} .owl-theme .owl-nav [class*=owl-]:hover,
								#{$layoutID} .tlp-pagination li span:hover,
								#{$layoutID} .tlp-pagination li a:hover {";
					$style .= "background: {$buttonHoverBgColor};";
					$style .= '}';
				}

				/* Button Active background color */
				if ( $buttonActiveBgColor ) {
					$style .= "#{$layoutID} .tlp-portfolio-isotope-button button.selected,
								#{$layoutID} .owl-theme .owl-dots .owl-dot.active span,
								#{$layoutID} .tlp-pagination li.active span {";
					$style .= "background: {$buttonActiveBgColor};";
					$style .= '}';
				}

				/* gutter */
				if ( $gutter ) {
					$style .= "#{$layoutID} [class*='tlp-col-'] {";
					$style .= "padding-left : {$gutter}px;";
					$style .= "padding-right : {$gutter}px;";
					$style .= "margin-top : {$gutter}px;";
					$style .= "margin-bottom : {$gutter}px;";
					$style .= '}';
					$style .= "#{$layoutID} .rt-row{";
					$style .= "margin-left : -{$gutter}px;";
					$style .= "margin-right : -{$gutter}px;";
					$style .= '}';
				}

				// Social icon color.
				if ( ! empty( $iconStyle ) && is_array( $iconStyle ) ) {
					$iconStyleComoncss  = ! empty( $iconStyle['color'] ) ? 'color:' . $iconStyle['color'] . ';' : null;
					$iconStyleComoncss .= ! empty( $iconStyle['size'] ) ? 'font-size:' . $iconStyle['size'] . 'px;' : null;
					$iconStyleComoncss .= ! empty( $iconStyle['align'] ) ? 'text-align:' . $iconStyle['align'] . ';' : null;
					$iconStyleComoncss .= ! empty( $iconStyle['weight'] ) ? 'font-weight:' . $iconStyle['weight'] . ';' : null;
					$style             .= "#{$layoutID} .tlp-portfolio-item ul li i{";
					$style             .= $iconStyleComoncss;
					$style             .= '}';
					$style             .= "#{$layoutID} .tlp-portfolio-item .tlp-overlay .link-icon a, #{$layoutID} .tlp-portfolio-item .link-icon a {";
					$style             .= 'border: 1px solid  ' . $iconStyle['color'] . ';';
					$style             .= $iconStyleComoncss;
					$style             .= '}';
				}

				// Name.
				if ( is_array( $name ) && ! empty( $name ) ) {
					$style .= "#{$layoutID} .tlp-portfolio-item h3 a, #{$layoutID} .tlp-portfolio-item h3 {";
					$style .= isset( $name['color'] ) && ! empty( $name['color'] ) ? 'color:' . $name['color'] . ';' : null;
					$style .= isset( $name['align'] ) && ! empty( $name['align'] ) ? 'text-align:' . $name['align'] . ' !important;' : null;
					$style .= isset( $name['weight'] ) && ! empty( $name['weight'] ) ? 'font-weight:' . $name['weight'] . ';' : null;
					$style .= isset( $name['size'] ) && ! empty( $name['size'] ) ? 'font-size:' . $name['size'] . 'px;' : null;
					$style .= '}';
				}

				// Name Hover.
				if ( is_array( $name_hover ) && ! empty( $name_hover ) ) {
					$style .= "#{$layoutID} .tlp-portfolio-item h3 a:hover, #{$layoutID} .tlp-portfolio-item h3:not(.color-white):hover {";
					$style .= isset( $name_hover['color'] ) && ! empty( $name_hover['color'] ) ? 'color:' . $name_hover['color'] . ';' : null;
					$style .= isset( $name_hover['align'] ) && ! empty( $name_hover['align'] ) ? 'text-align:' . $name_hover['align'] . ' !important;' : null;
					$style .= isset( $name_hover['weight'] ) && ! empty( $name_hover['weight'] ) ? 'font-weight:' . $name_hover['weight'] . ';' : null;
					$style .= isset( $name_hover['size'] ) && ! empty( $name_hover['size'] ) ? 'font-size:' . $name_hover['size'] . 'px;' : null;
					$style .= '}';
				}

				// Short Description.
				if ( is_array( $short_desc ) && ! empty( $short_desc ) ) {
					$style .= "#{$layoutID} .tlp-portfolio-item .tlp-portfolio-sd {";
					$style .= isset( $name['color'] ) && ! empty( $short_desc['color'] ) ? 'color:' . $short_desc['color'] . ';' : null;
					$style .= isset( $name['size'] ) && ! empty( $short_desc['size'] ) ? 'font-size:' . $short_desc['size'] . 'px;' : null;
					$style .= isset( $name['weight'] ) && ! empty( $short_desc['weight'] ) ? 'font-weight:' . $short_desc['weight'] . ';' : null;
					$style .= isset( $name['align'] ) && ! empty( $short_desc['align'] ) ? 'text-align:' . $short_desc['align'] . ';' : null;
					$style .= '}';
				}

				if ( is_array( $meta_style ) && ! empty( $meta_style ) ) {
					$metaStyleComoncss  = isset( $meta_style['color'] ) && ! empty( $meta_style['color'] ) ? 'color:' . $meta_style['color'] . ';' : null;
					$metaStyleComoncss .= isset( $meta_style['size'] ) && ! empty( $meta_style['size'] ) ? 'font-size:' . $meta_style['size'] . 'px;' : null;
					$metaStyleComoncss .= isset( $meta_style['weight'] ) && ! empty( $meta_style['weight'] ) ? 'font-weight:' . $meta_style['weight'] . ';' : null;
					$metaStyleComoncss .= isset( $meta_style['align'] ) && ! empty( $meta_style['align'] ) ? 'text-align:' . $meta_style['align'] . ';' : null;

					if ( $metaStyleComoncss ) {
						$style .= "#{$layoutID} .tlp-portfolio-item .extra-features ul li {";
						$style .= $metaStyleComoncss;
						$style .= '}';
					}
				}
			} else {
				$title_color     = ! empty( $scMeta['title-color'] ) ? $scMeta['title-color'] : null;
				$title_size      = ! empty( $scMeta['title-font-size'] ) ? $scMeta['title-font-size'] : null;
				$title_weight    = ! empty( $scMeta['title-font-weight'] ) ? $scMeta['title-font-weight'] : null;
				$title_alignment = ! empty( $scMeta['title-alignment'] ) ? $scMeta['title-alignment'] : null;

				$short_desc_color     = ! empty( $scMeta['short-desc-color'] ) ? $scMeta['short-desc-color'] : null;
				$short_desc_size      = ! empty( $scMeta['short-desc-font-size'] ) ? $scMeta['short-desc-font-size'] : null;
				$short_desc_weight    = ! empty( $scMeta['short-desc-font-weight'] ) ? $scMeta['short-desc-font-weight'] : null;
				$short_desc_alignment = ! empty( $scMeta['short-desc-alignment'] ) ? $scMeta['short-desc-alignment'] : null;

				if ( $title_color ) {
					$style .= "#{$layoutID}.tlp-portfolio h3,
							#{$layoutID}.tlp-portfolio h3 a{ color: {$title_color};}";
				}

				if ( $title_size ) {
					$style .= "#{$layoutID}.tlp-portfolio h3,
							#{$layoutID}.tlp-portfolio h3 a{ font-size: {$title_size}px;}";
				}

				if ( $title_weight ) {
					$style .= "#{$layoutID}.tlp-portfolio h3,
							#{$layoutID}.tlp-portfolio h3 a{ font-weight: {$title_weight};}";
				}

				if ( $title_alignment ) {
					$style .= "#{$layoutID}.tlp-portfolio h3{ text-align: {$title_alignment};}";
				}

				// Short description.
				if ( $short_desc_color || $short_desc_size || $short_desc_weight || $short_desc_alignment ) {
					$style .= "#{$layoutID}.tlp-portfolio .tlp-content-holder .tlp-portfolio-sd{";

					if ( $short_desc_color ) {
						$style .= "color: {$short_desc_color};";
					}

					if ( $short_desc_size ) {
						$style .= "font-size: {$short_desc_size}px;";
					}

					if ( $short_desc_weight ) {
						$style .= "font-weight: {$short_desc_weight};";
					}

					if ( $short_desc_alignment ) {
						$style .= "text-align: {$short_desc_alignment};";
					}

					$style .= '}';
				}
			}

			if ( ! empty( $style ) ) {
				$style = "<style>{$style}</style>";
			}

			return $style;

		}

		private function get_team_old_layout( $atts ) {
			global $TLPportfolio;

			$atts          = shortcode_atts(
				[
					'orderby'                => 'date',
					'order'                  => 'DESC',
					'image'                  => 'true',
					'image_zoom'             => '',
					'image_size'             => 'full',
					'image_custom_dimension' => '', // wp_json_encode string.
					'number'                 => - 1,
					'pagination'             => false,
					'enable_page_link'       => false,
					'link_type'              => false,
					'link_target'            => false,
					'col'                    => 3,
					'tablet_col'             => 2,
					'mobile_col'             => 1,
					'layout'                 => 1,
					'letter-limit'           => 0,
					'cat'                    => null,
					'title-color'            => null,
					'title-font-size'        => null,
					'title-font-weight'      => null,
					'title-alignment'        => null,
					'short-desc-color'       => null,
					'short-desc-font-size'   => null,
					'short-desc-font-weight' => null,
					'short-desc-alignment'   => null,
					'class'                  => null,
					'slider_settings'        => '', // wp_json_encode string.
					'name'                   => '',
					'categories'             => '',
					'short_description'      => '',
					'client_name'            => '',
					'project_url'            => '',
					'completed_date'         => '',
					'tools'                  => '',
				],
				$atts,
				'tlpportfolio'
			);
			$atts['image'] = 'true' === esc_html($atts['image']);
			$limit         = $atts['letter-limit'] ? absint( $atts['letter-limit'] ) : 0;
			$dCol          = absint($atts['col']);
			$tCol          = absint($atts['tablet_col']);
			$mCol          = absint( $atts['mobile_col'] );

			if ( ! in_array( $dCol, array_keys( TLPPortfolio()->scColumns() ) ) ) {
				$dCol = 3;
			}

			if ( ! in_array( $tCol, array_keys( TLPPortfolio()->scColumns() ) ) ) {
				$tCol = 2;
			}

			if ( ! in_array( $mCol, array_keys( TLPPortfolio()->scColumns() ) ) ) {
				$mCol = 1;
			}

			if ( ! in_array( $atts['layout'], array_keys( TLPPortfolio()->oldScLayouts() ) ) ) {
				$atts['layout'] = 1;
			}

			if ( 1 == absint($atts['layout']) ) {
				$layout = 'layout1';
			} elseif ( 2 == absint($atts['layout'] )) {
				$layout = 'layout2';
			} elseif ( 3 == absint($atts['layout']) ) {
				$layout = 'layout3';
			} elseif ( 'isotope' == esc_html($atts['layout']) ) {
				$layout = 'isotope1';
			} else {
				$layout = esc_html($atts['layout']);
			}

			$isIsotope  = preg_match( '/isotope/', $layout );
			$isCarousel = preg_match( '/carousel/', $layout );
			$isLayout   = preg_match( '/layout/', $layout );
			$grid       = $dCol == 5 ? '24' : 12 / $dCol;
			$tgrid      = $tCol == 5 ? '24' : 12 / $tCol;
			$mgrid      = $mCol == 5 ? '24' : 12 / $mCol;

			if ( $dCol == 2 ) {
				$image_area   = 'tlp-col-lg-5 tlp-col-md-5 tlp-col-sm-6 tlp-col-xs-12 ';
				$content_area = 'tlp-col-lg-7 tlp-col-md-7 tlp-col-sm-6 tlp-col-xs-12 ';
			} else {
				$image_area   = 'tlp-col-lg-3 tlp-col-md-3 tlp-col-sm-6 tlp-col-xs-12 ';
				$content_area = 'tlp-col-lg-9 tlp-col-md-9 tlp-col-sm-6 tlp-col-xs-12 ';
			}

			$html           = null;
			$rand           = rand( 1, 10 );
			$posts_per_page = ( isset( $atts['number'] ) ? intval( $atts['number'] ) : -1 );

			$args = [
				'post_type'      => TLPPortfolio()->post_type,
				'post_status'    => 'publish',
				'posts_per_page' => $posts_per_page,
				'orderby'        => esc_html($atts['orderby']),
				'order'          => esc_html($atts['order']),
			];

			/* LIMIT */
			if ( $atts['pagination'] && ! ( $isCarousel || $isIsotope ) ) {
				$paged         = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
				$args['paged'] = $paged;
			}

			if ( is_user_logged_in() && is_super_admin() ) {
				$args['post_status'] = [ 'publish', 'private' ];
			}

			$cat_ids = [];

			if ( ! empty( $atts['cat'] ) ) {
				$cat_ids           = explode( ',', esc_html($atts['cat']) );
				$args['tax_query'] = [
					[
						'taxonomy' => TLPPortfolio()->taxonomies['category'],
						'field'    => 'term_id',
						'terms'    => $cat_ids,
						'operator' => 'IN',
					],
				];
			}

			$customImgSize = [];
			$fImgSize      = 'full';
			if ( ! empty( $atts['image_size'] ) ) {
				$fImgSize = esc_html( $atts['image_size']);
				if ( 'pfp_custom' == $fImgSize || 'custom' == $fImgSize ) {
					if ( 'custom' == $fImgSize ) { // Elementor support.
						$fImgSize = 'pfp_custom';
					}

					$customImgSize = ! empty( $atts['image_custom_dimension'] ) ? json_decode( $atts['image_custom_dimension'], true ) : [];
				}
			}

			$portfolioQuery = new WP_Query( $args );
			$layoutID       = 'tlp-portfolio-container-' . mt_rand();
			$class          = [
				'rt-container-fluid',
				'tlp-portfolio',
				'tlp-portfolio-container',
			];

			if ( $isCarousel ) {
				$class[] = 'is-carousel';
			}

			if ( ! empty( $atts['class'] ) ) {
				$class[] = esc_html($atts['class']);
			}

			if ( $isIsotope ) {
				$class[] = 'is-isotope';
			}

			$class = implode( ' ', $class );
			$html .= "<div class='" . esc_attr( $class ) . "' id='{$layoutID}'>";

			$RowClasslayout = preg_replace( '/layoutcarousel/i', 'carousel', $layout );

			$html .= '<div class="rt-row ' . $RowClasslayout . '">';

			if ( $portfolioQuery->have_posts() ) {
				if ( $isIsotope ) {
					$terms = get_terms(
						TLPPortfolio()->taxonomies['category'],
						[
							'orderby'    => 'name',
							'order'      => 'ASC',
							'hide_empty' => false,
						]
					);
					$html .= '<div class="tlp-portfolio-isotope-button button-group filter-button-group option-set">
											<button data-filter="*" class="selected">' . __(
							'Show all',
							'tlp-portfolio'
						) . '</button>';

					if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
						foreach ( $terms as $term ) {
							if ( ! empty( $cat_ids ) ) {
								if ( in_array( $term->term_id, $cat_ids ) ) {
									$html .= "<button data-filter='." . $term->slug . "'>" . $term->name . '</button>';
								}
							} else {
								$html .= "<button data-filter='.$term->slug'>" . $term->name . '</button>';
							}
						}
					}

					$html .= ' </div>';
					$html .= '<div class="tlp-portfolio-isotope">';
				}

				if ( $isCarousel ) {
					$Scontrol           = json_decode( $atts['slider_settings'], true );
					$dColItems          = ! empty( $atts['col'] ) ? absint( $atts['col']) : 3;
					$tColItems          = ! empty( $atts['tablet_col'] ) ? absint($atts['tablet_col']) : 2;
					$mColItems          = ! empty( $atts['mobile_col'] ) ? absint( $atts['mobile_col'] ) : 1;
					$smartSpeed         = ! empty( $Scontrol['autoplay_speed'] ) ? absint($Scontrol['autoplay_speed']) : 250;
					$autoplayTimeout    = ! empty( $Scontrol['timeout'] ) ? absint($Scontrol['timeout']) : 5000;
					$cOpt               = [];
					$autoPlay           = ! empty( $Scontrol['autoplay'] ) ? 'true' : 'false';
					$autoPlayHoverPause = ! empty( $Scontrol['stop_on_hover'] ) ? 'true' : 'false';
					$nav                = ! empty( $Scontrol['nav'] ) ? 'true' : 'false';
					$dots               = ! empty( $Scontrol['dots'] ) ? 'true' : 'false';
					$loop               = ! empty( $Scontrol['loop'] ) ? 'true' : 'false';
					$lazyLoad           = ! empty( $Scontrol['lazyload'] ) ? 'true' : 'false';
					$autoHeight         = ! empty( $Scontrol['autoheight'] ) ? 'true' : 'false';
					$rtl                = ! empty( $Scontrol['rtl'] ) ? 'true' : 'false';

					$html .= "<div class='pfp-carousel owl-carousel owl-theme'
									data-loop='{$loop}'
									data-items='{$dColItems}'
									data-autoplay='{$autoPlay}'
									data-autoplay-timeout='{$autoplayTimeout}'
									data-autoplay-hover-pause='{$autoPlayHoverPause}'
									data-dots='{$dots}'
									data-nav='{$nav}'
									data-lazyload='{$lazyLoad}'
									data-autoheight='{$autoHeight}'
									data-rtl='{$rtl}'
									data-smart-speed='{$smartSpeed}'
									data-tabcolumn='{$tColItems}'
									data-mobilecolumn='{$mColItems}'
									>";
				}

				while ( $portfolioQuery->have_posts() ) :
					$portfolioQuery->the_post();

					$title = get_the_title();
					$iID   = get_the_ID();
					$plink = get_permalink();

					$short_d     = get_post_meta( $iID, 'short_description', true );
					$short_d     = TLPPortfolio()->get_short_description( $short_d, $limit );
					$project_url = get_post_meta( $iID, 'project_url', true );
					$tools       = get_post_meta( $iID, 'tools', true );

					$client_name    = get_post_meta( $iID, 'client_name', true );
					$completed_date = get_post_meta( $iID, 'completed_date', true );

					$tags = get_the_term_list( $iID, TLPPortfolio()->taxonomies['tag'], 'Tags : ', ',' );

					$catClass   = null;
					$categories = null;
					$catAs      = wp_get_post_terms(
						$iID,
						TLPPortfolio()->taxonomies['category'],
						[ 'fields' => 'all' ]
					);

					if ( ! empty( $catAs ) ) {
						foreach ( $catAs as $cat ) {
							$catClass   .= ' ' . $cat->slug;
							$categories .= ' ' . $cat->name;
						}
					}

					$img     = null;
					$imgFull = null;

					if ( has_post_thumbnail() ) {
						$img = TLPPortfolio()->getFeatureImageSrc( $iID, $fImgSize, $customImgSize );

						$imageFull = wp_get_attachment_image_src( get_post_thumbnail_id( $iID ), 'full' );
						$imgFull   = isset( $imageFull[0] ) ? $imageFull[0] : '';
					} else {
						$img = TLPPortfolio()->assetsUrl . 'images/demo.jpg';
					}

					if ( ! $imgFull ) {
						$imgFull = $img;
					}

					if ( ! $atts['image'] ) {
						$content_area = 'tlp-col-md-12';
						$img          = null;
					}

					$itemArg                     = [];
					$itemArg['categories']       = ! empty( $atts['categories'] ) ? $categories : '';
					$itemArg['link_target']      = ! empty( $atts['link_target'] ) ? '_blank' : '_self';
					$itemArg['enable_page_link'] = ! empty( $atts['enable_page_link'] ) ? true : false;
					$itemArg['title']            = ! empty( $atts['name'] ) ? $title : '';
					$itemArg['PostTitle']        = $title;
					$itemArg['plink']            = $plink;

					if ( 'external_link' == $atts['link_type'] && $project_url ) {
						$itemArg['plink'] = $project_url;
					}

					$itemArg['img']            = $img;
					$itemArg['imgFull']        = $imgFull;
					$itemArg['short_d']        = ! empty( $atts['short_description'] ) ? $short_d : '';
					$itemArg['grid']           = $grid;
					$itemArg['tgrid']          = $tgrid;
					$itemArg['mgrid']          = $mgrid;
					$itemArg['rand']           = $rand;
					$itemArg['catClass']       = $catClass;
					$itemArg['limit']          = $limit;
					$itemArg['image_area']     = $image_area;
					$itemArg['content_area']   = $content_area;
					$itemArg['client_name']    = ! empty( $atts['client_name'] ) ? esc_html($client_name) : '';
					$itemArg['project_url']    = $atts['project_url'];
					$itemArg['completed_date'] = ! empty( $atts['completed_date'] ) ? $completed_date : '';
					$itemArg['tools']          = ! empty( $atts['tools'] ) ? wp_kses_post($tools) : '';
					$itemArg['image_zoom']     = ! empty( $atts['image_zoom'] ) ? esc_html( $atts['image_zoom'] ) : '';

					if ( $atts['layout'] ) {
						switch ( $layout ) {
							case 'layout1':
								$html .= $this->templateOne( $itemArg );
								break;

							case 'layout2':
								$html .= $this->templateTwo( $itemArg );
								break;

							case 'layout3':
								$html .= $this->templateThree( $itemArg );
								break;

							case 'isotope1':
								$html .= $this->layoutIsotope1( $itemArg );
								break;

							case 'isotope2':
								$html .= $this->layoutIsotope2( $itemArg );
								break;
							case 'isotope3':
								$html .= $this->layoutIsotope3( $itemArg );
								break;

							case 'carousel1':
								$html .= $this->carousel1( $itemArg );
								break;

							case 'carousel2':
								$html .= $this->carousel2( $itemArg );
								break;

							case 'carousel3':
								$html .= $this->carousel3( $itemArg );
								break;

							default:
								// code...
								break;

						}
					}
				endwhile;
				wp_reset_postdata();

				if ( $isIsotope || $isCarousel ) {
					$html .= ' </div>'; // end tlp-team-isotope.
				}

				add_action( 'wp_footer', [ $this, 'load_scripts' ] );

			} else {
				$html .= '<p>No portfolio found</p>';
			}

			$html .= '</div>'; // end row.

			if ( $atts['pagination'] && ! $isCarousel ) {
				$html .= TLPPortfolio()->pagination( $portfolioQuery, $args, [] );
			}
			$html .= '</div>'; // end container.

			return $html;
		}
	}
endif;