<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
} // Exit if accessed directly
/**
 * Template Name: Page With Posts
 * Description: A Page Template that will show posts - pretty much like index
 *
 * This may be the most complicated code in the theme, yet it is one of the most popular
 * feature of the theme's users. This page template is essential to allow users to apply
 * all the theme options to a blog page.
 *
 * generating the infobar won't work right on the page-navi until we restart the loop, so...
 *
 * We create the breadcrumbs part for the page.
 * We buffer the output from the inject-prmain up to the end of the page content
 * We create the page-navi part of the infobar after we restart the loop
 * Then output the infobar with the page breadcrumbs and the posts page-navi and the page buffer
 * Finally, start the new loop.
 */

function absolute_weaver_paget_posts( ) {
	$GLOBALS['absolute_weaver_page_who'] = 'pwp';
	$GLOBALS['absolute_weaver_page_is_archive'] = false;    // need these for body class
	get_header( 'pwp' );

// build infobar front part - replace get_template_part('infobar'); with local code
// we need to build it in a buffer

	absolute_weaver_container_div( 'pwp' );       // #container

	ob_start();            // generate the stuff that comes AFTER the infobar for pwp since we can't generate page nav until later

	$sb_layout = absolute_weaver_sb_layout( 'blog' );

// ********* get_template_part('template-parts/infobar');	// put the info bar

	absolute_weaver_sidebar_before( $sb_layout, 'blog' );          // sidebars if top-stacking
	do_action( 'absolute_weaver_per_page' );

	$paged = absolute_weaver_get_page();

// and next the content area.

	absolute_weaver_echo_sanitized_html('<div id="content" role="main" ' . absolute_weaver_content_class( $sb_layout, 'pwp', false ) . ">\n" );


	absolute_weaver_post_count_clear();
	the_post();

	if ( ! is_front_page() ) {
		$GLOBALS['absolute_weaver_pwp_title'] = get_the_title();    // Make breadcrumbs work a bit better
	}

	if ( $paged == 1 ) {    // only show on the first page
		// If we have content for this page, let's display it.
		if ( get_the_content() != '' ||
		     ( get_the_title() != '' && ! absolute_weaver_is_checked_page_opt( '_pp_hide_page_title', true ) ) ) {
			get_template_part( 'template-parts/content', 'page' );
		} else {
			absolute_weaver_edit_link();
		}
	}
	echo "\n<!-- PwP: End Page content -->\n";


	$top_of_pwp = ob_get_clean();            // now get the top sidebar, etc.

	if ( post_password_required() ) {
		get_template_part( 'template-parts/infobar' );    // put the info bar now that the posts info is available
		echo wp_kses_post( $top_of_pwp );                // this is a double esc - in reality, it already was done in the ob code.
		// every thing done, so allow comments?
		// comments_template( '', true );
		?>
		</div><!-- #content -->
		<?php
		absolute_weaver_sidebar_after( $sb_layout, 'blog' );
		?>
		<div class="clear-container-end" style="clear:both"></div><</div></div><!-- /#container-end, #container -->
		<?php
		get_footer( 'blog' );

	} else {        // show posts


		// Now, the posts

		$args = array(
			'ignore_sticky_posts' => false,
			'orderby'             => 'date',
			'order'               => 'DESC',
			'paged'               => $paged,
		);

		$filter = absolute_weaver_get_per_page_value( '_pp_post_filter' );      // ATW Show Posts filter
		if ( function_exists( 'atw_showposts_installed' ) && $filter != '' ) {
			$params = atw_posts_get_filter_params( $filter );
			if ( $params != '' ) {        // they specified a $filter arg, so use it and wipe out anything else...
				$fargs = shortcode_parse_atts( $params );
			} else {
				$fargs = '';
			}

			$qargs = atw_posts_get_qargs( $fargs, array() );
			$posts_query = new WP_Query( apply_filters( 'absolute_weaver_pwp_wp_query', $qargs ) );

		} else {
			$args = absolute_weaver_setup_post_args( $args );    // setup custom fields for this page
			$posts_query = new WP_Query( apply_filters( 'absolute_weaver_pwp_wp_query', $args ) );
		}

		// now have to put the sidebar
		get_template_part( 'template-parts/infobar' );    // put the info bar now that the posts info is available
		echo wp_kses_post( $top_of_pwp );     // this is a double esc - in reality, it already was done in the ob code.


		if ( $posts_query->have_posts() ) {                // same loop as index.php
			global $absolute_weaver_sticky;

			absolute_weaver_content_nav( 'nav-above' );
			$sticky_posts = false;

			// If you specify filters,
			// then the sticky post code is essentially ignored by WP, so we have to do this ourselves.
			// So - if there are sticky posts, we have to move them to the top of the posts list, and
			// manually add 'sticky' to the post's class. (1/11/12)

			if ( ! absolute_weaver_is_checked_page_opt( '_pp_hide_sticky' )
			     && ( absolute_weaver_get_per_page_value( '_pp_category' )
			          || absolute_weaver_get_per_page_value( '_pp_tag' )
			          || absolute_weaver_get_per_page_value( '_pp_author' )
			     ) ) {    // move sticky posts when cat or tag filters?
				// Put sticky posts at the top of the posts array
				$sticky_posts = get_option( 'sticky_posts' );

				if ( is_array( $sticky_posts ) && ! empty( $sticky_posts ) ) {
					$num_posts = count( $posts_query->posts );
					$sticky_offset = 0;
					// Loop over posts and relocate stickies to the front.
					for ( $i = 0; $i < $num_posts; $i ++ ) {
						if ( in_array( $posts_query->posts[ $i ]->ID, $sticky_posts ) ) {
							$sticky_post = $posts_query->posts[ $i ];
							// Remove sticky from current position
							array_splice( $posts_query->posts, $i, 1 );
							// Move to front, after other stickies
							array_splice( $posts_query->posts, $sticky_offset, 0, array( $sticky_post ) );
							// Increment the sticky offset. The next sticky will be placed at this offset.
							$sticky_offset ++;
						}
					}
				}
			}

			/* Start the Loop */
			$num_cols = absolute_weaver_getopt( 'blog_cols' ); // default
			$pp = absolute_weaver_get_per_page_value( '_pp_wvrx_pwp_cols' );
			if ( $pp ) {
				$num_cols = $pp;
			}
			if ( ! $num_cols || $num_cols > 3 ) {
				$num_cols = 1;
			}

			$sticky_one = absolute_weaver_getopt_checked( 'blog_sticky_one' ) && $paged <= 1;
			$first_one = absolute_weaver_getopt_checked( 'blog_first_one' ) && $paged <= 1;
			$hide_n_posts = absolute_weaver_get_per_page_value( '_pp_hide_n_posts' );
			if ( $hide_n_posts == '' || $hide_n_posts < 1 || $hide_n_posts > 100 ) {
				$hide_n_posts = 0;
			}

			absolute_weaver_post_count_clear();
			echo( "<div class=\"wvrx-posts\">\n" );
			// the loop...
			while ( $posts_query->have_posts() ) {
				$posts_query->the_post();

				absolute_weaver_post_count_bump();

				if ( absolute_weaver_post_count() <= $hide_n_posts ) {
					global $page, $paged;
					if ( ! ( $paged >= 2 || $page >= 2 ) ) {
						continue;
					}            // skip posting
				}

				$absolute_weaver_sticky = false;

				if ( is_array( $sticky_posts ) && ! empty( $sticky_posts ) && in_array( get_the_ID(), $sticky_posts ) ) {
					$absolute_weaver_sticky = true;
				}

				if ( ( is_sticky() || $absolute_weaver_sticky ) && $sticky_one ) {
					get_template_part( 'template-parts/content', get_post_format() );
				} elseif ( $first_one ) {
					get_template_part( 'template-parts/content', get_post_format() );
					$first_one = false;
				} else {

					switch ( $num_cols ) {
						case 1:
							get_template_part( 'template-parts/content', get_post_format() );
							$sticky_one = false;
							break;
						case 2:
							echo( '<div class="content-2-col">' . "\n" );
							get_template_part( 'template-parts/content', get_post_format() );
							echo( "</div> <!-- content-2-col -->\n" );

							$sticky_one = false;
							break;
						case 3:
							echo( '<div class="content-3-col">' . "\n" );
							get_template_part( 'template-parts/content', get_post_format() );
							echo( "</div> <!-- content-3-col -->\n" );

							$sticky_one = false;
							break;
						default:
							get_template_part( 'template-parts/content', get_post_format() );
							$sticky_one = false;
					}    // end switch $num_cols
				}
			}    // end while have posts
			echo( "</div>\n" );


			absolute_weaver_content_nav( 'nav-below' );
		} else {
			absolute_weaver_not_found_search( __FILE__ );
		}
		// every thing done, so allow comments?
		// comments_template( '', true );

		?>

		</div><!-- #content -->
		<?php

		wp_reset_query();
		wp_reset_postdata();    // need these so extra-menus work in rightsidebar and footer

		absolute_weaver_sidebar_after( $sb_layout, 'blog' );
		?>
		<div class="clear-container-end" style="clear:both"></div></div></div><!-- /#container-end, #container -->
		<?php
		get_footer( 'blog' );
	} // end of show posts section
}

