404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.16.48.201: ~ $
<?php
/**
 * @copyright 2017  Cloudways  https://www.cloudways.com
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
defined( 'ABSPATH' ) || die( 'No direct script access allowed!' );

function set_as_network_screen() {
	if ( isset( $_GET['is-network'] ) || isset( $_POST['is-network'] ) ) {
		$is_network = false;

		if ( isset( $_GET['is-network'] ) ) {
			$is_network = filter_var( $_GET['is-network'], FILTER_VALIDATE_BOOLEAN );
		}

		if ( isset( $_POST['is-network'] ) ) {
			$is_network = filter_var( $_POST['is-network'], FILTER_VALIDATE_BOOLEAN );
		}

		if ( true === $is_network && ! defined( 'WP_NETWORK_ADMIN' ) ) {
			define( 'WP_NETWORK_ADMIN', true );
		}
	}
}

/**
 * Retrieve site options accounting for settings inheritance.
 *
 * @param string $option_name
 * @param bool $is_local
 *
 * @return array
 */
function breeze_get_option( $option_name, $is_local = false ) {
	$inherit = true;

	global $breeze_network_subsite_settings;

	if ( is_network_admin() && ! $breeze_network_subsite_settings ) {
		$is_local = false;
	} elseif ( ! breeze_does_inherit_settings() ) {
		$inherit = false;
	}

	if ( ! is_multisite() || $is_local || ! $inherit ) {
		$option = get_option( 'breeze_' . $option_name );
	} else {
		$option = get_site_option( 'breeze_' . $option_name );
	}

	if ( empty( $option ) || ! is_array( $option ) ) {
		$option = array();
	}

	return $option;
}

/**
 * Update site options accounting for multisite.
 *
 * @param string $option_name
 * @param mixed $value
 * @param bool $is_local
 */
function breeze_update_option( $option_name, $value, $is_local = false ) {
	if ( is_network_admin() ) {
		$is_local = false;
	}

	if ( ! is_multisite() || $is_local ) {
		update_option( 'breeze_' . $option_name, $value );
	} else {
		update_site_option( 'breeze_' . $option_name, $value );
	}
}

/**
 * Check whether current site should inherit network-level settings.
 *
 * @return bool
 */
function breeze_does_inherit_settings() {
	global $breeze_network_subsite_settings;

	if ( ! is_multisite() || ( ! $breeze_network_subsite_settings && is_network_admin() ) ) {
		return false;
	}

	$inherit_option = get_option( 'breeze_inherit_settings' );

	return '0' !== $inherit_option;
}

/**
 * Check if plugin is activated network-wide in a multisite environment.
 *
 * @return bool
 */
function breeze_is_active_for_network() {
	return is_multisite() && is_plugin_active_for_network( 'breeze/breeze.php' );
}

function breeze_is_supported( $check ) {
	switch ( $check ) {
		case 'conditional_htaccess':
			$return = isset( $_SERVER['SERVER_SOFTWARE'] ) && stripos( $_SERVER['SERVER_SOFTWARE'], 'Apache/2.4' ) !== false;
			break;
	}

	return $return;
}

/**
 * If an array provided, the function will check all
 * array items to see if all of them are valid URLs.
 *
 * @param array $url_list
 * @param string $extension
 *
 * @return bool
 * @since 1.1.0
 *
 */
function breeze_validate_urls( $url_list = array() ) {
	if ( ! is_array( $url_list ) ) {
		return false;
	}

	$is_valid = true;
	foreach ( $url_list as $url ) {
		if ( ! filter_var( $url, FILTER_VALIDATE_URL ) ) {
			$is_valid = false;
			if ( false === $is_valid ) {
				$is_valid = breeze_validate_url_via_regexp( $url );
			}

			if ( false === $is_valid ) {
				$is_valid = breeze_string_contains_exclude_regexp( $url );
			}
		}

		if ( false === $is_valid ) {
			break;
		}
	}

	return $is_valid;

}

function breeze_validate_the_right_extension( $url_list = array(), $extension = 'css' ) {
	if ( ! is_array( $url_list ) ) {
		return false;
	}

	$is_valid = true;
	foreach ( $url_list as $url ) {

		$is_regexp = breeze_string_contains_exclude_regexp( $url );

		if ( false === $is_regexp ) {
			$is_valid = breeze_validate_exclude_field_by_extension( $url, $extension );
		} else {
			$file_extension = breeze_get_file_extension_from_url( $url );

			if ( false !== $file_extension && strtolower( $extension ) !== $file_extension ) {
				$is_valid = false;
			}
		}

		if ( false === $is_valid ) {
			break;
		}
	}

	return $is_valid;
}

/**
 * Returns the extension for given file from url.
 *
 * @param string $url_given
 *
 * @return bool
 */
function breeze_get_file_extension_from_url( $url_given = '' ) {
	if ( empty( $url_given ) ) {
		return false;
	}

	$file_path = wp_parse_url( $url_given, PHP_URL_PATH );
	if ( ! empty( $file_path ) ) {
		$file_name = wp_basename( $file_path );
		if ( ! empty( $file_name ) ) {
			$bits = explode( '.', $file_name );
			if ( ! empty( $bits ) ) {
				$extension_id = count( $bits ) - 1;
				$extension    = strtolower( $bits[ $extension_id ] );
				$extension    = preg_replace( '/\s+/', ' ', $extension );
				if ( '*)' === $extension ) { // Exception when (.*) is the last statement instead of ending with an extension
					return false;
				}

				return $extension;
			}
		}
	}

	return false;
}

