HEX
Server: Apache
System: Linux srv13.cpanelhost.cl 3.10.0-962.3.2.lve1.5.38.el7.x86_64 #1 SMP Thu Jun 18 05:28:41 EDT 2020 x86_64
User: cca63905 (4205)
PHP: 7.3.20
Disabled: NONE
Upload Files
File: /home4/cca63905/.trash/wp-content/themes/enfold/includes/class-avia-custom-pages.php
<?php
/**
 * Adds logic for special pages like 404, maintainance mode, footer page
 *
 * @since 4.5.2
 * @author guenter
 */
if ( ! defined( 'ABSPATH' ) )   { exit; }		    // Exit if accessed directly

if( ! class_exists( 'Avia_Custom_Pages' ) )
{
	class Avia_Custom_Pages 
	{
		/**
		 * @since 4.5.2
		 * @var Avia_Custom_Pages 
		 */
		static private $_instance = null;
		
		
		/**
		 * Returns the only instance
		 * 
		 * @since 4.5.2
		 * @return Avia_Custom_Pages
		 */
		static public function instance()
		{
			if( is_null( Avia_Custom_Pages::$_instance ) )
			{
				Avia_Custom_Pages::$_instance = new Avia_Custom_Pages();
			}
			
			return Avia_Custom_Pages::$_instance;
		}
		
		/**
		 * @since 4.5.2
		 */
		protected function __construct() 
		{
			/**
			 * Callback filter to request special pages id's (e.g. used by config-yoast, config-wpml)
			 */
			add_filter( 'avf_get_special_pages_ids', array( $this, 'handler_get_special_pages_ids' ), 10, 2 );
			
			add_filter( '404_template', array( $this, 'handler_404_template' ), 999, 1 );
			add_action( 'wp', array( $this, 'handler_wp_custom_404_page' ), 1 );
			
			add_action( 'template_include', array( $this, 'handler_maintenance_mode' ), 4000, 1 );
			add_filter( 'template_include', array( $this, 'handler_force_reroute_to_404' ), 5000, 1 );
			
			add_action( 'admin_bar_menu', array( $this, 'handler_maintenance_mode_admin_info' ), 100 );
			add_filter( 'display_post_states', array( $this, 'handler_display_post_state' ), 10, 2 );
			add_filter( 'avf_builder_button_params', array( $this, 'handler_special_page_message' ), 10000, 1 );
			
			add_action( 'pre_get_posts', array( $this, 'handler_hide_special_pages' ), 10, 1 );
			add_filter( 'wp_list_pages_excludes', array( $this, 'handler_wp_list_pages_excludes' ), 10, 1 );
			add_filter( 'avf_ajax_search_query',  array( $this, 'handler_avf_ajax_search_exclude_pages' ), 10, 1 );
			
			add_filter( 'ava_builder_template_after_header', array( $this, 'handler_modified_main_query' ), 999 );
			add_filter( 'ava_page_template_after_header', array( $this, 'handler_modified_main_query' ), 999 );
		}
				
		
		/**
		 * Error 404 - Reroute to a Custom Page
		 * Hooks into the 404_template filter and performs a redirect to that page.
		 * 
		 * @author tinabillinger - modified by günter
		 * @since 4.3 - 4.4.2 - 4.5.2
		 * 
		 * @param string $template
		 * @return string
		 */
		public function handler_404_template( $template )
		{
			if( true === $this->get_custom_page_object( 'maintenance', $template, 'option_set' ) )
			{
				return get_page_template();
			}
			
			$error404 = $this->get_custom_page_object( '404', $template );
			if( false === $error404 )
			{
				return $template;
			}
			
			if( 'error404_redirect' == avia_get_option( 'error404_custom' ) )
			{
				$error404_url = get_permalink( $error404->ID );
				$error404_url = add_query_arg( 'avia_forced_reroute', '1', $error404_url );
				
				/**
				 * @since 4.5.5
				 * @return int
				 */
				$status = apply_filters( 'avf_404_redirect_status', 301 );
				
				if( wp_redirect( $error404_url, $status ) )
				{
					exit;
				}
				
				return template;
			}

			return $this->modify_page_query( $error404->ID, '404' );
		}
		
		/**
		 * Check if a redirect to a custom 404 page has happened
		 * 
		 * @since 4.5.4
		 */
		public function handler_wp_custom_404_page()
		{
			$error404 = $this->get_custom_page_object( '404' );
			if( false === $error404 )
			{
				return;
			}
			
			if( ! is_page( $error404->ID ) )
			{
				return;
			}
			
			$forced = isset( $_REQUEST['avia_forced_reroute'] ) && ( '1' == $_REQUEST['avia_forced_reroute'] );
			
			/**
			 * Returning anything except false displays the normal page content without changeing the status to 404
			 * 
			 * @since 4.5.5
			 * @param WP_Post $error404
			 * @param boolean $forced
			 * @return true|mixed			
			 */
			if( false !== apply_filters( 'avf_404_supress_status_code', false, $error404, $forced ) )
			{
				return;
			}
			
			/**
			 * Do not call $wp_query->set_404(); as suggested in some stackoverflow posts -
			 * that leads to an endless loop with handler_404_template  !!!!!
			 */
			status_header(404);
			nocache_headers();
		}
		
		/**
		 * Returns the custom page object. Should return a translated object if that plugin hooks correctly into get_posts()
		 * 
		 * @since 4.5.4
		 * @param string $which					'404' | 'maintenance' | 'footer_page'
		 * @param string $template 
		 * @param string $return				'object' | 'option_set'
		 * @return WP_Post|boolean
		 */
		public function get_custom_page_object( $which, $template = '', $return = 'object' )
		{
			switch( $which )
			{
				case '404':
					$option = avia_get_option( 'error404_custom', '' );
					if( ! in_array( $option, array( 'error404_custom', 'error404_redirect' ) ) )
					{
						return false;
					}
					$page_id = avia_get_option( 'error404_page', 0 );
					break;
				case 'maintenance':
					$option = avia_get_option( 'maintenance_mode', '' );
					if( ! in_array( $option, array( 'maintenance_mode', 'maintenance_mode_redirect' ) ) )
					{
						return false;
					}
					$page_id = avia_get_option( 'maintenance_page', 0 );
					break;
				case 'footer_page':
					$option = avia_get_option( 'display_widgets_socket', '' );
					if( ! in_array( $option, array( 'page_in_footer_socket', 'page_in_footer' ) ) )
					{
						return false;
					}
					$page_id = avia_get_option( 'footer_page', 0 );
					break;
				default:
					return false;
			}
			
			if( 'option_set' == $return )
			{
				return true;
			}
			
			/**
			 * Allow 3rd party (e.g. translation plugins) to change the page id
			 * (WPML already returns correct ID from avia_get_option !)
			 * 
			 * @used_by					currently unused
			 * @since 4.5.2
			 * @param int $page_id
			 * @param string $template
			 * @return int|false
			 */
			$page_id = apply_filters( 'avf_custom_page_id', $page_id, $which, $template );
			
			return $this->query_page( $page_id, $which );
		}

		/**
		 * Reroute to 404 if user wants to access a page he is not allowed to
		 * Currently only a page that is selected to be used as footer
		 *  
		 * @since 4.2.7
		 * @added_by Günter
		 * @param string $original_template 
		 * @return string 
		 */
		public function handler_force_reroute_to_404( $original_template )
		{
			global $avia_config, $wp_query;

			if( isset( $_REQUEST['avia_forced_reroute'] ) && ( '1' == $_REQUEST['avia_forced_reroute'] ) )
			{
				return $original_template;
			}
			
			if( isset( $avia_config['modified_main_query'] ) && $avia_config['modified_main_query'] instanceof WP_Query )
			{
				return $original_template;
			}
			
			/**
			 * Get all pages that are not allowed to be accessed directly
			 * 
			 * @used_by					Avia_Custom_Pages						10
			 * @used_by					enfold\config-wpml\config.php			20
			 * @since 4.5.1
			 */
			$special_pages = apply_filters( 'avf_get_special_pages_ids', array(), 'page_load' );

			if( empty( $special_pages ) )
			{
				return $original_template;
			}

			$id = get_the_ID();

			if( ( false === $id ) || ! in_array( $id, $special_pages ) )
			{
				return $original_template;
			}

			if( is_user_logged_in() && current_user_can( 'edit_pages' ) )
			{
				return $original_template;
			}
			
			/**
			 * Returning anything except true prohibits reroute and displays the normal page content
			 * 
			 * @since 4.5.5
			 * @param string $original_template
			 * @param int $id
			 * @param array $special_pages
			 * @return true|mixed			
			 */
			if( true !== apply_filters( 'avf_forced_reroute_to_404', true, $original_template, $id, $special_pages ) )
			{
				return $original_template;
			}
			
			status_header( 404 );
			$new_template = $this->handler_404_template( $original_template );

			if( isset( $avia_config['modified_main_query'] ) && $avia_config['modified_main_query'] instanceof WP_Query )
			{
				return $new_template;
			}

			$wp_query->set_404();
			status_header( 404 );
			get_template_part( '404' );
			exit;
		}
		
		/**
		 * Custom Maintenance Mode Page
		 * 
		 * Returns a 503 (temporary unavailable) status header.
		 * If user forgets to set a page we return a simple message.
		 * 
		 * Logged in users with "edit_published_posts" capability are still able to view the site
		 * 
		 * @author tinabillinger  modified by günter
		 * @since 4.3 / 4.4.2 / 4.5.2
		 * @param string $template
		 * @return string
		 */
		public function handler_maintenance_mode( $template )
		{
			if( is_user_logged_in() && current_user_can( 'edit_published_posts' ) )
			{
				return $template;
			}
			
			if( false === $this->get_custom_page_object( 'maintenance', $template, 'option_set' ) )
			{
				return $template;
			}
			
			/**
			 * Make sure to exclude login form from maintenance mode
			 * https://wordpress.stackexchange.com/questions/12863/check-if-wp-login-is-current-page
			 */
			$abspath = str_replace( array( '\\', '/' ), DIRECTORY_SEPARATOR, ABSPATH );
			$included_files = get_included_files();
			if( in_array( $abspath . 'wp-login.php', $included_files ) || 
				in_array( $abspath . 'wp-register.php', $included_files ) || 
				( isset( $_GLOBALS['pagenow'] ) && $GLOBALS['pagenow'] == 'wp-login.php' ) || 
				$_SERVER['PHP_SELF'] == '/wp-login.php'  )
			{
				return $template;
			}
			
			$fallback = '';
			$fallback .=	'<div style="width:80%; margin:150px auto; font-weight:900;font-size: 40px;text-align: center;">';
			$fallback .=		__( 'Sorry, we are currently updating our site - please try again later.', 'avia_framework' );
			$fallback .=	'</div>';
			
			
			
			$maintenance_page = $this->get_custom_page_object( 'maintenance', $template );
			if( false === $maintenance_page )
			{
				/**
				 * Output a fallback message - no page selected
				 */
				status_header( 503 );
				nocache_headers();
				exit( $fallback );
			}

			$option = avia_get_option( 'maintenance_mode', '' );
			if( 'maintenance_mode_redirect' == $option )
			{
				if( is_page( $maintenance_page->ID ) )
				{
					status_header( 503 );
					nocache_headers();
					return $template;
				}

				$maintenance_url = get_permalink( $maintenance_page->ID );
				$maintenance_url = add_query_arg( 'avia_forced_reroute', '1', $maintenance_url );
				
				/**
				 * @since 4.5.5
				 * @return int
				 */
				$status = apply_filters( 'avf_maintenance_redirect_status', 302 );
				
				if( wp_redirect( $maintenance_url, $status ) )
				{
					exit;
				}
				
				/**
				 * Output a fallback message if redirect failed
				 */
				status_header( 503 );
				nocache_headers();
				exit( $fallback );
			}
			
			status_header( 503 );
			return $this->modify_page_query( $maintenance_page->ID, 'maintenance' );
		}
		
		/**
		 * Reset modified_main_query - needed because e.g. WPML manipulates the post query in get_headers()
		 * Should help to solve problems with plugins changing the main query.
		 * 
		 * @since 4.5.1/4.5.4		(moved from enfold\config-wpml\config.php)
		 */
		public function handler_modified_main_query()
		{
			global $avia_config, $wp_query;

			if( ! isset( $avia_config['modified_main_query'] ) || ( ! $avia_config['modified_main_query'] instanceof WP_Query ) )
			{
				return;
			}
			
			/**
			 * Restore modified query and reset in_the_loop
			 */
			$wp_query = null;
			$wp_query = $avia_config['modified_main_query'];
			$wp_query->rewind_posts();
			$wp_query->in_the_loop = false;

			return;
		}
		
		/**
		 * Maintenance Mode Admin Bar Info
		 * If maintenance mode is active, an info is displayed in the admin bar
		 *
		 * @author tinabillinger
		 * @since 4.3
		 * @param WP_Admin_Bar $admin_bar
		 * @return type
		 */		
		public function handler_maintenance_mode_admin_info( WP_Admin_Bar $admin_bar )
		{
			$maintenance_page = $this->get_custom_page_object( 'maintenance' );
			
			if( $maintenance_page instanceof WP_Post ) 
			{
				$admin_bar->add_menu( array(
								'id'		=> 'av-maintenance',
								'title'		=> __( '<span style="color: #ff33ff; font-weight: bold;">Maintenance Mode Enabled</span>', 'avia_framework' ),
								'parent'	=> 'top-secondary',
								'href'		=> admin_url( 'admin.php?page=avia#goto_avia' ),
								'meta'		=> array(),
							));
			}

			return $admin_bar;
		}
		
		/**
		 * Returns page id's that do not belong to normal page lists 
		 * like custom 404, custom maintainence mode page, custom footer page
		 * 
		 * @since 4.5.2
		 * @param array $post_ids
		 * @param string $context				'page_load' | 'pre_get_posts_filter' | 'wp_list_pages_excludes' | 'avia_ajax_search' | 'sitemap'
		 * @return array
		 */
		public function handler_get_special_pages_ids( $post_ids = array(), $context = '' )
		{
			/**
			 * Inactive pages can be visited in frontend by default - remove from id array on page load
			 */
			$show_inactive = 'page_load' != $context;
			
			/**
			 * Return anything except true to hide inactive special pages
			 * 
			 * @since 4.5.5
			 * @return boolean
			 */
			$show_inactive = apply_filters( 'avf_show_inactive_special_pages', $show_inactive, $post_ids, $context ) === true ? true : false;
			
					// Maintenance Page
			$active = in_array( avia_get_option( 'maintenance_mode' ), array( 'maintenance_mode', 'maintenance_mode_redirect' ) );
			$id = avia_get_option( 'maintenance_page', 0 );
			if( is_numeric( $id ) && (int) $id > 0 )
			{
				if( $active || $show_inactive )
				{
					$post_ids[] = (int) $id;
				}
			}

					// 404 Page
			$active = in_array( avia_get_option( 'error404_custom' ), array( 'error404_custom', 'error404_redirect' ) );
			$id = avia_get_option( 'error404_page', 0 );
			if( is_numeric( $id ) && (int) $id > 0 )
			{
				if( $active || $show_inactive )
				{
					$post_ids[] = (int) $id;
				}
			}

					// Footer Page
			$active = in_array( avia_get_option( 'display_widgets_socket' ), array( 'page_in_footer', 'page_in_footer_socket' ) );
			$id = avia_get_option( 'footer_page', 0 );
			if( is_numeric( $id ) && (int) $id > 0 )
			{
				if( $active || $show_inactive )
				{
					$post_ids[] = (int) $id;
				}
			}

			$post_ids = array_unique( $post_ids, SORT_NUMERIC );
			return $post_ids;
		}		
		
		/**
		 * Remove special pages from page lists in frontend and search results list
		 * 
		 * @since 4.5.2
		 * @param WP_Query $query
		 */
		public function handler_hide_special_pages( WP_Query $query )
		{
			if( is_admin() )
			{
				return;
			}

			/**
			 * @used_by					Avia_Custom_Pages					10
			 * @used_by					config-wpml\config.php				20
			 * @since 4.5.2
			 */
			$pages = apply_filters( 'avf_get_special_pages_ids', array(), 'pre_get_posts_filter' );
			if( empty( $pages ) )
			{
				return;
			}

			if( ! is_search() )
			{
				$post_type = (array) $query->get( 'post_type' );
				if( empty( $post_type ) )
				{
					return;
				}

				$result = array_intersect( $post_type, array( 'page', 'any' ) );
				if( empty( $result ) )
				{
					return;
				}
			}

			$not_in = (array) $query->get( 'post__not_in', array() );
			$not_in = array_unique( array_merge( $not_in, $pages ), SORT_NUMERIC );
			
			/**
			 * Fixes issue which puts page ID to 'post__not_in' even for query, which has it at 'post__in' (query the page object).
			 * Some plugins (like User Role Editor Pro) respects 'post__not_in' with higher priority than WP_Query does and remove it.
			 * https://kriesi.at/support/topic/user-role-editor-bug/#post-1179446
			 * 
			 * @since 4.7.2.1
			 */
			$in = $query->get( 'post__in' );
			
			foreach( $not_in as $id_not_in ) 
			{
				if ( ! in_array( $id_not_in, $pages ) ) 
				{
					continue;
				}
				
				foreach( $in as $index => $id_in ) 
				{
					if ( $id_not_in == $id_in ) 
					{
						unset( $not_in[ $index ] );
					}
				}
			}			
			
			$query->set( 'post__not_in', $not_in );
		}

		/**
		 * Exclude our special pages from page list
		 * 
		 * @since 4.5.2
		 * @param array $exclude_array
		 * @return array
		 */
		public function handler_wp_list_pages_excludes( array $exclude_array )
		{
			if( is_admin() )
			{
				return $exclude_array;
			}

			/**
			 * @used_by					Avia_Custom_Pages					10
			 * @used_by					config-wpml\config.php				20
			 * @since 4.5.2
			 */
			$pages = apply_filters( 'avf_get_special_pages_ids', array(), 'wp_list_pages_excludes' );
			
			$exclude_array = array_unique( array_merge( $exclude_array, (array)$pages ), SORT_NUMERIC );
			
			return $exclude_array;
		}
		
		/**
		 * 
		 * @since 4.5.2
		 * @param string $query_string
		 * @return string|array
		 */
		public function handler_avf_ajax_search_exclude_pages( $query_string )
		{
			$defaults = array();
			
			$query = wp_parse_args( $query_string, $defaults );
					
			/**
			 * @used_by					Avia_Custom_Pages					10
			 * @used_by					config-wpml\config.php				20
			 * @since 4.5.2
			 */
			$pages = apply_filters( 'avf_get_special_pages_ids', array(), 'avia_ajax_search' );
			if( empty( $pages ) )
			{
				return $query_string;
			}
			
			$not_in = isset( $query['post__not_in'] ) ? (array) $query['post__not_in'] : array();
			$not_in = array_unique( array_merge( $not_in, $pages ), SORT_NUMERIC );

			$query['post__not_in'] = $not_in;
			
			return $query;
		}


		/**
		 * Display a notice that a page is used as a special page (e.g. 404, maintenance, footer) and 
		 * cannot be accessed in frontend by non logged in users
		 * 
		 * @since 4.2.7
		 * @added_by Günter
		 * @param array $params
		 * @return array
		 */
		public function handler_special_page_message( array $params )
		{
			$id = isset( $_REQUEST['post'] ) ? $_REQUEST['post'] : 0;
			
			if( 0 == $id )
			{
				return $params;
			}
			
			$maintenance_page = avia_get_option( 'maintenance_page', 0 );
			$error404_page = avia_get_option( 'error404_page', 0 );
			$footer_page = avia_get_option( 'footer_page', 0 );
			
			$note = '';
			$add_visibility = true;
			
			$link = admin_url( '?page=avia#goto_' );
			$label = __( 'Change', 'avia_framework' );
			$change = " <a target='_blank' href='{$link}avia'><small>({$label})</small></a>";
			$visibiity = __( 'Therefore it cannot be accessed directly by the general public in your frontend. (Logged in users who are able to edit this page can still see it)', 'avia_framework' );
			
			if( $maintenance_page == $id )
			{
				if( true === $this->get_custom_page_object( 'maintenance', '', 'option_set' ) )
				{
					$note .= __( 'This page is currently selected to be displayed as maintenance mode page. (Set in Enfold &raquo; Theme Options).', 'avia_framework' );
				}
				else
				{
					$note .= __( 'This page is selected to be displayed as maintenance mode page but is not active at the moment. (Set in Enfold &raquo; Theme Options).', 'avia_framework' );
					$add_visibility = false;
				}
				
				$note .= $change;
			}
			else if( $error404_page == $id )
			{
				if( true === $this->get_custom_page_object( '404', '', 'option_set' ) )
				{
					$note .= __( 'This page is currently selected to be displayed as custom 404 page. (Set in Enfold &raquo; Theme Options).', 'avia_framework' );
				}
				else
				{
					$note .= __( 'This page is selected to be displayed as custom 404 page but is not active at the moment. (Set in Enfold &raquo; Theme Options).', 'avia_framework' );
					$add_visibility = false;
				}
				
				$note .= $change;
				
			}
			else if( $footer_page == $id )
			{
				if( true === $this->get_custom_page_object( 'footer_page', '', 'option_set' ) )
				{
					$note .= __( 'This page is currently selected to be displayed as footer. (Set in Enfold &raquo; Footer).', 'avia_framework' );
				}
				else
				{
					$note .= __( 'This page is selected to be displayed as footer but is not active at the moment. (Set in Enfold &raquo; Footer).', 'avia_framework' );
					$add_visibility = false;
				}
				
				$note .= " <a target='_blank' href='{$link}footer'><small>({$label})</small></a>";
			}
			else
			{
				return $params;
			}

			if( $add_visibility )
			{
				$note .= ' ' . $visibiity;
			}
			
			if( ! empty( $params['note'] ) )
			{
				$note = $params['note'] . '<br /><br />' . $note;
			}

			$params['note'] = $note;
			$params['noteclass'] = '';

			return $params;
		}


		/**
		 * Post state filter
		 * On the Page Overview screen in the backend ( wp-admin/edit.php?post_type=page ) this functions appends a descriptive post state to a page for easier recognition
		 * 
		 * @since 4.3 / 4.5.2
		 * @author Kriesi / Günter
		 * @param array $post_states
		 * @param WP_Post $post
		 * @return array
		 */
		public function handler_display_post_state( $post_states, $post )
		{
			$link = admin_url( '?page=avia#goto_' );
			$label = __( 'Change', 'avia_framework' );
			$change = " <a href='{$link}avia'><small>({$label})</small></a>";

			// Maintenance Page
			if( avia_get_option( 'maintenance_page', 0 ) == $post->ID ) 
			{
				$info = ( true === $this->get_custom_page_object( 'maintenance', '', 'option_set' ) ) ? __( 'Active Maintenance Mode Page', 'avia_framework' ) : __( 'Inactive Maintenance Mode Page', 'avia_framework' );
				$post_states['av_maintain'] = $info . $change;
			}

			// 404 Page
			if ( avia_get_option( 'error404_page', 0 ) == $post->ID ) 
			{
				$info = ( true === $this->get_custom_page_object( '404', '', 'option_set' ) ) ? __( 'Active Custom 404 Page', 'avia_framework' ) : __( 'Inactive Custom 404 Page', 'avia_framework' );
				$post_states['av_404'] = $info . $change;
			}

			// Footer Page
			if ( avia_get_option( 'footer_page', 0 ) == $post->ID ) 
			{
				$info = ( true === $this->get_custom_page_object( 'footer_page', '', 'option_set' ) ) ? __( 'Active Custom Footer Page', 'avia_framework' ) : __( 'Inactive Custom Footer Page', 'avia_framework' );
				$post_states['av_footer'] = $info . " <a href='{$link}footer'><small>({$label})</small></a>";
			}

			return $post_states;
		}
		
		/**
		 * Query the requested page, replace $wp_query and save in $avia_config['modified_main_query']
		 * Does not check, if page exists.
		 * 
		 * @since 4.5.2
		 * @param int $page_id
		 * @param string $context				'404' | 'maintenance' | ''
		 * @return string
		 */
		protected function modify_page_query( $page_id, $context )
		{
			global $wp_query, $avia_config;
			
			/**
			 * Modify existing query to custom 404 page
			 */
			$wp_query = null;
			$wp_query = new WP_Query();
			$wp_query->query( 'page_id=' . $page_id );
			$wp_query->the_post();
			$wp_query->rewind_posts();

			/**
			 * Save query to be able to be restored later - needed e.g. when WPML is active to restore query
			 */
			$avia_config['modified_main_query'] = $wp_query;
//			$avia_config['builder_redirect_id'] = $page_id;
			
			return get_page_template();
		}
		
		/**
		 * Query the page - this allows translation pluginsto hook into and return a translated page
		 * 
		 * @since 4.5.4
		 * @param mixed $page_id
		 * @param string $context			'404' | 'maintenance' | ''
		 * @return WP_Post|false
		 */
		protected function query_page( $page_id = null, $context = '' )
		{
			if( empty( $page_id ) || ! is_numeric( $page_id ) )
			{
				return false;
			}

			$args = array(
							'include'	=> array( $page_id ),
							'post_type' => 'page',
						);
			$posts = get_posts( $args );
			$post = count( $posts ) > 0 ? $posts[0] : false;
			
			/**
			 * Filter result
			 * 
			 * @used_by			currently unused
			 * @since 4.5.4
			 * @return WP_Post|false
			 */
			return apply_filters( 'avf_custom_pages_query_page', $post, $page_id, $context );
		}
	}
	
	/**
	 * Returns the main instance of Avia_Custom_Pages to prevent the need to use globals
	 * 
	 * @since 4.5.2
	 * @return Avia_Custom_Pages
	 */
	function AviaCustomPages() 
	{
		return Avia_Custom_Pages::instance();
	}
}

