<?php

defined('ABSPATH') || exit;
function rocket_settings_action_links($actions)
{
    if (!current_user_can('rocket_manage_options')) {
        return $actions;
    }
    array_unshift($actions, sprintf('<a href="%s">%s</a>', 'https://wp-rocket.me/support/?utm_source=wp_plugin&utm_medium=wp_rocket', __('Support', 'rocket')));
    array_unshift($actions, sprintf('<a href="%s">%s</a>', get_rocket_documentation_url(), __('Docs', 'rocket')));
    array_unshift($actions, sprintf('<a href="%s">%s</a>', get_rocket_faq_url(), __('FAQ', 'rocket')));
    array_unshift($actions, sprintf('<a href="%s">%s</a>', admin_url('options-general.php?page=' . WP_ROCKET_PLUGIN_SLUG), __('Settings', 'rocket')));
    return $actions;
}
add_filter('plugin_action_links_' . plugin_basename(WP_ROCKET_FILE), 'rocket_settings_action_links');
function rocket_plugin_row_meta($plugin_meta, $plugin_file)
{
    if ('wp-rocket/wp-rocket.php' === $plugin_file) {
        $update_plugins = get_site_transient('update_plugins');
        if (false !== $update_plugins && isset($update_plugins->response[$plugin_file]) && empty($update_plugins->response[$plugin_file]->package)) {
            $link = '<span class="dashicons dashicons-update rocket-dashicons"></span> <span class="rocket-renew">Renew your licence of WP Rocket to receive access to automatic upgrades and support.</span> <a href="http://wp-rocket.me" target="_blank" class="rocket-purchase">Purchase now</a>.';
            $plugin_meta = array_merge((array) $link, $plugin_meta);
        }
    }
    return $plugin_meta;
}
add_action('plugin_row_meta', 'rocket_plugin_row_meta', 10, 2);
function rocket_post_row_actions($actions, $post)
{
    if (!current_user_can('rocket_purge_posts')) {
        return $actions;
    }
    $url = wp_nonce_url(admin_url('admin-post.php?action=purge_cache&type=post-' . $post->ID), 'purge_cache_post-' . $post->ID);
    $actions['rocket_purge'] = sprintf('<a href="%s">%s</a>', $url, __('Clear this cache', 'rocket'));
    return $actions;
}
add_filter('page_row_actions', 'rocket_post_row_actions', 10, 2);
add_filter('post_row_actions', 'rocket_post_row_actions', 10, 2);
function rocket_user_row_actions($actions, $user)
{
    if (!current_user_can('rocket_purge_users') || !get_rocket_option('cache_logged_user', false)) {
        return $actions;
    }
    $url = wp_nonce_url(admin_url('admin-post.php?action=purge_cache&type=user-' . $user->ID), 'purge_cache_user-' . $user->ID);
    $actions['rocket_purge'] = sprintf('<a href="%s">%s</a>', $url, __('Clear this cache', 'rocket'));
    return $actions;
}
add_filter('user_row_actions', 'rocket_user_row_actions', 10, 2);
function rocket_dismiss_boxes($args = array())
{
    global $pagenow;
    $args = empty($args) ? $_GET : $args;
    if (!isset($args['box'], $args['action'], $args['_wpnonce'])) {
        return;
    }
    if (!wp_verify_nonce($args['_wpnonce'], "{$args['action']}_{$args['box']}")) {
        if (rocket_get_constant('DOING_AJAX')) {
            wp_send_json(['error' => 1]);
        } else {
            wp_nonce_ays('');
        }
        return;
    }
    rocket_dismiss_box($args['box']);
    if ('admin-post.php' === $pagenow) {
        if (rocket_get_constant('DOING_AJAX')) {
            wp_send_json(['error' => 0]);
        } else {
            wp_safe_redirect(esc_url_raw(wp_get_referer()));
            rocket_get_constant('WP_ROCKET_IS_TESTING', false) ? wp_die() : exit;
        }
    }
}
add_action('wp_ajax_rocket_ignore', 'rocket_dismiss_boxes');
add_action('admin_post_rocket_ignore', 'rocket_dismiss_boxes');
function rocket_dismiss_plugin_box($plugin)
{
    if (plugin_basename(WP_ROCKET_FILE) !== $plugin) {
        rocket_renew_box('rocket_warning_plugin_modification');
    }
}
add_action('activated_plugin', 'rocket_dismiss_plugin_box');
add_action('deactivated_plugin', 'rocket_dismiss_plugin_box');
function rocket_deactivate_plugin()
{
    if (!isset($_GET['plugin'], $_GET['_wpnonce'])) {
        return;
    }
    if (!wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'deactivate_plugin')) {
        wp_nonce_ays('');
    }
    deactivate_plugins(sanitize_text_field(wp_unslash($_GET['plugin'])));
    wp_safe_redirect(wp_get_referer());
    die;
}
add_action('admin_post_deactivate_plugin', 'rocket_deactivate_plugin');
function rocket_do_options_export()
{
    if (!isset($_GET['_wpnonce']) || !wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'rocket_export')) {
        wp_nonce_ays('');
    }
    $filename = sprintf('wp-rocket-settings-%s-%s.json', date('Y-m-d'), uniqid());
    $gz = 'gz' . strrev('etalfed');
    $options = wp_json_encode(get_option(WP_ROCKET_SLUG));
    nocache_headers();
    @header('Content-Type: application/json');
    @header('Content-Disposition: attachment; filename="' . $filename . '"');
    @header('Content-Transfer-Encoding: binary');
    @header('Content-Length: ' . strlen($options));
    @header('Connection: close');
    echo $options;
    exit;
}
add_action('admin_post_rocket_export', 'rocket_do_options_export');
function rocket_rollback()
{
    if (!isset($_GET['_wpnonce']) || !wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'rocket_rollback')) {
        wp_nonce_ays('');
    }
    $plugin_transient = get_site_transient('update_plugins');
    $plugin_folder = plugin_basename(dirname(WP_ROCKET_FILE));
    $plugin = $plugin_folder . '/' . basename(WP_ROCKET_FILE);
    $plugin_transient->response[$plugin] = (object) ['slug' => $plugin_folder, 'new_version' => WP_ROCKET_LASTVERSION, 'url' => 'https://wp-rocket.me', 'package' => sprintf('https://wp-rocket.me/%s/wp-rocket_%s.zip', get_rocket_option('consumer_key'), WP_ROCKET_LASTVERSION)];
    set_site_transient('update_plugins', $plugin_transient);
    require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    $title = sprintf(__('%s Update Rollback', 'rocket'), WP_ROCKET_PLUGIN_NAME);
    $nonce = 'upgrade-plugin_' . $plugin;
    $url = 'update.php?action=upgrade-plugin&plugin=' . rawurlencode($plugin);
    $upgrader_skin = new Plugin_Upgrader_Skin(compact('title', 'nonce', 'url', 'plugin'));
    $upgrader = new Plugin_Upgrader($upgrader_skin);
    remove_filter('site_transient_update_plugins', 'rocket_check_update', 1);
    add_filter('update_plugin_complete_actions', 'rocket_rollback_add_return_link');
    rocket_put_content(WP_CONTENT_DIR . '/advanced-cache.php', '');
    $upgrader->upgrade($plugin);
    wp_die('', esc_html(sprintf(__('%s Update Rollback', 'rocket'), WP_ROCKET_PLUGIN_NAME)), ['response' => 200]);
}
add_action('admin_post_rocket_rollback', 'rocket_rollback');
function rocket_rollback_add_return_link($update_actions)
{
    if (!isset($update_actions['plugins_page'])) {
        return $update_actions;
    }
    $update_actions['plugins_page'] = sprintf(__('%1$sReturn to WP Rocket%2$s or %3$sgo to Plugins page%2$s', 'rocket'), '<a href="' . esc_url(admin_url('options-general.php?page=' . WP_ROCKET_PLUGIN_SLUG) . '#tools') . '" target="_parent">', '</a>', '<a href="' . esc_url(admin_url('plugins.php')) . '" target="_parent">');
    return $update_actions;
}
if (!defined('DOING_AJAX') && !defined('DOING_AUTOSAVE')) {
    add_action('admin_init', 'rocket_init_cache_dir');
    add_action('admin_init', 'rocket_maybe_generate_advanced_cache_file');
    add_action('admin_init', 'rocket_maybe_generate_config_files');
}
function rocket_maybe_generate_advanced_cache_file()
{
    if (!defined('WP_ROCKET_ADVANCED_CACHE') || defined('WP_ROCKET_ADVANCED_CACHE_PROBLEM') && WP_ROCKET_ADVANCED_CACHE_PROBLEM) {
        rocket_generate_advanced_cache_file();
    }
}
function rocket_maybe_generate_config_files()
{
    $home = get_rocket_parse_url(rocket_get_home_url());
    $path = !empty($home['path']) ? str_replace('/', '.', untrailingslashit($home['path'])) : '';
    if (!file_exists(WP_ROCKET_CONFIG_PATH . strtolower($home['host']) . $path . '.php')) {
        rocket_generate_config_file();
    }
}
function rocket_add_imagify_api_result($result, $action, $args)
{
    if (empty($args->browse)) {
        return $result;
    }
    if ('featured' !== $args->browse && 'recommended' !== $args->browse && 'popular' !== $args->browse) {
        return $result;
    }
    if (!isset($result->info['page']) || 1 < $result->info['page']) {
        return $result;
    }
    if (is_plugin_active('imagify/imagify.php') || is_plugin_active_for_network('imagify/imagify.php')) {
        return $result;
    }
    $result_slugs = wp_list_pluck($result->plugins, 'slug');
    if (in_array('imagify', $result_slugs, true)) {
        return $result;
    }
    $query_args = ['slug' => 'imagify', 'fields' => ['icons' => true, 'active_installs' => true, 'short_description' => true, 'group' => true]];
    $imagify_data = plugins_api('plugin_information', $query_args);
    if (is_wp_error($imagify_data)) {
        return $result;
    }
    if ('featured' === $args->browse) {
        array_push($result->plugins, $imagify_data);
    } else {
        array_unshift($result->plugins, $imagify_data);
    }
    return $result;
}
add_filter('plugins_api_result', 'rocket_add_imagify_api_result', 11, 3);
function rocket_analytics_data()
{
    global $wp_version, $is_nginx, $is_apache, $is_iis7, $is_IIS;
    if (!is_array(get_option(WP_ROCKET_SLUG))) {
        return false;
    }
    $untracked_wp_rocket_options = ['license' => 1, 'consumer_email' => 1, 'consumer_key' => 1, 'secret_key' => 1, 'secret_cache_key' => 1, 'minify_css_key' => 1, 'minify_js_key' => 1, 'cloudflare_email' => 1, 'cloudflare_api_key' => 1, 'cloudflare_zone_id' => 1, 'cloudflare_old_settings' => 1, 'submit_optimize' => 1, 'analytics_enabled' => 1];
    $theme = wp_get_theme();
    $data = array_diff_key(get_option(WP_ROCKET_SLUG), $untracked_wp_rocket_options);
    $locale = explode('_', get_locale());
    $data['web_server'] = 'Unknown';
    if ($is_nginx) {
        $data['web_server'] = 'NGINX';
    } elseif ($is_apache) {
        $data['web_server'] = 'Apache';
    } elseif ($is_iis7) {
        $data['web_server'] = 'IIS 7';
    } elseif ($is_IIS) {
        $data['web_server'] = 'IIS';
    }
    $data['php_version'] = preg_replace('@^(\\d\\.\\d+).*@', '\\1', phpversion());
    $data['wordpress_version'] = preg_replace('@^(\\d\\.\\d+).*@', '\\1', $wp_version);
    $data['current_theme'] = $theme->get('Name');
    $data['active_plugins'] = rocket_get_active_plugins();
    $data['locale'] = $locale[0];
    $data['multisite'] = is_multisite();
    if (!empty($data['cdn_cnames']) && is_array($data['cdn_cnames'])) {
        $data['cdn_cnames'] = count($data['cdn_cnames']);
    } else {
        $data['cdn_cnames'] = 0;
    }
    if (!empty($data['sitemaps']) && is_array($data['sitemaps'])) {
        $data['sitemaps'] = array_map('rocket_clean_exclude_file', $data['sitemaps']);
    } else {
        $data['sitemaps'] = [];
    }
    return $data;
}
function rocket_send_analytics_data()
{
    if (!get_rocket_option('analytics_enabled')) {
        return false;
    }
    if (!current_user_can('administrator')) {
        return false;
    }
    if (false === get_transient('rocket_send_analytics_data')) {
        set_transient('rocket_send_analytics_data', 1, 7 * DAY_IN_SECONDS);
        return true;
    }
    return false;
}
function rocket_analytics_optin()
{
    if (!isset($_GET['_wpnonce']) || !wp_verify_nonce(sanitize_key($_GET['_wpnonce']), 'analytics_optin')) {
        wp_nonce_ays('');
    }
    if (!current_user_can('administrator')) {
        wp_safe_redirect(wp_get_referer());
        die;
    }
    if (isset($_GET['value']) && 'yes' === $_GET['value']) {
        update_rocket_option('analytics_enabled', 1);
        set_transient('rocket_analytics_optin', 1);
    }
    update_option('rocket_analytics_notice_displayed', 1);
    wp_safe_redirect(wp_get_referer());
    die;
}
add_action('admin_post_rocket_analytics_optin', 'rocket_analytics_optin');
function rocket_handle_settings_import()
{
    check_ajax_referer('rocket_import_settings', 'rocket_import_settings_nonce');
    if (!current_user_can('rocket_manage_options')) {
        rocket_settings_import_redirect(__('Settings import failed: you do not have the permissions to do this.', 'rocket'), 'error');
    }
    if (!isset($_FILES['import']) || isset($_FILES['import']['size']) && 0 === $_FILES['import']['size']) {
        rocket_settings_import_redirect(__('Settings import failed: no file uploaded.', 'rocket'), 'error');
    }
    if (isset($_FILES['import']['name']) && !preg_match('/wp-rocket-settings-20\\d{2}-\\d{2}-\\d{2}-[a-f0-9]{13}\\.(?:txt|json)/', sanitize_file_name($_FILES['import']['name']))) {
        rocket_settings_import_redirect(__('Settings import failed: incorrect filename.', 'rocket'), 'error');
    }
    add_filter('mime_types', 'rocket_allow_json_mime_type');
    add_filter('wp_check_filetype_and_ext', 'rocket_check_json_filetype', 10, 4);
    $mimes = get_allowed_mime_types();
    $mimes = rocket_allow_json_mime_type($mimes);
    $file_data = wp_check_filetype_and_ext($_FILES['import']['tmp_name'], sanitize_file_name($_FILES['import']['name']), $mimes);
    if ('text/plain' !== $file_data['type'] && 'application/json' !== $file_data['type']) {
        rocket_settings_import_redirect(__('Settings import failed: incorrect filetype.', 'rocket'), 'error');
    }
    $_post_action = isset($_POST['action']) ? wp_unslash(sanitize_key($_POST['action'])) : '';
    $_POST['action'] = 'wp_handle_sideload';
    $overrides = [];
    $overrides['mimes'] = $mimes;
    $file = wp_handle_sideload($_FILES['import'], $overrides);
    if (isset($file['error'])) {
        rocket_settings_import_redirect(__('Settings import failed: ', 'rocket') . $file['error'], 'error');
    }
    $_POST['action'] = $_post_action;
    $settings = rocket_direct_filesystem()->get_contents($file['file']);
    remove_filter('mime_types', 'rocket_allow_json_mime_type');
    remove_filter('wp_check_filetype_and_ext', 'rocket_check_json_filetype', 10);
    if ('text/plain' === $file_data['type']) {
        $gz = 'gz' . strrev('etalfni');
        $settings = $gz($settings);
        $settings = maybe_unserialize($settings);
    } elseif ('application/json' === $file_data['type']) {
        $settings = json_decode($settings, true);
        if (null === $settings) {
            rocket_settings_import_redirect(__('Settings import failed: unexpected file content.', 'rocket'), 'error');
        }
    }
    rocket_put_content($file['file'], '');
    rocket_direct_filesystem()->delete($file['file']);
    if (is_array($settings)) {
        $options_api = new WP_Rocket\Admin\Options('wp_rocket_');
        $current_options = $options_api->get('settings', []);
        $settings['consumer_key'] = $current_options['consumer_key'];
        $settings['consumer_email'] = $current_options['consumer_email'];
        $settings['secret_key'] = $current_options['secret_key'];
        $settings['secret_cache_key'] = $current_options['secret_cache_key'];
        $settings['minify_css_key'] = $current_options['minify_css_key'];
        $settings['minify_js_key'] = $current_options['minify_js_key'];
        $settings['version'] = $current_options['version'];
        $options_api->set('settings', $settings);
        rocket_settings_import_redirect(__('Settings imported and saved.', 'rocket'), 'updated');
    }
}
add_action('admin_post_rocket_import_settings', 'rocket_handle_settings_import');