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); } }