/**
 * Will search for given string in array values
 * if found, will result in an array with all entries found
 * if not found, an empty array will be resulted.
 *
 * @param string $needle
 * @param array $haystack
 *
 * @return array
 * @since 1.1.0
 *
 */
function breeze_is_string_in_array_values( $needle = '', $haystack = array() ) {
	if ( empty( $needle ) || empty( $haystack ) ) {
		return array();
	}
	$needle             = trim( $needle );
	$is_string_in_array = array_filter(
		$haystack,
		function ( $var ) use ( $needle ) {
			#return false;
			if ( breeze_string_contains_exclude_regexp( $var ) ) {
				return breeze_file_match_pattern( $needle, $var );
			} else {
				return strpos( $var, $needle ) !== false;
			}

		}
	);

	return $is_string_in_array;
}

/**
 * Used to check for regexp exclude pages
 *
 * @param string $needle
 * @param array $haystack
 *
 * @return array
 * @since 1.1.7
 *
 */
function breeze_check_for_exclude_values( $needle = '', $haystack = array() ) {
	if ( empty( $needle ) || empty( $haystack ) ) {
		return array();
	}
	$needle             = trim( $needle );
	$is_string_in_array = array_filter(
		$haystack,
		function ( $var ) use ( $needle ) {

			if ( breeze_string_contains_exclude_regexp( $var ) ) {
				return breeze_file_match_pattern( $needle, $var );
			} else {
				return false;
			}

		}
	);

	return $is_string_in_array;
}

/**
 * Will return true for Google fonts and other type of CDN link
 * that are missing the Scheme from the url
 *
 *
 * @param string $url_to_be_checked
 *
 * @return bool
 */
function breeze_validate_url_via_regexp( $url_to_be_checked = '' ) {
	if ( empty( $url_to_be_checked ) ) {
		return false;
	}
	$regex = '((http:|https:?)?\/\/)?([a-z0-9+!*(),;?&=.-]+(:[a-z0-9+!*(),;?&=.-]+)?@)?([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))(:[0-9]{2,5})?(\/([a-z0-9+%-]\.?)+)*\/?(\?[a-z+&$_.-][a-z0-9;:@&%=+/.-/,/:]*)?(#[a-z_.-][a-z0-9+$%_.-]*)?';

	preg_match( "~^$regex$~i", $url_to_be_checked, $matches_found );

	if ( empty( $matches_found ) ) {
		return false;
	}

	return true;
}


/**
 * Used in Breeze settings to validate if the URL corresponds to the
 * added input/textarea
 * Exclude CSS must contain only .css files
 * Exclude JS must contain only .js files
 *
 * @param $file_url
 * @param string $validate
 *
 * @return bool
 */
function breeze_validate_exclude_field_by_extension( $file_url, $validate = 'css' ) {
	if ( empty( $file_url ) ) {
		return true;
	}
	if ( empty( $validate ) ) {
		return false;
	}

	$valid      = true;
	$file_path  = wp_parse_url( $file_url, PHP_URL_PATH );
	$preg_match = preg_match( '#\.' . $validate . '$#', $file_path );
	if ( empty( $preg_match ) ) {
		$valid = false;
	}

	return $valid;

}


/**
 * Function used to determine if the excluded URL contains regexp
 *
 * @param $file_url
 * @param string $validate
 *
 * @return bool
 */
function breeze_string_contains_exclude_regexp( $file_url, $validate = '(.*)' ) {
	if ( empty( $file_url ) ) {
		return false;
	}
	if ( empty( $validate ) ) {
		return false;
	}

	$valid = false;

	if ( substr_count( $file_url, $validate ) !== 0 ) {
		$valid = true; // 0 or false
	}

	return $valid;
}

/**
 * Method will prepare the URLs escaped for preg_match
 * Will return the file_url matches the pattern.
 * empty array for false,
 * aray with data for true.
 *
 * @param $file_url
 * @param $pattern
 *
 * @return false|int
 */
function breeze_file_match_pattern( $file_url, $pattern ) {
	$remove_pattern   = str_replace( '(.*)', 'REG_EXP_ALL', $pattern );
	$prepared_pattern = preg_quote( $remove_pattern, '/' );
	$pattern          = str_replace( 'REG_EXP_ALL', '(.*)', $prepared_pattern );
	$result           = preg_match( '/' . $pattern . '/', $file_url );

	return $result;
}

/**
 * Will return true/false if the cache headers exist and
 * have values HIT or MISS.
 * HIT = Varnish is enabled and age is cached
 * MISS = Varnish is disabled or the cache has been purged.
 * This method will request only the current url homepage headers
 * and if the first time is a MISS, it will try again.
 *
 * @param int $retry how many retries count.
 * @param int $time_fresh current time to make a fresh connect.
 * @param bool $use_headers To use get_headers or cURL.
 *
 * @return bool
 */