// # PAGE WITH POSTS HELPER FUNCTIONS ==============================================================

function absolute_weaver_get_page_order() {
	$order = absolute_weaver_get_per_page_value( '_pp_sort_order' );
	if ( empty( $order ) ) {
		return '';
	}
	if ( $order == 'ASC' || $order == 'DESC' ) {
		return $order;
	}
	absolute_weaver_page_posts_error( esc_html__( 'order value must be ASC or DESC. You used: ', 'absolute-weaver' ) . $order );

	return '';
}

function absolute_weaver_get_page_posts_per() {
	$ppp = absolute_weaver_get_per_page_value( '_pp_posts_per_page' );
	if ( empty( $ppp ) ) {
		return '';
	}

	// now convert slugs to numbers
	return $ppp;
}

function absolute_weaver_get_page_author() {
	$author = absolute_weaver_get_per_page_value( '_pp_author' );
	if ( empty( $author ) ) {
		return '';
	}

	return $author;
}


function absolute_weaver_setup_post_args( $args ) {
	/* setup WP_Query arg list */

	$cats = absolute_weaver_get_page_categories();
	if ( ! empty( $cats ) ) {
		$args['cat'] = $cats;
	}

	$tags = absolute_weaver_get_page_tags();
	if ( ! empty( $tags ) ) {
		$args['tag'] = $tags;
	}

	$onepost = absolute_weaver_get_page_onepost();
	if ( ! empty( $onepost ) ) {
		$args['name'] = $onepost;
	}

	$orderby = absolute_weaver_get_page_orderby();
	if ( ! empty( $orderby ) ) {
		$args['orderby'] = $orderby;
	}

	$order = absolute_weaver_get_page_order();
	if ( ! empty( $order ) ) {
		$args['order'] = $order;
	}

	$author_name = absolute_weaver_get_page_author();
	if ( ! empty( $author_name ) ) {
		$nosp    = str_replace( ' ', '', $author_name );
		$id_list = str_replace( ',', '', $nosp );
		if ( is_numeric( $id_list ) ) {
			$args['author'] = $author_name;
		} else {
			$args['author_name'] = $author_name;
		}
	}

	$posts_per_page = absolute_weaver_get_page_posts_per();
	if ( ! empty( $posts_per_page ) ) {
		$args['posts_per_page'] = $posts_per_page;
	}

	$post_type = absolute_weaver_get_per_page_value( '_pp_post_type' );
	if ( $post_type ) {
		$args['post_type'] = $post_type;
	}

	if ( absolute_weaver_is_checked_page_opt( '_pp_hide_sticky' ) ) {
		$args['ignore_sticky_posts'] = true;
	}

	return $args;
}

