Subscribe to Comments - Version 2.1.2

Version Description

Download this release

Release Info

Developer markjaquith
Plugin Icon wp plugin Subscribe to Comments
Version 2.1.2
Comparing to
See all releases

Code changes from version 2.1.1 to 2.1.2

Files changed (2) hide show
  1. readme.txt +3 -3
  2. subscribe-to-comments.php +74 -57
readme.txt CHANGED
@@ -1,8 +1,8 @@
1
  === Subscribe to Comments ===
2
  Tags: comments, subscription, email
3
  Contributors: markjaquith
4
- Requires at least: 2.0
5
- Tested up to: 2.2.1
6
  Stable tag: trunk
7
 
8
  Subscribe to Comments allows commenters on an entry to subscribe to e-mail notifications for subsequent comments.
@@ -29,7 +29,7 @@ Subscribe to Comments is a robust plugin that enables commenters to sign up for
29
 
30
  = I'd like the subscription checkbox to be checked by default. Can I do that? =
31
 
32
- By default, the "subscribe" checkbox is unchecked, but you can change that in the options (i.e. so that it is checked by default).
33
 
34
  = My subscription checkbox shows up in a strange place. How do I fix it? =
35
 
1
  === Subscribe to Comments ===
2
  Tags: comments, subscription, email
3
  Contributors: markjaquith
4
+ Requires at least: 3.0
5
+ Tested up to: 2.3.1
6
  Stable tag: trunk
7
 
8
  Subscribe to Comments allows commenters on an entry to subscribe to e-mail notifications for subsequent comments.
29
 
30
  = I'd like the subscription checkbox to be checked by default. Can I do that? =
31
 
32
+ Not anymore. But the checkbox status will be remembered on a per-user basis.
33
 
34
  = My subscription checkbox shows up in a strange place. How do I fix it? =
35
 
subscribe-to-comments.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
  Plugin Name: Subscribe To Comments
4
- Version: 2.1.1
5
  Plugin URI: http://txfx.net/code/wordpress/subscribe-to-comments/
6
  Description: Allows readers to receive notifications of new comments that are posted to an entry. Based on version 1 from <a href="http://scriptygoddess.com/">Scriptygoddess</a>
7
  Author: Mark Jaquith