function is_varnish_cache_started( $retry = 1, $time_fresh = 0, $use_headers = false ) {
	if ( isset( $_SERVER['HTTP_X_VARNISH'] ) && is_numeric( $_SERVER['HTTP_X_VARNISH'] ) ) {
		return true;
	}

	if ( empty( $time_fresh ) ) {
		$time_fresh = time();
	}

	// Code specific for Cloudways Server.
	if ( 1 === $retry ) {
		$check_local_server = is_varnish_layer_started();
		if ( true === $check_local_server ) {
			return true;
		}
	}

	$url_ping = trim( home_url() . '?breeze_check_cache_available=' . $time_fresh );

	if ( true === $use_headers ) {

		$ssl_verification = apply_filters( 'breeze_ssl_check_certificate', true );

		if ( ! is_bool( $ssl_verification ) ) {
			$ssl_verification = true;
		}

		if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
			$ssl_verification = false;
		}
		// Making sure the request is only for HEADER info without getting the content from the page
		$context_options = array(
			'http' => array(
				'method'          => 'HEAD',
				'follow_location' => 1,
			),
			'ssl'  => array(
				'verify_peer' => $ssl_verification,
			),
		);

		stream_context_set_default( $context_options );
		$headers = get_headers( $url_ping, 1 );

		if ( empty( $headers ) ) {
			$use_headers = false;
		} else {
			$headers = array_change_key_case( $headers, CASE_LOWER );
		}
	}

	if ( false === $use_headers ) {
		$headers = breeze_get_headers_via_curl( $url_ping );
	}

	if ( empty( $headers ) ) {
		return false;
	}

	if ( true === $headers ) {
		return true;
	}

	if ( ! isset( $headers['x-cache'] ) ) {
		if ( 1 === $retry ) {
			$retry ++;

			return is_varnish_cache_started( $retry, $time_fresh, $use_headers );
		}

		return false;
	} else {
		$cache_header = strtolower( trim( $headers['x-cache'] ) );

		// After the cache is cleared, the first time the headers will say that the cache is not used
		// After the first header requests, the cache headers are formed.
		// Checking the second time will give better results.
		if ( 1 === $retry ) {
			if ( substr_count( $cache_header, 'hit' ) > 0 ) {
				return true;
			} else {
				$retry ++;

				return is_varnish_cache_started( $retry, $time_fresh, $use_headers );
			}
		} else {

			if ( substr_count( $cache_header, 'hit' ) > 0 ) {
				return true;
			}

			return false;
		}
	}
}

/**
 * Fallback function to fetch headers.
 *
 * @param string $url_ping URL from where to get the headers.
 *
 * @return array|bool
 */
function breeze_get_headers_via_curl( $url_ping = '', $return_headers = false ) {

	$ssl_verification = apply_filters( 'breeze_ssl_check_certificate', true );
	if ( ! is_bool( $ssl_verification ) ) {
		$ssl_verification = true;
	}

	if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
		$ssl_verification = false;
	}

	$connection = curl_init();
	$headers    = array();
	curl_setopt( $connection, CURLOPT_URL, $url_ping );
	curl_setopt( $connection, CURLOPT_NOBODY, true );
	curl_setopt( $connection, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $connection, CURLOPT_FOLLOWLOCATION, true ); // follow redirects
	curl_setopt( $connection, CURLOPT_SSL_VERIFYPEER, $ssl_verification );
	curl_setopt( $connection, CURLOPT_HEADER, true );// return just headers
	curl_setopt( $connection, CURLOPT_TIMEOUT, 1 );
	// this function is called by curl for each header received
	curl_setopt(
		$connection,
		CURLOPT_HEADERFUNCTION,
		function ( $curl, $header ) use ( &$headers ) {
			$len    = strlen( $header );
			$header = explode( ':', $header, 2 );
			if ( count( $header ) < 2 ) { // ignore invalid headers
				return $len;
			}

			$headers[ strtolower( trim( $header[0] ) ) ][] = trim( $header[1] );

			return $len;
		}
	);

	curl_exec( $connection );
	curl_close( $connection );

	// if TRUE, just return the headers.
	if ( true === $return_headers ) {
		return $headers;
	}

	// x-cacheable
	if ( isset( $headers['x-cacheable'] ) ) {
		$x_cacheable_value = array_pop( $headers['x-cacheable'] );
		if ( 'yes' === strtolower( $x_cacheable_value ) || 'short' === strtolower( $x_cacheable_value ) ) {
			return true;
		}
	}

	if ( isset( $headers['x-cache'] ) ) {
		$x_cache_value = array_pop( $headers['x-cache'] );

		return array( 'x-cache' => $x_cache_value );
	}

	return false;

}

/**
 * Determine if the Varnish server is up and running.
 *
 * CloudWays:
 * At server root level Varnish being disabled.
 * HTTP_X_VARNISH - does not exist or is NULL
 * HTTP_X_APPLICATION - contains varnishpass
 *
 * At Application level ( WP install ) - Varnish ON
 * At server level is ON
 * HTTP_X_VARNISH - has random numerical value
 * HTTP_X_APPLICATION - contains value different from varnishpass, usually application name.
 *
 * At Application level ( WP install ) - Varnish OFF
 * At server level is ON
 * HTTP_X_VARNISH - has random numerical value
 * HTTP_X_APPLICATION - contains value varnishpass
 *
 * @since 1.1.3
 */