function absolute_weaver_get_page_categories() {
	$cats = absolute_weaver_get_per_page_value( '_pp_category' );
	if ( empty( $cats ) ) {
		return '';
	}

	// now convert slugs to ids
	return absolute_weaver_cat_slugs_to_ids( $cats );
}

function absolute_weaver_cat_slugs_to_ids( $cats ) {
	if ( empty( $cats ) ) {
		return '';
	}

	// now convert slugs to numbers
	$cats     = str_replace( ' ', '', $cats );
	$clist    = explode( ',', $cats );    // break into a list
	$cat_list = '';
	foreach ( $clist as $slug ) {
		$neg = 1;    // not negative
		if ( $slug[0] == '-' ) {
			$slug = substr( $slug, 1 );    // zap the -
			$neg  = - 1;
		}
		if ( strlen( $slug ) > 0 && is_numeric( $slug ) ) { // allow both slug and id
			$cat_id = $neg * ( int ) $slug;
			if ( $cat_list == '' ) {
				$cat_list = strval( $cat_id );
			} else {
				$cat_list .= ',' . strval( $cat_id );
			}
		} else {
			$cur_cat = get_category_by_slug( $slug );
			if ( is_object( $cur_cat ) ) {
				$cat_id = $neg * ( int ) $cur_cat->cat_ID;
				if ( $cat_list == '' ) {
					$cat_list = strval( $cat_id );
				} else {
					$cat_list .= ',' . strval( $cat_id );
				}
			}
		}
	}
	if ( empty( $cat_list ) ) {
		$cat_list = '99999999';
	}

	return $cat_list;
}

function absolute_weaver_get_page_tags() {
	$tags = absolute_weaver_get_per_page_value( '_pp_tag' );
	if ( empty( $tags ) ) {
		return '';
	}

	return str_replace( ' ', '', $tags );
}

function absolute_weaver_get_page_onepost() {
	$the_post = absolute_weaver_get_per_page_value( '_pp_onepost' );
	if ( empty( $the_post ) ) {
		return '';
	}

	return $the_post;
}

function absolute_weaver_get_page_orderby() {
	$orderby = absolute_weaver_get_per_page_value( '_pp_orderby' );
	if ( empty( $orderby ) ) {
		return '';
	}

	if ( $orderby == 'author' || $orderby == 'date' || $orderby == 'title' || $orderby == 'rand' ) {
		return $orderby;
	}
	absolute_weaver_page_posts_error( esc_html__( 'orderby must be author, date, title, or rand. You used: ', 'absolute-weaver' ) . $orderby );

	return '';
}

function absolute_weaver_page_posts_error( $info = '' ) {
	echo( '<h2 style="color:red;">' . esc_html__( 'WARNING: error defining Custom Field on Page with Posts.', 'absolute-weaver' ) . '</h2>' );
	if ( strlen( $info ) > 0 ) {
		echo esc_html__( 'More info: ', 'absolute-weaver') . esc_html( $info ) . '<br />' ;
	}
}

absolute_weaver_paget_posts();

