private function reset_mail($hash, $camp)
 {
     $campaign = get_post($camp);
     $user = new WP_query(array('post_type' => 'subscriber', 'post_status' => array('subscribed', 'unsubscribed', 'hardbounced', 'error'), 'name' => $hash, 'posts_per_page' => 1));
     //no user
     if (!$user) {
         return true;
     }
     $user = $user->post;
     //get campaign data
     wp_cache_delete($campaign->ID, 'post' . '_meta');
     $campaign_data = get_post_meta($campaign->ID, 'mymail-campaign', true);
     //get users campaign data
     wp_cache_delete($user->ID, 'post' . '_meta');
     $user_campaigndata = get_post_meta($user->ID, 'mymail-campaigns', true);
     if (!$campaign_data) {
         return false;
     }
     //no campaigndata for this user
     if (!isset($user_campaigndata[$campaign->ID])) {
         return true;
     }
     //remove data
     $user_campaigndata[$campaign->ID]['sent'] = false;
     $campaign_data['sent']--;
     //save the bounce
     if (!isset($user_campaigndata[$campaign->ID]['bounces'])) {
         $user_campaigndata[$campaign->ID]['bounces'] = 0;
     }
     $user_campaigndata[$campaign->ID]['bounces']++;
     $bounce_limit_reached = $user_campaigndata[$campaign->ID]['bounces'] >= mymail_option('bounce_attempts', 3);
     //hardbounce
     if ($bounce_limit_reached) {
         //save the hardbounces to the campaign
         $campaign_data['hardbounces']++;
         //set status of user to hardbounced
         $this->change_status($user, 'hardbounced');
         mymail_clear_totals();
     }
     //save user stuff
     $this->post_meta($user->ID, 'mymail-campaigns', $user_campaigndata);
     //save campaign stuff
     $this->post_meta($campaign->ID, 'mymail-campaign', $campaign_data);
     if ($campaign->post_status == 'finished') {
         $this->change_status($campaign, 'active', true);
         $this->add_cron();
     }
     return true;
 }
 public function ajax_delete_contacts()
 {
     $return['success'] = false;
     $this->ajax_nonce(json_encode($return));
     if (!current_user_can('delete_subscribers') || !current_user_can('delete_others_subscribers')) {
         $return['msg'] = 'no allowed';
         echo json_encode($return);
         exit;
     }
     parse_str($_POST['data'], $d);
     global $wpdb;
     $count = 0;
     if (isset($d['nolists'])) {
         $count += $wpdb->get_var("SELECT COUNT(DISTINCT a.ID) FROM {$wpdb->posts} a LEFT JOIN {$wpdb->users} u ON (a.post_author = u.ID) WHERE a.post_type IN('subscriber') AND a.post_status IN ('" . implode("','", $d['status']) . "') AND a.ID NOT IN (SELECT object_id FROM {$wpdb->term_relationships} tr LEFT JOIN {$wpdb->term_taxonomy} tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE taxonomy = 'newsletter_lists')");
         $sql = "DELETE a, b FROM {$wpdb->posts} a LEFT JOIN {$wpdb->users} u ON (a.post_author = u.ID) LEFT JOIN {$wpdb->postmeta} b ON ( a.ID = b.post_id ) WHERE a.post_status IN ('" . implode("','", $d['status']) . "') AND a.post_type IN('subscriber') AND a.ID NOT IN (SELECT object_id FROM {$wpdb->term_relationships} tr LEFT JOIN {$wpdb->term_taxonomy} tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id) WHERE taxonomy = 'newsletter_lists')";
         $return['success'] = !!$wpdb->query($sql);
     }
     if (!empty($d['lists'])) {
         $count += $wpdb->get_var("SELECT COUNT(DISTINCT a.ID) FROM {$wpdb->posts} a LEFT JOIN {$wpdb->term_relationships} b ON ( a.ID = b.object_id ) LEFT JOIN {$wpdb->postmeta} c ON ( a.ID = c.post_id ) LEFT JOIN {$wpdb->term_taxonomy} d ON ( d.term_taxonomy_id = b.term_taxonomy_id ) LEFT JOIN {$wpdb->terms} e ON ( e.term_id = d.term_id ) WHERE a.post_type IN('subscriber') AND a.post_status IN ('" . implode("','", $d['status']) . "') AND e.term_id IN (" . implode(',', $d['lists']) . ");");
         $rl = isset($d['remove_lists']) ? ',d' : '';
         $sql = "DELETE a,b,c" . $rl . " FROM {$wpdb->posts} a LEFT JOIN {$wpdb->term_relationships} b ON ( a.ID = b.object_id ) LEFT JOIN {$wpdb->postmeta} c ON ( a.ID = c.post_id ) LEFT JOIN {$wpdb->term_taxonomy} d ON ( d.term_taxonomy_id = b.term_taxonomy_id ) LEFT JOIN {$wpdb->terms} e ON ( e.term_id = d.term_id ) WHERE a.post_type IN('subscriber') AND a.post_status IN ('" . implode("','", $d['status']) . "') AND e.term_id IN (" . implode(',', $d['lists']) . ");";
         $return['success'] = !!$wpdb->query($sql);
     }
     if ($return['success']) {
         global $mymail_subscriber;
         $mymail_subscriber->trigger_update_post_term_count();
         mymail_clear_totals();
         $return['msg'] = sprintf(__('%d subscribers removed', 'mymail'), $count);
     } else {
         $return['msg'] = __('no subscribers removed', 'mymail');
     }
     echo json_encode($return);
     exit;
 }
 public function activate()
 {
     global $wpdb;
     if (function_exists('is_multisite') && is_multisite()) {
         $old_blog = $wpdb->blogid;
         $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM {$wpdb->blogs}"));
     } else {
         $blogids = array(false);
     }
     foreach ($blogids as $blog_id) {
         if ($blog_id) {
             switch_to_blog($blog_id);
         }
         $this->register_post_status();
         $this->register_post_type();
         if (!term_exists(__('Wordpress Users', 'mymail'), 'newsletter_lists')) {
             wp_insert_term(__('Wordpress Users', 'mymail'), 'newsletter_lists', array('slug' => 'wordpress-users'));
         }
         mymail_clear_totals();
     }
     if ($blog_id) {
         switch_to_blog($old_blog);
     }
 }