function is_varnish_layer_started() {
	$data = $_SERVER;

	if ( ! isset( $data['HTTP_X_VARNISH'] ) ) {
		return false;
	}

	if ( isset( $data['HTTP_X_VARNISH'] ) && isset( $data['HTTP_X_APPLICATION'] ) ) {

		if ( 'varnishpass' === trim( $data['HTTP_X_APPLICATION'] ) ) {
			return false;
		} elseif ( 'bypass' === trim( $data['HTTP_X_APPLICATION'] ) ) {
			return false;
		} elseif ( is_null( $data['HTTP_X_APPLICATION'] ) ) {
			return false;
		}
	}

	if ( ! isset( $data['HTTP_X_APPLICATION'] ) ) {
		return false;
	}

	return true;
}

/**
 * Handles file writing.
 * Using fopen() si a lot faster than file_put_contents().
 *
 * @param string $file_path
 * @param string $content
 *
 * @return bool
 * @since 1.1.3
 */
function breeze_read_write_file( $file_path = '', $content = '' ) {
	if ( empty( $file_path ) ) {
		return false;
	}

	if ( ( $handler = @fopen( $file_path, 'w' ) ) !== false ) { // phpcs:ignore
		if ( ( @fwrite( $handler, $content ) ) !== false ) { // phpcs:ignore
			@fclose( $handler ); // phpcs:ignore
		}
	}

}


function breeze_lock_cache_process( $path = '' ) {
	$filename    = 'process.lock';
	$create_lock = fopen( $path . $filename, 'w' );
	if ( false === $create_lock ) {
		return false;
	}
	fclose( $create_lock );

	return true;
}

function breeze_is_process_locked( $path = '' ) {
	$filename = 'process.lock';
	if ( file_exists( $path . $filename ) ) {
		return true;
	}

	return false;
}

function breeze_unlock_process( $path = '' ) {
	$filename = 'process.lock';
	if ( file_exists( $path . $filename ) ) {
		@unlink( $path . $filename );

		return true;
	}

	return false;
}

function multisite_blog_id_config() {
	global $blog_id;

	$blog_id_requested = isset( $GLOBALS['breeze_config']['blog_id'] ) ? $GLOBALS['breeze_config']['blog_id'] : 0;
	if ( ! empty( $blog_id_requested ) ) {
		return $blog_id_requested;
	}

	if ( ! empty( $blog_id ) ) {

	}
}

/**
 * Purges the cache for a given URL.
 * Varnish cache and local cache.
 *
 * @param string $url The url for which to purge the cache.
 * @param false $purge_varnish If the check was already done for Varnish server On/OFF set to true.
 * @param bool $check_varnish If the check for Varnish was not done, set to true to check Varnish server status inside the function.
 *
 * @since 1.1.10
 */
function breeze_varnish_purge_cache( $url = '', $purge_varnish = false, $check_varnish = true ) {
	global $wp_filesystem;

	// Making sure the filesystem is loaded.
	if ( empty( $wp_filesystem ) ) {
		require_once( ABSPATH . '/wp-admin/includes/file.php' );
		WP_Filesystem();
	}

	// Clear the local cache using the product URL.
	if ( ! empty( $url ) && $wp_filesystem->exists( breeze_get_cache_base_path() . md5( $url ) ) ) {
		$wp_filesystem->rmdir( breeze_get_cache_base_path() . md5( $url ), true );
	}

	if ( false === $purge_varnish && true === $check_varnish ) {
		// Checks if the Varnish server is ON.
		$do_varnish_purge = is_varnish_cache_started();

		if ( false === $do_varnish_purge ) {
			return;
		}
	}

	if ( false === $purge_varnish && false === $check_varnish ) {
		return;
	}

	$parse_url = parse_url( $url );
	$pregex    = '';
	// Default method is URLPURGE to purge only one object, this method is specific to cloudways configuration
	$purge_method = 'URLPURGE';
	// Use PURGE method when purging all site
	if ( isset( $parse_url['query'] ) && ( 'breeze' === strtolower( $parse_url['query'] ) ) ) {
		// The regex is not needed as cloudways configuration purge all the cache of the domain when a PURGE is done
		$pregex       = '.*';
		$purge_method = 'PURGE';
	}
	// Determine the path
	$url_path = '';
	if ( isset( $parse_url['path'] ) ) {
		$url_path = $parse_url['path'];
	}
	// Determine the schema
	$schema = 'http://';
	if ( isset( $parse_url['scheme'] ) ) {
		$schema = $parse_url['scheme'] . '://';
	}
	// Determine the host
	$host = $parse_url['host'];

	$varnish_ip   = Breeze_Options_Reader::get_option_value( 'breeze-varnish-server-ip' );
	$varnish_host = isset( $varnish_ip ) ? $varnish_ip : '127.0.0.1';
	$purgeme      = $varnish_host . $url_path . $pregex;
	if ( ! empty( $parse_url['query'] ) && 'breeze' !== strtolower( $parse_url['query'] ) ) {
		$purgeme .= '?' . $parse_url['query'];
	}


	$ssl_verification = apply_filters( 'breeze_ssl_check_certificate', true );

	if ( ! is_bool( $ssl_verification ) ) {
		$ssl_verification = true;
	}

	if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
		$ssl_verification = false;
	}

	$request_args = array(
		'method'    => $purge_method,
		'headers'   => array(
			'Host'       => $host,
			'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
		),
		'sslverify' => $ssl_verification,
	);
	$response     = wp_remote_request( $schema . $purgeme, $request_args );
	if ( is_wp_error( $response ) || 200 !== (int) $response['response']['code'] ) {
		if ( 'https://' === $schema ) {
			$schema = 'http://';
		} else {
			$schema = 'https://';
		}
		wp_remote_request( $schema . $purgeme, $request_args );
	}
}

