From 7a8d963d561c5ce10b95266ab7f3bd2a3a37e732 Mon Sep 17 00:00:00 2001 From: Tim LS Date: Fri, 4 Oct 2024 23:04:27 +0300 Subject: [PATCH] Add deactivation modal Add survey modal on plugin deactivation. Add questions about why deactivating and possibility to clear settings(Multisite supported) --- assets/css/litespeed.css | 34 +++++++++ assets/js/litespeed-cache-admin.js | 59 +++++++++++++++ src/activation.cls.php | 68 ++++++++++++++---- src/admin-display.cls.php | 20 +++++- tpl/img_optm/summary.tpl.php | 2 +- tpl/inc/modal.deactivation.php | 111 +++++++++++++++++++++++++++++ tpl/inc/modal.footer.php | 6 +- tpl/inc/modal.header.php | 26 ++++--- 8 files changed, 299 insertions(+), 27 deletions(-) create mode 100644 tpl/inc/modal.deactivation.php diff --git a/assets/css/litespeed.css b/assets/css/litespeed.css index 82cd5ea96..1130a096c 100644 --- a/assets/css/litespeed.css +++ b/assets/css/litespeed.css @@ -53,9 +53,11 @@ input[type='checkbox'].litespeed-tiny-toggle { background: none; box-shadow: none; } + input[type='checkbox'].litespeed-tiny-toggle:focus { box-shadow: none; } + input[type='checkbox'].litespeed-tiny-toggle:after { content: ''; font-size: 8px; @@ -70,6 +72,7 @@ input[type='checkbox'].litespeed-tiny-toggle:after { border-radius: 72px; box-shadow: 0 0 12px rgb(0 0 0 / 15%) inset; } + input[type='checkbox'].litespeed-tiny-toggle:before { content: ''; width: 14px; @@ -96,6 +99,7 @@ input[type='checkbox'].litespeed-tiny-toggle:checked:before, input[type='checkbox'].litespeed-tiny-toggle:checked:after { transition: ease 0.15s; } + input[type='checkbox'].litespeed-tiny-toggle:checked:after { /*content: 'ON';*/ background-color: #2271b1; @@ -104,10 +108,12 @@ input[type='checkbox'].litespeed-tiny-toggle:checked:after { .block-editor__container input[type='checkbox'].litespeed-tiny-toggle { border: 0 !important; } + .block-editor__container input[type='checkbox'].litespeed-tiny-toggle:before { top: 5px; left: 7px; } + .block-editor__container input[type='checkbox'].litespeed-tiny-toggle:checked:before { left: 23px; } @@ -3659,6 +3665,7 @@ p.litespeed-dashboard-unlock-footer { .litespeed-body tbody > tr > th.litespeed-padding-left { padding-left: 3em; } + @media screen and (max-width: 680px) { .litespeed-body tbody > tr > th.litespeed-padding-left { padding-left: 10px; @@ -4413,3 +4420,30 @@ a.litespeed-media-href svg:hover { color: #dbdbdb; font-size: 1rem; } + +/* ======================================= + Deactivate modal +======================================= */ +#litespeed-modal-deactivate { + padding: 20px; +} + +#litespeed-modal-deactivate h2 { + margin: 0px; +} + +#litespeed-modal-deactivate .litespeed-wrap { + margin: 10px 0px; +} + +#litespeed-modal-deactivate .deactivate-clear-settings-wrapper, +#litespeed-modal-deactivate .deactivate-actions { + margin-top: 30px; +} + +#litespeed-modal-deactivate .deactivate-reason-wrapper label, +#litespeed-modal-deactivate .deactivate-clear-settings-wrapper label { + width: 100%; + display: block; + margin-bottom: 5px; +} diff --git a/assets/js/litespeed-cache-admin.js b/assets/js/litespeed-cache-admin.js index 7b8047f05..1205d1820 100644 --- a/assets/js/litespeed-cache-admin.js +++ b/assets/js/litespeed-cache-admin.js @@ -268,6 +268,65 @@ var _litespeed_dots; $(this).addClass('disabled'); }); } + + /** + * Deactivate link + */ + var modal_element = $('#litespeed-deactivation'); + if ($('#deactivate-litespeed-cache').length > 0 && modal_element.length > 0) { + // Variables + var modal_formElement = $('#litespeed-deactivation-form'); + + $('#deactivate-litespeed-cache').on('click', function (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + modal_formElement.attr('action', decodeURI($(this).attr('href'))); + modal_element.iziModal({ + radius: '.5rem', + width: 550, + autoOpen: true, + }); + }); + + $(document).on('submit', '#litespeed-deactivation-form', function (e) { + e.preventDefault(); + $('#litespeed-deactivation-form-submit').attr('disabled', true); + var container = $('#litespeed-deactivation-form'); + let deleteSite = $(container).find('#litespeed-deactivate-clear').is(':checked'); + let deleteNetwork = $(container).find('#litespeed-deactivate-network').is(':checked'); + + // Save selected data + var data = { + id: window.lscId, + siteLink: window.location.hostname, + reason: $(container).find('[name=litespeed-reason]:checked').val(), + deleteSite: deleteSite, + deleteNetwork: deleteNetwork, + }; + + $.ajax({ + url: 'https://wpapi.quic.cloud/survey', + dataType: 'json', + method: 'POST', + cache: false, + data: data, + beforeSend: function (xhr) { + //xhr.setRequestHeader('X-WP-Nonce', litespeed_data.nonce); + }, + success: function (data) { + console.log('QC data sent.'); + }, + error: function (xhr, error) { + console.log('Error sending data to QC.'); + }, + }); + + $('#litespeed-deactivation-form')[0].submit(); + }); + $(document).on('click', '#litespeed-deactivation-form-cancel', function (e) { + modal_element.iziModal('close'); + }); + } }); })(jQuery); diff --git a/src/activation.cls.php b/src/activation.cls.php index e251fbf1b..938ce5eb1 100644 --- a/src/activation.cls.php +++ b/src/activation.cls.php @@ -89,18 +89,6 @@ public static function uninstall_litespeed_cache() { Task::destroy(); - // Delete options - foreach (Conf::cls()->load_default_vals() as $k => $v) { - Base::delete_option($k); - } - - // Delete site options - if (is_multisite()) { - foreach (Conf::cls()->load_default_site_vals() as $k => $v) { - Base::delete_site_option($k); - } - } - // Delete avatar table Data::cls()->tables_del(); @@ -109,8 +97,6 @@ public static function uninstall_litespeed_cache() } Cloud::version_check('uninstall'); - - // Files has been deleted when deactivated } /** @@ -222,6 +208,46 @@ public static function register_deactivation() Purge::purge_all(); + // 0. Delete all sites data on request from modal + // If clear current blog + if (isset($_POST['lsc-clear']) && $_POST['lsc-clear'] == 'true') { + // Delete options + self::delete_site_settings(); + + // Delete avatar table + self::delete_site_tables(); + + // Cloud uninstall + Cloud::version_check('uninstall'); + } + + // if clear network wide settings + if (is_multisite() && isset($_POST['lsc-clear-network']) && $_POST['lsc-clear-network'] == 'true') { + $current_blog = get_current_blog_id(); + // get all sites + $subsites = get_sites(); + + // clear foreach site + foreach ($subsites as $subsite) { + $sub_blog_id = (int) $subsite->blog_id; + if (isset($sub_blog_id) && $sub_blog_id != $current_blog) { + // Switch to blog + switch_to_blog($sub_blog_id); + + // Delete site options + self::delete_site_settings(); + + // Delete avatar table + self::delete_site_tables(); + + // Cloud uninstall + Cloud::version_check('uninstall'); + } + } + + switch_to_blog($current_blog); + } + if (is_multisite()) { if (!self::is_deactivate_last()) { if (is_network_admin()) { @@ -264,10 +290,24 @@ public static function register_deactivation() self::_del_conf_data_file(); + /* 6) delete option lscwp_whm_install */ + // delete in case it's not deleted prior to deactivation. GUI::dismiss_whm(); } + private static function delete_site_settings() + { + global $wpdb; + + $wpdb->query($wpdb->prepare("DELETE FROM `$wpdb->options` WHERE option_name LIKE '%s'", array('litespeed.%'))); + } + + private static function delete_site_tables() + { + Data::cls()->tables_del(); + } + /** * Manage related files based on plugin latest conf * diff --git a/src/admin-display.cls.php b/src/admin-display.cls.php index b78362caa..38107dbf1 100644 --- a/src/admin-display.cls.php +++ b/src/admin-display.cls.php @@ -260,6 +260,13 @@ public function enqueue_scripts() } } + // Load iziModal JS and CSS + if ($pagenow == 'plugins.php') { + wp_enqueue_script(Core::PLUGIN_NAME . '-iziModal', LSWCP_PLUGIN_URL . 'assets/js/iziModal.min.js', array(), Core::VER, 'all'); + wp_enqueue_style(Core::PLUGIN_NAME . '-iziModal', LSWCP_PLUGIN_URL . 'assets/css/iziModal.min.css', array(), Core::VER, 'all'); + add_action('admin_footer', array($this, 'add_deactivation_html')); + } + if ($localize_data) { wp_localize_script(Core::PLUGIN_NAME, 'litespeed_data', $localize_data); } @@ -267,6 +274,18 @@ public function enqueue_scripts() wp_enqueue_script(Core::PLUGIN_NAME); } + /** + * Add . + * + * @since 1.0.0 + * @access public + * @return void + */ + public function add_deactivation_html() + { + require LSCWP_DIR . 'tpl/inc/modal.deactivation.php'; + } + /** * Babel type for crawler * @@ -291,7 +310,6 @@ public function babel_type($tag, $handle, $src) */ public function add_plugin_links($links) { - // $links[] = '' . __('Settings', 'litespeed-cache') . ''; $links[] = '' . __('Settings', 'litespeed-cache') . ''; return $links; diff --git a/tpl/img_optm/summary.tpl.php b/tpl/img_optm/summary.tpl.php index d305bb82a..c0b42a8e0 100644 --- a/tpl/img_optm/summary.tpl.php +++ b/tpl/img_optm/summary.tpl.php @@ -315,7 +315,7 @@ + diff --git a/tpl/inc/modal.header.php b/tpl/inc/modal.header.php index 8d1fdfdd5..a05e07916 100644 --- a/tpl/inc/modal.header.php +++ b/tpl/inc/modal.header.php @@ -1,16 +1,26 @@ -
+
> - -
-
-
- + +
+
+
+ + +
+

+
+ -
+