1961 lines
		
	
	
		
			64 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			1961 lines
		
	
	
		
			64 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
// Prevent file from being loaded directly
 | 
						|
if ( ! defined( 'ABSPATH' ) ) {
 | 
						|
	die( '-1' );
 | 
						|
}
 | 
						|
 | 
						|
add_theme_support( 'custom-background', apply_filters( 'et_custom_background_args', array() ) );
 | 
						|
 | 
						|
if ( function_exists( 'add_post_type_support' ) ) {
 | 
						|
	add_post_type_support( 'page', 'excerpt' );
 | 
						|
}
 | 
						|
 | 
						|
add_theme_support( 'automatic-feed-links' );
 | 
						|
 | 
						|
add_action( 'init', 'et_activate_features' );
 | 
						|
 | 
						|
function et_activate_features() {
 | 
						|
	if ( ! defined( 'ET_SHORTCODES_VERSION' ) ) {
 | 
						|
		define( 'ET_SHORTCODES_VERSION', et_get_theme_version() );
 | 
						|
	}
 | 
						|
 | 
						|
	if ( ! defined( 'ET_SHORTCODES_DIR' ) ) {
 | 
						|
		define( 'ET_SHORTCODES_DIR', get_template_directory_uri() . '/epanel/shortcodes' );
 | 
						|
	}
 | 
						|
 | 
						|
	/* activate shortcodes */
 | 
						|
	require_once TEMPLATEPATH . '/epanel/shortcodes/shortcodes.php';
 | 
						|
 | 
						|
	/* activate page templates */
 | 
						|
	require_once TEMPLATEPATH . '/includes/page_templates/page_templates.php';
 | 
						|
 | 
						|
	/* import epanel settings */
 | 
						|
	require_once TEMPLATEPATH . '/includes/import_settings.php';
 | 
						|
}
 | 
						|
 | 
						|
add_filter( 'widget_text', 'do_shortcode' );
 | 
						|
add_filter( 'the_excerpt', 'do_shortcode' );
 | 
						|
 | 
						|
if ( ! function_exists( 'et_get_theme_version' ) ) :
 | 
						|