/**
 * Will ignore the files added into $minified_already array so that these files will not be minified twice.
 *
 * @param string $script_path local script path.
 *
 * @return bool
 * @since 1.1.9
 */
function breeze_libraries_already_minified( $script_path = '' ) {
	if ( empty( $script_path ) ) {
		return false;
	}

	$minified_already = array(
		'woocommerce-bookings/dist/frontend.js',
	);

	$library = explode( '/plugins/', $script_path );

	if ( empty( $library ) || ! isset( $library[1] ) ) {
		return false;
	}

	$library_path = $library[1];

	if ( in_array( $library_path, $minified_already ) ) {
		return true;
	}

	return false;

}

add_filter( 'breeze_js_ignore_minify', 'breeze_libraries_already_minified' );

/**
 * Will check if there are any differences between saved option and default.
 *
 * if returns false, the nno changes occurred.
 * If returns true, then there are differences.
 *
 * @param bool $is_network if it's called from multisite network.
 *
 * @return bool
 * @since 1.2.1
 */
function breeze_is_delayjs_changed( $is_network = false, $blog_id = 0, $root = false ) {
	if ( true === $is_network ) {
		$saved_options = get_site_option( 'breeze_advanced_settings' );
	} elseif ( true === $root ) {
		$saved_options = get_blog_option( $blog_id, 'breeze_advanced_settings' );
	} else {
		$saved_options = get_option( 'breeze_advanced_settings' );
	}


	if ( ! isset( $saved_options['breeze-delay-js-scripts'] ) ) {
		return true;
	}

	if ( empty( $saved_options['breeze-delay-js-scripts'] ) ) {
		return true;
	}

	$saved_options['breeze-delay-js-scripts'] = array_filter( $saved_options['breeze-delay-js-scripts'] );

	$default_values = array(
		'gtag',
		'document.write',
		'html5.js',
		'show_ads.js',
		'google_ad',
		'blogcatalog.com/w',
		'tweetmeme.com/i',
		'mybloglog.com/',
		'histats.com/js',
		'ads.smowtion.com/ad.js',
		'statcounter.com/counter/counter.js',
		'widgets.amung.us',
		'ws.amazon.com/widgets',
		'media.fastclick.net',
		'/ads/',
		'comment-form-quicktags/quicktags.php',
		'edToolbar',
		'intensedebate.com',
		'scripts.chitika.net/',
		'_gaq.push',
		'jotform.com/',
		'admin-bar.min.js',
		'GoogleAnalyticsObject',
		'plupload.full.min.js',
		'syntaxhighlighter',
		'adsbygoogle',
		'gist.github.com',
		'_stq',
		'nonce',
		'post_id',
		'data-noptimize',
		'googletagmanager',
	);

	$differences   = array_diff( $saved_options['breeze-delay-js-scripts'], $default_values );
	$differences_2 = array_diff( $default_values, $saved_options['breeze-delay-js-scripts'] );

	if ( empty( $differences ) && empty( $differences_2 ) ) {
		return false;
	}

	return true;
}

/**
 * The Page is AMP so don't minifiy stuff.
 * @return bool
 * @since 1.2.3
 */
function breeze_is_amp_page() {
	if ( function_exists( 'amp_is_request' ) && amp_is_request() ) {
		return true;
	}

	return false;
}


