<?php
/*
Plugin Name: WP Rocket 
Plugin URI: https://wp-rocket.me
Description: The best WordPress performance plugin.- By www.kejianet.cn
Version: 2.9.8.1
Code Name: Iridonia
Author: WP Media
Contributors: Jonathan Buttigieg, Julio Potier, Remy Perona
Author URI: http://wp-media.me
Licence: GPLv2

Text Domain: rocket
Domain Path: languages

Copyright 2013-2016 WP Rocket
*/

defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );

// Rocket defines
define( 'WP_ROCKET_VERSION'             , '2.9.8.1' );
define( 'WP_ROCKET_PRIVATE_KEY'         , '2b35dec65674314f5d8d9fe900dc03b8');
define( 'WP_ROCKET_SLUG'                , 'wp_rocket_settings' );
define( 'WP_ROCKET_WEB_MAIN'            , 'https://wp-rocket.me/');
define( 'WP_ROCKET_WEB_API'             , WP_ROCKET_WEB_MAIN . 'api/wp-rocket/' );
define( 'WP_ROCKET_WEB_CHECK'           , WP_ROCKET_WEB_MAIN . 'check_update.php' );
define( 'WP_ROCKET_WEB_VALID'           , WP_ROCKET_WEB_MAIN . 'valid_key.php' );
define( 'WP_ROCKET_WEB_INFO'            , WP_ROCKET_WEB_MAIN . 'plugin_information.php' );
define( 'WP_ROCKET_WEB_SUPPORT'         , WP_ROCKET_WEB_MAIN . 'forums/' );
define( 'WP_ROCKET_BOT_URL'             , 'http://bot.wp-rocket.me/launch.php' );
define( 'WP_ROCKET_FILE'                , __FILE__ );
define( 'WP_ROCKET_PATH'                , realpath( plugin_dir_path( WP_ROCKET_FILE ) ) . '/' );
define( 'WP_ROCKET_INC_PATH'            , realpath( WP_ROCKET_PATH . 'inc/' ) . '/' );
define( 'WP_ROCKET_FRONT_PATH'          , realpath( WP_ROCKET_INC_PATH . 'front/' ) . '/' );
define( 'WP_ROCKET_ADMIN_PATH'          , realpath( WP_ROCKET_INC_PATH . 'admin' ) . '/' );
define( 'WP_ROCKET_ADMIN_UI_PATH'       , realpath( WP_ROCKET_ADMIN_PATH . 'ui' ) . '/' );
define( 'WP_ROCKET_ADMIN_UI_MODULES_PATH', realpath( WP_ROCKET_ADMIN_UI_PATH . 'modules' ) . '/' );
define( 'WP_ROCKET_COMMON_PATH'         , realpath( WP_ROCKET_INC_PATH . 'common' ) . '/' );
define( 'WP_ROCKET_CLASSES_PATH'      , realpath( WP_ROCKET_INC_PATH . 'classes' ) . '/' );
define( 'WP_ROCKET_FUNCTIONS_PATH'      , realpath( WP_ROCKET_INC_PATH . 'functions' ) . '/' );
define( 'WP_ROCKET_VENDORS_PATH'      	, realpath( WP_ROCKET_INC_PATH . 'vendors' ) . '/' );
define( 'WP_ROCKET_3RD_PARTY_PATH'   	, realpath( WP_ROCKET_INC_PATH . '3rd-party' ) . '/' );
define( 'WP_ROCKET_CONFIG_PATH'         , WP_CONTENT_DIR . '/wp-rocket-config/' );
define( 'WP_ROCKET_CACHE_PATH'          , WP_CONTENT_DIR . '/cache/wp-rocket/' );
define( 'WP_ROCKET_MINIFY_CACHE_PATH'   , WP_CONTENT_DIR . '/cache/min/' );
define( 'WP_ROCKET_CACHE_BUSTING_PATH'  , WP_CONTENT_DIR . '/cache/busting/' );
define( 'WP_ROCKET_URL'                 , plugin_dir_url( WP_ROCKET_FILE ) );
define( 'WP_ROCKET_INC_URL'             , WP_ROCKET_URL . 'inc/' );
define( 'WP_ROCKET_FRONT_URL'           , WP_ROCKET_INC_URL . 'front/' );
define( 'WP_ROCKET_FRONT_JS_URL'        , WP_ROCKET_FRONT_URL . 'js/' );
define( 'WP_ROCKET_LAB_JS_VERSION'      , '2.0.3' );
define( 'WP_ROCKET_LAZYLOAD_JS_VERSION' , '1.0.5' );
define( 'WP_ROCKET_ADMIN_URL'           , WP_ROCKET_INC_URL . 'admin/' );
define( 'WP_ROCKET_ADMIN_UI_URL'        , WP_ROCKET_ADMIN_URL . 'ui/' );
define( 'WP_ROCKET_ADMIN_UI_JS_URL'     , WP_ROCKET_ADMIN_UI_URL . 'js/' );
define( 'WP_ROCKET_ADMIN_UI_CSS_URL'    , WP_ROCKET_ADMIN_UI_URL . 'css/' );
define( 'WP_ROCKET_ADMIN_UI_IMG_URL'    , WP_ROCKET_ADMIN_UI_URL . 'img/' );
define( 'WP_ROCKET_CACHE_URL'           , WP_CONTENT_URL . '/cache/wp-rocket/' );
define( 'WP_ROCKET_MINIFY_CACHE_URL'    , WP_CONTENT_URL . '/cache/min/' );
define( 'WP_ROCKET_CACHE_BUSTING_URL'   , WP_CONTENT_URL . '/cache/busting/' );
if ( ! defined( 'CHMOD_WP_ROCKET_CACHE_DIRS' ) ) {
    define( 'CHMOD_WP_ROCKET_CACHE_DIRS', 0755 );
}
if ( ! defined( 'WP_ROCKET_LASTVERSION' ) ) {
    define( 'WP_ROCKET_LASTVERSION', '2.8.23' );
}

