Current File : /var/www/html/blog/wp-content/plugins/blogsqode-posts/public/class-blogsqode-blog-public.php
<?php

/**
 * The public-specific functionality of the plugin.
 *
 * Defines the plugin name, version, and two examples hooks for how to
 * enqueue the public-specific stylesheet and JavaScript.
 *
 * @package    Blogsqode
 * @subpackage Blogsqode/public
 * @author     The_Krishna
 */
class Blogsqode_Public extends Blogsqode_Public_Templates
{
	/**
	 * Initialize the class and set its properties.
	 *
	 * @since    2.0.0
	 */
	public function __construct()
	{
		add_shortcode('blogsqode_blog_list', array($this, 'blogsqode_views'));
		add_action('wp_enqueue_scripts', array($this, 'add_blogsqode_public_scripts_func'), 999);

		add_action('wp_ajax_blogsqode_loadmore', array($this, 'blogsqode_views_ajax'));
		add_action('wp_ajax_nopriv_blogsqode_loadmore', array($this, 'blogsqode_views_ajax'));

		$design_mode = esc_attr(get_option('blogsqode_single_post_design_mode'));
		if ($design_mode === 'Unable') {
			add_filter('template_include', array($this, 'blogsqode_templates'));
		}
	}

	function blogsqode_templates($template)
	{
		$post_types = array('post');
		if (is_singular($post_types)) {
			$template = BLOGSQODE_PLUGIN_PATH . '/public/single/single-blogsqode.php';
		}
		return $template;
	}

	/**
	 * Enqueue a script with jQuery as a dependency.
	 */

	function add_blogsqode_public_scripts_func($hook_suffix)
	{
		global $wp_query;
		$version = BLOGSQODE_VERSION;

		$post_types = array('post');
		$design_mode = esc_attr(get_option('blogsqode_single_post_design_mode'));

		wp_enqueue_style('blogsqode-public-styles', plugins_url('/assets/css/blogsqode-public.css', __FILE__), array(), $version, 'all');
		
		wp_enqueue_script('jquery');
		
		wp_enqueue_script('blogsqode-public-scripts', plugins_url('/assets/js/blogsqode-public.js', __FILE__), array('jquery'), $version, true);
		
		wp_enqueue_script('matchheight-js', plugins_url('/assets/js/jquery.matchHeight-min.js', __FILE__), true);
		
		wp_localize_script('blogsqode-public-scripts', 'blogsqode_loadmore_params', array(
			'ajaxurl' => site_url() . '/wp-admin/admin-ajax.php',
			'posts' => json_encode($wp_query->query_vars),
			'current_page' => get_query_var('paged') ? get_query_var('paged') : 1,
			'max_page' => $wp_query->max_num_pages
		));
	}

	/* general layout with default sidebar */
	public function blogsqode_setting_arr_func()
	{
		$settings = array();
		$settings['blogsqode_dark_mode']  = esc_attr(get_option('blogsqode_dark_mode'));
		$settings['blogsqode_category_filter_allow']  = esc_attr(get_option('blogsqode_category_filter_allow'));
		$settings['blogsqode_blog_post_grid']  = esc_attr(get_option('blogsqode_blog_post_grid'));
		$settings['blogsqode_short_desc_allow']  = strtolower(esc_attr(get_option('blogsqode_short_desc_allow')));
		$settings['blogsqode_auhtor_thumb_allow']  = strtolower(esc_attr(get_option('blogsqode_auhtor_thumb_allow')));
		$settings['blogsqode_author_name_allow']  = strtolower(esc_attr(get_option('blogsqode_author_name_allow')));
		$settings['blogsqode_blog_date_allow']  = strtolower(esc_attr(get_option('blogsqode_blog_date_allow')));
		$settings['blogsqode_comment_count_allow']  = strtolower(esc_attr(get_option('blogsqode_comment_count_allow')));
		$settings['blogsqode_read_time_allow']  = strtolower(esc_attr(get_option('blogsqode_read_time_allow')));
		$settings['blogsqode_category_allow']  = strtolower(esc_attr(get_option('blogsqode_category_allow')));
		$settings['blogsqode_read_more_btn_allow']  = strtolower(esc_attr(get_option('blogsqode_read_more_btn_allow')));
		$settings['blogsqode_read_more_button_layout']  = esc_attr(get_option('blogsqode_read_more_button_layout'));
		return $settings;
	}