function breeze_migrate_old_settings( $is_sigle = true, $subsite_id = 0, $is_root = false ) {
	//If this is a single site.
	if ( true === $is_sigle ) {
		// if the option exists, then we do not need to do anything.
		// This option is not available to Breeze versions < 2.0.0.
		$new_option = breeze_get_option( 'file_settings', true );
		if ( ! empty( $new_option ) ) {
			return;
		}

		$get_current_basic    = breeze_get_option( 'basic_settings', true );
		$get_current_advanced = breeze_get_option( 'advanced_settings', true );
		$get_current_varnish  = breeze_get_option( 'varnish_cache', true );
		$get_current_cdn      = breeze_get_option( 'cdn_integration', true );
		$options              = array();
	}

	// if multisite then run code for sub-site.
	if ( false === $is_sigle && ! empty( $subsite_id ) ) {
		$subsite_id = absint( $subsite_id );
		// if the option exists, then we do not need to do anything.
		// This option is not available to Breeze versions < 2.0.0.
		$new_option = get_blog_option( $subsite_id, 'breeze_file_settings', array() );
		if ( ! empty( $new_option ) ) {
			return;
		}

		$get_current_basic    = get_blog_option( $subsite_id, 'breeze_basic_settings', array() );
		$get_current_advanced = get_blog_option( $subsite_id, 'breeze_advanced_settings', array() );
		$get_current_varnish  = get_blog_option( $subsite_id, 'breeze_varnish_cache', array() );
		$get_current_cdn      = get_blog_option( $subsite_id, 'breeze_cdn_integration', array() );
	}

	// if multisite and network level.
	if ( true === $is_root ) {
		$new_option = get_site_option( 'breeze_file_settings', array() );
		if ( ! empty( $new_option ) ) {
			return;
		}

		$get_current_basic    = get_site_option( 'breeze_basic_settings', array() );
		$get_current_advanced = get_site_option( 'breeze_advanced_settings', array() );
		$get_current_varnish  = get_site_option( 'breeze_varnish_cache', array() );
		$get_current_cdn      = get_site_option( 'breeze_cdn_integration', array() );
	}

	if ( ! empty( $get_current_basic ) ) {
		foreach ( $get_current_basic as $option_name => $value ) {
			$options[ $option_name ] = $value;
		}
	}

	if ( ! empty( $get_current_advanced ) ) {
		foreach ( $get_current_advanced as $option_name => $value ) {
			$options[ $option_name ] = $value;
		}
	}

	if ( ! empty( $get_current_varnish ) ) {
		foreach ( $get_current_varnish as $option_name => $value ) {
			$options[ $option_name ] = $value;
		}
	}

	if ( ! empty( $get_current_cdn ) ) {
		foreach ( $get_current_cdn as $option_name => $value ) {
			$options[ $option_name ] = $value;
		}
	}

	$basic = array(
		'breeze-active'           => ( isset( $options['breeze-active'] ) ? $options['breeze-active'] : '1' ),
		'breeze-cross-origin'     => ( isset( $options['breeze-cross-origin'] ) ? $options['breeze-cross-origin'] : '0' ),
		'breeze-disable-admin'    => ( isset( $options['breeze-disable-admin'] ) ? $options['breeze-disable-admin'] : array() ),
		'breeze-gzip-compression' => ( isset( $options['breeze-gzip-compression'] ) ? $options['breeze-gzip-compression'] : '1' ),
		'breeze-browser-cache'    => ( isset( $options['breeze-browser-cache'] ) ? $options['breeze-browser-cache'] : '1' ),
		'breeze-lazy-load'        => ( isset( $options['breeze-lazy-load'] ) ? $options['breeze-lazy-load'] : '0' ),
		'breeze-lazy-load-native' => ( isset( $options['breeze-lazy-load-native'] ) ? $options['breeze-lazy-load-native'] : '0' ),
		'breeze-desktop-cache'    => '1',
		'breeze-mobile-cache'     => '1',
		'breeze-display-clean'    => '1',
		'breeze-ttl'              => ( isset( $options['breeze-ttl'] ) ? $options['breeze-ttl'] : 1440 ),
	);

	$file = array(
		'breeze-minify-html'        => ( isset( $options['breeze-minify-html'] ) ? $options['breeze-minify-html'] : '0' ),
		// --
		'breeze-minify-css'         => ( isset( $options['breeze-minify-css'] ) ? $options['breeze-minify-css'] : '0' ),
		'breeze-font-display-swap'  => ( isset( $options['breeze-font-display-swap'] ) ? $options['breeze-font-display-swap'] : '0' ),
		'breeze-group-css'          => ( isset( $options['breeze-group-css'] ) ? $options['breeze-group-css'] : '0' ),
		'breeze-exclude-css'        => ( isset( $options['breeze-exclude-css'] ) ? $options['breeze-exclude-css'] : array() ),
		'breeze-include-inline-css' => ( isset( $options['breeze-include-inline-css'] ) ? $options['breeze-include-inline-css'] : '0' ),
		// --
		'breeze-minify-js'          => ( isset( $options['breeze-minify-js'] ) ? $options['breeze-minify-js'] : '0' ),
		'breeze-group-js'           => ( isset( $options['breeze-group-js'] ) ? $options['breeze-group-js'] : '0' ),
		'breeze-include-inline-js'  => ( isset( $options['breeze-include-inline-js'] ) ? $options['breeze-include-inline-js'] : '0' ),
		'breeze-exclude-js'         => ( isset( $options['breeze-exclude-js'] ) ? $options['breeze-exclude-js'] : array() ),
		'breeze-move-to-footer-js'  => ( isset( $options['breeze-move-to-footer-js'] ) ? $options['breeze-move-to-footer-js'] : array() ),
		'breeze-defer-js'           => ( isset( $options['breeze-defer-js'] ) ? $options['breeze-defer-js'] : array() ),
		'breeze-delay-all-js'       => ( isset( $options['breeze-delay-all-js'] ) ? $options['breeze-delay-all-js'] : '0' ),
		'breeze-enable-js-delay'    => ( isset( $options['breeze-enable-js-delay'] ) ? $options['breeze-enable-js-delay'] : '0' ),
		'breeze-delay-js-scripts'   => ( isset( $options['breeze-delay-js-scripts'] ) ? $options['breeze-delay-js-scripts'] : array() ),
		'no-breeze-no-delay-js'     => ( isset( $options['no-breeze-no-delay-js'] ) ? $options['no-breeze-no-delay-js'] : array() ),

	);

	$preload = array(
		'breeze-preload-fonts' => ( isset( $options['breeze-preload-fonts'] ) ? $options['breeze-preload-fonts'] : array() ),
		'breeze-preload-links' => ( isset( $options['breeze-preload-links'] ) ? $options['breeze-preload-links'] : '1' ),
	);

	$advanced = array(
		'breeze-exclude-urls'  => ( isset( $options['breeze-exclude-urls'] ) ? $options['breeze-exclude-urls'] : array() ),
		'cached-query-strings' => ( isset( $options['cached-query-strings'] ) ? $options['cached-query-strings'] : array() ),
		'breeze-wp-emoji'      => ( isset( $options['breeze-wp-emoji'] ) ? $options['breeze-wp-emoji'] : '0' ),
	);

	$wp_content = substr( WP_CONTENT_DIR, strlen( ABSPATH ) );
	$cdn        = array(
		'cdn-active'          => ( isset( $options['cdn-active'] ) ? $options['cdn-active'] : '0' ),
		'cdn-relative-path'   => ( isset( $options['cdn-relative-path'] ) ? $options['cdn-relative-path'] : '1' ),
		'cdn-url'             => ( isset( $options['cdn-url'] ) ? $options['cdn-url'] : '' ),
		'cdn-content'         => ( isset( $options['cdn-content'] ) ? $options['cdn-content'] : array( 'wp-includes', $wp_content ) ),
		'cdn-exclude-content' => ( isset( $options['cdn-exclude-content'] ) ? $options['cdn-exclude-content'] : array( '.php' ) ),
	);

	$varnish = array(
		'auto-purge-varnish'       => ( isset( $options['auto-purge-varnish'] ) ? $options['auto-purge-varnish'] : '1' ),
		'breeze-varnish-server-ip' => ( isset( $options['breeze-varnish-server-ip'] ) ? $options['breeze-varnish-server-ip'] : '127.0.0.1' ),
	);

	if ( true === $is_sigle ) {
		breeze_update_option( 'basic_settings', $basic, true );
		breeze_update_option( 'file_settings', $file, true );
		breeze_update_option( 'preload_settings', $preload, true );
		breeze_update_option( 'advanced_settings', $advanced, true );
		breeze_update_option( 'cdn_integration', $cdn, true );
		breeze_update_option( 'varnish_cache', $varnish, true );
	}

	if ( false === $is_sigle && ! empty( $subsite_id ) ) {
		update_blog_option( $subsite_id, 'breeze_basic_settings', $basic );
		update_blog_option( $subsite_id, 'breeze_file_settings', $file );
		update_blog_option( $subsite_id, 'breeze_preload_settings', $preload );
		update_blog_option( $subsite_id, 'breeze_advanced_settings', $advanced );
		update_blog_option( $subsite_id, 'breeze_cdn_integration', $cdn );
		update_blog_option( $subsite_id, 'breeze_varnish_cache', $varnish );
	}

	if ( true === $is_root ) {
		update_site_option( 'breeze_basic_settings', $basic );
		update_site_option( 'breeze_file_settings', $file );
		update_site_option( 'breeze_preload_settings', $preload );
		update_site_option( 'breeze_advanced_settings', $advanced );
		update_site_option( 'breeze_cdn_integration', $cdn );
		update_site_option( 'breeze_varnish_cache', $varnish );
	}
}

