AnsPress_Common_Pages()
Description #
Handle output of all default pages of AnsPress
Source #
File: includes/common-pages.php
class AnsPress_Common_Pages {
/**
* Register all pages of AnsPress
*/
public static function register_common_pages() {
ap_register_page( 'base', ap_opt( 'base_page_title' ), array( __CLASS__, 'base_page' ) );
ap_register_page( 'question', __( 'Question', 'anspress-question-answer' ), array( __CLASS__, 'question_page' ), false );
ap_register_page( 'ask', __( 'Ask a Question', 'anspress-question-answer' ), array( __CLASS__, 'ask_page' ) );
ap_register_page( 'search', __( 'Search', 'anspress-question-answer' ), array( __CLASS__, 'search_page' ), false );
ap_register_page( 'edit', __( 'Edit Answer', 'anspress-question-answer' ), array( __CLASS__, 'edit_page' ), false );
ap_register_page( 'activities', __( 'Activities', 'anspress-question-answer' ), array( __CLASS__, 'activities_page' ), false );
}
/**
* Layout of base page.
*/
public static function base_page() {
global $wp;
$keywords = get_search_query();
$tax_relation = ! empty( $wp->query_vars['ap_tax_relation'] ) ? $wp->query_vars['ap_tax_relation'] : 'OR';
$args = array();
$args['tax_query'] = array( 'relation' => $tax_relation ); // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_tax_query
if ( false !== $keywords ) {
$args['s'] = $keywords;
}
if ( is_front_page() ) {
$args['paged'] = get_query_var( 'page' );
}
// Set post parent.
if ( get_query_var( 'post_parent', false ) ) {
$args['post_parent'] = get_query_var( 'post_parent' );
}
if ( ap_sanitize_unslash( 'unpublished', 'r' ) && is_user_logged_in() ) {
$args['ap_show_unpublished'] = true;
}
/**
* Filter main question list query arguments.
*
* @param array $args Wp_Query arguments.
*/
$args = apply_filters( 'ap_main_questions_args', $args );
anspress()->questions = new Question_Query( $args );
ap_get_template_part( 'archive' );
}
/**
* Render question permissions message.
*
* @param object $_post Post object.
* @return string
* @since 4.1.0
*/
private static function question_permission_msg( $_post ) {
$msg = false;
// Check if user is allowed to read this question.
if ( ! ap_user_can_read_question( $_post->ID ) ) {
if ( 'moderate' === $_post->post_status ) {
$msg = __( 'This question is awaiting moderation and cannot be viewed. Please check back later.', 'anspress-question-answer' );
} else {
$msg = __( 'Sorry! you are not allowed to read this question.', 'anspress-question-answer' );
}
} elseif ( 'future' === $_post->post_status && ! ap_user_can_view_future_post( $_post ) ) {
$time_to_publish = human_time_diff( strtotime( $_post->post_date ), ap_get_current_timestamp() );
$msg = '<strong>' . sprintf(
// Translators: %s contain time to publish.
__( 'Question will be published in %s', 'anspress-question-answer' ),
$time_to_publish
) . '</strong>';
$msg .= '<p>' . esc_attr__( 'This question is not published yet and is not accessible to anyone until it get published.', 'anspress-question-answer' ) . '</p>';
}
/**
* Filter single question page permission message.
*
* @param string $msg Message.
* @since 4.1.0
*/
$msg = apply_filters( 'ap_question_page_permission_msg', $msg );
return $msg;
}
/**
* Output single question page.
*
* @since 0.0.1
* @since 4.1.0 Changed template file name to single-question.php to question.php.
* @since 4.1.3 Re-setup current post.
* @since 4.1.15 Add while loop.
*/
public static function question_page() {
global $question_rendered, $post;
$question_rendered = false;
$msg = self::question_permission_msg( $post );
// Check if user have permission.
if ( false !== $msg ) {
status_header( 403 );
echo '<div class="ap-no-permission">' . wp_kses_post( $msg ) . '</div>';
$question_rendered = true;
return;
}
if ( have_posts() ) {
while ( have_posts() ) :
the_post();
include ap_get_theme_location( 'single-question.php' );
endwhile;
}
/**
* An action triggered after rendering single question page.
*
* @since 0.0.1
*/
do_action( 'ap_after_question' );
$question_rendered = true;
}
/**
* Output ask page template
*/
public static function ask_page() {
$post_id = ap_sanitize_unslash( 'id', 'r', false );
if ( $post_id && ! anspress_verify_nonce( 'edit-post-' . $post_id ) ) {
esc_attr_e( 'Something went wrong, please try again', 'anspress-question-answer' );
return;
}
include ap_get_theme_location( 'ask.php' );
/**
* Action called after ask page (shortcode) is rendered.
*
* @since 4.1.8
*/
do_action( 'ap_after_ask_page' );
}
/**
* Load search page template
*
* @since unknown
* @since 4.2.0 Added missing exit statement.
*/
public static function search_page() {
$keywords = ap_sanitize_unslash( 'ap_s', 'query_var', false );
wp_safe_redirect( add_query_arg( array( 'ap_s' => $keywords ), ap_get_link_to( '/' ) ) );
exit;
}
/**
* Output edit page template
*/
public static function edit_page() {
$post_id = (int) ap_sanitize_unslash( 'id', 'r' );
if ( ! anspress_verify_nonce( 'edit-post-' . $post_id ) || empty( $post_id ) || ! ap_user_can_edit_answer( $post_id ) ) {
echo '<p>' . esc_attr__( 'Sorry, you cannot edit this answer.', 'anspress-question-answer' ) . '</p>';
return;
}
global $editing_post;
$editing_post = ap_get_post( $post_id );
ap_answer_form( $editing_post->post_parent, true );
}
/**
* Render activities page.
*
* @return void
* @since 4.1.2
* @since 4.1.8 Added Exclude roles arguments.
*/
public static function activities_page() {
$roles_exclude = ap_opt( 'activity_exclude_roles' );
$roles = is_array( $roles_exclude ) ? array_keys( $roles_exclude ) : array();
$args = array();
if ( ! empty( $roles ) ) {
$args['exclude_roles'] = $roles;
}
$activities = new AnsPress\Activity( $args );
include ap_get_theme_location( 'activities/activities.php' );
}
/**
* If page is not found then set header as 404
*/
public static function set_404() {
global $wp_query;
$wp_query->set_404();
status_header( 404 );
include ap_get_theme_location( 'not-found.php' );
}
}
Expand full source code Collapse full source code View on GitHub: includes/common-pages.php:19
Add your comment