plugin_file = $_plugin_file;
$this->home_url = 'plugins@quantumcloud.net';
$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'] = gmdate( '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 .= '
';
}
$html .= '
';
$html .= ' ' . __( 'Submitting form', 'chatbot' ) . '
';
?>
plugin_name, $details );
}
echo 'success';
wp_die();
}
}
}