Subscribe2 - Version 2.8

Version Description

Download this release

Release Info

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

Code changes from version 3.0 to 2.8

ReadMe.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: MattyRob, Skippy, Ravan
3
Donate link: http://subscribe2.wordpress.com/donate/
4
Tags: posts, subscription, email
5
Requires at least: 2.0.x
6
- Tested up to: 2.2
7
8
Sends a list of subscribers an email notification when new posts are published to your blog
9
@@ -77,38 +77,6 @@ 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
87
- * Fixed oversight in upgrade() function
88
-
89
- Version 2.13 by Matthew Robinson
90
-
91
- * Added WordPress nonce functionality to improve admin security
92
-
93
- Version 2.12 by Matthew Robinson
94
-
95
- * Fix for missing Quicktags (probably since version 2.2.10)
96
- * Fix for occasional email issue where excerpts are incomplete
97
-
98
- Version 2.11 by Matthew Robinson
99
- * Fixed bug that would cause all subscribers to get digest emails
100
- * Added Select All check box to category listing
101
-
102
- Version 2.10 by Matthew Robinson
103
- * Improved sign up process by double checking email address
104
- * Fix for submenu issues encountered in WP 2.0.6
105
-
106
- Version 2.9 by Matthew Robinson
107
-
108
- * Fixed get_userdata call issue
109
- * Added CSV export
110
- * Reworked options storage routines
111
-
112
Version 2.8 by Matthew Robinson
113
114
* Fixed missing line return in email headers that was causing failed emails
3
Donate link: http://subscribe2.wordpress.com/donate/
4
Tags: posts, subscription, email
5
Requires at least: 2.0.x
6
+ Tested up to: 2.1
7
8
Sends a list of subscribers an email notification when new posts are published to your blog
9
77
78
== Version History ==
79
80
Version 2.8 by Matthew Robinson
81
82
* Fixed missing line return in email headers that was causing failed emails
subscribe2/include.php DELETED
@@ -1,49 +0,0 @@
1
- <?php
2
- // include.php - Handles options and common functions for subscribe2
3
- // DO NOT EDIT THIS FILE AS IT IS SET BY THE OPTIONS PAGE
4
-
5
- if (!isset($this->subscribe2_options['autosub'])) {
6
- $this->subscribe2_options['autosub'] = "no";
7
- } // option to autosubscribe registered users to new categories
8
-
9
- if (!isset($this->subscribe2_options['autoformat'])) {
10
- $this->subscribe2_options['autoformat'] = "text";
11
- } // option for default auto-subscription email format
12
-
13
- if (!isset($this->subscribe2_options['exclude'])) {
14
- $this->subscribe2_options['exclude'] = "";
15
- } // option for excluded categories
16
-
17
- if (!isset($this->subscribe2_options['sender'])) {
18
- $this->subscribe2_options['sender'] = "author";
19
- } // option for email notification sender
20
-
21
- // reg_override : allow registered users to subscribed to excluded cats
22
- if (!isset($this->subscribe2_options['reg_override'])) {
23
- $this->subscribe2_options['reg_override'] = "1";
24
- } // option for excluded categories to be overriden for registered users
25
-
26
- if (!isset($this->subscribe2_options['show_button'])) {
27
- $this->subscribe2_options['show_button'] = "1";
28
- } // option to show Subscribe2 button on Write page
29
-
30
- 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'])) {
43
- $this->subscribe2_options['confirm_email'] = "BLOGNAME has received a request to ACTION for this email address. To complete your request please click on the link below:\n\nLINK\n\nIf you did not request this, please feel free to disregard this notice!\n\nThank you,\nMYNAME.";
44
- } // Default confirmation email text
45
-
46
- if (!isset($this->subscribe2_options['remind_email'])) {
47
- $this->subscribe2_options['remind_email'] = "This email address was subscribed for notifications at BLOGNAME (BLOGLINK) but the subscription remains incomplete.\n\nIf you wish to complete your subscription please click on the link below:\n\nLINK\n\nIf you do not wish to complete your subscription please ignore this email and your address will be removed from our database.\n\nRegards,\nMYNAME";
48
- } // Default reminder email text
49
- ?>
subscribe2/subscribe2.php CHANGED
@@ -3,13 +3,13 @@
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
*/
10
11
/*
12
- Copyright (C) 2006-7 Matthew Robinson
13
Based on the Original Subscribe2 plugin by
14
Copyright (C) 2005 Scott Merrill (skippy@skippy.net)
15
@@ -29,66 +29,25 @@ 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 {
@@ -102,9 +61,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
@@ -131,9 +88,9 @@ class subscribe2 {
131
132
$this->remind_subject = "[" . get_settings('blogname') . "] " . __('Subscription Reminder', 'subscribe2');
133
134
- $this->subscribe = __('subscribe', 'subscribe2'); //ACTION replacement in subscribing confirmation email
135
136
- $this->unsubscribe = __('unsubscribe', 'subscribe2'); //ACTION replacement in unsubscribing in confirmation email
137
138
// menu strings
139
$this->options_saved = __('Options saved!', 'subscribe2');
@@ -145,38 +102,39 @@ class subscribe2 {
145
Hook the menu
146
*/
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
159
/**
160
- Insert Javascript into admin_header
161
*/
162
- function admin_head() {
163
- echo "<script type=\"text/javascript\">\r\n";
164
- echo "<!--\r\n";
165
- echo "function setAll(theElement) {\r\n";
166
- echo " var theForm = theElement.form, z = 0;\r\n";
167
- echo " for(z=0; z<theForm.length;z++){\r\n";
168
- echo " if(theForm[z].type == 'checkbox' && theForm[z].name == 'category[]'){\r\n";
169
- echo " theForm[z].checked = theElement.checked;\r\n";
170
- echo " }\r\n";
171
- echo " }\r\n";
172
- echo "}\r\n";
173
- echo "-->\r\n";
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 ===== */
@@ -185,7 +143,7 @@ class subscribe2 {
185
*/
186
function install() {
187
// include upgrade-functions for maybe_create_table;
188
- if (!function_exists('maybe_create_table')) {
189
require_once(ABSPATH . '/wp-admin/upgrade-functions.php');
190
}
191
$date = date('Y-m-d');
@@ -208,46 +166,41 @@ class subscribe2 {
208
global $wpdb;
209
210
// include upgrade-functions for maybe_create_table;
211
- if (!function_exists('maybe_create_table')) {
212
require_once(ABSPATH . '/wp-admin/upgrade-functions.php');
213
}
214
$date = date('Y-m-d');
215
maybe_add_column($this->public, 'date', "ALTER TABLE `$this->public` ADD `date` DATE DEFAULT '$date' NOT NULL AFTER `active`;");
216
217
// let's take the time to check process registered users
218
- // existing public subscribers are subscribed to all categories
219
$users = $wpdb->get_col("SELECT ID FROM $wpdb->users");
220
- if (!empty($users)) {
221
foreach ($users as $user) {
222
$this->register($user);
223
}
224
}
225
- // update the options table to serialized format
226
- $old_options = $wpdb->get_col("SELECT option_name from $wpdb->options where option_name LIKE 's2%' AND option_name != 's2_future_posts'");
227
-
228
- if (!empty($old_options)) {
229
- foreach ($old_options as $option) {
230
- $value = get_option($option);
231
- $option_array = substr($option, 3);
232
- $this->subscribe2_options[$option_array] = $value;
233
- delete_option($option);
234
- }
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
242
/**
243
Reset our options
244
*/
245
function reset() {
246
- delete_option('subscribe2_options');
247
- unset($this->subscribe2_options);
248
- require(ABSPATH . "/wp-content/plugins/subscribe2/include.php");
249
- update_option('subscribe2_options', $this->subscribe2_options);
250
- } // end reset()
251
252
/* ===== mail handling ===== */
253
/**
@@ -271,8 +224,9 @@ class subscribe2 {
271
Delivers email to recipients in HTML or plaintext
272
*/
273
function mail ($recipients = array(), $subject = '', $message = '', $type='text') {
274
- if ( (empty($recipients)) || ('' == $message) ) { return; }
275
-
276
// Set sender details
277
if ('' == $this->myname) {
278
$admin = get_userdata(1);
@@ -299,8 +253,8 @@ class subscribe2 {
299
300
// BCC all recipients
301
$bcc = '';
302
- if ( (defined('BCCLIMIT') && (BCCLIMIT > 0) ) &&
303
- (count($recipients) > BCCLIMIT) ) {
304
// we're on Dreamhost, and have more than 30 susbcribers
305
$count = 1;
306
$batch = array();
@@ -310,7 +264,7 @@ class subscribe2 {
310
next($recipients);
311
$recipient = trim($recipient);
312
// sanity check -- make sure we have a valid email
313
- if (!is_email($recipient)) { continue; }
314
// and NOT the sender's email, since they'll
315
// get a copy anyway
316
if ( (! empty($recipient)) && ($this->myemail != $recipient) ) {
@@ -340,10 +294,10 @@ class subscribe2 {
340
foreach ($recipients as $recipient) {
341
$recipient = trim($recipient);
342
// sanity check -- make sure we have a valid email
343
- if (!is_email($recipient)) { continue; }
344
// and NOT the sender's email, since they'll
345
// get a copy anyway
346
- if ( (!empty($recipient)) && ($this->myemail != $recipient) ) {
347
('' == $bcc) ? $bcc = "Bcc: $recipient" : $bcc .= ",\r\n $recipient";
348
// Headers constructed as per definition at http://www.ietf.org/rfc/rfc2822.txt
349
}
@@ -351,7 +305,7 @@ class subscribe2 {
351
$headers .= "$bcc\r\n";
352
}
353
// actually send mail
354
- if ( (defined('BCCLIMIT')) && (BCCLIMIT > 0) && (isset($batch)) ) {
355
foreach ($batch as $bcc) {
356
$newheaders = $headers . "$bcc\r\n";
357
@wp_mail($this->myemail, $subject, $mailtext, $newheaders);
@@ -364,18 +318,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);
@@ -392,23 +349,36 @@ class subscribe2 {
392
if ($check) {
393
// hang on -- can registered users subscribe to
394
// excluded categories?
395
- if ('0' == $this->subscribe2_options['reg_override']) {
396
// nope? okay, let's leave
397
return $id;
398
}
399
}
400
401
global $wpdb;
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
}
408
409
// lets collect our public subscribers
410
// and all our registered subscribers for these categories
411
- if (!$check) {
412
// if this post is assigned to an excluded
413
// category, then this test will prevent
414
// the public from receiving notification
@@ -417,7 +387,7 @@ class subscribe2 {
417
$registered = $this->get_registered("cats=$post_cats_string");
418
419
// do we have subscribers?
420
- if ( (empty($public)) && (empty($registered)) ) {
421
// if not, no sense doing anything else
422
return $id;
423
}
@@ -430,7 +400,7 @@ class subscribe2 {
430
$this->authorname = $author->display_name;
431
432
// do we send as admin, or post author?
433
- if ('author' == $this->subscribe2_options['sender']) {
434
// get author details
435
$user =& $author;
436
} else {
@@ -442,7 +412,7 @@ class subscribe2 {
442
// Get email subject
443
$subject = $this->substitute(stripslashes($this->s2_subject));
444
// Get the message template
445
- $mailtext = $this->substitute(stripslashes($this->subscribe2_options['mailtext']));
446
447
$plaintext = $post->post_content;
448
$content = apply_filters('the_content', $post->post_content);
@@ -459,7 +429,7 @@ class subscribe2 {
459
// no <!--more-->, so grab the first 55 words
460
$excerpt = strip_tags($plaintext);
461
$excerpt_length = 55;
462
- $words = explode(' ', $excerpt, $excerpt_length + 1);
463
if (count($words) > $excerpt_length) {
464
array_pop($words);
465
array_push($words, '[...]');
@@ -517,11 +487,11 @@ class subscribe2 {
517
*/
518
function send_confirm($what = '', $is_remind = FALSE) {
519
if ($this->filtered == 1) { return; }
520
- if ( (!$this->email) || (!$what) ) {
521
return false;
522
}
523
$id = $this->get_id($this->email);
524
- if (!$id) {
525
return false;
526
}
527
@@ -541,12 +511,12 @@ class subscribe2 {
541
542
$admin = get_userdata(1);
543
$this->myname = $admin->display_name;
544
-
545
if ($is_remind == TRUE) {
546
- $body = $this->substitute(stripslashes($this->subscribe2_options['remind_email']));
547
$subject = stripslashes($this->remind_subject);
548
} else {
549
- $body = $this->substitute(stripslashes($this->subscribe2_options['confirm_email']));
550
if ('add' == $what) {
551
$body = str_replace("ACTION", $this->subscribe, $body);
552
} elseif ('del' == $what) {
@@ -576,7 +546,7 @@ class subscribe2 {
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()
@@ -605,7 +575,7 @@ class subscribe2 {
605
function get_email ($id = 0) {
606
global $wpdb;
607
608
- if (!$id) {
609
return false;
610
}
611
return $wpdb->get_var("SELECT email FROM $this->public WHERE id=$id");
@@ -617,7 +587,7 @@ class subscribe2 {
617
function get_id ($email = '') {
618
global $wpdb;
619
620
- if (!$email) {
621
return false;
622
}
623
return $wpdb->get_var("SELECT id FROM $this->public WHERE email='$email'");
@@ -662,7 +632,7 @@ class subscribe2 {
662
}
663
}
664
665
- if (!is_email($email)) { return false; }
666
667
if (false !== $this->is_public($email)) {
668
$wpdb->get_results("UPDATE $this->public SET date=NOW() WHERE email='$email'");
@@ -685,7 +655,7 @@ class subscribe2 {
685
}
686
}
687
688
- if (!is_email($email)) { return false; }
689
$wpdb->get_results("DELETE FROM $this->public WHERE email='$email'");
690
} // end delete()
691
@@ -718,29 +688,18 @@ class subscribe2 {
718
$this->myname = $admin->display_name;
719
720
$recipients = explode(",", $emails);
721
- if (!is_array($recipients)) { $recipients = array(); }
722
foreach ($recipients as $recipient) {
723
$this->email = $recipient;
724
$this->send_confirm('add', TRUE);
725
}
726
} //end remind()
727
728
- /**
729
- Export email list to CSV download
730
- */
731
- function exportcsv($emails = '') {
732
- if ('' == $emails) {return false; }
733
-
734
- $f = fopen(ABSPATH . '/wp-content/email.csv', 'w');
735
- fwrite($f, $emails);
736
- fclose($f);
737
- } //end exportcsv
738
-
739
/**
740
Check email is not from a barred domain
741
*/
742
function is_barred($email='') {
743
- $barred_option = $this->subscribe2_options['barred'];
744
list($user, $domain) = split('@', $email);
745
$bar_check = stristr($barred_option, $domain);
746
@@ -766,7 +725,7 @@ class subscribe2 {
766
$id = intval(substr($code, 1));
767
if ($id) {
768
$this->email = $this->get_email($id);
769
- if ( (!$this->email) || ($hash !== md5($this->email)) ) {
770
return $this->no_such_email;
771
}
772
} else {
@@ -857,11 +816,11 @@ class subscribe2 {
857
$subscribers = array();
858
859
parse_str($args, $r);
860
- if (!isset($r['cats']))
861
$r['cats'] = '';
862
- if (!isset($r['format']))
863
$r['format'] = 'all';
864
- if (!isset($r['amount']))
865
$r['amount'] = 'all';
866
867
$JOIN = ''; $AND = '';
@@ -911,7 +870,7 @@ class subscribe2 {
911
if ('' == $email) { return false; }
912
913
global $wpdb;
914
- if (!empty($this->signup_dates)) {
915
return $this->signup_dates[$email];
916
} else {
917
$results = $wpdb->get_results("SELECT email, date FROM $this->public", ARRAY_N);
@@ -931,18 +890,14 @@ 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?
940
if (false !== $this->is_public($user->user_email)) {
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');
@@ -951,23 +906,26 @@ class subscribe2 {
951
$check = get_usermeta($user_id, 's2_subscribed');
952
// ensure existing subscriptions are not overwritten on upgrade
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']) {
961
update_usermeta($user_id, 's2_format', 'html');
962
update_usermeta($user_id, 's2_excerpt', 'post');
963
- } elseif ('fulltext' == $this->subscribe2_options['autoformat']) {
964
update_usermeta($user_id, 's2_format', 'text');
965
update_usermeta($user_id, 's2_excerpt', 'post');
966
} else {
967
update_usermeta($user_id, 's2_format', 'text');
968
update_usermeta($user_id, 's2_excerpt', 'excerpt');
969
}
970
- }
971
}
972
}
973
return $user_id;
@@ -977,7 +935,7 @@ class subscribe2 {
977
Subscribe all registered users to category selected on Admin Manage Page
978
*/
979
function subscribe_registered_users ($emails = '', $cats = '') {
980
- if ( ('' == $emails) || ('' == $cats) ) { return false; }
981
global $wpdb;
982
983
$useremails = explode(",", $emails);
@@ -986,17 +944,17 @@ class subscribe2 {
986
$sql = "SELECT ID FROM $wpdb->users WHERE user_email IN ('$useremails')";
987
$user_IDs = $wpdb->get_col($sql);
988
$cats = $_POST['category'];
989
- if (!is_array($cats)) {
990
$cats = array($_POST['category']);
991
}
992
993
foreach ($user_IDs as $user_ID) {
994
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
995
- if (!is_array($old_cats)) {
996
$old_cats = array($old_cats);
997
}
998
$new = array_diff($cats, $old_cats);
999
- if (!empty($new)) {
1000
// add subscription to these cat IDs
1001
foreach ($new as $id) {
1002
update_usermeta($user_ID, 's2_cat' . $id, "$id");
@@ -1011,7 +969,7 @@ class subscribe2 {
1011
Unsubscribe all registered users to category selected on Admin Manage Page
1012
*/
1013
function unsubscribe_registered_users ($emails = '', $cats = '') {
1014
- if ( ('' == $emails) || ('' == $cats) ) { return false; }
1015
global $wpdb;
1016
1017
$useremails = explode(",", $emails);
@@ -1020,17 +978,17 @@ class subscribe2 {
1020
$sql = "SELECT ID FROM $wpdb->users WHERE user_email IN ('$useremails')";
1021
$user_IDs = $wpdb->get_col($sql);
1022
$cats = $_POST['category'];
1023
- if (!is_array($cats)) {
1024
$cats = array($_POST['category']);
1025
}
1026
1027
foreach ($user_IDs as $user_ID) {
1028
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
1029
- if (!is_array($old_cats)) {
1030
$old_cats = array($old_cats);
1031
}
1032
$remain = array_diff($old_cats, $cats);
1033
- if (!empty($remain)) {
1034
// remove subscription to these cat IDs and update s2_subscribed
1035
foreach ($cats as $id) {
1036
delete_usermeta($user_ID, 's2_cat' . $id, "$id");
@@ -1055,11 +1013,10 @@ class subscribe2 {
1055
1056
$sql = "SELECT DISTINCT user_id FROM $wpdb->usermeta WHERE $wpdb->usermeta.meta_key='s2_autosub' AND $wpdb->usermeta.meta_value='yes'";
1057
$user_IDs = $wpdb->get_col($sql);
1058
- if ('' == $user_IDs) { return; }
1059
1060
foreach ($user_IDs as $user_ID) {
1061
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
1062
- if (!is_array($old_cats)) {
1063
$old_cats = array($old_cats);
1064
}
1065
// add subscription to these cat IDs
@@ -1074,20 +1031,19 @@ class subscribe2 {
1074
Our management page
1075
*/
1076
function manage_menu() {
1077
- global $wpdb, $s2nonce;
1078
1079
//Get Registered Subscribers for bulk management
1080
$registered = $this->get_registered();
1081
- if (!empty($registered)) {
1082
$emails = implode(",", $registered);
1083
}
1084
1085
$what = '';
1086
- $reminderform = false;
1087
1088
// was anything POSTed ?
1089
if (isset($_POST['s2_admin'])) {
1090
- check_admin_referer('subscribe2-manage_subscribers' . $s2nonce);
1091
if ('subscribe' == $_POST['s2_admin']) {
1092
foreach (preg_split ("/[\s,]+/", $_POST['addresses']) as $email) {
1093
if (is_email($email)) {
@@ -1105,9 +1061,6 @@ class subscribe2 {
1105
} elseif ('remind' == $_POST['s2_admin']) {
1106
$this->remind($_POST['reminderemails']);
1107
echo "<div id=\"message\" class=\"updated fade\"><strong><p>" . __('Reminder Email(s) Sent!','subscribe2') . "</p></strong></div>";
1108
- } elseif ('exportcsv' == $_POST['s2_admin']) {
1109
- $this->exportcsv($_POST['exportcsv']);
1110
- echo "<div id=\"message\" class=\"updated fade\"><strong><p>" . __('CSV File Created in wp-content','subscribe2') . "</p></strong></div>";
1111
} elseif ( ('register' == $_POST['s2_admin']) && ('Subscribe' == $_POST['submit']) ) {
1112
$this->subscribe_registered_users($_POST['emails'], $_POST['category']);
1113
echo "<div id=\"message\" class=\"updated fade\"><strong><p>" . __('Registered Users Subscribed!','subscribe2') . "</p></strong></div>";
@@ -1138,7 +1091,7 @@ class subscribe2 {
1138
$subscribers = $unconfirmed;
1139
if (!empty($unconfirmed)) {
1140
$reminderemails = implode(",", $unconfirmed);
1141
- $reminderform = true;
1142
}
1143
} elseif (is_numeric($_POST['what'])) {
1144
$what = intval($_POST['what']);
@@ -1155,7 +1108,7 @@ class subscribe2 {
1155
$confirmed = $this->get_public();
1156
$subscribers = $confirmed;
1157
$what = 'confirmed';
1158
- if (empty($subscribers)) {
1159
$unconfirmed = $this->get_public(0);
1160
$subscribers = $unconfirmed;
1161
$what = 'unconfirmed';
@@ -1165,7 +1118,7 @@ class subscribe2 {
1165
}
1166
}
1167
}
1168
- if (!empty($subscribers)) {
1169
natcasesort($subscribers);
1170
}
1171
// safety check for our arrays
@@ -1177,9 +1130,6 @@ class subscribe2 {
1177
echo "<div class=\"wrap\">";
1178
echo "<h2>" . __('Subscribe Addresses', 'subscribe2') . "</h2>\r\n";
1179
echo "<form method=\"post\" action=\"\">\r\n";
1180
- if (function_exists('wp_nonce_field')) {
1181
- wp_nonce_field('subscribe2-manage_subscribers' . $s2nonce);
1182
- }
1183
echo "<span style=\"align:left\">" . __('Enter addresses, one per line or comma-seperated', 'subscribe2') . "</span><br />\r\n";
1184
echo "<textarea rows=\"2\" cols=\"80\" name=\"addresses\"></textarea>";
1185
echo "<span class=\"submit\"><input type=\"submit\" name=\"submit\" value=\"" . __('Subscribe', 'subscribe2') . "\"/>";
@@ -1192,22 +1142,11 @@ class subscribe2 {
1192
$this->display_subscriber_dropdown($what, __('Filter', 'subscribe2'));
1193
// show the selected subscribers
1194
$alternate = 'alternate';
1195
- if (!empty($subscribers)) {
1196
echo "<p align=\"center\"><b>" . __('Registered on the left, confirmed in the middle, unconfirmed on the right', 'subscribe2') . "</b></p>";
1197
- if (is_writable(ABSPATH . '/wp-content')) {
1198
- $exportcsv = implode(",", $subscribers);
1199
- echo "<span class=\"submit\"><form method=\"post\" action=\"\">\r\n";
1200
- if (function_exists('wp_nonce_field')) {
1201
- wp_nonce_field('subscribe2-manage_subscribers' . $s2nonce);
1202
- }
1203
- echo "<input type=\"hidden\" name=\"exportcsv\" value=\"$exportcsv\" />\r\n";
1204
- echo "<input type=\"hidden\" name=\"s2_admin\" value=\"exportcsv\" />\r\n";
1205
- echo "<input type=\"submit\" name=\"submit\" value=\"" . __('Save Emails to CSV File','subscribe2') . "\" />\r\n";
1206
- echo "</form></span>\r\n";
1207
- }
1208
}
1209
echo "<table cellpadding=\"2\" cellspacing=\"2\">";
1210
- if (!empty($subscribers)) {
1211
foreach ($subscribers as $subscriber) {
1212
echo "<tr class=\"$alternate\">";
1213
echo "<td width=\"75%\"";
@@ -1219,30 +1158,12 @@ class subscribe2 {
1219
echo "align=\"left\" colspan=\"3\">";
1220
}
1221
echo "<a href=\"mailto:$subscriber\">$subscriber</a>\r\n";
1222
- if (in_array($subscriber, $unconfirmed) || in_array($subscriber, $confirmed) ) {
1223
- echo "(" . $this->signup_date($subscriber) . ")</td>\r\n";
1224
- echo "<td width=\"5%\" align=\"center\">\r\n";
1225
- echo "<form method=\"post\" action=\"\">";
1226
- if (function_exists('wp_nonce_field')) {
1227
- wp_nonce_field('subscribe2-manage_subscribers' . $s2nonce);
1228
- }
1229
- echo "<input type=\"hidden\" name=\"email\" value=\"$subscriber\" />\r\n";
1230
- echo "<input type=\"hidden\" name=\"s2_admin\" value=\"toggle\" />\r\n";
1231
- echo "<input type=\"hidden\" name=\"what\" value=\"$what\" />\r\n";
1232
- echo "<input type=\"submit\" name=\"submit\" value=\"";
1233
(in_array($subscriber, $unconfirmed)) ? $foo = '&lt;-' : $foo= '-&gt;';
1234
- echo "$foo\" /></form></td>\r\n";
1235
- echo "<td width=\"2%\" align=\"center\">\r\n";
1236
- echo "<form method=\"post\" action=\"\">\r\n";
1237
- if (function_exists('wp_nonce_field')) {
1238
- wp_nonce_field('subscribe2-manage_subscribers' . $s2nonce);
1239
- }
1240
- echo "<span class=\"delete\">\r\n";
1241
- echo "<input type=\"hidden\" name=\"email\" value=\"$subscriber\" />\r\n";
1242
- echo "<input type=\"hidden\" name=\"s2_admin\" value=\"delete\" />\r\n";
1243
- echo "<input type=\"hidden\" name=\"what\" value=\"$what\" />\r\n";
1244
- echo "<input type=\"submit\" name=\"submit\" value=\"X\" />\r\n";
1245
- echo "</span></form>";
1246
}
1247
echo "</td></tr>\r\n";
1248
('alternate' == $alternate) ? $alternate = '' : $alternate = 'alternate';
@@ -1251,16 +1172,7 @@ class subscribe2 {
1251
echo "<tr><td align=\"center\"><b>" . __('NONE', 'subscribe2') . "</b></td></tr>\r\n";
1252
}
1253
echo "</table>";
1254
- if ($reminderform) {
1255
- echo "<span class=\"submit\"><form method=\"post\" action=\"\">\r\n";
1256
- if (function_exists('wp_nonce_field')) {
1257
- wp_nonce_field('subscribe2-manage_subscribers' . $s2nonce);
1258
- }
1259
- echo "<input type=\"hidden\" name=\"reminderemails\" value=\"$reminderemails\" />\r\n";
1260
- echo "<input type=\"hidden\" name=\"s2_admin\" value=\"remind\" />\r\n";
1261
- echo "<input type=\"submit\" name=\"submit\" value=\"" . __('Send Reminder Email','subscribe2') . "\" />\r\n";
1262
- echo "</form></span>";
1263
- }
1264
echo "</div>\r\n";
1265
1266
//show bulk managment form
@@ -1268,12 +1180,8 @@ class subscribe2 {
1268
echo "<h2 >" . __('Categories', 'subscribe2') . "</h2>\r\n";
1269
echo __('Existing Registered Users can be automatically (un)subscribed to categories using this section.', 'subscribe2') . "<br />\r\n";
1270
echo "<strong><em style=\"color: red\">" . __('Consider User Privacy as changes cannot be undone', 'subscribe2') . "</em></strong><br />\r\n";
1271
- echo "<span class=\"submit\"><form method=\"post\" action=\"\">\r\n";
1272
- if (function_exists('wp_nonce_field')) {
1273
- wp_nonce_field('subscribe2-manage_subscribers' . $s2nonce);
1274
- }
1275
- echo "<input type=\"hidden\" name=\"emails\" value=\"$emails\" /><input type=\"hidden\" name=\"s2_admin\" value=\"register\" />";
1276
- $this->display_category_form();
1277
echo "<input type=\"submit\" id=\"deletepost\" name=\"submit\" value=\"" . __('Subscribe','subscribe2') . "\" />";
1278
echo "<input type=\"submit\" id=\"deletepost\" name=\"submit\" value=\"" . __('Unsubscribe','subscribe2') . "\" /></form></span>";
1279
@@ -1289,106 +1197,85 @@ class subscribe2 {
1289
Our options page
1290
*/
1291
function options_menu() {
1292
- global $s2nonce;
1293
-
1294
// was anything POSTed?
1295
if (isset($_POST['s2_admin'])) {
1296
- check_admin_referer('subscribe2-options_subscribers' . $s2nonce);
1297
if ('RESET' == $_POST['s2_admin']) {
1298
$this->reset();
1299
echo "<div id=\"message\" class=\"updated fade\"><strong><p>$this->options_reset</p></strong></div>";
1300
} elseif ('options' == $_POST['s2_admin']) {
1301
// excluded categories
1302
- if (!empty($_POST['category'])) {
1303
$exclude_cats = implode(',', $_POST['category']);
1304
} else {
1305
$exclude_cats = '';
1306
}
1307
- $this->subscribe2_options['exclude'] = $exclude_cats;
1308
// allow override?
1309
- (isset($_POST['reg_override'])) ? $override = '1' : $override = '0';
1310
- $this->subscribe2_options['reg_override'] = $override;
1311
1312
// show button?
1313
- ($_POST['show_button'] == '1') ? $showbutton = '1' : $showbutton = '0';
1314
- $this->subscribe2_options['show_button'] = $showbutton;
1315
1316
// send as author or admin?
1317
$sender = 'author';
1318
- if ('admin' == $_POST['sender']) {
1319
$sender = 'admin';
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;
1344
- $confirm_email = $_POST['confirm_email'];
1345
- $this->subscribe2_options['confirm_email'] = $confirm_email;
1346
- $remind_email = $_POST['remind_email'];
1347
- $this->subscribe2_options['remind_email'] = $remind_email;
1348
1349
//automatic subscription
1350
- $autosub_option = $_POST['autosub'];
1351
- $this->subscribe2_options['autosub']= $autosub_option;
1352
- $autosub_format_option = $_POST['autoformat'];
1353
- $this->subscribe2_options['autoformat']= $autosub_format_option;
1354
1355
//barred domains
1356
- $barred_option = $_POST['barred'];
1357
- $this->subscribe2_options['barred'] = $barred_option;
1358
echo "<div id=\"message\" class=\"updated fade\"><strong><p>$this->options_saved</p></strong></div>";
1359
- update_option('subscribe2_options', $this->subscribe2_options);
1360
}
1361
}
1362
// show our form
1363
echo "<div class=\"wrap\">";
1364
- echo "<form method=\"post\" action=\"\">\r\n";
1365
- if (function_exists('wp_nonce_field')) {
1366
- wp_nonce_field('subscribe2-options_subscribers' . $s2nonce);
1367
- }
1368
- echo "<input type=\"hidden\" name=\"s2_admin\" value=\"options\" />\r\n";
1369
- echo "<h2>" . __('Delivery Options', 'subscribe2') . ":</h2>\r\n";
1370
echo __('Send Email From', 'subscribe2') . ': ';
1371
- echo "<input type=\"radio\" name=\"sender\" value=\"author\"";
1372
- if ('author' == $this->subscribe2_options['sender']) {
1373
echo "checked=\"checked\" ";
1374
}
1375
echo " /> " . __('Author of the post', 'subscribe2') . " &nbsp;&nbsp;";
1376
- echo "<input type=\"radio\" name=\"sender\" value=\"admin\"";
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>";
1389
echo __('New Post email (must not be empty)', 'subscribe2') . ":";
1390
echo "<br />\r\n";
1391
- echo "<textarea rows=\"9\" cols=\"60\" name=\"mailtext\">" . stripslashes($this->subscribe2_options['mailtext']) . "</textarea><br /><br />\r\n";
1392
echo "</td><td valign=\"top\" rowspan=\"3\">";
1393
echo "<h3>" . __('Message substitions', 'subscribe2') . "</h3>\r\n";
1394
echo "<dl>";
@@ -1404,61 +1291,61 @@ class subscribe2 {
1404
echo "<dt><b>ACTION</b></dt><dd>" . __("Action performed by LINK in confirmation email<br />(<i>only used in the confirmation email template</i>)", 'subscribe2') . "</dd>\r\n";
1405
echo "</dl></td></tr><tr><td>";
1406
echo __('Subscribe / Unsubscribe confirmation email', 'subscribe2') . ":<br />\r\n";
1407
- echo "<textarea rows=\"9\" cols=\"60\" name=\"confirm_email\">" . stripslashes($this->subscribe2_options['confirm_email']) . "</textarea><br /><br />\r\n";
1408
- echo "</td></tr><tr valign=\"top\"><td>";
1409
echo __('Reminder email to Unconfirmed Subscribers', 'subscribe2') . ":<br />\r\n";
1410
- echo "<textarea rows=\"9\" cols=\"60\" name=\"remind_email\">" . stripslashes($this->subscribe2_options['remind_email']) . "</textarea><br /><br />\r\n";
1411
- echo "</td></tr></table><br />\r\n";
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\"";
1419
}
1420
- echo " /> " . __('Allow registered users to subscribe to excluded categories?', 'subscribe2') . "</center><br />\r\n";
1421
echo "<h2>" . __('Writing Options', 'subscribe2') . "</h2>\r\n";
1422
- echo "<input type=\"checkbox\" name=\"show_button\" value=\"1\"";
1423
- if ('1' == $this->subscribe2_options['show_button']) {
1424
- echo " checked=\"checked\"";
1425
}
1426
- echo " /> " . __('Show the Subscribe2 button on the Write toolbar?', 'subscribe2') . "<br /><br />\r\n";
1427
1428
//Auto Subscription for new registrations
1429
echo "<h2>" . __('Auto Subscribe', 'subscribe2') . "</h2>\r\n";
1430
echo __('Automatically subscribe new users registering with your blog.', 'subscribe2') . "<br />\r\n";
1431
- echo "<input type=\"radio\" name=\"autosub\" value=\"yes\"";
1432
- if ('yes' == $this->subscribe2_options['autosub']) {
1433
- echo " checked=\"checked\"";
1434
}
1435
echo " /> " . __('Yes', 'subscribe2') . " &nbsp;&nbsp;";
1436
- echo "<input type=\"radio\" name=\"autosub\" value=\"no\"";
1437
- if ('no' == $this->subscribe2_options['autosub']) {
1438
- echo " checked=\"checked\"";
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>";
@@ -1469,9 +1356,6 @@ class subscribe2 {
1469
echo "<h2>" . __('Reset Default', 'subscribe2') . "</h2>\r\n";
1470
echo "<p>" . __('Use this to reset all options to their defaults. This <strong><em>will not</em></strong> modify your list of subscribers.', 'subscribe2') . "</p>\r\n";
1471
echo "<form method=\"post\" action=\"\">";
1472
- if (function_exists('wp_nonce_field')) {
1473
- wp_nonce_field('subscribe2-options_subscribers' . $s2nonce);
1474
- }
1475
echo "<p align=\"center\"><span class=\"submit\">";
1476
echo "<input type=\"hidden\" name=\"s2_admin\" value=\"RESET\" />";
1477
echo "<input type=\"submit\" id=\"deletepost\" name=\"submit\" value=\"" . __('RESET', 'subscribe2') .
@@ -1487,13 +1371,12 @@ class subscribe2 {
1487
Our profile menu
1488
*/
1489
function user_menu() {
1490
- global $user_ID, $s2nonce;
1491
1492
get_currentuserinfo();
1493
1494
// was anything POSTed?
1495
if ( (isset($_POST['s2_admin'])) && ('user' == $_POST['s2_admin']) ) {
1496
- check_admin_referer('subscribe2-user_subscribers' . $s2nonce);
1497
echo "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Subscription preferences updated.', 'subscribe2') . "</strong></p></div>\n";
1498
$format = 'text';
1499
$post = 'post';
@@ -1515,21 +1398,21 @@ 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']);
1522
}
1523
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
1524
$remove = array_diff($old_cats, $cats);
1525
$new = array_diff($cats, $old_cats);
1526
- if (!empty($remove)) {
1527
// remove subscription to these cat IDs
1528
foreach ($remove as $id) {
1529
delete_usermeta($user_ID, "s2_cat" .$id);
1530
}
1531
}
1532
- if (!empty($new)) {
1533
// add subscription to these cat IDs
1534
foreach ($new as $id) {
1535
update_usermeta($user_ID, 's2_cat' . $id, "$id");
@@ -1543,11 +1426,8 @@ class subscribe2 {
1543
echo "<div class=\"wrap\">";
1544
echo "<h2>" . __('Notification Settings', 'subscribe2') . "</h2>\r\n";
1545
echo "<form method=\"post\" action=\"\">";
1546
- if (function_exists('wp_nonce_field')) {
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')) {
@@ -1569,28 +1449,28 @@ class subscribe2 {
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;';
1574
- echo "<input type=\"radio\" name=\"new_category\" value=\"yes\" ";
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
}
1582
- echo "/> No<br /><br />";
1583
1584
// subscribed categories
1585
echo "<h2>" . __('Subscribed Categories', 'subscribe2') . "</h2>\r\n";
1586
- $this->display_category_form(explode(',', get_usermeta($user_ID, 's2_subscribed')), $this->subscribe2_options['reg_override']);
1587
} else {
1588
// we're doing daily digests, so just show
1589
// subscribe / unnsubscribe
1590
echo __('Receive daily summary of new posts?', 'subscribe2') . ': &nbsp;&nbsp;';
1591
- echo "<input type=\"radio\" name=\"category\" value=\"1\" ";
1592
- if (get_usermeta($user_ID, 's2_subscribed')) {
1593
- echo "checked=\"yes\" ";
1594
}
1595
echo "/> Yes <input type=\"radio\" name=\"category\" value=\"\" ";
1596
if (! get_usermeta($user_ID, 's2_subscribed')) {
@@ -1612,11 +1492,8 @@ class subscribe2 {
1612
Display the Write sub-menu
1613
*/
1614
function write_menu() {
1615
- global $wpdb, $s2nonce;
1616
-
1617
// was anything POSTed?
1618
if (isset($_POST['s2_admin']) && ('mail' == $_POST['s2_admin']) ) {
1619
- check_admin_referer('subscribe2-write_subscribers' . $s2nonce);
1620
if ('confirmed' == $_POST['what']) {
1621
$recipients = $this->get_public();
1622
} elseif ('unconfirmed' == $_POST['what']) {
@@ -1647,9 +1524,6 @@ class subscribe2 {
1647
// show our form
1648
echo "<div class=\"wrap\"><h2>" . __('Send email to all subscribers', 'subscribe2') . "</h2>\r\n";
1649
echo "<form method=\"post\" action=\"\">\r\n";
1650
- if (function_exists('wp_nonce_field')) {
1651
- wp_nonce_field('subscribe2-write_subscribers' . $s2nonce);
1652
- }
1653
echo __('Subject', 'subscribe2') . ": <input type=\"text\" size=\"69\" name=\"subject\" value=\"" . __('A message from ', 'subscribe2') . get_settings('blogname') . "\" /> <br />";
1654
echo "<textarea rows=\"12\" cols=\"75\" name=\"message\"></textarea>";
1655
echo "<br />\r\n";
@@ -1668,13 +1542,13 @@ class subscribe2 {
1668
/* ===== helper functions: forms and stuff ===== */
1669
/**
1670
Display a table of categories with checkboxes
1671
Optionally pre-select those categories specified
1672
*/
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
@@ -1688,34 +1562,30 @@ class subscribe2 {
1688
$half = (count($all_cats) / 2);
1689
$i = 0;
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
}
1714
- echo "</td></tr>\r\n";
1715
- echo "<tr><td align=\"left\">\r\n";
1716
- echo "<input type=\"checkbox\" name=\"checkall\" onclick=\"setAll(this)\" /> " . __('Select / Unselect All' ,'subscribe2') . "\r\n";
1717
- echo "</td></tr>\r\n";
1718
- echo "</table>\r\n";
1719
} // end display_category_form()
1720
1721
/**
@@ -1732,8 +1602,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 +1614,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?
@@ -1764,17 +1632,18 @@ class subscribe2 {
1764
if (in_array($whom, $exclude)) { continue; }
1765
if (0 == $count[$whom]) { continue; }
1766
1767
- echo "<option value=\"" . $whom . "\"";
1768
if ($whom == $selected) { echo " selected=\"selected\" "; }
1769
echo ">$display (" . ($count[$whom]) . ")</option>\r\n";
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,51 +1652,22 @@ 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
1814
*/
1815
function filter($content = '') {
1816
- if ( ('' == $content) || (! preg_match('|<!--subscribe2-->|', $content)) ) { return $content; }
1817
$this->s2form = $this->form;
1818
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;
1830
- if (!is_email($_POST['email'])) {
1831
$this->s2form = $this->form . $this->not_an_email;
1832
} elseif ($this->is_barred($_POST['email'])) {
1833
$this->s2form = $this->form . $this->barred_domain;
@@ -1885,7 +1725,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");
@@ -1916,23 +1756,49 @@ class subscribe2 {
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) {
@@ -1974,9 +1840,10 @@ 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
1981
$user =& $author;
1982
} else {
@@ -1985,18 +1852,41 @@ 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
/**
@@ -2007,17 +1897,12 @@ class subscribe2 {
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'])) {
2023
// someone is confirming a request
@@ -2026,21 +1911,23 @@ class subscribe2 {
2026
add_filter('the_content', array(&$this, 'confirm'));
2027
}
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()
@@ -2082,5 +1969,7 @@ class subscribe2 {
2082
var $confirm_subject = '';
2083
var $options_saved = '';
2084
var $options_reset = '';
2085
} // end class subscribe2
2086
?>
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.2.8
7
Author: Matthew Robinson
8
Author URI: http://subscribe2.wordpress.com
9
*/
10
11
/*
12
+ Copyright (C) 2006 Matthew Robinson
13
Based on the Original Subscribe2 plugin by
14
Copyright (C) 2005 Scott Merrill (skippy@skippy.net)
15
29
http://www.gnu.org/licenses/gpl.html
30
*/
31
32
+ // use Owen's excellent ButtonSnap library
33
+ include(ABSPATH . '/wp-content/plugins/buttonsnap.php');
34
+
35
+ // change this to TRUE if you're on Dreamhost
36
+ // (or any other host that limits the number of recipients
37
+ // permitted on each outgoing email message)
38
+ define('DREAMHOST', false);
39
40
// by default, subscribe2 grabs the first page from your database for use
41
// when displaying the confirmation screen to public subscribers.
42
// You can override this by specifying a page ID below.
43
define('S2PAGE', '0');
44
45
+ // change this to TRUE if you want a daily digest of the day's posts
46
+ // send to your subscribers
47
+ define('S2DIGEST', false);
48
49
+ // our version number. Don't touch.
50
+ define('S2VERSION', '2.2.8');
51
52
// start our class
53
class subscribe2 {
61
62
$this->please_log_in = "<p>" . __('To manage your subscription options please ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-login.php\">login</a>.</p>";
63
64
+ $this->use_profile = "<p>" . __('You may manage your subscription options from your ', 'subscribe2') . "<a href=\"" . get_settings('siteurl') . "/wp-admin/profile.php?page=subscribe2/subscribe2.php\">profile</a>.</p>";
65
66
$this->confirmation_sent = "<p>" . __('A confirmation message is on its way!', 'subscribe2') . "</p>";
67
88
89
$this->remind_subject = "[" . get_settings('blogname') . "] " . __('Subscription Reminder', 'subscribe2');
90
91
+ $this->subscribe = __('subscribe', 'subscribe2'); //ACTION replacement in if subscribing confirmation email
92
93
+ $this->unsubscribe = __('unsubscribe', 'subscribe2'); //ACTION replacement if unsubscribing in confirmation email
94
95
// menu strings
96
$this->options_saved = __('Options saved!', 'subscribe2');
102
Hook the menu
103
*/
104
function admin_menu() {
105
+ add_management_page(__('Subscribers', 'subscribe2'), __('Subscribers', 'subscribe2'), "manage_options", basename(__FILE__), array(&$this, 'manage_menu'));
106
+ add_options_page(__('Subscribe2 Options', 'subscribe2'), __('Subscribe2','subscribe2'), "manage_options", basename(__FILE__), array(&$this, 'options_menu'));
107
+ add_submenu_page('profile.php', __('Subscriptions', 'subscribe2'), __('Subscriptions', 'subscribe2'), "read", __FILE__, array(&$this, 'user_menu'));
108
+ add_submenu_page('post.php', __('Mail Subscribers','subscribe2'), __('Mail Subscribers', 'subscribe2'),"manage_options", __FILE__, array(&$this, 'write_menu'));
109
}
110
111
+ /* ===== ButtonSnap configuration ===== */
112
/**
113
+ Register our button in the QuickTags bar
114
*/
115
+ function s2_button_init() {
116
+ $url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_button.png';
117
+ buttonsnap_textbutton($url, 'Subscribe2', '<!--subscribe2-->');
118
+ buttonsnap_register_marker('subscribe2', 's2_marker');
119
}
120
121
+ /**
122
+ Style a marker in the Rich Text Editor for our tag
123
+
124
+ By default, the RTE suppresses output of HTML comments, so this places a CSS style on our token in order to make it display
125
+ */
126
+ function subscribe2_css() {
127
+ $marker_url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_marker.png';
128
+ echo "
129
+ .s2_marker {
130
+ display: block;
131
+ height: 45px;
132
+ margin-top: 5px;
133
+ background-image: url({$marker_url});
134
+ background-repeat: no-repeat;
135
+ background-position: center;
136
+ }
137
+ ";
138
}
139
140
/* ===== Install, upgrade, reset ===== */
143
*/
144
function install() {
145
// include upgrade-functions for maybe_create_table;
146
+ if (! function_exists('maybe_create_table')) {
147
require_once(ABSPATH . '/wp-admin/upgrade-functions.php');
148
}
149
$date = date('Y-m-d');
166
global $wpdb;
167
168
// include upgrade-functions for maybe_create_table;
169
+ if (! function_exists('maybe_create_table')) {
170
require_once(ABSPATH . '/wp-admin/upgrade-functions.php');
171
}
172
$date = date('Y-m-d');
173
maybe_add_column($this->public, 'date', "ALTER TABLE `$this->public` ADD `date` DATE DEFAULT '$date' NOT NULL AFTER `active`;");
174
+ //add reminder email template info for version 2.2.4
175
+ $s2_remind_email = get_option('s2_remind_email');
176
+ if (empty($s2_remind_email)) {
177
+ update_option('s2_remind_email', "This email address was subscribed for notifications at BLOGNAME (BLOGLINK) but the subscription remains incomplete.\n\nIf you wish to complete your subscription please click on the link below:\n\nLINK\n\nIf you do not wish to complete your subscription please ignore this email and your address will be removed from our database.\n\nRegards,\nMYNAME");
178
+ }
179
+ update_option('s2_version', S2VERSION);
180
181
// let's take the time to check process registered users
182
+ // existing public subscribers are subscribed to all categories
183
$users = $wpdb->get_col("SELECT ID FROM $wpdb->users");
184
+ if (! empty($users)) {
185
foreach ($users as $user) {
186
$this->register($user);
187
}
188
}
189
} // end upgrade()
190
191
/**
192
Reset our options
193
*/
194
function reset() {
195
+ update_option('s2_sender', 'author');
196
+ update_option('s2_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");
197
+ update_option('s2_confirm_email', "In order to confirm your request for BLOGNAME, please click on the link below:\n\nLINK\n\nIf you did not request this, please feel free to disregard this notice!\n\nThank you,\nMYNAME.");
198
+ update_option('s2_remind_email', "This email address was subscribed for notifications at BLOGNAME (BLOGLINK) but the subscription remains incomplete.\n\nIf you wish to complete your subscription please click on the link below:\n\nLINK\n\nIf you do not wish to complete your subscription please ignore this email and your address will be removed from our database.\n\nRegards,\nMYNAME");
199
+ update_option('s2_exclude', '');
200
+ update_option('s2_reg_override', '1');
201
+ update_option('s2_show_button', '1');
202
+ update_option('s2_barred', '');
203
+ } // end reset()
204
205
/* ===== mail handling ===== */
206
/**
224
Delivers email to recipients in HTML or plaintext
225
*/
226
function mail ($recipients = array(), $subject = '', $message = '', $type='text') {
227
+ if (empty($recipients)) { return; }
228
+ if ('' == $message) { return; }
229
+
230
// Set sender details
231
if ('' == $this->myname) {
232
$admin = get_userdata(1);
253
254
// BCC all recipients
255
$bcc = '';
256
+ if ( (defined('DREAMHOST') && true == DREAMHOST) &&
257
+ (count($recipients) > 30) ) {
258
// we're on Dreamhost, and have more than 30 susbcribers
259
$count = 1;
260
$batch = array();
264
next($recipients);
265
$recipient = trim($recipient);
266
// sanity check -- make sure we have a valid email
267
+ if (! is_email($recipient)) { continue; }
268
// and NOT the sender's email, since they'll
269
// get a copy anyway
270
if ( (! empty($recipient)) && ($this->myemail != $recipient) ) {
294
foreach ($recipients as $recipient) {
295
$recipient = trim($recipient);
296
// sanity check -- make sure we have a valid email
297
+ if (! is_email($recipient)) { continue; }
298
// and NOT the sender's email, since they'll
299
// get a copy anyway
300
+ if ( (! empty($recipient)) && ($this->myemail != $recipient) ) {
301
('' == $bcc) ? $bcc = "Bcc: $recipient" : $bcc .= ",\r\n $recipient";
302
// Headers constructed as per definition at http://www.ietf.org/rfc/rfc2822.txt
303
}
305
$headers .= "$bcc\r\n";
306
}
307
// actually send mail
308
+ if ( (defined('DREAMHOST') && true == DREAMHOST) && (isset($batch)) ) {
309
foreach ($batch as $bcc) {
310
$newheaders = $headers . "$bcc\r\n";
311
@wp_mail($this->myemail, $subject, $mailtext, $newheaders);
318
/**
319
Sends an email notification of a new post
320
*/
321
+ function publish($id = 0, $cron = 0) {
322
+ if (! $id) { return $id; }
323
324
// are we doing daily digests? If so, don't send anything now
325
+ if ( defined('S2DIGEST') && true == S2DIGEST ) { return; }
326
327
// we need to determine whether this is a new post, or an edit
328
+ if (0 == $cron) {
329
+ // we're not being called from WP-Cron
330
+ if ($this->private) {
331
+ // this post was published from draft status
332
+ // OR is an edit of an existing post
333
+ // so send no notification
334
+ return $id;
335
+ }
336
}
337
338
$post_cats = wp_get_post_cats('1', $id);
349
if ($check) {
350
// hang on -- can registered users subscribe to
351
// excluded categories?
352
+ if ('0' == get_option('s2_reg_override')) {
353
// nope? okay, let's leave
354
return $id;
355
}
356
}
357
358
global $wpdb;
359
+ $post = & get_post($id);
360
// is this post set in the future?
361
if ($post->post_date > current_time('mysql')) {
362
+ // is wp-cron installed?
363
+ if (function_exists('wp_cron_init')) {
364
+ // are we doing daily digests?
365
+ if ( defined('S2DIGEST') && false == S2DIGEST ) {
366
+ // not doing daily digests, so
367
+ // add this post to the list of
368
+ // future posts
369
+ $our_post = array('id' => $id, 'date' => $post->post_date);
370
+ $future_posts = get_option('s2_future_posts');
371
+ $future_posts[] = $our_post;
372
+ update_option('s2_future_posts', $future_posts);
373
+ }
374
+ }
375
// bail out
376
return $id;
377
}
378
379
// lets collect our public subscribers
380
// and all our registered subscribers for these categories
381
+ if (! $check) {
382
// if this post is assigned to an excluded
383
// category, then this test will prevent
384
// the public from receiving notification
387
$registered = $this->get_registered("cats=$post_cats_string");
388
389
// do we have subscribers?
390
+ if ( empty($public) && empty($registered) ) {
391
// if not, no sense doing anything else
392
return $id;
393
}
400
$this->authorname = $author->display_name;
401
402
// do we send as admin, or post author?
403
+ if ('author' == get_option('s2_sender')) {
404
// get author details
405
$user =& $author;
406
} else {
412
// Get email subject
413
$subject = $this->substitute(stripslashes($this->s2_subject));
414
// Get the message template
415
+ $mailtext = $this->substitute(stripslashes(get_option('s2_mailtext')));
416
417
$plaintext = $post->post_content;
418
$content = apply_filters('the_content', $post->post_content);
429
// no <!--more-->, so grab the first 55 words
430
$excerpt = strip_tags($plaintext);
431
$excerpt_length = 55;
432
+ $words = explode(' ', $plaintext, $excerpt_length + 1);
433
if (count($words) > $excerpt_length) {
434
array_pop($words);
435
array_push($words, '[...]');
487
*/
488
function send_confirm($what = '', $is_remind = FALSE) {
489
if ($this->filtered == 1) { return; }
490
+ if ( (! $this->email) || (! $what) ) {
491
return false;
492
}
493
$id = $this->get_id($this->email);
494
+ if (! $id) {
495
return false;
496
}
497
511
512
$admin = get_userdata(1);
513
$this->myname = $admin->display_name;
514
+
515
if ($is_remind == TRUE) {
516
+ $body = $this->substitute(stripslashes(get_option('s2_remind_email')));
517
$subject = stripslashes($this->remind_subject);
518
} else {
519
+ $body = $this->substitute(stripslashes(get_option('s2_confirm_email')));
520
if ('add' == $what) {
521
$body = str_replace("ACTION", $this->subscribe, $body);
522
} elseif ('del' == $what) {
546
return $this->excluded_cats;
547
} else {
548
global $wpdb;
549
+ $this->excluded_cats = get_option('s2_exclude');
550
return $this->excluded_cats;
551
}
552
} // end get_excluded_cats()
575
function get_email ($id = 0) {
576
global $wpdb;
577
578
+ if (! $id) {
579
return false;
580
}
581
return $wpdb->get_var("SELECT email FROM $this->public WHERE id=$id");
587
function get_id ($email = '') {
588
global $wpdb;
589
590
+ if (! $email) {
591
return false;
592
}
593
return $wpdb->get_var("SELECT id FROM $this->public WHERE email='$email'");
632
}
633
}
634
635
+ if (! is_email($email)) { return false; }
636
637
if (false !== $this->is_public($email)) {
638
$wpdb->get_results("UPDATE $this->public SET date=NOW() WHERE email='$email'");
655
}
656
}
657
658
+ if (! is_email($email)) { return false; }
659
$wpdb->get_results("DELETE FROM $this->public WHERE email='$email'");
660
} // end delete()
661
688
$this->myname = $admin->display_name;
689
690
$recipients = explode(",", $emails);
691
+ if (! is_array($recipients)) { $recipients = array(); }
692
foreach ($recipients as $recipient) {
693
$this->email = $recipient;
694
$this->send_confirm('add', TRUE);
695
}
696
} //end remind()
697
698
/**
699
Check email is not from a barred domain
700
*/
701
function is_barred($email='') {
702
+ $barred_option = get_option('s2_barred');
703
list($user, $domain) = split('@', $email);
704
$bar_check = stristr($barred_option, $domain);
705
725
$id = intval(substr($code, 1));
726
if ($id) {
727
$this->email = $this->get_email($id);
728
+ if (! $this->email) {
729
return $this->no_such_email;
730
}
731
} else {
816
$subscribers = array();
817
818
parse_str($args, $r);
819
+ if (! isset($r['cats']))
820
$r['cats'] = '';
821
+ if (! isset($r['format']))
822
$r['format'] = 'all';
823
+ if (! isset($r['amount']))
824
$r['amount'] = 'all';
825
826
$JOIN = ''; $AND = '';
870
if ('' == $email) { return false; }
871
872
global $wpdb;
873
+ if (! empty($this->signup_dates)) {
874
return $this->signup_dates[$email];
875
} else {
876
$results = $wpdb->get_results("SELECT email, date FROM $this->public", ARRAY_N);
890
891
if (0 == $user_id) { return $user_id; }
892
$user = get_userdata($user_id);
893
894
// has this user previously signed up for email notification?
895
if (false !== $this->is_public($user->user_email)) {
896
// delete this user from the public table, and subscribe them to all the categories
897
$this->delete($user->user_email);
898
+ update_usermeta($user_id, 's2_subscribed', $this->get_all_categories());
899
+ foreach(explode(',', $this->get_all_categories()) as $cat) {
900
+ update_usermeta($user_id, 's2_cat' . $cat, "$cat");
901
}
902
update_usermeta($user_id, 's2_format', 'text');
903
update_usermeta($user_id, 's2_excerpt', 'excerpt');
906
$check = get_usermeta($user_id, 's2_subscribed');
907
// ensure existing subscriptions are not overwritten on upgrade
908
if (empty($check)) {
909
+ if ('yes' == get_option('s2_autosub')) {
910
update_usermeta($user_id, 's2_subscribed', $this->get_all_categories());
911
foreach(explode(',', $this->get_all_categories()) as $cat) {
912
update_usermeta($user_id, 's2_cat' . $cat, "$cat");
913
}
914
+ if ('html' == get_option('s2_autoformat')) {
915
update_usermeta($user_id, 's2_format', 'html');
916
update_usermeta($user_id, 's2_excerpt', 'post');
917
+ } elseif ('fulltext' == get_option('s2_autoformat')) {
918
update_usermeta($user_id, 's2_format', 'text');
919
update_usermeta($user_id, 's2_excerpt', 'post');
920
} else {
921
update_usermeta($user_id, 's2_format', 'text');
922
update_usermeta($user_id, 's2_excerpt', 'excerpt');
923
}
924
+ } else {
925
+ update_usermeta($user_id, 's2_subscribed', '');
926
+ update_usermeta($user_id, 's2_format', 'text');
927
+ update_usermeta($user_id, 's2_excerpt', 'excerpt');
928
+ }
929
}
930
}
931
return $user_id;
935
Subscribe all registered users to category selected on Admin Manage Page
936
*/
937
function subscribe_registered_users ($emails = '', $cats = '') {
938
+ if (('' == $emails) || ('' == $cats)) { return false; }
939
global $wpdb;
940
941
$useremails = explode(",", $emails);
944
$sql = "SELECT ID FROM $wpdb->users WHERE user_email IN ('$useremails')";
945
$user_IDs = $wpdb->get_col($sql);
946
$cats = $_POST['category'];
947
+ if (! is_array($cats)) {
948
$cats = array($_POST['category']);
949
}
950
951
foreach ($user_IDs as $user_ID) {
952
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
953
+ if (! is_array($old_cats)) {
954
$old_cats = array($old_cats);
955
}
956
$new = array_diff($cats, $old_cats);
957
+ if (! empty($new)) {
958
// add subscription to these cat IDs
959
foreach ($new as $id) {
960
update_usermeta($user_ID, 's2_cat' . $id, "$id");
969
Unsubscribe all registered users to category selected on Admin Manage Page
970
*/
971
function unsubscribe_registered_users ($emails = '', $cats = '') {
972
+ if (('' == $emails) || ('' == $cats)) { return false; }
973
global $wpdb;
974
975
$useremails = explode(",", $emails);
978
$sql = "SELECT ID FROM $wpdb->users WHERE user_email IN ('$useremails')";
979
$user_IDs = $wpdb->get_col($sql);
980
$cats = $_POST['category'];
981
+ if (! is_array($cats)) {
982
$cats = array($_POST['category']);
983
}
984
985
foreach ($user_IDs as $user_ID) {
986
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
987
+ if (! is_array($old_cats)) {
988
$old_cats = array($old_cats);
989
}
990
$remain = array_diff($old_cats, $cats);
991
+ if (! empty($remain)) {
992
// remove subscription to these cat IDs and update s2_subscribed
993
foreach ($cats as $id) {
994
delete_usermeta($user_ID, 's2_cat' . $id, "$id");
1013
1014
$sql = "SELECT DISTINCT user_id FROM $wpdb->usermeta WHERE $wpdb->usermeta.meta_key='s2_autosub' AND $wpdb->usermeta.meta_value='yes'";
1015
$user_IDs = $wpdb->get_col($sql);
1016
1017
foreach ($user_IDs as $user_ID) {
1018
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
1019
+ if (! is_array($old_cats)) {
1020
$old_cats = array($old_cats);
1021
}
1022
// add subscription to these cat IDs
1031
Our management page
1032
*/
1033
function manage_menu() {
1034
+ global $wpdb;
1035
1036
//Get Registered Subscribers for bulk management
1037
$registered = $this->get_registered();
1038
+ if(!empty($registered)) {
1039
$emails = implode(",", $registered);
1040
}
1041
1042
$what = '';
1043
+ $reminderform = '';
1044
1045
// was anything POSTed ?
1046
if (isset($_POST['s2_admin'])) {
1047
if ('subscribe' == $_POST['s2_admin']) {
1048
foreach (preg_split ("/[\s,]+/", $_POST['addresses']) as $email) {
1049
if (is_email($email)) {
1061
} elseif ('remind' == $_POST['s2_admin']) {
1062
$this->remind($_POST['reminderemails']);
1063
echo "<div id=\"message\" class=\"updated fade\"><strong><p>" . __('Reminder Email(s) Sent!','subscribe2') . "</p></strong></div>";
1064
} elseif ( ('register' == $_POST['s2_admin']) && ('Subscribe' == $_POST['submit']) ) {
1065
$this->subscribe_registered_users($_POST['emails'], $_POST['category']);
1066
echo "<div id=\"message\" class=\"updated fade\"><strong><p>" . __('Registered Users Subscribed!','subscribe2') . "</p></strong></div>";
1091
$subscribers = $unconfirmed;
1092
if (!empty($unconfirmed)) {
1093
$reminderemails = implode(",", $unconfirmed);
1094
+ $reminderform = "<span class=\"submit\"><form method=\"post\" action=\"\"><input type=\"hidden\" name=\"reminderemails\" value=\"$reminderemails\" /><input type=\"hidden\" name=\"s2_admin\" value=\"remind\" /><input type=\"submit\" name=\"submit\" value=\"" . __('Send Reminder Email','subscribe2') . "\" /></form></span>";
1095
}
1096
} elseif (is_numeric($_POST['what'])) {
1097
$what = intval($_POST['what']);
1108
$confirmed = $this->get_public();
1109
$subscribers = $confirmed;
1110
$what = 'confirmed';
1111
+ if (empty ($subscribers)) {
1112
$unconfirmed = $this->get_public(0);
1113
$subscribers = $unconfirmed;
1114
$what = 'unconfirmed';
1118
}
1119
}
1120
}
1121
+ if (! empty($subscribers)) {
1122
natcasesort($subscribers);
1123
}
1124
// safety check for our arrays
1130
echo "<div class=\"wrap\">";
1131
echo "<h2>" . __('Subscribe Addresses', 'subscribe2') . "</h2>\r\n";
1132
echo "<form method=\"post\" action=\"\">\r\n";
1133
echo "<span style=\"align:left\">" . __('Enter addresses, one per line or comma-seperated', 'subscribe2') . "</span><br />\r\n";
1134
echo "<textarea rows=\"2\" cols=\"80\" name=\"addresses\"></textarea>";
1135
echo "<span class=\"submit\"><input type=\"submit\" name=\"submit\" value=\"" . __('Subscribe', 'subscribe2') . "\"/>";
1142
$this->display_subscriber_dropdown($what, __('Filter', 'subscribe2'));
1143
// show the selected subscribers
1144
$alternate = 'alternate';
1145
+ if (! empty($subscribers)) {
1146
echo "<p align=\"center\"><b>" . __('Registered on the left, confirmed in the middle, unconfirmed on the right', 'subscribe2') . "</b></p>";
1147
}
1148
echo "<table cellpadding=\"2\" cellspacing=\"2\">";
1149
+ if (! empty($subscribers)) {
1150
foreach ($subscribers as $subscriber) {
1151
echo "<tr class=\"$alternate\">";
1152
echo "<td width=\"75%\"";
1158
echo "align=\"left\" colspan=\"3\">";
1159
}
1160
echo "<a href=\"mailto:$subscriber\">$subscriber</a>\r\n";
1161
+ if ( in_array($subscriber, $unconfirmed) || in_array($subscriber, $confirmed) ) {
1162
+ echo "(" . $this->signup_date($subscriber) . ")</td>";
1163
+ echo "<td width=\"5%\" align=\"center\"><form method=\"post\" action=\"\"><input type=\"hidden\" name=\"email\" value=\"$subscriber\" /><input type=\"hidden\" name=\"s2_admin\" value=\"toggle\" /><input type=\"hidden\" name=\"what\" value=\"$what\" /><input type=\"submit\" name=\"submit\" value=\"";
1164
(in_array($subscriber, $unconfirmed)) ? $foo = '&lt;-' : $foo= '-&gt;';
1165
+ echo "$foo\" /></form></td>";
1166
+ echo "<td width=\"2%\" align=\"center\"><form method=\"post\" action=\"\"><span class=\"delete\"><input type=\"hidden\" name=\"email\" value=\"$subscriber\" /><input type=\"hidden\" name=\"s2_admin\" value=\"delete\" /><input type=\"hidden\" name=\"what\" value=\"$what\" /><input type=\"submit\" name=\"submit\" value=\"X\" /></span></form>";
1167
}
1168
echo "</td></tr>\r\n";
1169
('alternate' == $alternate) ? $alternate = '' : $alternate = 'alternate';
1172
echo "<tr><td align=\"center\"><b>" . __('NONE', 'subscribe2') . "</b></td></tr>\r\n";
1173
}
1174
echo "</table>";
1175
+ if (!empty($reminderform)) {echo $reminderform;}
1176
echo "</div>\r\n";
1177
1178
//show bulk managment form
1180
echo "<h2 >" . __('Categories', 'subscribe2') . "</h2>\r\n";
1181
echo __('Existing Registered Users can be automatically (un)subscribed to categories using this section.', 'subscribe2') . "<br />\r\n";
1182
echo "<strong><em style=\"color: red\">" . __('Consider User Privacy as changes cannot be undone', 'subscribe2') . "</em></strong><br />\r\n";
1183
+ echo "<span class=\"submit\"><form method=\"post\" action=\"\"><input type=\"hidden\" name=\"emails\" value=\"$emails\" /><input type=\"hidden\" name=\"s2_admin\" value=\"register\" />";
1184
+ $this->display_category_form(explode(',', $this->get_excluded_cats()));
1185
echo "<input type=\"submit\" id=\"deletepost\" name=\"submit\" value=\"" . __('Subscribe','subscribe2') . "\" />";
1186
echo "<input type=\"submit\" id=\"deletepost\" name=\"submit\" value=\"" . __('Unsubscribe','subscribe2') . "\" /></form></span>";
1187
1197
Our options page
1198
*/
1199
function options_menu() {
1200
// was anything POSTed?
1201
if (isset($_POST['s2_admin'])) {
1202
if ('RESET' == $_POST['s2_admin']) {
1203
$this->reset();
1204
echo "<div id=\"message\" class=\"updated fade\"><strong><p>$this->options_reset</p></strong></div>";
1205
} elseif ('options' == $_POST['s2_admin']) {
1206
// excluded categories
1207
+ if (! empty($_POST['category'])) {
1208
$exclude_cats = implode(',', $_POST['category']);
1209
} else {
1210
$exclude_cats = '';
1211
}
1212
+ update_option('s2_exclude', $exclude_cats);
1213
// allow override?
1214
+ (isset($_POST['override'])) ? $override = '1' : $override = '0';
1215
+ update_option('s2_reg_override', $override);
1216
1217
// show button?
1218
+ (isset($_POST['showbutton'])) ? $showbutton = '1' : $showbutton = '0';
1219
+ update_option('s2_show_button', $showbutton);
1220
1221
// send as author or admin?
1222
$sender = 'author';
1223
+ if ('admin' == $_POST['s2_sender']) {
1224
$sender = 'admin';
1225
}
1226
+ update_option('s2_sender', $sender);
1227
1228
// email templates
1229
+ $mailtext = $_POST['s2_mailtext'];
1230
+ update_option('s2_mailtext', $mailtext);
1231
+ $confirm_email = $_POST['s2_confirm_email'];
1232
+ update_option('s2_confirm_email', $confirm_email);
1233
+ $remind_email = $_POST['s2_remind_email'];
1234
+ update_option('s2_remind_email', $remind_email);
1235
1236
//automatic subscription
1237
+ $autosub_option = $_POST['s2_autosub'];
1238
+ update_option('s2_autosub', $autosub_option);
1239
+ $autosub_format_option = $_POST['s2_autoformat'];
1240
+ update_option('s2_autoformat', $autosub_format_option);
1241
1242
//barred domains
1243
+ $barred_option = $_POST['s2_barred'];
1244
+ update_option('s2_barred', $barred_option);
1245
echo "<div id=\"message\" class=\"updated fade\"><strong><p>$this->options_saved</p></strong></div>";
1246
}
1247
}
1248
// show our form
1249
+ $this->sender = get_option('s2_sender');
1250
+ $this->mailtext = get_option('s2_mailtext');
1251
+ $this->confirm_email = get_option('s2_confirm_email');
1252
+ $this->remind_email = get_option('s2_remind_email');
1253
+ $this->override = get_option('s2_reg_override');
1254
+ $this->show_button = get_option('s2_show_button');
1255
+ $this->autosub = get_option('s2_autosub');
1256
+ $this->barred_option = get_option('s2_barred');
1257
+
1258
echo "<div class=\"wrap\">";
1259
+ echo "<form method=\"post\" action=\"\">";
1260
+ echo "<input type=\"hidden\" name=\"s2_admin\" value=\"options\" />";
1261
+ echo "<h2>" . __('Delivery Options', 'subscribe2') . ":</h2>";
1262
echo __('Send Email From', 'subscribe2') . ': ';
1263
+ echo "<input type=\"radio\" name=\"s2_sender\" value=\"author\" ";
1264
+ if ('author' == $this->sender) {
1265
echo "checked=\"checked\" ";
1266
}
1267
echo " /> " . __('Author of the post', 'subscribe2') . " &nbsp;&nbsp;";
1268
+ echo "<input type=\"radio\" name=\"s2_sender\" value=\"admin\" ";
1269
+ if ('admin' == $this->sender) {
1270
echo "checked=\"checked\" ";
1271
}
1272
+ echo " /> " . __('Blog Admin', 'subscribe2') . "<br />\r\n";
1273
echo "<h2>" . __('Email Templates', 'subscribe2') . "</h2>\r\n";
1274
+ echo "<table width=\"100%\" cellspacing=\"2\" cellpadding=\"1\" class=\"editform\">";
1275
echo "<tr><td>";
1276
echo __('New Post email (must not be empty)', 'subscribe2') . ":";
1277
echo "<br />\r\n";
1278
+ echo "<textarea rows=\"9\" cols=\"60\" name=\"s2_mailtext\">" . stripslashes($this->mailtext) . "</textarea><p>\r\n";
1279
echo "</td><td valign=\"top\" rowspan=\"3\">";
1280
echo "<h3>" . __('Message substitions', 'subscribe2') . "</h3>\r\n";
1281
echo "<dl>";
1291
echo "<dt><b>ACTION</b></dt><dd>" . __("Action performed by LINK in confirmation email<br />(<i>only used in the confirmation email template</i>)", 'subscribe2') . "</dd>\r\n";
1292
echo "</dl></td></tr><tr><td>";
1293
echo __('Subscribe / Unsubscribe confirmation email', 'subscribe2') . ":<br />\r\n";
1294
+ echo "<textarea rows=\"9\" cols=\"60\" name=\"s2_confirm_email\">" . stripslashes($this->confirm_email) . "</textarea><p>";
1295
+ echo "</td></tr><tr><td>";
1296
echo __('Reminder email to Unconfirmed Subscribers', 'subscribe2') . ":<br />\r\n";
1297
+ echo "<textarea rows=\"9\" cols=\"60\" name=\"s2_remind_email\">" . stripslashes($this->remind_email) . "</textarea><p>";
1298
+ echo "</td></tr></table>\r\n";
1299
1300
// excluded categories
1301
echo "<h2>" . __('Excluded Categories', 'subscribe2') . "</h2>\r\n";
1302
$this->display_category_form(explode(',', $this->get_excluded_cats()));
1303
+ echo "<p align=\"center\"><input type=\"checkbox\" name=\"override\" ";
1304
+ if ('1' == $this->override) {
1305
+ echo "checked=\"checked\"";
1306
}
1307
+ echo "/> " . __('Allow registered users to subscribe to excluded categories?', 'subscribe2') . "</p>";
1308
echo "<h2>" . __('Writing Options', 'subscribe2') . "</h2>\r\n";
1309
+ echo "<p align=\"center\"><input type=\"checkbox\" name=\"showbutton\" ";
1310
+ if ('1' == $this->show_button) {
1311
+ echo "checked=\"checked\"";
1312
}
1313
+ echo "/> " . __('Show the Subscribe2 button on the Write toolbar?', 'subscribe2') . "</p>";
1314
1315
//Auto Subscription for new registrations
1316
echo "<h2>" . __('Auto Subscribe', 'subscribe2') . "</h2>\r\n";
1317
echo __('Automatically subscribe new users registering with your blog.', 'subscribe2') . "<br />\r\n";
1318
+ echo "<input type=\"radio\" name=\"s2_autosub\" value=\"yes\" ";
1319
+ if ('yes' == $this->autosub) {
1320
+ echo "checked=\"checked\" ";
1321
}
1322
echo " /> " . __('Yes', 'subscribe2') . " &nbsp;&nbsp;";
1323
+ echo "<input type=\"radio\" name=\"s2_autosub\" value=\"no\" ";
1324
+ if ('no' == $this->autosub) {
1325
+ echo "checked=\"checked\" ";
1326
}
1327
echo " /> " . __('No', 'subscribe2') . "<br /><br />\r\n";
1328
echo __('Auto-subscribe users to receive email as', 'subscribe2') . ": <br />\r\n";
1329
+ echo "<input type=\"radio\" name=\"s2_autoformat\" value=\"html\"";
1330
+ if ('html' == get_option('s2_autoformat')) {
1331
echo "checked=\"checked\" ";
1332
}
1333
echo "/> " . __('HTML', 'subscribe2') ." &nbsp;&nbsp;";
1334
+ echo "<input type=\"radio\" name=\"s2_autoformat\" value=\"fulltext\" ";
1335
+ if ('fulltext' == get_option('s2_autoformat')) {
1336
echo "checked=\"checked\" ";
1337
}
1338
echo "/> " . __('Plain Text - Full', 'subscribe2') . " &nbsp;&nbsp;";
1339
+ echo "<input type=\"radio\" name=\"s2_autoformat\" value=\"text\" ";
1340
+ if ('text' == get_option('s2_autoformat')) {
1341
echo "checked=\"checked\" ";
1342
}
1343
+ echo "/> " . __('Plain Text - Excerpt', 'subscribe2') . " &nbsp;&nbsp;";
1344
1345
//barred domains
1346
echo "<h2>" . __('Barred Domains', 'subscribe2') . "</h2>\r\n";
1347
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');
1348
+ echo "<textarea style=\"width: 98%;\" rows=\"4\" cols=\"60\" name=\"s2_barred\">" . $this->barred_option . "</textarea>";
1349
1350
// submit
1351
echo "<p align=\"center\"><span class=\"submit\"><input type=\"submit\" id=\"save\" name=\"submit\" value=\"" . __('Submit', 'subscribe2') . "\" /></span></p>";
1356
echo "<h2>" . __('Reset Default', 'subscribe2') . "</h2>\r\n";
1357
echo "<p>" . __('Use this to reset all options to their defaults. This <strong><em>will not</em></strong> modify your list of subscribers.', 'subscribe2') . "</p>\r\n";
1358
echo "<form method=\"post\" action=\"\">";
1359
echo "<p align=\"center\"><span class=\"submit\">";
1360
echo "<input type=\"hidden\" name=\"s2_admin\" value=\"RESET\" />";
1361
echo "<input type=\"submit\" id=\"deletepost\" name=\"submit\" value=\"" . __('RESET', 'subscribe2') .
1371
Our profile menu
1372
*/
1373
function user_menu() {
1374
+ global $user_ID;
1375
1376
get_currentuserinfo();
1377
1378
// was anything POSTed?
1379
if ( (isset($_POST['s2_admin'])) && ('user' == $_POST['s2_admin']) ) {
1380
echo "<div id=\"message\" class=\"updated fade\"><p><strong>" . __('Subscription preferences updated.', 'subscribe2') . "</strong></p></div>\n";
1381
$format = 'text';
1382
$post = 'post';
1398
delete_usermeta($user_ID, "s2_cat" . $cat);
1399
}
1400
}
1401
+ update_usermeta($user_ID, 's2_subscribed', '');
1402
} else {
1403
+ if (! is_array($cats)) {
1404
$cats = array($_POST['category']);
1405
}
1406
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
1407
$remove = array_diff($old_cats, $cats);
1408
$new = array_diff($cats, $old_cats);
1409
+ if (! empty($remove)) {
1410
// remove subscription to these cat IDs
1411
foreach ($remove as $id) {
1412
delete_usermeta($user_ID, "s2_cat" .$id);
1413
}
1414
}
1415
+ if (! empty($new)) {
1416
// add subscription to these cat IDs
1417
foreach ($new as $id) {
1418
update_usermeta($user_ID, 's2_cat' . $id, "$id");
1426
echo "<div class=\"wrap\">";
1427
echo "<h2>" . __('Notification Settings', 'subscribe2') . "</h2>\r\n";
1428
echo "<form method=\"post\" action=\"\">";
1429
echo "<input type=\"hidden\" name=\"s2_admin\" value=\"user\" />";
1430
+ if ( defined('S2DIGEST') && FALSE == S2DIGEST ) {
1431
echo __('Receive email as', 'subscribe2') . ": &nbsp;&nbsp;";
1432
echo "<input type=\"radio\" name=\"s2_format\" value=\"html\"";
1433
if ('html' == get_usermeta($user_ID, 's2_format')) {
1449
}
1450
echo " /> $value ";
1451
}
1452
+ echo __('<p>Note: HTML format will always deliver the full post.</p>', 'subscribe2') . "<br /><br />\r\n";
1453
echo __('Automatically subscribe me to newly created categories', 'subscribe2') . ': &nbsp;&nbsp;';
1454
+ echo "<input type=\"radio\" name=\"new_category\" value=\"yes\" ";
1455
+ if ('yes' == get_usermeta($user_ID, 's2_autosub')) {
1456
+ echo "checked=\"yes\" ";
1457
}
1458
echo "/> Yes <input type=\"radio\" name=\"new_category\" value=\"no\" ";
1459
if ('no' == get_usermeta($user_ID, 's2_autosub')) {
1460
echo "checked=\"yes\" ";
1461
}
1462
+ echo "/> No";
1463
1464
// subscribed categories
1465
echo "<h2>" . __('Subscribed Categories', 'subscribe2') . "</h2>\r\n";
1466
+ $this->display_category_form(explode(',', get_usermeta($user_ID, 's2_subscribed')), get_option('s2_reg_override'));
1467
} else {
1468
// we're doing daily digests, so just show
1469
// subscribe / unnsubscribe
1470
echo __('Receive daily summary of new posts?', 'subscribe2') . ': &nbsp;&nbsp;';
1471
+ echo "<input type=\"radio\" name=\"category\" value=\"1\" ";
1472
+ if (get_usermeta($user_ID, 's2_subscribed')) {
1473
+ echo "checked=\"yes\" ";
1474
}
1475
echo "/> Yes <input type=\"radio\" name=\"category\" value=\"\" ";
1476
if (! get_usermeta($user_ID, 's2_subscribed')) {
1492
Display the Write sub-menu
1493
*/
1494
function write_menu() {
1495
// was anything POSTed?
1496
if (isset($_POST['s2_admin']) && ('mail' == $_POST['s2_admin']) ) {
1497
if ('confirmed' == $_POST['what']) {
1498
$recipients = $this->get_public();
1499
} elseif ('unconfirmed' == $_POST['what']) {
1524
// show our form
1525
echo "<div class=\"wrap\"><h2>" . __('Send email to all subscribers', 'subscribe2') . "</h2>\r\n";
1526
echo "<form method=\"post\" action=\"\">\r\n";
1527
echo __('Subject', 'subscribe2') . ": <input type=\"text\" size=\"69\" name=\"subject\" value=\"" . __('A message from ', 'subscribe2') . get_settings('blogname') . "\" /> <br />";
1528
echo "<textarea rows=\"12\" cols=\"75\" name=\"message\"></textarea>";
1529
echo "<br />\r\n";
1542
/* ===== helper functions: forms and stuff ===== */
1543
/**
1544
Display a table of categories with checkboxes
1545
+
1546
Optionally pre-select those categories specified
1547
*/
1548
function display_category_form($selected = array(), $override = 1) {
1549
global $wpdb;
1550
1551
+ $all_cats = $this->get_all_categories('array');
1552
if (0 == $override) {
1553
// registered users are not allowed to subscribe to
1554
// excluded categories
1562
$half = (count($all_cats) / 2);
1563
$i = 0;
1564
$j = 0;
1565
+ echo "<table width=\"100%\" cellspacing=\"2\" cellpadding=\"5\" class=\"editform\">";
1566
+ echo "<tr valign=\"top\"><td width=\"50%\" align=\"left\">";
1567
+ foreach ($all_cats as $cat_ID => $cat_name) {
1568
if ( ($i >= $half) && (0 == $j) ){
1569
+ echo "</td><td width=\"50%\" align=\"left\">";
1570
$j++;
1571
}
1572
if (0 == $j) {
1573
+ echo "<input type=\"checkbox\" name=\"category[]\" value=\"" . $cat_ID . "\"";
1574
+ if (in_array($cat_ID, $selected)) {
1575
echo " checked=\"checked\" ";
1576
}
1577
+ echo " /> " . $cat_name . "<br />\r\n";
1578
} else {
1579
1580
+ echo "<input type=\"checkbox\" name=\"category[]\" value=\"" . $cat_ID . "\"";
1581
+ if (in_array($cat_ID, $selected)) {
1582
echo " checked=\"checked\" ";
1583
}
1584
+ echo " /> " . $cat_name . "<br />\r\n";
1585
}
1586
$i++;
1587
}
1588
+ echo "</td></tr></table>\r\n";
1589
} // end display_category_form()
1590
1591
/**
1602
'unconfirmed' => ' &nbsp;&nbsp;' . __('Unconfirmed', 'subscribe2'),
1603
'registered' => __('Registered Subscribers', 'subscribe2'));
1604
1605
// count the number of subscribers
1606
$count['confirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='1'");
1607
$count['unconfirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='0'");
1614
}
1615
$count['registered'] = $wpdb->get_var("SELECT COUNT(meta_key) FROM $wpdb->usermeta WHERE meta_key='s2_subscribed'");
1616
$count['all'] = ($count['confirmed'] + $count['unconfirmed'] + $count['registered']);
1617
+ foreach ($this->get_all_categories('array') as $cat_ID => $cat_name) {
1618
+ $count[$cat_name] = $wpdb->get_var("SELECT COUNT(meta_value) FROM $wpdb->usermeta WHERE meta_key='s2_cat$cat_ID'");
1619
}
1620
1621
// do have actually have some subscribers?
1632
if (in_array($whom, $exclude)) { continue; }
1633
if (0 == $count[$whom]) { continue; }
1634
1635
+ echo "<option value=\"$whom\"";
1636
if ($whom == $selected) { echo " selected=\"selected\" "; }
1637
echo ">$display (" . ($count[$whom]) . ")</option>\r\n";
1638
}
1639
1640
if ($count['registered'] > 0) {
1641
+ foreach ($this->get_all_categories('array') as $cat_ID => $cat_name) {
1642
+ if (in_array($cat_ID, $exclude)) { continue; }
1643
+ if (0 == $count[$cat_name]) { continue; }
1644
+ echo "<option value=\"$cat_ID\"";
1645
+ if ($cat_ID == $selected) { echo " selected=\"selected\" "; }
1646
+ echo "> &nbsp;&nbsp;$cat_name (" . $count[$cat_name] . ") </option>\r\n";
1647
}
1648
}
1649
echo "</select>";
1652
}
1653
} // end display_subscriber_dropdown()
1654
1655
/* ===== template and filter functions ===== */
1656
/**
1657
Display our form; also handles (un)subscribe requests
1658
*/
1659
function filter($content = '') {
1660
+ if (('' == $content) || (! preg_match('|<!--subscribe2-->|', $content))) { return $content; }
1661
$this->s2form = $this->form;
1662
1663
global $user_ID;
1664
get_currentuserinfo();
1665
if ($user_ID) {
1666
+ $this->s2form = $this->use_profile;
1667
}
1668
if (isset($_POST['s2_action'])) {
1669
global $wpdb, $user_email;
1670
+ if (! is_email($_POST['email'])) {
1671
$this->s2form = $this->form . $this->not_an_email;
1672
} elseif ($this->is_barred($_POST['email'])) {
1673
$this->s2form = $this->form . $this->barred_domain;
1725
1726
global $wpdb;
1727
1728
+ if ( defined('S2PAGE') && 0 !== S2PAGE ) {
1729
return "page_id=" . S2PAGE;
1730
} else {
1731
$id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status='static' LIMIT 1");
1756
} // end template_filter()
1757
1758
/* ===== wp-cron functions ===== */
1759
+ /**
1760
+ Send notifications for any posts that are now visible
1761
+ */
1762
+ function subscribe2_hourly() {
1763
+ $future_posts = get_option('s2_future_posts');
1764
+
1765
+ // if we have no future posts, bail out
1766
+ if (! $future_posts) { return; }
1767
+
1768
+ // this will hold the posts that aren't yet visible
1769
+ $not_yet = array();
1770
+
1771
+ foreach ($future_posts as $post) {
1772
+ if ( current_time('mysql') > $post['date'] ) {
1773
+ // this post is now visible, so let's
1774
+ // send a notification
1775
+ $this->publish($post['id'], 1);
1776
+ } else {
1777
+ array_push($not_yet, $post);
1778
+ }
1779
+ }
1780
+ // are the number of elements in $not_yet
1781
+ // the same as in $future posts?
1782
+ if ( count($not_yet) != count($future_posts) ) {
1783
+ // if not, then some posts have been removed
1784
+ // from $future_posts, and the remainder need
1785
+ // to be recorded back to the database
1786
+ update_option('s2_future_posts', $not_yet);
1787
+ }
1788
+ } // end subscribe2_hourly
1789
+
1790
/**
1791
Send a daily digest of today's new posts
1792
*/
1793
+ function subscribe2_daily() {
1794
global $wpdb;
1795
1796
+ // collect yesterday's posts
1797
+ $yesterday = date('Y-m-d', (get_option('wp_cron_daily_lastrun')-60));
1798
+ $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'");
1799
1800
// do we have any posts?
1801
+ if (! $posts) { return; }
1802
1803
// if we have posts, let's prepare the digest
1804
foreach ($posts as $post) {
1840
}
1841
1842
$author = get_userdata($post->post_author);
1843
+ $this->authorname = $author->display_name;
1844
1845
// do we send as admin, or post author?
1846
+ if ('author' == get_option('s2_sender')) {
1847
// get author details
1848
$user =& $author;
1849
} else {
1852
}
1853
$this->myemail = $user->user_email;
1854
$this->myname = $user->display_name;
1855
+
1856
+ $subject = '[' . stripslashes(get_settings('blogname')) . '] ' . __('Daily Digest', 'subscribe2') . ' ' . $yesterday;
1857
$public = $this->get_public();
1858
$registered = $this->get_registered();
1859
$recipients = array_merge((array)$public, (array)$registered);
1860
+ $mailtext = $this->substitute(stripslashes(get_option('s2_mailtext')));
1861
$body = str_replace('POST', $message, $mailtext);
1862
$this->mail($recipients, $subject, $body);
1863
+ } // end subscribe2_daily
1864
+
1865
+ /**
1866
+ If the to-be-deleted post was future-dated, remove it from the list of future-dated posts
1867
+ */
1868
+ function delete_future($id = 0) {
1869
+ if (0 == $id) { return $id; }
1870
+
1871
+ $future = get_settings('s2_future_posts');
1872
+ // if we have no future-dated posts scheduled, bail out
1873
+ if ( ! $future) {
1874
+ return $id;
1875
+ }
1876
+ foreach ($future as $post) {
1877
+ // is the deleted post in the list of future posts?
1878
+ if ($id == $post['id']) {
1879
+ // skip it
1880
+ continue;
1881
+ } else {
1882
+ // add this to the new list of future posts
1883
+ $new_future[] = $post;
1884
+ }
1885
+ }
1886
+ if ($new_future != $future) {
1887
+ update_option('s2_future_posts', $new_future);
1888
+ }
1889
+ } // end delete_future()
1890
1891
/* ===== Our constructor ===== */
1892
/**
1897
1898
load_plugin_textdomain('subscribe2', 'wp-content/plugins/subscribe2');
1899
1900
// do we need to install anything?
1901
$this->public = $table_prefix . "subscribe2";
1902
+ if(mysql_query("SELECT COUNT(*) FROM ".$this->public)==FALSE) { $this->install(); }
1903
//do we need to upgrade anything?
1904
+ $this->version = get_option('s2_version');
1905
+ if ($this->version !== S2VERSION) { $this->upgrade(); }
1906
1907
if (isset($_GET['s2'])) {
1908
// someone is confirming a request
1911
add_filter('the_content', array(&$this, 'confirm'));
1912
}
1913
1914
add_action('admin_menu', array(&$this, 'admin_menu'));
1915
+ add_action('publish_post', array(&$this, 'publish'));
1916
+ add_action('edit_post', array(&$this, 'edit'));
1917
+ add_action('private_to_published', array(&$this, 'private2publish'));
1918
add_action('user_register', array(&$this, 'register'));
1919
add_action('create_category', array(&$this, 'autosub_new_category'));
1920
add_filter('the_content', array(&$this, 'filter'));
1921
+ add_action('wp_cron_hourly', array(&$this, 'subscribe2_hourly'));
1922
+ if ( defined('S2DIGEST') && TRUE == S2DIGEST ) {
1923
+ add_action('wp_cron_daily', array(&$this, 'subscribe2_daily'));
1924
+ }
1925
+ add_action('delete_post', array(&$this, 'delete_future'));
1926
+ // add our button
1927
+ if ('1' == get_option('s2_show_button')) {
1928
+ add_action('init', array(&$this, 's2_button_init'));
1929
+ add_action('marker_css', array(&$this, 'subscribe2_css'));
1930
}
1931
// load our strings
1932
$this->load_strings();
1933
} // end subscribe2()
1969
var $confirm_subject = '';
1970
var $options_saved = '';
1971
var $options_reset = '';
1972
+
1973
} // end class subscribe2
1974
+ $mysubscribe2 = new subscribe2();
1975
?>
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,421 @@ 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