	public function blogsqode_views($atts)
	{

		ob_start();
		$settings = self::blogsqode_setting_arr_func();
		$posts_per_page = (esc_attr(get_option('blogsqode_blogs_per_page'))) ?: 12;
		$intpostperpage = (int) filter_var($posts_per_page, FILTER_SANITIZE_NUMBER_INT);
		$paged = (int) filter_var(self::blogsqode_paged(), FILTER_SANITIZE_NUMBER_INT);
		$args           = array(
			'post_type' => 'post',
			'posts_per_page' => $intpostperpage,
			'paged'          => $paged,
			'orderby'        => 'date',
			'order'          => 'DESC',
		);

		$loop = new WP_Query($args);
		$max_num_pages = $loop->max_num_pages;
		$pagination_type           = (esc_attr(get_option('blogsqode_blog_pagination_option'))) ?: 'pagination';

		$layout_option = get_option('blogsqode_blog_layout');
		$atts = shortcode_atts( array(
            'layout' => '', 
        ), $atts );

		$layout = !empty($atts['layout']) ? esc_attr($atts['layout']) : (!empty($layout_option) ? esc_attr($layout_option) : '1');
		
		if ($loop->have_posts()) {
			echo '<div class="blogsqode-blog-wrap blog-listing blog-listing-posts">';
			echo '<div class="selected-layout layout-' . esc_attr($layout) . ' post-grid-' . esc_attr($settings['blogsqode_blog_post_grid']) . '">';
			while ($loop->have_posts()) :
				$loop->the_post();
				$post_id = get_the_ID();
				if ($layout === '1') {
					echo $this->layout_one($settings, $layout);
				} elseif ($layout === '2' || $layout === '3') {
					echo $this->layout_two($settings, $layout);
				} elseif ($layout === '4') {
					echo $this->layout_four($settings, $layout);
				} elseif ($layout === '5') {
					echo $this->layout_five($settings, $layout);
				} elseif ($layout === '6') {
					echo $this->layout_six($settings, $layout);
				}
			endwhile;
			wp_reset_query();
			echo '</div>';
			echo '</div>';
		}
		if ($pagination_type === 'pagination') {
			echo self::blogsqode_numeric_posts_nav($max_num_pages, $paged);
		} else {
			echo '<div class="load_more_posts_tab_off" data-layout="' . esc_attr($layout) . '" data-pages="' . esc_attr($max_num_pages) . '">' . esc_html__("Load More", "blogsqode") . '</div>';
		}
		$content = ob_get_clean();
		return $content;
	}

