oont-contents/plugins/wp-rocket/inc/Engine/Admin/Deactivation/DeactivationIntent.php
2025-02-08 15:10:23 +01:00

198 lines
4.5 KiB
PHP

<?php
namespace WP_Rocket\Engine\Admin\Deactivation;
use WP_Rocket\Abstract_Render;
use WP_Rocket\Admin\Options;
use WP_Rocket\Admin\Options_Data;
class DeactivationIntent extends Abstract_Render {
/**
* Options instance.
*
* @var Options
*/
private $options_api;
/**
* Options_Data instance.
*
* @since 3.0
*
* @var Options_Data
*/
private $options;
/**
* Constructor
*
* @since 3.0
*
* @param string $template Template path.
* @param Options $options_api Options instance.
* @param Options_Data $options Options_Data instance.
*/
public function __construct( $template, Options $options_api, Options_Data $options ) {
parent::__construct( $template );
$this->options_api = $options_api;
$this->options = $options;
}
/**
* Checks if the deactivation modal is snoozed
*
* @since 3.11.1
*
* @return bool
*/
private function is_snoozed(): bool {
if ( 1 === (int) get_option( 'wp_rocket_hide_deactivation_form', 0 ) ) {
return true;
}
if ( false !== get_transient( 'rocket_hide_deactivation_form' ) ) {
return true;
}
return false;
}
/**
* Inserts the deactivation intent form on plugins page
*
* @since 3.0
*
* @return void
*/
public function insert_deactivation_intent_form() {
if ( $this->is_snoozed() ) {
return;
}
$data = [
'form_action' => admin_url( 'admin-post.php?action=rocket_deactivation' ),
];
echo $this->generate( 'form', $data ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Dynamic content is properly escaped in the view.
}
/**
* Deactivate the plugin and set the snooze value
*
* @since 3.11.1
*
* @param int $snooze Snooze value.
*
* @return void
*/
public function deactivate_and_snooze( $snooze ) {
$this->set_snooze( $snooze );
deactivate_plugins( 'wp-rocket/wp-rocket.php' );
}
/**
* Sets the snooze value
*
* @since 3.11.1
*
* @param int $snooze Snooze value.
*
* @return void
*/
private function set_snooze( int $snooze ) {
if ( 0 === $snooze ) {
add_option( 'wp_rocket_hide_deactivation_form', 1 );
return;
}
set_transient( 'rocket_hide_deactivation_form', 1, $snooze * DAY_IN_SECONDS );
}
/**
* Activates WP Rocket safe mode by deactivating possibly layout breaking options
*
* @since 3.0
*
* @return void
*/
public function activate_safe_mode() {
/**
* Filters the array of options to reset when activating safe mode
*
* @since 3.7
*
* @param array $options Array of options to reset.
*/
$reset_options = apply_filters(
'rocket_safe_mode_reset_options',
[
'async_css' => 0,
'lazyload' => 0,
'lazyload_iframes' => 0,
'lazyload_youtube' => 0,
'minify_css' => 0,
'minify_concatenate_css' => 0,
'minify_js' => 0,
'minify_concatenate_js' => 0,
'defer_all_js' => 0,
'delay_js' => 0,
'remove_unused_css' => 0,
'minify_google_fonts' => 0,
'cdn' => 0,
]
);
$this->options->set_values( $reset_options );
$this->options_api->set( 'settings', $this->options->get_options() );
}
/**
* Add modal assets on the plugins page
*
* @since 3.11.1
*
* @param string $hook The current admin page.
*
* @return void
*/
public function add_modal_assets( $hook ) {
if ( 'plugins.php' !== $hook ) {
return;
}
if ( $this->is_snoozed() ) {
return;
}
wp_enqueue_style( 'wpr-modal', rocket_get_constant( 'WP_ROCKET_ASSETS_CSS_URL' ) . 'wpr-modal.css', null, rocket_get_constant( 'WP_ROCKET_VERSION' ) );
wp_enqueue_script( 'micromodal', rocket_get_constant( 'WP_ROCKET_ASSETS_JS_URL' ) . 'micromodal.min.js', null, '0.4.10', true );
wp_add_inline_script(
'micromodal',
'window.addEventListener("DOMContentLoaded", (event) => {
document.getElementById("deactivate-wp-rocket").addEventListener("click", (event) => {event.preventDefault();});MicroModal.init();
});'
);
}
/**
* Add data attribute to WP Rocket deactivation link for the modal
*
* @since 3.11.1
*
* @param string[] $actions An array of plugin action links.
*
* @return array
*/
public function add_data_attribute( $actions ) {
if ( ! isset( $actions['deactivate'] ) ) {
return $actions;
}
$deactivate_link = str_replace( '<a', '<a data-micromodal-trigger="wpr-deactivation-modal"', $actions['deactivate'] );
$actions['deactivate'] = $deactivate_link;
return $actions;
}
}