Subscribe2 - Version 2.20

Version Description

Download this release

Release Info

Developer MattyRob
Plugin Icon 128x128 Subscribe2
Version 2.20
Comparing to
See all releases

Code changes from version 3.0 to 2.20

ReadMe.txt CHANGED
@@ -77,10 +77,83 @@ Batches will occur for each group of message as described above. A site on Drea
77
 
78
  == Version History ==
79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  Version 3.0 by Matthew Robinson
81
 
82
  * Updated for WordPress 2.1 Branch
83
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  Version 2.14 by Matthew Robinson
85
 
86
  * Amended DREAMHOST setting to BCCLIMIT as more hosts are limiting emails
77
 
78
  == Version History ==
79
 
80
+ Version 3.6 by Matthew Robinson
81
+
82
+ * Fixed a typo in Content-Type mail headers
83
+ * Fixed Auto Register functions to obey Excluded Categories
84
+ * Added option to check WP-Register checkbox by default
85
+
86
+ Version 3.5 by Matthew Robinson
87
+
88
+ * Fixed a bug in the upgrade function that was messing up the options settings
89
+ * Updated the include.php file to preset recently introduced option settings
90
+
91
+ Version 3.4 by Matthew Robinson
92
+
93
+ * QuickTag button now displays a Marker! (HUGE thanks to Raven!)
94
+ * Fix for excluded categories in User Menu
95
+ * BCCLIMIT typo corrected in Mail function
96
+ * Call to translation files moved to avoid call to undefined function
97
+ * Options added to send mails for pages and password protected posts
98
+ * Option added to display subscription checkbox in WordPress Register screen
99
+ * Small typo and layout amendments
100
+
101
+ Version 3.3 by Matthew Robinson
102
+
103
+ * QuickTag button added! Works with Visual and Standard Editor. __Look in Code for token addition if using RTE.__
104
+ * Current Server time displayed for Cron tasks
105
+ * Fixed bug so Registered users now identified correctly
106
+ * Upgrade function called via WordPress hook to prevent calls to undefined functions
107
+ * Fixed a bug affecting Registered Users not appearing in the drop down list
108
+ * Improved handling of the Subscribe2 option array
109
+
110
+ Version 3.2 by Matthew Robinson
111
+
112
+ * Fixed a bug affecting Registered Users not appearing in the drop down list
113
+ * Improved handling of the Subscribe2 option array
114
+
115
+ Version 3.1 by Matthew Robinson
116
+
117
+ * Amended code to use core cron functionality for future posts and digest notifications, no longer need WP-Cron
118
+ * Improved HTML code generated for admin pages
119
+ * Removed sending of emails for WordPress Pages
120
+ * Fixed display issues if S2PAGE is not defined
121
+
122
  Version 3.0 by Matthew Robinson
123
 
124
  * Updated for WordPress 2.1 Branch
125
 
126
+ Version 2.20 by Matthew Robinson
127
+
128
+ * Fixed a typo in Content-Type mail headers
129
+ * Fixed Auto Register functions to obey Excluded Categories
130
+
131
+ Version 2.19 by Matthew Robinson
132
+
133
+ * Fixed a bug in the upgrade function that was messing up the options settings
134
+
135
+ Version 2.18 by Matthew Robinson
136
+
137
+ * BCCLIMIT typo corrected in Mail function
138
+ * Call to translation files moved to avoid call to undefined function
139
+ * Small typo and layout amendments
140
+
141
+ Version 2.17 by Matthew Robinson
142
+
143
+ * Current Server time displayed for Cron tasks
144
+ * Fixed bug so Registered users now identified correctly
145
+ * Upgrade function called via WordPress hook to prevent calls to undefined functions
146
+
147
+ Version 2.16 by Matthew Robinson
148
+
149
+ * Fixed a bug affecting Registered Users not appearing in the drop down list
150
+ * Improved handling of the Subscribe2 option array
151
+
152
+ Version 2.15 by Matthew Robinson
153
+
154
+ * Improved HTML code generated for admin pages
155
+ * Fixed display issues if S2PAGE is not defined
156
+
157
  Version 2.14 by Matthew Robinson
158
 
159
  * Amended DREAMHOST setting to BCCLIMIT as more hosts are limiting emails
subscribe2/include.php CHANGED
@@ -31,12 +31,8 @@ if (!isset($this->subscribe2_options['barred'])) {
31
  $this->subscribe2_options['barred'] = '';
32
  } // option containing domains barred from public registration
33
 
34
- if (!isset($this->subscribe2_options['email_freq'])) {
35
- $this->subscribe2_options['email_freq'] = "never";
36
- } // option for sending emails periodically or per-post
37
-
38
  if (!isset($this->subscribe2_options['mailtext'])) {
39
- $this->subscribe2_options['mailtext'] = "BLOGNAME has posted a new item, 'TITLE'\r\nPOST\r\nYou may view the latest post at\r\nPERMALINK\r\nYou received this e-mail because you asked to be notified when new updates are posted.\r\nBest regards,\r\nMYNAME\r\nEMAIL";
40
  } // Default notification email text
41
 
42
  if (!isset($this->subscribe2_options['confirm_email'])) {
31
  $this->subscribe2_options['barred'] = '';
32
  } // option containing domains barred from public registration
33
 
 
 
 
 
34
  if (!isset($this->subscribe2_options['mailtext'])) {
35
+ $this->subscribe2_options['mailtext'] = "BLOGNAME has posted a new item, 'TITLE'\n\nPOST\n\nYou may view the latest post at\nPERMALINK\n\nYou received this e-mail because you asked to be notified when new updates are posted.\nBest regards,\nMYNAME\nEMAIL";
36
  } // Default notification email text
37
 