	public static function blogsqode_numeric_posts_nav($max_pages, $paged)
	{
		$paginate = esc_attr(get_option('blogsqode_pagination_layout'));
		$l_class = 'paginate' . $paginate;
		/** Stop execution if there's only 1 page */
		if ($max_pages <= 1)
			return;

		$paged = $paged ? absint($paged) : 1;
		$max   = intval($max_pages);

		/** Add current page to the array */
		if ($paged >= 1)
			$links[] = $paged;

		/** Add the pages around the current page to the array */
		if ($paged >= 3) {
			$links[] = $paged - 1;
			$links[] = $paged - 2;
		}

		if (($paged + 2) <= $max) {
			$links[] = $paged + 2;
			$links[] = $paged + 1;
		}
		$pagination_layout = get_option('blogsqode_pagination_layout');
		echo '<div class="blogsqode-navigation blogsqode-navigation1 paginate-layout-' . esc_attr($pagination_layout) . '"><ul>' . "\n";

		/** Previous Post Link */
		if ($paged > 1) {
			printf('<li><a class="blogsqode_previous_link" href="%s"><span class=%s></span></a></li>' . "\n",  esc_url(get_pagenum_link($paged - 1)), esc_attr($l_class));
		}

		/** Link to first page, plus ellipses if necessary */
		if (! in_array(1, $links)) {
			$class = 1 == $paged ? ' class=active' : '';

			printf('<li%s><a href="%s"><span class=%s></span> %s</a></li>' . "\n", esc_attr($class), esc_url(get_pagenum_link(1)), esc_attr($l_class), esc_html__('1', 'blogsqode'));

			if (! in_array(2, $links))
				echo '<li>…</li>';
		}

		/** Link to current page, plus 2 pages in either direction if necessary */
		sort($links);
		foreach ((array) $links as $link) {
			$class = $paged == $link ? ' class=active' : '';
			printf('<li%s><a href="%s"><span class=%s></span> %s</a></li>' . "\n", esc_attr($class), esc_url(get_pagenum_link($link)), esc_attr($l_class), esc_html__($link, 'blogsqode'));
		}

		/** Link to last page, plus ellipses if necessary */
		if (! in_array($max, $links)) {
			if (! in_array($max - 1, $links))
				echo '<li>…</li>' . "\n";

			$class = $paged == $max ? ' class=active' : '';
			printf('<li%s><a href="%s"><span class=%s></span> %s</a></li>' . "\n", esc_attr($class), esc_url(get_pagenum_link($max)), esc_attr($l_class), esc_html__($max, 'blogsqode'));
		}

		/** Next Post Link */
		if ($paged < $max) {
			printf('<li><a class="blogsqode_next_link" href="%s"><span class=%s></span></a></li>' . "\n",  esc_url(get_pagenum_link($paged + 1)), esc_attr($l_class));
		}

		echo '</ul></div>' . "\n";
	}

	/* blogsqode views ajax */
	public function blogsqode_views_ajax()
	{
		$settings = self::blogsqode_setting_arr_func();
		$posts_per_page = (esc_attr(get_option('blogsqode_blogs_per_page'))) ?: '12';
		$intpostperpage = (int) filter_var($posts_per_page, FILTER_SANITIZE_NUMBER_INT);
		$paged = (int) filter_var($_POST['page'], FILTER_SANITIZE_NUMBER_INT);
		$args           = array(
			'post_type' => 'post',
			'posts_per_page' => $intpostperpage,
			'paged'          => $paged,
			'orderby'        => 'date',
			'order'          => 'DESC',
		);
		
		$loop = new WP_Query($args);

		$layout = $_POST['layout']; 

		$output = '';
		$output .= '<div class="blog-listing blog-listing-inner blog-listing-inner-no-sidebar">';
		if ($loop->have_posts()) {
			while ($loop->have_posts()) :
				$loop->the_post();
				$post_id = get_the_ID();
				if ($layout === '1') {
					$output .= $this->layout_one($settings, $layout);
				} else if ($layout === '2' || $layout === '3') {
					$output .= $this->layout_two($settings, $layout);
				} else if ($layout === '4') {
					$output .= $this->layout_four($settings, $layout);
				} else if ($layout === '5') {
					$output .= $this->layout_five($settings, $layout);
				} else if ($layout === '6') {
					$output .= $this->layout_six($settings, $layout);
				}
			endwhile; ?>
		<?php
		}
		wp_reset_postdata();
		wp_reset_query();
		$output .= '</div>';
		die($output);
	}

	/**
	 * Return page
	 *
	 * @return $paged
	 */

	public static function blogsqode_paged()
	{
		if (isset($_SERVER['REQUEST_URI']) || strstr(sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI'])), 'paged') || strstr(sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI'])), 'page')) {
			if (isset($_REQUEST['paged'])) { //phpcs:ignore
				$paged = intval($_REQUEST['paged']); //phpcs:ignore
			} else {
				if (isset($_SERVER['REQUEST_URI'])) {
					$uri = explode('/', sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI'])));
				}
				$uri   = array_reverse($uri);
				$paged = $uri[1];
			}
		} else {
			$paged = 1;
		}
		/* Pagination issue on home page */
		if (is_front_page()) {
			$paged = get_query_var('page') ? intval(get_query_var('page')) : 1;
		} else {
			$paged = get_query_var('paged') ? intval(get_query_var('paged')) : 1;
		}
		return $paged;
	}
}
new Blogsqode_Public();