HEX
Server: Apache
System: Linux nc-ph-4101.simplemoneygoals.com 5.14.0-503.21.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Jan 12 09:45:05 EST 2025 x86_64
User: dailygoldindex (1004)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: /home/dailygoldindex/public_html/wp-content/plugins/jnews-split/class.jnews-split-post.php
<?php
/**
 * @author : Jegtheme
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class JNews_Split_Post
 */
Class JNews_Split_Post {
	/**
	 * @var JNews_Split_Post
	 */
	private static $instance;

	/**
	 * Split Post Query Var
	 *
	 * @var string
	 */
	private $query_var = 'split-post';

	/**
	 * @return JNews_Split_Post
	 */
	public static function getInstance() {
		if ( null === static::$instance ) {
			static::$instance = new static();
		}

		return static::$instance;
	}

	private function __construct() {
		add_filter( 'the_content', [ $this, 'post_split' ], 12 );
		add_filter( 'pre_handle_404', [ $this, 'pre_handle_404' ], 10, 2 );
		add_action( 'wp_enqueue_scripts', [ $this, 'load_scripts' ] );

		add_filter( 'query_vars', [ $this, 'ajax_query_vars' ] );
		add_filter( 'template_include', [ $this, 'ajax_template' ] );
	}

	/**
	 * Hook handle 404 allow split post to use page query
	 *
	 * @param bool $bool
	 * @param \WP_Query $query
	 *
	 * @return bool
	 */
	public function pre_handle_404( $bool, \WP_Query $query ) {
		if ( $query->posts && is_singular() ) {
			if ( $query->post instanceof \WP_Post ) {
				$post   = clone $query->post;
				$enable = vp_metabox( 'jnews_post_split.enable_post_split', false, $post->ID );
				$tag    = vp_metabox( 'jnews_post_split.post_split.0.tag', 'h2', $post->ID );

				if ( $enable && $enable === "1" ) {
					require_once 'class.jnews-split-tool.php';
					$result   = $this->prepare_split( $post->post_content, $tag );
					$splitter = new JNews_Split_Tool( $result, $tag, $tag );

					if ( $splitter->have_split_content() ) {
						$page    = $this->get_current_page();
						$maxpage = $splitter->get_total_split() + 1;
						$success = (int) $page <= $maxpage;
						if ( $success ) {
							status_header( 200 );
							$bool = true;
						}
					}
				}
			}
		}

		return $bool;
	}


	public function ajax_query_vars( $vars ) {
		$vars[] = $this->query_var;

		return $vars;
	}

	public function is_ajax_request() {
		global $wp;

		if ( is_array( $wp->query_vars ) ) {
			return array_key_exists( $this->query_var, $wp->query_vars );
		}

		return false;
	}

	public function ajax_template( $template ) {
		if ( $this->is_ajax_request() ) {
			add_filter( 'jnews_force_disable_inline_related_post', '__return_true' );

			return JNEWS_SPLIT_DIR . 'split-template.php';
		}

		return $template;
	}

	public function load_scripts() {
		if ( is_singular( 'post' ) && vp_metabox( 'jnews_post_split.enable_post_split', false ) ) {
			$template = vp_metabox( 'jnews_post_split.post_split.0.template', '1' );
			$toc_type = vp_metabox( 'jnews_post_split.post_split.0.toc_type', 'normal' );

			$dependencies = [ 'jnews-frontend' ];

			if ( SCRIPT_DEBUG || get_theme_mod( 'jnews_load_necessary_asset', false ) ) {
				$dependencies = [ 'jquery', 'owlcarousel' ];
			}

			wp_enqueue_script( 'jnews-split', JNEWS_SPLIT_URL . '/assets/js/jquery.split.js', $dependencies, null, true );
			wp_enqueue_style( 'jnews-split', JNEWS_SPLIT_URL . '/assets/css/frontend.css', [], null, false );

			if ( in_array( $template, [ '6', '7', '8', '9', '10', '11', '12', '13', '14' ] ) && ( 'floating' === $toc_type || 'both' === $toc_type ) ) {
				wp_enqueue_script( 'jnews-toc', JNEWS_SPLIT_URL . '/assets/js/jquery.toc.js', $dependencies, null, true );
			}
		}
	}

	public function wrapper_position( $string, $start ) {
		$wrap_start = strpos( $string, '>' ) + 1;
		$wrap_end   = strrpos( $string, '<' ) - 1;

		return [
			'start' => $start + $wrap_start,
			'end'   => $start + $wrap_end,
		];
	}

	public function prepare_split( $content, $tag ) {
		$node = ( new JNews_Split_Content_Tag( $content ) )->find_parent_recursive( $tag );

		if ( $node && $node->parent->start && $node->parent->end ) {
			$parent   = $node->parent;
			$string   = substr( $content, $parent->start, $parent->end - $parent->start );
			$position = $this->wrapper_position( $string, $parent->start );
			$result   = substr( $content, $position['start'], $position['end'] - $position['start'] );

			return [
				'start'   => $position['start'],
				'end'     => $position['end'],
				'result'  => $result,
				'content' => $content,
			];
		} else {
			return [
				'start'   => 0,
				'end'     => strlen( $content ),
				'result'  => $content,
				'content' => $content,
			];
		}
	}


	public function post_split( $content ) {
		if ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ) {
			return $content;
		}

		if ( $this->is_ajax_request() ) {
			$enable = vp_metabox( 'jnews_post_split.enable_post_split', false );
			$tag    = vp_metabox( 'jnews_post_split.post_split.0.tag', 'h2' );
			$page   = sanitize_text_field( $_REQUEST['index'] );

			if ( $enable ) {
				$result = $this->prepare_split( $content, $tag );

				require_once 'class.jnews-split-tool.php';
				$splitter = new JNews_Split_Tool( $result, $tag, $tag );

				if ( $splitter->have_split_content() ) {
					$result      = $splitter->get_all_result();
					$description = $result['content'][ $page ]['description'];

					return apply_filters( 'jnews_split_content_description', $description, $page, $splitter->get_total_split() + 1 );
				}
			}
		} else {
			if ( is_single() && get_post_type() === 'post' ) {
				$enable     = vp_metabox( 'jnews_post_split.enable_post_split', false );
				$tag        = vp_metabox( 'jnews_post_split.post_split.0.tag', 'h2' );
				$template   = vp_metabox( 'jnews_post_split.post_split.0.template', '1' );
				$numbering  = vp_metabox( 'jnews_post_split.post_split.0.numbering', 'asc' );
				$mode       = vp_metabox( 'jnews_post_split.post_split.0.mode', 'normal' );
				$enable_toc = vp_metabox( 'jnews_post_split.post_split.0.enable_toc', false );
				$toc_type   = vp_metabox( 'jnews_post_split.post_split.0.toc_type', 'normal' );

				if ( $enable ) {
					$result = $this->prepare_split( $content, $tag );

					require_once 'class.jnews-split-tool.php';
					$splitter = new JNews_Split_Tool( $result, $tag, $tag );

					if ( $splitter->have_split_content() ) {
						$page = $this->get_current_page();

						require_once 'type/class.jnews-split-type-abstract.php';

						switch ( $template ) {
							case '1' :
								require_once 'type/class.jnews-split-type-1.php';
								$class = new JNews_Split_Type_1( $splitter, $page, $numbering, $mode, $tag );
								break;
							case '2' :
								require_once 'type/class.jnews-split-type-2.php';
								$class = new JNews_Split_Type_2( $splitter, $page, $numbering, $mode, $tag );
								break;
							case '3' :
								require_once 'type/class.jnews-split-type-3.php';
								$class = new JNews_Split_Type_3( $splitter, $page, $numbering, $mode, $tag );
								break;
							case '4' :
								require_once 'type/class.jnews-split-type-4.php';
								$class = new JNews_Split_Type_4( $splitter, $page, $numbering, $mode, $tag );
								break;
							case '5' :
								require_once 'type/class.jnews-split-type-5.php';
								$class = new JNews_Split_Type_5( $splitter, $page, $numbering, $mode, $tag );
								break;
							case  '6' :
							case  '7' :
							case  '8' :
							case  '9' :
							case '10' :
							case '11' :
							case '12' :
							case '13' :
							case '14' :
								require_once 'type/class.jnews-split-type-list.php';
								$class = new JNews_Split_Type_List( $splitter, $page, $numbering, $mode, $template, $tag, $enable_toc, $toc_type );
								break;
							case '15' :
								require_once 'type/class.jnews-split-type-15.php';
								$class = new JNews_Split_Type_15( $splitter, $page, $numbering, $mode, $tag );
								break;
							case '16' :
								require_once 'type/class.jnews-split-type-16.php';
								$class = new JNews_Split_Type_16( $splitter, $page, $numbering, "all", $tag );
								break;
							case '17' :
								require_once 'type/class.jnews-split-type-17.php';
								$class = new JNews_Split_Type_17( $splitter, $page, $numbering, "all", $tag );
								break;
							case '18' :
								require_once 'type/class.jnews-split-type-18.php';
								$class = new JNews_Split_Type_18( $splitter, $page, $numbering, "all", $tag );
								break;
							case '19' :
								require_once 'type/class.jnews-split-type-19.php';
								$class = new JNews_Split_Type_19( $splitter, $page, $numbering, "all", $tag );
								break;
							case '20' :
								require_once 'type/class.jnews-split-type-20.php';
								$class = new JNews_Split_Type_20( $splitter, $page, $numbering, "all", $tag );
								break;
							default :
								$class = null;
								break;
						}

						if ( $class !== null ) {
							return $class->render_output();
						}
					}
				}
			}
		}

		return $content;
	}

	public function get_current_page() {
		$page  = get_query_var( 'page' ) ? get_query_var( 'page' ) : 1;
		$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

		return max( $page, $paged );
	}
}