function breeze_rtrim_urls( $url ) {
	if ( empty( $url ) ) {
		$url = '';
	}

	return rtrim( $url, '/' );
}

/**
 * Check the CDN url to see if it's safe to use.
 *
 * @param $cdn_url
 *
 * @return false|string
 * @since 2.0.11
 */
function breeze_static_check_cdn_url( $cdn_url ) {
	if ( empty( trim( $cdn_url ) ) ) {
		return false;
	}

	$breeze_user_agent = 'breeze-cdn-check-help-user';

	$verify_host      = 2;
	$ssl_verification = apply_filters( 'breeze_ssl_check_certificate', true );
	if ( ! is_bool( $ssl_verification ) ) {
		$ssl_verification = true;
	}

	if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
		$ssl_verification = false;
		$verify_host      = 0;
	}


	$cdn_url = ltrim( $cdn_url, 'https:' );
	$cdn_url = 'https:' . $cdn_url;

	if ( false === filter_var( $cdn_url, FILTER_VALIDATE_URL ) ) {
		return false;
	}

	$connection = curl_init( 'https://sitecheck.sucuri.net/api/v3/?scan=' . $cdn_url );
	curl_setopt( $connection, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $connection, CURLOPT_SSL_VERIFYHOST, $verify_host );
	curl_setopt( $connection, CURLOPT_SSL_VERIFYPEER, $ssl_verification );
	curl_setopt( $connection, CURLOPT_USERAGENT, $breeze_user_agent );
	curl_setopt( $connection, CURLOPT_REFERER, home_url() );

	/**
	 * Accept up to 3 maximum redirects before cutting the connection.
	 */
	curl_setopt( $connection, CURLOPT_MAXREDIRS, 3 );
	curl_setopt( $connection, CURLOPT_FOLLOWLOCATION, true );
	$the_json = curl_exec( $connection );
	curl_close( $connection );

	$is_json = json_decode( $the_json, true );
	if ( $is_json === null && json_last_error() !== JSON_ERROR_NONE ) {
		// incorrect data show error message
		$is_safe = false;
	} else {
		// decoded with success
		$is_safe = false;
		if ( isset( $is_json['warnings'], $is_json['warnings']['security'], $is_json['warnings']['security']['malware'] ) ) {
			$is_safe = 'warning';

		}
	}

	return $is_safe;
}