require( WP_ROCKET_INC_PATH	. 'compat.php' );

/*
 * Tell WP what to do when plugin is loaded
 *
 * @since 1.0
 */
add_action( 'plugins_loaded', 'rocket_init' );
function rocket_init()
{
    // Load translations from the languages directory.
    $locale = get_locale();

    // This filter is documented in /wp-includes/l10n.php.
    $locale = apply_filters( 'plugin_locale', $locale, 'rocket' );
    load_textdomain( 'rocket', WP_LANG_DIR . '/plugins/wp-rocket-' . $locale . '.mo' );

    load_plugin_textdomain( 'rocket', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );

    // Nothing to do if autosave
    if ( defined( 'DOING_AUTOSAVE' ) ) {
        return;
    }

	// Nothing to do if XMLRPC request
	if ( defined( 'XMLRPC_REQUEST' ) ) {
		return;
	}

    // Necessary to call correctly WP Rocket Bot for cache json
    global $do_rocket_bot_cache_json;
    $do_rocket_bot_cache_json = false;

    // Call defines, classes and functions
    require( WP_ROCKET_FUNCTIONS_PATH . 'options.php' );

    // Last constants
    define( 'WP_ROCKET_PLUGIN_NAME', get_rocket_option( 'wl_plugin_name', 'WP Rocket' ) );
    define( 'WP_ROCKET_PLUGIN_SLUG', sanitize_key( WP_ROCKET_PLUGIN_NAME ) );

    // Call defines,  classes and functions
    require( WP_ROCKET_CLASSES_PATH   . 'background-processing.php' );
	require( WP_ROCKET_FUNCTIONS_PATH	. 'files.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'posts.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'admin.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'formatting.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'cdn.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'minify.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'plugins.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'i18n.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'bots.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'htaccess.php' );
    require( WP_ROCKET_FUNCTIONS_PATH	. 'varnish.php' );
    require( WP_ROCKET_INC_PATH			. 'deprecated.php' );
    require( WP_ROCKET_FRONT_PATH		. 'plugin-compatibility.php' );
    require( WP_ROCKET_FRONT_PATH		. 'theme-compatibility.php' );
    require( WP_ROCKET_3RD_PARTY_PATH	. '3rd-party.php' );
    require( WP_ROCKET_COMMON_PATH		. 'admin-bar.php' );
    require( WP_ROCKET_COMMON_PATH		. 'updater.php' );
    require( WP_ROCKET_COMMON_PATH		. 'emoji.php' );
	require( dirname( __FILE__ )		. '/licence-data.php' );

    if( rocket_valid_key() ) {
        require( WP_ROCKET_COMMON_PATH . 'purge.php' );
        require( WP_ROCKET_COMMON_PATH . 'cron.php' );

        if ( 0 < (int) get_rocket_option( 'cdn' ) ) {
        	require( WP_ROCKET_FRONT_PATH . 'cdn.php' );
        }

		if ( 0 < (int) get_rocket_option( 'do_cloudflare' ) && phpversion() >= '5.4' ) {
    		require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Exception/AuthenticationException.php' );
            require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Exception/UnauthorizedException.php' );
            require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Api.php' );
            require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/IPs.php' );
            require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone.php' );
            require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone/Cache.php' );
            require( WP_ROCKET_VENDORS_PATH . 'CloudFlare/Zone/Settings.php' );
            require( WP_ROCKET_FUNCTIONS_PATH	. 'cloudflare.php' );
			require( WP_ROCKET_VENDORS_PATH	. 'ip_in_range.php' );
			require( WP_ROCKET_COMMON_PATH 	. 'cloudflare.php' );
		}

        if ( is_multisite() && defined( 'SUNRISE' ) && SUNRISE == 'on' && function_exists( 'domain_mapping_siteurl' ) ) {
	        require( WP_ROCKET_INC_PATH . '/domain-mapping.php' );
        }
    }

    if ( is_admin() ) {
        require( WP_ROCKET_ADMIN_PATH . 'ajax.php' );
        require( WP_ROCKET_ADMIN_PATH . 'upgrader.php' );
        require( WP_ROCKET_ADMIN_PATH . 'updater.php' );
        require( WP_ROCKET_ADMIN_PATH . 'class-repeater-field.php' );
        require( WP_ROCKET_ADMIN_PATH . 'options.php' );
        require( WP_ROCKET_ADMIN_PATH . 'admin.php' );
        require( WP_ROCKET_ADMIN_PATH . 'plugin-compatibility.php' );
        require( WP_ROCKET_ADMIN_UI_PATH . 'enqueue.php' );
        require( WP_ROCKET_ADMIN_UI_PATH . 'notices.php' );
        require( WP_ROCKET_ADMIN_UI_PATH . 'meta-boxes.php' );
    } else if ( rocket_valid_key() ) {
        require( WP_ROCKET_FRONT_PATH . 'minify.php' );
        require( WP_ROCKET_FRONT_PATH . 'cookie.php' );
        require( WP_ROCKET_FRONT_PATH . 'images.php' );
        require( WP_ROCKET_FRONT_PATH . 'enqueue.php' );
        require( WP_ROCKET_FRONT_PATH . 'dns-prefetch.php' );

        if ( get_rocket_option( 'deferred_js_files' ) ) {
	       require( WP_ROCKET_FRONT_PATH . 'deferred-js.php' );
        }

		// Don't insert the LazyLoad file if Rocket LazyLoad is activated
        if ( ! rocket_is_plugin_active( 'rocket-lazy-load/rocket-lazy-load.php' ) ) {
	       require( WP_ROCKET_FRONT_PATH . 'lazyload.php' );
        }

        require( WP_ROCKET_FRONT_PATH . 'protocol.php' );
    }

    // You can hook this to trigger any action when WP Rocket is correctly loaded, so, not in AUTOSAVE mode
	if ( rocket_valid_key() ) {
		/**
		 * Fires when WP Rocket is correctly loaded
		 *
		 * @since 1.0
		*/
		do_action( 'wp_rocket_loaded' );
    }
}

/*
 * Tell WP what to do when plugin is deactivated
 *
 * @since 1.0
 */
register_deactivation_hook( __FILE__, 'rocket_deactivation' );
function rocket_deactivation()
{
    if ( ! isset( $_GET['rocket_nonce'] ) || ! wp_verify_nonce( $_GET['rocket_nonce'], 'force_deactivation' ) ) {
      	global $is_apache;
        $causes = array();

        // .htaccess problem
        if ( $is_apache && ! is_writable( get_home_path() . '.htaccess' ) ) {
            $causes[] = 'htaccess';
        }

        // wp-config problem
        if ( ! is_writable( rocket_find_wpconfig_path() ) ) {
            $causes[] = 'wpconfig';
        }

		if ( count( $causes ) ) {
	        set_transient( $GLOBALS['current_user']->ID . '_donotdeactivaterocket', $causes );
	        wp_safe_redirect( wp_get_referer() );
	        die();
		}
    }

	// Delete config files
	rocket_delete_config_file();

	if ( ! count( glob( WP_ROCKET_CONFIG_PATH . '*.php' ) ) ) {
		// Delete All WP Rocket rules of the .htaccess file
	    flush_rocket_htaccess( true );

	    // Remove WP_CACHE constant in wp-config.php
	    set_rocket_wp_cache_define( false );

	    // Delete content of advanced-cache.php
	    rocket_put_content( WP_CONTENT_DIR . '/advanced-cache.php', '' );
	}

	// Update customer key & licence.
	wp_remote_get( WP_ROCKET_WEB_API . 'pause-licence.php', array( 'blocking' => false ) );

	delete_transient( 'rocket_check_licence_30' );
	delete_transient( 'rocket_check_licence_1' );
	delete_site_transient( 'update_wprocket_response' );
}

/*
 * Tell WP what to do when plugin is activated
 *
 * @since 1.1.0
 */
register_activation_hook( __FILE__, 'rocket_activation' );
function rocket_activation()
{
	// Last constants
    define( 'WP_ROCKET_PLUGIN_NAME', 'WP Rocket' );
    define( 'WP_ROCKET_PLUGIN_SLUG', sanitize_key( WP_ROCKET_PLUGIN_NAME ) );

	if ( defined( 'SUNRISE' ) && SUNRISE == 'on' && function_exists( 'domain_mapping_siteurl' ) ) {
        require( WP_ROCKET_INC_PATH . 'domain-mapping.php' );
    }

    require( WP_ROCKET_FUNCTIONS_PATH . 'options.php' );
    require( WP_ROCKET_FUNCTIONS_PATH . 'files.php' );
    require( WP_ROCKET_FUNCTIONS_PATH . 'formatting.php' );
    require( WP_ROCKET_FUNCTIONS_PATH . 'plugins.php' );
    require( WP_ROCKET_FUNCTIONS_PATH . 'i18n.php' );
    require( WP_ROCKET_FUNCTIONS_PATH . 'htaccess.php' );

	if ( rocket_valid_key() ) {
	    // Add All WP Rocket rules of the .htaccess file
	    flush_rocket_htaccess();

	    // Add WP_CACHE constant in wp-config.php
		set_rocket_wp_cache_define( true );
	}

	// Create the cache folders (wp-rocket & min)
	rocket_init_cache_dir();

	// Create the config folder (wp-rocket-config)
    rocket_init_config_dir();

	// Create advanced-cache.php file
	rocket_generate_advanced_cache_file();

	// Update customer key & licence.
	wp_remote_get( WP_ROCKET_WEB_API . 'activate-licence.php', array( 'blocking' => false ) );
}