AviaCustomPages();


		
/**
 * Kept in case we need a fallback - can be removed in future versions
 * removed < 4.5 ??
 * ===================================================================
 */
//        if (avia_get_option('maintenance_mode') == "maintenance_mode") {
//            global $wp_query;
//            $maintenance_page = avia_get_option('maintenance_page');
//            
//            // check if maintenance page is defined
//            if ($maintenance_page) {
//                $maintenance_url = get_permalink($maintenance_page);
//                $current_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
//                // make sure site is accessible for logged in users, and the login page is not redirected
//                if ( ($GLOBALS['pagenow'] !== 'wp-login.php') && !current_user_can('edit_published_posts')) {
//                    // avoid infinite loop by making sure that maintenance page is NOT curently viewed
//                    if ($maintenance_url !== $current_url) {
//
//                        // do a simple redirect if WPML or Yoast is active
//                        $use_wp_redirect = false;
//
//                        if( defined('ICL_SITEPRESS_VERSION') && defined('ICL_LANGUAGE_CODE')) {
//                            $use_wp_redirect = true;
//                        }
//
//                        if( (defined('ICL_SITEPRESS_VERSION') && defined('ICL_LANGUAGE_CODE')) || defined('WPSEO_VERSION')) {
//                            $use_wp_redirect = true;
//                        }
//
//                        if( $use_wp_redirect ) {
//                            if (wp_redirect($maintenance_url)) {
//                                exit();
//                            }
//                        }
//                        else {
//                            // hook into the query
//                            $wp_query = null;
//                            $wp_query = new WP_Query();
//                            $wp_query->query('page_id=' . $maintenance_page);
//                            $wp_query->the_post();
//                            $template = get_page_template();
//                            rewind_posts();
//                            status_header(503);
//                            return $template;
//                        }
//                    }
//                }
//            }
//        }
//    }