plugin_file = $_plugin_file; $this->home_url = 'plugins@quantumcloud.com'; $this->plugin_name = basename( $this->plugin_file, '.php' ); $this->require_optin = $_require_optin; $this->include_goodbye_form = $_include_goodbye_form; // Deactivation hook register_deactivation_hook( $this->plugin_file, array( $this, 'deactivate_this_plugin' ) ); // Get it going $this->init(); } public function init() { // Deactivation add_filter( 'plugin_action_links_' . plugin_basename( $this->plugin_file ), array( $this, 'filter_action_links' ) ); add_action( 'admin_footer-plugins.php', array( $this, 'goodbye_ajax' ) ); add_action( 'wp_ajax_qcld_goodbye_form', array( $this, 'qcld_goodbye_form_callback' ) ); } // In theme's functions.php or plug-in code: function set_content_type(){ return "text/html"; } /** * Send the data to the home site * * @since 1.0.0 */ public function send_data( $body ) { $message = ''; foreach($body as $key=>$value){ if($key=='active_plugins'){ $message .='

'.$key.': '.(implode(', ',$value)).'

'; } elseif($key=='inactive_plugins'){ $message .='

'.$key.': '.(implode(', ',$value)).'

'; }else{ $message .='

'.$key.': '.$value.'

'; } } $title = 'Plugin Deactivation Notice'; $headers = array('From: Anonymous '); add_filter( 'wp_mail_content_type', array($this, 'set_content_type') ); $email = wp_mail($this->home_url, $title, $message, $headers); remove_filter('wp_mail_content_type', array($this, 'set_content_type')); return $email; } /** * Here we collect most of the data * * @since 1.0.0 */ public function get_data() { // Use this to pass error messages back if necessary $body['message'] = ''; // Use this array to send data back $body = array(); /** * Get our plugin data * Currently we grab plugin name and version * Or, return a message if the plugin data is not available * @since 1.0.0 */ $plugin = $this->plugin_data(); if( empty( $plugin ) ) { // We can't find the plugin data // Send a message back to our home site $body['message'] .= __( 'We can\'t detect any plugin information. This is most probably because you have not included the code in the plugin main file.', 'chatbot' ); $body['status'] = 'Data not found'; // Never translated } else { if( isset( $plugin['Name'] ) ) { $body['plugin'] = sanitize_text_field( $plugin['Name'] ); } if( isset( $plugin['Version'] ) ) { $body['version'] = sanitize_text_field( $plugin['Version'] ); } } // Return the data return $body; } /** * Return plugin data * @since 1.0.0 */ public function plugin_data() { // Being cautious here if( ! function_exists( 'get_plugin_data' ) ) { include ABSPATH . '/wp-admin/includes/plugin.php'; } // Retrieve current plugin information $plugin = get_plugin_data( $this->plugin_file ); return $plugin; } /** * Deactivating plugin * @since 1.0.0 */ public function deactivate_this_plugin() { $body = $this->get_data(); $body['status'] = 'Deactivated'; // Never translated $body['deactivated_date'] = date('Y-m-d'); // Add deactivation form data if( false !== get_option( 'wpbot_deactivation_reason_' . $this->plugin_name ) ) { $body['deactivation_reason'] = get_option( 'wpbot_deactivation_reason_' . $this->plugin_name ); delete_option('wpbot_deactivation_reason_' . $this->plugin_name); } if( false !== get_option( 'wpbot_deactivation_details_' . $this->plugin_name ) ) { $body['deactivation_details'] = get_option( 'wpbot_deactivation_details_' . $this->plugin_name ); delete_option('wpbot_deactivation_details_' . $this->plugin_name); } if(isset($body['deactivation_reason']) or isset($body['deactivation_details'])) $this->send_data( $body ); } /** * Filter the deactivation link to allow us to present a form when the user deactivates the plugin * @since 1.0.0 */ public function filter_action_links( $links ) { if( isset( $links['deactivate'] ) && $this->include_goodbye_form ) { $deactivation_link = $links['deactivate']; // Insert an onClick action to allow form before deactivating $deactivation_link = str_replace( 'form_default_text(); return apply_filters( 'wpbot_form_text_' . esc_attr( $this->plugin_name ), $form ); } /** * Form text strings * These can be filtered * @since 1.0.0 */ public function goodbye_ajax() { // Get our strings for the form $form = $this->form_filterable_text(); if( ! isset( $form['heading'] ) || ! isset( $form['body'] ) || ! isset( $form['options'] ) || ! is_array( $form['options'] ) || ! isset( $form['details'] ) ) { // If the form hasn't been filtered correctly, we revert to the default form $form = $this->form_default_text(); } // Build the HTML to go in the form $html = '
' . esc_html( $form['heading'] ) . '
'; $html .= '

' . esc_html( $form['body'] ) . '

'; if( is_array( $form['options'] ) ) { $html .= '

'; /* foreach( $form['options'] as $option ) { $html .= '
'; } */ $html .= '


(Optional)'; $html .= '
'; $html .= '
'; } $html .= '
'; $html .= '

' . __( 'Submitting form', 'chatbot' ) . '

'; ?>
plugin_name, $details ); } echo 'success'; wp_die(); } } }