[Plugin: Mingle Forum] Email subscriptions set up poorly
-
When working on subscriptions (to forums or topics) in Mingle Forum, I found that a list of subscribed email addresses was kept for each forum. This is a problem because if a user is deleted or changes their email address, the subscribed list is not updated, nor is there any sort of administrative interface to edit subscriptions. In other words, a user could be deleted but would still receive email notifications and no one would have anyway to change this (apart from a delicate direct editing of the database).
I updated wpf.class.php (in the plugins/mingle-forum directory) to store subscribed user ids instead. The system simply looks up users’ email addresses when sending a notification. If a user is deleted from the system, it won’t be updated in the database. However it shouldn’t be a problem nor send an email since that user won’t exist anymore.
Here’s the modified functions:
function forum_subscribe() { global $user_ID; if(isset($_GET['forumsubs']) && $user_ID) { //$useremail = $this->get_userdata($user_ID, 'user_email'); //if(!empty($useremail)) //{ $list = get_option("mf_forum_subscribers_".$this->current_forum, array()); if($this->is_forum_subscribed()) //remove user if already exists (user clicked unsubscribe) { $key = array_search($user_ID, $list); unset($list[$key]); } else $list[] = $user_ID; update_option("mf_forum_subscribers_".$this->current_forum, $list); //} } } function is_forum_subscribed() { global $user_ID; if($user_ID) { //$useremail = $this->get_userdata($user_ID, 'user_email'); $list = get_option("mf_forum_subscribers_".$this->current_forum, array()); if(in_array($user_ID, $list)) return true; } return false; } function get_subscribed_forums() { global $user_ID, $wpdb; $results = array(); //$email = $this->get_userdata($user_ID, 'user_email'); $forums = $wpdb->get_results("SELECT id FROM {$this->t_forums}"); if(!empty($forums)) foreach($forums as $forum) { $list = get_option("mf_forum_subscribers_".$forum->id, array()); if(in_array($user_ID, $list)) $results[] = $forum->id; } return $results; } function thread_subscribe() { global $user_ID; if(isset($_GET['threadsubs']) && $user_ID) { //$useremail = $this->get_userdata($user_ID, 'user_email'); //if(!empty($useremail)) //{ $list = get_option("mf_thread_subscribers_".$this->current_thread, array()); if($this->is_thread_subscribed()) //remove user if already exists (user clicked unsubscribe) { $key = array_search($user_ID, $list); unset($list[$key]); } else $list[] = $user_ID; update_option("mf_thread_subscribers_".$this->current_thread, $list); //} } } function is_thread_subscribed() { global $user_ID; if($user_ID) { //$useremail = $this->get_userdata($user_ID, 'user_email'); $list = get_option("mf_thread_subscribers_".$this->current_thread, array()); if(in_array($user_ID, $list)) return true; } return false; } function get_subscribed_threads() { global $user_ID, $wpdb; $results = array(); //$email = $this->get_userdata($user_ID, 'user_email'); $threads = $wpdb->get_results("SELECT id FROM {$this->t_threads}"); if(!empty($threads)) foreach($threads as $thread) { $list = get_option("mf_thread_subscribers_".$thread->id, array()); if(in_array($user_ID, $list)) $results[] = $thread->id; } return $results; } function notify_thread_subscribers($thread_id, $subject, $content, $date) { global $user_ID; $submitter_name = (!$user_ID)?"Guest":$this->get_userdata($user_ID, $this->options['forum_display_name']); $submitter_email = (!$user_ID)?"[email protected]":$this->get_userdata($user_ID, 'user_email'); $sender = get_bloginfo("name"); $subscribed_user_ids = get_option("mf_thread_subscribers_".$thread_id, array()); foreach ($subscribed_user_ids as $subscribed_user_id) { $userdata = get_userdata($subscribed_user_id); if ($userdata) $to[] = $userdata->user_email; } $subject = __("Forum post - ", "mingleforum").$subject; $message = __("DETAILS:", "mingleforum")."<br/><br/>". __("Name:", "mingleforum")." ".$submitter_name."<br/>". // __("Email:", "mingleforum")." ".$submitter_email."<br/>". __("Date:", "mingleforum")." ".$this->format_date($date)."<br/>". __("Reply Content:", "mingleforum")."<br/>".$content."<br/><br/>". __("View Post Here:", "mingleforum")." ".$this->get_threadlink($thread_id); $headers = "MIME-Version: 1.0\r\n". "From: ".$sender." "."<".get_bloginfo("admin_email").">\r\n". "Content-Type: text/HTML; charset=\"".get_option('blog_charset')."\"\r\n". "BCC: ".implode(",", $to)."\r\n"; if(!empty($to)) wp_mail("", $subject, make_clickable(convert_smilies(wpautop($this->output_filter(stripslashes($message))))), $headers); } function notify_forum_subscribers($thread_id, $subject, $content, $date, $forum_id) { global $user_ID; $submitter_name = (!$user_ID)?"Guest":$this->get_userdata($user_ID, $this->options['forum_display_name']); $submitter_email = (!$user_ID)?"[email protected]":$this->get_userdata($user_ID, 'user_email'); $sender = get_bloginfo("name"); $subscribed_user_ids = get_option("mf_forum_subscribers_".$forum_id, array()); foreach ($subscribed_user_ids as $subscribed_user_id) { $userdata = get_userdata($subscribed_user_id); if ($userdata) $to[] = $userdata->user_email; } $subject = __("Forum post - ", "mingleforum").$subject; $message = __("DETAILS:", "mingleforum")."<br/><br/>". __("Name:", "mingleforum")." ".$submitter_name."<br/>". // __("Email:", "mingleforum")." ".$submitter_email."<br/>". __("Date:", "mingleforum")." ".$this->format_date($date)."<br/>". __("Reply Content:", "mingleforum")."<br/>".$content."<br/><br/>". __("View Post Here:", "mingleforum")." ".$this->get_threadlink($thread_id); $headers = "MIME-Version: 1.0\r\n". "From: ".$sender." "."<".get_bloginfo("admin_email").">\r\n". "Content-Type: text/HTML; charset=\"".get_option('blog_charset')."\"\r\n". "BCC: ".implode(",", $to)."\r\n"; if(!empty($to)) wp_mail("", $subject, make_clickable(convert_smilies(wpautop($this->output_filter(stripslashes($message))))), $headers); }
For the record, this relates to Mingle Forum version 1.0.33.
- The topic ‘[Plugin: Mingle Forum] Email subscriptions set up poorly’ is closed to new replies.