38
  if (!isset($this->subscribe2_options['confirm_email'])) {
subscribe2/subscribe2.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Subscribe2
4
  Plugin URI: http://subscribe2.wordpress.com
5
  Description: Notifies an email list when new entries are posted.
6
- Version: 2.3.1 for WP2.1
7
  Author: Matthew Robinson
8
  Author URI: http://subscribe2.wordpress.com
9
  */
@@ -29,69 +29,32 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
29
  http://www.gnu.org/licenses/gpl.html
30
  */
31
 
32
- // If you are on a host that limits the numner of recipients
33
  // permitted on each outgoing email message
34
- // change this value to your hosts limit
35
  define('BCCLIMIT', '0');
36
 
37
- // by default, subscribe2 grabs the first page from your database for use
38
  // when displaying the confirmation screen to public subscribers.
39
- // You can override this by specifying a page ID below.
40
  define('S2PAGE', '0');
41
 
42
- // our version number. Don't touch.
43
- define('S2VERSION', '2.3.1');
44
-
45
- // Add the Subscribe code into the WP API
46
- add_action('init', 's2init');
47
-
48
- // maybe add our button
49
- $s2_options = array();
50
- $s2_options = get_option('subscribe2_options');
51
- if ('1' == $s2_options['show_button']) {
52
- // use Owen's excellent ButtonSnap library
53
- include(ABSPATH . '/wp-content/plugins/buttonsnap.php');
54
- add_action('init', 's2_button_init');
55
- add_action('marker_css', 'subscribe2_css');
56
- }
57
- unset($s2_options);
58
-
59
- function s2init() {
60
- global $subscribe2;
61
- $mysubscribe2 = new subscribe2();
62
- $mysubscribe2->subscribe2();
63
- }
64
-
65
- /* ===== ButtonSnap configuration ===== */
66
- /**
67
- Register our button in the QuickTags bar
68
- */
69
- function s2_button_init() {
70
- $url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_button.png';
71
- buttonsnap_textbutton($url, 'Subscribe2', '<!--subscribe2-->');
72
- buttonsnap_register_marker('subscribe2', 's2_marker');
73
- }
74
-
75
- /**
76
- Style a marker in the Rich Text Editor for our tag
77
- By default, the RTE suppresses output of HTML comments, so this places a CSS style on our token in order to make it display
78
- */
79
- function subscribe2_css() {
80
- $marker_url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_marker.png';
81
- echo "
82
- .s2_marker {
83
- display: block;
84
- height: 45px;
85
- margin-top: 5px;
86
- background-image: url({$marker_url});
87
- background-repeat: no-repeat;
88
- background-position: center;
89
- }
90
- ";
91
- }
92
 
93
  // start our class
94
- class subscribe2 {
95
  // variables and constructor are declared at the end
96
 
97
  /**
@@ -102,9 +65,7 @@ class subscribe2 {
102
 
103
  $this->please_log_in = "<p>" . __('To manage your subscription options please ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-login.php\">login</a>.</p>";
104
 
105
- $this->use_profile_admin = "<p>" . __('You may manage your subscription options from your ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-admin/users.php?page=" . plugin_basename(__FILE__) . "\">profile</a>.</p>";
106
-
107
- $this->use_profile_users = "<p>" . __('You may manage your subscription options from your ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-admin/profile.php?page=" . plugin_basename(__FILE__) . "\">profile</a>.</p>";
108
 
109
  $this->confirmation_sent = "<p>" . __('A confirmation message is on its way!', 'subscribe2') . "</p>";
110
 
@@ -147,12 +108,8 @@ class subscribe2 {
147
  function admin_menu() {
148
  add_management_page(__('Subscribers', 'subscribe2'), __('Subscribers', 'subscribe2'), "manage_options", __FILE__, array(&$this, 'manage_menu'));
149
  add_options_page(__('Subscribe2 Options', 'subscribe2'), __('Subscribe2','subscribe2'), "manage_options", __FILE__, array(&$this, 'options_menu'));
150
- if (current_user_can('manage_options')) {
151
- add_submenu_page('users.php', __('Subscriptions', 'subscribe2'), __('Subscriptions', 'subscribe2'), "read", __FILE__, array(&$this, 'user_menu'));
152
- } else {
153
- add_submenu_page('profile.php', __('Subscriptions', 'subscribe2'), __('Subscriptions', 'subscribe2'), "read", __FILE__, array(&$this, 'user_menu'));
154
- }
155
- add_submenu_page('post-new.php', __('Mail Subscribers','subscribe2'), __('Mail Subscribers', 'subscribe2'),"manage_options", __FILE__, array(&$this, 'write_menu'));
156
  $s2nonce = md5('subscribe2');
157
  }
158
 
@@ -174,11 +131,6 @@ class subscribe2 {
174
  echo "</script>\r\n";
175
  }
176
 
177
- function add_weekly_sched($sched) {
178
- $sched['weekly'] = array('interval' => 604800, 'display' => __('Once Weekly','subscribe2'));
179
- return $sched;
180
- }
181
-
182
  /* ===== Install, upgrade, reset ===== */
183
  /**
184
  Install our table
@@ -235,7 +187,7 @@ class subscribe2 {
235
  }
236
  $this->subscribe2_options['version'] = S2VERSION;
237
  //double check that the options are in the database
238
- require_once(ABSPATH . "/wp-content/plugins/subscribe2/include.php");
239
  update_option('subscribe2_options', $this->subscribe2_options);
240
  } // end upgrade()
241
 
@@ -279,19 +231,20 @@ class subscribe2 {
279
  $this->myname = $admin->display_name;
280
  $this->myemail = $admin->user_email;
281
  }
282
- $headers = "From: $this->myname <$this->myemail>\n";
283
- $headers .= "Return-Path: <$this->myemail>\n";
 
284
  $headers .= "X-Mailer:PHP" . phpversion() . "\n";
285
  $headers .= "Precedence: list\nList-Id: " . get_settings('blogname') . "\n";
286
 
287
  if ('html' == $type) {
288
  // To send HTML mail, the Content-type header must be set
289
  $headers .= "MIME-Version: 1.0\n";
290
- $headers .= "Content-type: " . get_bloginfo('html_type') . "; charset=\"". get_bloginfo('charset') . "\"\n";
291
  $mailtext = "<html><head><title>" . $subject . "</title></head><body>" . $message . "</body></html>";
292
  } else {
293
  $headers .= "MIME-Version: 1.0\n";
294
- $headers .= "Content-type: text/plain; charset=\"". get_bloginfo('charset') . "\"\n";
295
  $message = preg_replace('|&[^a][^m][^p].{0,3};|', '', $message);
296
  $message = preg_replace('|&amp;|', '&', $message);
297
  $mailtext = wordwrap(strip_tags($message), 80, "\n");
@@ -317,7 +270,7 @@ class subscribe2 {
317
  ('' == $bcc) ? $bcc = "Bcc: $recipient" : $bcc .= ",\r\n $recipient";
318
  // Headers constructed as per definition at http://www.ietf.org/rfc/rfc2822.txt
319
  }
320
- if (30 == $count) {
321
  $count = 1;
322
  $batch[] = $bcc;
323
  $bcc = '';
@@ -364,18 +317,21 @@ class subscribe2 {
364
  /**
365
  Sends an email notification of a new post
366
  */
367
- function publish($id = 0) {
368
- if ( (!$id) || is_page($id) ) { return $id; }
369
 
370
  // are we doing daily digests? If so, don't send anything now
371
- if ($this->subscribe2_options['email_freq'] != 'never') { return; }
372
 
373
  // we need to determine whether this is a new post, or an edit
374
- if ($this->private) {
375
- // this post was published from draft status
376
- // OR is an edit of an existing post
377
- // so send no notification
378
- return $id;
 
 
 
379
  }
380
 
381
  $post_cats = wp_get_post_cats('1', $id);
@@ -383,7 +339,7 @@ class subscribe2 {
383
  $check = false;
384
  // is the current post assigned to any categories
385
  // which should not generate a notification email?
386
- foreach (explode(',', $this->get_excluded_cats()) as $cat) {
387
  if (in_array($cat, $post_cats)) {
388
  $check = true;
389
  }
@@ -402,6 +358,19 @@ class subscribe2 {
402
  $post =& get_post($id);
403
  // is this post set in the future?
404
  if ($post->post_date > current_time('mysql')) {
 
 
 
 
 
 
 
 
 
 
 
 
 
405
  // bail out
406
  return $id;
407
  }
@@ -466,8 +435,8 @@ class subscribe2 {
466
  $excerpt = implode(' ', $words);
467
  }
468
  }
469
-
470
  }
 
471
  // first we send plaintext summary emails
472
  $body = str_replace('POST', $excerpt, $mailtext);
473
  $registered = $this->get_registered("cats=$post_cats_string&format=text&amount=excerpt");
@@ -562,25 +531,12 @@ class subscribe2 {
562
  $mailheaders .= "X-Mailer:PHP" . phpversion() . "\n";
563
  $mailheaders .= "Precedence: list\nList-Id: " . get_settings('blogname') . "\n";
564
  $mailheaders .= "MIME-Version: 1.0\n";
565
- $mailheaders .= "Content-type: text/plain; charset=\"". get_bloginfo('charset') . "\"\n";
566
 
567
  @wp_mail ($this->email, $subject, $body, $mailheaders);
568
  } // end send_confirm()
569
 
570
  /* ===== Category functions ===== */
571
- /**
572
- Returns a comma-separated list of category IDs which should not generate notifications
573
- */
574
- function get_excluded_cats() {
575
- if ('' != $this->excluded_cats) {
576
- return $this->excluded_cats;
577
- } else {
578
- global $wpdb;
579
- $this->excluded_cats = $this->subscribe2_options['exclude'];
580
- return $this->excluded_cats;
581
- }
582
- } // end get_excluded_cats()
583
-
584
  /**
585
  Return either a comma-separated list of all the category IDs in the blog or an array of cat_ID => cat_name
586
  */
@@ -931,9 +887,21 @@ class subscribe2 {
931
 
932
  if (0 == $user_id) { return $user_id; }
933
  $user = get_userdata($user_id);
934
- $all_cats = get_categories('type=post&hide_empty=1&hierarchical=0');
935
- foreach ($all_cats as $cat) {
936
- ('' == $cats) ? $cats = "$cat->cat_ID" : $cats .= ",$cat->cat_ID";
 
 
 
 
 
 
 
 
 
 
 
 
937
  }
938
 
939
  // has this user previously signed up for email notification?
@@ -941,8 +909,8 @@ class subscribe2 {
941
  // delete this user from the public table, and subscribe them to all the categories
942
  $this->delete($user->user_email);
943
  update_usermeta($user_id, 's2_subscribed', $cats);
944
- foreach(explode(',', $cats) as $cat) {
945
- update_usermeta($user_id, 's2_cat' . $all_cats->cat_ID, "$all_cats->cat_ID");
946
  }
947
  update_usermeta($user_id, 's2_format', 'text');
948
  update_usermeta($user_id, 's2_excerpt', 'excerpt');
@@ -953,8 +921,8 @@ class subscribe2 {
953
  if (empty($check)) {
954
  if ('yes' == $this->subscribe2_options['autosub']) {
955
  // don't add entires by default if autosub is off, messes up daily digests
956
- update_usermeta($user_id, 's2_subscribed', $this->get_all_categories());
957
- foreach(explode(',', $this->get_all_categories()) as $cat) {
958
  update_usermeta($user_id, 's2_cat' . $cat, "$cat");
959
  }
960
  if ('html' == $this->subscribe2_options['autoformat']) {
@@ -967,7 +935,9 @@ class subscribe2 {
967
  update_usermeta($user_id, 's2_format', 'text');
968
  update_usermeta($user_id, 's2_excerpt', 'excerpt');
969
  }
970
- }
 
 
971
  }
972
  }
973
  return $user_id;
@@ -1002,8 +972,8 @@ class subscribe2 {
1002
  update_usermeta($user_ID, 's2_cat' . $id, "$id");
1003
  }
1004
  }
1005
- $newcats = array_merge($cats, $old_cats);
1006
- update_usermeta($user_ID, 's2_subscribed', implode(',', $newcats));
1007
  }
1008
  } // end subscribe_registered_users
1009
 
@@ -1041,7 +1011,7 @@ class subscribe2 {
1041
  foreach ($cats as $id) {
1042
  delete_usermeta($user_ID, 's2_cat' . $id, "$id");
1043
  }
1044
- update_usermeta($user_ID, 's2_subscribed', '');
1045
  }
1046
  }
1047
  } // end unsubscribe_registered_users
@@ -1320,24 +1290,6 @@ class subscribe2 {
1320
  }
1321
  $this->subscribe2_options['sender'] = $sender;
1322
 
1323
- // send per-post or digest emails
1324
- $email_freq = $_POST['email_freq'];
1325
- $this->subscribe2_options['email_freq'] = $email_freq;
1326
- wp_clear_scheduled_hook('s2_digest_cron');
1327
- $scheds = (array) wp_get_schedules();
1328
- $interval = ( isset($scheds[$email_freq]['interval']) ) ? (int) $scheds[$email_freq]['interval'] : 0;
1329
- if ($interval == 0) {
1330
- // if we are on per-post emails remove last_cron entry
1331
- unset($this->subscribe2_options['last_s2cron']);
1332
- } else {
1333
- if (!wp_next_scheduled('s2_digest_cron')) {
1334
- // if we are using digest schedule the event and prime last_cron as now
1335
- wp_schedule_event(time() + $interval, $email_freq, 's2_digest_cron');
1336
- $now = date('Y-m-d H:i:s', time());
1337
- $this->subscribe2_options['last_s2cron'] = $now;
1338
- }
1339
- }
1340
-
1341
  // email templates
1342
  $mailtext = $_POST['mailtext'];
1343
  $this->subscribe2_options['mailtext'] = $mailtext;
@@ -1377,12 +1329,7 @@ class subscribe2 {
1377
  if ('admin' == $this->subscribe2_options['sender']) {
1378
  echo "checked=\"checked\" ";
1379
  }
1380
- echo " /> " . __('Blog Admin', 'subscribe2') . "<br /><br />\r\n";
1381
- if (function_exists('wp_schedule_event')) {
1382
- echo __('Send Email as Digest', 'subscribe2') . ": <br /><br />\r\n";
1383
- $this->display_digest_choices();
1384
- echo "<br />\r\n";
1385
- }
1386
  echo "<h2>" . __('Email Templates', 'subscribe2') . "</h2>\r\n";
1387
  echo "<table width=\"100%\" cellspacing=\"2\" cellpadding=\"1\" class=\"editform\">\r\n";
1388
  echo "<tr><td>";
@@ -1412,7 +1359,7 @@ class subscribe2 {
1412
 
1413
  // excluded categories
1414
  echo "<h2>" . __('Excluded Categories', 'subscribe2') . "</h2>\r\n";
1415
- $this->display_category_form(explode(',', $this->get_excluded_cats()));
1416
  echo "<center><input type=\"checkbox\" name=\"reg_override\" value=\"1\"";
1417
  if ('1' == $this->subscribe2_options['reg_override']) {
1418
  echo " checked=\"checked\"";
@@ -1439,27 +1386,27 @@ class subscribe2 {
1439
  }
1440
  echo " /> " . __('No', 'subscribe2') . "<br /><br />\r\n";
1441
  echo __('Auto-subscribe users to receive email as', 'subscribe2') . ": <br />\r\n";
1442
- echo "<input type=\"radio\" name=\"autoformat\" value=\"html\"";
1443
- if ('html' == $this->subscribe2_options['autoformat']) {
1444
- echo "checked=\"checked\" ";
1445
- }
1446
- echo "/> " . __('HTML', 'subscribe2') ." &nbsp;&nbsp;";
1447
- echo "<input type=\"radio\" name=\"autoformat\" value=\"fulltext\" ";
1448
- if ('fulltext' == $this->subscribe2_options['autoformat']) {
1449
- echo "checked=\"checked\" ";
1450
- }
1451
- echo "/> " . __('Plain Text - Full', 'subscribe2') . " &nbsp;&nbsp;";
1452
- echo "<input type=\"radio\" name=\"autoformat\" value=\"text\" ";
1453
- if ('text' == $this->subscribe2_options['autoformat']) {
1454
- echo "checked=\"checked\" ";
1455
- }
1456
- echo "/> " . __('Plain Text - Excerpt', 'subscribe2') . " <br /><br />";
1457
-
1458
  //barred domains
1459
  echo "<h2>" . __('Barred Domains', 'subscribe2') . "</h2>\r\n";
1460
  echo __('Enter domains to bar from public subscriptions: <br /> (Use a new line for each entry and omit the "@" symbol, for example email.com)', 'subscribe2');
1461
  echo "<br />\r\n<textarea style=\"width: 98%;\" rows=\"4\" cols=\"60\" name=\"barred\">" . $this->subscribe2_options['barred'] . "</textarea>";
1462
-
1463
  // submit
1464
  echo "<p align=\"center\"><span class=\"submit\"><input type=\"submit\" id=\"save\" name=\"submit\" value=\"" . __('Submit', 'subscribe2') . "\" /></span></p>";
1465
  echo "</form>\r\n";
@@ -1515,7 +1462,7 @@ class subscribe2 {
1515
  delete_usermeta($user_ID, "s2_cat" . $cat);
1516
  }
1517
  }
1518
- delete_usermeta($user_ID, 's2_subscribed');
1519
  } else {
1520
  if (!is_array($cats)) {
1521
  $cats = array($_POST['category']);
@@ -1547,7 +1494,7 @@ class subscribe2 {
1547
  wp_nonce_field('subscribe2-user_subscribers' . $s2nonce);
1548
  }
1549
  echo "<input type=\"hidden\" name=\"s2_admin\" value=\"user\" />";
1550
- if ($this->subscribe2_options['email_freq'] == 'never') {
1551
  echo __('Receive email as', 'subscribe2') . ": &nbsp;&nbsp;";
1552
  echo "<input type=\"radio\" name=\"s2_format\" value=\"html\"";
1553
  if ('html' == get_usermeta($user_ID, 's2_format')) {
@@ -1567,7 +1514,7 @@ class subscribe2 {
1567
  if ($key == get_usermeta($user_ID, 's2_excerpt')) {
1568
  echo " checked=\"checked\"";
1569
  }
1570
- echo " /> $value ";
1571
  }
1572
  echo "<p style=\"color: red\">" . __('Note: HTML format will always deliver the full post.', 'subscribe2') . "</p>\r\n";
1573
  echo __('Automatically subscribe me to newly created categories', 'subscribe2') . ': &nbsp;&nbsp;';
@@ -1575,7 +1522,8 @@ class subscribe2 {
1575
  if ('yes' == get_usermeta($user_ID, 's2_autosub')) {
1576
  echo "checked=\"yes\" ";
1577
  }
1578
- echo "/> Yes <input type=\"radio\" name=\"new_category\" value=\"no\" ";
 
1579
  if ('no' == get_usermeta($user_ID, 's2_autosub')) {
1580
  echo "checked=\"yes\" ";
1581
  }
@@ -1673,12 +1621,11 @@ class subscribe2 {
1673
  function display_category_form($selected = array(), $override = 1) {
1674
  global $wpdb;
1675
 
1676
- $all_cats = get_categories('type=post&hide_empty=1&hierarchical=0');
1677
-
1678
  if (0 == $override) {
1679
  // registered users are not allowed to subscribe to
1680
  // excluded categories
1681
- foreach (explode(',', $this->get_excluded_cats()) as $cat) {
1682
  $category = get_category($cat);
1683
  $excluded[$cat] = $category->cat_name;
1684
  }
@@ -1690,24 +1637,24 @@ class subscribe2 {
1690
  $j = 0;
1691
  echo "<table width=\"100%\" cellspacing=\"2\" cellpadding=\"5\" class=\"editform\">\r\n";
1692
  echo "<tr valign=\"top\"><td width=\"50%\" align=\"left\">\r\n";
1693
- foreach ($all_cats as $cat) {
1694
  if ( ($i >= $half) && (0 == $j) ){
1695
  echo "</td><td width=\"50%\" align=\"left\">\r\n";
1696
  $j++;
1697
  }
1698
  if (0 == $j) {
1699
- echo "<input type=\"checkbox\" name=\"category[]\" value=\"" . $cat->cat_ID . "\"";
1700
- if (in_array($cat->cat_ID, $selected)) {
1701
  echo " checked=\"checked\" ";
1702
  }
1703
- echo " /> " . $cat->cat_name . "<br />\r\n";
1704
  } else {
1705
 
1706
- echo "<input type=\"checkbox\" name=\"category[]\" value=\"" . $cat->cat_ID . "\"";
1707
- if (in_array($cat->cat_ID, $selected)) {
1708
  echo " checked=\"checked\" ";
1709
  }
1710
- echo " /> " . $cat->cat_name . "<br />\r\n";
1711
  }
1712
  $i++;
1713
  }
@@ -1732,8 +1679,6 @@ class subscribe2 {
1732
  'unconfirmed' => ' &nbsp;&nbsp;' . __('Unconfirmed', 'subscribe2'),
1733
  'registered' => __('Registered Subscribers', 'subscribe2'));
1734
 
1735
- $all_cats = get_categories('type=post&hide_empty=1&hierarchical=0');
1736
-
1737
  // count the number of subscribers
1738
  $count['confirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='1'");
1739
  $count['unconfirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='0'");
@@ -1746,8 +1691,8 @@ class subscribe2 {
1746
  }
1747
  $count['registered'] = $wpdb->get_var("SELECT COUNT(meta_key) FROM $wpdb->usermeta WHERE meta_key='s2_subscribed'");
1748
  $count['all'] = ($count['confirmed'] + $count['unconfirmed'] + $count['registered']);
1749
- foreach ($all_cats as $cat) {
1750
- $count[$cat->cat_name] = $wpdb->get_var("SELECT COUNT(meta_value) FROM $wpdb->usermeta WHERE meta_key='s2_cat$cat->cat_ID'");
1751
  }
1752
 
1753
  // do have actually have some subscribers?
@@ -1770,11 +1715,12 @@ class subscribe2 {
1770
  }
1771
 
1772
  if ($count['registered'] > 0) {
1773
- foreach ($all_cats as $cat) {
1774
- if (in_array($cat->cat_ID, $exclude)) { continue; }
1775
- echo "<option value=\"" . $cat->cat_ID . "\"";
1776
- if ($cat->cat_ID == $selected) { echo " selected=\"selected\" "; }
1777
- echo "> &nbsp;&nbsp;" . $cat->cat_name . "&nbsp;(" . $count[$cat->cat_name] . ") </option>\r\n";
 
1778
  }
1779
  }
1780
  echo "</select>";
@@ -1783,31 +1729,6 @@ class subscribe2 {
1783
  }
1784
  } // end display_subscriber_dropdown()
1785
 
1786
- function display_digest_choices() {
1787
- global $wpdb;
1788
- $schedule = (array)wp_get_schedules();
1789
- $schedule = array_merge(array('never' => array('interval' => 0, 'display' => __('Per Post Email','subscribe2'))), $schedule);
1790
- $sort = array();
1791
- foreach ( (array)$schedule as $key => $value ) $sort[$key] = $value['interval'];
1792
- asort($sort);
1793
- $schedule_sorted = array();
1794
- foreach ($sort as $key => $value) {
1795
- $schedule_sorted[$key] = $schedule[$key];
1796
- }
1797
- foreach ($schedule_sorted as $key => $value) {
1798
- echo "<input type=\"radio\" name=\"email_freq\" value=\"" . $key . "\"";
1799
- if ($key == $this->subscribe2_options['email_freq']) {
1800
- echo " checked=\"checked\" ";
1801
- }
1802
- echo " /> " . $value['display'] . "<br />\r\n";
1803
- }
1804
- if (wp_next_scheduled('s2_digest_cron')) {
1805
- $datetime = get_option('date_format') . ' @ ' . get_option('time_format');
1806
- echo "<p>" . __('Next email notification will be sent', 'subscribe2') . ": \r\n";
1807
- echo "<strong>" . gmdate($datetime, wp_next_scheduled('s2_digest_cron') + (get_option('gmt_offset') * 3600)) . "</strong></p>\r\n";
1808
- }
1809
- } // end display_digest_choices()
1810
-
1811
  /* ===== template and filter functions ===== */
1812
  /**
1813
  Display our form; also handles (un)subscribe requests
@@ -1819,11 +1740,7 @@ class subscribe2 {
1819
  global $user_ID;
1820
  get_currentuserinfo();
1821
  if ($user_ID) {
1822
- if (current_user_can('manage_options')) {
1823
- $this->s2form = $this->use_profile_admin;
1824
- } else {
1825
- $this->s2form = $this->use_profile_users;
1826
- }
1827
  }
1828
  if (isset($_POST['s2_action'])) {
1829
  global $wpdb, $user_email;
@@ -1876,8 +1793,8 @@ class subscribe2 {
1876
 
1877
  /**
1878
  Overrides the default query when handling a (un)subscription confirmation
1879
- This is basically a trick: if the s2 variable is in the query string, just grab the first static page
1880
- and override it's contents later with title_filter() and template_filter()
1881
  */
1882
  function query_filter() {
1883
  // don't interfere if we've already done our thing
@@ -1885,7 +1802,7 @@ class subscribe2 {
1885
 
1886
  global $wpdb;
1887
 
1888
- if ( (defined('S2PAGE')) && (0 !== S2PAGE) ) {
1889
  return "page_id=" . S2PAGE;
1890
  } else {
1891
  $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status='static' LIMIT 1");
@@ -1906,33 +1823,50 @@ class subscribe2 {
1906
  return __('Subscription Confirmation', 'subscribe2');
1907
  } // end title_filter()
1908
 
 
1909
  /**
1910
- Override the template filter to make sure a special template is not used
1911
  */
1912
- function template_filter() {
1913
- // don't interfere if we've already done our thing
1914
- if (1 == $this->filtered) { return; }
1915
- return;
1916
- } // end template_filter()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1917
 
1918
- /* ===== wp-cron functions ===== */
1919
  /**
1920
  Send a daily digest of today's new posts
1921
  */
1922
- function subscribe2_cron() {
1923
  global $wpdb;
1924
 
1925
- // collect posts
1926
- $now = date('Y-m-d H:i:s', time());
1927
- $prev = $this->subscribe2_options['last_s2cron'];
1928
- $posts = $wpdb->get_results("SELECT ID, post_title, post_excerpt, post_content FROM $wpdb->posts WHERE post_date >= '$prev' AND post_date < '$now' AND post_status='publish' AND post_type='post'");
1929
 
1930
- // update last_s2cron execution time before completing or bailing
1931
- $this->subscribe2_options['last_s2cron'] = $now;
1932
- update_option('subscribe2_options', $this->subscribe2_options);
1933
-
1934
  // do we have any posts?
1935
- if (empty($posts)) { return; }
1936
 
1937
  // if we have posts, let's prepare the digest
1938
  foreach ($posts as $post) {
@@ -1941,7 +1875,7 @@ class subscribe2 {
1941
  $check = false;
1942
  // is the current post assigned to any categories
1943
  // which should not generate a notification email?
1944
- foreach (explode(',', $this->get_excluded_cats()) as $cat) {
1945
  if (in_array($cat, $post_cats)) {
1946
  $check = true;
1947
  }
@@ -1974,7 +1908,8 @@ class subscribe2 {
1974
  }
1975
 
1976
  $author = get_userdata($post->post_author);
1977
-
 
1978
  // do we send as admin, or post author?
1979
  if ('author' == $this->subscribe2_options['sender']) {
1980
  // get author details
@@ -1985,38 +1920,68 @@ class subscribe2 {
1985
  }
1986
  $this->myemail = $user->user_email;
1987
  $this->myname = $user->display_name;
1988
-
1989
- $scheds = (array) wp_get_schedules();
1990
- $email_freq = $this->subscribe2_options['email_freq'];
1991
- $display = $scheds[$email_freq]['display'];
1992
- $subject = '[' . stripslashes(get_settings('blogname')) . '] ' . $display . ' ' . __('Digest Email', 'subscribe2');
1993
  $public = $this->get_public();
1994
  $registered = $this->get_registered();
1995
  $recipients = array_merge((array)$public, (array)$registered);
1996
  $mailtext = $this->substitute(stripslashes($this->subscribe2_options['mailtext']));
1997
  $body = str_replace('POST', $message, $mailtext);
1998
  $this->mail($recipients, $subject, $body);
1999
- } // end subscribe2_cron
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2000
 
2001
  /* ===== Our constructor ===== */
2002
  /**
2003
  Subscribe2 constructor
2004
  */
 
 
 
 
 
 
 
 
 
 
 
2005
  function subscribe2() {
2006
  global $table_prefix;
2007
 
2008
  load_plugin_textdomain('subscribe2', 'wp-content/plugins/subscribe2');
2009
 
2010
- // load the options
2011
- $this->subscribe2_options = array();
2012
- $this->subscribe2_options = get_option('subscribe2_options');
2013
-
2014
  // do we need to install anything?
2015
  $this->public = $table_prefix . "subscribe2";
2016
- if(mysql_query("SELECT COUNT(*) FROM ".$this->public)==FALSE) { $this->install(); }
2017
  //do we need to upgrade anything?
2018
  if ($this->subscribe2_options['version'] !== S2VERSION) {
2019
- $this->upgrade();
2020
  }
2021
 
2022
  if (isset($_GET['s2'])) {
@@ -2028,22 +1993,49 @@ class subscribe2 {
2028
 
2029
  add_action('admin_head', array(&$this, 'admin_head'));
2030
  add_action('admin_menu', array(&$this, 'admin_menu'));
 
 
 
2031
  add_action('user_register', array(&$this, 'register'));
2032
  add_action('create_category', array(&$this, 'autosub_new_category'));
2033
  add_filter('the_content', array(&$this, 'filter'));
2034
- add_filter('cron_schedules', array(&$this, 'add_weekly_sched'));
2035
-
2036
- if ($this->subscribe2_options['email_freq'] != 'never') {
2037
- add_action('s2_digest_cron', array(&$this, 'subscribe2_cron'));
2038
- } else {
2039
- add_action('publish_post', array(&$this, 'publish'));
2040
- add_action('edit_post', array(&$this, 'edit'));
2041
- add_action('private_to_published', array(&$this, 'private2publish'));
2042
  }
 
2043
 
2044
  // load our strings
2045
  $this->load_strings();
2046
  } // end subscribe2()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2047
 
2048
  /* ===== our variables ===== */
2049
  // cache variables
3
  Plugin Name: Subscribe2
4
  Plugin URI: http://subscribe2.wordpress.com
5
  Description: Notifies an email list when new entries are posted.
6
+ Version: 2.20
7
  Author: Matthew Robinson
8
  Author URI: http://subscribe2.wordpress.com
9
  */
29
  http://www.gnu.org/licenses/gpl.html
30
  */
31
 
32
+ // If you are on a host that limits the number of recipients
33
  // permitted on each outgoing email message
34
+ // change the value on the line below to your hosts limit
35
  define('BCCLIMIT', '0');
36
 
37
+ // by default, Subscribe2 grabs the first page from your database for use
38
  // when displaying the confirmation screen to public subscribers.
39
+ // You can override this by specifying a page ID on the line below.
40
  define('S2PAGE', '0');
41
 
42
+ // change the value below to TRUE if you want a daily digest
43
+ // of the days posts sent to your subscribers
44
+ define('S2DIGEST', false);
45
+
46
+ // our version number. Don't touch this or any line below
47
+ // unless you know exacly what you are doing
48
+ define('S2VERSION', '2.20');
49
+
50
+ // use Owen's excellent ButtonSnap library
51
+ require(ABSPATH . '/wp-content/plugins/buttonsnap.php');
52
+
53
+ $mysubscribe2 = new s2class;
54
+ $mysubscribe2->s2init();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
  // start our class
57
+ class s2class {
58
  // variables and constructor are declared at the end
59
 
60
  /**
65
 
66
  $this->please_log_in = "<p>" . __('To manage your subscription options please ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-login.php\">login</a>.</p>";
67
 
68
+ $this->use_profile = "<p>" . __('You may manage your subscription options from your ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-admin/profile.php?page=" . plugin_basename(__FILE__) . "\">profile</a>.</p>";
 
 
69
 
70
  $this->confirmation_sent = "<p>" . __('A confirmation message is on its way!', 'subscribe2') . "</p>";
71
 
108
  function admin_menu() {
109
  add_management_page(__('Subscribers', 'subscribe2'), __('Subscribers', 'subscribe2'), "manage_options", __FILE__, array(&$this, 'manage_menu'));
110
  add_options_page(__('Subscribe2 Options', 'subscribe2'), __('Subscribe2','subscribe2'), "manage_options", __FILE__, array(&$this, 'options_menu'));
111
+ add_submenu_page('profile.php', __('Subscriptions', 'subscribe2'), __('Subscriptions', 'subscribe2'), "read", __FILE__, array(&$this, 'user_menu'));
112
+ add_submenu_page('post.php', __('Mail Subscribers','subscribe2'), __('Mail Subscribers', 'subscribe2'),"manage_options", __FILE__, array(&$this, 'write_menu'));
 
 
 
 
113
  $s2nonce = md5('subscribe2');
114
  }
115
 
131
  echo "</script>\r\n";
132
  }
133
 
 
 
 
 
 
134
  /* ===== Install, upgrade, reset ===== */
135
  /**
136
  Install our table
187
  }
188
  $this->subscribe2_options['version'] = S2VERSION;
189
  //double check that the options are in the database
190
+ require(ABSPATH . "/wp-content/plugins/subscribe2/include.php");
191
  update_option('subscribe2_options', $this->subscribe2_options);
192
  } // end upgrade()
193
 
231
  $this->myname = $admin->display_name;
232
  $this->myemail = $admin->user_email;
233
  }
234
+ $headers = "From: " . $this->myname . " <" . $this->myemail . ">\n";
235
+ $headers .= "Return-Path: <" . $this->myemail . ">\n";
236
+ $headers .= "Reply-To: " . $this->myemail . "\n";
237
  $headers .= "X-Mailer:PHP" . phpversion() . "\n";
238
  $headers .= "Precedence: list\nList-Id: " . get_settings('blogname') . "\n";
239
 
240
  if ('html' == $type) {
241
  // To send HTML mail, the Content-type header must be set
242
  $headers .= "MIME-Version: 1.0\n";
243
+ $headers .= "Content-Type: " . get_bloginfo('html_type') . "; charset=\"". get_bloginfo('charset') . "\"\n";
244
  $mailtext = "<html><head><title>" . $subject . "</title></head><body>" . $message . "</body></html>";
245
  } else {
246
  $headers .= "MIME-Version: 1.0\n";
247
+ $headers .= "Content-Type: text/plain; charset=\"". get_bloginfo('charset') . "\"\n";
248
  $message = preg_replace('|&[^a][^m][^p].{0,3};|', '', $message);
249
  $message = preg_replace('|&amp;|', '&', $message);
250
  $mailtext = wordwrap(strip_tags($message), 80, "\n");
270
  ('' == $bcc) ? $bcc = "Bcc: $recipient" : $bcc .= ",\r\n $recipient";
271
  // Headers constructed as per definition at http://www.ietf.org/rfc/rfc2822.txt
272
  }
273
+ if (BCCLIMIT == $count) {
274
  $count = 1;
275
  $batch[] = $bcc;
276
  $bcc = '';
317
  /**
318
  Sends an email notification of a new post
319
  */
320
+ function publish($id = 0, $cron = 0) {
321
+ if (!$id) { return $id; }
322
 
323
  // are we doing daily digests? If so, don't send anything now
324
+ if ( (defined('S2DIGEST')) && (true == S2DIGEST) ) { return; }
325
 
326
  // we need to determine whether this is a new post, or an edit
327
+ if (0 == $cron) {
328
+ // we're not being called from WP-Cron
329
+ if ($this->private) {
330
+ // this post was published from draft status
331
+ // OR is an edit of an existing post
332
+ // so send no notification
333
+ return $id;
334
+ }
335
  }
336
 
337
  $post_cats = wp_get_post_cats('1', $id);
339
  $check = false;
340
  // is the current post assigned to any categories
341
  // which should not generate a notification email?
342
+ foreach (explode(',', $this->subscribe2_options['exclude']) as $cat) {
343
  if (in_array($cat, $post_cats)) {
344
  $check = true;
345
  }
358
  $post =& get_post($id);
359
  // is this post set in the future?
360
  if ($post->post_date > current_time('mysql')) {
361
+ // is wp-cron installed?
362
+ if (function_exists('wp_cron_init')) {
363
+ // are we doing daily digests?
364
+ if ( (defined('S2DIGEST')) && (false == S2DIGEST) ) {
365
+ // not doing daily digests, so
366
+ // add this post to the list of
367
+ // future posts
368
+ $our_post = array('id' => $id, 'date' => $post->post_date);
369
+ $future_posts = get_option('s2_future_posts');
370
+ $future_posts[] = $our_post;
371
+ update_option('s2_future_posts', $future_posts);
372
+ }
373
+ }
374
  // bail out
375
  return $id;
376
  }
435
  $excerpt = implode(' ', $words);
436
  }
437
  }
 
438
  }
439
+
440
  // first we send plaintext summary emails
441
  $body = str_replace('POST', $excerpt, $mailtext);
442
  $registered = $this->get_registered("cats=$post_cats_string&format=text&amount=excerpt");
531
  $mailheaders .= "X-Mailer:PHP" . phpversion() . "\n";
532
  $mailheaders .= "Precedence: list\nList-Id: " . get_settings('blogname') . "\n";
533
  $mailheaders .= "MIME-Version: 1.0\n";
534
+ $mailheaders .= "Content-Type: text/plain; charset=\"". get_bloginfo('charset') . "\"\n";
535
 
536
  @wp_mail ($this->email, $subject, $body, $mailheaders);
537
  } // end send_confirm()
538
 
539
  /* ===== Category functions ===== */
 
 
 
 
 
 
 
 
 
 
 
 
 
540
  /**
541
  Return either a comma-separated list of all the category IDs in the blog or an array of cat_ID => cat_name
542
  */
887
 
888
  if (0 == $user_id) { return $user_id; }
889
  $user = get_userdata($user_id);
890
+
891
+ $all_cats = explode(',', $this->get_all_categories());
892
+ $cats = implode(',', $all_cats);
893
+
894
+ if (0 == $this->subscribe2_options['reg_override']) {
895
+ // registered users are not allowed to subscribe to
896
+ // excluded categories
897
+ $excluded = explode(',', $this->subscribe2_options['exclude']);
898
+ $all_cats = array_diff($all_cats, $excluded);
899
+ $cats = implode(',', $all_cats);
900
+ }
901
+
902
+ if ('' == $cats) {
903
+ // sanity check, might occur if all cats excluded and reg_override = 0
904
+ return $user_id;
905
  }
906
 
907
  // has this user previously signed up for email notification?
909
  // delete this user from the public table, and subscribe them to all the categories
910
  $this->delete($user->user_email);
911
  update_usermeta($user_id, 's2_subscribed', $cats);
912
+ foreach($all_cats as $cat) {
913
+ update_usermeta($user_id, 's2_cat' . $cat, "$cat");
914
  }
915
  update_usermeta($user_id, 's2_format', 'text');
916
  update_usermeta($user_id, 's2_excerpt', 'excerpt');
921
  if (empty($check)) {
922
  if ('yes' == $this->subscribe2_options['autosub']) {
923
  // don't add entires by default if autosub is off, messes up daily digests
924
+ update_usermeta($user_id, 's2_subscribed', $cats);
925
+ foreach($all_cats as $cat) {
926
  update_usermeta($user_id, 's2_cat' . $cat, "$cat");
927
  }
928
  if ('html' == $this->subscribe2_options['autoformat']) {
935
  update_usermeta($user_id, 's2_format', 'text');
936
  update_usermeta($user_id, 's2_excerpt', 'excerpt');
937
  }
938
+ } else {
939
+ update_usermeta($user_id, 's2_subscribed', '-1');
940
+ }
941
  }
942
  }
943
  return $user_id;
972
  update_usermeta($user_ID, 's2_cat' . $id, "$id");
973
  }
974
  }
975
+ $newcats = array_merge($cats, $old_cats);
976
+ update_usermeta($user_ID, 's2_subscribed', implode(',', $newcats));
977
  }
978
  } // end subscribe_registered_users
979
 
1011
  foreach ($cats as $id) {
1012
  delete_usermeta($user_ID, 's2_cat' . $id, "$id");
1013
  }
1014
+ update_usermeta($user_ID, 's2_subscribed', '-1');
1015
  }
1016
  }
1017
  } // end unsubscribe_registered_users
1290
  }
1291
  $this->subscribe2_options['sender'] = $sender;
1292
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1293
  // email templates
1294
  $mailtext = $_POST['mailtext'];
1295
  $this->subscribe2_options['mailtext'] = $mailtext;
1329
  if ('admin' == $this->subscribe2_options['sender']) {
1330
  echo "checked=\"checked\" ";
1331
  }
1332
+ echo " /> " . __('Blog Admin', 'subscribe2') . "<br />\r\n";
 
 
 
 
 
1333
  echo "<h2>" . __('Email Templates', 'subscribe2') . "</h2>\r\n";
1334
  echo "<table width=\"100%\" cellspacing=\"2\" cellpadding=\"1\" class=\"editform\">\r\n";
1335
  echo "<tr><td>";
1359
 
1360
  // excluded categories
1361
  echo "<h2>" . __('Excluded Categories', 'subscribe2') . "</h2>\r\n";
1362
+ $this->display_category_form(explode(',', $this->subscribe2_options['exclude']));
1363
  echo "<center><input type=\"checkbox\" name=\"reg_override\" value=\"1\"";
1364
  if ('1' == $this->subscribe2_options['reg_override']) {
1365
  echo " checked=\"checked\"";
1386
  }
1387
  echo " /> " . __('No', 'subscribe2') . "<br /><br />\r\n";
1388
  echo __('Auto-subscribe users to receive email as', 'subscribe2') . ": <br />\r\n";
1389
+ echo "<input type=\"radio\" name=\"autoformat\" value=\"html\"";
1390
+ if ('html' == $this->subscribe2_options['autoformat']) {
1391
+ echo "checked=\"checked\" ";
1392
+ }
1393
+ echo "/> " . __('HTML', 'subscribe2') ." &nbsp;&nbsp;";
1394
+ echo "<input type=\"radio\" name=\"autoformat\" value=\"fulltext\" ";
1395
+ if ('fulltext' == $this->subscribe2_options['autoformat']) {
1396
+ echo "checked=\"checked\" ";
1397
+ }
1398
+ echo "/> " . __('Plain Text - Full', 'subscribe2') . " &nbsp;&nbsp;";
1399
+ echo "<input type=\"radio\" name=\"autoformat\" value=\"text\" ";
1400
+ if ('text' == $this->subscribe2_options['autoformat']) {
1401
+ echo "checked=\"checked\" ";
1402
+ }
1403
+ echo "/> " . __('Plain Text - Excerpt', 'subscribe2') . " <br /><br />";
1404
+
1405
  //barred domains
1406
  echo "<h2>" . __('Barred Domains', 'subscribe2') . "</h2>\r\n";
1407
  echo __('Enter domains to bar from public subscriptions: <br /> (Use a new line for each entry and omit the "@" symbol, for example email.com)', 'subscribe2');
1408
  echo "<br />\r\n<textarea style=\"width: 98%;\" rows=\"4\" cols=\"60\" name=\"barred\">" . $this->subscribe2_options['barred'] . "</textarea>";
1409
+
1410
  // submit
1411
  echo "<p align=\"center\"><span class=\"submit\"><input type=\"submit\" id=\"save\" name=\"submit\" value=\"" . __('Submit', 'subscribe2') . "\" /></span></p>";
1412
  echo "</form>\r\n";
1462
  delete_usermeta($user_ID, "s2_cat" . $cat);
1463
  }
1464
  }
1465
+ update_usermeta($user_ID, 's2_subscribed', '-1');
1466
  } else {
1467
  if (!is_array($cats)) {
1468
  $cats = array($_POST['category']);
1494
  wp_nonce_field('subscribe2-user_subscribers' . $s2nonce);
1495
  }
1496
  echo "<input type=\"hidden\" name=\"s2_admin\" value=\"user\" />";
1497
+ if ( (defined('S2DIGEST')) && (FALSE == S2DIGEST) ) {
1498
  echo __('Receive email as', 'subscribe2') . ": &nbsp;&nbsp;";
1499
  echo "<input type=\"radio\" name=\"s2_format\" value=\"html\"";
1500
  if ('html' == get_usermeta($user_ID, 's2_format')) {
1514
  if ($key == get_usermeta($user_ID, 's2_excerpt')) {
1515
  echo " checked=\"checked\"";
1516
  }
1517
+ echo " /> " . $value . "&nbsp;&nbsp;";
1518
  }
1519
  echo "<p style=\"color: red\">" . __('Note: HTML format will always deliver the full post.', 'subscribe2') . "</p>\r\n";
1520
  echo __('Automatically subscribe me to newly created categories', 'subscribe2') . ': &nbsp;&nbsp;';
1522
  if ('yes' == get_usermeta($user_ID, 's2_autosub')) {
1523
  echo "checked=\"yes\" ";
1524
  }
1525
+ echo "/> Yes &nbsp;&nbsp;";
1526
+ echo "<input type=\"radio\" name=\"new_category\" value=\"no\" ";
1527
  if ('no' == get_usermeta($user_ID, 's2_autosub')) {
1528
  echo "checked=\"yes\" ";
1529
  }
1621
  function display_category_form($selected = array(), $override = 1) {
1622
  global $wpdb;
1623
 
1624
+ $all_cats = $this->get_all_categories('array');
 
1625
  if (0 == $override) {
1626
  // registered users are not allowed to subscribe to
1627
  // excluded categories
1628
+ foreach (explode(',', $this->subscribe2_options['exclude']) as $cat) {
1629
  $category = get_category($cat);
1630
  $excluded[$cat] = $category->cat_name;
1631
  }
1637
  $j = 0;
1638
  echo "<table width=\"100%\" cellspacing=\"2\" cellpadding=\"5\" class=\"editform\">\r\n";
1639
  echo "<tr valign=\"top\"><td width=\"50%\" align=\"left\">\r\n";
1640
+ foreach ($all_cats as $cat_ID => $cat_name) {
1641
  if ( ($i >= $half) && (0 == $j) ){
1642
  echo "</td><td width=\"50%\" align=\"left\">\r\n";
1643
  $j++;
1644
  }
1645
  if (0 == $j) {
1646
+ echo "<input type=\"checkbox\" name=\"category[]\" value=\"" . $cat_ID . "\"";
1647
+ if (in_array($cat_ID, $selected)) {
1648
  echo " checked=\"checked\" ";
1649
  }
1650
+ echo " /> " . $cat_name . "<br />\r\n";
1651
  } else {
1652
 
1653
+ echo "<input type=\"checkbox\" name=\"category[]\" value=\"" . $cat_ID . "\"";
1654
+ if (in_array($cat_ID, $selected)) {
1655
  echo " checked=\"checked\" ";
1656
  }
1657
+ echo " /> " . $cat_name . "<br />\r\n";
1658
  }
1659
  $i++;
1660
  }
1679
  'unconfirmed' => ' &nbsp;&nbsp;' . __('Unconfirmed', 'subscribe2'),
1680
  'registered' => __('Registered Subscribers', 'subscribe2'));
1681
 
 
 
1682
  // count the number of subscribers
1683
  $count['confirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='1'");
1684
  $count['unconfirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='0'");
1691
  }
1692
  $count['registered'] = $wpdb->get_var("SELECT COUNT(meta_key) FROM $wpdb->usermeta WHERE meta_key='s2_subscribed'");
1693
  $count['all'] = ($count['confirmed'] + $count['unconfirmed'] + $count['registered']);
1694
+ foreach ($this->get_all_categories('array') as $cat_ID => $cat_name) {
1695
+ $count[$cat_name] = $wpdb->get_var("SELECT COUNT(meta_value) FROM $wpdb->usermeta WHERE meta_key='s2_cat$cat_ID'");
1696
  }
1697
 
1698
  // do have actually have some subscribers?
1715
  }
1716
 
1717
  if ($count['registered'] > 0) {
1718
+ foreach ($this->get_all_categories('array') as $cat_ID => $cat_name) {
1719
+ if (in_array($cat_ID, $exclude)) { continue; }
1720
+ if (0 == $count[$cat_name]) { continue; }
1721
+ echo "<option value=\"$cat_ID\"";
1722
+ if ($cat_ID == $selected) { echo " selected=\"selected\" "; }
1723
+ echo "> &nbsp;&nbsp;$cat_name (" . $count[$cat_name] . ") </option>\r\n";
1724
  }
1725
  }
1726
  echo "</select>";
1729
  }
1730
  } // end display_subscriber_dropdown()
1731
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1732
  /* ===== template and filter functions ===== */
1733
  /**
1734
  Display our form; also handles (un)subscribe requests
1740
  global $user_ID;
1741
  get_currentuserinfo();
1742
  if ($user_ID) {
1743
+ $this->s2form = $this->use_profile;
 
 
 
 
1744
  }
1745
  if (isset($_POST['s2_action'])) {
1746
  global $wpdb, $user_email;
1793
 
1794
  /**
1795
  Overrides the default query when handling a (un)subscription confirmation
1796
+ This is basically a trick: if the s2 variable is in the query string, just grab the first
1797
+ static page and override it's contents later with title_filter()
1798
  */
1799
  function query_filter() {
1800
  // don't interfere if we've already done our thing
1802
 
1803
  global $wpdb;
1804
 
1805
+ if ( (defined('S2PAGE')) && (0 != S2PAGE) ) {
1806
  return "page_id=" . S2PAGE;
1807
  } else {
1808
  $id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status='static' LIMIT 1");
1823
  return __('Subscription Confirmation', 'subscribe2');
1824
  } // end title_filter()
1825
 
1826
+ /* ===== wp-cron functions ===== */
1827
  /**
1828
+ Send notifications for any posts that are now visible
1829
  */
1830
+ function subscribe2_hourly() {
1831
+ $future_posts = get_option('s2_future_posts');
1832
+
1833
+ // if we have no future posts, bail out
1834
+ if (!$future_posts) { return; }
1835
+
1836
+ // this will hold the posts that aren't yet visible
1837
+ $not_yet = array();
1838
+
1839
+ foreach ($future_posts as $post) {
1840
+ if ( (current_time('mysql')) > ($post['date']) ) {
1841
+ // this post is now visible, so let's
1842
+ // send a notification
1843
+ $this->publish($post['id'], 1);
1844
+ } else {
1845
+ array_push($not_yet, $post);
1846
+ }
1847
+ }
1848
+ // are the number of elements in $not_yet
1849
+ // the same as in $future posts?
1850
+ if ( (count($not_yet)) != (count($future_posts)) ) {
1851
+ // if not, then some posts have been removed
1852
+ // from $future_posts, and the remainder need
1853
+ // to be recorded back to the database
1854
+ update_option('s2_future_posts', $not_yet);
1855
+ }
1856
+ } // end subscribe2_hourly
1857
 
 
1858
  /**
1859
  Send a daily digest of today's new posts
1860
  */
1861
+ function subscribe2_daily() {
1862
  global $wpdb;
1863
 
1864
+ // collect yesterday's posts
1865
+ $yesterday = date('Y-m-d', (get_option('wp_cron_daily_lastrun')-60));
1866
+ $posts = $wpdb->get_results("SELECT ID, post_title, post_excerpt, post_content FROM $wpdb->posts WHERE post_date > '$yesterday 00:00:00' AND post_date < '$yesterday 23:59:59' AND post_status='publish'");
 
1867
 
 
 
 
 
1868
  // do we have any posts?
1869
+ if (!$posts) { return; }
1870
 
1871
  // if we have posts, let's prepare the digest
1872
  foreach ($posts as $post) {
1875
  $check = false;
1876
  // is the current post assigned to any categories
1877
  // which should not generate a notification email?
1878
+ foreach (explode(',', $this->subscribe2_options['exclude']) as $cat) {
1879
  if (in_array($cat, $post_cats)) {
1880
  $check = true;
1881
  }
1908
  }
1909
 
1910
  $author = get_userdata($post->post_author);
1911
+ $this->authorname = $author->display_name;
1912
+
1913
  // do we send as admin, or post author?
1914
  if ('author' == $this->subscribe2_options['sender']) {
1915
  // get author details
1920
  }
1921
  $this->myemail = $user->user_email;
1922
  $this->myname = $user->display_name;
1923
+
1924
+ $subject = '[' . stripslashes(get_settings('blogname')) . '] ' . __('Daily Digest', 'subscribe2') . ' ' . $yesterday;
 
 
 
1925
  $public = $this->get_public();
1926
  $registered = $this->get_registered();
1927
  $recipients = array_merge((array)$public, (array)$registered);
1928
  $mailtext = $this->substitute(stripslashes($this->subscribe2_options['mailtext']));
1929
  $body = str_replace('POST', $message, $mailtext);
1930
  $this->mail($recipients, $subject, $body);
1931
+ } // end subscribe2_daily
1932
+
1933
+ /**
1934
+ If the to-be-deleted post was future-dated, remove it from the list of future-dated posts
1935
+ */
1936
+ function delete_future($id = 0) {
1937
+ if (0 == $id) { return $id; }
1938
+
1939
+ $future = get_settings('s2_future_posts');
1940
+ // if we have no future-dated posts scheduled, bail out
1941
+ if (!$future) {
1942
+ return $id;
1943
+ }
1944
+ foreach ($future as $post) {
1945
+ // is the deleted post in the list of future posts?
1946
+ if ($id == $post['id']) {
1947
+ // skip it
1948
+ continue;
1949
+ } else {
1950
+ // add this to the new list of future posts
1951
+ $new_future[] = $post;
1952
+ }
1953
+ }
1954
+ if ($new_future != $future) {
1955
+ update_option('s2_future_posts', $new_future);
1956
+ }
1957
+ } // end delete_future()
1958
 
1959
  /* ===== Our constructor ===== */
1960
  /**
1961
  Subscribe2 constructor
1962
  */
1963
+ function s2init() {
1964
+ // load the options
1965
+ $this->subscribe2_options = array();
1966
+ $this->subscribe2_options = get_option('subscribe2_options');
1967
+
1968
+ add_action('init', array(&$this, 'subscribe2'));
1969
+ if('1' == $this->subscribe2_options['show_button']) {
1970
+ add_action('init', array(&$this, 'button_init'));
1971
+ }
1972
+ }
1973
+
1974
  function subscribe2() {
1975
  global $table_prefix;
1976
 
1977
  load_plugin_textdomain('subscribe2', 'wp-content/plugins/subscribe2');
1978
 
 
 
 
 
1979
  // do we need to install anything?
1980
  $this->public = $table_prefix . "subscribe2";
1981
+ if(!mysql_query("DESCRIBE " . $this->public)) { $this->install(); }
1982
  //do we need to upgrade anything?
1983
  if ($this->subscribe2_options['version'] !== S2VERSION) {
1984
+ add_action('shutdown', array(&$this, 'upgrade'));
1985
  }
1986
 
1987
  if (isset($_GET['s2'])) {
1993
 
1994
  add_action('admin_head', array(&$this, 'admin_head'));
1995
  add_action('admin_menu', array(&$this, 'admin_menu'));
1996
+ add_action('publish_post', array(&$this, 'publish'));
1997
+ add_action('edit_post', array(&$this, 'edit'));
1998
+ add_action('private_to_published', array(&$this, 'private2publish'));
1999
  add_action('user_register', array(&$this, 'register'));
2000
  add_action('create_category', array(&$this, 'autosub_new_category'));
2001
  add_filter('the_content', array(&$this, 'filter'));
2002
+ add_action('wp_cron_hourly', array(&$this, 'subscribe2_hourly'));
2003
+ if ( (defined('S2DIGEST')) && (TRUE == S2DIGEST) ) {
2004
+ add_action('wp_cron_daily', array(&$this, 'subscribe2_daily'));
 
 
 
 
 
2005
  }
2006
+ add_action('delete_post', array(&$this, 'delete_future'));
2007
 
2008
  // load our strings
2009
  $this->load_strings();
2010
  } // end subscribe2()
2011
+
2012
+ /* ===== ButtonSnap configuration ===== */
2013
+ /**
2014
+ Register our button in the QuickTags bar
2015
+ */
2016
+ function button_init() {
2017
+ $url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_button.png';
2018
+ buttonsnap_textbutton($url, 'Subscribe2', '<!--subscribe2-->');
2019
+ buttonsnap_register_marker('subscribe2', 's2_marker');
2020
+ }
2021
+
2022
+ /**
2023
+ Style a marker in the Rich Text Editor for our tag
2024
+ By default, the RTE suppresses output of HTML comments, so this places a CSS style on our token in order to make it display
2025
+ */
2026
+ function subscribe2_css() {
2027
+ $marker_url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_marker.png';
2028
+ echo "
2029
+ .s2_marker {
2030
+ display: block;
2031
+ height: 45px;
2032
+ margin-top: 5px;
2033
+ background-image: url({$marker_url});
2034
+ background-repeat: no-repeat;
2035
+ background-position: center;
2036
+ }
2037
+ ";
2038
+ }
2039
 
2040
  /* ===== our variables ===== */
2041
  // cache variables
subscribe2/subscribe2.pot CHANGED
@@ -8,7 +8,7 @@ msgid ""
8
  msgstr ""
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2007-03-19 19:24+0000\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,449 +16,433 @@ msgstr ""
16
  "Content-Type: text/plain; charset=CHARSET\n"
17
  "Content-Transfer-Encoding: 8bit\n"
18
 
19
- #: subscribe2.php:103
20
  msgid "To manage your subscription options please "
21
  msgstr ""
22
 
23
- #: subscribe2.php:105 subscribe2.php:107
24
  msgid "You may manage your subscription options from your "
25
  msgstr ""
26
 
27
- #: subscribe2.php:109
28
  msgid "A confirmation message is on its way!"
29
  msgstr ""
30
 
31
- #: subscribe2.php:111
32
  msgid "That email address is already subscribed."
33
  msgstr ""
34
 
35
- #: subscribe2.php:113
36
  msgid "That email address is not subscribed."
37
  msgstr ""
38
 
39
- #: subscribe2.php:115
40
  msgid "Sorry, but that does not look like an email address to me."
41
  msgstr ""
42
 
43
- #: subscribe2.php:117
44
  msgid ""
45
  "Sorry, email addresses at that domain are currently barred due to spam, "
46
  "please use an alternative email address."
47
  msgstr ""
48
 
49
- #: subscribe2.php:119
50
  msgid "Message sent!"
51
  msgstr ""
52
 
53
- #: subscribe2.php:121
54
  msgid "Your email:"
55
  msgstr ""
56
 
57
- #: subscribe2.php:121 subscribe2.php:1185 subscribe2.php:1277
58
  msgid "Subscribe"
59
  msgstr ""
60
 
61
- #: subscribe2.php:121 subscribe2.php:1278
62
  msgid "Unsubscribe"
63
  msgstr ""
64
 
65
- #: subscribe2.php:121 subscribe2.php:1659
66
  msgid "Send"
67
  msgstr ""
68
 
69
- #: subscribe2.php:124
70
  msgid "No such email address is registered."
71
  msgstr ""
72
 
73
- #: subscribe2.php:126
74
  msgid "You have successfully subscribed!"
75
  msgstr ""
76
 
77
- #: subscribe2.php:128
78
  msgid "You have successfully unsubscribed."
79
  msgstr ""
80
 
81
- #: subscribe2.php:130
82
  msgid "Please confirm your request"
83
  msgstr ""
84
 
85
- #: subscribe2.php:132
86
  msgid "Subscription Reminder"
87
  msgstr ""
88
 
89
- #: subscribe2.php:134
90
  msgid "subscribe"
91
  msgstr ""
92
 
93
- #: subscribe2.php:136
94
  msgid "unsubscribe"
95
  msgstr ""
96
 
97
- #: subscribe2.php:139
98
  msgid "Options saved!"
99
  msgstr ""
100
 
101
- #: subscribe2.php:140
102
  msgid "Options reset!"
103
  msgstr ""
104
 
105
- #: subscribe2.php:148 subscribe2.php:1190
106
  msgid "Subscribers"
107
  msgstr ""
108
 
109
- #: subscribe2.php:149
110
  msgid "Subscribe2 Options"
111
  msgstr ""
112
 
113
- #: subscribe2.php:149
114
  msgid "Subscribe2"
115
  msgstr ""
116
 
117
- #: subscribe2.php:151 subscribe2.php:153
118
  msgid "Subscriptions"
119
  msgstr ""
120
 
121
- #: subscribe2.php:155
122
  msgid "Mail Subscribers"
123
  msgstr ""
124
 
125
- #: subscribe2.php:178
126
- msgid "Once Weekly"
127
- msgstr ""
128
-
129
- #: subscribe2.php:780
130
  msgid "New subscriber"
131
  msgstr ""
132
 
133
- #: subscribe2.php:781
134
  msgid "subscribed to email notifications!"
135
  msgstr ""
136
 
137
- #: subscribe2.php:1098
138
  msgid "Address(es) subscribed!"
139
  msgstr ""
140
 
141
- #: subscribe2.php:1101
142
  msgid "deleted!"
143
  msgstr ""
144
 
145
- #: subscribe2.php:1104
146
  msgid "status changed!"
147
  msgstr ""
148
 
149
- #: subscribe2.php:1107
150
  msgid "Reminder Email(s) Sent!"
151
  msgstr ""
152
 
153
- #: subscribe2.php:1110
154
  msgid "CSV File Created in wp-content"
155
  msgstr ""
156
 
157
- #: subscribe2.php:1113
158
  msgid "Registered Users Subscribed!"
159
  msgstr ""
160
 
161
- #: subscribe2.php:1116
162
  msgid "Registered Users Unsubscribed!"
163
  msgstr ""
164
 
165
- #: subscribe2.php:1178
166
  msgid "Subscribe Addresses"
167
  msgstr ""
168
 
169
- #: subscribe2.php:1183
170
  msgid "Enter addresses, one per line or comma-seperated"
171
  msgstr ""
172
 
173
- #: subscribe2.php:1192
174
  msgid "Filter"
175
  msgstr ""
176
 
177
- #: subscribe2.php:1196
178
  msgid ""
179
  "Registered on the left, confirmed in the middle, unconfirmed on the right"
180
  msgstr ""
181
 
182
- #: subscribe2.php:1205
183
  msgid "Save Emails to CSV File"
184
  msgstr ""
185
 
186
- #: subscribe2.php:1251
187
  msgid "NONE"
188
  msgstr ""
189
 
190
- #: subscribe2.php:1261
191
  msgid "Send Reminder Email"
192
  msgstr ""
193
 
194
- #: subscribe2.php:1268
195
  msgid "Categories"
196
  msgstr ""
197
 
198
- #: subscribe2.php:1269
199
  msgid ""
200
  "Existing Registered Users can be automatically (un)subscribed to categories "
201
  "using this section."
202
  msgstr ""
203
 
204
- #: subscribe2.php:1270
205
  msgid "Consider User Privacy as changes cannot be undone"
206
  msgstr ""
207
 
208
- #: subscribe2.php:1369
209
  msgid "Delivery Options"
210
  msgstr ""
211
 
212
- #: subscribe2.php:1370
213
  msgid "Send Email From"
214
  msgstr ""
215
 
216
- #: subscribe2.php:1375
217
  msgid "Author of the post"
218
  msgstr ""
219
 
220
- #: subscribe2.php:1380
221
  msgid "Blog Admin"
222
  msgstr ""
223
 
224
- #: subscribe2.php:1382
225
- msgid "Send Email as Digest"
226
- msgstr ""
227
-
228
- #: subscribe2.php:1386
229
  msgid "Email Templates"
230
  msgstr ""
231
 
232
- #: subscribe2.php:1389
233
  msgid "New Post email (must not be empty)"
234
  msgstr ""
235
 
236
- #: subscribe2.php:1393
237
  msgid "Message substitions"
238
  msgstr ""
239
 
240
- #: subscribe2.php:1397
241
  msgid "the post's title"
242
  msgstr ""
243
 
244
- #: subscribe2.php:1398
245
  msgid ""
246
  "the excerpt or the entire post<br />(<i>based on the subscriber's "
247
  "preferences</i>)"
248
  msgstr ""
249
 
250
- #: subscribe2.php:1399
251
  msgid "the post's permalink"
252
  msgstr ""
253
 
254
- #: subscribe2.php:1400
255
  msgid "the admin or post author's name"
256
  msgstr ""
257
 
258
- #: subscribe2.php:1401
259
  msgid "the admin or post author's email"
260
  msgstr ""
261
 
262
- #: subscribe2.php:1402
263
  msgid "the post author's name"
264
  msgstr ""
265
 
266
- #: subscribe2.php:1403
267
  msgid ""
268
  "the generated link to confirm a request<br />(<i>only used in the "
269
  "confirmation email template</i>)"
270
  msgstr ""
271
 
272
- #: subscribe2.php:1404
273
  msgid ""
274
  "Action performed by LINK in confirmation email<br />(<i>only used in the "
275
  "confirmation email template</i>)"
276
  msgstr ""
277
 
278
- #: subscribe2.php:1406
279
  msgid "Subscribe / Unsubscribe confirmation email"
280
  msgstr ""
281
 
282
- #: subscribe2.php:1409
283
  msgid "Reminder email to Unconfirmed Subscribers"
284
  msgstr ""
285
 
286
- #: subscribe2.php:1414
287
  msgid "Excluded Categories"
288
  msgstr ""
289
 
290
- #: subscribe2.php:1420
291
  msgid "Allow registered users to subscribe to excluded categories?"
292
  msgstr ""
293
 
294
- #: subscribe2.php:1421
295
  msgid "Writing Options"
296
  msgstr ""
297
 
298
- #: subscribe2.php:1426
299
  msgid "Show the Subscribe2 button on the Write toolbar?"
300
  msgstr ""
301
 
302
- #: subscribe2.php:1429
303
  msgid "Auto Subscribe"
304
  msgstr ""
305
 
306
- #: subscribe2.php:1430
307
  msgid "Automatically subscribe new users registering with your blog."
308
  msgstr ""
309
 
310
- #: subscribe2.php:1435
311
  msgid "Yes"
312
  msgstr ""
313
 
314
- #: subscribe2.php:1440
315
  msgid "No"
316
  msgstr ""
317
 
318
- #: subscribe2.php:1441
319
  msgid "Auto-subscribe users to receive email as"
320
  msgstr ""
321
 
322
- #: subscribe2.php:1446 subscribe2.php:1556
323
  msgid "HTML"
324
  msgstr ""
325
 
326
- #: subscribe2.php:1451
327
  msgid "Plain Text - Full"
328
  msgstr ""
329
 
330
- #: subscribe2.php:1456
331
  msgid "Plain Text - Excerpt"
332
  msgstr ""
333
 
334
- #: subscribe2.php:1459
335
  msgid "Barred Domains"
336
  msgstr ""
337
 
338
- #: subscribe2.php:1460
339
  msgid ""
340
  "Enter domains to bar from public subscriptions: <br /> (Use a new line for "
341
  "each entry and omit the \"@\" symbol, for example email.com)"
342
  msgstr ""
343
 
344
- #: subscribe2.php:1464
345
  msgid "Submit"
346
  msgstr ""
347
 
348
- #: subscribe2.php:1469
349
  msgid "Reset Default"
350
  msgstr ""
351
 
352
- #: subscribe2.php:1470
353
  msgid ""
354
  "Use this to reset all options to their defaults. This <strong><em>will not</"
355
  "em></strong> modify your list of subscribers."
356
  msgstr ""
357
 
358
- #: subscribe2.php:1477
359
  msgid "RESET"
360
  msgstr ""
361
 
362
- #: subscribe2.php:1497
363
  msgid "Subscription preferences updated."
364
  msgstr ""
365
 
366
- #: subscribe2.php:1544
367
  msgid "Notification Settings"
368
  msgstr ""
369
 
370
- #: subscribe2.php:1551
371
  msgid "Receive email as"
372
  msgstr ""
373
 
374
- #: subscribe2.php:1561
375
  msgid "Plain Text"
376
  msgstr ""
377
 
378
- #: subscribe2.php:1563
379
  msgid "Email contains"
380
  msgstr ""
381
 
382
- #: subscribe2.php:1564
383
  msgid "Excerpt Only"
384
  msgstr ""
385
 
386
- #: subscribe2.php:1564
387
  msgid "Full Post"
388
  msgstr ""
389
 
390
- #: subscribe2.php:1572
391
  msgid "Note: HTML format will always deliver the full post."
392
  msgstr ""
393
 
394
- #: subscribe2.php:1573
395
  msgid "Automatically subscribe me to newly created categories"
396
  msgstr ""
397
 
398
- #: subscribe2.php:1585
399
  msgid "Subscribed Categories"
400
  msgstr ""
401
 
402
- #: subscribe2.php:1590
403
  msgid "Receive daily summary of new posts?"
404
  msgstr ""
405
 
406
- #: subscribe2.php:1603
407
  msgid "Update Preferences &raquo;"
408
  msgstr ""
409
 
410
- #: subscribe2.php:1648
411
  msgid "Send email to all subscribers"
412
  msgstr ""
413
 
414
- #: subscribe2.php:1653
415
  msgid "Subject"
416
  msgstr ""
417
 
418
- #: subscribe2.php:1653
419
  msgid "A message from "
420
  msgstr ""
421
 
422
- #: subscribe2.php:1656
423
  msgid "Recipients: "
424
  msgstr ""
425
 
426
- #: subscribe2.php:1716
427
  msgid "Select / Unselect All"
428
  msgstr ""
429
 
430
- #: subscribe2.php:1729
431
  msgid "All Subscribers"
432
  msgstr ""
433
 
434
- #: subscribe2.php:1730
435
  msgid "Public Subscribers"
436
  msgstr ""
437
 
438
- #: subscribe2.php:1731
439
  msgid "Confirmed"
440
  msgstr ""
441
 
442
- #: subscribe2.php:1732
443
  msgid "Unconfirmed"
444
  msgstr ""
445
 
446
- #: subscribe2.php:1733
447
  msgid "Registered Subscribers"
448
  msgstr ""
449
 
450
- #: subscribe2.php:1789
451
- msgid "Per Post Email"
452
- msgstr ""
453
-
454
- #: subscribe2.php:1806
455
- msgid "Next email notification will be sent"
456
- msgstr ""
457
-
458
- #: subscribe2.php:1906
459
  msgid "Subscription Confirmation"
460
  msgstr ""
461
 
462
- #: subscribe2.php:1992
463
- msgid "Digest Email"
464
  msgstr ""
8
  msgstr ""
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
  "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2007-06-24 20:42+0100\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
16
  "Content-Type: text/plain; charset=CHARSET\n"
17
  "Content-Transfer-Encoding: 8bit\n"
18
 
19
+ #: subscribe2.php:66
20
  msgid "To manage your subscription options please "
21
  msgstr ""
22
 
23
+ #: subscribe2.php:68
24
  msgid "You may manage your subscription options from your "
25
  msgstr ""
26
 
27
+ #: subscribe2.php:70
28
  msgid "A confirmation message is on its way!"
29
  msgstr ""
30
 
31
+ #: subscribe2.php:72
32
  msgid "That email address is already subscribed."
33
  msgstr ""
34
 
35
+ #: subscribe2.php:74
36
  msgid "That email address is not subscribed."
37
  msgstr ""
38
 
39
+ #: subscribe2.php:76
40
  msgid "Sorry, but that does not look like an email address to me."
41
  msgstr ""
42
 
43
+ #: subscribe2.php:78
44
  msgid ""
45
  "Sorry, email addresses at that domain are currently barred due to spam, "
46
  "please use an alternative email address."
47
  msgstr ""
48
 
49
+ #: subscribe2.php:80
50
  msgid "Message sent!"
51
  msgstr ""
52
 
53
+ #: subscribe2.php:82
54
  msgid "Your email:"
55
  msgstr ""
56
 
57
+ #: subscribe2.php:82 subscribe2.php:1155 subscribe2.php:1247
58
  msgid "Subscribe"
59
  msgstr ""
60
 
61
+ #: subscribe2.php:82 subscribe2.php:1248
62
  msgid "Unsubscribe"
63
  msgstr ""
64
 
65
+ #: subscribe2.php:82 subscribe2.php:1607
66
  msgid "Send"
67
  msgstr ""
68
 
69
+ #: subscribe2.php:85
70
  msgid "No such email address is registered."
71
  msgstr ""
72
 
73
+ #: subscribe2.php:87
74
  msgid "You have successfully subscribed!"
75
  msgstr ""
76
 
77
+ #: subscribe2.php:89
78
  msgid "You have successfully unsubscribed."
79
  msgstr ""
80
 
81
+ #: subscribe2.php:91
82
  msgid "Please confirm your request"
83
  msgstr ""
84
 
85
+ #: subscribe2.php:93
86
  msgid "Subscription Reminder"
87
  msgstr ""
88
 
89
+ #: subscribe2.php:95
90
  msgid "subscribe"
91
  msgstr ""
92
 
93
+ #: subscribe2.php:97
94
  msgid "unsubscribe"
95
  msgstr ""
96
 
97
+ #: subscribe2.php:100
98
  msgid "Options saved!"
99
  msgstr ""
100
 
101
+ #: subscribe2.php:101
102
  msgid "Options reset!"
103
  msgstr ""
104
 
105
+ #: subscribe2.php:109 subscribe2.php:1160
106
  msgid "Subscribers"
107
  msgstr ""
108
 
109
+ #: subscribe2.php:110
110
  msgid "Subscribe2 Options"
111
  msgstr ""
112
 
113
+ #: subscribe2.php:110
114
  msgid "Subscribe2"
115
  msgstr ""
116
 
117
+ #: subscribe2.php:111
118
  msgid "Subscriptions"
119
  msgstr ""
120
 
121
+ #: subscribe2.php:112
122
  msgid "Mail Subscribers"
123
  msgstr ""
124
 
125
+ #: subscribe2.php:736
 
 
 
 
126
  msgid "New subscriber"
127
  msgstr ""
128
 
129
+ #: subscribe2.php:737
130
  msgid "subscribed to email notifications!"
131
  msgstr ""
132
 
133
+ #: subscribe2.php:1068
134
  msgid "Address(es) subscribed!"
135
  msgstr ""
136
 
137
+ #: subscribe2.php:1071
138
  msgid "deleted!"
139
  msgstr ""
140
 
141
+ #: subscribe2.php:1074
142
  msgid "status changed!"
143
  msgstr ""
144
 
145
+ #: subscribe2.php:1077
146
  msgid "Reminder Email(s) Sent!"
147
  msgstr ""
148
 
149
+ #: subscribe2.php:1080
150
  msgid "CSV File Created in wp-content"
151
  msgstr ""
152
 
153
+ #: subscribe2.php:1083
154
  msgid "Registered Users Subscribed!"
155
  msgstr ""
156
 
157
+ #: subscribe2.php:1086
158
  msgid "Registered Users Unsubscribed!"
159
  msgstr ""
160
 
161
+ #: subscribe2.php:1148
162
  msgid "Subscribe Addresses"
163
  msgstr ""
164
 
165
+ #: subscribe2.php:1153
166
  msgid "Enter addresses, one per line or comma-seperated"
167
  msgstr ""
168
 
169
+ #: subscribe2.php:1162
170
  msgid "Filter"
171
  msgstr ""
172
 
173
+ #: subscribe2.php:1166
174
  msgid ""
175
  "Registered on the left, confirmed in the middle, unconfirmed on the right"
176
  msgstr ""
177
 
178
+ #: subscribe2.php:1175
179
  msgid "Save Emails to CSV File"
180
  msgstr ""
181
 
182
+ #: subscribe2.php:1221
183
  msgid "NONE"
184
  msgstr ""
185
 
186
+ #: subscribe2.php:1231
187
  msgid "Send Reminder Email"
188
  msgstr ""
189
 
190
+ #: subscribe2.php:1238
191
  msgid "Categories"
192
  msgstr ""
193
 
194
+ #: subscribe2.php:1239
195
  msgid ""
196
  "Existing Registered Users can be automatically (un)subscribed to categories "
197
  "using this section."
198
  msgstr ""
199
 
200
+ #: subscribe2.php:1240
201
  msgid "Consider User Privacy as changes cannot be undone"
202
  msgstr ""
203
 
204
+ #: subscribe2.php:1321
205
  msgid "Delivery Options"
206
  msgstr ""
207
 
208
+ #: subscribe2.php:1322
209
  msgid "Send Email From"
210
  msgstr ""
211
 
212
+ #: subscribe2.php:1327
213
  msgid "Author of the post"
214
  msgstr ""
215
 
216
+ #: subscribe2.php:1332
217
  msgid "Blog Admin"
218
  msgstr ""
219
 
220
+ #: subscribe2.php:1333
 
 
 
 
221
  msgid "Email Templates"
222
  msgstr ""
223
 
224
+ #: subscribe2.php:1336
225
  msgid "New Post email (must not be empty)"
226
  msgstr ""
227
 
228
+ #: subscribe2.php:1340
229
  msgid "Message substitions"
230
  msgstr ""
231
 
232
+ #: subscribe2.php:1344
233
  msgid "the post's title"
234
  msgstr ""
235
 
236
+ #: subscribe2.php:1345
237
  msgid ""
238
  "the excerpt or the entire post<br />(<i>based on the subscriber's "
239
  "preferences</i>)"
240
  msgstr ""
241
 
242
+ #: subscribe2.php:1346
243
  msgid "the post's permalink"
244
  msgstr ""
245
 
246
+ #: subscribe2.php:1347
247
  msgid "the admin or post author's name"
248
  msgstr ""
249
 
250
+ #: subscribe2.php:1348
251
  msgid "the admin or post author's email"
252
  msgstr ""
253
 
254
+ #: subscribe2.php:1349
255
  msgid "the post author's name"
256
  msgstr ""
257
 
258
+ #: subscribe2.php:1350
259
  msgid ""
260
  "the generated link to confirm a request<br />(<i>only used in the "
261
  "confirmation email template</i>)"
262
  msgstr ""
263
 
264
+ #: subscribe2.php:1351
265
  msgid ""
266
  "Action performed by LINK in confirmation email<br />(<i>only used in the "
267
  "confirmation email template</i>)"
268
  msgstr ""
269
 
270
+ #: subscribe2.php:1353
271
  msgid "Subscribe / Unsubscribe confirmation email"
272
  msgstr ""
273
 
274
+ #: subscribe2.php:1356
275
  msgid "Reminder email to Unconfirmed Subscribers"
276
  msgstr ""
277
 
278
+ #: subscribe2.php:1361
279
  msgid "Excluded Categories"
280
  msgstr ""
281
 
282
+ #: subscribe2.php:1367
283
  msgid "Allow registered users to subscribe to excluded categories?"
284
  msgstr ""
285
 
286
+ #: subscribe2.php:1368
287
  msgid "Writing Options"
288
  msgstr ""
289
 
290
+ #: subscribe2.php:1373
291
  msgid "Show the Subscribe2 button on the Write toolbar?"
292
  msgstr ""
293
 
294
+ #: subscribe2.php:1376
295
  msgid "Auto Subscribe"
296
  msgstr ""
297
 
298
+ #: subscribe2.php:1377
299
  msgid "Automatically subscribe new users registering with your blog."
300
  msgstr ""
301
 
302
+ #: subscribe2.php:1382
303
  msgid "Yes"
304
  msgstr ""
305
 
306
+ #: subscribe2.php:1387
307
  msgid "No"
308
  msgstr ""
309
 
310
+ #: subscribe2.php:1388
311
  msgid "Auto-subscribe users to receive email as"
312
  msgstr ""
313
 
314
+ #: subscribe2.php:1393 subscribe2.php:1503
315
  msgid "HTML"
316
  msgstr ""
317
 
318
+ #: subscribe2.php:1398
319
  msgid "Plain Text - Full"
320
  msgstr ""
321
 
322
+ #: subscribe2.php:1403
323
  msgid "Plain Text - Excerpt"
324
  msgstr ""
325
 
326
+ #: subscribe2.php:1406
327
  msgid "Barred Domains"
328
  msgstr ""
329
 
330
+ #: subscribe2.php:1407
331
  msgid ""
332
  "Enter domains to bar from public subscriptions: <br /> (Use a new line for "
333
  "each entry and omit the \"@\" symbol, for example email.com)"
334
  msgstr ""
335
 
336
+ #: subscribe2.php:1411
337
  msgid "Submit"
338
  msgstr ""
339
 
340
+ #: subscribe2.php:1416
341
  msgid "Reset Default"
342
  msgstr ""
343
 
344
+ #: subscribe2.php:1417
345
  msgid ""
346
  "Use this to reset all options to their defaults. This <strong><em>will not</"
347
  "em></strong> modify your list of subscribers."
348
  msgstr ""
349
 
350
+ #: subscribe2.php:1424
351
  msgid "RESET"
352
  msgstr ""
353
 
354
+ #: subscribe2.php:1444
355
  msgid "Subscription preferences updated."
356
  msgstr ""
357
 
358
+ #: subscribe2.php:1491
359
  msgid "Notification Settings"
360
  msgstr ""
361
 
362
+ #: subscribe2.php:1498
363
  msgid "Receive email as"
364
  msgstr ""
365
 
366
+ #: subscribe2.php:1508
367
  msgid "Plain Text"
368
  msgstr ""
369
 
370
+ #: subscribe2.php:1510
371
  msgid "Email contains"
372
  msgstr ""
373
 
374
+ #: subscribe2.php:1511
375
  msgid "Excerpt Only"
376
  msgstr ""
377
 
378
+ #: subscribe2.php:1511
379
  msgid "Full Post"
380
  msgstr ""
381
 
382
+ #: subscribe2.php:1519
383
  msgid "Note: HTML format will always deliver the full post."
384
  msgstr ""
385
 
386
+ #: subscribe2.php:1520
387
  msgid "Automatically subscribe me to newly created categories"
388
  msgstr ""
389
 
390
+ #: subscribe2.php:1533
391
  msgid "Subscribed Categories"
392
  msgstr ""
393
 
394
+ #: subscribe2.php:1538
395
  msgid "Receive daily summary of new posts?"
396
  msgstr ""
397
 
398
+ #: subscribe2.php:1551
399
  msgid "Update Preferences &raquo;"
400
  msgstr ""
401
 
402
+ #: subscribe2.php:1596
403
  msgid "Send email to all subscribers"
404
  msgstr ""
405
 
406
+ #: subscribe2.php:1601
407
  msgid "Subject"
408
  msgstr ""
409
 
410
+ #: subscribe2.php:1601
411
  msgid "A message from "
412
  msgstr ""
413
 
414
+ #: subscribe2.php:1604
415
  msgid "Recipients: "
416
  msgstr ""
417
 
418
+ #: subscribe2.php:1663
419
  msgid "Select / Unselect All"
420
  msgstr ""
421
 
422
+ #: subscribe2.php:1676
423
  msgid "All Subscribers"
424
  msgstr ""
425
 
426
+ #: subscribe2.php:1677
427
  msgid "Public Subscribers"
428
  msgstr ""
429
 
430
+ #: subscribe2.php:1678
431
  msgid "Confirmed"
432
  msgstr ""
433
 
434
+ #: subscribe2.php:1679
435
  msgid "Unconfirmed"
436
  msgstr ""
437
 
438
+ #: subscribe2.php:1680
439
  msgid "Registered Subscribers"
440
  msgstr ""
441
 
442
+ #: subscribe2.php:1823
 
 
 
 
 
 
 
 
443
  msgid "Subscription Confirmation"
444
  msgstr ""
445
 
446
+ #: subscribe2.php:1924
447
+ msgid "Daily Digest"
448
  msgstr ""