CleanUp
'remove_rsd_link',
'remove_wlw_link',
'remove_rest_api_link',
'remove_shortlink',
'remove_posts_rel_links',
'remove_wp_version',
// all "generator" meta tags including the WordPress version
'remove_generator_tag',
// RSS Feed Links
'remove_main_feed_link',
'remove_comment_feed_link',
// Remove HTML comments
'remove_html_comments',
'remove_html_comments_exceptions',
'disable_xmlrpc',
// Allow Usage Tracking
'allow_usage_tracking',
// Serve cached CSS/JS details from: Database or Disk
'fetch_cached_files_details_from',
// Clear Cached CSS/JS files after (x) days
'clear_cached_files_after',
// Do not load Asset CleanUp (Pro) if the URI is matched by the specified patterns
'do_not_load_plugin_patterns',
// [wpacu_pro]
// Local Fonts: "font-display" CSS property (Pro feature)
'local_fonts_display',
'local_fonts_display_overwrite',
// [/wpacu_pro]
// Local Fonts: Preload Files
'local_fonts_preload_files',
// Google Fonts: Combine Into One Request
'google_fonts_combine',
'google_fonts_combine_type',
// Google Fonts: "font-display" CSS property: LINK & STYLE tags, @import in CSS files
'google_fonts_display',
// Google Fonts: preconnect hint
'google_fonts_preconnect',
// Google Fonts: Preload Files
'google_fonts_preload_files',
// Google Fonts: Remove all traces
'google_fonts_remove',
// [wpacu_lite]
// Do not trigger Feedback Popup on Deactivation
'disable_freemius'
// [/wpacu_lite]
);
/**
* @var array
*/
public $currentSettings = array();
/**
* @var array
*/
public $defaultSettings = array();
/**
* Settings constructor.
*/
public function __construct()
{
$this->defaultSettings = array(
// Show the assets list within the Dashboard, while they are hidden in the front-end view
'dashboard_show' => '1',
// Direct AJAX call by default (not via WP Remote Post)
'dom_get_type' => 'direct',
'show_assets_meta_box' => 1,
'hide_meta_boxes_for_post_types' => array(),
// Very good especially for page builders: Divi Visual Builder, Oxygen Builder, WPBakery, Beaver Builder etc.
// It is also hidden in preview mode (if query strings such as 'preview_nonce' are used)
'frontend_show_exceptions' => 'et_fb=1'."\n"
.'ct_builder=true'."\n"
.'vc_editable=true'."\n"
.'preview_nonce='."\n",
'allow_manage_assets_to' => 'any_admin',
'allow_manage_assets_to_list' => array(),
// Since v1.2.9.3 (Lite) and version 1.1.0.8 (Pro), the default value is "by-location" (All Styles & All Scripts - By Location (Theme, Plugins, Custom & External))
// Prior to that it's "two-lists" (All Styles & All Scripts - 2 separate lists)
'assets_list_layout' => 'by-location',
'assets_list_layout_areas_status' => 'expanded',
'assets_list_layout_plugin_area_status' => 'expanded',
// "contracted" since 1.1.0.8 (Pro)
'assets_list_inline_code_status' => 'contracted', // takes less space overall
'minify_loaded_css_for' => 'href',
'minify_loaded_js_for' => 'src',
'minify_loaded_css_exceptions' => '(.*?)\.min.css'. "\n". '/wd-instagram-feed/(.*?).css',
'minify_loaded_js_exceptions' => '(.*?)\.min.js' . "\n". '/wd-instagram-feed/(.*?).js',
'inline_css_files_below_size' => '1', // Enabled by default
'inline_css_files_below_size_input' => '3', // Size in KB
// [wpacu_pro]
'inline_js_files_below_size_input' => '3', // Size in KB
// Specific AMP scripts should always be in 'HEAD'
'move_scripts_to_body_exceptions' => '//cdn.ampproject.org/',
// [/wpacu_pro]
// Since v1.1.7.3 (Pro) & v1.3.6.4 (Lite)
'combine_loaded_css_for' => 'guests',
'combine_loaded_js_for' => 'guests',
'combine_loaded_css_exceptions' => '/wd-instagram-feed/(.*?).css',
'combine_loaded_js_exceptions' => '/wd-instagram-feed/(.*?).js',
// [wpacu_pro]
'defer_css_loaded_body' => 'moved',
// [CRITICAL CSS]
'critical_css_status' => 'on',
// [/CRITICAL CSS]
// [/wpacu_pro]
'input_style' => 'enhanced',
// Starting from v1.2.8.6 (lite), WordPress core files are hidden in the assets list as a default setting
'hide_core_files' => '1',
'fetch_cached_files_details_from' => 'disk', // Do not add more rows to the database by default (options table can become quite large)
'clear_cached_files_after' => '14', // 2 weeks
// Starting from v1.3.6.9 (Lite) & v1.1.7.9 (Pro), /cart/ & /checkout/ pages are added to the exclusion list by default
'do_not_load_plugin_patterns' => '/cart/'. "\n". '/checkout/',
'disable_rss_feed_message' => __('There is no RSS feed available.', 'wp-asset-clean-up'),
// [Hidden Settings]
// They are prefixed with underscore _
'_combine_loaded_css_append_handle_extra' => '1',
'_combine_loaded_js_append_handle_extra' => '1'
// [/Hidden Settings]
);
}
/**
*
*/
public function adminInit()
{
// This is triggered BEFORE "triggerAfterInit" from 'Main' class
add_action('admin_init', array($this, 'saveSettings'), 9);
if (Misc::getVar('get', 'page') === WPACU_PLUGIN_ID . '_settings') {
add_action('wpacu_admin_notices', array($this, 'notices'));
if (function_exists('curl_init')) {
// Check if the website supports HTTP/2 protocol and based on that advise the admin that combining CSS/JS is likely unnecessary
add_action( 'admin_footer', array($this, 'adminFooterSettings') );
}
}
add_action( 'wp_ajax_' . WPACU_PLUGIN_ID . '_do_verifications', array( $this, 'ajaxDoVerifications' ) );
// e.g. when "Contract All Groups" is used, the state is kept (the setting is updated in the background)
add_action( 'wp_ajax_' . WPACU_PLUGIN_ID . '_update_settings', array($this, 'ajaxUpdateSpecificSettings') );
add_action( 'wp_ajax_nopriv_' . WPACU_PLUGIN_ID . '_update_settings', array($this, 'ajaxUpdateSpecificSettings') );
}
/**
*
*/
public function notices()
{
$settings = $this->getAll();
// When no retrieval method for fetching the assets is enabled
if ($settings['dashboard_show'] != 1 && $settings['frontend_show'] != 1) {
?>
update($savedSettings);
}
/**
*
*/
public function settingsPage()
{
$data = $this->getAll();
foreach ($this->settingsKeys as $settingKey) {
// Special check for plugin versions < 1.2.4.4
if ($settingKey === 'frontend_show') {
$data['frontend_show'] = $this->showOnFrontEndLegacy();
}
}
$globalUnloadList = Main::instance()->getGlobalUnload();
// [CSS]
if (in_array('dashicons', $globalUnloadList['styles'])) {
$data['disable_dashicons_for_guests'] = 1;
}
if (in_array('wp-block-library', $globalUnloadList['styles'])) {
$data['disable_wp_block_library'] = 1;
}
// [/CSS]
// [JS]
if (in_array('jquery-migrate', $globalUnloadList['scripts'])) {
$data['disable_jquery_migrate'] = 1;
}
if (in_array('comment-reply', $globalUnloadList['scripts'])) {
$data['disable_comment_reply'] = 1;
}
// [/JS]
$data['is_optimize_css_enabled_by_other_party'] = OptimizeCss::isOptimizeCssEnabledByOtherParty();
$data['is_optimize_js_enabled_by_other_party'] = OptimizeJs::isOptimizeJsEnabledByOtherParty();
Main::instance()->parseTemplate('admin-page-settings-plugin', $data, true);
}
/**
* @return bool
*/
public function showOnFrontEndLegacy()
{
$settings = $this->getAll();
if ($settings['frontend_show'] == 1) {
return true;
}
// [wpacu_lite]
// Prior to 1.2.4.4
if (get_option( WPACU_PLUGIN_ID . '_frontend_show') == 1) {
// Put it in the main settings option
$settings = $this->getAll();
$settings['frontend_show'] = 1;
$this->update($settings);
delete_option( WPACU_PLUGIN_ID . '_frontend_show');
return true;
}
// [/wpacu_lite]
return false;
}
/**
* @param false $forceRefetch
*
* @return array|mixed
*/
public function getAll($forceRefetch = false)
{
if ($forceRefetch) {
$GLOBALS['wp_object_cache']->delete(WPACU_PLUGIN_ID . '_settings', 'options');
} else if ( ! empty( $this->currentSettings ) ) { // default check
return apply_filters('wpacu_settings', $this->currentSettings);
}
$settingsOption = get_option(WPACU_PLUGIN_ID . '_settings');
$applyDefaultToNeverSaved = array(
'frontend_show_exceptions',
'minify_loaded_css_exceptions',
'inline_css_files_below_size_input',
'minify_loaded_js_exceptions',
'inline_js_files_below_size_input',
'clear_cached_files_after',
'hide_meta_boxes_for_post_types',
'disable_rss_feed_message'
);
// If there's already a record in the database
if ($settingsOption !== '' && is_string($settingsOption)) {
$settings = (array)json_decode($settingsOption);
if (Misc::jsonLastError() === JSON_ERROR_NONE) {
// Make sure all the keys are there even if no value is attached to them
// To avoid writing extra checks in other parts of the code and prevent PHP notice errors
foreach ($this->settingsKeys as $settingsKey) {
if (! array_key_exists($settingsKey, $settings)) {
$settings[$settingsKey] = '';
// If it doesn't exist, it was never saved (Exception: "show_assets_meta_box")
// Make sure the default value is added
if (in_array($settingsKey, $applyDefaultToNeverSaved)) {
$settings[ $settingsKey ] = isset( $this->defaultSettings[ $settingsKey ] ) ? $this->defaultSettings[ $settingsKey ] : '';
}
}
}
$this->currentSettings = $this->filterSettings($settings);
return apply_filters('wpacu_settings', $this->currentSettings);
}
}
// No record in the database? Set the default values
// That could be because no changes were done on the "Settings" page
// OR a full reset of the plugin (via "Tools") was performed
$finalDefaultSettings = $this->defaultSettings;
foreach ($this->settingsKeys as $settingsKey) {
if (! array_key_exists($settingsKey, $finalDefaultSettings)) {
// Keep the keys with empty values to avoid notice errors
$finalDefaultSettings[$settingsKey] = '';
}
}
return apply_filters('wpacu_settings', $this->filterSettings($finalDefaultSettings));
}
/**
* @param $settingsKey
*
* @return mixed
*/
public function getOption($settingsKey)
{
$settings = $this->getAll();
return $settings[$settingsKey];
}
/**
* @param $key
* @param $value
*/
public function updateOption($key, $value)
{
$settings = $this->getAll(true);
if ( ! is_array($key) ) { // not an array (e.g. a string)
$settings[ $key ] = $value;
} else {
foreach ($key as $keyIndex => $keyValue) { // Array, loop through it
$settings[ $keyValue ] = $value[$keyIndex];
}
}
$this->update($settings, false);
}
/**
* @param $key
*/
public function deleteOption($key)
{
$settings = $this->getAll(true);
$settings[$key] = '';
$this->update($settings, false);
}
/**
* @param $settings
*
* @return mixed
*/
public function filterSettings($settings)
{
// Renamed "hide_assets_meta_box" to "show_assets_meta_box" (legacy)
if ( isset($settings['show_assets_meta_box'], $settings['hide_assets_meta_box']) && $settings['hide_assets_meta_box'] == 1 ) { // legacy
$settings['show_assets_meta_box'] = '0';
}
// "show_assets_meta_box" is either 0 or 1
// if it doesn't exist, it was never saved (the user didn't update the settings after updating to 1.2.0.1)
// Thus it will be activated by default: 1
if ( ! isset($settings['show_assets_meta_box']) || $settings['show_assets_meta_box'] === '' ) {
$settings['show_assets_meta_box'] = 1;
}
// Oxygen Builder is triggered and some users might want to trigger unload rules there to make the editor faster, especially plugin unload rules
// We will prevent minify/combine and other functions that will require caching any files to avoid any errors
if (defined('WPACU_ALLOW_ONLY_UNLOAD_RULES') && WPACU_ALLOW_ONLY_UNLOAD_RULES) {
$settings['minify_loaded_css']
= $settings['minify_loaded_js']
= $settings['combine_loaded_css']
= $settings['combine_loaded_js']
= $settings['inline_css_files']
= $settings['inline_js_files']
= $settings['google_fonts_combine']
= $settings['google_fonts_remove']
= false;
}
if ($settings['minify_loaded_css_inline']) {
$settings['minify_loaded_css_for'] = 'all';
}
if ($settings['minify_loaded_js_inline']) {
$settings['minify_loaded_js_for'] = 'all';
}
// Google Fonts Removal is enabled; make sure other related settings are nullified
if ($settings['google_fonts_remove']) {
$settings['google_fonts_combine']
= $settings['google_fonts_combine_type']
= $settings['google_fonts_display']
= $settings['google_fonts_preconnect']
= $settings['google_fonts_preload_files']
= '';
}
if ((int)$settings['clear_cached_files_after'] === 0) {
$settings['clear_cached_files_after'] = 1; // Starting from v1.2.3.6 (Pro)
}
if ( function_exists('get_rocket_option') && Misc::isPluginActive('wp-rocket/wp-rocket.php') ) {
if ( ! defined( 'WPACU_WP_ROCKET_DELAY_JS_ENABLED' ) && get_rocket_option('delay_js') ) {
// When "File Optimization" -- "Delay JavaScript execution" is enabled in WP Rocket
// Set "Settings" -- "Optimize JavaScript" -- "Combine loaded JS (JavaScript) into fewer files" to false
$settings['combine_loaded_js'] = '';
define( 'WPACU_WP_ROCKET_DELAY_JS_ENABLED', true );
}
}
// [START] Overwrite specific settings via query string
// Ideally, either use /?wpacu_settings[...] OR /?wpacu_skip_test_mode (never both because they could interfere)
if (isset($_GET['wpacu_settings']) && is_array($_GET['wpacu_settings']) && ! empty($_GET['wpacu_settings'])) {
foreach ($_GET['wpacu_settings'] as $settingKey => $settingValue) {
if ($settingValue === 'true') {
$settingValue = true;
}
if ($settingValue === 'false') {
$settingValue = false;
}
$settings[$settingKey] = $settingValue;
}
}
// /?wpacu_test_mode (will load the page with "Test Mode" enabled disregarding the value from the plugin's "Settings")
// For debugging purposes (e.g. to make sure the HTML source is the same when a guest user accesses it as the one that is generated when the plugin is deactivated)
if ( isset($_GET['wpacu_test_mode']) ) {
$settings['test_mode'] = true;
}
if ( isset($_GET['wpacu_skip_test_mode']) ) {
$settings['test_mode'] = false;
}
// /?wpacu_skip_inline_css
if (isset($_GET['wpacu_skip_inline_css_files'])) {
$settings['inline_css_files'] = false;
}
// /?wpacu_skip_inline_js
if (isset($_GET['wpacu_skip_inline_js_files'])) {
$settings['inline_js_files'] = false;
}
// /?wpacu_manage_front -> "Manage in the Front-end" via query string request
// Useful when working for a client, and you prefer him to view the pages (while logged-in) without the CSS/JS list at the bottom
if (isset($_GET['wpacu_manage_front'])) {
$settings['frontend_show'] = true;
}
// /?wpacu_manage_dash -> "Manage in the Dashboard" via query string request
// For debugging purposes
if (is_admin() && (isset($_REQUEST['wpacu_manage_dash']) || isset($_REQUEST['force_manage_dash']))) {
$settings['dashboard_show'] = true;
}
// [END] Overwrite specific settings via query string
return $settings;
}
/**
* @param $settings
* @param bool $redirectAfterUpdate
*/
public function update($settings, $redirectAfterUpdate = true)
{
$settingsNotNull = array();
foreach ($settings as $settingKey => $settingValue) {
if ($settingValue !== '') {
// Some validation
if ($settingKey === 'clear_cached_files_after') {
$settingValue = (int)$settingValue;
}
$settingsNotNull[$settingKey] = $settingValue;
}
}
if (wp_json_encode($this->defaultSettings) === wp_json_encode($settingsNotNull)) {
// Do not keep a record in the database (no point of having an extra entry)
// if the submitted values are the same as the default ones
delete_option(WPACU_PLUGIN_ID . '_settings');
if ($redirectAfterUpdate) {
$this->redirectAfterUpdate(); // script ends here
}
}
// The following are only triggered IF the user submitted the form from "Settings" area
if (Misc::getVar('post', 'wpacu_settings_nonce')) {
// By default, these hidden settings are enabled; In case they do not exist (older database), add them
// Only keep them enabled if WordPress version is >= 5.5
$appendInlineCodeToCombinedAssets = ( Misc::isWpVersionAtLeast('5.5') ) ? 1 : '';
if ( $appendInlineCodeToCombinedAssets === '' ) {
// WordPress version < 5.5 (do not enable it)
$settings['_combine_loaded_css_append_handle_extra'] = $settings['_combine_loaded_js_append_handle_extra'] = '';
} else {
// WordPress version >= 5.5 (make it enabled by default if not set)
if ( ! isset( $settings['_combine_loaded_css_append_handle_extra'] ) ) {
$settings['_combine_loaded_css_append_handle_extra'] = 1; // default
}
if ( ! isset( $settings['_combine_loaded_js_append_handle_extra'] ) ) {
$settings['_combine_loaded_js_append_handle_extra'] = 1; // default
}
}
// "Site-Wide Common Unloads" tab
$disableGutenbergCssBlockLibrary = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_wp_block_library'] );
$disableJQueryMigrate = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_jquery_migrate'] );
$disableCommentReply = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_comment_reply'] );
$disableDashiconsForGuests = isset( $_POST[ WPACU_PLUGIN_ID . '_global_unloads' ]['disable_dashicons_for_guests'] );
$this->updateSiteWideRuleForCommonAssets(array(
'wp_block_library' => $disableGutenbergCssBlockLibrary,
'dashicons' => $disableDashiconsForGuests,
'jquery_migrate' => $disableJQueryMigrate,
'comment_reply' => $disableCommentReply
));
// Some validation
$stripTagsForList = array(
'frontend_show_exceptions',
'do_not_load_plugin_patterns',
'minify_loaded_css_exceptions',
'combine_loaded_css_exceptions',
'inline_css_files_list',
'minify_loaded_js_exceptions',
'combine_loaded_js_exceptions',
'inline_js_files_list',
'move_scripts_to_body_exceptions',
'cdn_rewrite_url_css',
'cdn_rewrite_url_js',
'remove_html_comments_exceptions',
'local_fonts_preload_files',
'google_fonts_preload_files'
);
foreach ($stripTagsForList as $stripTagsFor) {
$settings[$stripTagsFor] = strip_tags($settings[$stripTagsFor]);
}
// Apply 'Ignore dependency rule and keep the "children" loaded' for "dashicons" handle if Ninja Forms is active
// because "nf-display" handle depends on the Dashicons, and it could break the forms' styling
if ($disableDashiconsForGuests && Misc::isPluginActive('ninja-forms/ninja-forms.php')) {
$mainVarToUse = array();
$mainVarToUse['wpacu_ignore_child']['styles']['dashicons'] = 1;
Update::updateIgnoreChild($mainVarToUse);
}
if ($appendInlineCodeToCombinedAssets) {
$settings = self::toggleAppendInlineAssocCodeHiddenSettings($settings);
}
}
Misc::addUpdateOption(WPACU_PLUGIN_ID . '_settings', wp_json_encode(Misc::filterList($settings)));
Misc::w3TotalCacheFlushObjectCache();
// New Plugin Update (since 6 April 2020): the cache is cleared after page load via AJAX
// This is done in case the cache directory is large and more time is required to clear it
// This offers the admin a better user experience (no one likes to wait too much until a page is reloaded, which sometimes could cause confusion)
if ($redirectAfterUpdate) {
$this->redirectAfterUpdate();
}
}
/**
* @param $settings
* @param false $doSettingUpdate (e.g. 'true' if called from a WP Cron)
* @param false $isDebug (e.g. 'true' if requested via a query string such as 'wpacu_toggle_inline_code_to_combine_js' for debugging purposes)
*
* @return mixed
*/
public static function toggleAppendInlineAssocCodeHiddenSettings($settings, $doSettingUpdate = false, $isDebug = false)
{
// Are there too many files in WP_CONTENT_DIR . WpAssetCleanUp\OptimiseAssets\OptimizeCommon::getRelPathPluginCacheDir() . '(css|js)/' directory?
// Deactivate the appending of the inline CSS/JS code (extra, before or after)
$mbLimitForFiles = array(
'css' => 700,
'js' => 700 // This is the one that usually has non-unique inline JS code
);
if ($doSettingUpdate) {
$settingsClass = new Settings();
}
foreach ( $mbLimitForFiles as $assetType => $mbLimit ) { // Go through both .css and .js
$combineSettingsKey = 'combine_loaded_'.$assetType;
$isCombineAssetsEnabled = isset($settings[$combineSettingsKey]) && $settings[$combineSettingsKey];
if ( ! $isCombineAssetsEnabled ) {
if ($isDebug) {
echo 'Combine '.strtoupper($assetType).' is not enabled. ';
}
continue; // Only do the checking if combine CSS/JS is enabled
}
$wpacuPathToCombineDirSize = Misc::getSizeOfDirectoryRootFiles(
array(
WP_CONTENT_DIR . OptimizeCommon::getRelPathPluginCacheDir() . $assetType . '/',
WP_CONTENT_DIR . OptimizeCommon::getRelPathPluginCacheDir() . $assetType . '/logged-in/' // just in case "Apply it for all visitors (not recommended)" has been enabled
),
'.' . $assetType
);
$preventAddingInlineCodeToCombinedAssets = isset( $wpacuPathToCombineDirSize['total_size_mb'] ) && $wpacuPathToCombineDirSize['total_size_mb'] > $mbLimit;
if ( $preventAddingInlineCodeToCombinedAssets ) {
$settings['_combine_loaded_'.$assetType.'_append_handle_extra'] = '';
} else {
$settings['_combine_loaded_'.$assetType.'_append_handle_extra'] = 1;
}
if ($isDebug) {
if ($preventAddingInlineCodeToCombinedAssets) {
echo 'Adding inline code to combined '.strtoupper($assetType).' has been deactivated as the total size of combined assets is '.$wpacuPathToCombineDirSize['total_size_mb'].' MB. ';
} else {
echo 'Adding inline code to combined '.strtoupper($assetType).' has been (re)activated as the total size of combined assets is '.$wpacuPathToCombineDirSize['total_size_mb'].' MB. ';
}
}
if ($doSettingUpdate) {
$settingsClass->updateOption(
'_combine_loaded_'.$assetType.'_append_handle_extra',
$settings['_combine_loaded_'.$assetType.'_append_handle_extra']
);
}
}
return $settings;
}
/**
* @param $unloadsList
*/
public function updateSiteWideRuleForCommonAssets($unloadsList)
{
$wpacuUpdate = new Update;
$disableGutenbergCssBlockLibrary = $unloadsList['wp_block_library'];
$disableJQueryMigrate = $unloadsList['jquery_migrate'];
$disableCommentReply = $unloadsList['comment_reply'];
$disableDashiconsForGuests = $unloadsList['dashicons'];
/*
* Add element(s) to the global unload rules
*/
if ($disableGutenbergCssBlockLibrary || $disableDashiconsForGuests) {
$unloadList = array();
if ($disableGutenbergCssBlockLibrary) {
$unloadList[] = 'wp-block-library';
}
if ($disableDashiconsForGuests) {
$unloadList[] = 'dashicons';
}
$wpacuUpdate->saveToEverywhereUnloads($unloadList);
}
if ($disableJQueryMigrate || $disableCommentReply) {
$unloadList = array();
// Add jQuery Migrate to the global unload rules
if ($disableJQueryMigrate) {
$unloadList[] = 'jquery-migrate';
}
// Add Comment Reply to the global unload rules
if ($disableCommentReply) {
$unloadList[] = 'comment-reply';
}
$wpacuUpdate->saveToEverywhereUnloads(array(), $unloadList);
}
/*
* Remove element(s) from the global unload rules
*/
// For Stylesheets (.CSS)
if (! $disableGutenbergCssBlockLibrary || ! $disableDashiconsForGuests) {
$removeFromUnloadList = array();
if (! $disableGutenbergCssBlockLibrary) {
$removeFromUnloadList['wp-block-library'] = 'remove';
}
if (! $disableDashiconsForGuests) {
$removeFromUnloadList['dashicons'] = 'remove';
}
$wpacuUpdate->removeEverywhereUnloads($removeFromUnloadList);
}
// For JavaScript (.JS)
if (! $disableJQueryMigrate || ! $disableCommentReply) {
$removeFromUnloadList = array();
// Remove jQuery Migrate from global unload rules
if (! $disableJQueryMigrate) {
$removeFromUnloadList['jquery-migrate'] = 'remove';
}
// Remove Comment Reply from global unload rules
if (! $disableCommentReply) {
$removeFromUnloadList['comment-reply'] = 'remove';
}
$wpacuUpdate->removeEverywhereUnloads(array(), $removeFromUnloadList);
}
}
/**
*
*/
public function redirectAfterUpdate()
{
$tabArea = Misc::getVar('post', 'wpacu_selected_tab_area', 'wpacu-setting-plugin-usage-settings');
$subTabArea = Misc::getVar('post', 'wpacu_selected_sub_tab_area', '');
set_transient('wpacu_settings_updated', 1, 30);
$wpacuQueryString = array(
'page' => 'wpassetcleanup_settings',
'wpacu_selected_tab_area' => $tabArea,
'wpacu_time' => time()
);
if ($subTabArea) {
$wpacuQueryString['wpacu_selected_sub_tab_area'] = $subTabArea;
}
wp_redirect(add_query_arg($wpacuQueryString, esc_url(admin_url('admin.php'))));
exit();
}
/**
*
*/
public function ajaxDoVerifications()
{
if ( ! isset($_POST['action']) || ! Menu::userCanManageAssets() ) {
return;
}
if ( ! isset($_POST['wpacu_nonce']) ) {
echo 'Error: The security nonce was not sent for verification. Location: '.__METHOD__;
return;
}
if ( ! wp_verify_nonce($_POST['wpacu_nonce'], 'wpacu_do_verifications') ) {
echo 'Error: The security check has failed. Location: '.__METHOD__;
return;
}
$result = array();
$ch = curl_init();
$curlParams = array(
CURLOPT_URL => get_site_url(),
CURLOPT_HEADER => true,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true
);
if (defined('CURLOPT_HTTP_VERSION') && defined('CURL_HTTP_VERSION_2_0')) {
// cURL will attempt to make an HTTP/2.0 request (can downgrade to HTTP/1.1)))
$curlParams[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0;
}
curl_setopt_array($ch, $curlParams);
$response = curl_exec($ch);
if (! $response) {
echo curl_error($ch); // something else happened causing the request to fail
}
if (strpos($response, 'HTTP/2') === 0) {
$result['has_http2'] = '1'; // Has HTTP/2 Support
}
if ((strpos($response, 'cf-cache-status:') !== false) &&
(strpos($response, 'cf-request-id:') !== false) &&
(strpos($response, 'cf-ray:') !== false)) {
$result['uses_cloudflare'] = '1'; // Uses Cloudflare
}
curl_close($ch);
echo wp_json_encode($result);
exit();
}
/**
*
*/
public function ajaxUpdateSpecificSettings()
{
// Option: "On Assets List Layout Load, keep the groups:"
if (isset($_POST['wpacu_update_keep_the_groups'])) {
if ( ! isset( $_POST['action'], $_POST['wpacu_keep_the_groups_state'] ) || ! Menu::userCanManageAssets() ) {
return;
}
if ( $_POST['wpacu_update_keep_the_groups'] !== 'yes' ) {
return;
}
if ( ! isset($_POST['wpacu_nonce']) ) {
echo 'Error: The security nonce was not sent for verification. Location: '.__METHOD__;
return;
}
if ( ! wp_verify_nonce($_POST['wpacu_nonce'], 'wpacu_update_specific_settings_nonce') ) {
echo 'Error: The nonce security check has failed. Location: '.__METHOD__;
return;
}
$newKeepTheGroupsState = $_POST['wpacu_keep_the_groups_state'];
$this->updateOption( 'assets_list_layout_areas_status', $newKeepTheGroupsState );
echo 'done';
}
exit();
}
/**
*
*/
public function adminFooterSettings()
{
if ( ! (defined('CURLOPT_HTTP_VERSION') && defined('CURL_HTTP_VERSION_2_0')) ) {
?>