@@ -15,8 +15,7 @@ function show_subscription_checkbox ($id='0') {
15
 
16
  if ( $sg_subscribe->checkbox_shown ) return $id;
17
  if ( !$email = $sg_subscribe->current_viewer_subscription_status() ) :
18
- if (!empty($_COOKIE['subscribe_checkbox_'.COOKIEHASH]))
19
- $checked_status = ( 'checked' == $_COOKIE['subscribe_checkbox_'.COOKIEHASH] ) ? true : false;
20
  ?>
21
 
22
  <?php /* ------------------------------------------------------------------- */ ?>
@@ -24,7 +23,7 @@ function show_subscription_checkbox ($id='0') {
24
  <?php /* ------------------------------------------------------------------- */ ?>
25
 
26
  <p <?php if ($sg_subscribe->clear_both) echo 'style="clear: both;" '; ?>class="subscribe-to-comments">
27
- <input type="checkbox" name="subscribe" id="subscribe" value="subscribe" style="width: auto;" <?php if ( (isset($checked_status) && $checked_status ) || ( !isset($checked_status) && $sg_subscribe->default_subscribed ) ) echo 'checked="checked" '; ?>/>
28
  <label for="subscribe"><?php echo $sg_subscribe->not_subscribed_text; ?></label>
29
  </p>
30
 
@@ -130,10 +129,12 @@ return false;
130
 
131
  class sg_subscribe_settings {
132
  function options_page_contents() {
133
- /** Commit changed options if posted **/
 
134
  if ( isset($_POST['sg_subscribe_settings_submit']) ) {
135
  check_admin_referer('subscribe-to-comments-update_options');
136
- update_option('sg_subscribe_settings', $_POST['sg_subscribe_settings']);
 
137
  }
138
 
139
 
@@ -142,7 +143,6 @@ class sg_subscribe_settings {
142
 
143
  echo '<li><label for="name">' . __('"From" name for notifications:', 'subscribe-to-comments') . ' <input type="text" size="40" id="name" name="sg_subscribe_settings[name]" value="' . sg_subscribe_settings::form_setting('name') . '" /></label></li>';
144
  echo '<li><label for="email">' . __('"From" e-mail addresss for notifications:', 'subscribe-to-comments') . ' <input type="text" size="40" id="email" name="sg_subscribe_settings[email]" value="' . sg_subscribe_settings::form_setting('email') . '" /></label></li>';
145
- echo '<li><label for="default_subscribed"><input type="checkbox" id="default_subscribed" name="sg_subscribe_settings[default_subscribed]" value="default_subscribed"' . sg_subscribe_settings::checkflag('default_subscribed') . ' /> ' . __('"Subscribe" box should be checked by default', 'subscribe-to-comments') . '</label></li>';
146
  echo '<li><label for="clear_both"><input type="checkbox" id="clear_both" name="sg_subscribe_settings[clear_both]" value="clear_both"' . sg_subscribe_settings::checkflag('clear_both') . ' /> ' . __('Do a CSS "clear" on the subscription checkbox/message (uncheck this if the checkbox/message appears in a strange location in your theme)', 'subscribe-to-comments') . '</label></li>';
147
  echo '</ul>';
148
 
@@ -187,12 +187,12 @@ class sg_subscribe_settings {
187
 
188
  function form_setting($optname) {
189
  $options = get_settings('sg_subscribe_settings');
190
- return htmlspecialchars(stripslashes($options[$optname]), ENT_QUOTES);
191
  }
192
 
193
  function textarea_setting($optname) {
194
  $options = get_settings('sg_subscribe_settings');
195
- return htmlspecialchars(stripslashes($options[$optname]));
196
  }
197
 
198
  function options_page() {
@@ -252,7 +252,7 @@ class sg_subscribe {
252
  var $author_text;
253
  var $salt;
254
  var $settings;
255
-
256
 
257
  function sg_subscribe() {
258
  global $wpdb;
@@ -262,16 +262,16 @@ class sg_subscribe {
262
 
263
  $this->salt = $this->settings['salt'];
264
  $this->site_email = ( is_email($this->settings['email']) && $this->settings['email'] != 'email@example.com' ) ? $this->settings['email'] : get_bloginfo('admin_email');
265
- $this->site_name = ( $this->settings['name'] != 'YOUR NAME' && !empty($this->settings['name']) ) ? stripslashes($this->settings['name']) : get_bloginfo('name');
266
  $this->default_subscribed = ($this->settings['default_subscribed']) ? true : false;
267
 
268
- $this->not_subscribed_text = stripslashes($this->settings['not_subscribed_text']);
269
- $this->subscribed_text = stripslashes($this->settings['subscribed_text']);
270
- $this->author_text = stripslashes($this->settings['author_text']);
271
  $this->clear_both = $this->settings['clear_both'];
272
 
273
  $this->errors = '';
274
- $this->post_subscriptions = '';
275
  $this->email_subscriptions = '';
276
  }
277
 
@@ -280,18 +280,13 @@ class sg_subscribe {
280
  $this->messages = '';
281
  $this->use_wp_style = ( $this->settings['use_custom_style'] == 'use_custom_style' ) ? false : true;
282
  if ( !$this->use_wp_style ) {
283
- $this->header = str_replace('[theme_path]', get_template_directory(), stripslashes($this->settings['header']));
284
- $this->sidebar = str_replace('[theme_path]', get_template_directory(), stripslashes($this->settings['sidebar']));
285
- $this->footer = str_replace('[theme_path]', get_template_directory(), stripslashes($this->settings['footer']));
286
- $this->before_manager = stripslashes($this->settings['before_manager']);
287
- $this->after_manager = stripslashes($this->settings['after_manager']);
288
  }
289
 
290
- // version 2.0.8 -- allow plugin file to be renamed or placed in a subdirectory
291
- if ( 'edit.php?page=subscribe-to-comments.php' == $this->form_action )
292
- $this->form_action = 'edit.php?page=' . STC_PLUGIN_BASENAME;
293
-
294
-
295
  foreach ( array('email', 'key', 'ref', 'new_email') as $var )
296
  if ( isset($_REQUEST[$var]) && !empty($_REQUEST[$var]) )
297
  $this->{$var} = attribute_escape(trim(stripslashes($_REQUEST[$var])));
@@ -333,15 +328,15 @@ class sg_subscribe {
333
 
334
 
335
  function subscriptions_from_post($postid) {
336
- if ( is_array($this->post_subscriptions) )
337
- return $this->post_subscriptions;
338
  global $wpdb;
339
  $postid = (int) $postid;
340
- $this->post_subscriptions = $wpdb->get_results("SELECT comment_author_email FROM $wpdb->comments WHERE comment_post_ID = '$postid' AND comment_subscribe='Y' AND comment_author_email != '' AND comment_approved = '1' GROUP BY LCASE(comment_author_email)");
341
- $subscribed_without_comment = get_post_meta($postid, '_sg_subscribe-to-comments');
342
- foreach ( (array) $subscribed_without_comment as $email )
343
- $this->post_subscriptions[]->comment_author_email = $email;
344
- return $this->post_subscriptions;
345
  }
346
 
347
 
@@ -385,7 +380,7 @@ class sg_subscribe {
385
  if ( is_array($this->subscriptions_from_email($email)) )
386
  if (in_array($postid, (array) $this->subscriptions_from_email($email))) {
387
  // already subscribed
388
- setcookie('comment_author_email_' . COOKIEHASH, stripslashes($email), time() + 30000000, COOKIEPATH);
389
  $this->add_error(__('You appear to be already subscribed to this entry.', 'subscribe-to-comments'),'solo_subscribe');
390
  }
391
  $email = $wpdb->escape($email);
@@ -401,13 +396,13 @@ class sg_subscribe {
401
 
402
  $post_author = $cache_userdata[$post->post_author];
403
 
404
- if ( strtolower($post_author->user_email) == stripslashes($email) )
405
  $this->add_error(__('You appear to be already subscribed to this entry.', 'subscribe-to-comments'),'solo_subscribe');
406
 
407
  if ( !is_array($this->errors['solo_subscribe']) ) {
408
- add_post_meta($postid, '_sg_subscribe-to-comments', stripslashes($email));
409
- setcookie('comment_author_email_' . COOKIEHASH, stripslashes($email), time() + 30000000, COOKIEPATH);
410
- $location = $this->manage_link(stripslashes($email), false, false) . '&subscribeid=' . $postid;
411
  header("Location: $location");
412
  exit();
413
  }
@@ -416,15 +411,17 @@ class sg_subscribe {
416
 
417
  function add_subscriber($cid) {
418
  global $wpdb;
 
419
  $id = (int) $id;
420
- $email = $wpdb->escape(strtolower($wpdb->get_var("SELECT comment_author_email FROM $wpdb->comments WHERE comment_ID = '$cid'")));
 
421
  $postid = $wpdb->get_var("SELECT comment_post_ID from $wpdb->comments WHERE comment_ID = '$cid'");
422
 
423
- $previously_subscribed = ( $wpdb->get_var("SELECT comment_subscribe from $wpdb->comments WHERE comment_post_ID = '$postid' AND LCASE(comment_author_email) = '$email' AND comment_subscribe = 'Y' LIMIT 1") || in_array(stripslashes($email), (array) get_post_meta($postid, '_sg_subscribe-to-comments')) ) ? true : false;
424
 
425
  // If user wants to be notified or has previously subscribed, set the flag on this current comment
426
  if (($_POST['subscribe'] == 'subscribe' && is_email($email)) || $previously_subscribed) {
427
- delete_post_meta($postid, '_sg_subscribe-to-comments', stripslashes($email));
428
  $wpdb->query("UPDATE $wpdb->comments SET comment_subscribe = 'Y' where comment_post_ID = '$postid' AND LCASE(comment_author_email) = '$email'");
429
  }
430
  return $cid;
@@ -567,9 +564,10 @@ class sg_subscribe {
567
  function remove_subscriber($email, $postid) {
568
  global $wpdb;
569
  $postid = (int) $postid;
570
- $email = $wpdb->escape(strtolower($email));
 
571
 
572
- if ( delete_post_meta($postid, '_sg_subscribe-to-comments', stripslashes($email)) || $wpdb->query("UPDATE $wpdb->comments SET comment_subscribe = 'N' WHERE comment_post_ID = '$postid' AND LCASE(comment_author_email) ='$email'") )
573
  return true;
574
  else
575
  return false;
@@ -596,23 +594,23 @@ class sg_subscribe {
596
  if ( $comment->comment_approved == '1' && $comment->comment_type == '' ) {
597
  // Comment has been approved and isn't a trackback or a pingback, so we should send out notifications
598
 
599
- $message = sprintf(__("There is a new comment on the post \"%s\"", 'subscribe-to-comments') . ". \n%s\n\n", stripslashes($post->post_title), get_permalink($comment->comment_post_ID));
600
  $message .= sprintf(__("Author: %s\n", 'subscribe-to-comments'), $comment->comment_author);
601
- $message .= __("Comment:\n", 'subscribe-to-comments') . stripslashes($comment->comment_content) . "\n\n";
602
  $message .= __("See all comments on this post here:\n", 'subscribe-to-comments');
603
  $message .= get_permalink($comment->comment_post_ID) . "#comments\n\n";
604
  //add link to manage comment notifications
605
  $message .= __("To manage your subscriptions or to block all notifications from this site, click the link below:\n", 'subscribe-to-comments');
606
  $message .= get_settings('home') . '/?wp-subscription-manager=1&email=[email]&key=[key]';
607
 
608
- $subject = sprintf(__('New Comment On: %s', 'subscribe-to-comments'), stripslashes($post->post_title));
609
 
610
  $subscriptions = $this->subscriptions_from_post($comment->comment_post_ID);
611
  foreach ( (array) $subscriptions as $email ) {
612
- if ( !$this->is_blocked($email->comment_author_email) && $email->comment_author_email != $comment->comment_author_email && is_email($email->comment_author_email) ) {
613
- $message_final = str_replace('[email]', urlencode($email->comment_author_email), $message);
614
- $message_final = str_replace('[key]', $this->generate_key($email->comment_author_email), $message_final);
615
- $this->send_mail($email->comment_author_email, $subject, $message_final);
616
  }
617
  } // foreach subscription
618
  } // end if comment approved
@@ -700,9 +698,13 @@ class sg_subscribe {
700
  global $wpdb;
701
 
702
  // add the options
703
- add_option('sg_subscribe_settings', array('use_custom_style' => '', 'email' => get_bloginfo('admin_email'), 'name' => get_bloginfo('name'), 'header' => '[theme_path]/header.php', 'sidebar' => '', 'footer' => '[theme_path]/footer.php', 'before_manager' => '<div id="content" class="widecolumn subscription-manager">', 'after_manager' => '</div>', 'default_subscribed' => '', 'not_subscribed_text' => __('Notify me of followup comments via e-mail', 'subscribe-to-comments'), 'subscribed_text' => __('You are subscribed to this entry. <a href="[manager_link]">Manage your subscriptions</a>.', 'subscribe-to-comments'), 'author_text' => __('You are the author of this entry. <a href="[manager_link]">Manage subscriptions</a>.', 'subscribe-to-comments')));
704
 
705
  $settings = get_option('sg_subscribe_settings');
 
 
 
 
706
 
707
  if ( !$settings['salt'] ) {
708
  $settings['salt'] = md5(md5(uniqid(rand() . rand() . rand() . rand() . rand(), true))); // random MD5 hash
@@ -714,8 +716,19 @@ class sg_subscribe {
714
  $update = true;
715
  }
716
 
 
 
 
 
 
 
 
 
 
 
 
717
  if ( $update )
718
- update_option('sg_subscribe_settings', $settings);
719
 
720
  $column_name = 'comment_subscribe';
721
  foreach ( (array) $wpdb->get_col("DESC $wpdb->comments", 0) as $column )
@@ -727,6 +740,12 @@ class sg_subscribe {
727
  }
728
 
729
 
 
 
 
 
 
 
730
  function current_viewer_subscription_status(){
731
  global $wpdb, $post, $user_email;
732
 
@@ -779,9 +798,9 @@ class sg_subscribe {
779
 
780
 
781
  function add_admin_menu() {
782
- add_management_page(__('Comment Subscription Manager', 'subscribe-to-comments'), __('Subscriptions', 'subscribe-to-comments'), 8, __FILE__, 'sg_subscribe_admin');
783
 
784
- add_options_page(__('Subscribe to Comments', 'subscribe-to-comments'), __('Subscribe to Comments', 'subscribe-to-comments'), 5, basename(__FILE__), array('sg_subscribe_settings', 'options_page'));
785
  }
786
 
787
 
@@ -829,12 +848,10 @@ add_filter('preprocess_comment', 'stc_checkbox_state', 1);
829
  // detect "subscribe without commenting" attempts
830
  add_action('init', create_function('$a','global $sg_subscribe; if ( $_POST[\'solo-comment-subscribe\'] == \'solo-comment-subscribe\' && is_numeric($_POST[\'postid\']) ) {
831
  sg_subscribe_start();
832
- $sg_subscribe->solo_subscribe($_POST[\'email\'], $_POST[\'postid\']);
833
  }')
834
  );
835
 
836
- define('STC_PLUGIN_BASENAME', plugin_basename(__FILE__));
837
-
838
  if ( isset($_REQUEST['wp-subscription-manager']) )
839
  add_action('template_redirect', 'sg_subscribe_admin_standalone');
840
 
@@ -852,7 +869,7 @@ function sg_subscribe_admin($standalone = false) {
852
  $sg_subscribe->standalone = true;
853
  ob_start(create_function('$a', 'return str_replace("<title>", "<title> " . __("Subscription Manager", "subscribe-to-comments") . " &raquo; ", $a);'));
854
  } else {
855
- $sg_subscribe->form_action = 'edit.php?page=subscribe-to-comments.php';
856
  $sg_subscribe->standalone = false;
857
  }
858
 
1
  <?php
2
  /*
3
  Plugin Name: Subscribe To Comments
4
+ Version: 2.1.2
5
  Plugin URI: http://txfx.net/code/wordpress/subscribe-to-comments/
6
  Description: Allows readers to receive notifications of new comments that are posted to an entry. Based on version 1 from <a href="http://scriptygoddess.com/">Scriptygoddess</a>
7
  Author: Mark Jaquith
15
 
16
  if ( $sg_subscribe->checkbox_shown ) return $id;
17
  if ( !$email = $sg_subscribe->current_viewer_subscription_status() ) :
18
+ $checked_status = ( !empty($_COOKIE['subscribe_checkbox_'.COOKIEHASH]) && 'checked' == $_COOKIE['subscribe_checkbox_'.COOKIEHASH] ) ? true : false;
 
19
  ?>
20
 
21
  <?php /* ------------------------------------------------------------------- */ ?>
23
  <?php /* ------------------------------------------------------------------- */ ?>
24
 
25
  <p <?php if ($sg_subscribe->clear_both) echo 'style="clear: both;" '; ?>class="subscribe-to-comments">
26
+ <input type="checkbox" name="subscribe" id="subscribe" value="subscribe" style="width: auto;" <?php if ( $checked_status ) echo 'checked="checked" '; ?>/>
27
  <label for="subscribe"><?php echo $sg_subscribe->not_subscribed_text; ?></label>
28
  </p>
29
 
129
 
130
  class sg_subscribe_settings {
131
  function options_page_contents() {
132
+ global $sg_subscribe;
133
+ sg_subscribe_start();
134
  if ( isset($_POST['sg_subscribe_settings_submit']) ) {
135
  check_admin_referer('subscribe-to-comments-update_options');
136
+ $update_settings = stripslashes_deep($_POST['sg_subscribe_settings']);
137
+ $sg_subscribe->update_settings($update_settings);
138
  }
139
 
140
 
143
 
144
  echo '<li><label for="name">' . __('"From" name for notifications:', 'subscribe-to-comments') . ' <input type="text" size="40" id="name" name="sg_subscribe_settings[name]" value="' . sg_subscribe_settings::form_setting('name') . '" /></label></li>';
145
  echo '<li><label for="email">' . __('"From" e-mail addresss for notifications:', 'subscribe-to-comments') . ' <input type="text" size="40" id="email" name="sg_subscribe_settings[email]" value="' . sg_subscribe_settings::form_setting('email') . '" /></label></li>';
 
146
  echo '<li><label for="clear_both"><input type="checkbox" id="clear_both" name="sg_subscribe_settings[clear_both]" value="clear_both"' . sg_subscribe_settings::checkflag('clear_both') . ' /> ' . __('Do a CSS "clear" on the subscription checkbox/message (uncheck this if the checkbox/message appears in a strange location in your theme)', 'subscribe-to-comments') . '</label></li>';
147
  echo '</ul>';
148
 
187
 
188
  function form_setting($optname) {
189
  $options = get_settings('sg_subscribe_settings');
190
+ return attribute_escape($options[$optname]);
191
  }
192
 
193
  function textarea_setting($optname) {
194
  $options = get_settings('sg_subscribe_settings');
195
+ return wp_specialchars($options[$optname]);
196
  }
197
 
198
  function options_page() {
252
  var $author_text;
253
  var $salt;
254
  var $settings;
255
+ var $version = '2.1.2';
256
 
257
  function sg_subscribe() {
258
  global $wpdb;
262
 
263
  $this->salt = $this->settings['salt'];
264
  $this->site_email = ( is_email($this->settings['email']) && $this->settings['email'] != 'email@example.com' ) ? $this->settings['email'] : get_bloginfo('admin_email');
265
+ $this->site_name = ( $this->settings['name'] != 'YOUR NAME' && !empty($this->settings['name']) ) ? $this->settings['name'] : get_bloginfo('name');
266
  $this->default_subscribed = ($this->settings['default_subscribed']) ? true : false;
267
 
268
+ $this->not_subscribed_text = $this->settings['not_subscribed_text'];
269
+ $this->subscribed_text = $this->settings['subscribed_text'];
270
+ $this->author_text = $this->settings['author_text'];
271
  $this->clear_both = $this->settings['clear_both'];
272
 
273
  $this->errors = '';
274
+ $this->post_subscriptions = array();
275
  $this->email_subscriptions = '';
276
  }
277
 
280
  $this->messages = '';
281
  $this->use_wp_style = ( $this->settings['use_custom_style'] == 'use_custom_style' ) ? false : true;
282
  if ( !$this->use_wp_style ) {
283
+ $this->header = str_replace('[theme_path]', get_template_directory(), $this->settings['header']);
284
+ $this->sidebar = str_replace('[theme_path]', get_template_directory(), $this->settings['sidebar']);
285
+ $this->footer = str_replace('[theme_path]', get_template_directory(), $this->settings['footer']);
286
+ $this->before_manager = $this->settings['before_manager'];
287
+ $this->after_manager = $this->settings['after_manager'];
288
  }
289
 
 
 
 
 
 
290
  foreach ( array('email', 'key', 'ref', 'new_email') as $var )
291
  if ( isset($_REQUEST[$var]) && !empty($_REQUEST[$var]) )
292
  $this->{$var} = attribute_escape(trim(stripslashes($_REQUEST[$var])));
328
 
329
 
330
  function subscriptions_from_post($postid) {
331
+ if ( is_array($this->post_subscriptions[$postid]) )
332
+ return $this->post_subscriptions[$postid];
333
  global $wpdb;
334
  $postid = (int) $postid;
335
+ $this->post_subscriptions[$postid] = $wpdb->get_col("SELECT comment_author_email FROM $wpdb->comments WHERE comment_post_ID = '$postid' AND comment_subscribe='Y' AND comment_author_email != '' AND comment_approved = '1' GROUP BY LCASE(comment_author_email)");
336
+ $subscribed_without_comment = (array) get_post_meta($postid, '_sg_subscribe-to-comments');
337
+ $this->post_subscriptions[$postid] = array_merge((array) $this->post_subscriptions[$postid], (array) $subscribed_without_comment);
338
+ $this->post_subscriptions[$postid] = array_unique($this->post_subscriptions[$postid]);
339
+ return $this->post_subscriptions[$postid];
340
  }
341
 
342
 
380
  if ( is_array($this->subscriptions_from_email($email)) )
381
  if (in_array($postid, (array) $this->subscriptions_from_email($email))) {
382
  // already subscribed
383
+ setcookie('comment_author_email_' . COOKIEHASH, $email, time() + 30000000, COOKIEPATH);
384
  $this->add_error(__('You appear to be already subscribed to this entry.', 'subscribe-to-comments'),'solo_subscribe');
385
  }
386
  $email = $wpdb->escape($email);
396
 
397
  $post_author = $cache_userdata[$post->post_author];
398
 
399
+ if ( strtolower($post_author->user_email) == ($email) )
400
  $this->add_error(__('You appear to be already subscribed to this entry.', 'subscribe-to-comments'),'solo_subscribe');
401
 
402
  if ( !is_array($this->errors['solo_subscribe']) ) {
403
+ add_post_meta($postid, '_sg_subscribe-to-comments', $email);
404
+ setcookie('comment_author_email_' . COOKIEHASH, $email, time() + 30000000, COOKIEPATH);
405
+ $location = $this->manage_link($email, false, false) . '&subscribeid=' . $postid;
406
  header("Location: $location");
407
  exit();
408
  }
411
 
412
  function add_subscriber($cid) {
413
  global $wpdb;
414
+ $cid = (int) $cid;
415
  $id = (int) $id;
416
+ $email = strtolower($wpdb->get_var("SELECT comment_author_email FROM $wpdb->comments WHERE comment_ID = '$cid'"));
417
+ $email_sql = $wpdb->escape($email);
418
  $postid = $wpdb->get_var("SELECT comment_post_ID from $wpdb->comments WHERE comment_ID = '$cid'");
419
 
420
+ $previously_subscribed = ( $wpdb->get_var("SELECT comment_subscribe from $wpdb->comments WHERE comment_post_ID = '$postid' AND LCASE(comment_author_email) = '$email_sql' AND comment_subscribe = 'Y' LIMIT 1") || in_array($email, (array) get_post_meta($postid, '_sg_subscribe-to-comments')) ) ? true : false;
421
 
422
  // If user wants to be notified or has previously subscribed, set the flag on this current comment
423
  if (($_POST['subscribe'] == 'subscribe' && is_email($email)) || $previously_subscribed) {
424
+ delete_post_meta($postid, '_sg_subscribe-to-comments', $email);
425
  $wpdb->query("UPDATE $wpdb->comments SET comment_subscribe = 'Y' where comment_post_ID = '$postid' AND LCASE(comment_author_email) = '$email'");
426
  }
427
  return $cid;
564
  function remove_subscriber($email, $postid) {
565
  global $wpdb;
566
  $postid = (int) $postid;
567
+ $email = strtolower($email);
568
+ $email_sql = $wpdb->escape($email);
569
 
570
+ if ( delete_post_meta($postid, '_sg_subscribe-to-comments', $email) || $wpdb->query("UPDATE $wpdb->comments SET comment_subscribe = 'N' WHERE comment_post_ID = '$postid' AND LCASE(comment_author_email) ='$email_sql'") )
571
  return true;
572
  else
573
  return false;
594
  if ( $comment->comment_approved == '1' && $comment->comment_type == '' ) {
595
  // Comment has been approved and isn't a trackback or a pingback, so we should send out notifications
596
 
597
+ $message = sprintf(__("There is a new comment on the post \"%s\"", 'subscribe-to-comments') . ". \n%s\n\n", $post->post_title, get_permalink($comment->comment_post_ID));
598
  $message .= sprintf(__("Author: %s\n", 'subscribe-to-comments'), $comment->comment_author);
599
+ $message .= __("Comment:\n", 'subscribe-to-comments') . $comment->comment_content . "\n\n";
600
  $message .= __("See all comments on this post here:\n", 'subscribe-to-comments');
601
  $message .= get_permalink($comment->comment_post_ID) . "#comments\n\n";
602
  //add link to manage comment notifications
603
  $message .= __("To manage your subscriptions or to block all notifications from this site, click the link below:\n", 'subscribe-to-comments');
604
  $message .= get_settings('home') . '/?wp-subscription-manager=1&email=[email]&key=[key]';
605
 
606
+ $subject = sprintf(__('New Comment On: %s', 'subscribe-to-comments'), $post->post_title);
607
 
608
  $subscriptions = $this->subscriptions_from_post($comment->comment_post_ID);
609
  foreach ( (array) $subscriptions as $email ) {
610
+ if ( !$this->is_blocked($email) && $email != $comment->comment_author_email && is_email($email) ) {
611
+ $message_final = str_replace('[email]', urlencode($email), $message);
612
+ $message_final = str_replace('[key]', $this->generate_key($email), $message_final);
613
+ $this->send_mail($email, $subject, $message_final);
614
  }
615
  } // foreach subscription
616
  } // end if comment approved
698
  global $wpdb;
699
 
700
  // add the options
701
+ add_option('sg_subscribe_settings', array('use_custom_style' => '', 'email' => get_bloginfo('admin_email'), 'name' => get_bloginfo('name'), 'header' => '[theme_path]/header.php', 'sidebar' => '', 'footer' => '[theme_path]/footer.php', 'before_manager' => '<div id="content" class="widecolumn subscription-manager">', 'after_manager' => '</div>', 'not_subscribed_text' => __('Notify me of followup comments via e-mail', 'subscribe-to-comments'), 'subscribed_text' => __('You are subscribed to this entry. <a href="[manager_link]">Manage your subscriptions</a>.', 'subscribe-to-comments'), 'author_text' => __('You are the author of this entry. <a href="[manager_link]">Manage subscriptions</a>.', 'subscribe-to-comments'), 'version' => $this->version));
702
 
703
  $settings = get_option('sg_subscribe_settings');
704
+ if ( !$settings ) { // work around WP 2.2/2.2.1 bug
705
+ wp_redirect('http://' . $_SERVER['HTTP_HOST'] . add_query_arg('stcwpbug', '1'));
706
+ exit;
707
+ }
708
 
709
  if ( !$settings['salt'] ) {
710
  $settings['salt'] = md5(md5(uniqid(rand() . rand() . rand() . rand() . rand(), true))); // random MD5 hash
716
  $update = true;
717
  }
718
 
719
+ if ( !$settings['version'] ) {
720
+ $settings = stripslashes_deep($settings);
721
+ $update = true;
722
+ }
723
+
724
+ if ( $settings['not_subscribed_text'] == '' || $settings['subscribed_text'] == '' ) { // recover from WP 2.2/2.2.1 bug
725
+ delete_option('sg_subscribe_settings');
726
+ wp_redirect('http://' . $_SERVER['HTTP_HOST'] . add_query_arg('stcwpbug', '2'));
727
+ exit;
728
+ }
729
+
730
  if ( $update )
731
+ $this->update_settings($settings);
732
 
733
  $column_name = 'comment_subscribe';
734
  foreach ( (array) $wpdb->get_col("DESC $wpdb->comments", 0) as $column )
740
  }
741
 
742
 
743
+ function update_settings($settings) {
744
+ $settings['version'] = $this->version;
745
+ update_option('sg_subscribe_settings', $settings);
746
+ }
747
+
748
+
749
  function current_viewer_subscription_status(){
750
  global $wpdb, $post, $user_email;
751
 
798
 
799
 
800
  function add_admin_menu() {
801
+ add_management_page(__('Comment Subscription Manager', 'subscribe-to-comments'), __('Subscriptions', 'subscribe-to-comments'), 8, 'stc-management', 'sg_subscribe_admin');
802
 
803
+ add_options_page(__('Subscribe to Comments', 'subscribe-to-comments'), __('Subscribe to Comments', 'subscribe-to-comments'), 5, 'stc-options', array('sg_subscribe_settings', 'options_page'));
804
  }
805
 
806
 
848
  // detect "subscribe without commenting" attempts
849
  add_action('init', create_function('$a','global $sg_subscribe; if ( $_POST[\'solo-comment-subscribe\'] == \'solo-comment-subscribe\' && is_numeric($_POST[\'postid\']) ) {
850
  sg_subscribe_start();
851
+ $sg_subscribe->solo_subscribe(stripslashes($_POST[\'email\']), (int) $_POST[\'postid\']);
852
  }')
853
  );
854
 
 
 
855
  if ( isset($_REQUEST['wp-subscription-manager']) )
856
  add_action('template_redirect', 'sg_subscribe_admin_standalone');
857
 
869
  $sg_subscribe->standalone = true;
870
  ob_start(create_function('$a', 'return str_replace("<title>", "<title> " . __("Subscription Manager", "subscribe-to-comments") . " &raquo; ", $a);'));
871
  } else {
872
+ $sg_subscribe->form_action = 'edit.php?page=stc-management';
873
  $sg_subscribe->standalone = false;
874
  }
875