Albator57
Forum Replies Created
Viewing 1 replies (of 1 total)
-
Forum: Plugins
In reply to: [WP Breaking News Mail] Do not work anymore with last version of PHPYou must replace :
$_POST by $_my_post
and :
$_GET by $_my_get
but not all, only these that are declared in function() :<?php /** * Description of BreakingNewsMail_Controller * @author Daniela Valero aka DaHe * @copyright 2012 * @license https://www.gnu.org/licenses/gpl.html GPL v2 * @since 1.0 * @package WP-Breaking-News-Mail */ class BreakingNewsMail_Controller { private $signup_dates = array(); private $script_debug; private $signup_ips = array(); private $bnm_options = array(); private $post_title = ''; private $permalink = ''; private $post_date = ''; private $post_time = ''; private $sender_name = ''; private $sender_email = ''; private $filtered = 0; private $preview_email = false; // state variables used to affect processing private $email = ''; private $message = ''; private $excerpt_length = 55; // some messages private $confirmation_sent; private $already_subscribed; private $not_subscribed = ''; private $not_an_email = ''; private $error = ''; private $mail_sent = ''; private $mail_failed = ''; private $form = ''; private $no_such_email = ''; private $added = ''; private $deleted = ''; private $subscribe = ''; private $unsubscribe = ''; private $confirm_subject = ''; private $options_saved = ''; private $options_reset = ''; private $search_result = Array(); function __construct() { $this->bnm_options = get_option('bnm_options'); $this->messages_to_show(); add_shortcode('BNM_CONFIRMATION_MESSAGE', array(&$this, 'show_bnm_confirmation_message')); if (is_admin()) { if (defined('SENDING_BNM_ALERT') && SENDING_BNM_ALERT) { return; } else { define('SENDING_BNM_ALERT', true); add_action('publish_post', array(&$this, 'send_breaking_new_email_alert')); } if (isset($_my_post['bnm_admin']) && isset($_my_post['csv']) && $_my_post['csv']) { $date = date('Y-m-d'); header("Content-Description: File Transfer"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=subscribed_users_$date.csv"); header("Pragma: no-cache"); header("Expires: 0"); echo $this->exportSubscribersToCSV(); exit(0); } } else { add_action('wp_enqueue_scripts', array(&$this, 'bnm_load_jquery')); add_action('wp_head', array(&$this, 'add_css_bnm')); if (isset($_my_get['bnm'])) { // echo "someone is confirming a request"; if (defined('DOING_BNM_CONFIRM') && DOING_BNM_CONFIRM) { return; } else { define('DOING_BNM_CONFIRM', true); add_filter('query_string', array(&$this, 'query_filter')); add_filter('the_title', array(&$this, 'title_filter')); add_filter('the_content', array(&$this, 'confirm_subscriptor')); $this->confirm_subscriptor(); } } } } function show_bnm_confirmation_message($atts) { extract(shortcode_atts(array( 'subscription_confirmation' => '', 'unsubscription_confirmation' => '', ), $atts)); return "subscription_confirmation = {$this->message}"; } /* Database querys */ /** * adds a subscriber * * @since 1 * * @param email $email user's email * @param ip $ip ip from user's compurter * @return string $message Its a feedback message */ function add_subscriptor($email, $ip) { global $wpdb; $message = ''; if (!is_email($email)) { echo $this->no_such_email; return false; } if ($this->is_email_subscribed($email)) { echo $this->already_subscribed; return false; } $was_deleted = $this->was_email_deleted($email); if ($was_deleted) { $result = $wpdb->get_results("UPDATE " . BNM_USERS . " SET status=1 WHERE CAST(email as binary)='$email'"); } else { $result = $wpdb->get_results($wpdb->prepare("INSERT INTO " . BNM_USERS . " (email, active, date, ip) VALUES (%s, %d, NOW(), %s)", $email, 0, $ip)); } $message =""; if ($result !== false) { if (!$this->is_email_active($email)) { $this->email = $email; $email_sent = $this->send_confirm(); if ($email_sent) $message = __(', a confirmation email will be sent', 'bnm'); else $message = __('error sending confirmation', 'bnm'); } return $message; }else{ return false; } } /** * Overrides the default query when handling a (un)subscription confirmation * This is basically a trick: if the s2 variable is in the query string, just grab the first * static page and override it's contents later with title_filter() * * @since 1 * */ function query_filter() { // don't interfere if we've already done our thing if ($this->filtered == 1) { return; } global $wpdb; if ($this->bnm_options['bnmpage'] != 0) { return "page_id=" . $this->bnm_options['bnmpage']; } else { $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_type='page' AND post_status='publish' LIMIT 1"); if ($id) { return "page_id=$id"; } else { return "showposts=1"; } } } /** * Overrides the page title * * @since 1 * */ function title_filter($title) { // don't interfere if we've already done our thing if (in_the_loop()) { return __('Subscription Confirmation', 'bnm'); } else { return $title; } } /* * Confirm request from the link emailed to the user and email the admin * @since 1 * * @param content $content * @return string $message Its a feedback message */ function confirm_subscriptor($content = '') { global $wpdb; $code = $_GET['bnm']; $action = intval(substr($code, 0, 1)); $hash = substr($code, 1, 32); $id = intval(substr($code, 33)); if ($id) { $this->email = is_email($this->get_email($id)); if (!$this->email || $hash !== md5($this->email)) { $this->message = $this->no_such_email; return; } } else { $this->message = $this->no_such_email; return; } if ($action == 1) { // make this subscription active $this->ip = $_SERVER['REMOTE_ADDR']; $this->confirm_subscriptor_db($this->email); $this->message = $this->added; } elseif ('0' == $action) { // remove this subscriber $this->delete_subscriptor($this->email); $this->message = $this->deleted; } if ('' != $this->message) { return $this->message; } } /** * performs the confirmaton of a subscriber on the database * * @since 1 * * @param email $email users email * @return boolean true if success */ function confirm_subscriptor_db($email) { global $wpdb; if (!is_email($email)) { return false; } if ($this->is_email_subscribed_and_confirmed($email)) return false; $wpdb->get_results("UPDATE " . BNM_USERS . " SET active=1 WHERE CAST(email as binary)='$email'"); } /** * delete a subscriber from the db * * @since 1 * * @param email $email users email * @return boolean true if success */ function delete_subscriptor($email) { global $wpdb; if (!is_email($email)) { return false; } if (!$this->is_email_subscribed($email)) return false; ////$wpdb->get_results("DELETE FROM " . BNM_USERS . " WHERE CAST(email as binary)='$email'"); $result = $wpdb->get_results("UPDATE " . BNM_USERS . " SET status=0 WHERE CAST(email as binary)='$email'"); return $result; } /* Email related functions */ /** * Construct unsubscribe link * * @since 1 * * @param email $email users email * @param mailtext $mailtext the text of the email * @return mailtext with the link for unsubscriptions */ private function construct_unsubscribe_link($email, $mailtext) { $id = $this->get_id($email); if (!$id) { return false; } // echo "<br> Email: $email -- $id <br> "; $url = $this->get_confirmation_page_link(); $linkUnsubscribe = $url . "/?bnm=0"; $linkUnsubscribe .= md5(is_email($email)); //$linkUnsubscribe .= $email; $linkUnsubscribe .= $id; $mailtext = str_replace("{UNSUBSCRIBE_ACTION}", $linkUnsubscribe, $mailtext); return $mailtext; } /* * validate if an email is already registered * @since 1 * * @param email $email users email * @return boolean */ private function is_email_subscribed($email) { global $wpdb; //verifica que el usuario no esté suscrito $isSuscribed = false; $results = $wpdb->get_results("SELECT email FROM " . BNM_USERS . " WHERE CAST(email as binary)='$email' and status=1", ARRAY_N); if ($results) $isSuscribed = true; foreach ($results as $result) { if ($result[0] == $email) $isSuscribed = true; } return $isSuscribed; } /* * validate if an email is already registered and confirmed * @since 1 * * @param email $email users email * @return boolean */ private function is_email_subscribed_and_confirmed($email) { global $wpdb; //verifica que el usuario no esté suscrito $isSuscribed = false; $results = $wpdb->get_results("SELECT email FROM " . BNM_USERS . " WHERE CAST(email as binary)='$email' and status=1 and active=1", ARRAY_N); if ($results) $isSuscribed = true; foreach ($results as $result) { if ($result[0] == $email) $isSuscribed = true; } return $isSuscribed; } /* * Checks if an email was deleted * @since 1 * * @param email $email * @return boolean */ private function was_email_deleted($email) { global $wpdb; //verifica que el usuario no esté suscrito $wasDeleted = false; $results = $wpdb->get_results("SELECT email FROM " . BNM_USERS . " WHERE CAST(email as binary)='$email' and status=0", ARRAY_N); if ($results) $wasDeleted = true; return $wasDeleted; } /* * validate if an email is confirmed * @since 1 * * @param email $email users email * @return boolean */ private function is_email_active($email) { global $wpdb; $isActive = false; $result = $wpdb->get_results("SELECT active FROM " . BNM_USERS . " WHERE CAST(email as binary)='$email' and status=1;", ARRAY_N); if ($result) $isActive = $result[0][0]; return $isActive; } /* * Performs string substitutions for bnm mail tags * @since 1 * * @param string $string is the string which contain the email text * @return string $string */ function substitute_email_tags($string = '') { if ('' == $string) { return; } $string = str_replace("{BLOGNAME}", html_entity_decode(get_option('blogname'), ENT_QUOTES), $string); $string = str_replace("{BLOGLINK}", get_option('home'), $string); $string = str_replace("{TITLE}", stripslashes($this->post_title), $string); $link = "<a href=\"" . $this->get_tracking_link($this->permalink) . "\">" . $this->get_tracking_link($this->permalink) . "</a>"; $string = str_replace("{PERMALINK}", $link, $string); $string = str_replace("{DATE}", $this->post_date, $string); $string = str_replace("{TIME}", $this->post_time, $string); return $string; } /* * Construct standard set of email headers * @since 1 * * @param type of content $type text or html * @return string $headers */ function construct_standard__email_headers($type = 'text') { if (empty($this->sender_name) || empty($this->sender_email)) { $this->sender_email = $this->bnm_options['sender_email']; $this->sender_name = html_entity_decode(get_option('blogname'), ENT_QUOTES); if (empty($this->sender_email)) { // Get the site domain and get rid of www. $sitename = strtolower($_SERVER['SERVER_NAME']); if (substr($sitename, 0, 4) == 'www.') { $sitename = substr($sitename, 4); } $this->sender_email = 'wordpress@' . $sitename; } } $header['From'] = $this->sender_name . " <" . $this->sender_email . ">"; $header['Reply-To'] = $this->sender_name . " <" . $this->sender_email . ">"; $header['Return-path'] = "<" . $this->sender_email . ">"; $header['Precedence'] = "list\nList-Id: " . html_entity_decode(get_option('blogname'), ENT_QUOTES) . ""; if ($type == 'html') { // To send HTML mail, the Content-Type header must be set $header['Content-Type'] = get_option('html_type') . "; charset=\"" . get_option('blog_charset') . "\""; } else { $header['Content-Type'] = "text/plain; charset=\"" . get_option('blog_charset') . "\""; } // apply header filter to allow on-the-fly amendments $header = apply_filters('bnm_email_headers', $header); // collapse the headers using $key as the header name foreach ($header as $key => $value) { $headers[$key] = $key . ": " . $value; } $headers = implode("\n", $headers); $headers .= "\n"; return $headers; } /* Creates an sends the subscription confirmation email * @since 1 * * @return boolean */ function send_confirm() { if (!$this->email) { return false; } $id = $this->get_id($this->email); if (!$id) { return false; } // generate the URL "?bnm=ACTION+HASH+ID" // ACTION = 1 to subscribe, 0 to unsubscribe // HASH = md5 hash of email address // ID = user's ID in the bnm table // use home instead of siteurl incase index.php is not in core wordpress directory $url = $this->get_confirmation_page_link(); $link = $url . "/?bnm="; // sort the headers now so we have all substitute_email_tags information $mailheaders = $this->construct_standard__email_headers(); $link .= '1'; $body = $this->substitute_email_tags(stripslashes($this->bnm_options['confirm_email'])); $body = str_replace("{CONFIRMATION_ACTION}", $this->subscribe, $body); $subject = str_replace("{CONFIRMARTION_ACTION}", $this->subscribe, $this->bnm_options['confirm_subject']); $subject = html_entity_decode($this->substitute_email_tags(stripslashes($subject)), ENT_QUOTES); $link .= md5($this->email); $link .= $id; $body = str_replace("{LINK}", $link, $body); return @wp_mail($this->email, $subject, $body, $mailheaders); } /* * Sends an email notification when a new post is published * @since 1 * * @param post $post post global object * @param preview $preview if an editor wants to see a preview */ function send_breaking_new_email_alert($post = 0, $preview = '') { if (( $_my_post['post_status'] == 'publish' ) && ( $_my_post['original_post_status'] != 'publish' )) { if (!$post) { return $post; } $post = get_post($post); if ($preview == '') { // we aren't sending a Preview to the current user so carry out checks $bnmmail = get_post_meta($post->ID, 'bnmmail', true); if ((isset($_my_post['bnm_meta_field']) && $_my_post['bnm_meta_field'] == 'no') || strtolower(trim($bnmmail)) == 'no') { return $post; } $post_cats = wp_get_post_categories($post->ID); $is_post_in_the_cats = true; foreach (explode(',', $this->bnm_options['include']) as $cat) { if (!in_array($cat, $post_cats)) { $is_post_in_the_cats = false; } } if (!$is_post_in_the_cats) { return $post; } else { $subscribers = $this->get_all_emails(); } if (empty($subscribers)) { return $post; } } // we set these class variables so that we can avoid // passing them in function calls a little later $this->post_title = "<a href=\"" . get_permalink($post->ID) . "\">" . html_entity_decode($post->post_title, ENT_QUOTES) . "</a>"; $this->permalink = get_permalink($post->ID); $this->post_date = get_the_time(get_option('date_format')); $this->post_time = get_the_time(); $this->sender_email = $this->bnm_options['sender_email']; $this->sender_name = html_entity_decode(get_option('blogname'), ENT_QUOTES); // Get email subject $subject = stripslashes(strip_tags($this->substitute_email_tags($this->bnm_options['notification_subject']))); // Get the message template $mailtext = apply_filters('bnm_email_template', $this->bnm_options['mailtext']); $mailtext = stripslashes($this->substitute_email_tags($mailtext)); $gallid = '[gallery id="' . $post->ID . '"'; $content = str_replace('[gallery', $gallid, $post->post_content); $content = apply_filters('the_content', $content); $content = str_replace("]]>", "]]>", $content); if ($this->bnm_options['email_format'] == "text") { $plaintext = $post->post_content; if (function_exists('strip_shortcodes')) { $plaintext = strip_shortcodes($plaintext); } $plaintext = preg_replace('|<s*>(.*)<\/s>|', '', $plaintext); $plaintext = preg_replace('|<strike*>(.*)<\/strike>|', '', $plaintext); $plaintext = preg_replace('|<del*>(.*)<\/del>|', '', $plaintext); $excerpt = $post->post_excerpt; if ($excerpt == "") { // no excerpt, is there a <!--more--> ? if (strpos($plaintext, '<!--more-->') !== false) { list($excerpt, $more) = explode('<!--more-->', $plaintext, 2); // strip leading and trailing whitespace $excerpt = strip_tags($excerpt); $excerpt = trim($excerpt); } else { // no <!--more-->, so grab the first 55 words $excerpt = strip_tags($plaintext); $words = explode(' ', $excerpt, $this->excerpt_length + 1); if (count($words) > $this->excerpt_length) { array_pop($words); array_push($words, '[...]'); $excerpt = implode(' ', $words); } } } // remove excess white space from with $excerpt and $plaintext $excerpt = preg_replace('|[ ]+|', ' ', $excerpt); // prepare mail body texts $excerpt_body = str_replace("{POST}", $excerpt, $mailtext); if ($preview != '') { $this->sender_email = $preview; $this->sender_name = 'Plain Text Excerpt Preview'; $this->deliver_email(array($preview), $subject, $excerpt_body); } else { $subscribers = apply_filters('bnm_send_plain_excerpt_suscribers', $subscribers, $post->ID); $this->deliver_email($subscribers, $subject, $excerpt_body); } } elseif ($this->bnm_options['email_format'] == "html") { $html_excerpt = $post->post_excerpt; if ($html_excerpt == "") { // no excerpt, is there a <!--more--> ? if (strpos($content, '<!--more-->') !== false) { list($html_excerpt, $more) = explode('<!--more-->', $content, 2); // balance HTML tags and then strip leading and trailing whitespace $html_excerpt = trim(balanceTags($html_excerpt, true)); } else { // no <!--more-->, so grab the first 55 words $words = explode(' ', $content, $this->excerpt_length + 1); if (count($words) > $this->excerpt_length) { array_pop($words); array_push($words, '[...]'); $html_excerpt = implode(' ', $words); // balance HTML tags and then strip leading and trailing whitespace $html_excerpt = trim(balanceTags($html_excerpt, true)); } else { $html_excerpt = $content; } } } $html_excerpt_body = str_replace("\r\n", "<br />\r\n", $mailtext); $html_excerpt_body = str_replace("{POST}", $html_excerpt, $html_excerpt_body); if ($preview != '') { $this->sender_email = $preview; $this->sender_name = 'HTML Excerpt Preview'; $this->deliver_email(array($preview), $subject, $html_excerpt_body, 'html'); } else { $subscribers = apply_filters('bnm_send_html_excerpt_suscribers', $subscribers, $post->ID); $this->deliver_email($subscribers, $subject, $html_excerpt_body, 'html'); } } } } /* * Delivers email to recipients in HTML or plaintext for the email alert * @since 1 * * @param array $recipients array of all emails * @param string $subject the subject of the email * @param string $message the message of the email * @param string $type type of content of the email * @return boolean */ function deliver_email($recipients = array(), $subject = '', $message = '', $type = 'text') { if (empty($recipients) || '' == $message) { return; } if ($type == 'html') { $headers = $this->construct_standard__email_headers('html'); $mailtext = apply_filters('bnm_html_email', "<html><head><title>" . $subject . "</title></head><body>" . $message . "</body></html>", $subject, $message); } else { $headers = $this->construct_standard__email_headers(); $message = preg_replace('|&[^a][^m][^p].{0,3};|', '', $message); $message = preg_replace('|&|', '&', $message); $message = wordwrap(strip_tags($message), 80, "\n"); $mailtext = apply_filters('bnm_plain_email', $message); } // Replace any escaped html symbols in subject then apply filter $subject = html_entity_decode($subject, ENT_QUOTES); $subject = apply_filters('bnm_email_subject', $subject); natcasesort($recipients); foreach ($recipients as $recipient) { $recipient = trim($recipient); // sanity check -- make sure we have a valid email if (!is_email($recipient) || empty($recipient)) { continue; } $mailtext_to_send = $this->construct_unsubscribe_link($recipient, $mailtext); // echo $recipient. "- ".$mailtext_to_send ."<br>"; // Use the mail queue provided we are not sending a preview if (function_exists('wpmq_mail') && !$this->preview_email) { $status = wp_mail($recipient, $subject, $mailtext_to_send, $headers, '', 0); } else { $status = wp_mail($recipient, $subject, $mailtext_to_send, $headers); } } return $status; } /* Administration actions */ /* * saves the settings of the menu page * @since 1 * * @param array $_POST post global var * @return array $options the options after being saved */ function save_settings($_my_post) { if (!empty($_my_post['tracking'])) { $this->bnm_options['tracking'] = $_my_post['tracking']; } if (!empty($_my_post['sender_email'])) { $this->bnm_options['sender_email'] = $_my_post['sender_email']; } if (!empty($_my_post['notification_subject'])) { $this->bnm_options['notification_subject'] = $_my_post['notification_subject']; } if (!empty($_my_post['page'])) { if (is_numeric($_my_post['page']) && $_my_post['page'] >= 0) { $this->bnm_options['bnmpage'] = $_my_post['page']; } } if (!empty($_my_post['mailtext'])) { $this->bnm_options['mailtext'] = $_my_post['mailtext']; } if (!empty($_my_post['confirm_subject'])) { $this->bnm_options['confirm_subject'] = $_my_post['confirm_subject']; } if (!empty($_my_post['confirm_email'])) { $this->bnm_options['confirm_email'] = $_my_post['confirm_email']; } $include_cats = ''; if (!empty($_my_post['category'])) { sort($_my_post['category']); $include_cats = implode(',', $_my_post['category']); $this->bnm_options['include'] = $include_cats; } if (!empty($_my_post['email_format'])) { $this->bnm_options['email_format'] = $_my_post['email_format']; } if (isset($_my_post["action"]) && $_my_post["action"] == "update") echo "<div id=\"message\" class=\"updated fade\"><p><strong>$this->options_saved</strong></p></div>"; update_option('bnm_options', $this->bnm_options); return $this->get_bnm_options(); } /* * Procces the public petitions for subscription * @since 1 * * @param array $_my_post post global var * @return string $message Its a feedback message */ function proccess_public_subscribers($_my_post) { $sub_error = ''; $sub_error_not_email = ""; $email = $_my_post['bnm_email']; $email = is_email($email); if ($email) { if ($this->is_email_subscribed($email)) { $sub_error = "$email"; } else { $message = __('Address(es) subscribed ', 'bnm'); $var= $this->add_subscriptor($email, $_my_post["ip"]); if (gettype($var)=="boolean"){ $message = __('Error saving your email', 'bnm'); }else{ $message.=$var; } echo "<div id=\"message\" class=\"updated fade\"><p><strong>" .$message . "</strong></p></div>"; } } elseif (!$email) { $sub_error_not_email = $_my_post['bnm_email']; } if ($sub_error_not_email != '') { echo "<div id=\"message\" class=\"error\"><p><strong>" . __('Some emails were not processed, the following are not emails', 'bnm') . ":<br />$sub_error_not_email</strong></p></div>"; } if ($sub_error != '') { echo "<div id=\"message\" class=\"error\"><p><strong>" . __('Some emails were not processed, the following were already subscribed', 'bnm') . ":<br />$sub_error</strong></p></div>"; } } /* * Procces the admin petitions for subscription * @since 1 * * @param array $_POST post global var * @return array $subscribers all the subscribers to be shown on the admin table */ function process_subscribers_admin_form($_my_post) { global $wpdb, $bnmnonce; $message = ""; $all_users = Array(); $all_users = $this->get_all_emails(); if (isset($_my_post['bnm_admin'])) { check_admin_referer('bnm-manage_subscribers' . $bnmnonce); if ($_my_post['addresses']) { $sub_error = ''; $sub_error_not_email = ""; $unsub_error = ''; foreach (preg_split("|[\s,]+|", $_my_post['addresses']) as $email) { $email = is_email($email); if (is_email($email) && $_my_post['subscribe']) { if ($this->is_email_subscribed($email) !== false) { ( $sub_error == "") ? $sub_error = "$email" : $sub_error .= ", $email"; continue; } $this->add_subscriptor($email, true); $message = "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Address(es) subscribed a confirmation message will be sent', 'bnm') . "</strong></p></div>"; } elseif (is_email($email) && $_my_post['unsubscribe']) { if ($this->is_email_subscribed($email) === false) { ('' == $unsub_error) ? $unsub_error = "$email" : $unsub_error .= ", $email"; continue; } $this->delete_subscriptor($email); $message = "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Address(es) unsubscribed', 'bnm') . "</strong></p></div>"; } elseif (!is_email($email)) { ($sub_error_not_email == "") ? $sub_error_not_email = "$email" : $sub_error_not_email .= ", $email"; continue; } } if ($sub_error_not_email != '') { echo "<div id=\"message\" class=\"error\"><p><strong>" . __('Some emails were not processed, the following are not emails', 'bnm') . ":<br />$sub_error_not_email</strong></p></div>"; } if ($sub_error != '') { echo "<div id=\"message\" class=\"error\"><p><strong>" . __('Some emails were not processed, the following were already subscribed', 'bnm') . ":<br />$sub_error</strong></p></div>"; } if ($unsub_error != '') { echo "<div id=\"message\" class=\"error\"><p><strong>" . __('Some emails were not processed, the following were not in the database', 'bnm') . ":<br />$unsub_error</strong></p></div>"; } echo $message; $_my_post['what'] = 'all'; } elseif (isset($_my_post['process']) && $_my_post['process']) { if (isset($_my_post['delete']) && $_my_post['delete']) { foreach ($_my_post['delete'] as $address) { $this->delete_subscriptor($address); } echo "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Email deleted', 'bnm') . "</strong></p></div>"; } if (isset($_my_post['confirm']) && $_my_post['confirm']) { foreach ($_my_post['confirm'] as $address) { $this->toggle_confirm_status(is_email($address)); } $message = "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Email confirmed', 'bnm') . "</strong></p></div>"; } if (isset($_my_post['unconfirm']) && $_my_post['unconfirm']) { foreach ($_my_post['unconfirm'] as $address) { $this->toggle_confirm_status(is_email($address)); } $message = "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Email unconfirmed', 'bnm') . "</strong></p></div>"; } echo $message; } elseif (isset($_my_post['searchterm']) && $_my_post['searchterm']) { $subscribers = $this->get_all_subscribers(); foreach ($subscribers as $subscriber) { // echo $subscriber; if (is_numeric(stripos($subscriber, $_my_post['searchterm']))) { $this->search_result[] = $subscriber; } } } } return $this->get_subscribers($_GET, $_my_post); } /* micelanious */ /* * Create and display a dropdown list of pages * @since 1 * * @param int $bnmpage page id selected * @return string $option string which contains all the options to be shown */ function pages_dropdown($bnmpage) { global $wpdb; $sql = "SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish'"; $pages = $wpdb->get_results($sql); if (empty($pages)) { return; } $option = ''; foreach ($pages as $page) { $option .= "<option value=\"" . $page->ID . "\""; if ($page->ID == $bnmpage) { $option .= " selected=\"selected\""; } $option .= ">" . $page->post_title . "</option>\r\n"; } echo $option; } /* * Export subscribers information to CSV file * @since 1 * * @return cvs file */ function exportSubscribersToCSV() { $confirmed = $this->get_all_emails(); $unconfirmed = $this->get_all_emails(0); $subscribers = array_merge((array) $confirmed, (array) $unconfirmed); natcasesort($subscribers); $exportcsv = "User Email,User IP,Sign Up Date\r\n"; foreach ($subscribers as $subscriber) { if (in_array($subscriber, $confirmed)) { $exportcsv .= $subscriber . ',' . $this->get_signup_ip($subscriber) . ',' . $this->get_signup_date($subscriber) . ',Confirmed subscriber' . "\r\n"; } elseif (in_array($subscriber, $unconfirmed)) { $exportcsv .= $subscriber . ',' . $this->get_signup_ip($subscriber) . ',' . $this->get_signup_date($subscriber) . ',Unconfirmed subscriber' . "\r\n"; } } return $exportcsv; } /* * Get an object of all categories, include default and custom type * @since 1 * * @param boolean $include included categories * @param orderby $orderby criteria for order the cats * @return string $option string which contains all the options to be shown */ function all_cats($include = false, $orderby = 'slug') { $all_cats = array(); $bnm_taxonomies = array('category'); $bnm_taxonomies = apply_filters('bnm_taxonomies', $bnm_taxonomies); foreach ($bnm_taxonomies as $taxonomy) { if (taxonomy_exists($taxonomy)) { $all_cats = array_merge($all_cats, get_categories(array('hide_empty' => false, 'orderby' => $orderby, 'taxonomy' => $taxonomy))); } } if ($include === true) { $included = explode(',', $this->bnm_options['include']); // need to use $id like this as this is a mixed array / object $id = 0; foreach ($all_cats as $cat) { if (!in_array($cat->term_id, $included)) { unset($all_cats[$id]); } $id++; } } return $all_cats; } /* * Sets all default messages to be shown * @since 1 * */ function messages_to_show() { $this->confirmation_sent = __('Confirmation sent', 'bnm'); $this->already_subscribed = __('Already subscribed', 'bnm'); $this->not_subscribed = __('Not subscribed', 'bnm'); $this->not_an_email = __('That is not an email', 'bnm'); $this->error = __('Error', 'bnm'); $this->mail_sent = __('Email sent', 'bnm'); $this->mail_failed = __('Mail failed', 'bnm'); $this->form = __('Form', 'bnm'); $this->no_such_email = __('El correo que intenta confirmar no existe en nuestra base de datos', 'bnm'); $this->added = __('Su email ha sido confirmado, bienvenido a nuestro Breaking News', 'bnm'); $this->deleted = __('Su correo ha sido eliminado de nuestra lista de Breaking News', 'bnm'); $this->subscribe = __('Subscribe', 'bnm'); $this->unsubscribe = __('Unsubscribe', 'bnm'); $this->confirm_subject = __('Confirm subject', 'bnm'); $this->options_saved = __('Options Saved', 'bnm'); $this->options_reset = __('Options Reset', 'bnm'); } /* * ****** Geters ******* */ /* * Get the link of the page to be shown when a user clicks on the confirmation link * @since 1 * * @return string $url page link */ function get_confirmation_page_link() { $url = get_site_url(); if ($this->bnm_options['bnmpage'] > 0) { $page = get_page($this->bnm_options['bnmpage']); $url .= "/" . $page->post_name; } return $url; } /* * Function to add UTM tracking details to links * @since 1 * * @param link $link initial link * @return link with the UTM tracking */ function get_tracking_link($link) { if (!empty($this->bnm_options['tracking'])) { $delimiter = '?'; if (strpos($link, $delimiter) > 0) { $delimiter = '&'; } return $link . $delimiter . $this->bnm_options['tracking']; } else { return $link; } } /* * Given a public subscriber ID, returns the email address * * @since 1 * * @param id $id user id * @return $email email of the user */ function get_email($id = 0) { global $wpdb; if (!$id) { return false; } return $wpdb->get_var("SELECT email FROM " . BNM_USERS . " WHERE id=$id and status=1"); } /* * Collects the signup date for subscribers * * @since 1 * * @param email $email users email * @return signup date */ function get_signup_date($email = '') { if ('' == $email) { return false; } global $wpdb; if (!empty($this->signup_dates)) { return date_format(date_create($this->signup_dates[$email]), 'd-m-Y'); } else { $results = $wpdb->get_results("SELECT email, date FROM " . BNM_USERS . " WHERE status=1", ARRAY_N); foreach ($results as $result) { $this->signup_dates[$result[0]] = $result[1]; } return date_format(date_create($this->signup_dates[$email]), 'd-m-Y'); } } /* * Collects the ip address for subscribers * * @since 1 * * @param email $email users email * @return sign up ip */ function get_signup_ip($email = '') { if ('' == $email) { return false; } global $wpdb; if (!empty($this->signup_ips)) { return $this->signup_ips[$email]; } else { $results = $wpdb->get_results("SELECT email, ip FROM " . BNM_USERS . " WHERE status=1", ARRAY_N); foreach ($results as $result) { $this->signup_ips[$result[0]] = $result[1]; } return $this->signup_ips[$email]; } } /* * Gets the ip address of the visitor * * @since 1 * * @return ip address */ function get_visitor_ip_addr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } /* * Collects the email address for all confirmed or unconfirmed subscribers * default confirmed ones * @since 1 * * @param confirmed $confirmed users email * @return array $emails */ function get_all_emails($confirmed = 1) { global $wpdb; if ($confirmed) { return $wpdb->get_col("SELECT email FROM " . BNM_USERS . " WHERE active=1 and status=1 "); } else { return $wpdb->get_col("SELECT email FROM " . BNM_USERS . " WHERE active=0 and status=1"); } } /* * Given a public subscriber email, returns the subscriber ID * @since 1 * * @param email $email users email * @return id */ function get_id($email = '') { global $wpdb; if (!$email) { return false; } return $wpdb->get_var("SELECT id FROM " . BNM_USERS . " WHERE CAST(email as binary)='$email' and status=1"); } /* * Get the bnm options array * @since 1 * * @return array bnm options */ function get_bnm_options() { return get_option('bnm_options'); } /* * Get all subscribers * @since 1 * * @return array subscribers */ function get_all_subscribers() { $confirmed = $this->get_all_emails(); $unconfirmed = $this->get_all_emails(0); return array_merge((array) $confirmed, (array) $unconfirmed); } /* * Get all subscribers to be shown on the admin page * @since 1 * * @param $_GET global var * @param $_my_post global var * @return array subscribers */ function get_subscribers($_my_get, $_my_post) { $confirmed = $this->get_all_emails(); $unconfirmed = $this->get_all_emails(0); if ($confirmed == '') { $confirmed = array(); } if ($unconfirmed == '') { $unconfirmed = array(); } $urlpath = str_replace("\\", "/", BNM_PATH); $urlpath = trailingslashit(get_option('siteurl')) . substr($urlpath, strpos($urlpath, "wp-content/")); if (isset($_my_get['bnmpage'])) { $page = (int) $_my_get['bnmpage']; } else { $page = 1; } if (isset($_my_post['what'])) { $page = 1; if ($_my_post['what'] == 'all' || $_my_post['what'] == 'all_users') { $what = 'all'; $subscribers = array_merge((array) $confirmed, (array) $unconfirmed); } elseif ($_my_post['what'] == 'confirmed') { $what = 'confirmed'; $subscribers = $confirmed; } elseif ($_my_post['what'] == 'unconfirmed') { $what = 'unconfirmed'; $subscribers = $unconfirmed; } } elseif (isset($_my_get['what'])) { if ('all' == $_my_get['what'] || $_my_get['what'] == "all_users") { $what = 'all'; $subscribers = array_merge((array) $confirmed, (array) $unconfirmed); } elseif ('confirmed' == $_my_get['what']) { $what = 'confirmed'; $subscribers = $confirmed; } elseif ('unconfirmed' == $_my_get['what']) { $what = 'unconfirmed'; $subscribers = $unconfirmed; } } else { $what = 'all'; $subscribers = array_merge((array) $confirmed, (array) $unconfirmed); } if (isset($_my_post['searchterm']) && $_my_post['searchterm']) { $subscribers = &$this->search_result; $what = 'public'; } $return = Array(); $return [$what] = $subscribers; return $return; } /* * Load all js required for this plugin * @since 1 * */ function bnm_load_jquery() { wp_enqueue_script('jquery'); wp_enqueue_script('jquery-form-val', plugin_dir_url(__FILE__) . '../js/jquery.form.js','jquery'); wp_enqueue_script('jquery-validate', plugin_dir_url(__FILE__) . '../js/jquery.validate.js'); wp_enqueue_script('jquery-validate-spanish', plugin_dir_url(__FILE__) . '../js/messages_es.js','jquery-validate'); wp_enqueue_script('bnm_ajax', plugin_dir_url(__FILE__) . '../js/bnm_subscription_ajax.js','jquery-form-val'); // Get current page protocol $protocol = isset($_SERVER["HTTPS"]) ? 'https://' : 'https://'; // Output admin-ajax.php URL with same protocol as current page $params = array( 'ajaxurl' => admin_url('admin-ajax.php', $protocol) ); wp_localize_script('bnm_ajax', 'bnm_ajax', $params); } /* * Adds the slyle for the feedback messages on the widget * @since 1 * */ function add_css_bnm() { ?> <style> label.error { float: none; color: red; padding-left: .5em; vertical-align: top; display:inline-block;} </style> <?php } /* * Load the javascript only in the admin page * @since 1 * */ function checkbox_form_js() { $this->script_debug = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '.dev' : ''; wp_register_script('s2_checkbox', plugin_dir_url(__FILE__) . '../js/s2_checkbox' . $this->script_debug . '.js', array('jquery'), '1.1'); wp_enqueue_script('s2_checkbox'); } } ?>
Viewing 1 replies (of 1 total)