/**
 * Fetch homepage headers by cURL ping no cache.
 *
* @param int $retry How many retries.
* @param int $time_fresh If you want to use a custom number instead of time.
* @param boolean $use_headers whether to use the function stream_context_set_default
*
* @return bool|array
 */
function breeze_helper_fetch_headers( int $retry = 1, int $time_fresh = 0, bool $use_headers = false ){
	// Code specific for Cloudways Server.

	// use time to get un-cached version.
	if ( empty( $time_fresh ) ) {
		$time_fresh = time();
	}

	$url_ping = trim( trailingslashit( home_url() ) . '?no-cache=' . $time_fresh );
	$url_ping = str_replace( 'http://', 'https://', $url_ping );

	if ( true === $use_headers ) {

		$ssl_verification = apply_filters( 'breeze_ssl_check_certificate', true );

		if ( ! is_bool( $ssl_verification ) ) {
			$ssl_verification = true;
		}

		if ( defined( 'WP_DEBUG' ) && true === WP_DEBUG ) {
			$ssl_verification = false;
		}
		// Making sure the request is only for HEADER info without getting the content from the page
		$context_options = array(
			'http' => array(
				'method'          => 'HEAD',
				'follow_location' => 1,
			),
			'ssl'  => array(
				'verify_peer' => $ssl_verification,
			),
		);

		stream_context_set_default( $context_options );
		$headers = get_headers( $url_ping, 1 );
		if ( empty( $headers ) ) {
			$use_headers = false;
		} else {
			$headers = array_change_key_case( $headers, CASE_LOWER );
		}
	}

	if ( false === $use_headers ) {

		$curl = curl_init();

		curl_setopt_array(
			$curl,
			array(
				CURLOPT_URL            => $url_ping,
				CURLOPT_RETURNTRANSFER => true,
				CURLOPT_HEADER         => true,
				CURLOPT_NOBODY         => true,
				CURLOPT_ENCODING       => '',
				CURLOPT_MAXREDIRS      => 10,
				CURLOPT_TIMEOUT        => 0,
				CURLOPT_FOLLOWLOCATION => true,
				CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
				CURLOPT_CUSTOMREQUEST  => 'GET',
			)
		);
		// this function is called by curl for each header received
		curl_setopt(
			$curl,
			CURLOPT_HEADERFUNCTION,
			function ( $curl, $header ) use ( &$curl_header ) {
				$len    = strlen( $header );
				$header = explode( ':', $header, 2 );
				if ( count( $header ) < 2 ) { // ignore invalid headers
					return $len;
				}

				$curl_header[ strtolower( trim( $header[0] ) ) ][] = trim( $header[1] );

				return $len;
			}
		);

		curl_exec( $curl );
		curl_close( $curl );
		$headers = array();
		if ( is_array( $curl_header ) && ! empty( $curl_header ) ) {
			foreach($curl_header as $header_key => $header_array_value){
				if(is_array($header_array_value)){
					$header_array_value = array_pop( $header_array_value);
				}
				$headers[$header_key] = $header_array_value;
			}
		}
	}

	if ( empty( $headers ) ) {
		return false;
	}

	return $headers;
}

Filemanager

Name Type Size Permission Actions
cache Folder 0755
cdn-integration Folder 0755
compatibility Folder 0755
helpers Folder 0755
minification Folder 0755
plugin-incompatibility Folder 0755
wp-cli Folder 0755
breeze-admin.php File 39.48 KB 0644
breeze-configuration.php File 72.97 KB 0644
class-breeze-api.php File 1.21 KB 0644
class-breeze-cache-cronjobs.php File 6.03 KB 0644
class-breeze-cloudflare-helper.php File 12.74 KB 0644
class-breeze-disable-emoji-option.php File 3.11 KB 0644
class-breeze-dns-prefetch.php File 1.45 KB 0644
class-breeze-file-permissions.php File 8.26 KB 0644
class-breeze-heartbeat-settings.php File 4.73 KB 0644
class-breeze-lazy-load.php File 10.33 KB 0644
class-breeze-options-reader.php File 3.17 KB 0644
class-breeze-prefetch.php File 1.93 KB 0644
class-breeze-preload-fonts.php File 1.53 KB 0644
class-breeze-query-strings-rules.php File 11.18 KB 0644
class-breeze-store-files-locally.php File 8.94 KB 0644
class-breeze-woocommerce-product-cache.php File 2.54 KB 0644
class-exclude-pages-by-shortcode.php File 3.06 KB 0644
functions.php File 24.62 KB 0644
helpers.php File 34.84 KB 0644