function et_get_theme_version() {
 | 
						|
	$theme_info = wp_get_theme();
 | 
						|
 | 
						|
	if ( is_child_theme() ) {
 | 
						|
		$theme_info = wp_get_theme( $theme_info->parent_theme );
 | 
						|
	}
 | 
						|
 | 
						|
	$theme_version = $theme_info->display( 'Version' );
 | 
						|
 | 
						|
	return $theme_version;
 | 
						|
}
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_options_stored_in_one_row' ) ) {
 | 
						|
 | 
						|
	function et_options_stored_in_one_row(){
 | 
						|
		global $et_store_options_in_one_row;
 | 
						|
 | 
						|
		return isset( $et_store_options_in_one_row ) ? (bool) $et_store_options_in_one_row : false;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/* sync custom CSS from ePanel with WP custom CSS option introduced in WP 4.7 */
 | 
						|
if ( ! function_exists( 'et_sync_custom_css_options' ) ) {
 | 
						|
	function et_sync_custom_css_options() {
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		$legacy_custom_css = wp_unslash( et_get_option( "{$shortname}_custom_css" ) );
 | 
						|
 | 
						|
		// nothing to sync if no custom css saved in ePanel
 | 
						|
		if ( '' === $legacy_custom_css || ! $legacy_custom_css || empty( $legacy_custom_css ) ) {
 | 
						|
			set_theme_mod( 'et_pb_css_synced', 'yes' );
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		// don't proceed with the sync logic if the custom CSS option does not exist
 | 
						|
		if ( ! function_exists( 'wp_get_custom_css' ) ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$css_synced = get_theme_mod( 'et_pb_css_synced', 'no' );
 | 
						|
 | 
						|
		// get custom css string from WP customizer
 | 
						|
		$wp_custom_css = wp_get_custom_css();
 | 
						|
 | 
						|
		// force sync if the current custom CSS is empty
 | 
						|
		if ( 'yes' === $css_synced && '' !== $wp_custom_css ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		// ePanel is completely synced with Customizer
 | 
						|
		if ( $wp_custom_css === $legacy_custom_css || false !== strpos( $wp_custom_css, $legacy_custom_css ) ) {
 | 
						|
			set_theme_mod( 'et_pb_css_synced', 'yes' );
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		// merge custom css from WP customizer with ePanel custom css
 | 
						|
		$updated_custom_css = $legacy_custom_css . ' ' . $wp_custom_css;
 | 
						|
 | 
						|
		$updated_status = wp_update_custom_css_post( $updated_custom_css );
 | 
						|
 | 
						|
		// set theme mod in case of success
 | 
						|
		if ( is_object( $updated_status ) && ! empty( $updated_status ) ) {
 | 
						|
			set_theme_mod( 'et_pb_css_synced', 'yes' );
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
add_action( 'init', 'et_sync_custom_css_options' );
 | 
						|
 | 
						|
/**
 | 
						|
 * sync custom CSS from WP custom CSS option introduced in WP 4.7 with theme options for backward compatibility
 | 
						|
 * it should be removed after a few WP major updates when we fully migrate to WP custom CSS system
 | 
						|
 */
 | 
						|
if ( ! function_exists( 'et_back_sync_custom_css_options' ) ) {
 | 
						|
	function et_back_sync_custom_css_options( $data ) {
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		if ( ! empty( $data ) && isset( $data['css'] ) ) {
 | 
						|
			et_update_option( "{$shortname}_custom_css", $data['css'] );
 | 
						|
		}
 | 
						|
 | 
						|
		return $data;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_filter( 'update_custom_css_data', 'et_back_sync_custom_css_options' );
 | 
						|
 | 
						|
if ( ! function_exists( 'et_update_custom_css_data_cb' ) ):
 | 
						|
function et_update_custom_css_data_cb( $data ) {
 | 
						|
 | 
						|
	ET_Core_PageResource::remove_static_resources( 'all', 'all' );
 | 
						|
 | 
						|
	return $data;
 | 
						|
}
 | 
						|
add_filter( 'update_custom_css_data', 'et_update_custom_css_data_cb' );
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_epanel_handle_custom_css_output' ) ):
 | 
						|
function et_epanel_handle_custom_css_output( $css, $stylesheet ) {
 | 
						|
	global $wp_current_filter, $shortname;
 | 
						|
 | 
						|
	/** @see ET_Core_SupportCenter::toggle_safe_mode */
 | 
						|
	if ( et_core_is_safe_mode_active() ) {
 | 
						|
		return $css;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( ! $css || ! in_array( 'wp_head', $wp_current_filter ) || is_admin() && ! is_customize_preview() ) {
 | 
						|
		return $css;
 | 
						|
	}
 | 
						|
 | 
						|
	$post_id        = et_core_page_resource_get_the_ID();
 | 
						|
	$is_preview     = is_preview() || isset( $_GET['et_pb_preview_nonce'] ) || is_customize_preview(); // phpcs:ignore WordPress.Security.NonceVerification.NoNonceVerification
 | 
						|
	$is_singular    = et_core_page_resource_is_singular();
 | 
						|
 | 
						|
	$disabled_global = 'off' === et_get_option( 'et_pb_static_css_file', 'on' );
 | 
						|
	$disabled_post   = $disabled_global || ( $is_singular && 'off' === get_post_meta( $post_id, '_et_pb_static_css_file', true ) );
 | 
						|
 | 
						|
	$forced_inline     = $is_preview || $disabled_global || $disabled_post || post_password_required();
 | 
						|
	$builder_in_footer = 'on' === et_get_option( 'et_pb_css_in_footer', 'off' );
 | 
						|
 | 
						|
	$unified_styles = $is_singular && ! $forced_inline && ! $builder_in_footer && et_core_is_builder_used_on_current_request();
 | 
						|
	$resource_owner = $unified_styles ? 'core' : $shortname;
 | 
						|
	$resource_slug  = $unified_styles ? 'unified' : 'customizer';
 | 
						|
 | 
						|
	if ( $is_preview ) {
 | 
						|
		// Don't let previews cause existing saved static css files to be modified.
 | 
						|
		$resource_slug .= '-preview';
 | 
						|
	}
 | 
						|
 | 
						|
	if ( function_exists( 'et_fb_is_enabled' ) && et_fb_is_enabled() ) {
 | 
						|
		$resource_slug .= '-vb';
 | 
						|
	}
 | 
						|
 | 
						|
	if ( ! $unified_styles ) {
 | 
						|
		$post_id = 'global';
 | 
						|
	}
 | 
						|
 | 
						|
	$styles_manager = et_core_page_resource_get( $resource_owner, $resource_slug, $post_id, 30 );
 | 
						|
 | 
						|
	if ( $styles_manager->forced_inline || ! $styles_manager->has_file() ) {
 | 
						|
		$styles_manager->set_data( $css, 30 );
 | 
						|
	}
 | 
						|
 | 
						|
	return ''; // We're handling the custom CSS output ourselves.
 | 
						|
}
 | 
						|
add_filter( 'wp_get_custom_css', 'et_epanel_handle_custom_css_output', 999, 2 );
 | 
						|
endif;
 | 
						|
 | 
						|
/**
 | 
						|
 * Gets option value from the single theme option, stored as an array in the database
 | 
						|
 * if all options stored in one row.
 | 
						|
 * Stores the serialized array with theme options into the global variable on the first function run on the page.
 | 
						|
 *
 | 
						|
 * If options are stored as separate rows in database, it simply uses get_option() function.
 | 
						|
 *
 | 
						|
 * @param string $option_name Theme option name.
 | 
						|
 * @param string $default_value Default value that should be set if the theme option isn't set.
 | 
						|
 * @param string $used_for_object "Object" name that should be translated into corresponding "object" if WPML is activated.
 | 
						|
 * @return mixed Theme option value or false if not found.
 | 
						|
 */
 | 
						|
if ( ! function_exists( 'et_get_option' ) ) {
 | 
						|
 | 
						|
	function et_get_option( $option_name, $default_value = '', $used_for_object = '', $force_default_value = false, $is_global_setting = false, $global_setting_main_name = '', $global_setting_sub_name = '' ){
 | 
						|
		global $et_theme_options, $shortname;
 | 
						|
 | 
						|
		$et_one_row_option_name = '';
 | 
						|
 | 
						|
		if ( $is_global_setting ) {
 | 
						|
			$option_value = '';
 | 
						|
 | 
						|
			$et_global_setting = get_option( $global_setting_main_name );
 | 
						|
 | 
						|
			if ( false !== $et_global_setting && isset( $et_global_setting[ $global_setting_sub_name ] ) ) {
 | 
						|
				$option_value = $et_global_setting[ $global_setting_sub_name ];
 | 
						|
			}
 | 
						|
		} else if ( et_options_stored_in_one_row() ) {
 | 
						|
			$et_theme_options_name = 'et_' . $shortname;
 | 
						|
 | 
						|
			if ( ! isset( $et_theme_options ) || is_customize_preview() ) {
 | 
						|
				$et_theme_options = get_option( $et_theme_options_name );
 | 
						|
			}
 | 
						|
			$option_value = isset( $et_theme_options[$option_name] ) ? $et_theme_options[$option_name] : false;
 | 
						|
 | 
						|
			$et_one_row_option_name = $et_theme_options_name . '_' . $option_name;
 | 
						|
		} else {
 | 
						|
			$option_value = $force_default_value ? get_option( $option_name, $default_value ) : get_option( $option_name );
 | 
						|
		}
 | 
						|
 | 
						|
		// option value might be equal to false, so check if the option is not set in the database
 | 
						|
		if ( et_options_stored_in_one_row() && ! isset( $et_theme_options[ $option_name ] ) && ( ! empty( $default_value ) || $force_default_value ) ) {
 | 
						|
			$option_value = $default_value;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( ! empty( $used_for_object ) && in_array( $used_for_object, array( 'page', 'category' ) ) && is_array( $option_value ) )
 | 
						|
			$option_value = et_generate_wpml_ids( $option_value, $used_for_object );
 | 
						|
 | 
						|
		if ( ! empty( $et_one_row_option_name ) ) {
 | 
						|
			$option_value = apply_filters( 'et_get_option_' . $et_one_row_option_name, $option_value, $et_one_row_option_name );
 | 
						|
		}
 | 
						|
 | 
						|
		return $option_value;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_update_option' ) ) {
 | 
						|
 | 
						|
	function et_update_option( $option_name, $new_value, $is_new_global_setting = false, $global_setting_main_name = '', $global_setting_sub_name = '' ){
 | 
						|
		global $et_theme_options, $shortname;
 | 
						|
 | 
						|
		if ( $is_new_global_setting && '' !== $global_setting_main_name && '' !== $global_setting_sub_name ) {
 | 
						|
			$global_setting = get_option( $global_setting_main_name, array() );
 | 
						|
 | 
						|
			// $global_setting has to be array otherwise setting can't be saved so it needs
 | 
						|
			// to be treated as empty array
 | 
						|
			if ( ! is_array( $global_setting ) ) {
 | 
						|
				$global_setting = array();
 | 
						|
			}
 | 
						|
 | 
						|
			$global_setting[ $global_setting_sub_name ] = $new_value;
 | 
						|
 | 
						|
			update_option( $global_setting_main_name, $global_setting );
 | 
						|
 | 
						|
		} else if ( et_options_stored_in_one_row() ) {
 | 
						|
			$et_theme_options_name = 'et_' . $shortname;
 | 
						|
 | 
						|
			if ( ! isset( $et_theme_options ) || is_customize_preview() ) {
 | 
						|
				$et_theme_options = get_option( $et_theme_options_name );
 | 
						|
			}
 | 
						|
			$et_theme_options[$option_name] = $new_value;
 | 
						|
 | 
						|
			update_option( $et_theme_options_name, $et_theme_options );
 | 
						|
 | 
						|
		} else {
 | 
						|
			update_option( $option_name, $new_value );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_delete_option' ) ) {
 | 
						|
 | 
						|
	function et_delete_option( $option_name ){
 | 
						|
		global $et_theme_options, $shortname;
 | 
						|
 | 
						|
		if ( et_options_stored_in_one_row() ) {
 | 
						|
			$et_theme_options_name = 'et_' . $shortname;
 | 
						|
 | 
						|
			if ( ! isset( $et_theme_options ) ) $et_theme_options = get_option( $et_theme_options_name );
 | 
						|
 | 
						|
			unset( $et_theme_options[$option_name] );
 | 
						|
			update_option( $et_theme_options_name, $et_theme_options );
 | 
						|
		} else {
 | 
						|
			delete_option( $option_name );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function allows for the auto-creation of post excerpts*/
 | 
						|
if ( ! function_exists( 'truncate_post' ) ) {
 | 
						|
	/**
 | 
						|
	 * Truncate post content to generate post excerpt.
 | 
						|
	 *
 | 
						|
	 * @since ?? Add new paramter $is_words_length to cut the text based on words length.
 | 
						|
	 *
 | 
						|
	 * @param integer $amount           Amount of text that should be kept.
 | 
						|
	 * @param boolean $echo             Whether to print the output or not.
 | 
						|
	 * @param object  $post             Post object.
 | 
						|
	 * @param boolean $strip_shortcodes Whether to strip the shortcodes or not.
 | 
						|
	 * @param boolean $is_words_length  Whether to cut the text based on words length or not.
 | 
						|
	 *
 | 
						|
	 * @return string Generated post post excerpt.
 | 
						|
	 */
 | 
						|
	function truncate_post( $amount, $echo = true, $post = '', $strip_shortcodes = false, $is_words_length = false ) {
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		if ( empty( $post ) ) global $post;
 | 
						|
 | 
						|
		if ( post_password_required( $post ) ) {
 | 
						|
			$post_excerpt = get_the_password_form();
 | 
						|
 | 
						|
			if ( $echo ) {
 | 
						|
				echo et_core_intentionally_unescaped( $post_excerpt, 'html' );
 | 
						|
				return;
 | 
						|
			}
 | 
						|
 | 
						|
			return $post_excerpt;
 | 
						|
		}
 | 
						|
 | 
						|
		$post_excerpt = apply_filters( 'the_excerpt', $post->post_excerpt );
 | 
						|
 | 
						|
		if ( 'on' === et_get_option( $shortname . '_use_excerpt' ) && ! empty( $post_excerpt ) ) {
 | 
						|
			if ( $echo ) {
 | 
						|
				echo et_core_intentionally_unescaped( $post_excerpt, 'html' );
 | 
						|
			} else {
 | 
						|
				return $post_excerpt;
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			// get the post content
 | 
						|
			$truncate = $post->post_content;
 | 
						|
 | 
						|
			// remove caption shortcode from the post content
 | 
						|
			$truncate = preg_replace( '@\[caption[^\]]*?\].*?\[\/caption]@si', '', $truncate );
 | 
						|
 | 
						|
			// remove post nav shortcode from the post content
 | 
						|
			$truncate = preg_replace( '@\[et_pb_post_nav[^\]]*?\].*?\[\/et_pb_post_nav]@si', '', $truncate );
 | 
						|
 | 
						|
			// Remove audio shortcode from post content to prevent unwanted audio file on the excerpt
 | 
						|
			// due to unparsed audio shortcode
 | 
						|
			$truncate = preg_replace( '@\[audio[^\]]*?\].*?\[\/audio]@si', '', $truncate );
 | 
						|
 | 
						|
			// Remove embed shortcode from post content
 | 
						|
			$truncate = preg_replace( '@\[embed[^\]]*?\].*?\[\/embed]@si', '', $truncate );
 | 
						|
 | 
						|
			// Remove script and style tags from the post content
 | 
						|
			$truncate = wp_strip_all_tags( $truncate );
 | 
						|
 | 
						|
			if ( $strip_shortcodes ) {
 | 
						|
				$truncate = et_strip_shortcodes( $truncate );
 | 
						|
				$truncate = et_builder_strip_dynamic_content( $truncate );
 | 
						|
			} else {
 | 
						|
				// Check if content should be overridden with a custom value.
 | 
						|
				$custom = apply_filters( 'et_truncate_post_use_custom_content', false, $truncate, $post );
 | 
						|
				// apply content filters
 | 
						|
				$truncate = false === $custom ? apply_filters( 'the_content', $truncate ) : $custom;
 | 
						|
			}
 | 
						|
 | 
						|
			/**
 | 
						|
			 * Filter automatically generated post excerpt before it gets truncated.
 | 
						|
			 *
 | 
						|
			 * @since 3.17.2
 | 
						|
			 *
 | 
						|
			 * @param string $excerpt
 | 
						|
			 * @param integer $post_id
 | 
						|
			 */
 | 
						|
			$truncate = apply_filters( 'et_truncate_post', $truncate, $post->ID );
 | 
						|
 | 
						|
			// decide if we need to append dots at the end of the string
 | 
						|
			if ( strlen( $truncate ) <= $amount ) {
 | 
						|
				$echo_out = '';
 | 
						|
			} else {
 | 
						|
				$echo_out = '...';
 | 
						|
				// $amount = $amount - 3;
 | 
						|
			}
 | 
						|
 | 
						|
			$trim_words = '';
 | 
						|
 | 
						|
			if ( $is_words_length ) {
 | 
						|
				// Reset `$echo_out` text because it will be added by wp_trim_words() with
 | 
						|
				// default WordPress `excerpt_more` text.
 | 
						|
				$echo_out     = '';
 | 
						|
				$excerpt_more = apply_filters( 'excerpt_more', ' […]' );
 | 
						|
				$trim_words   = wp_trim_words( $truncate, $amount, $excerpt_more );
 | 
						|
			} else {
 | 
						|
				$trim_words = et_wp_trim_words( $truncate, $amount, '' );
 | 
						|
			}
 | 
						|
 | 
						|
			// trim text to a certain number of characters, also remove spaces from the end of a string ( space counts as a character ).
 | 
						|
			$truncate = rtrim( $trim_words );
 | 
						|
 | 
						|
			// remove the last word to make sure we display all words correctly
 | 
						|
			if ( ! empty( $echo_out ) ) {
 | 
						|
				$new_words_array = (array) explode( ' ', $truncate );
 | 
						|
				// Remove last word if word count is more than 1.
 | 
						|
				if ( count( $new_words_array ) > 1 ) {
 | 
						|
					array_pop( $new_words_array );
 | 
						|
				}
 | 
						|
 | 
						|
				$truncate = implode( ' ', $new_words_array );
 | 
						|
 | 
						|
				// Dots should not add to empty string
 | 
						|
				if ( '' !== $truncate ) {
 | 
						|
					// append dots to the end of the string
 | 
						|
					$truncate .= $echo_out;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if ( $echo ) {
 | 
						|
				echo et_core_intentionally_unescaped( $truncate, 'html' );
 | 
						|
			} else {
 | 
						|
				return $truncate;
 | 
						|
			}
 | 
						|
		};
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_wp_trim_words' ) ) {
 | 
						|
 | 
						|
	function et_wp_trim_words( $text, $num_words = 55, $more = null ) {
 | 
						|
		if ( null === $more )
 | 
						|
			$more = esc_html__( '…' );
 | 
						|
		// Completely remove icons so that unicode hex entities representing the icons do not get included in words.
 | 
						|
		$text = preg_replace( '/<span class="et-pb-icon .*<\/span>/', '', $text );
 | 
						|
		$text = wp_strip_all_tags( $text );
 | 
						|
 | 
						|
		$text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
 | 
						|
		preg_match_all( '/./u', $text, $words_array );
 | 
						|
		$words_array = array_slice( $words_array[0], 0, $num_words + 1 );
 | 
						|
		$sep = '';
 | 
						|
 | 
						|
		if ( count( $words_array ) > $num_words ) {
 | 
						|
			array_pop( $words_array );
 | 
						|
			$text = implode( $sep, $words_array );
 | 
						|
			$text = $text . $more;
 | 
						|
		} else {
 | 
						|
			$text = implode( $sep, $words_array );
 | 
						|
		}
 | 
						|
 | 
						|
		return $text;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function truncates titles to create preview excerpts*/
 | 
						|
if ( ! function_exists( 'truncate_title' ) ) {
 | 
						|
 | 
						|
	function truncate_title( $amount, $echo = true, $post = '' ) {
 | 
						|
		if ( empty( $post ) ) $truncate = get_the_title();
 | 
						|
		else $truncate = $post->post_title;
 | 
						|
 | 
						|
		if ( strlen( $truncate ) <= $amount ) $echo_out = '';
 | 
						|
		else $echo_out = '...';
 | 
						|
 | 
						|
		$truncate = et_wp_trim_words( $truncate, $amount, '' );
 | 
						|
 | 
						|
		if ( ! empty( $echo_out ) ) $truncate .= $echo_out;
 | 
						|
 | 
						|
		if ( $echo )
 | 
						|
			echo et_core_intentionally_unescaped( $truncate, 'html' );
 | 
						|
		else
 | 
						|
			return $truncate;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*this function allows users to use the first image in their post as their thumbnail*/
 | 
						|
if ( ! function_exists( 'et_first_image' ) ) {
 | 
						|
 | 
						|
	function et_first_image() {
 | 
						|
		global $post;
 | 
						|
		$img = '';
 | 
						|
 | 
						|
		if ( empty( $post->ID ) ) {
 | 
						|
			return $img;
 | 
						|
		}
 | 
						|
 | 
						|
		$unprocessed_content = $post->post_content;
 | 
						|
 | 
						|
		// truncate Post based shortcodes if Divi Builder enabled to avoid infinite loops
 | 
						|
		if ( function_exists( 'et_strip_shortcodes' ) ) {
 | 
						|
			$unprocessed_content = et_strip_shortcodes( $post->post_content, true );
 | 
						|
		}
 | 
						|
 | 
						|
		// Check if content should be overridden with a custom value.
 | 
						|
		$custom = apply_filters( 'et_first_image_use_custom_content', false, $unprocessed_content, $post );
 | 
						|
		// apply the_content filter to execute all shortcodes and get the correct image from the processed content
 | 
						|
		$processed_content = false === $custom ? apply_filters( 'the_content', $unprocessed_content ) : $custom;
 | 
						|
 | 
						|
		$output = preg_match_all( '/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $processed_content, $matches );
 | 
						|
		if ( isset( $matches[1][0] ) ) $img = $matches[1][0];
 | 
						|
 | 
						|
		return trim( $img );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/* this function gets thumbnail from Post Thumbnail or Custom field or First post image */
 | 
						|
if ( ! function_exists( 'get_thumbnail' ) ) {
 | 
						|
 | 
						|
	function get_thumbnail($width=100, $height=100, $class='', $alttext='', $titletext='', $fullpath=false, $custom_field='', $post='') {
 | 
						|
		if ( empty( $post ) ) global $post;
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		$thumb_array['thumb'] = '';
 | 
						|
		$thumb_array['use_timthumb'] = true;
 | 
						|
		if ($fullpath) $thumb_array['fullpath'] = ''; //full image url for lightbox
 | 
						|
 | 
						|
		$new_method = true;
 | 
						|
 | 
						|
		if ( has_post_thumbnail( $post->ID ) || 'attachment' === $post->post_type ) {
 | 
						|
			$thumb_array['use_timthumb'] = false;
 | 
						|
 | 
						|
			$et_fullpath = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
 | 
						|
 | 
						|
			if ( is_array( $et_fullpath ) ) {
 | 
						|
				$thumb_array['fullpath'] = $et_fullpath[0];
 | 
						|
				$thumb_array['thumb'] = $thumb_array['fullpath'];
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( empty( $thumb_array['thumb'] ) ) {
 | 
						|
			if ( empty( $custom_field ) ) $thumb_array['thumb'] = esc_attr( get_post_meta( $post->ID, 'Thumbnail', $single = true ) );
 | 
						|
			else {
 | 
						|
				$thumb_array['thumb'] = esc_attr( get_post_meta( $post->ID, $custom_field, $single = true ) );
 | 
						|
				if ( empty( $thumb_array['thumb'] ) ) $thumb_array['thumb'] = esc_attr( get_post_meta( $post->ID, 'Thumbnail', $single = true ) );
 | 
						|
			}
 | 
						|
 | 
						|
			if ( '' === $thumb_array['thumb'] && et_grab_image_setting() ) {
 | 
						|
				$thumb_array['thumb'] = esc_attr( et_first_image() );
 | 
						|
				if ( $fullpath ) $thumb_array['fullpath'] = $thumb_array['thumb'];
 | 
						|
			}
 | 
						|
 | 
						|
			#if custom field used for small pre-cropped image, open Thumbnail custom field image in lightbox
 | 
						|
			if ($fullpath) {
 | 
						|
				$thumb_array['fullpath'] = $thumb_array['thumb'];
 | 
						|
				if ( empty( $custom_field ) ) $thumb_array['fullpath'] = apply_filters( 'et_fullpath', et_path_reltoabs( esc_attr( $thumb_array['thumb'] ) ) );
 | 
						|
				elseif ( ! empty( $custom_field ) && get_post_meta( $post->ID, 'Thumbnail', $single = true ) ) $thumb_array['fullpath'] = apply_filters( 'et_fullpath', et_path_reltoabs( esc_attr( get_post_meta( $post->ID, 'Thumbnail', $single = true ) ) ) );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return $thumb_array;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_grab_image_setting' ) ) :
 | 
						|
/**
 | 
						|
 * Filterable "Grab the first post image" setting.
 | 
						|
 * "Grab the first post image" needs to be filterable so it can be disabled forcefully.
 | 
						|
 * It uses et_first_image() which uses apply_filters( 'the_content' ) which could cause
 | 
						|
 * a conflict with third party plugin which extensively uses 'the_content' filter (ie. BuddyPress)
 | 
						|
 * @return bool
 | 
						|
 */
 | 
						|
function et_grab_image_setting() {
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	// Force disable "Grab the first post image" in BuddyPress component page
 | 
						|
	$is_buddypress_component = function_exists( 'bp_current_component' ) && bp_current_component();
 | 
						|
 | 
						|
	$setting = 'on' === et_get_option( "{$shortname}_grab_image" ) && ! $is_buddypress_component;
 | 
						|
 | 
						|
	return apply_filters( 'et_grab_image_setting', $setting );
 | 
						|
}
 | 
						|
endif;
 | 
						|
 | 
						|
/* this function prints thumbnail from Post Thumbnail or Custom field or First post image */
 | 
						|
if ( ! function_exists( 'print_thumbnail' ) ) {
 | 
						|
 | 
						|
	function print_thumbnail($thumbnail = '', $use_timthumb = true, $alttext = '', $width = 100, $height = 100, $class = '', $echoout = true, $forstyle = false, $resize = true, $post='', $et_post_id = '' ) {
 | 
						|
		if ( is_array( $thumbnail ) ) {
 | 
						|
			extract( $thumbnail );
 | 
						|
		}
 | 
						|
 | 
						|
		if ( empty( $post ) ) global $post, $et_theme_image_sizes;
 | 
						|
 | 
						|
		$output         = '';
 | 
						|
		$raw            = false;
 | 
						|
		$thumbnail_orig = $thumbnail;
 | 
						|
 | 
						|
		$et_post_id = ! empty( $et_post_id ) ? (int) $et_post_id : $post->ID;
 | 
						|
 | 
						|
		if ( has_post_thumbnail( $et_post_id ) ) {
 | 
						|
			$thumb_array['use_timthumb'] = false;
 | 
						|
 | 
						|
			$image_size_name = $width . 'x' . $height;
 | 
						|
			$et_size = isset( $et_theme_image_sizes ) && array_key_exists( $image_size_name, $et_theme_image_sizes ) ? $et_theme_image_sizes[$image_size_name] : array( $width, $height );
 | 
						|
 | 
						|
			$et_attachment_image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $et_post_id ), $et_size );
 | 
						|
			$thumbnail = $et_attachment_image_attributes[0];
 | 
						|
		} else {
 | 
						|
			$thumbnail = et_multisite_thumbnail( $thumbnail );
 | 
						|
 | 
						|
			$cropPosition = '';
 | 
						|
 | 
						|
			$allow_new_thumb_method = false;
 | 
						|
 | 
						|
			$new_method = true;
 | 
						|
			$new_method_thumb = '';
 | 
						|
			$external_source = false;
 | 
						|
 | 
						|
			$allow_new_thumb_method = !$external_source && $new_method && empty( $cropPosition );
 | 
						|
 | 
						|
			if ( $allow_new_thumb_method && !empty( $thumbnail ) ) {
 | 
						|
				if ( 'data:image' === substr( $thumbnail, 0, 10 ) ) {
 | 
						|
					$new_method_thumb = $thumbnail;
 | 
						|
					$raw              = true;
 | 
						|
				} else {
 | 
						|
					$et_crop          = get_post_meta( $post->ID, 'et_nocrop', true );
 | 
						|
					$et_crop          = empty( $et_crop ) ? true : false;
 | 
						|
					$new_method_thumb = et_resize_image( et_path_reltoabs( $thumbnail ), $width, $height, $et_crop );
 | 
						|
					if ( is_wp_error( $new_method_thumb ) ) {
 | 
						|
						$new_method_thumb = '';
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			$thumbnail = $new_method_thumb;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( false === $forstyle && $resize ) {
 | 
						|
			if ( $width < 480 && et_is_responsive_images_enabled() && ! $raw ) {
 | 
						|
				$output = sprintf(
 | 
						|
					'<img src="%1$s" alt="%2$s" class="%3$s" srcset="%4$s " sizes="%5$s " %6$s />',
 | 
						|
					esc_url( $thumbnail ),
 | 
						|
					esc_attr( wp_strip_all_tags( $alttext ) ),
 | 
						|
					empty( $class ) ? '' : esc_attr( $class ),
 | 
						|
					$thumbnail_orig . ' 479w, ' . $thumbnail . ' 480w',
 | 
						|
					'(max-width:479px) 479px, 100vw',
 | 
						|
					apply_filters( 'et_print_thumbnail_dimensions', ' width="' . esc_attr( $width ) . '" height="' . esc_attr( $height ) . '"' )
 | 
						|
				);
 | 
						|
			} else {
 | 
						|
				$output = sprintf(
 | 
						|
					'<img src="%1$s" alt="%2$s" class="%3$s"%4$s />',
 | 
						|
					$raw ? $thumbnail : esc_url( $thumbnail ),
 | 
						|
					esc_attr( wp_strip_all_tags( $alttext ) ),
 | 
						|
					empty( $class ) ? '' : esc_attr( $class ),
 | 
						|
					apply_filters( 'et_print_thumbnail_dimensions', ' width="' . esc_attr( $width ) . '" height="' . esc_attr( $height ) . '"' )
 | 
						|
				);
 | 
						|
 | 
						|
				if ( ! $raw ) {
 | 
						|
					$output = et_image_add_srcset_and_sizes( $output );
 | 
						|
				}
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			$output = $thumbnail;
 | 
						|
		}
 | 
						|
 | 
						|
		if ($echoout) echo et_core_intentionally_unescaped( $output, 'html' );
 | 
						|
		else return $output;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_new_thumb_resize' ) ) {
 | 
						|
 | 
						|
	function et_new_thumb_resize( $thumbnail, $width, $height, $alt='', $forstyle = false ){
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		$new_method = true;
 | 
						|
		$new_method_thumb = '';
 | 
						|
		$external_source = false;
 | 
						|
 | 
						|
		$allow_new_thumb_method = !$external_source && $new_method;
 | 
						|
 | 
						|
		if ( $allow_new_thumb_method && ! empty( $thumbnail ) ) {
 | 
						|
			$et_crop = true;
 | 
						|
			$new_method_thumb = et_resize_image( $thumbnail, $width, $height, $et_crop );
 | 
						|
			if ( is_wp_error( $new_method_thumb ) ) $new_method_thumb = '';
 | 
						|
		}
 | 
						|
 | 
						|
		$thumb = esc_attr( $new_method_thumb );
 | 
						|
 | 
						|
		// Bail early when $forstyle argument is true.
 | 
						|
		if ( $forstyle ) {
 | 
						|
			return $thumb;
 | 
						|
		}
 | 
						|
 | 
						|
		$output = sprintf(
 | 
						|
			'<img src="%1$s" alt="%2$s" width="%3$s" height="%4$s" />',
 | 
						|
			esc_url( $thumb ),
 | 
						|
			esc_attr( $alt ),
 | 
						|
			esc_attr( $width ),
 | 
						|
			esc_attr( $height )
 | 
						|
		);
 | 
						|
 | 
						|
		return et_image_add_srcset_and_sizes( $output );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_multisite_thumbnail' ) ) {
 | 
						|
 | 
						|
	function et_multisite_thumbnail( $thumbnail = '' ) {
 | 
						|
		// do nothing if it's not a Multisite installation or current site is the main one
 | 
						|
		if ( is_main_site() ) return $thumbnail;
 | 
						|
 | 
						|
		# get the real image url
 | 
						|
		preg_match( '#([_0-9a-zA-Z-]+/)?files/(.+)#', $thumbnail, $matches );
 | 
						|
 | 
						|
		if ( isset( $matches[2] ) ) {
 | 
						|
			$file = rtrim( BLOGUPLOADDIR, '/' ) . '/' . str_replace( '..', '', $matches[2] );
 | 
						|
			if ( is_file( $file ) ) $thumbnail = str_replace( ABSPATH, trailingslashit( get_site_url( 1 ) ), $file );
 | 
						|
			else $thumbnail = '';
 | 
						|
		}
 | 
						|
 | 
						|
		return $thumbnail;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_is_portrait' ) ) {
 | 
						|
 | 
						|
	function et_is_portrait($imageurl, $post='', $ignore_cfields = false){
 | 
						|
		if ( empty( $post ) ) global $post;
 | 
						|
 | 
						|
		if ( get_post_meta( $post->ID, 'et_disable_portrait', true ) === '1' ) return false;
 | 
						|
 | 
						|
		if ( !$ignore_cfields ) {
 | 
						|
			if ( get_post_meta( $post->ID, 'et_imagetype', true ) === 'l' ) return false;
 | 
						|
			if ( get_post_meta( $post->ID, 'et_imagetype', true ) === 'p' ) return true;
 | 
						|
		}
 | 
						|
 | 
						|
		$imageurl = et_path_reltoabs( et_multisite_thumbnail( $imageurl ) );
 | 
						|
 | 
						|
		$et_thumb_size = @getimagesize( $imageurl );
 | 
						|
		if ( empty( $et_thumb_size ) ) {
 | 
						|
			$et_thumb_size = @getimagesize( str_replace( WP_CONTENT_URL, WP_CONTENT_DIR, $imageurl ) );
 | 
						|
			if ( empty( $et_thumb_size ) ) return false;
 | 
						|
		}
 | 
						|
		$et_thumb_width = $et_thumb_size[0];
 | 
						|
		$et_thumb_height = $et_thumb_size[1];
 | 
						|
 | 
						|
		$result = ($et_thumb_width < $et_thumb_height) ? true : false;
 | 
						|
 | 
						|
		return $result;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_path_reltoabs' ) ) {
 | 
						|
 | 
						|
	function et_path_reltoabs( $imageurl ){
 | 
						|
		if ( strpos( strtolower( $imageurl ), 'http://' ) !== false || strpos( strtolower( $imageurl ), 'https://' ) !== false ) return $imageurl;
 | 
						|
 | 
						|
		if ( strpos( strtolower( $imageurl ), $_SERVER['HTTP_HOST'] ) !== false )
 | 
						|
			return $imageurl;
 | 
						|
		else {
 | 
						|
			$imageurl = esc_url( apply_filters( 'et_path_relative_image', site_url() . '/' ) . $imageurl );
 | 
						|
		}
 | 
						|
 | 
						|
		return $imageurl;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'in_subcat' ) ) {
 | 
						|
 | 
						|
	function in_subcat($blogcat,$current_cat='') {
 | 
						|
		$in_subcategory = false;
 | 
						|
 | 
						|
		if (cat_is_ancestor_of( $blogcat, $current_cat ) || $blogcat === $current_cat) $in_subcategory = true;
 | 
						|
 | 
						|
		return $in_subcategory;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'show_page_menu' ) ) {
 | 
						|
 | 
						|
	function show_page_menu($customClass = 'nav clearfix', $addUlContainer = true, $addHomeLink = true){
 | 
						|
		global $shortname, $themename, $exclude_pages, $strdepth, $page_menu, $is_footer;
 | 
						|
 | 
						|
		//excluded pages
 | 
						|
		if ( $menupages = et_get_option( $shortname.'_menupages' ) ) {
 | 
						|
			$exclude_pages = is_array( $menupages ) ? implode( ',', $menupages ) : '';
 | 
						|
		}
 | 
						|
 | 
						|
		//dropdown for pages
 | 
						|
		$strdepth = '';
 | 
						|
		if ( et_get_option( $shortname.'_enable_dropdowns' ) === 'on' ) {
 | 
						|
			$strdepth = "depth=".et_get_option( $shortname.'_tiers_shown_pages' );
 | 
						|
		}
 | 
						|
 | 
						|
		if ( empty( $strdepth ) ) {
 | 
						|
			$strdepth = "depth=1";
 | 
						|
		}
 | 
						|
 | 
						|
		if ( $is_footer ) {
 | 
						|
			$strdepth = "depth=1";
 | 
						|
			$strdepth2 = $strdepth;
 | 
						|
		}
 | 
						|
 | 
						|
		$page_menu = wp_list_pages( "sort_column=".et_get_option( $shortname.'_sort_pages' )."&sort_order=".et_get_option( $shortname.'_order_page' )."&".$strdepth."&exclude=".$exclude_pages."&title_li=&echo=0" );
 | 
						|
 | 
						|
		if ( $addUlContainer ) echo '<ul class="' . esc_attr( $customClass ) . '">';
 | 
						|
		if (et_get_option( $shortname . '_home_link' ) === 'on' && $addHomeLink) { ?>
 | 
						|
				<li <?php if ( is_front_page() || is_home() ) echo 'class="current_page_item"' ?>><a href="<?php echo esc_url( home_url() ); ?>"><?php esc_html_e( 'Home', $themename ); ?></a></li>
 | 
						|
			<?php };
 | 
						|
 | 
						|
			echo et_core_esc_wp( $page_menu );
 | 
						|
		if ( $addUlContainer ) echo '</ul>';
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'show_categories_menu' ) ) {
 | 
						|
 | 
						|
	function show_categories_menu($customClass = 'nav clearfix', $addUlContainer = true){
 | 
						|
		global $shortname, $themename, $category_menu, $exclude_cats, $hide, $strdepth2, $projects_cat;
 | 
						|
 | 
						|
		//excluded categories
 | 
						|
		if ( $menucats = et_get_option( $shortname.'_menucats' ) ) {
 | 
						|
			$exclude_cats = implode( ',', (array) $menucats );
 | 
						|
		}
 | 
						|
 | 
						|
		//hide empty categories
 | 
						|
		if (et_get_option( $shortname.'_categories_empty' ) === 'on') $hide = '1';
 | 
						|
		else $hide = '0';
 | 
						|
 | 
						|
		//dropdown for categories
 | 
						|
		$strdepth2 = '';
 | 
						|
		if ( et_get_option( $shortname.'_enable_dropdowns_categories' ) === 'on' ) $strdepth2 = "depth=".et_get_option( $shortname.'_tiers_shown_categories' );
 | 
						|
		if ( empty( $strdepth2 ) ) $strdepth2 = "depth=1";
 | 
						|
 | 
						|
		$args = "orderby=".et_get_option( $shortname.'_sort_cat' )."&order=".et_get_option( $shortname.'_order_cat' )."&".$strdepth2."&exclude=".$exclude_cats."&hide_empty=".$hide."&title_li=&echo=0";
 | 
						|
 | 
						|
		$categories = get_categories( $args );
 | 
						|
 | 
						|
		if ( !empty( $categories ) ) {
 | 
						|
			$args_array = wp_parse_args( $args );
 | 
						|
 | 
						|
			if ( isset( $args_array['exclude'] ) && '' !== $args_array['exclude'] ) {
 | 
						|
				$args_array['exclude'] = explode( ',', $args_array['exclude'] );
 | 
						|
			}
 | 
						|
 | 
						|
			$category_menu = wp_list_categories( $args_array );
 | 
						|
			if ( $addUlContainer ) echo '<ul class="' . esc_attr( $customClass ) . '">';
 | 
						|
				echo et_core_esc_wp( $category_menu );
 | 
						|
			if ( $addUlContainer ) echo '</ul>';
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
function head_addons(){
 | 
						|
	global $shortname, $default_colorscheme;
 | 
						|
 | 
						|
	// phpcs:disable WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet
 | 
						|
	$color_scheme = apply_filters( 'et_get_additional_color_scheme', et_get_option( $shortname.'_color_scheme' ) );
 | 
						|
	if ( !empty( $color_scheme ) && $color_scheme !== $default_colorscheme ) { ?>
 | 
						|
		<link rel="stylesheet" href="<?php echo esc_url( get_template_directory_uri() . '/style-' . et_get_option( $shortname.'_color_scheme' ) . '.css' ); ?>" type="text/css" media="screen" />
 | 
						|
	<?php }
 | 
						|
 | 
						|
	$child_cssurl = et_get_option( $shortname.'_child_cssurl' );
 | 
						|
	if ( et_get_option( $shortname.'_child_css' ) === 'on' && ! empty( $child_cssurl ) ) { //Enable child stylesheet  ?>
 | 
						|
		<link rel="stylesheet" href="<?php echo esc_url( $child_cssurl ); ?>" type="text/css" media="screen" />
 | 
						|
	<?php }
 | 
						|
 | 
						|
	//prints the theme name, version in meta tag
 | 
						|
	$theme_info = wp_get_theme();
 | 
						|
	echo '<meta content="' . esc_attr( $theme_info->display( 'Name' ) . ' v.' . $theme_info->display( 'Version' ) ) . '" name="generator"/>';
 | 
						|
 | 
						|
	if ( et_get_option( $shortname . '_custom_colors' ) === 'on' ) et_epanel_custom_colors_css();
 | 
						|
	// phpcs:enable
 | 
						|
}// end function head_addons()
 | 
						|
 | 
						|
add_action( 'wp_head', 'head_addons', 7 );
 | 
						|
 | 
						|
function integration_head(){
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	/** @see ET_Core_SupportCenter::toggle_safe_mode */
 | 
						|
	if ( et_core_is_safe_mode_active() ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	$integration_head = et_get_option( $shortname . '_integration_head' );
 | 
						|
	if ( ! empty( $integration_head ) && et_get_option( $shortname . '_integrate_header_enable' ) === 'on' ) {
 | 
						|
 | 
						|
		$integration_head = et_core_fix_unclosed_html_tags( $integration_head );
 | 
						|
		echo et_core_intentionally_unescaped( $integration_head, 'html' );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'wp_head', 'integration_head', 12 );
 | 
						|
 | 
						|
function integration_body(){
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	/** @see ET_Core_SupportCenter::toggle_safe_mode */
 | 
						|
	if ( et_core_is_safe_mode_active() ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	$integration_body = et_get_option( $shortname . '_integration_body' );
 | 
						|
	if ( ! empty( $integration_body ) && et_get_option( $shortname . '_integrate_body_enable' ) === 'on' ) {
 | 
						|
 | 
						|
		$integration_body = et_core_fix_unclosed_html_tags( $integration_body );
 | 
						|
		echo et_core_intentionally_unescaped( $integration_body, 'html' );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'wp_footer', 'integration_body', 12 );
 | 
						|
 | 
						|
function integration_single_top(){
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	/** @see ET_Core_SupportCenter::toggle_safe_mode */
 | 
						|
	if ( et_core_is_safe_mode_active() ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	$integration_single_top = et_get_option( $shortname . '_integration_single_top' );
 | 
						|
	if ( ! empty( $integration_single_top ) && et_get_option( $shortname . '_integrate_singletop_enable' ) === 'on' ) {
 | 
						|
 | 
						|
		$integration_single_top = et_core_fix_unclosed_html_tags( $integration_single_top );
 | 
						|
		echo et_core_intentionally_unescaped( $integration_single_top, 'html' );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'et_before_post', 'integration_single_top', 12 );
 | 
						|
 | 
						|
function integration_single_bottom(){
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	/** @see ET_Core_SupportCenter::toggle_safe_mode */
 | 
						|
	if ( et_core_is_safe_mode_active() ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	$integration_single_bottom = et_get_option( $shortname . '_integration_single_bottom' );
 | 
						|
	if ( ! empty( $integration_single_bottom ) && et_get_option( $shortname . '_integrate_singlebottom_enable' ) === 'on' ) {
 | 
						|
 | 
						|
		$integration_single_bottom = et_core_fix_unclosed_html_tags( $integration_single_bottom );
 | 
						|
		echo et_core_intentionally_unescaped( $integration_single_bottom, 'html' );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'et_after_post', 'integration_single_bottom', 12 );
 | 
						|
 | 
						|
/*this function gets page name by its id*/
 | 
						|
if ( ! function_exists( 'get_pagename' ) ) {
 | 
						|
 | 
						|
	function get_pagename( $page_id )
 | 
						|
	{
 | 
						|
		$page_object = get_page( $page_id );
 | 
						|
 | 
						|
		return apply_filters( 'the_title', $page_object->post_title, $page_id );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function gets category name by its id*/
 | 
						|
if ( ! function_exists( 'get_categname' ) ) {
 | 
						|
 | 
						|
	function get_categname( $cat_id )
 | 
						|
	{
 | 
						|
		return get_cat_name( $cat_id );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function gets category id by its name*/
 | 
						|
if ( ! function_exists( 'get_catId' ) ) {
 | 
						|
 | 
						|
	function get_catId( $cat_name, $taxonomy = 'category' )
 | 
						|
	{
 | 
						|
		$cat_name_id = is_numeric( $cat_name ) ? (int) $cat_name : (int) get_cat_ID( html_entity_decode( $cat_name, ENT_QUOTES ) );
 | 
						|
 | 
						|
		// wpml compatibility
 | 
						|
		if ( function_exists( 'icl_object_id' ) ) {
 | 
						|
			$cat_name_id = (int) icl_object_id( $cat_name_id, $taxonomy, true );
 | 
						|
		}
 | 
						|
 | 
						|
		return $cat_name_id;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function gets page id by its name*/
 | 
						|
if ( ! function_exists( 'get_pageId' ) ) {
 | 
						|
 | 
						|
	function get_pageId( $page_name )
 | 
						|
	{
 | 
						|
		if ( is_numeric( $page_name ) ) {
 | 
						|
			$page_id = intval( $page_name );
 | 
						|
		} else {
 | 
						|
			$page_name = html_entity_decode( $page_name, ENT_QUOTES );
 | 
						|
			$page = get_page_by_title( $page_name );
 | 
						|
			$page_id = intval( $page->ID );
 | 
						|
		}
 | 
						|
 | 
						|
		// wpml compatibility
 | 
						|
		if ( function_exists( 'icl_object_id' ) )
 | 
						|
			$page_id = (int) icl_object_id( $page_id, 'page', true );
 | 
						|
 | 
						|
		return $page_id;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Transforms an array of posts, pages, post_tags or categories ids
 | 
						|
 * into corresponding "objects" ids, if WPML plugin is installed
 | 
						|
 *
 | 
						|
 * @param array $ids_array Posts, pages, post_tags or categories ids.
 | 
						|
 * @param string $type "Object" type.
 | 
						|
 * @return array IDs.
 | 
						|
 */
 | 
						|
if ( ! function_exists( 'et_generate_wpml_ids' ) ) {
 | 
						|
 | 
						|
	function et_generate_wpml_ids( $ids_array, $type ) {
 | 
						|
		if ( function_exists( 'icl_object_id' ) ) {
 | 
						|
			$wpml_ids = array();
 | 
						|
			foreach ( $ids_array as $id ) {
 | 
						|
				$translated_id = icl_object_id( $id, $type, false );
 | 
						|
				if ( ! is_null( $translated_id ) ) $wpml_ids[] = $translated_id;
 | 
						|
			}
 | 
						|
			$ids_array = $wpml_ids;
 | 
						|
		}
 | 
						|
 | 
						|
		return array_map( 'intval', $ids_array );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'elegant_is_blog_posts_page' ) ) {
 | 
						|
 | 
						|
	function elegant_is_blog_posts_page() {
 | 
						|
		/**
 | 
						|
		 * Returns true if static page is set in WP-Admin / Settings / Reading
 | 
						|
		 * and Posts page is displayed
 | 
						|
		 */
 | 
						|
 | 
						|
		static $et_is_blog_posts_cached = null;
 | 
						|
 | 
						|
		if ( null === $et_is_blog_posts_cached ) {
 | 
						|
			$et_is_blog_posts_cached = (bool) is_home() && 0 !== intval( get_option( 'page_for_posts', '0' ) );
 | 
						|
		}
 | 
						|
 | 
						|
		return $et_is_blog_posts_cached;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
// Added for backwards compatibility
 | 
						|
if ( ! function_exists( 'elegant_titles' ) ) {
 | 
						|
 | 
						|
	function elegant_titles() {
 | 
						|
		if ( ! function_exists( 'wp_get_document_title' ) ) {
 | 
						|
			wp_title();
 | 
						|
		} else {
 | 
						|
			echo et_core_esc_wp( wp_get_document_title() );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( '_wp_render_title_tag' ) && ! function_exists( 'et_add_title_tag_back_compat' ) ) {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Manually add <title> tag in head for WordPress 4.1 below for backward compatibility
 | 
						|
	 * Title tag is automatically added for WordPress 4.1 above via theme support
 | 
						|
	 * @return void
 | 
						|
	 */
 | 
						|
	function et_add_title_tag_back_compat() {
 | 
						|
		?>
 | 
						|
		<title><?php wp_title( '-', true, 'right' ); ?></title>
 | 
						|
		<?php
 | 
						|
	}
 | 
						|
 | 
						|
	add_action( 'wp_head', 'et_add_title_tag_back_compat' );
 | 
						|
}
 | 
						|
 | 
						|
/*this function controls the meta titles display*/
 | 
						|
if ( ! function_exists( 'elegant_titles_filter' ) ) {
 | 
						|
 | 
						|
	function elegant_titles_filter( $custom_title ) {
 | 
						|
		global $shortname, $themename;
 | 
						|
		$custom_title = '';
 | 
						|
		$sitename = get_bloginfo( 'name' );
 | 
						|
		$site_description = get_bloginfo( 'description' );
 | 
						|
		#if the title is being displayed on the homepage
 | 
						|
		if ( ( is_home() || is_front_page() ) && ! elegant_is_blog_posts_page() ) {
 | 
						|
			if ( 'on' === et_get_option( $shortname . '_seo_home_title' ) ) {
 | 
						|
				$custom_title = strval( et_get_option( $shortname . '_seo_home_titletext' ) );
 | 
						|
			} else {
 | 
						|
				$seo_home_type = et_get_option( $shortname . '_seo_home_type' );
 | 
						|
				$seo_home_separate = et_get_option( $shortname . '_seo_home_separate' );
 | 
						|
				if ( $seo_home_type === 'BlogName | Blog description' ) {
 | 
						|
					$custom_title = $sitename . esc_html( $seo_home_separate ) . $site_description;
 | 
						|
				}
 | 
						|
				if ( $seo_home_type === 'Blog description | BlogName') {
 | 
						|
					$custom_title = $site_description . esc_html( $seo_home_separate ) . $sitename;
 | 
						|
				}
 | 
						|
				if ( $seo_home_type === 'BlogName only') {
 | 
						|
					$custom_title = $sitename;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#if the title is being displayed on single posts/pages
 | 
						|
		if ( ( ( is_single() || is_page() ) && ! is_front_page() ) || elegant_is_blog_posts_page() ) {
 | 
						|
			global $wp_query;
 | 
						|
			$postid = elegant_is_blog_posts_page() ? intval( get_option( 'page_for_posts' ) ) : $wp_query->post->ID;
 | 
						|
			$key = et_get_option( $shortname . '_seo_single_field_title' );
 | 
						|
			$exists3 = get_post_meta( $postid, '' . $key . '', true );
 | 
						|
			if ( 'on' === et_get_option( $shortname . '_seo_single_title' ) && '' !== $exists3 ) {
 | 
						|
				$custom_title = $exists3;
 | 
						|
			} else {
 | 
						|
				$seo_single_type = et_get_option( $shortname . '_seo_single_type' );
 | 
						|
				$seo_single_separate = et_get_option( $shortname . '_seo_single_separate' );
 | 
						|
				$page_title = single_post_title( '', false );
 | 
						|
				if ( $seo_single_type === 'BlogName | Post title' ) {
 | 
						|
					$custom_title = $sitename . esc_html( $seo_single_separate ) . $page_title;
 | 
						|
				}
 | 
						|
				if ( $seo_single_type === 'Post title | BlogName' ) {
 | 
						|
					$custom_title = $page_title . esc_html( $seo_single_separate ) . $sitename;
 | 
						|
				}
 | 
						|
				if ( $seo_single_type === 'Post title only' ) {
 | 
						|
					$custom_title = $page_title;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#if the title is being displayed on index pages (categories/archives/search results)
 | 
						|
		if ( is_category() || is_archive() || is_search() || is_404() ) {
 | 
						|
			$page_title = '';
 | 
						|
			$seo_index_type = et_get_option( $shortname . '_seo_index_type' );
 | 
						|
			$seo_index_separate = et_get_option( $shortname . '_seo_index_separate' );
 | 
						|
			if ( is_category() || is_tag() || is_tax() ) {
 | 
						|
				$page_title = single_term_title( '', false );
 | 
						|
			} else if ( is_post_type_archive() ) {
 | 
						|
				$page_title = post_type_archive_title( '', false );
 | 
						|
			} else if ( is_author() ) {
 | 
						|
				$page_title = get_the_author_meta( 'display_name', get_query_var( 'author' ) );
 | 
						|
			} else if ( is_date() ) {
 | 
						|
				$page_title = esc_html__( 'Archives', $themename );
 | 
						|
			} else if ( is_search() ) {
 | 
						|
				$page_title = sprintf( esc_html__( 'Search results for "%s"', $themename ), esc_attr( get_search_query() ) );
 | 
						|
			} else if ( is_404() ) {
 | 
						|
				$page_title = esc_html__( '404 Not Found', $themename );
 | 
						|
			}
 | 
						|
			if ( $seo_index_type === 'BlogName | Category name' ) {
 | 
						|
				$custom_title = $sitename . esc_html( $seo_index_separate ) . $page_title;
 | 
						|
			}
 | 
						|
			if ( $seo_index_type === 'Category name | BlogName') {
 | 
						|
				$custom_title = $page_title . esc_html( $seo_index_separate ) . $sitename;
 | 
						|
			}
 | 
						|
			if ( $seo_index_type === 'Category name only') {
 | 
						|
				$custom_title = $page_title;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		$custom_title = wp_strip_all_tags( $custom_title );
 | 
						|
		return $custom_title;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
add_filter( 'pre_get_document_title', 'elegant_titles_filter' );
 | 
						|
 | 
						|
if ( ! function_exists( 'et_is_seo_plugin_active' ) ) {
 | 
						|
	/**
 | 
						|
	 * Determine if SEO plugin is active.
 | 
						|
	 *
 | 
						|
	 * @since ??
 | 
						|
	 * @return bool
 | 
						|
	 */
 | 
						|
	function et_is_seo_plugin_active() {
 | 
						|
		// WordPress SEO.
 | 
						|
		if ( class_exists( 'WPSEO_Frontend' ) ) {
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		// All In One SEO Pack.
 | 
						|
		if ( class_exists( 'All_in_One_SEO_Pack' ) ) {
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		// Rank Math SEO.
 | 
						|
		if ( class_exists( 'RankMath\Frontend\Frontend' ) ) {
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/*this function controls the meta description display*/
 | 
						|
if ( ! function_exists( 'elegant_description' ) ) {
 | 
						|
 | 
						|
	function elegant_description() {
 | 
						|
		// Don't use ePanel SEO if a SEO plugin is active.
 | 
						|
		if ( et_is_seo_plugin_active() ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		global $shortname, $themename;
 | 
						|
 | 
						|
		#homepage descriptions
 | 
						|
		if ( et_get_option( $shortname.'_seo_home_description' ) === 'on' && ( ( is_home() || is_front_page() ) && ! elegant_is_blog_posts_page() ) ) {
 | 
						|
			echo '<meta name="description" content="' . esc_attr( et_get_option( $shortname.'_seo_home_descriptiontext' ) ) .'" />';
 | 
						|
		}
 | 
						|
 | 
						|
		#single page descriptions
 | 
						|
		if ( et_get_option( $shortname.'_seo_single_description' ) === 'on' && ( is_single() || is_page() || elegant_is_blog_posts_page() ) ) {
 | 
						|
			global $wp_query;
 | 
						|
 | 
						|
			if ( isset( $wp_query->post->ID ) || elegant_is_blog_posts_page() ) {
 | 
						|
				$postid = elegant_is_blog_posts_page() ? intval( get_option( 'page_for_posts' ) ) : $wp_query->post->ID;
 | 
						|
			}
 | 
						|
 | 
						|
			$key2 = et_get_option( $shortname.'_seo_single_field_description' );
 | 
						|
 | 
						|
			if ( isset( $postid ) ) $exists = get_post_meta( $postid, ''.$key2.'', true );
 | 
						|
 | 
						|
			if ( $exists !== '' ) {
 | 
						|
				echo '<meta name="description" content="' . esc_attr( $exists ) . '" />';
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		#index descriptions
 | 
						|
		$seo_index_description = et_get_option( $shortname.'_seo_index_description' );
 | 
						|
		if ( $seo_index_description === 'on' ) {
 | 
						|
			$is_pre_4_4 = version_compare( $GLOBALS['wp_version'], '4.4', '<' );
 | 
						|
			$description_added = false;
 | 
						|
 | 
						|
			if ( is_category() ) {
 | 
						|
				remove_filter( 'term_description', 'wpautop' );
 | 
						|
				$cat = get_query_var( 'cat' );
 | 
						|
				$exists2 = category_description( $cat );
 | 
						|
 | 
						|
				if ( $exists2 !== '' ) {
 | 
						|
					echo '<meta name="description" content="' . esc_attr( $exists2 ) . '" />';
 | 
						|
					$description_added = true;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
			if ( is_archive() && ! $description_added ) {
 | 
						|
				$description_text = $is_pre_4_4 ? sprintf( esc_html__( 'Currently viewing archives from %1$s', $themename ),
 | 
						|
					wp_title( '', false, '' )
 | 
						|
				) : get_the_archive_title();
 | 
						|
 | 
						|
				printf( '<meta name="description" content="%1$s" />',
 | 
						|
					esc_attr( $description_text )
 | 
						|
				);
 | 
						|
 | 
						|
				$description_added = true;
 | 
						|
			}
 | 
						|
 | 
						|
			if ( is_search() && ! $description_added ) {
 | 
						|
				$description_text = $is_pre_4_4 ? wp_title( '', false, '' ) : sprintf(
 | 
						|
					esc_html__( 'Search Results for: %s', $themename ),
 | 
						|
					get_search_query()
 | 
						|
				);
 | 
						|
 | 
						|
				echo '<meta name="description" content="' . esc_attr( $description_text ) . '" />';
 | 
						|
				$description_added = true;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function controls the meta keywords display*/
 | 
						|
if ( ! function_exists( 'elegant_keywords' ) ) {
 | 
						|
 | 
						|
	function elegant_keywords() {
 | 
						|
		// Don't use ePanel SEO if a SEO plugin is active.
 | 
						|
		if ( et_is_seo_plugin_active() ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		#homepage keywords
 | 
						|
		if ( et_get_option( $shortname.'_seo_home_keywords' ) === 'on' && ( ( is_home() || is_front_page() ) && ! elegant_is_blog_posts_page() ) ) {
 | 
						|
			echo '<meta name="keywords" content="' . esc_attr( et_get_option( $shortname.'_seo_home_keywordstext' ) ) . '" />';
 | 
						|
		}
 | 
						|
 | 
						|
		#single page keywords
 | 
						|
		if ( et_get_option( $shortname.'_seo_single_keywords' ) === 'on' ) {
 | 
						|
			global $wp_query;
 | 
						|
			if ( isset( $wp_query->post->ID ) || elegant_is_blog_posts_page() ) {
 | 
						|
				$postid = elegant_is_blog_posts_page() ? intval( get_option( 'page_for_posts' ) ) : $wp_query->post->ID;
 | 
						|
			}
 | 
						|
 | 
						|
			$key3 = et_get_option( $shortname.'_seo_single_field_keywords' );
 | 
						|
 | 
						|
			if (isset( $postid )) $exists4 = get_post_meta( $postid, ''.$key3.'', true );
 | 
						|
 | 
						|
			if ( isset( $exists4 ) && $exists4 !== '' ) {
 | 
						|
				if ( is_single() || is_page() || elegant_is_blog_posts_page() ) echo '<meta name="keywords" content="' . esc_attr( $exists4 ) . '" />';
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/*this function controls canonical urls*/
 | 
						|
if ( ! function_exists( 'elegant_canonical' ) ) {
 | 
						|
 | 
						|
	function elegant_canonical() {
 | 
						|
		// Don't use ePanel SEO if a SEO plugin is active.
 | 
						|
		if ( et_is_seo_plugin_active() ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		#homepage urls
 | 
						|
		if ( et_get_option( $shortname.'_seo_home_canonical' ) === 'on' && is_home() && ! elegant_is_blog_posts_page() ) {
 | 
						|
			echo '<link rel="canonical" href="'. esc_url( home_url() ).'" />';
 | 
						|
		}
 | 
						|
 | 
						|
		#single page urls
 | 
						|
		if ( et_get_option( $shortname.'_seo_single_canonical' ) === 'on' ) {
 | 
						|
			global $wp_query;
 | 
						|
			if ( isset( $wp_query->post->ID ) || elegant_is_blog_posts_page() ) {
 | 
						|
				$postid = elegant_is_blog_posts_page() ? intval( get_option( 'page_for_posts' ) ) : $wp_query->post->ID;
 | 
						|
			}
 | 
						|
 | 
						|
			if ( ( is_single() || is_page() || elegant_is_blog_posts_page() ) && ! is_front_page() ) {
 | 
						|
				echo '<link rel="canonical" href="' . esc_url( get_permalink( $postid ) ) . '" />';
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		#index page urls
 | 
						|
		if ( et_get_option( $shortname.'_seo_index_canonical' ) === 'on' ) {
 | 
						|
			$current_page_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
 | 
						|
			if ( is_archive() || is_category() || is_search() ) echo '<link rel="canonical" href="'. esc_url( $current_page_url ).'" />';
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'wp_head', 'add_favicon' );
 | 
						|
 | 
						|
function add_favicon(){
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	$favicon_url = et_get_option( $shortname . '_favicon' );
 | 
						|
 | 
						|
	// If the `has_site_icon` function doesn't exist (ie we're on < WP 4.3) or if the site icon has not been set,
 | 
						|
	// and when we have a icon URL from theme option
 | 
						|
	if ( ( ! function_exists( 'has_site_icon' ) || ! has_site_icon() ) && ! empty( $favicon_url ) ) {
 | 
						|
		echo '<link rel="shortcut icon" href="' . esc_url( $favicon_url ) . '" />';
 | 
						|
	} elseif ( function_exists( 'has_site_icon' ) && has_site_icon() ) {
 | 
						|
		et_update_option( $shortname . '_favicon', '' );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'init', 'et_create_images_temp_folder' );
 | 
						|
 | 
						|
function et_create_images_temp_folder(){
 | 
						|
	$et_images_temp_folder = get_option( 'et_images_temp_folder' );
 | 
						|
 | 
						|
	#clean et_temp folder once per week
 | 
						|
	if ( false !== $last_time = get_option( 'et_schedule_clean_images_last_time' ) ) {
 | 
						|
		$timeout = 86400 * 7;
 | 
						|
 | 
						|
		if ( ( $timeout < ( time() - $last_time ) ) && ! empty( $et_images_temp_folder ) ) et_clean_temp_images( $et_images_temp_folder );
 | 
						|
	}
 | 
						|
 | 
						|
	if ( false !== $et_images_temp_folder ) return;
 | 
						|
 | 
						|
	$uploads_dir = wp_upload_dir();
 | 
						|
	$destination_dir = ( false === $uploads_dir['error'] ) ? path_join( $uploads_dir['basedir'], 'et_temp' ) : '';
 | 
						|
 | 
						|
	if ( ! wp_mkdir_p( $destination_dir ) ) update_option( 'et_images_temp_folder', '' );
 | 
						|
	else {
 | 
						|
		update_option( 'et_images_temp_folder', preg_replace( '#\/\/#', '/', $destination_dir ) );
 | 
						|
		update_option( 'et_schedule_clean_images_last_time', time() );
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_clean_temp_images' ) ) {
 | 
						|
 | 
						|
	function et_clean_temp_images( $directory ){
 | 
						|
		$dir_to_clean = @ opendir( $directory );
 | 
						|
 | 
						|
		if ( $dir_to_clean ) {
 | 
						|
			while (($file = readdir( $dir_to_clean ) ) !== false ) {
 | 
						|
				if ( substr( $file, 0, 1 ) === '.' )
 | 
						|
					continue;
 | 
						|
				if ( is_dir( $directory.'/'.$file ) )
 | 
						|
					et_clean_temp_images( path_join( $directory, $file ) );
 | 
						|
				else
 | 
						|
					@ unlink( path_join( $directory, $file ) );
 | 
						|
			}
 | 
						|
			closedir( $dir_to_clean );
 | 
						|
		}
 | 
						|
 | 
						|
		#set last time cleaning was performed
 | 
						|
		update_option( 'et_schedule_clean_images_last_time', time() );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
add_filter( 'update_option_upload_path', 'et_update_uploads_dir' );
 | 
						|
 | 
						|
function et_update_uploads_dir( $upload_path ){
 | 
						|
	#check if we have 'et_temp' folder within $uploads_dir['basedir'] directory, if not - try creating it, if it's not possible $destination_dir = null
 | 
						|
 | 
						|
	$destination_dir = '';
 | 
						|
	$uploads_dir = wp_upload_dir();
 | 
						|
	$et_temp_dir = path_join( $uploads_dir['basedir'], 'et_temp' );
 | 
						|
 | 
						|
	if ( is_dir( $et_temp_dir ) || ( false === $uploads_dir['error'] && wp_mkdir_p( $et_temp_dir ) ) ) {
 | 
						|
		$destination_dir = $et_temp_dir;
 | 
						|
		update_option( 'et_schedule_clean_images_last_time', time() );
 | 
						|
	}
 | 
						|
 | 
						|
	update_option( 'et_images_temp_folder', preg_replace( '#\/\/#', '/', $destination_dir ) );
 | 
						|
 | 
						|
	return $upload_path;
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_resize_image' ) ) {
 | 
						|
 | 
						|
	function et_resize_image( $thumb, $new_width, $new_height, $crop ){
 | 
						|
		/*
 | 
						|
		 * Fixes the issue with x symbol between width and height values in the filename.
 | 
						|
		 * For instance, sports-400x400.jpg file results in 'image not found' in getimagesize() function.
 | 
						|
		 */
 | 
						|
		$thumb = str_replace( '%26%23215%3B', 'x', rawurlencode( $thumb ) );
 | 
						|
		$thumb = rawurldecode( $thumb );
 | 
						|
 | 
						|
		if ( is_ssl() ) $thumb = preg_replace( '#^http://#', 'https://', $thumb );
 | 
						|
		$info = pathinfo( $thumb );
 | 
						|
		$ext = $info['extension'];
 | 
						|
		$name = wp_basename( $thumb, ".$ext" );
 | 
						|
		$is_jpeg = false;
 | 
						|
		$site_uri = apply_filters( 'et_resize_image_site_uri', site_url() );
 | 
						|
		$site_dir = apply_filters( 'et_resize_image_site_dir', ABSPATH );
 | 
						|
 | 
						|
		// If multisite, not the main site, WordPress version < 3.5 or ms-files rewriting is enabled ( not the fresh WordPress installation, updated from the 3.4 version )
 | 
						|
		if ( is_multisite() && ! is_main_site() && ( ! function_exists( 'wp_get_mime_types' ) || get_site_option( 'ms_files_rewriting' ) ) ) {
 | 
						|
			//Get main site url on multisite installation
 | 
						|
 | 
						|
			switch_to_blog( 1 );
 | 
						|
			$site_uri = site_url();
 | 
						|
			restore_current_blog();
 | 
						|
		}
 | 
						|
 | 
						|
		/*
 | 
						|
		 * If we're dealing with an external image ( might be the result of Grab the first image function ),
 | 
						|
		 * return original image url
 | 
						|
		 */
 | 
						|
		if ( false === strpos( $thumb, $site_uri ) )
 | 
						|
			return $thumb;
 | 
						|
 | 
						|
		if ( 'jpeg' === $ext ) {
 | 
						|
			$ext = 'jpg';
 | 
						|
			$name = preg_replace( '#.jpeg$#', '', $name );
 | 
						|
			$is_jpeg = true;
 | 
						|
		}
 | 
						|
 | 
						|
		$suffix = "{$new_width}x{$new_height}";
 | 
						|
 | 
						|
		$et_images_temp_folder = get_option( 'et_images_temp_folder' );
 | 
						|
		$destination_dir = ! empty( $et_images_temp_folder ) ? preg_replace( '#\/\/#', '/', $et_images_temp_folder ) : null;
 | 
						|
 | 
						|
		$matches = apply_filters( 'et_resize_image_site_dir', array(), $site_dir );
 | 
						|
		if ( !empty( $matches ) ) {
 | 
						|
			preg_match( '#'.$matches[1].'$#', $site_uri, $site_uri_matches );
 | 
						|
			if ( !empty( $site_uri_matches ) ) {
 | 
						|
				$site_uri = str_replace( $matches[1], '', $site_uri );
 | 
						|
				$site_uri = preg_replace( '#/$#', '', $site_uri );
 | 
						|
				$site_dir = str_replace( $matches[1], '', $site_dir );
 | 
						|
				$site_dir = preg_replace( '#\\\/$#', '', $site_dir );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		#get local name for use in file_exists() and get_imagesize() functions
 | 
						|
		$localfile = str_replace( apply_filters( 'et_resize_image_localfile', $site_uri, $site_dir, et_multisite_thumbnail( $thumb ) ), $site_dir, et_multisite_thumbnail( $thumb ) );
 | 
						|
 | 
						|
		$add_to_suffix = '';
 | 
						|
		if ( file_exists( $localfile ) ) $add_to_suffix = filesize( $localfile ) . '_';
 | 
						|
 | 
						|
		#prepend image filesize to be able to use images with the same filename
 | 
						|
		$suffix = $add_to_suffix . $suffix;
 | 
						|
		$destfilename_attributes = '-' . $suffix . '.' . strtolower( $ext );
 | 
						|
 | 
						|
		$checkfilename = ( ! empty( $destination_dir ) && null !== $destination_dir ) ? path_join( $destination_dir, $name ) : path_join( dirname( $localfile ), $name );
 | 
						|
		$checkfilename .= $destfilename_attributes;
 | 
						|
 | 
						|
		if ( $is_jpeg ) $checkfilename = preg_replace( '#.jpg$#', '.jpeg', $checkfilename );
 | 
						|
 | 
						|
		$uploads_dir = wp_upload_dir();
 | 
						|
		$uploads_dir['basedir'] = preg_replace( '#\/\/#', '/', $uploads_dir['basedir'] );
 | 
						|
 | 
						|
		if ( null !== $destination_dir && ! empty( $destination_dir ) && apply_filters( 'et_enable_uploads_detection', true ) ) {
 | 
						|
			$site_dir = trailingslashit( preg_replace( '#\/\/#', '/', $uploads_dir['basedir'] ) );
 | 
						|
			$site_uri = trailingslashit( $uploads_dir['baseurl'] );
 | 
						|
		}
 | 
						|
 | 
						|
		#check if we have an image with specified width and height
 | 
						|
 | 
						|
		if ( file_exists( $checkfilename ) ) return str_replace( $site_dir, trailingslashit( $site_uri ), $checkfilename );
 | 
						|
 | 
						|
		$size = @getimagesize( $localfile );
 | 
						|
		if ( !$size ) return new WP_Error( 'invalid_image_path', esc_html__( 'Image doesn\'t exist' ), $thumb );
 | 
						|
		list($orig_width, $orig_height, $orig_type) = $size;
 | 
						|
 | 
						|
		#check if we're resizing the image to smaller dimensions
 | 
						|
		if ( $orig_width > $new_width || $orig_height > $new_height ) {
 | 
						|
			if ( $orig_width < $new_width || $orig_height < $new_height ) {
 | 
						|
				#don't resize image if new dimensions > than its original ones
 | 
						|
				if ( $orig_width < $new_width ) $new_width = $orig_width;
 | 
						|
				if ( $orig_height < $new_height ) $new_height = $orig_height;
 | 
						|
 | 
						|
				#regenerate suffix and appended attributes in case we changed new width or new height dimensions
 | 
						|
				$suffix = "{$add_to_suffix}{$new_width}x{$new_height}";
 | 
						|
				$destfilename_attributes = '-' . $suffix . '.' . $ext;
 | 
						|
 | 
						|
				$checkfilename = ( ! empty( $destination_dir ) && null !== $destination_dir ) ? path_join( $destination_dir, $name ) : path_join( dirname( $localfile ), $name );
 | 
						|
				$checkfilename .= $destfilename_attributes;
 | 
						|
 | 
						|
				#check if we have an image with new calculated width and height parameters
 | 
						|
				if ( file_exists( $checkfilename ) ) return str_replace( $site_dir, trailingslashit( $site_uri ), $checkfilename );
 | 
						|
			}
 | 
						|
 | 
						|
			#we didn't find the image in cache, resizing is done here
 | 
						|
			$et_image_editor = wp_get_image_editor( $localfile );
 | 
						|
 | 
						|
			if ( ! is_wp_error( $et_image_editor ) ) {
 | 
						|
				$et_image_editor->resize( $new_width, $new_height, $crop );
 | 
						|
 | 
						|
				// generate correct file name/path
 | 
						|
				$et_new_image_name = $et_image_editor->generate_filename( $suffix, $destination_dir );
 | 
						|
 | 
						|
				do_action( 'et_resize_image_before_save', $et_image_editor, $et_new_image_name );
 | 
						|
 | 
						|
				$et_image_editor->save( $et_new_image_name );
 | 
						|
 | 
						|
				// assign new image path
 | 
						|
				$result = $et_new_image_name;
 | 
						|
			} else {
 | 
						|
				// assign a WP_ERROR ( WP_Image_Editor instance wasn't created properly )
 | 
						|
				$result = $et_image_editor;
 | 
						|
			}
 | 
						|
 | 
						|
			if ( ! is_wp_error( $result ) ) {
 | 
						|
				// transform local image path into URI
 | 
						|
 | 
						|
				if ( $is_jpeg ) $thumb = preg_replace( '#.jpeg$#', '.jpg', $thumb );
 | 
						|
 | 
						|
				$site_dir = str_replace( '\\', '/', $site_dir );
 | 
						|
				$result = str_replace( '\\', '/', $result );
 | 
						|
				$result = str_replace( '//', '/', $result );
 | 
						|
				$result = str_replace( $site_dir, trailingslashit( $site_uri ), $result );
 | 
						|
			}
 | 
						|
 | 
						|
			#returns resized image path or WP_Error ( if something went wrong during resizing )
 | 
						|
			return $result;
 | 
						|
		}
 | 
						|
 | 
						|
		#returns unmodified image, for example in case if the user is trying to resize 800x600px to 1920x1080px image
 | 
						|
		return $thumb;
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'pre_get_posts', 'et_custom_posts_per_page' );
 | 
						|
 | 
						|
function et_custom_posts_per_page( $query = false ) {
 | 
						|
	global $shortname;
 | 
						|
	// phpcs:disable WordPress.Security.NonceVerification.NoNonceVerification
 | 
						|
	if ( is_admin() ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( ! is_a( $query, 'WP_Query' ) || ( ! $query->is_main_query() || ! empty( $query->et_pb_shop_query ) ) ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( $query->is_category ) {
 | 
						|
		$query->set( 'posts_per_page', (int) et_get_option( $shortname . '_catnum_posts', '5' ) );
 | 
						|
	} elseif ( $query->is_tag ) {
 | 
						|
		$query->set( 'posts_per_page', (int) et_get_option( $shortname . '_tagnum_posts', '5' ) );
 | 
						|
	} elseif ( $query->is_search ) {
 | 
						|
		if ( isset( $_GET['et_searchform_submit'] ) ) {
 | 
						|
			$postTypes = array();
 | 
						|
			if ( !isset( $_GET['et-inc-posts'] ) && !isset( $_GET['et-inc-pages'] ) ) $postTypes = array('post');
 | 
						|
			if ( isset( $_GET['et-inc-pages'] ) ) $postTypes = array('page');
 | 
						|
			if ( isset( $_GET['et-inc-posts'] ) ) $postTypes[] = 'post';
 | 
						|
			$query->set( 'post_type', $postTypes );
 | 
						|
 | 
						|
			if ( isset( $_GET['et-month-choice'] ) && $_GET['et-month-choice'] !== 'no-choice' ) {
 | 
						|
				$et_year = substr( $_GET['et-month-choice'], 0, 4 );
 | 
						|
				$et_month = substr( $_GET['et-month-choice'], 4, strlen( $_GET['et-month-choice'] ) - 4 );
 | 
						|
 | 
						|
				$query->set( 'year', absint( $et_year ) );
 | 
						|
				$query->set( 'monthnum', absint( $et_month ) );
 | 
						|
			}
 | 
						|
 | 
						|
			if ( isset( $_GET['et-cat'] ) && $_GET['et-cat'] !== '0' )
 | 
						|
				$query->set( 'cat', absint( $_GET['et-cat'] ) );
 | 
						|
		}
 | 
						|
		$query->set( 'posts_per_page', (int) et_get_option( $shortname . '_searchnum_posts', '5' ) );
 | 
						|
	} elseif ( $query->is_archive ) {
 | 
						|
 | 
						|
		if ( function_exists( 'is_woocommerce' ) && is_woocommerce() ) {
 | 
						|
			// Plugin Compatibility :: Skip query->set if "loop_shop_per_page" filter is being used by 3rd party plugins
 | 
						|
			if ( ! has_filter( 'loop_shop_per_page' ) ) {
 | 
						|
				$posts_number = (int) et_get_option( $shortname . '_woocommerce_archive_num_posts', '9' );
 | 
						|
				$query->set( 'posts_per_page', $posts_number );
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			$posts_number = (int) et_get_option( $shortname . '_archivenum_posts', '5' );
 | 
						|
			$query->set( 'posts_per_page', $posts_number );
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
	// phpcs:enable
 | 
						|
}
 | 
						|
 | 
						|
add_filter( 'default_hidden_meta_boxes', 'et_show_hidden_metaboxes', 10, 2 );
 | 
						|
 | 
						|
function et_show_hidden_metaboxes( $hidden, $screen ){
 | 
						|
	# make custom fields and excerpt meta boxes show by default
 | 
						|
	if ( 'post' === $screen->base || 'page' === $screen->base )
 | 
						|
		$hidden = array(
 | 
						|
			'slugdiv',
 | 
						|
			'trackbacksdiv',
 | 
						|
			'commentstatusdiv',
 | 
						|
			'commentsdiv',
 | 
						|
			'authordiv',
 | 
						|
			'revisionsdiv',
 | 
						|
		);
 | 
						|
 | 
						|
	return $hidden;
 | 
						|
}
 | 
						|
 | 
						|
add_filter( 'widget_title', 'et_widget_force_title' );
 | 
						|
 | 
						|
function et_widget_force_title( $title ){
 | 
						|
	#add an empty title for widgets ( otherwise it might break the sidebar layout )
 | 
						|
	if ( empty( $title ) ) $title = ' ';
 | 
						|
 | 
						|
	return $title;
 | 
						|
}
 | 
						|
 | 
						|
//modify the comment counts to only reflect the number of comments minus pings
 | 
						|
if( version_compare( phpversion(), '4.4', '>=' ) ) add_filter( 'get_comments_number', 'et_comment_count', 0, 2 );
 | 
						|
 | 
						|
function et_comment_count( $count, $post_id ) {
 | 
						|
	$is_doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX ? true : false;
 | 
						|
 | 
						|
	if ( ! is_admin() || $is_doing_ajax ) {
 | 
						|
		global $id;
 | 
						|
		$post_id = $post_id ? $post_id : $id;
 | 
						|
		$get_comments = get_comments( array('post_id' => $post_id, 'status' => 'approve') );
 | 
						|
		$comments_by_type = separate_comments( $get_comments );
 | 
						|
		return count( $comments_by_type['comment'] );
 | 
						|
	} else {
 | 
						|
		return $count;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'admin_init', 'et_theme_check_clean_installation' );
 | 
						|
 | 
						|
function et_theme_check_clean_installation(){
 | 
						|
	add_action( 'admin_notices', 'et_theme_epanel_reminder' );
 | 
						|
}
 | 
						|
 | 
						|
if ( ! function_exists( 'et_theme_epanel_reminder' ) ) {
 | 
						|
 | 
						|
	function et_theme_epanel_reminder(){
 | 
						|
		global $shortname, $themename, $current_screen;
 | 
						|
 | 
						|
		if ( false === et_get_option( $shortname . '_logo' ) && 'appearance_page_core_functions' !== $current_screen->id ) {
 | 
						|
			printf( et_get_safe_localization( __( '<div class="updated"><p>This is a fresh installation of %1$s theme. Don\'t forget to go to <a href="%2$s">ePanel</a> to set it up. This message will disappear once you have clicked the Save button within the <a href="%2$s">theme\'s options page</a>.</p></div>', $themename ) ), esc_html( wp_get_theme() ), esc_url( admin_url( 'themes.php?page=core_functions.php' ) ) );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
add_filter( 'body_class', 'et_add_fullwidth_body_class' );
 | 
						|
 | 
						|
function et_add_fullwidth_body_class( $classes ){
 | 
						|
	$fullwidth_view = false;
 | 
						|
 | 
						|
	if ( is_page_template( 'page-full.php' ) ) $fullwidth_view = true;
 | 
						|
 | 
						|
	if ( is_page() || is_single() ) {
 | 
						|
		$et_ptemplate_settings = get_post_meta( get_queried_object_id(), 'et_ptemplate_settings', true );
 | 
						|
		$fullwidth = isset( $et_ptemplate_settings['et_fullwidthpage'] ) ? (bool) $et_ptemplate_settings['et_fullwidthpage'] : false;
 | 
						|
 | 
						|
		if ( $fullwidth ) $fullwidth_view = true;
 | 
						|
	}
 | 
						|
 | 
						|
	if ( is_single() && 'on' === get_post_meta( get_queried_object_id(), '_et_full_post', true ) ) $fullwidth_view = true;
 | 
						|
 | 
						|
	$classes[] = apply_filters( 'et_fullwidth_view_body_class', $fullwidth_view ) ? 'et_fullwidth_view' : 'et_includes_sidebar';
 | 
						|
 | 
						|
	return $classes;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Enqueue legacy shortcodes' CSS.
 | 
						|
 *
 | 
						|
 * @since ??
 | 
						|
 */
 | 
						|
function et_add_legacy_shortcode_css() {
 | 
						|
	wp_enqueue_style(
 | 
						|
		'et-shortcodes-css',
 | 
						|
		ET_SHORTCODES_DIR . '/css/shortcodes-legacy.css',
 | 
						|
		array(),
 | 
						|
		ET_SHORTCODES_VERSION,
 | 
						|
		'all'
 | 
						|
	);
 | 
						|
 | 
						|
	wp_enqueue_style(
 | 
						|
		'et-shortcodes-responsive-css',
 | 
						|
		ET_SHORTCODES_DIR . '/css/shortcodes_responsive.css',
 | 
						|
		false,
 | 
						|
		ET_SHORTCODES_VERSION,
 | 
						|
		'all'
 | 
						|
	);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Enqueue legacy shortcode JS.
 | 
						|
 *
 | 
						|
 * @return void
 | 
						|
 * @since ??
 | 
						|
 */
 | 
						|
function et_add_legacy_shortcode_js() {
 | 
						|
	global $themename;
 | 
						|
 | 
						|
	$shortcode_strings_handle = apply_filters( 'et_shortcodes_strings_handle', 'et-shortcodes-js' );
 | 
						|
 | 
						|
	wp_enqueue_script( 'et-shortcodes-js', ET_SHORTCODES_DIR . '/js/et_shortcodes_frontend.js', array( 'jquery' ), ET_SHORTCODES_VERSION, false );
 | 
						|
 | 
						|
	wp_localize_script(
 | 
						|
		$shortcode_strings_handle,
 | 
						|
		'et_shortcodes_strings',
 | 
						|
		array(
 | 
						|
			'previous' => esc_html__( 'Previous', $themename ),
 | 
						|
			'next'     => esc_html__( 'Next', $themename ),
 | 
						|
		)
 | 
						|
	);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Enqueue responsive shortcode CSS in legacy themes when the ePanel option is enabled.
 | 
						|
 *
 | 
						|
 * @since ??
 | 
						|
 */
 | 
						|
function et_add_responsive_shortcodes_css() {
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	if ( 'on' === et_get_option( $shortname . '_responsive_shortcodes', 'on' ) )
 | 
						|
		wp_enqueue_style( 'et-shortcodes-responsive-css', ET_SHORTCODES_DIR . '/css/shortcodes_responsive.css', false, ET_SHORTCODES_VERSION, 'all' );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Loads theme settings
 | 
						|
 *
 | 
						|
 */
 | 
						|
if ( ! function_exists( 'et_load_core_options' ) ) {
 | 
						|
 | 
						|
	function et_load_core_options() {
 | 
						|
		global $shortname;
 | 
						|
		require_once get_template_directory() . esc_attr( "/options_{$shortname}.php" );
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Adds custom css option content to <head>
 | 
						|
 *
 | 
						|
 */
 | 
						|
function et_add_custom_css() {
 | 
						|
	// use default wp custom css system starting from WP 4.7
 | 
						|
	// fallback to our legacy custom css system otherwise
 | 
						|
	if ( function_exists( 'wp_get_custom_css_post' ) ) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	global $shortname;
 | 
						|
 | 
						|
	$custom_css = et_get_option( "{$shortname}_custom_css" );
 | 
						|
 | 
						|
	if ( empty( $custom_css ) ) return;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The theme doesn't strip slashes from custom css, when saving to the database,
 | 
						|
	 * so it does that before outputting the code on front-end
 | 
						|
	 */
 | 
						|
	echo '<style type="text/css" id="et-custom-css">' . "\n" . et_core_intentionally_unescaped( stripslashes( $custom_css ), 'html' ) . "\n" . '</style>';
 | 
						|
}
 | 
						|
 | 
						|
add_action( 'wp_head', 'et_add_custom_css', 100 );
 | 
						|
 | 
						|
if ( ! function_exists( 'et_get_google_fonts' ) ) :
 | 
						|
 | 
						|
 /**
 | 
						|
  * Returns the list of popular google fonts
 | 
						|
  * Fallback to websafe fonts if disabled
 | 
						|
  */
 | 
						|
 | 
						|
	function et_get_google_fonts() {
 | 
						|
		$websafe_fonts = et_core_get_websafe_fonts();
 | 
						|
		$google_fonts  = et_core_use_google_fonts() ? et_core_get_saved_google_fonts() : $websafe_fonts;
 | 
						|
 | 
						|
		return apply_filters( 'et_google_fonts', $google_fonts );
 | 
						|
	}
 | 
						|
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_get_websafe_font_stack' ) ) :
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Determines a websafe font stack, using font type
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	function et_get_websafe_font_stack( $type = 'sans-serif' ) {
 | 
						|
		$font_stack = '';
 | 
						|
 | 
						|
		switch ( $type ) {
 | 
						|
			case 'sans-serif':
 | 
						|
				$font_stack = 'Helvetica, Arial, Lucida, sans-serif';
 | 
						|
				break;
 | 
						|
			case 'serif':
 | 
						|
				$font_stack = 'Georgia, "Times New Roman", serif';
 | 
						|
				break;
 | 
						|
			case 'cursive':
 | 
						|
				$font_stack = 'cursive';
 | 
						|
				break;
 | 
						|
		}
 | 
						|
 | 
						|
		return $font_stack;
 | 
						|
	}
 | 
						|
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_gf_attach_font' ) ) :
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Attaches Google Font to given css elements
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	function et_gf_attach_font( $et_gf_font_name, $elements ) {
 | 
						|
		$google_fonts = et_get_google_fonts();
 | 
						|
 | 
						|
		printf( '%s { font-family: \'%s\', %s; }',
 | 
						|
			esc_html( $elements ),
 | 
						|
			esc_html( $et_gf_font_name ),
 | 
						|
			et_core_esc_previously( et_get_websafe_font_stack( $google_fonts[$et_gf_font_name]['type'] ) )
 | 
						|
		);
 | 
						|
	}
 | 
						|
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_gf_enqueue_fonts' ) ) :
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Enqueues Google Fonts
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	function et_gf_enqueue_fonts( $et_gf_font_names ) {
 | 
						|
		global $shortname;
 | 
						|
 | 
						|
		if ( ! is_array( $et_gf_font_names ) || empty( $et_gf_font_names ) || ! et_core_use_google_fonts() ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$google_fonts = et_get_google_fonts();
 | 
						|
		$protocol = is_ssl() ? 'https' : 'http';
 | 
						|
 | 
						|
		foreach ( $et_gf_font_names as $et_gf_font_name ) {
 | 
						|
			$google_font_character_set = $google_fonts[$et_gf_font_name]['character_set'];
 | 
						|
 | 
						|
			// By default, only latin and latin-ext subsets are loaded, all available subsets can be enabled in ePanel
 | 
						|
			if ( 'false' === et_get_option( "{$shortname}_gf_enable_all_character_sets", 'false' ) ) {
 | 
						|
				$latin_ext = '';
 | 
						|
				if ( false !== strpos( $google_fonts[$et_gf_font_name]['character_set'], 'latin-ext' ) )
 | 
						|
				$latin_ext = ',latin-ext';
 | 
						|
 | 
						|
				$google_font_character_set = "latin{$latin_ext}";
 | 
						|
			}
 | 
						|
 | 
						|
			$query_args = array(
 | 
						|
				'family' => sprintf( '%s:%s',
 | 
						|
					str_replace( ' ', '+', $et_gf_font_name ),
 | 
						|
					apply_filters( 'et_gf_set_styles', $google_fonts[$et_gf_font_name]['styles'], $et_gf_font_name )
 | 
						|
				),
 | 
						|
				'subset' => apply_filters( 'et_gf_set_character_set', $google_font_character_set, $et_gf_font_name ),
 | 
						|
			);
 | 
						|
 | 
						|
			$et_gf_font_name_slug = strtolower( str_replace( ' ', '-', $et_gf_font_name ) );
 | 
						|
			wp_enqueue_style( 'et-gf-' . $et_gf_font_name_slug, esc_url( add_query_arg( $query_args, "$protocol://fonts.googleapis.com/css" ) ), array(), null );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_pb_get_google_api_key' ) ) :
 | 
						|
function et_pb_get_google_api_key() {
 | 
						|
	$google_api_option = get_option( 'et_google_api_settings' );
 | 
						|
	$google_api_key = isset( $google_api_option['api_key'] ) ? $google_api_option['api_key'] : '';
 | 
						|
 | 
						|
	return $google_api_key;
 | 
						|
}
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_uc_theme_name' ) ) :
 | 
						|
 | 
						|
/**
 | 
						|
 * Fixes the bug with lowercase theme name, preventing a theme to update correctly,
 | 
						|
 * when an update is being performed via Themes page
 | 
						|
 */
 | 
						|
function et_uc_theme_name( $key, $raw_key ) {
 | 
						|
 | 
						|
	if ( ! ( is_admin() && isset( $_REQUEST['action'] ) && 'update-theme' === $_REQUEST['action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.NoNonceVerification
 | 
						|
		return $key;
 | 
						|
	}
 | 
						|
 | 
						|
	$theme_info = wp_get_theme();
 | 
						|
 | 
						|
	if ( is_child_theme() ) {
 | 
						|
		$theme_info = wp_get_theme( $theme_info->parent_theme );
 | 
						|
	}
 | 
						|
 | 
						|
	$theme_name = $theme_info->display( 'Name' );
 | 
						|
 | 
						|
	if ( $raw_key !== $theme_name ) {
 | 
						|
		return $key;
 | 
						|
	}
 | 
						|
 | 
						|
	return $theme_name;
 | 
						|
}
 | 
						|
add_filter( 'sanitize_key', 'et_uc_theme_name', 10, 2 );
 | 
						|
 | 
						|
endif;
 | 
						|
 | 
						|
if ( ! function_exists( 'et_core_exists_in_active_plugins' ) ) :
 | 
						|
function et_core_exists_in_active_plugins() {
 | 
						|
	$result = defined( 'ET_BUILDER_PLUGIN_DIR' )
 | 
						|
			  || defined( 'ET_BLOOM_PLUGIN_DIR' )
 | 
						|
			  || defined( 'ET_MONARCH_PLUGIN_DIR' );
 | 
						|
 | 
						|
	return $result;
 | 
						|
}
 | 
						|
endif;
 |