Version Description
Download this release
Release Info
Developer | MattyRob |
Plugin | Subscribe2 |
Version | 2.2 |
Comparing to | |
See all releases |
Code changes from version 3.0 to 2.2
- ReadMe.txt +1 -100
- buttonsnap.php → subscribe2/buttonsnap.php +6 -7
- subscribe2/include.php +0 -49
- subscribe2/subscribe2.php +1690 -2086
- subscribe2/subscribe2.pot +100 -236
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.
|
7 |
|
8 |
Sends a list of subscribers an email notification when new posts are published to your blog
|
9 |
|
@@ -40,21 +40,6 @@ This token will automatically be replaced by the subscription form, and will dis
|
|
40 |
|
41 |
== Frequently Asked Questions ==
|
42 |
|
43 |
-
= Which version should I be using, I'm on WordPress x.x.x? =
|
44 |
-
WordPress 2.0.x will be supported until 2010. Subscribe2 will remain supported (but not actively developed) until WordPress 2.0.x is no longer supported. For WordPress 2.0.x use the Subscribe code from the 2.x stable.
|
45 |
-
|
46 |
-
WordPress 2.1.x and 2.2.x are also supported. For the latest information visit http://subscribe2.wordpress.com. For versions of WordPress use Subscribe2 code from the 3.x stable.
|
47 |
-
|
48 |
-
Finally, there is a development version for WordPress 2.3 but as WordPress 2.3 is not recommended for active websites you should only get this code from the branch if you are testing it.
|
49 |
-
|
50 |
-
= How do I upgrade from a previous version? =
|
51 |
-
If you are upgrading from any 2.1.x version of subscribe2, please delete both the /subscribe.php and /wp-content/plugins/subscribe2.php files before copying the new files into place. Your subscriber list will remain intact, and your options should be preserved. Now create a WordPress Page as described above.
|
52 |
-
|
53 |
-
= Why doesn't the form appear in my WordPress page? =
|
54 |
-
This is usually caused by one of two things. Firstly, it is possible that the form is there but as you haven't logged out of WordPress yourself you are seeing a message about managing your profile instead. Try logging out and see if it appears.
|
55 |
-
|
56 |
-
Secondly, make sure that the token (<!--subscribe2-->) is correctly entered in your page with a blank line above and below. The easient way to do this is to deactivate the plugin, visit your WordPress page and view the source. The token should be contained in the source code of the page. If it is not there you either have not correctly entered the token or you have another plguin that is stripping the token from the page code.
|
57 |
-
|
58 |
= Some or all email notifications fail to send, why? =
|
59 |
In the first instance check this with your hosting provider, they have access to your server logs and will be able to tell you where and why emails are being blocked.
|
60 |
|
@@ -68,87 +53,3 @@ Reminder: because subscribe2 places all recipients in BCC fields, and places the
|
|
68 |
|
69 |
Batches will occur for each group of message as described above. A site on Dreamhost with many public and registered subscribers could conceivably generate a lot of email for your own inbox.
|
70 |
|
71 |
-
== Screenshots ==
|
72 |
-
|
73 |
-
1. The Write->Subscribers admin page generated by the plugin.
|
74 |
-
2. The Manage->Subscribers admin page generated by the plugin.
|
75 |
-
3. The Users->Subscriptions admin page generated by the plugin.
|
76 |
-
4. The Options->Subscribe2 admin page generated by the plugin.
|
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
|
115 |
-
* Added user feedback messages to profile area
|
116 |
-
* Added 'Authorname' to the list of message substitutions in email messages
|
117 |
-
* Fixed name and email substitution in Digest Mails
|
118 |
-
* Fixed stripslashes issue in email subjects
|
119 |
-
* Added new 'Action' token for confirmation emails
|
120 |
-
|
121 |
-
Version 2.7 by Matthew Robinson
|
122 |
-
|
123 |
-
* Link to post in HTML emails is now functional
|
124 |
-
* Fixed bug in Bulk Management so it works when first loaded
|
125 |
-
* Ability to auto subscribe newly registering users
|
126 |
-
* Added additional email header information
|
127 |
-
|
128 |
-
Version 2.6 by Matthew Robinson
|
129 |
-
|
130 |
-
* Fixed email headers to comply with RFC2822 standard (after breaking them in the first place)
|
131 |
-
* Impoved XHTML compliance of user feedback messages and subscription form when presented on a blog
|
132 |
-
* Tidied up presentation of the code a little
|
133 |
-
* Cached some additional variables
|
134 |
-
|
135 |
-
Version 2.5 by Matthew Robinson
|
136 |
-
|
137 |
-
* Added functionality to Bulk Manage registered users subscriptions
|
138 |
-
|
139 |
-
Version 2.4 by Matthew Robinson
|
140 |
-
|
141 |
-
* Added functionality to block user specified domains from public subscription
|
142 |
-
|
143 |
-
Version 2.3 by Matthew Robinson
|
144 |
-
|
145 |
-
* Added functionality to allow for Subscribe2 Sidebar Widget
|
146 |
-
* Added functionality to block public email subscriptins from domains defined under Options
|
147 |
-
* Added functionality to send an email reminder to all unconfirmed public subscriber
|
148 |
-
* Added removal of html entities (for example ©) from plaintext emails
|
149 |
-
* Replaced spaces with tabs in Plugin format
|
150 |
-
* Minor changes to admin layout to match WordPress admin function layout
|
151 |
-
|
152 |
-
Version 2.2
|
153 |
-
|
154 |
-
* By Scott Merrill, see http://www.skippy.net/blog/category/wordpress/plugins/subscribe2/
|
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.0
|
7 |
|
8 |
Sends a list of subscribers an email notification when new posts are published to your blog
|
9 |
|
40 |
|
41 |
== Frequently Asked Questions ==
|
42 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
= Some or all email notifications fail to send, why? =
|
44 |
In the first instance check this with your hosting provider, they have access to your server logs and will be able to tell you where and why emails are being blocked.
|
45 |
|
53 |
|
54 |
Batches will occur for each group of message as described above. A site on Dreamhost with many public and registered subscribers could conceivably generate a lot of email for your own inbox.
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
buttonsnap.php → subscribe2/buttonsnap.php
RENAMED
@@ -3,7 +3,7 @@
|
|
3 |
BUTTONSNAP CLASS LIBRARY By Owen Winkler
|
4 |
http://asymptomatic.net
|
5 |
WordPress Downloads are at http://redalt.com/downloads
|
6 |
-
Version: 1.3
|
7 |
*******************************************************************************/
|
8 |
|
9 |
if (!class_exists('buttonsnap')) :
|
@@ -380,16 +380,15 @@ MORESCRIPT;
|
|
380 |
$this->markers[$marker] = $cssclass;
|
381 |
}
|
382 |
|
383 |
-
function basename(
|
384 |
{
|
385 |
-
|
386 |
-
$name = preg_replace('/^.*wp-content[\\\\\/]plugins[\\\\\/]/', '', $src);
|
387 |
return str_replace('\\', '/', $name);
|
388 |
}
|
389 |
|
390 |
-
function plugin_uri(
|
391 |
{
|
392 |
-
return get_settings('siteurl') . '/wp-content/plugins/' . $this->basename(
|
393 |
}
|
394 |
|
395 |
function include_up($filename) {
|
@@ -431,7 +430,7 @@ function buttonsnap_jsbutton_page($imgsrc, $alttext, $js) { global $buttonsnap;
|
|
431 |
function buttonsnap_ajaxbutton_page($imgsrc, $alttext, $hook) { global $buttonsnap; return $buttonsnap->ajaxbutton($imgsrc, $alttext, $hook, 'page');}
|
432 |
function buttonsnap_separator_page() { global $buttonsnap; return $buttonsnap->separator('page');}
|
433 |
|
434 |
-
function buttonsnap_dirname(
|
435 |
function buttonsnap_register_marker($marker, $cssclass) {global $buttonsnap; return $buttonsnap->register_marker($marker, $cssclass);}
|
436 |
endif;
|
437 |
if (!defined('ABSPATH')) {
|
3 |
BUTTONSNAP CLASS LIBRARY By Owen Winkler
|
4 |
http://asymptomatic.net
|
5 |
WordPress Downloads are at http://redalt.com/downloads
|
6 |
+
Version: 1.3
|
7 |
*******************************************************************************/
|
8 |
|
9 |
if (!class_exists('buttonsnap')) :
|
380 |
$this->markers[$marker] = $cssclass;
|
381 |
}
|
382 |
|
383 |
+
function basename()
|
384 |
{
|
385 |
+
$name = preg_replace('/^.*wp-content[\\\\\/]plugins[\\\\\/]/', '', __FILE__);
|
|
|
386 |
return str_replace('\\', '/', $name);
|
387 |
}
|
388 |
|
389 |
+
function plugin_uri()
|
390 |
{
|
391 |
+
return get_settings('siteurl') . '/wp-content/plugins/' . $this->basename();
|
392 |
}
|
393 |
|
394 |
function include_up($filename) {
|
430 |
function buttonsnap_ajaxbutton_page($imgsrc, $alttext, $hook) { global $buttonsnap; return $buttonsnap->ajaxbutton($imgsrc, $alttext, $hook, 'page');}
|
431 |
function buttonsnap_separator_page() { global $buttonsnap; return $buttonsnap->separator('page');}
|
432 |
|
433 |
+
function buttonsnap_dirname() {global $buttonsnap; return dirname($buttonsnap->plugin_uri());}
|
434 |
function buttonsnap_register_marker($marker, $cssclass) {global $buttonsnap; return $buttonsnap->register_marker($marker, $cssclass);}
|
435 |
endif;
|
436 |
if (!defined('ABSPATH')) {
|
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
@@ -1,2086 +1,1690 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Plugin Name: Subscribe2
|
4 |
-
Plugin URI: http://
|
5 |
-
Description: Notifies an email list when new entries are posted.
|
6 |
-
Version: 2.
|
7 |
-
Author:
|
8 |
-
Author URI: http://
|
9 |
-
*/
|
10 |
-
|
11 |
-
/*
|
12 |
-
Copyright (C)
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
GNU General Public License
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
// change this
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
//
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
//
|
46 |
-
|
47 |
-
|
48 |
-
//
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
.
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
$
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
$
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
}
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
$this->
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
if (
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
$
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
if (
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
//
|
309 |
-
//
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
//
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
//
|
345 |
-
//
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
// we
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
}
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
$
|
427 |
-
$this->
|
428 |
-
|
429 |
-
$
|
430 |
-
$this->
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
$
|
444 |
-
|
445 |
-
$
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
}
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
$
|
479 |
-
}
|
480 |
-
|
481 |
-
}
|
482 |
-
$
|
483 |
-
|
484 |
-
|
485 |
-
$
|
486 |
-
|
487 |
-
|
488 |
-
$body =
|
489 |
-
$
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
$
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
}
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
if ($
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
$
|
669 |
-
|
670 |
-
$
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
if (
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
$
|
744 |
-
|
745 |
-
$
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
$
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
$
|
785 |
-
}
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
global $wpdb;
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
return
|
810 |
-
}
|
811 |
-
} // end
|
812 |
-
|
813 |
-
/**
|
814 |
-
|
815 |
-
|
816 |
-
function
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
$
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
$
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
if ('
|
1122 |
-
$
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
$
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
$
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
|
1175 |
-
|
1176 |
-
|
1177 |
-
|
1178 |
-
|
1179 |
-
|
1180 |
-
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
|
1190 |
-
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
|
1195 |
-
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
1214 |
-
|
1215 |
-
|
1216 |
-
|
1217 |
-
|
1218 |
-
|
1219 |
-
|
1220 |
-
|
1221 |
-
|
1222 |
-
|
1223 |
-
|
1224 |
-
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
|
1230 |
-
|
1231 |
-
|
1232 |
-
|
1233 |
-
|
1234 |
-
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
echo "</
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
1263 |
-
|
1264 |
-
|
1265 |
-
|
1266 |
-
|
1267 |
-
|
1268 |
-
|
1269 |
-
|
1270 |
-
|
1271 |
-
|
1272 |
-
|
1273 |
-
|
1274 |
-
|
1275 |
-
|
1276 |
-
|
1277 |
-
|
1278 |
-
|
1279 |
-
|
1280 |
-
|
1281 |
-
|
1282 |
-
|
1283 |
-
|
1284 |
-
|
1285 |
-
|
1286 |
-
|
1287 |
-
|
1288 |
-
|
1289 |
-
|
1290 |
-
|
1291 |
-
|
1292 |
-
|
1293 |
-
|
1294 |
-
|
1295 |
-
|
1296 |
-
|
1297 |
-
|
1298 |
-
|
1299 |
-
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
-
|
1308 |
-
|
1309 |
-
|
1310 |
-
|
1311 |
-
|
1312 |
-
|
1313 |
-
|
1314 |
-
|
1315 |
-
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
|
1322 |
-
|
1323 |
-
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
1328 |
-
|
1329 |
-
|
1330 |
-
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
1334 |
-
|
1335 |
-
|
1336 |
-
|
1337 |
-
|
1338 |
-
|
1339 |
-
|
1340 |
-
|
1341 |
-
|
1342 |
-
|
1343 |
-
|
1344 |
-
|
1345 |
-
|
1346 |
-
|
1347 |
-
|
1348 |
-
|
1349 |
-
|
1350 |
-
|
1351 |
-
|
1352 |
-
|
1353 |
-
|
1354 |
-
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
-
|
1367 |
-
}
|
1368 |
-
echo
|
1369 |
-
|
1370 |
-
|
1371 |
-
|
1372 |
-
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
|
1379 |
-
}
|
1380 |
-
|
1381 |
-
if (
|
1382 |
-
|
1383 |
-
|
1384 |
-
|
1385 |
-
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
1389 |
-
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
|
1394 |
-
|
1395 |
-
|
1396 |
-
|
1397 |
-
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
|
1406 |
-
|
1407 |
-
|
1408 |
-
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
|
1418 |
-
|
1419 |
-
|
1420 |
-
|
1421 |
-
|
1422 |
-
|
1423 |
-
|
1424 |
-
|
1425 |
-
|
1426 |
-
|
1427 |
-
|
1428 |
-
|
1429 |
-
|
1430 |
-
|
1431 |
-
|
1432 |
-
|
1433 |
-
|
1434 |
-
|
1435 |
-
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
1442 |
-
|
1443 |
-
|
1444 |
-
|
1445 |
-
|
1446 |
-
|
1447 |
-
|
1448 |
-
|
1449 |
-
|
1450 |
-
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
}
|
1456 |
-
|
1457 |
-
|
1458 |
-
|
1459 |
-
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
//
|
1464 |
-
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
1469 |
-
|
1470 |
-
|
1471 |
-
|
1472 |
-
if
|
1473 |
-
|
1474 |
-
|
1475 |
-
|
1476 |
-
|
1477 |
-
|
1478 |
-
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
-
|
1487 |
-
|
1488 |
-
|
1489 |
-
|
1490 |
-
|
1491 |
-
|
1492 |
-
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
1516 |
-
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
|
1531 |
-
|
1532 |
-
|
1533 |
-
|
1534 |
-
|
1535 |
-
|
1536 |
-
|
1537 |
-
|
1538 |
-
|
1539 |
-
|
1540 |
-
|
1541 |
-
|
1542 |
-
|
1543 |
-
|
1544 |
-
|
1545 |
-
|
1546 |
-
|
1547 |
-
|
1548 |
-
|
1549 |
-
|
1550 |
-
|
1551 |
-
|
1552 |
-
|
1553 |
-
|
1554 |
-
|
1555 |
-
|
1556 |
-
|
1557 |
-
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
|
1562 |
-
|
1563 |
-
|
1564 |
-
$
|
1565 |
-
|
1566 |
-
|
1567 |
-
|
1568 |
-
|
1569 |
-
|
1570 |
-
|
1571 |
-
|
1572 |
-
|
1573 |
-
|
1574 |
-
|
1575 |
-
|
1576 |
-
|
1577 |
-
|
1578 |
-
|
1579 |
-
|
1580 |
-
|
1581 |
-
|
1582 |
-
|
1583 |
-
|
1584 |
-
|
1585 |
-
|
1586 |
-
|
1587 |
-
|
1588 |
-
|
1589 |
-
|
1590 |
-
|
1591 |
-
|
1592 |
-
|
1593 |
-
|
1594 |
-
|
1595 |
-
|
1596 |
-
|
1597 |
-
|
1598 |
-
|
1599 |
-
|
1600 |
-
|
1601 |
-
|
1602 |
-
|
1603 |
-
|
1604 |
-
|
1605 |
-
|
1606 |
-
|
1607 |
-
|
1608 |
-
|
1609 |
-
|
1610 |
-
|
1611 |
-
/**
|
1612 |
-
|
1613 |
-
*/
|
1614 |
-
function
|
1615 |
-
global $
|
1616 |
-
|
1617 |
-
|
1618 |
-
|
1619 |
-
|
1620 |
-
|
1621 |
-
|
1622 |
-
|
1623 |
-
|
1624 |
-
|
1625 |
-
|
1626 |
-
|
1627 |
-
|
1628 |
-
|
1629 |
-
|
1630 |
-
|
1631 |
-
|
1632 |
-
|
1633 |
-
|
1634 |
-
|
1635 |
-
|
1636 |
-
|
1637 |
-
|
1638 |
-
|
1639 |
-
|
1640 |
-
|
1641 |
-
|
1642 |
-
}
|
1643 |
-
|
1644 |
-
|
1645 |
-
|
1646 |
-
|
1647 |
-
|
1648 |
-
|
1649 |
-
|
1650 |
-
|
1651 |
-
|
1652 |
-
|
1653 |
-
|
1654 |
-
|
1655 |
-
|
1656 |
-
|
1657 |
-
|
1658 |
-
|
1659 |
-
|
1660 |
-
|
1661 |
-
|
1662 |
-
|
1663 |
-
|
1664 |
-
|
1665 |
-
|
1666 |
-
|
1667 |
-
|
1668 |
-
|
1669 |
-
|
1670 |
-
|
1671 |
-
|
1672 |
-
|
1673 |
-
|
1674 |
-
|
1675 |
-
|
1676 |
-
|
1677 |
-
|
1678 |
-
|
1679 |
-
|
1680 |
-
|
1681 |
-
|
1682 |
-
|
1683 |
-
|
1684 |
-
|
1685 |
-
|
1686 |
-
|
1687 |
-
|
1688 |
-
|
1689 |
-
|
1690 |
-
|
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 |
-
/**
|
1722 |
-
Display a drop-down form to select subscribers
|
1723 |
-
$selected is the option to select
|
1724 |
-
$submit is the text to use on the Submit button
|
1725 |
-
*/
|
1726 |
-
function display_subscriber_dropdown ($selected = 'registered', $submit = '', $exclude = array()) {
|
1727 |
-
global $wpdb;
|
1728 |
-
|
1729 |
-
$who = array('all' => __('All Subscribers', 'subscribe2'),
|
1730 |
-
'public' => __('Public Subscribers', 'subscribe2'),
|
1731 |
-
'confirmed' => ' ' . __('Confirmed', 'subscribe2'),
|
1732 |
-
'unconfirmed' => ' ' . __('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'");
|
1740 |
-
if (in_array('unconfirmed', $exclude)) {
|
1741 |
-
$count['public'] = $count['confirmed'];
|
1742 |
-
} elseif (in_array('confirmed', $exclude)) {
|
1743 |
-
$count['public'] = $count['unconfirmed'];
|
1744 |
-
} else {
|
1745 |
-
$count['public'] = ($count['confirmed'] + $count['unconfirmed']);
|
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?
|
1754 |
-
if ( (0 == $count['confirmed']) && (0 == $count['unconfirmed']) && (0 == $count['registered']) ) {
|
1755 |
-
// no? bail out
|
1756 |
-
return;
|
1757 |
-
}
|
1758 |
-
|
1759 |
-
if (false !== $submit) {
|
1760 |
-
echo "<form method=\"post\" action=\"\">";
|
1761 |
-
}
|
1762 |
-
echo "<select name=\"what\">\r\n";
|
1763 |
-
foreach ($who as $whom => $display) {
|
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 "> " . $cat->cat_name . " (" . $count[$cat->cat_name] . ") </option>\r\n";
|
1778 |
-
}
|
1779 |
-
}
|
1780 |
-
echo "</select>";
|
1781 |
-
if (false !== $submit) {
|
1782 |
-
echo "<span class=\"submit\"><input type=\"submit\" value=\"$submit\" /></span></form>\r\n";
|
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;
|
1834 |
-
} else {
|
1835 |
-
$this->email = $_POST['email'];
|
1836 |
-
// does the supplied email belong to a registered user?
|
1837 |
-
$check = $wpdb->get_var("SELECT user_email FROM $wpdb->users WHERE user_email = '$this->email'");
|
1838 |
-
if ('' != $check) {
|
1839 |
-
// this is a registered email
|
1840 |
-
$this->s2form = $this->please_log_in;
|
1841 |
-
} else {
|
1842 |
-
// this is not a registered email
|
1843 |
-
// what should we do?
|
1844 |
-
if ('subscribe' == $_POST['s2_action']) {
|
1845 |
-
// someone is trying to subscribe
|
1846 |
-
// lets see if they've tried to subscribe previously
|
1847 |
-
if ('1' !== $this->is_public($this->email)) {
|
1848 |
-
// the user is unknown or inactive
|
1849 |
-
$this->add();
|
1850 |
-
$this->send_confirm('add');
|
1851 |
-
// set a variable to denote that we've already run, and shouldn't run again
|
1852 |
-
$this->filtered = 1; //set this to not send duplicate emails
|
1853 |
-
$this->s2form = $this->confirmation_sent;
|
1854 |
-
} else {
|
1855 |
-
// they're already subscribed
|
1856 |
-
$this->s2form = $this->already_subscribed;
|
1857 |
-
}
|
1858 |
-
$this->action = 'subscribe';
|
1859 |
-
} elseif ('unsubscribe' == $_POST['s2_action']) {
|
1860 |
-
// is this email a subscriber?
|
1861 |
-
if (false == $this->is_public($this->email)) {
|
1862 |
-
$this->s2form = $this->form . $this->not_subscribed;
|
1863 |
-
} else {
|
1864 |
-
$this->send_confirm('del');
|
1865 |
-
// set a variable to denote that we've already run, and shouldn't run again
|
1866 |
-
$this->filtered = 1;
|
1867 |
-
$this->s2form = $this->confirmation_sent;
|
1868 |
-
}
|
1869 |
-
$this->action='unsubscribe';
|
1870 |
-
}
|
1871 |
-
}
|
1872 |
-
}
|
1873 |
-
}
|
1874 |
-
return preg_replace('|(<p>)(\n)*<!--subscribe2-->(\n)*(</p>)|', $this->s2form, $content);
|
1875 |
-
} // end filter()
|
1876 |
-
|
1877 |
-
/**
|
1878 |
-
Overrides the default query when handling a (un)subscription confirmation
|
1879 |
-
This is basically a trick: if the s2 variable is in the query string, just grab the first static page
|
1880 |
-
and override it's contents later with title_filter() and template_filter()
|
1881 |
-
*/
|
1882 |
-
function query_filter() {
|
1883 |
-
// don't interfere if we've already done our thing
|
1884 |
-
if (1 == $this->filtered) { return; }
|
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");
|
1892 |
-
if ($id) {
|
1893 |
-
return "page_id=$id";
|
1894 |
-
} else {
|
1895 |
-
return "showposts=1";
|
1896 |
-
}
|
1897 |
-
}
|
1898 |
-
} // end query_filter()
|
1899 |
-
|
1900 |
-
/**
|
1901 |
-
Overrides the page title
|
1902 |
-
*/
|
1903 |
-
function title_filter() {
|
1904 |
-
// don't interfere if we've already done our thing
|
1905 |
-
if (1 == $this->filtered) { return; }
|
1906 |
-
return __('Subscription Confirmation', 'subscribe2');
|
1907 |
-
} // end title_filter()
|
1908 |
-
|
1909 |
-
/**
|
1910 |
-
Override the template filter to make sure a special template is not used
|
1911 |
-
*/
|
1912 |
-
function template_filter() {
|
1913 |
-
// don't interfere if we've already done our thing
|
1914 |
-
if (1 == $this->filtered) { return; }
|
1915 |
-
return;
|
1916 |
-
} // end template_filter()
|
1917 |
-
|
1918 |
-
/* ===== wp-cron functions ===== */
|
1919 |
-
/**
|
1920 |
-
Send a daily digest of today's new posts
|
1921 |
-
*/
|
1922 |
-
function subscribe2_cron() {
|
1923 |
-
global $wpdb;
|
1924 |
-
|
1925 |
-
// collect posts
|
1926 |
-
$now = date('Y-m-d H:i:s', time());
|
1927 |
-
$prev = $this->subscribe2_options['last_s2cron'];
|
1928 |
-
$posts = $wpdb->get_results("SELECT ID, post_title, post_excerpt, post_content FROM $wpdb->posts WHERE post_date >= '$prev' AND post_date < '$now' AND post_status='publish' AND post_type='post'");
|
1929 |
-
|
1930 |
-
// update last_s2cron execution time before completing or bailing
|
1931 |
-
$this->subscribe2_options['last_s2cron'] = $now;
|
1932 |
-
update_option('subscribe2_options', $this->subscribe2_options);
|
1933 |
-
|
1934 |
-
// do we have any posts?
|
1935 |
-
if (empty($posts)) { return; }
|
1936 |
-
|
1937 |
-
// if we have posts, let's prepare the digest
|
1938 |
-
foreach ($posts as $post) {
|
1939 |
-
$post_cats = wp_get_post_cats('1', $post->ID);
|
1940 |
-
$post_cats_string = implode(',', $post_cats);
|
1941 |
-
$check = false;
|
1942 |
-
// is the current post assigned to any categories
|
1943 |
-
// which should not generate a notification email?
|
1944 |
-
foreach (explode(',', $this->get_excluded_cats()) as $cat) {
|
1945 |
-
if (in_array($cat, $post_cats)) {
|
1946 |
-
$check = true;
|
1947 |
-
}
|
1948 |
-
}
|
1949 |
-
// if this post is in an excluded category,
|
1950 |
-
// don't include it in the digest
|
1951 |
-
if ($check) {
|
1952 |
-
continue;
|
1953 |
-
}
|
1954 |
-
$message .= $post->post_title . "\r\n";
|
1955 |
-
$message .= get_permalink($post->ID) . "\r\n";
|
1956 |
-
$excerpt = $post->post_excerpt;
|
1957 |
-
if ('' == $excerpt) {
|
1958 |
-
// no excerpt, is there a <!--more--> ?
|
1959 |
-
if (false !== strpos($post->post_content, '<!--more-->')) {
|
1960 |
-
list($excerpt, $more) = explode('<!--more-->', $plaintext, 2);
|
1961 |
-
// strip leading and trailing whitespace
|
1962 |
-
$excerpt = trim($excerpt);
|
1963 |
-
} else {
|
1964 |
-
$excerpt = strip_tags($post->post_content);
|
1965 |
-
$words = explode(' ', $excerpt, 56);
|
1966 |
-
if (count($words) > 55) {
|
1967 |
-
array_pop($words);
|
1968 |
-
array_push($words, '[...]');
|
1969 |
-
$excerpt = implode(' ', $words);
|
1970 |
-
}
|
1971 |
-
}
|
1972 |
-
}
|
1973 |
-
$message .= $excerpt . "\r\n\r\n";
|
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 {
|
1983 |
-
// get admin detailts
|
1984 |
-
$user = get_userdata(1);
|
1985 |
-
}
|
1986 |
-
$this->myemail = $user->user_email;
|
1987 |
-
$this->myname = $user->display_name;
|
1988 |
-
|
1989 |
-
$scheds = (array) wp_get_schedules();
|
1990 |
-
$email_freq = $this->subscribe2_options['email_freq'];
|
1991 |
-
$display = $scheds[$email_freq]['display'];
|
1992 |
-
$subject = '[' . stripslashes(get_settings('blogname')) . '] ' . $display . ' ' . __('Digest Email', 'subscribe2');
|
1993 |
-
$public = $this->get_public();
|
1994 |
-
$registered = $this->get_registered();
|
1995 |
-
$recipients = array_merge((array)$public, (array)$registered);
|
1996 |
-
$mailtext = $this->substitute(stripslashes($this->subscribe2_options['mailtext']));
|
1997 |
-
$body = str_replace('POST', $message, $mailtext);
|
1998 |
-
$this->mail($recipients, $subject, $body);
|
1999 |
-
} // end subscribe2_cron
|
2000 |
-
|
2001 |
-
/* ===== Our constructor ===== */
|
2002 |
-
/**
|
2003 |
-
Subscribe2 constructor
|
2004 |
-
*/
|
2005 |
-
function subscribe2() {
|
2006 |
-
global $table_prefix;
|
2007 |
-
|
2008 |
-
load_plugin_textdomain('subscribe2', 'wp-content/plugins/subscribe2');
|
2009 |
-
|
2010 |
-
// load the options
|
2011 |
-
$this->subscribe2_options = array();
|
2012 |
-
$this->subscribe2_options = get_option('subscribe2_options');
|
2013 |
-
|
2014 |
-
// do we need to install anything?
|
2015 |
-
$this->public = $table_prefix . "subscribe2";
|
2016 |
-
if(mysql_query("SELECT COUNT(*) FROM ".$this->public)==FALSE) { $this->install(); }
|
2017 |
-
//do we need to upgrade anything?
|
2018 |
-
if ($this->subscribe2_options['version'] !== S2VERSION) {
|
2019 |
-
$this->upgrade();
|
2020 |
-
}
|
2021 |
-
|
2022 |
-
if (isset($_GET['s2'])) {
|
2023 |
-
// someone is confirming a request
|
2024 |
-
add_filter('query_string', array(&$this, 'query_filter'));
|
2025 |
-
add_filter('the_title', array(&$this, 'title_filter'));
|
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()
|
2047 |
-
|
2048 |
-
/* ===== our variables ===== */
|
2049 |
-
// cache variables
|
2050 |
-
var $version = '';
|
2051 |
-
var $all_public = '';
|
2052 |
-
var $all_unconfirmed = '';
|
2053 |
-
var $excluded_cats = '';
|
2054 |
-
var $post_title = '';
|
2055 |
-
var $permalink = '';
|
2056 |
-
var $myname = '';
|
2057 |
-
var $myemail = '';
|
2058 |
-
var $s2_subject = '[BLOGNAME] TITLE';
|
2059 |
-
var $signup_dates = array();
|
2060 |
-
var $private = false;
|
2061 |
-
var $filtered = 0;
|
2062 |
-
|
2063 |
-
// state variables used to affect processing
|
2064 |
-
var $action = '';
|
2065 |
-
var $email = '';
|
2066 |
-
var $message = '';
|
2067 |
-
var $error = '';
|
2068 |
-
|
2069 |
-
// some messages
|
2070 |
-
var $please_log_in = '';
|
2071 |
-
var $use_profile = '';
|
2072 |
-
var $confirmation_sent = '';
|
2073 |
-
var $already_subscribed = '';
|
2074 |
-
var $not_subscribed ='';
|
2075 |
-
var $not_an_email = '';
|
2076 |
-
var $barred_domain = '';
|
2077 |
-
var $mail_sent = '';
|
2078 |
-
var $form = '';
|
2079 |
-
var $no_such_email = '';
|
2080 |
-
var $added = '';
|
2081 |
-
var $deleted = '';
|
2082 |
-
var $confirm_subject = '';
|
2083 |
-
var $options_saved = '';
|
2084 |
-
var $options_reset = '';
|
2085 |
-
} // end class subscribe2
|
2086 |
-
?>
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Plugin Name: Subscribe2
|
4 |
+
Plugin URI: http://www.skippy.net/blog/plugins
|
5 |
+
Description: Notifies an email list when new entries are posted.
|
6 |
+
Version: 2.2.2
|
7 |
+
Author: Scott Merrill
|
8 |
+
Author URI: http://www.skippy.net/
|
9 |
+
*/
|
10 |
+
|
11 |
+
/*
|
12 |
+
Copyright (C) 2005 Scott Merrill (skippy@skippy.net)
|
13 |
+
|
14 |
+
This program is free software; you can redistribute it and/or
|
15 |
+
modify it under the terms of the GNU General Public License
|
16 |
+
as published by the Free Software Foundation; either version 2
|
17 |
+
of the License, or (at your option) any later version.
|
18 |
+
|
19 |
+
This program is distributed in the hope that it will be useful,
|
20 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
21 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
22 |
+
GNU General Public License for more details.
|
23 |
+
|
24 |
+
You should have received a copy of the GNU General Public License
|
25 |
+
along with this program; if not, write to the Free Software
|
26 |
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
27 |
+
|
28 |
+
http://www.gnu.org/licenses/gpl.html
|
29 |
+
*/
|
30 |
+
|
31 |
+
// use Owen's excellent ButtonSnap library
|
32 |
+
include('buttonsnap.php');
|
33 |
+
|
34 |
+
// change this to TRUE if you're on Dreamhost
|
35 |
+
// (or any other host that limits the number of recipients
|
36 |
+
// permitted on each outgoing email message)
|
37 |
+
define('DREAMHOST', FALSE);
|
38 |
+
|
39 |
+
// by default, subscribe2 grabs the first page from your database for use
|
40 |
+
// when displaying the confirmation screen to public subscribers.
|
41 |
+
// You can override this by specifying a page ID below.
|
42 |
+
define('S2PAGE', '0');
|
43 |
+
|
44 |
+
// change this to TRUE if you want a daily digest of the day's posts
|
45 |
+
// send to your subscribers
|
46 |
+
define('S2DIGEST', FALSE);
|
47 |
+
|
48 |
+
// our version number. Don't touch.
|
49 |
+
define('S2VERSION', '2.2.1');
|
50 |
+
|
51 |
+
// start our class
|
52 |
+
class subscribe2 {
|
53 |
+
// variables and constructor are declared at the end
|
54 |
+
|
55 |
+
/**
|
56 |
+
Load all our strings
|
57 |
+
*/
|
58 |
+
function load_strings() {
|
59 |
+
// adjust the output of Subscribe2 here
|
60 |
+
|
61 |
+
$this->please_log_in = __('Please log in to manage your subscription options.', 'subscribe2') . "<br /><a href='" . get_settings('siteurl') . "/wp-login.php'>" . get_settings('siteurl') . "/wp-login.php</a>";
|
62 |
+
|
63 |
+
$this->use_profile = __('You may manage your subscription options from your profile.', 'subscribe2') . "<br /><a href='" . get_settings('siteurl') . "/wp-admin/profile.php?page=subscribe2/subscribe2.php'>" . __('Click here to manage your subscription settings', 'subscribe2') . '</a>.';
|
64 |
+
|
65 |
+
$this->confirmation_sent = __('A confirmation message is on its way!', 'subscribe2');
|
66 |
+
|
67 |
+
$this->already_subscribed = __('That email address is already subscribed.', 'subscribe2');
|
68 |
+
|
69 |
+
$this->not_subscribed = __('That email address is not subscribed.', 'subscribe2');
|
70 |
+
|
71 |
+
$this->not_an_email = __('Sorry, but that does not look like an email address to me.', 'subscribe2');
|
72 |
+
|
73 |
+
$this->mail_sent = __('Message sent!', 'subscribe2');
|
74 |
+
|
75 |
+
$this->form = "</p><form method='post' action=''><p>" . __('Your email:', 'subscribe2') . " <input type='text' name='email' value='' size='20' /> <br /><input type='radio' name='s2_action' value='subscribe' checked='checked' /> " . __('subscribe', 'subscribe2') . " <input type='radio' name='s2_action' value='unsubscribe' /> " . __('unsubscribe', 'subscribe2') . "  <input type='submit' value='" . __('Send', 'subscribe2') . "' /></p></form><p>\r\n";
|
76 |
+
|
77 |
+
// confirmation messages
|
78 |
+
$this->no_such_email = __('No such email address is registered.', 'subscribe2');
|
79 |
+
|
80 |
+
$this->added = __('You have successfully subscribed!', 'subscribe2');
|
81 |
+
|
82 |
+
$this->deleted = __('You have successfully unsubscribed.', 'subscribe2');
|
83 |
+
|
84 |
+
$this->confirm_subject = '[' . get_settings('blogname') . '] ' . __('Please confirm your request', 'subscribe2');
|
85 |
+
|
86 |
+
// menu strings
|
87 |
+
$this->options_saved = __('Options saved!', 'subscribe2');
|
88 |
+
$this->options_reset = __('Options reset!', 'subscribe2');
|
89 |
+
} // end load_strings()
|
90 |
+
|
91 |
+
/* ===== WordPress menu registration ===== */
|
92 |
+
/**
|
93 |
+
Hook the menu
|
94 |
+
*/
|
95 |
+
function admin_menu() {
|
96 |
+
add_management_page(__('Subscribers', 'subscribe2'), __('Subscribers', 'subscribe2'), "manage_options", basename(__FILE__), array(&$this, 'manage_menu'));
|
97 |
+
add_options_page(__('Subscribe2 Options', 'subscribe2'), 'Subscribe2', "manage_options", basename(__FILE__), array(&$this, 'options_menu'));
|
98 |
+
add_submenu_page('profile.php', __('Subscriptions', 'subscribe2'), __('Subscriptions', 'subscribe2'), "read", __FILE__, array(&$this, 'user_menu'));
|
99 |
+
add_submenu_page('post.php', __('Mail subscribers', 'subscribe2'), __('Mail subscribers', 'subscribe2'), "manage_options", __FILE__, array(&$this, 'write_menu'));
|
100 |
+
}
|
101 |
+
|
102 |
+
/* ===== ButtonSnap configuration ===== */
|
103 |
+
/**
|
104 |
+
Register our button in the QuickTags bar
|
105 |
+
*/
|
106 |
+
function s2_button_init() {
|
107 |
+
$url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_button.png';
|
108 |
+
buttonsnap_textbutton($url, 'Subscribe2', '<!--subscribe2-->');
|
109 |
+
buttonsnap_register_marker('subscribe2', 's2_marker');
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
Style a marker in the Rich Text Editor for our tag
|
114 |
+
|
115 |
+
By default, the RTE suppresses output of HTML comments, so this places a CSS style on our token in order to make it display
|
116 |
+
*/
|
117 |
+
function subscribe2_css() {
|
118 |
+
$marker_url = get_settings('siteurl') . '/wp-content/plugins/subscribe2/s2_marker.png';
|
119 |
+
echo "
|
120 |
+
.s2_marker {
|
121 |
+
display: block;
|
122 |
+
height: 45px;
|
123 |
+
margin-top: 5px;
|
124 |
+
background-image: url({$marker_url});
|
125 |
+
background-repeat: no-repeat;
|
126 |
+
background-position: center;
|
127 |
+
}
|
128 |
+
";
|
129 |
+
}
|
130 |
+
|
131 |
+
/* ===== Install, upgrade, reset ===== */
|
132 |
+
/**
|
133 |
+
Install our table
|
134 |
+
*/
|
135 |
+
function install() {
|
136 |
+
// include upgrade-functions for maybe_create_table;
|
137 |
+
if (! function_exists('maybe_create_table')) {
|
138 |
+
require_once(ABSPATH . '/wp-admin/upgrade-functions.php');
|
139 |
+
}
|
140 |
+
$date = date('Y-m-d');
|
141 |
+
$sql = "CREATE TABLE $this->public (
|
142 |
+
id int(11) NOT NULL auto_increment,
|
143 |
+
email varchar(64) NOT NULL default '',
|
144 |
+
active tinyint(1) default 0,
|
145 |
+
date DATE default '$date' NOT NULL,
|
146 |
+
PRIMARY KEY (id) )";
|
147 |
+
|
148 |
+
// create the table, as needed
|
149 |
+
maybe_create_table($this->public, $sql);
|
150 |
+
$this->reset();
|
151 |
+
} // end install()
|
152 |
+
|
153 |
+
/**
|
154 |
+
Upgrade the database
|
155 |
+
*/
|
156 |
+
function upgrade() {
|
157 |
+
global $wpdb;
|
158 |
+
|
159 |
+
// include upgrade-functions for maybe_create_table;
|
160 |
+
if (! function_exists('maybe_create_table')) {
|
161 |
+
require_once(ABSPATH . '/wp-admin/upgrade-functions.php');
|
162 |
+
}
|
163 |
+
$date = date('Y-m-d');
|
164 |
+
maybe_add_column($this->public, 'date', "ALTER TABLE `$this->public` ADD `date` DATE DEFAULT '$date' NOT NULL AFTER `active`;");
|
165 |
+
update_option('s2_version', S2VERSION);
|
166 |
+
|
167 |
+
// let's take this time to check whether any public subscribers
|
168 |
+
// are also registered users of the blog, and convert them
|
169 |
+
$check = $wpdb->get_results("SELECT $wpdb->users.ID FROM $wpdb->users INNER JOIN $this->public ON $wpdb->users.user_email = $this->public.email");
|
170 |
+
if (! empty($check)) {
|
171 |
+
foreach ($check as $user) {
|
172 |
+
$this->register($user);
|
173 |
+
}
|
174 |
+
}
|
175 |
+
} // end upgrade()
|
176 |
+
|
177 |
+
/**
|
178 |
+
Reset our options
|
179 |
+
*/
|
180 |
+
function reset() {
|
181 |
+
update_option('s2_sender', 'author');
|
182 |
+
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");
|
183 |
+
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.");
|
184 |
+
update_option('s2_exclude', '');
|
185 |
+
update_option('s2_reg_override', '1');
|
186 |
+
update_option('s2_show_button', '1');
|
187 |
+
} // end reset()
|
188 |
+
|
189 |
+
/* ===== mail handling ===== */
|
190 |
+
/**
|
191 |
+
Performs string substitutions for subscribe2 mail texts
|
192 |
+
*/
|
193 |
+
function substitute($string = '') {
|
194 |
+
if ('' == $string) {
|
195 |
+
return;
|
196 |
+
}
|
197 |
+
$string = str_replace('BLOGNAME', get_settings('blogname'), $string);
|
198 |
+
$string = str_replace('BLOGLINK', get_bloginfo('url'), $string);
|
199 |
+
$string = str_replace('TITLE', stripslashes($this->post_title), $string);
|
200 |
+
$string = str_replace('PERMALINK', $this->permalink, $string);
|
201 |
+
$string = str_replace('MYNAME', stripslashes($this->myname), $string);
|
202 |
+
$string = str_replace('EMAIL', $this->myemail, $string);
|
203 |
+
return $string;
|
204 |
+
} // end sustitute()
|
205 |
+
|
206 |
+
/**
|
207 |
+
Delivers email to recipients in HTML or plaintext
|
208 |
+
*/
|
209 |
+
function mail ($recipients = array(), $subject = '', $message = '', $type='text') {
|
210 |
+
if (empty($recipients)) { return; }
|
211 |
+
if ('' == $message) { return; }
|
212 |
+
|
213 |
+
// Set sender details
|
214 |
+
if ('' == $this->myname) {
|
215 |
+
$admin = get_userdata('1');
|
216 |
+
$this->myname = $admin->display_name;
|
217 |
+
$this->myemail = $admin->user_email;
|
218 |
+
}
|
219 |
+
$headers = "From: $this->myname <$this->myemail>\n";
|
220 |
+
$headers .= "Return-Path: <$this->myemail>\n";
|
221 |
+
$headers .= "Precedence: list\nList-Id: " . get_settings('blogname') . "\n";
|
222 |
+
|
223 |
+
if ('html' == $type) {
|
224 |
+
// To send HTML mail, the Content-type header must be set
|
225 |
+
$headers .= "MIME-Version: 1.0\n";
|
226 |
+
$headers .= "Content-type: " . get_bloginfo('html_type') . "; charset=\"". get_bloginfo('charset') . "\"\n";
|
227 |
+
$mailtext = "<html><head><title>$subject</title></head><body>" . $message . "</body></html>";
|
228 |
+
} else {
|
229 |
+
$headers .= "MIME-Version: 1.0\n";
|
230 |
+
$headers .= "Content-type: text/plain; charset=\"". get_bloginfo('charset') . "\"\n";
|
231 |
+
$mailtext = wordwrap(strip_tags($message), 80, "\n");
|
232 |
+
}
|
233 |
+
|
234 |
+
// BCC all recipients
|
235 |
+
$bcc = '';
|
236 |
+
if ( (defined('DREAMHOST') && TRUE === DREAMHOST) &&
|
237 |
+
(count($recipients) > 30) ) {
|
238 |
+
// we're on Dreamhost, and have more than 30 susbcribers
|
239 |
+
$count = 1;
|
240 |
+
$batch = array();
|
241 |
+
foreach ($recipients as $recipient) {
|
242 |
+
// advance the array pointer by one, for use down below
|
243 |
+
// the array pointer _is not_ advanced by the foreach() loop itself
|
244 |
+
next($recipients);
|
245 |
+
$recipient = trim($recipient);
|
246 |
+
// sanity check -- make sure we have a valid email
|
247 |
+
if (! is_email($recipient)) { continue; }
|
248 |
+
// and NOT the sender's email, since they'll
|
249 |
+
// get a copy anyway
|
250 |
+
if ( (! empty($recipient)) && ($this->myemail != $recipient) ) {
|
251 |
+
('' == $bcc) ? $bcc = "Bcc: $recipient" : $bcc .= ",\r\n $recipient";
|
252 |
+
}
|
253 |
+
if (30 == $count) {
|
254 |
+
$count = 1;
|
255 |
+
$batch[] = $bcc;
|
256 |
+
$bcc = '';
|
257 |
+
} else {
|
258 |
+
if (false === current($recipients)) {
|
259 |
+
// we've reached the end of the subscriber list
|
260 |
+
// add what we have to the batch, and move on
|
261 |
+
$batch[] = $bcc;
|
262 |
+
break;
|
263 |
+
} else {
|
264 |
+
$count++;
|
265 |
+
}
|
266 |
+
}
|
267 |
+
}
|
268 |
+
// rewind the array, just to be safe
|
269 |
+
reset($recipients);
|
270 |
+
} else {
|
271 |
+
// we're not on dreamhost, or have less than 30
|
272 |
+
// subscribers, so do it normal
|
273 |
+
foreach ($recipients as $recipient) {
|
274 |
+
$recipient = trim($recipient);
|
275 |
+
// sanity check -- make sure we have a valid email
|
276 |
+
if (! is_email($recipient)) { continue; }
|
277 |
+
// and NOT the sender's email, since they'll
|
278 |
+
// get a copy anyway
|
279 |
+
if ( (! empty($recipient)) && ($this->myemail != $recipient) ) {
|
280 |
+
('' == $bcc) ? $bcc = "Bcc: $recipient" : $bcc .= ",\r\n $recipient";
|
281 |
+
}
|
282 |
+
}
|
283 |
+
$headers .= "$bcc\n";
|
284 |
+
}
|
285 |
+
// actually send mail
|
286 |
+
if ( (defined('DREAMHOST') && TRUE === DREAMHOST) && (isset($batch)) ) {
|
287 |
+
foreach ($batch as $bcc) {
|
288 |
+
$newheaders = $headers . "$bcc\n";
|
289 |
+
@wp_mail($this->myemail, $subject, $mailtext, $newheaders); }
|
290 |
+
} else {
|
291 |
+
@wp_mail($this->myemail, $subject, $mailtext, $headers);
|
292 |
+
}
|
293 |
+
} // end mail()
|
294 |
+
|
295 |
+
/**
|
296 |
+
Sends an email notification of a new post
|
297 |
+
*/
|
298 |
+
function publish($id = 0, $cron = 0) {
|
299 |
+
if (! $id) { return $id; }
|
300 |
+
|
301 |
+
// are we doing daily digests? If so, don't send anything now
|
302 |
+
if ( defined('S2DIGEST') && TRUE === S2DIGEST ) { return; }
|
303 |
+
|
304 |
+
// we need to determine whether this is a new post, or an edit
|
305 |
+
if (0 == $cron) {
|
306 |
+
// we're not being called from WP-Cron
|
307 |
+
if ($this->private) {
|
308 |
+
// this post was published from draft status
|
309 |
+
// OR is an edit of an existing post
|
310 |
+
// so send no notification
|
311 |
+
return $id;
|
312 |
+
}
|
313 |
+
}
|
314 |
+
|
315 |
+
$post_cats = wp_get_post_cats('1', $id);
|
316 |
+
$post_cats_string = implode(',', $post_cats);
|
317 |
+
$check = false;
|
318 |
+
// is the current post assigned to any categories
|
319 |
+
// which should not generate a notification email?
|
320 |
+
foreach (explode(',', $this->get_excluded_cats()) as $cat) {
|
321 |
+
if (in_array($cat, $post_cats)) {
|
322 |
+
$check = true;
|
323 |
+
}
|
324 |
+
}
|
325 |
+
// if so, bail out
|
326 |
+
if ($check) {
|
327 |
+
// hang on -- can registered users subscribe to
|
328 |
+
// excluded categories?
|
329 |
+
if ('0' == get_option('s2_reg_override')) {
|
330 |
+
// nope? okay, let's leave
|
331 |
+
return $id;
|
332 |
+
}
|
333 |
+
}
|
334 |
+
|
335 |
+
global $wpdb;
|
336 |
+
$post = & get_post($id);
|
337 |
+
// is this post set in the future?
|
338 |
+
if ($post->post_date > current_time('mysql')) {
|
339 |
+
// is wp-cron installed?
|
340 |
+
if (function_exists('wp_cron_init')) {
|
341 |
+
// are we doing daily digests?
|
342 |
+
if ( defined('S2DIGEST') && FALSE === S2DIGEST ) {
|
343 |
+
// not doing daily digests, so
|
344 |
+
// add this post to the list of
|
345 |
+
// future posts
|
346 |
+
$our_post = array('id' => $id, 'date' => $post->post_date);
|
347 |
+
$future_posts = get_option('s2_future_posts');
|
348 |
+
$future_posts[] = $our_post;
|
349 |
+
update_option('s2_future_posts', $future_posts);
|
350 |
+
}
|
351 |
+
}
|
352 |
+
// bail out
|
353 |
+
return $id;
|
354 |
+
}
|
355 |
+
|
356 |
+
// lets collect our public subscribers
|
357 |
+
// and all our registered subscribers for these categories
|
358 |
+
$public = array();
|
359 |
+
$registered = array();
|
360 |
+
if (! $check) {
|
361 |
+
// if this post is assigned to an excluded
|
362 |
+
// category, then this test will prevent
|
363 |
+
// the public from receiving notification
|
364 |
+
$public = $this->get_public();
|
365 |
+
}
|
366 |
+
$registered = $this->get_registered("cats=$post_cats_string");
|
367 |
+
|
368 |
+
// do we have subscribers?
|
369 |
+
if ( empty($public) && empty($registered) ) {
|
370 |
+
// if not, no sense doing anything else
|
371 |
+
return $id;
|
372 |
+
}
|
373 |
+
// we set these class variables so that we can avoid
|
374 |
+
// passing them in function calls a little later
|
375 |
+
$this->post_title = $post->post_title;
|
376 |
+
$this->permalink = get_permalink($id);
|
377 |
+
|
378 |
+
// do we send as admin, or post author?
|
379 |
+
if ('author' == get_option('s2_sender')) {
|
380 |
+
// get author details
|
381 |
+
$user = get_userdata($post->post_author);
|
382 |
+
} else {
|
383 |
+
// get admin detailts
|
384 |
+
$user = get_userdata(1);
|
385 |
+
}
|
386 |
+
$this->myemail = $user->user_email;
|
387 |
+
$this->myname = $user->display_name;
|
388 |
+
// Get email subject
|
389 |
+
$subject = $this->substitute($this->s2_subject);
|
390 |
+
// Get the message template
|
391 |
+
$mailtext = $this->substitute(stripslashes(get_option('s2_mailtext')));
|
392 |
+
|
393 |
+
$plaintext = $post->post_content;
|
394 |
+
$content = apply_filters('the_content', $post->post_content);
|
395 |
+
$content = str_replace(']]>', ']]>', $content);
|
396 |
+
$excerpt = $post->post_excerpt;
|
397 |
+
if ('' == $excerpt) {
|
398 |
+
// no excerpt, is there a <!--more--> ?
|
399 |
+
if (false !== strpos($plaintext, '<!--more-->')) {
|
400 |
+
list($excerpt, $more) = explode('<!--more-->', $plaintext, 2);
|
401 |
+
// strip leading and trailing whitespace
|
402 |
+
$excerpt = strip_tags($excerpt);
|
403 |
+
$excerpt = trim($excerpt);
|
404 |
+
} else {
|
405 |
+
// no <!--more-->, so grab the first 55 words
|
406 |
+
$excerpt = strip_tags($plaintext);
|
407 |
+
$excerpt_length = 55;
|
408 |
+
$words = explode(' ', $plaintext, $excerpt_length + 1);
|
409 |
+
if (count($words) > $excerpt_length) {
|
410 |
+
array_pop($words);
|
411 |
+
array_push($words, '[...]');
|
412 |
+
$excerpt = implode(' ', $words);
|
413 |
+
}
|
414 |
+
}
|
415 |
+
|
416 |
+
}
|
417 |
+
// first we send plaintext summary emails
|
418 |
+
$body = str_replace('POST', $excerpt, $mailtext);
|
419 |
+
if (! is_array($public)) {
|
420 |
+
$public = array();
|
421 |
+
}
|
422 |
+
$registered = $this->get_registered("cats=$post_cats_string&format=text&amount=excerpt");
|
423 |
+
if (! is_array($registered)) {
|
424 |
+
$registered = array();
|
425 |
+
}
|
426 |
+
$recipients = array_merge($public, $registered);
|
427 |
+
$this->mail($recipients, $subject, $body);
|
428 |
+
// next we send plaintext full content emails
|
429 |
+
$body = str_replace('POST', strip_tags($plaintext), $mailtext);
|
430 |
+
$this->mail($this->get_registered("cats=$post_cats_string&format=text&amount=post"), $subject, $body);
|
431 |
+
// finally we send html full content emails
|
432 |
+
$body = str_replace("\r\n", "<br />\r\n", $mailtext);
|
433 |
+
$body = str_replace('POST', $content, $body);
|
434 |
+
$this->mail($this->get_registered("cats=$post_cats_string&format=html"), $subject, $body, 'html');
|
435 |
+
|
436 |
+
return $id;
|
437 |
+
} // end publish()
|
438 |
+
|
439 |
+
/**
|
440 |
+
Sends a notification when a draft post is published
|
441 |
+
*/
|
442 |
+
function private2publish($ID = 0) {
|
443 |
+
if (0 == $ID) { return $ID; }
|
444 |
+
|
445 |
+
$this->publish($ID);
|
446 |
+
$this->private = TRUE;
|
447 |
+
return $ID;
|
448 |
+
} // end private2publish()
|
449 |
+
|
450 |
+
/**
|
451 |
+
Prevents notifications from being sent when editing posts
|
452 |
+
*/
|
453 |
+
function edit($ID = 0) {
|
454 |
+
if (0 == $ID) { return; }
|
455 |
+
|
456 |
+
$this->private = TRUE;
|
457 |
+
return $ID;
|
458 |
+
}
|
459 |
+
|
460 |
+
/**
|
461 |
+
Send confirmation email to the user
|
462 |
+
*/
|
463 |
+
function send_confirm($what = '') {
|
464 |
+
if ( (! $this->email) || (! $what) ) {
|
465 |
+
return false;
|
466 |
+
}
|
467 |
+
$id = $this->get_id($this->email);
|
468 |
+
if (! $id) {
|
469 |
+
return false;
|
470 |
+
}
|
471 |
+
|
472 |
+
// generate the URL "?s2=ACTION+HASH+ID"
|
473 |
+
// ACTION = 1 to subscribe, 0 to unsubscribe
|
474 |
+
// HASH = md5 hash of email address
|
475 |
+
// ID = user's ID in the subscribe2 table
|
476 |
+
$link = get_settings('siteurl') . "?s2=";
|
477 |
+
if ('add' == $what) {
|
478 |
+
$link .= '1';
|
479 |
+
} elseif ('del' == $what) {
|
480 |
+
$link .= '0';
|
481 |
+
}
|
482 |
+
$link .= md5($this->email);
|
483 |
+
$link .= $id;
|
484 |
+
|
485 |
+
$admin = get_userdata(1);
|
486 |
+
$this->myname = $admin->display_name;
|
487 |
+
|
488 |
+
$body = $this->substitute(get_option('s2_confirm_email'));
|
489 |
+
$body = str_replace("LINK", $link, $body);
|
490 |
+
|
491 |
+
$subject = $this->substitute($this->confirm_subject);
|
492 |
+
$mailheaders .= "MIME-Version: 1.0\n";
|
493 |
+
$mailheaders .= "Content-type: text/plain; charset=\"". get_bloginfo('charset') . "\"\n";
|
494 |
+
$mailheaders = "From: $admin->display_name <$admin->user_email>";
|
495 |
+
|
496 |
+
@wp_mail ($this->email, $subject, $body, $mailheaders);
|
497 |
+
} // end send_confirm()
|
498 |
+
|
499 |
+
/* ===== Category functions ===== */
|
500 |
+
/**
|
501 |
+
Returns a comma-separated list of category IDs which should not generate notifications
|
502 |
+
*/
|
503 |
+
function get_excluded_cats() {
|
504 |
+
if ('' != $this->excluded_cats) {
|
505 |
+
return $this->excluded_cats;
|
506 |
+
} else {
|
507 |
+
global $wpdb;
|
508 |
+
$this->excluded_cats = get_option('s2_exclude');
|
509 |
+
return $this->excluded_cats;
|
510 |
+
}
|
511 |
+
} // end get_excluded_cats()
|
512 |
+
|
513 |
+
/**
|
514 |
+
Return either a comma-separated list of all the category IDs in the blog or an array of cat_ID => cat_name
|
515 |
+
*/
|
516 |
+
function get_all_categories($select = 'id') {
|
517 |
+
global $wpdb;
|
518 |
+
if ('id' == $select) {
|
519 |
+
return implode(',', $wpdb->get_col("SELECT cat_ID FROM $wpdb->categories"));
|
520 |
+
} else {
|
521 |
+
$cats = array();
|
522 |
+
$result = $wpdb->get_results("SELECT cat_ID, cat_name FROM $wpdb->categories", ARRAY_N);
|
523 |
+
foreach ($result as $result) {
|
524 |
+
$cats[$result[0]] = $result[1];
|
525 |
+
}
|
526 |
+
return $cats;
|
527 |
+
}
|
528 |
+
} // end get_all_categories()
|
529 |
+
|
530 |
+
|
531 |
+
/* ===== Subscriber functions ===== */
|
532 |
+
/**
|
533 |
+
Given a public subscriber ID, returns the email address
|
534 |
+
*/
|
535 |
+
function get_email ($id = 0) {
|
536 |
+
global $wpdb;
|
537 |
+
|
538 |
+
if (! $id) {
|
539 |
+
return false;
|
540 |
+
}
|
541 |
+
return $wpdb->get_var("SELECT email FROM $this->public WHERE id=$id");
|
542 |
+
} // end get_email
|
543 |
+
|
544 |
+
/**
|
545 |
+
Given a public subscriber email, returns the subscriber ID
|
546 |
+
*/
|
547 |
+
function get_id ($email = '') {
|
548 |
+
global $wpdb;
|
549 |
+
|
550 |
+
if (! $email) {
|
551 |
+
return false;
|
552 |
+
}
|
553 |
+
return $wpdb->get_var("SELECT id FROM $this->public WHERE email='$email'");
|
554 |
+
} // end get_id()
|
555 |
+
|
556 |
+
/**
|
557 |
+
Activate an email address
|
558 |
+
|
559 |
+
If the address is not already present, it will be added
|
560 |
+
*/
|
561 |
+
function activate ($email = '') {
|
562 |
+
global $wpdb;
|
563 |
+
|
564 |
+
if ('' == $email) {
|
565 |
+
if ('' != $this->email) {
|
566 |
+
$email = $this->email;
|
567 |
+
} else {
|
568 |
+
return false;
|
569 |
+
}
|
570 |
+
}
|
571 |
+
|
572 |
+
if (false !== $this->is_public($email)) {
|
573 |
+
$check = $wpdb->get_var("SELECT user_email FROM $wpdb->users WHERE user_email='$this->email'");
|
574 |
+
if ($check) { return; }
|
575 |
+
$wpdb->get_results("UPDATE $this->public SET active='1' WHERE email='$email'");
|
576 |
+
} else {
|
577 |
+
$wpdb->get_results("INSERT INTO $this->public (email, active, date) VALUES ('$email', '1', NOW())");
|
578 |
+
}
|
579 |
+
} // end activate()
|
580 |
+
|
581 |
+
/**
|
582 |
+
Add an unconfirmed email address to the subscriber list
|
583 |
+
*/
|
584 |
+
function add ($email = '') {
|
585 |
+
global $wpdb;
|
586 |
+
|
587 |
+
if ('' == $email) {
|
588 |
+
if ('' != $this->email) {
|
589 |
+
$email = $this->email;
|
590 |
+
} else {
|
591 |
+
return false;
|
592 |
+
}
|
593 |
+
}
|
594 |
+
|
595 |
+
if (! is_email($email)) { return false; }
|
596 |
+
|
597 |
+
if (false !== $this->is_public($email)) {
|
598 |
+
$wpdb->get_results("UPDATE $this->public SET date=NOW() WHERE email='$email'");
|
599 |
+
} else {
|
600 |
+
$wpdb->get_results("INSERT INTO $this->public (email, active, date) VALUES ('$email', '0', NOW())");
|
601 |
+
}
|
602 |
+
} // end add()
|
603 |
+
|
604 |
+
/**
|
605 |
+
Remove a user from the subscription table
|
606 |
+
*/
|
607 |
+
function delete($email = '') {
|
608 |
+
global $wpdb;
|
609 |
+
|
610 |
+
if ('' == $email) {
|
611 |
+
if ('' != $this->email) {
|
612 |
+
$email = $this->email;
|
613 |
+
} else {
|
614 |
+
return false;
|
615 |
+
}
|
616 |
+
}
|
617 |
+
|
618 |
+
if (! is_email($email)) { return false; }
|
619 |
+
$wpdb->get_results("DELETE FROM $this->public WHERE email='$email'");
|
620 |
+
} // end delete()
|
621 |
+
|
622 |
+
/**
|
623 |
+
Toggle a public subscriber's status
|
624 |
+
*/
|
625 |
+
function toggle($email = '') {
|
626 |
+
global $wpdb;
|
627 |
+
|
628 |
+
if ( ('' == $email) || (! is_email($email)) ) { return false; }
|
629 |
+
|
630 |
+
// let's see if this is a public user
|
631 |
+
$status = $this->is_public($email);
|
632 |
+
if (false === $status) { return false; }
|
633 |
+
|
634 |
+
if ('0' == $status) {
|
635 |
+
$wpdb->get_results("UPDATE $this->public SET active='1' WHERE email='$email'");
|
636 |
+
} else {
|
637 |
+
$wpdb->get_results("UPDATE $this->public SET active='0' WHERE email='$email'");
|
638 |
+
}
|
639 |
+
} // end toggle()
|
640 |
+
|
641 |
+
/**
|
642 |
+
Confirm request from the link emailed to the user and email the admin
|
643 |
+
*/
|
644 |
+
function confirm($content = '') {
|
645 |
+
global $wpdb;
|
646 |
+
|
647 |
+
if (1 == $this->filtered) { return $content; }
|
648 |
+
|
649 |
+
$code = $_GET['s2'];
|
650 |
+
$action = intval(substr($code, 0, 1));
|
651 |
+
$hash = substr($code, 1, 32);
|
652 |
+
$code = str_replace($hash, '', $code);
|
653 |
+
$id = intval(substr($code, 1));
|
654 |
+
if ($id) {
|
655 |
+
$this->email = $this->get_email($id);
|
656 |
+
if (! $this->email) {
|
657 |
+
return $this->no_such_email;
|
658 |
+
}
|
659 |
+
} else {
|
660 |
+
return $this->no_such_email;
|
661 |
+
}
|
662 |
+
|
663 |
+
if ('1' == $action) {
|
664 |
+
// make this subscription active
|
665 |
+
$this->activate();
|
666 |
+
$this->message = $this->added;
|
667 |
+
$subject = '[' . get_settings('blogname') . '] ' . __('New subscriber', 'subscribe2');
|
668 |
+
$message = "$this->email " . __('subscribed to email notifications!', 'subscribe2');
|
669 |
+
$recipients = $wpdb->get_col("SELECT DISTINCT(user_email) FROM $wpdb->users INNER JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id WHERE $wpdb->usermeta.meta_key='wp_user_level' AND $wpdb->usermeta.meta_value='10'");
|
670 |
+
$this->mail($recipients, $subject, $message);
|
671 |
+
$this->filtered = 1;
|
672 |
+
} elseif ('0' == $action) {
|
673 |
+
// remove this subscriber
|
674 |
+
$this->delete();
|
675 |
+
$this->message = $this->deleted;
|
676 |
+
$this->filtered = 1;
|
677 |
+
}
|
678 |
+
|
679 |
+
if ('' != $this->message) {
|
680 |
+
return $this->message;
|
681 |
+
}
|
682 |
+
} // end confirm
|
683 |
+
|
684 |
+
/**
|
685 |
+
Is the supplied email address a public subscriber?
|
686 |
+
*/
|
687 |
+
function is_public($email = '') {
|
688 |
+
global $wpdb;
|
689 |
+
|
690 |
+
if ('' == $email) { return false; }
|
691 |
+
|
692 |
+
$check = $wpdb->get_var("SELECT active FROM $this->public WHERE email='$email'");
|
693 |
+
if ( ('0' === $check) || ('1' == $check) ) {
|
694 |
+
return $check;
|
695 |
+
} else {
|
696 |
+
return false;
|
697 |
+
}
|
698 |
+
} // end is_public
|
699 |
+
|
700 |
+
/**
|
701 |
+
Is the supplied email address a registered user of the blog?
|
702 |
+
*/
|
703 |
+
function is_registered($email = '') {
|
704 |
+
global $wpdb;
|
705 |
+
|
706 |
+
if ('' == $email) { return false; }
|
707 |
+
|
708 |
+
$check = $wpdb->get_var("SELECT email FROM $wpdb->users WHERE user_email='$email'");
|
709 |
+
if ($check) {
|
710 |
+
return true;
|
711 |
+
} else {
|
712 |
+
return false;
|
713 |
+
}
|
714 |
+
}
|
715 |
+
|
716 |
+
/**
|
717 |
+
Return an array of all the public subscribers
|
718 |
+
*/
|
719 |
+
function get_public ($confirmed = 1) {
|
720 |
+
global $wpdb;
|
721 |
+
if (1 == $confirmed) {
|
722 |
+
if ('' == $this->all_public) {
|
723 |
+
$this->all_public = $wpdb->get_col("SELECT email FROM $this->public WHERE active='1'");
|
724 |
+
}
|
725 |
+
return $this->all_public;
|
726 |
+
} else {
|
727 |
+
if ('' == $this->all_unconfirmed) {
|
728 |
+
$this->all_unconfirmed = $wpdb->get_col("SELECT email FROM $this->public WHERE active='0'");
|
729 |
+
}
|
730 |
+
return $this->all_unconfirmed;
|
731 |
+
}
|
732 |
+
} // end get_public()
|
733 |
+
|
734 |
+
/**
|
735 |
+
Return an array of registered subscribers
|
736 |
+
|
737 |
+
Collect all the registered users of the blog who are subscribed to the specified categories
|
738 |
+
*/
|
739 |
+
function get_registered ($args = '') {
|
740 |
+
global $wpdb;
|
741 |
+
|
742 |
+
$format = '';
|
743 |
+
$amount = '';
|
744 |
+
$cats = '';
|
745 |
+
$subscribers = array();
|
746 |
+
|
747 |
+
parse_str($args, $r);
|
748 |
+
if (! isset($r['cats']))
|
749 |
+
$r['cats'] = '';
|
750 |
+
if (! isset($r['format']))
|
751 |
+
$r['format'] = 'all';
|
752 |
+
if (! isset($r['amount']))
|
753 |
+
$r['amount'] = 'all';
|
754 |
+
|
755 |
+
$JOIN = ''; $AND = '';
|
756 |
+
// text or HTML subscribers
|
757 |
+
if ('all' != $r['format']) {
|
758 |
+
$JOIN .= "INNER JOIN $wpdb->usermeta AS b ON a.user_id = b.user_id ";
|
759 |
+
$AND .= " AND b.meta_key='s2_format' AND b.meta_value=";
|
760 |
+
if ('html' == $r['format']) {
|
761 |
+
$AND .= "'html'";
|
762 |
+
} elseif ('text' == $r['format']) {
|
763 |
+
$AND .= "'text'";
|
764 |
+
}
|
765 |
+
}
|
766 |
+
|
767 |
+
// full post or excerpt subscribers
|
768 |
+
if ('all' != $r['amount']) {
|
769 |
+
$JOIN .= "INNER JOIN $wpdb->usermeta AS c ON a.user_id = c.user_id ";
|
770 |
+
$AND .= " AND c.meta_key='s2_excerpt' AND c.meta_value=";
|
771 |
+
if ('excerpt' == $r['amount']) {
|
772 |
+
$AND .= "'excerpt'";
|
773 |
+
} elseif ('post' == $r['amount']) {
|
774 |
+
$AND.= "'post'";
|
775 |
+
}
|
776 |
+
}
|
777 |
+
|
778 |
+
// specific category subscribers
|
779 |
+
if ('' != $r['cats']) {
|
780 |
+
$JOIN .= "INNER JOIN $wpdb->usermeta AS d ON a.user_id = d.user_id ";
|
781 |
+
foreach (explode(',', $r['cats']) as $cat) {
|
782 |
+
('' == $and) ? $and = "d.meta_key='s2_cat$cat'" : $and .= " OR d.meta_key='s2_cat$cat'";
|
783 |
+
}
|
784 |
+
$AND .= "AND ($and)";
|
785 |
+
}
|
786 |
+
|
787 |
+
$sql = "SELECT a.user_id FROM $wpdb->usermeta AS a " . $JOIN . " WHERE a.meta_key='s2_subscribed'" . $AND;
|
788 |
+
$result = $wpdb->get_col($sql);
|
789 |
+
if ($result) {
|
790 |
+
$ids = implode(',', $result);
|
791 |
+
return $wpdb->get_col("SELECT user_email FROM $wpdb->users WHERE ID IN ($ids)");
|
792 |
+
}
|
793 |
+
} // end get_registered()
|
794 |
+
|
795 |
+
/**
|
796 |
+
Collects the signup date for all public subscribers
|
797 |
+
*/
|
798 |
+
function signup_date($email = '') {
|
799 |
+
if ('' == $email) { return false; }
|
800 |
+
|
801 |
+
global $wpdb;
|
802 |
+
if (! empty($this->signup_dates)) {
|
803 |
+
return $this->signup_dates[$email];
|
804 |
+
} else {
|
805 |
+
$results = $wpdb->get_results("SELECT email, date FROM $this->public", ARRAY_N);
|
806 |
+
foreach ($results as $result) {
|
807 |
+
$this->signup_dates[$result[0]] = $result[1];
|
808 |
+
}
|
809 |
+
return $this->signup_dates[$email];
|
810 |
+
}
|
811 |
+
} // end signup_date()
|
812 |
+
|
813 |
+
/**
|
814 |
+
Create the appropriate usermeta values when a user registers
|
815 |
+
|
816 |
+
If the registering user had previously subscribed to notifications, this function will delete them from the public subscriber list first
|
817 |
+
*/
|
818 |
+
function register ($user_id = 0) {
|
819 |
+
global $wpdb;
|
820 |
+
|
821 |
+
if (0 == $user_id) { return $user_id; }
|
822 |
+
$user = get_userdata($user_id);
|
823 |
+
|
824 |
+
// has this user previously signed up for email notification?
|
825 |
+
if (false !== $this->is_public($user->user_email)) {
|
826 |
+
// delete this user from the public table, and subscribe them to all the categories
|
827 |
+
$this->delete($user->user_email);
|
828 |
+
update_usermeta($user_id, 'subscribe2', $this->get_all_categories());
|
829 |
+
} else {
|
830 |
+
// add the usermeta, but don't subscribe them
|
831 |
+
update_usermeta($user_id, 'subscribe2', 'none');
|
832 |
+
}
|
833 |
+
update_usermeta($user_id, 's2_format', 'text');
|
834 |
+
update_usermeta($user_id, 's2_excerpt', 'full');
|
835 |
+
return $user_id;
|
836 |
+
} // end register()
|
837 |
+
|
838 |
+
/* ===== Menus ===== */
|
839 |
+
/**
|
840 |
+
Our management page
|
841 |
+
*/
|
842 |
+
function manage_menu() {
|
843 |
+
global $wpdb;
|
844 |
+
|
845 |
+
$what = '';
|
846 |
+
|
847 |
+
// was anything POSTed ?
|
848 |
+
if (isset($_POST['s2_admin'])) {
|
849 |
+
if ('subscribe' == $_POST['s2_admin']) {
|
850 |
+
foreach (preg_split ("/[\s,]+/", $_POST['addresses']) as $email) {
|
851 |
+
if (is_email($email)) {
|
852 |
+
$this->activate($email);
|
853 |
+
}
|
854 |
+
}
|
855 |
+
$_POST['what'] = 'confirmed';
|
856 |
+
echo "<div class='updated'>" . __('Address(es) subscribed!', 'subscribe2') . '</div>';
|
857 |
+
} elseif ('delete' == $_POST['s2_admin']) {
|
858 |
+
$this->delete($_POST['email']);
|
859 |
+
echo "<div class='updated'>" . $_POST['email'] . ' ' . __('deleted!', 'subscribe2') . '</div>';
|
860 |
+
} elseif ('toggle' == $_POST['s2_admin']) {
|
861 |
+
$this->toggle($_POST['email']);
|
862 |
+
echo "<div class='updated'>" . $_POST['email'] . ' ' . __('status changed!', 'subscribe2') . '</div>';
|
863 |
+
}
|
864 |
+
}
|
865 |
+
|
866 |
+
if (isset($_POST['what'])) {
|
867 |
+
if ('all' == $_POST['what']) {
|
868 |
+
$what = 'all';
|
869 |
+
$confirmed = $this->get_public();
|
870 |
+
if (! is_array($confirmed)) {
|
871 |
+
$confirmed = array();
|
872 |
+
}
|
873 |
+
$unconfirmed = $this->get_public(0);
|
874 |
+
if (! is_array($unconfirmed)) {
|
875 |
+
$unconfirmed = array();
|
876 |
+
}
|
877 |
+
$registered = $this->get_registered();
|
878 |
+
if (! is_array($registered)) {
|
879 |
+
$registered = array();
|
880 |
+
}
|
881 |
+
$subscribers = array_merge($confirmed, $unconfirmed, $registered);
|
882 |
+
} elseif ('public' == $_POST['what']) {
|
883 |
+
$what = 'public';
|
884 |
+
$confirmed = $this->get_public();
|
885 |
+
if (! is_array($confirmed)) {
|
886 |
+
$confirmed = array();
|
887 |
+
}
|
888 |
+
$unconfirmed = $this->get_public(0);
|
889 |
+
if (! is_array($unconfirmed)) {
|
890 |
+
$unconfirmed = array();
|
891 |
+
}
|
892 |
+
$subscribers = array_merge($confirmed, $unconfirmed);
|
893 |
+
} elseif ('confirmed' == $_POST['what']) {
|
894 |
+
$what = 'confirmed';
|
895 |
+
$confirmed = $this->get_public();
|
896 |
+
$subscribers = $confirmed;
|
897 |
+
} elseif ('unconfirmed' == $_POST['what']) {
|
898 |
+
$what = 'unconfirmed';
|
899 |
+
$unconfirmed = $this->get_public('0');
|
900 |
+
$subscribers = $unconfirmed;
|
901 |
+
} elseif (is_numeric($_POST['what'])) {
|
902 |
+
$what = intval($_POST['what']);
|
903 |
+
$subscribers = $this->get_registered("cats=$what");
|
904 |
+
} elseif ('registered' == $_POST['what']) {
|
905 |
+
$what = 'registered';
|
906 |
+
$subscribers = $this->get_registered();
|
907 |
+
}
|
908 |
+
} elseif ('' == $what) {
|
909 |
+
$subscribers = $this->get_registered();
|
910 |
+
$what = 'registered';
|
911 |
+
if (empty($subscribers)) {
|
912 |
+
$confirmed = $this->get_public();
|
913 |
+
$subscribers = $confirmed;
|
914 |
+
$what = 'confirmed';
|
915 |
+
if (empty ($subscribers)) {
|
916 |
+
$unconfirmed = $this->get_public(0);
|
917 |
+
$subscribers = $unconfirmed;
|
918 |
+
$what = 'unconfirmed';
|
919 |
+
if (empty($subscribers)) {
|
920 |
+
$what = 'all';
|
921 |
+
}
|
922 |
+
}
|
923 |
+
}
|
924 |
+
}
|
925 |
+
if (! empty($subscribers)) {
|
926 |
+
sort($subscribers);
|
927 |
+
}
|
928 |
+
// safety check for our arrays
|
929 |
+
if ('' == $confirmed) { $confirmed = array(); }
|
930 |
+
if ('' == $unconfirmed) { $unconfirmed = array(); }
|
931 |
+
if ('' == $registered) { $registered = array(); }
|
932 |
+
|
933 |
+
// show our form
|
934 |
+
echo '<div class="wrap">';
|
935 |
+
echo '<h2>' . __('Subscribe Addresses', 'subscribe2') . "</h2>\r\n";
|
936 |
+
echo "<form method='POST'>\r\n";
|
937 |
+
echo "<span style='align:left'>" . __('Enter addresses, one per line or comma-seperated', 'subscribe2') . "</span><br />\r\n";
|
938 |
+
echo '<textarea rows="2" cols="80" name="addresses"></textarea>';
|
939 |
+
echo ' <span class="submit"><input type="submit" name="submit" value="' . __('Subscribe', 'subscribe2') . '" />';
|
940 |
+
echo '<input type="hidden" name="s2_admin" value="subscribe" /></span>';
|
941 |
+
echo '</form></div>';
|
942 |
+
|
943 |
+
// subscriber lists
|
944 |
+
echo "<div class='wrap'><h2>" . __('Subscribers', 'subscribe2') . "</h2>\r\n";
|
945 |
+
|
946 |
+
$this->display_subscriber_dropdown($what, __('Filter', 'subscribe2'));
|
947 |
+
// show the selected subscribers
|
948 |
+
$alternate = 'alternate';
|
949 |
+
if (! empty($subscribers)) {
|
950 |
+
echo '<p align="center"><b>' . __('Registered on the left, confirmed in the middle, unconfirmed on the right', 'subscribe2') . '</b></p>';
|
951 |
+
}
|
952 |
+
echo "<table cellpadding='2' cellspacing'2'>";
|
953 |
+
if (! empty($subscribers)) {
|
954 |
+
foreach ($subscribers as $subscriber) {
|
955 |
+
echo "<tr class='$alternate'>";
|
956 |
+
echo "<td width='75%'";
|
957 |
+
if (in_array($subscriber, $unconfirmed)) {
|
958 |
+
echo " align='right'>";
|
959 |
+
} elseif (in_array($subscriber, $confirmed)) {
|
960 |
+
echo "align='center'>";
|
961 |
+
} else {
|
962 |
+
echo "align='left' colspan='3'>";
|
963 |
+
}
|
964 |
+
echo "<a href='mailto:$subscriber'>$subscriber</a>\r\n";
|
965 |
+
if ( in_array($subscriber, $unconfirmed) || in_array($subscriber, $confirmed) ) {
|
966 |
+
echo '(' . $this->signup_date($subscriber) . ')</td>';
|
967 |
+
echo "<td width='5%' align='center'><form method='POST'><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='";
|
968 |
+
(in_array($subscriber, $unconfirmed)) ? $foo = '<-' : $foo= '->';
|
969 |
+
echo "$foo' /></form></td>";
|
970 |
+
echo "<td width='2%' align='center'><form method='POST'><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>";
|
971 |
+
}
|
972 |
+
echo "</td></tr>\r\n";
|
973 |
+
('alternate' == $alternate) ? $alternate = '' : $alternate = 'alternate';
|
974 |
+
}
|
975 |
+
} else {
|
976 |
+
echo '<tr><td align="center"><b>' . __('NONE', 'subscribe2') . "</b></td></tr>\r\n";
|
977 |
+
}
|
978 |
+
echo "</table></div>\r\n";
|
979 |
+
|
980 |
+
echo '<div style="clear: both;"><p> </p></div>';
|
981 |
+
|
982 |
+
include(ABSPATH . '/wp-admin/admin-footer.php');
|
983 |
+
// just to be sure
|
984 |
+
die;
|
985 |
+
} // end manage_menu()
|
986 |
+
|
987 |
+
/**
|
988 |
+
Our options page
|
989 |
+
*/
|
990 |
+
function options_menu() {
|
991 |
+
// was anything POSTed?
|
992 |
+
if (isset($_POST['s2_admin'])) {
|
993 |
+
if ('RESET' == $_POST['s2_admin']) {
|
994 |
+
$this->reset();
|
995 |
+
echo "<div class='updated'>$this->options_reset</div>";
|
996 |
+
} elseif ('options' == $_POST['s2_admin']) {
|
997 |
+
// excluded categories
|
998 |
+
if (! empty($_POST['category'])) {
|
999 |
+
$exclude_cats = implode(',', $_POST['category']);
|
1000 |
+
} else {
|
1001 |
+
$exclude_cats = '';
|
1002 |
+
}
|
1003 |
+
update_option('s2_exclude', $exclude_cats);
|
1004 |
+
// allow override?
|
1005 |
+
(isset($_POST['override'])) ? $override = '1' : $override = '0';
|
1006 |
+
update_option('s2_reg_override', $override);
|
1007 |
+
|
1008 |
+
// show button?
|
1009 |
+
(isset($_POST['showbutton'])) ? $showbutton = '1' : $showbutton = '0';
|
1010 |
+
update_option('s2_show_button', $showbutton);
|
1011 |
+
|
1012 |
+
// send as author or admin?
|
1013 |
+
$sender = 'author';
|
1014 |
+
if ('admin' == $_POST['s2_sender']) {
|
1015 |
+
$sender = 'admin';
|
1016 |
+
}
|
1017 |
+
update_option('s2_sender', $sender);
|
1018 |
+
|
1019 |
+
// email templates
|
1020 |
+
$mailtext = $_POST['s2_mailtext'];
|
1021 |
+
update_option('s2_mailtext', $mailtext);
|
1022 |
+
$confirm_email = $_POST['s2_confirm_email'];
|
1023 |
+
update_option('s2_confirm_email', $confirm_email);
|
1024 |
+
echo "<div class='updated'>$this->options_saved</div>";
|
1025 |
+
}
|
1026 |
+
}
|
1027 |
+
// show our form
|
1028 |
+
$this->sender = get_option('s2_sender');
|
1029 |
+
$this->mailtext = get_option('s2_mailtext');
|
1030 |
+
$this->confirm_email = get_option('s2_confirm_email');
|
1031 |
+
$this->override = get_option('s2_reg_override');
|
1032 |
+
$this->show_button = get_option('s2_show_button');
|
1033 |
+
|
1034 |
+
echo '<div class="wrap">';
|
1035 |
+
echo '<form method="POST">';
|
1036 |
+
echo '<input type="hidden" name="s2_admin" value="options" />';
|
1037 |
+
echo '<h2>' . __('Delivery Options', 'subscribe2') . ':</h2>';
|
1038 |
+
echo __('Send Email From', 'subscribe2') . ': ';
|
1039 |
+
echo '<input type="radio" name="s2_sender" value="author" ';
|
1040 |
+
if ('author' == $this->sender) {
|
1041 |
+
echo 'checked="checked" ';
|
1042 |
+
}
|
1043 |
+
echo ' /> ' . __('Author of the post', 'subscribe2') . ' ';
|
1044 |
+
echo '<input type="radio" name="s2_sender" value="admin" ';
|
1045 |
+
if ('admin' == $this->sender) {
|
1046 |
+
echo 'checked="checked" ';
|
1047 |
+
}
|
1048 |
+
echo ' /> ' . __('Blog Admin', 'subscribe2') . "<br />\r\n";
|
1049 |
+
echo '<h2>' . __('Email Templates', 'subscribe2') . "</h2>\r\n";
|
1050 |
+
echo '<table width="100%" cellspacing="2" cellpadding="1" class="editform">';
|
1051 |
+
echo '<tr><td>';
|
1052 |
+
echo __('New Post email (must not be empty)', 'subscribe2') . ':';
|
1053 |
+
echo "<br />\r\n";
|
1054 |
+
echo '<textarea rows="9" cols="60" name="s2_mailtext">' . stripslashes($this->mailtext) . "</textarea>\r\n";
|
1055 |
+
echo '</td><td rowspan="2">';
|
1056 |
+
echo '<h3>' . __('Message substitions', 'subscribe2') . "</h3>\r\n";
|
1057 |
+
echo '<dl>';
|
1058 |
+
echo '<dt><b>BLOGNAME</b></dt><dd>' . get_bloginfo('name') . "</dd>\r\n";
|
1059 |
+
echo '<dt><b>BLOGLINK</b></dt><dd>' . get_bloginfo('url') . "</dd>\r\n";
|
1060 |
+
echo '<dt><b>TITLE</b></dt><dd>' . __("the post's title", 'subscribe2') . "</d>\r\n";
|
1061 |
+
echo '<dt><b>POST</b></dt><dd>' . __("the excerpt or the entire post<br />(<i>based on the subscriber's preferences</i>)", 'subscribe2') . "</dd>\r\n";
|
1062 |
+
echo '<dt><b>PERMALINK</b></dt><dd>' . __("the post's permalink", 'subscribe2') . "</dd>\r\n";
|
1063 |
+
echo '<dt><b>MYNAME</b></dt><dd>' . __("the admin or post author's name", 'subscribe2') . "</dd>\r\n";
|
1064 |
+
echo '<dt><b>EMAIL</b></dt><dd>' . __("the admin or post author's email", 'subscribe2') . "</dd>\r\n";
|
1065 |
+
echo '<dt><b>LINK</b></dt><dd>' . __('the generated link to confirm a request<br />(<i>only used in the confirmation email template</i>)', 'subscribe2') . "</dd>\r\n";
|
1066 |
+
echo '</dl></td></tr><tr><td>';
|
1067 |
+
echo __('Subscribe / Unsubscribe confirmation email', 'subscribe2') . ":<br />\r\n";
|
1068 |
+
echo '<textarea rows="9" cols="60" name="s2_confirm_email">' . stripslashes($this->confirm_email) . '</textarea>';
|
1069 |
+
echo "</td></tr></table>\r\n";
|
1070 |
+
|
1071 |
+
// excluded categories
|
1072 |
+
echo '<h2>' . __('Excluded Categories', 'subscribe2') . "</h2>\r\n";
|
1073 |
+
$this->display_category_form(explode(',', $this->get_excluded_cats()));
|
1074 |
+
|
1075 |
+
echo "<p align='center'><input type='checkbox' name='override' ";
|
1076 |
+
if ('1' == $this->override) {
|
1077 |
+
echo "checked='checked'";
|
1078 |
+
}
|
1079 |
+
echo "/> " . __('Allow registered users to subscribe to excluded categories?', 'subscribe2') . '</p>';
|
1080 |
+
echo "<h2>" . __('Writing Options', 'subscribe2') . "</h2>\r\n";
|
1081 |
+
echo "<p align='center'><input type='checkbox' name='showbutton' ";
|
1082 |
+
if ('1' == $this->show_button) {
|
1083 |
+
echo "checked='checked'";
|
1084 |
+
}
|
1085 |
+
echo "/> " . __('Show the Subscribe2 button on the Write toolbar?', 'subscribe2') . '</p>';
|
1086 |
+
// submit
|
1087 |
+
echo '<p align="center"><span class="submit"><input type="submit" id="save" name="submit" value=' . __('Submit', 'subscribe2') . ' /></span></p>';
|
1088 |
+
echo "</form>\r\n";
|
1089 |
+
|
1090 |
+
echo '</div><div class="wrap">';
|
1091 |
+
// reset
|
1092 |
+
echo '<h2>' . __('Reset Default', 'subscribe2') . "</h2>\r\n";
|
1093 |
+
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";
|
1094 |
+
echo '<form method="POST">';
|
1095 |
+
echo '<p align="center"><span class="submit">';
|
1096 |
+
echo '<input type="hidden" name="s2_admin" value="RESET" />';
|
1097 |
+
echo '<input type="submit" id="deletepost" name="submit" value="' . __('RESET', 'subscribe2') .
|
1098 |
+
'" />';
|
1099 |
+
echo "</span></p></form></div>\r\n";
|
1100 |
+
|
1101 |
+
include(ABSPATH . '/wp-admin/admin-footer.php');
|
1102 |
+
// just to be sure
|
1103 |
+
die;
|
1104 |
+
} // end options_menu()
|
1105 |
+
|
1106 |
+
/**
|
1107 |
+
Our profile menu
|
1108 |
+
*/
|
1109 |
+
function user_menu() {
|
1110 |
+
global $user_ID;
|
1111 |
+
|
1112 |
+
get_currentuserinfo();
|
1113 |
+
|
1114 |
+
// was anything POSTed?
|
1115 |
+
if ( (isset($_POST['s2_admin'])) && ('user' == $_POST['s2_admin']) ) {
|
1116 |
+
$format = 'text';
|
1117 |
+
$post = 'post';
|
1118 |
+
if ('html' == $_POST['s2_format']) {
|
1119 |
+
$format = 'html';
|
1120 |
+
}
|
1121 |
+
if ('excerpt' == $_POST['s2_excerpt']) {
|
1122 |
+
$post = 'excerpt';
|
1123 |
+
}
|
1124 |
+
update_usermeta($user_ID, 's2_excerpt', $post);
|
1125 |
+
update_usermeta($user_ID, 's2_format', $format);
|
1126 |
+
|
1127 |
+
$cats = $_POST['category'];
|
1128 |
+
if (empty($cats)) {
|
1129 |
+
$cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
|
1130 |
+
if ($cats) {
|
1131 |
+
foreach ($cats as $cat) {
|
1132 |
+
delete_usermeta($user_ID, "s2_cat$cat");
|
1133 |
+
}
|
1134 |
+
}
|
1135 |
+
delete_usermeta($user_ID, 's2_subscribed');
|
1136 |
+
} else {
|
1137 |
+
if (! is_array($cats)) {
|
1138 |
+
$cats = array($_POST['category']);
|
1139 |
+
}
|
1140 |
+
$old_cats = explode(',', get_usermeta($user_ID, 's2_subscribed'));
|
1141 |
+
$remove = array_diff($old_cats, $cats);
|
1142 |
+
$new = array_diff($cats, $old_cats);
|
1143 |
+
if (! empty($remove)) {
|
1144 |
+
// remove subscription to these cat IDs
|
1145 |
+
foreach ($remove as $id) {
|
1146 |
+
delete_usermeta($user_ID, "s2_cat$id");
|
1147 |
+
}
|
1148 |
+
}
|
1149 |
+
if (! empty($new)) {
|
1150 |
+
// add subscription to these cat IDs
|
1151 |
+
foreach ($new as $id) {
|
1152 |
+
update_usermeta($user_ID, 's2_cat' . $id, "$id");
|
1153 |
+
}
|
1154 |
+
}
|
1155 |
+
update_usermeta($user_ID, 's2_subscribed', implode(',', $cats));
|
1156 |
+
}
|
1157 |
+
}
|
1158 |
+
|
1159 |
+
// show our form
|
1160 |
+
echo '<div class="wrap">';
|
1161 |
+
echo '<h2>' . __('Notification Settings', 'subscribe2') . "</h2>\r\n";
|
1162 |
+
echo '<form method="POST">';
|
1163 |
+
echo '<input type="hidden" name="s2_admin" value="user" />';
|
1164 |
+
if ( defined('S2DIGEST') && FALSE === S2DIGEST ) {
|
1165 |
+
echo __('Receive email as', 'subscribe2') . ': ';
|
1166 |
+
echo '<input type="radio" name="s2_format" value="html"';
|
1167 |
+
if ('html' == get_usermeta($user_ID, 's2_format')) {
|
1168 |
+
echo 'checked="checked" ';
|
1169 |
+
}
|
1170 |
+
echo '/> ' . __('HTML', 'subscribe2') .' ';
|
1171 |
+
echo '<input type="radio" name="s2_format" value="text" ';
|
1172 |
+
if ('text' == get_usermeta($user_ID, 's2_format')) {
|
1173 |
+
echo 'checked="checked" ';
|
1174 |
+
}
|
1175 |
+
echo '/> ' . __('Plain Text', 'subscribe2') . "<br /><br />\r\n";
|
1176 |
+
|
1177 |
+
echo __('Email contains', 'subscribe2') . ': ';
|
1178 |
+
$amount = array ('excerpt' => __('Excerpt Only', 'subscribe2'), 'post' => __('Full Post', 'subscribe2'));
|
1179 |
+
foreach ($amount as $key => $value) {
|
1180 |
+
echo '<input type="radio" name="s2_excerpt" value="' . $key . '"';
|
1181 |
+
if ($key == get_usermeta($user_ID, 's2_excerpt')) {
|
1182 |
+
echo ' checked="checked"';
|
1183 |
+
}
|
1184 |
+
echo " /> $value ";
|
1185 |
+
}
|
1186 |
+
_e('<p>Note: HTML format will always deliver the full post.</p>', 'subscribe2');
|
1187 |
+
|
1188 |
+
// subscribed categories
|
1189 |
+
echo '<h2>' . __('Subscribed Categories', 'subscribe2') . "</h2>\r\n";
|
1190 |
+
$this->display_category_form(explode(',', get_usermeta($user_ID, 's2_subscribed')), get_option('s2_reg_override'));
|
1191 |
+
} else {
|
1192 |
+
// we're doing daily digests, so just show
|
1193 |
+
// subscribe / unnsubscribe
|
1194 |
+
echo __('Receive daily summary of new posts?', 'subscribe2') . ': ';
|
1195 |
+
echo '<input type="radio" name="category" value="1" ';
|
1196 |
+
if (get_usermeta($user_ID, 's2_subscribed')) {
|
1197 |
+
echo 'checked="yes" ';
|
1198 |
+
}
|
1199 |
+
echo '/> Yes <input type="radio" name="category" value="" ';
|
1200 |
+
if (! get_usermeta($user_ID, 's2_subscribed')) {
|
1201 |
+
echo 'checked="yes" ';
|
1202 |
+
}
|
1203 |
+
echo '/> No';
|
1204 |
+
}
|
1205 |
+
|
1206 |
+
// submit
|
1207 |
+
echo '<p align="center"><input type="submit" name="submit" value="' . __("Update preferences", 'subscribe2') . '" /></p>';
|
1208 |
+
echo "</form></div>\r\n";
|
1209 |
+
|
1210 |
+
|
1211 |
+
include(ABSPATH . '/wp-admin/admin-footer.php');
|
1212 |
+
// just to be sure
|
1213 |
+
die;
|
1214 |
+
} // end user_menu()
|
1215 |
+
|
1216 |
+
/**
|
1217 |
+
Display the Write sub-menu
|
1218 |
+
*/
|
1219 |
+
function write_menu() {
|
1220 |
+
// was anything POSTed?
|
1221 |
+
if (isset($_POST['s2_admin']) && ('mail' == $_POST['s2_admin']) ) {
|
1222 |
+
if ('confirmed' == $_POST['what']) {
|
1223 |
+
$recipients = $this->get_public();
|
1224 |
+
} elseif (is_numeric($_POST['what'])) {
|
1225 |
+
$cat = intval($_POST['what']);
|
1226 |
+
$recipients = $this->get_registered("cats=$cat");
|
1227 |
+
} else {
|
1228 |
+
$recipients = $this->get_registered();
|
1229 |
+
}
|
1230 |
+
global $user_identity, $user_email;
|
1231 |
+
get_currentuserinfo();
|
1232 |
+
$this->myname = $user_identity;
|
1233 |
+
$this->myemail = $user_email;
|
1234 |
+
$subject = strip_tags($_POST['subject']);
|
1235 |
+
$message = $_POST['message'];
|
1236 |
+
$this->mail($recipients, $subject, $message, 'text');
|
1237 |
+
$message = $this->mail_sent;
|
1238 |
+
}
|
1239 |
+
|
1240 |
+
if ('' != $message) {
|
1241 |
+
echo '<div class="updated">' . $message . "</div>\r\n";
|
1242 |
+
}
|
1243 |
+
// show our form
|
1244 |
+
echo '<div class="wrap"><h2>' . __('Send email to all subscribers', 'subscribe2') . "</h2>\r\n";
|
1245 |
+
echo "<form method='POST'>\r\n";
|
1246 |
+
echo __('Subject', 'subscribe2') . ': <input type="text" size="69" name="subject" value="' . __('A message from ', 'subscribe2') . get_settings('blogname') . '" /> <br />';
|
1247 |
+
echo '<textarea rows="12" cols="75" name="message"></textarea>';
|
1248 |
+
echo "<br />\r\n";
|
1249 |
+
echo __('Recipients: ', 'subscribe2');
|
1250 |
+
$this->display_subscriber_dropdown('registered', false, array('all', 'public', 'unconfirmed'));
|
1251 |
+
echo '<input type="hidden" name="s2_admin" value="mail" />';
|
1252 |
+
echo ' <span class="submit"><input type="submit" name="submit" value="' . __('Send', 'subscribe2') . '" /></span> ';
|
1253 |
+
echo "</form></div>\r\n";
|
1254 |
+
echo '<div style="clear: both;"><p> </p></div>';
|
1255 |
+
|
1256 |
+
include(ABSPATH . '/wp-admin/admin-footer.php');
|
1257 |
+
// just to be sure
|
1258 |
+
die;
|
1259 |
+
} // end write_menu()
|
1260 |
+
|
1261 |
+
/* ===== helper functions: forms and stuff ===== */
|
1262 |
+
/**
|
1263 |
+
Display a table of categories with checkboxes
|
1264 |
+
|
1265 |
+
Optionally pre-select those categories specified
|
1266 |
+
*/
|
1267 |
+
function display_category_form($selected = array(), $override = 1) {
|
1268 |
+
global $wpdb;
|
1269 |
+
|
1270 |
+
$all_cats = $this->get_all_categories('array');
|
1271 |
+
if (0 == $override) {
|
1272 |
+
// registered users are not allowed to subscribe to
|
1273 |
+
// excluded categories
|
1274 |
+
foreach (explode(',', $this->get_excluded_cats()) as $cat) {
|
1275 |
+
$category = get_category($cat);
|
1276 |
+
$excluded[$cat] = $category->cat_name;
|
1277 |
+
}
|
1278 |
+
$all_cats = array_diff($all_cats, $excluded);
|
1279 |
+
}
|
1280 |
+
|
1281 |
+
$half = (count($all_cats) / 2);
|
1282 |
+
$i = 0;
|
1283 |
+
$j = 0;
|
1284 |
+
echo '<table width="100% cellspacing="2" cellpadding="5" class="editform">';
|
1285 |
+
echo '<tr valign="top"><td width="50%" align="right">';
|
1286 |
+
foreach ($all_cats as $cat_ID => $cat_name) {
|
1287 |
+
if ( ($i >= $half) && (0 == $j) ){
|
1288 |
+
echo '</td><td width="50%" align="left">';
|
1289 |
+
$j++;
|
1290 |
+
}
|
1291 |
+
if (0 == $j) {
|
1292 |
+
echo $cat_name . ' <input type="checkbox" name="category[]" value="' . $cat_ID . '"';
|
1293 |
+
if (in_array($cat_ID, $selected)) {
|
1294 |
+
echo ' checked="checked" ';
|
1295 |
+
}
|
1296 |
+
echo " /><br />\r\n";
|
1297 |
+
} else {
|
1298 |
+
echo '<input type="checkbox" name="category[]" value="' . $cat_ID . '"';
|
1299 |
+
if (in_array($cat_ID, $selected)) {
|
1300 |
+
echo ' checked="checked" ';
|
1301 |
+
}
|
1302 |
+
echo " /> $cat_name<br />\r\n";
|
1303 |
+
}
|
1304 |
+
$i++;
|
1305 |
+
}
|
1306 |
+
echo "</td></tr></table>\r\n";
|
1307 |
+
} // end display_category_form()
|
1308 |
+
|
1309 |
+
/**
|
1310 |
+
Display a drop-down form to select subscribers
|
1311 |
+
|
1312 |
+
$selected is the option to select
|
1313 |
+
$submit is the text to use on the Submit button
|
1314 |
+
*/
|
1315 |
+
function display_subscriber_dropdown ($selected = 'registered', $submit = '', $exclude = array()) {
|
1316 |
+
global $wpdb;
|
1317 |
+
|
1318 |
+
$who = array('all' => __('All Subscribers', 'subscribe2'),
|
1319 |
+
'public' => __('Public Subscribers', 'subscribe2'),
|
1320 |
+
'confirmed' => ' ' . __('Confirmed', 'subscribe2'),
|
1321 |
+
'unconfirmed' => ' ' . __('Unconfirmed', 'subscribe2'),
|
1322 |
+
'registered' => __('Registered Subscribers', 'subscribe2'));
|
1323 |
+
|
1324 |
+
// count the number of subscribers
|
1325 |
+
$count['confirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='1'");
|
1326 |
+
$count['unconfirmed'] = $wpdb->get_var("SELECT COUNT(id) FROM $this->public WHERE active='0'");
|
1327 |
+
if (in_array('unconfirmed', $exclude)) {
|
1328 |
+
$count['public'] = $count['confirmed'];
|
1329 |
+
} elseif (in_array('confirmed', $exclude)) {
|
1330 |
+
$count['public'] = $count['unconfirmed'];
|
1331 |
+
} else {
|
1332 |
+
$count['public'] = ($count['confirmed'] + $count['unconfirmed']);
|
1333 |
+
}
|
1334 |
+
$count['registered'] = $wpdb->get_var("SELECT COUNT(meta_key) FROM $wpdb->usermeta WHERE meta_key='s2_subscribed'");
|
1335 |
+
$count['all'] = ($count['confirmed'] + $count['unconfirmed'] + $count['registered']);
|
1336 |
+
foreach ($this->get_all_categories('array') as $cat_ID => $cat_name) {
|
1337 |
+
$count[$cat_name] = $wpdb->get_var("SELECT COUNT(meta_value) FROM $wpdb->usermeta WHERE meta_key='s2_cat$cat_ID'");
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
// do have actually have some subscribers?
|
1341 |
+
if ( (0 == $count['confirmed']) && (0 == $count['unconfirmed']) && (0 == $count['registered']) ) {
|
1342 |
+
// no? bail out
|
1343 |
+
return;
|
1344 |
+
}
|
1345 |
+
|
1346 |
+
if (false !== $submit) {
|
1347 |
+
echo "<form method='POST'>";
|
1348 |
+
}
|
1349 |
+
echo "<select name='what'>\r\n";
|
1350 |
+
foreach ($who as $whom => $display) {
|
1351 |
+
if (in_array($whom, $exclude)) { continue; }
|
1352 |
+
if (0 == $count[$whom]) { continue; }
|
1353 |
+
|
1354 |
+
echo "<option value='$whom'";
|
1355 |
+
if ($whom == $selected) { echo " selected "; }
|
1356 |
+
echo ">$display (" . ($count[$whom]) . ")</option>\r\n";
|
1357 |
+
}
|
1358 |
+
|
1359 |
+
if ($count['registered'] > 0) {
|
1360 |
+
foreach ($this->get_all_categories('array') as $cat_ID => $cat_name) {
|
1361 |
+
if (in_array($cat_ID, $exclude)) { continue; }
|
1362 |
+
if (0 == $count[$cat_name]) { continue; }
|
1363 |
+
echo "<option value='$cat_ID'";
|
1364 |
+
if ($cat_ID == $selected) { echo " selected "; }
|
1365 |
+
echo "> $cat_name (" . $count[$cat_name] . ") </option>\r\n";
|
1366 |
+
}
|
1367 |
+
}
|
1368 |
+
echo '</select>';
|
1369 |
+
if (false !== $submit) {
|
1370 |
+
echo "<span class='submit'><input type='submit' value='$submit' /></span></form>\r\n";
|
1371 |
+
}
|
1372 |
+
} // end display_subscriber_dropdown()
|
1373 |
+
|
1374 |
+
/* ===== template and filter functions ===== */
|
1375 |
+
/**
|
1376 |
+
Display our form; also handles (un)subscribe requests
|
1377 |
+
*/
|
1378 |
+
function filter($content = '') {
|
1379 |
+
if ('' == $content) { return $content; }
|
1380 |
+
// we don't want to run multiple times
|
1381 |
+
if (1 === $this->filtered) { return $content; }
|
1382 |
+
|
1383 |
+
global $user_ID;
|
1384 |
+
get_currentuserinfo();
|
1385 |
+
if ($user_ID) {
|
1386 |
+
$this->form = $this->use_profile;
|
1387 |
+
}
|
1388 |
+
if (isset($_POST['s2_action'])) {
|
1389 |
+
global $wpdb, $user_email;
|
1390 |
+
if (! is_email($_POST['email'])) {
|
1391 |
+
$this->form .= $this->not_an_email;
|
1392 |
+
} else {
|
1393 |
+
$this->email = $_POST['email'];
|
1394 |
+
// does the supplied email belong to a registered user?
|
1395 |
+
$check = $wpdb->get_var("SELECT user_email FROM $wpdb->users WHERE user_email = '$this->email'");
|
1396 |
+
if ('' != $check) {
|
1397 |
+
// this is a registered email
|
1398 |
+
$this->form = $this->please_log_in;
|
1399 |
+
} else {
|
1400 |
+
// this is not a registered email
|
1401 |
+
// what should we do?
|
1402 |
+
if ('subscribe' == $_POST['s2_action']) {
|
1403 |
+
// someone is trying to subscribe
|
1404 |
+
// lets see if they've tried to subscribe previously
|
1405 |
+
if (! $this->is_public($this->email)) {
|
1406 |
+
// the user is unknown or inactive
|
1407 |
+
$this->add();
|
1408 |
+
$this->send_confirm('add');
|
1409 |
+
// set a variable to denote that we've already run, and shouldn't run again
|
1410 |
+
$this->filtered = 1;
|
1411 |
+
$this->form = $this->confirmation_sent;
|
1412 |
+
} else {
|
1413 |
+
// they're already subscribed
|
1414 |
+
$this->form = $this->already_subscribed;
|
1415 |
+
}
|
1416 |
+
$this->action = 'subscribe';
|
1417 |
+
} elseif ('unsubscribe' == $_POST['s2_action']) {
|
1418 |
+
// is this email a subscriber?
|
1419 |
+
if (false === $this->is_public($this->email)) {
|
1420 |
+
$this->form .= $this->not_subscribed;
|
1421 |
+
} else {
|
1422 |
+
$this->send_confirm('del');
|
1423 |
+
// set a variable to denote that we've already run, and shouldn't run again
|
1424 |
+
$this->filtered = 1;
|
1425 |
+
$this->form = $this->confirmation_sent;
|
1426 |
+
}
|
1427 |
+
$this->action='unsubscribe';
|
1428 |
+
}
|
1429 |
+
}
|
1430 |
+
}
|
1431 |
+
}
|
1432 |
+
return preg_replace('|<!--subscribe2-->|', $this->form, $content);
|
1433 |
+
} // end filter()
|
1434 |
+
|
1435 |
+
/**
|
1436 |
+
Overrides the default query when handling a (un)subscription confirmation
|
1437 |
+
|
1438 |
+
this is basically a trick: if the s2 variable is in the query string, just grab the first static page
|
1439 |
+
and override it's contents later with title_filter() and template_filter()
|
1440 |
+
*/
|
1441 |
+
function query_filter() {
|
1442 |
+
// don't interfere if we've already done our thing
|
1443 |
+
if (1 == $this->filtered) { return; }
|
1444 |
+
|
1445 |
+
global $wpdb;
|
1446 |
+
|
1447 |
+
if ( defined('S2PAGE') && 0 !== S2PAGE ) {
|
1448 |
+
return "page_id=" . S2PAGE;
|
1449 |
+
} else {
|
1450 |
+
$id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status='static' LIMIT 1");
|
1451 |
+
if ($id) {
|
1452 |
+
return "page_id=$id";
|
1453 |
+
} else {
|
1454 |
+
return "showposts=1";
|
1455 |
+
}
|
1456 |
+
}
|
1457 |
+
} // end query_filter()
|
1458 |
+
|
1459 |
+
/**
|
1460 |
+
Overrides the page title
|
1461 |
+
*/
|
1462 |
+
function title_filter() {
|
1463 |
+
// don't interfere if we've already done our thing
|
1464 |
+
if (1 == $this->filtered) { return; }
|
1465 |
+
return __('Subscription Confirmation', 'subscribe2');
|
1466 |
+
} // end title_filter()
|
1467 |
+
|
1468 |
+
/**
|
1469 |
+
Override the template filter to make sure a special template is not used
|
1470 |
+
*/
|
1471 |
+
function template_filter() {
|
1472 |
+
// don't interfere if we've already done our thing
|
1473 |
+
if (1 == $this->filtered) { return; }
|
1474 |
+
return;
|
1475 |
+
} // end template_filter()
|
1476 |
+
|
1477 |
+
/* ===== wp-cron functions ===== */
|
1478 |
+
/**
|
1479 |
+
Send notifications for any posts that are now visible
|
1480 |
+
*/
|
1481 |
+
function subscribe2_hourly() {
|
1482 |
+
$future_posts = get_option('s2_future_posts');
|
1483 |
+
|
1484 |
+
// if we have no future posts, bail out
|
1485 |
+
if (! $future_posts) { return; }
|
1486 |
+
|
1487 |
+
// this will hold the posts that aren't yet visible
|
1488 |
+
$not_yet = array();
|
1489 |
+
|
1490 |
+
foreach ($future_posts as $post) {
|
1491 |
+
if ( current_time('mysql') > $post['date'] ) {
|
1492 |
+
// this post is now visible, so let's
|
1493 |
+
// send a notification
|
1494 |
+
$this->publish($post['id'], 1);
|
1495 |
+
} else {
|
1496 |
+
array_push($not_yet, $post);
|
1497 |
+
}
|
1498 |
+
}
|
1499 |
+
// are the number of elements in $not_yet
|
1500 |
+
// the same as in $future posts?
|
1501 |
+
if ( count($not_yet) != count($future_posts) ) {
|
1502 |
+
// if not, then some posts have been removed
|
1503 |
+
// from $future_posts, and the remainder need
|
1504 |
+
// to be recorded back to the database
|
1505 |
+
update_option('s2_future_posts', $not_yet);
|
1506 |
+
}
|
1507 |
+
} // end subscribe2_hourly
|
1508 |
+
|
1509 |
+
/**
|
1510 |
+
Send a daily digest of yesterday's new posts
|
1511 |
+
*/
|
1512 |
+
function subscribe2_daily() {
|
1513 |
+
global $wpdb;
|
1514 |
+
|
1515 |
+
// collect yesterday's posts
|
1516 |
+
$yesterday = date('Y-m-d', (get_option('wp_cron_daily_lastrun')-60));
|
1517 |
+
$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'");
|
1518 |
+
|
1519 |
+
// do we have any posts?
|
1520 |
+
if (! $posts) { return; }
|
1521 |
+
|
1522 |
+
// if we have posts, let's prepare the digest
|
1523 |
+
foreach ($posts as $post) {
|
1524 |
+
$post_cats = wp_get_post_cats('1', $post->ID);
|
1525 |
+
$post_cats_string = implode(',', $post_cats);
|
1526 |
+
$check = false;
|
1527 |
+
// is the current post assigned to any categories
|
1528 |
+
// which should not generate a notification email?
|
1529 |
+
foreach (explode(',', $this->get_excluded_cats()) as $cat) {
|
1530 |
+
if (in_array($cat, $post_cats)) {
|
1531 |
+
$check = true;
|
1532 |
+
}
|
1533 |
+
}
|
1534 |
+
// if this post is in an excluded category,
|
1535 |
+
// don't include it in the digest
|
1536 |
+
if ($check) {
|
1537 |
+
continue;
|
1538 |
+
}
|
1539 |
+
$message .= "$post->post_title\r\n";
|
1540 |
+
$message .= get_permalink($post->ID) . "\r\n";
|
1541 |
+
$excerpt = $post->post_excerpt;
|
1542 |
+
if ('' == $excerpt) {
|
1543 |
+
// no excerpt, is there a <!--more--> ?
|
1544 |
+
if (false !== strpos($post->post_content, '<!--more-->')) {
|
1545 |
+
list($excerpt, $more) = explode('<!--more-->', $plaintext, 2);
|
1546 |
+
// strip leading and trailing whitespace
|
1547 |
+
$excerpt = trim($excerpt);
|
1548 |
+
} else {
|
1549 |
+
$excerpt = strip_tags($post->post_content);
|
1550 |
+
$words = explode(' ', $excerpt, 56);
|
1551 |
+
if (count($words) > 55) {
|
1552 |
+
array_pop($words);
|
1553 |
+
array_push($words, '[...]');
|
1554 |
+
$excerpt = implode(' ', $words);
|
1555 |
+
}
|
1556 |
+
}
|
1557 |
+
}
|
1558 |
+
$message .= "$excerpt\r\n\r\n";
|
1559 |
+
}
|
1560 |
+
|
1561 |
+
// do we send as admin, or post author?
|
1562 |
+
if ('author' == get_option('s2_sender')) {
|
1563 |
+
// get author details
|
1564 |
+
$user = get_userdata($post->post_author);
|
1565 |
+
} else {
|
1566 |
+
// get admin detailts
|
1567 |
+
$user = get_userdata(1);
|
1568 |
+
}
|
1569 |
+
$subject = '[' . get_settings('blogname') . '] ' . __('Daily Digest', 'subscribe2') . ' ' . $yesterday;
|
1570 |
+
$public = $this->get_public();
|
1571 |
+
if (! is_array($public)) {
|
1572 |
+
$public = array();
|
1573 |
+
}
|
1574 |
+
$registered = $this->get_registered();
|
1575 |
+
if (! is_array($registered)) {
|
1576 |
+
$registered = array();
|
1577 |
+
}
|
1578 |
+
$recipients = array_merge($public, $registered);
|
1579 |
+
$mailtext = $this->substitute(stripslashes(get_option('s2_mailtext')));
|
1580 |
+
$body = str_replace('POST', $message, $mailtext);
|
1581 |
+
$this->mail($recipients, $subject, $body);
|
1582 |
+
} // end subscribe2_daily
|
1583 |
+
|
1584 |
+
/**
|
1585 |
+
If the to-be-deleted post was future-dated, remove it from the list of future-dated posts
|
1586 |
+
*/
|
1587 |
+
function delete_future($ID = 0) {
|
1588 |
+
if (0 == $ID) { return $ID; }
|
1589 |
+
|
1590 |
+
$future = get_settings('s2_future_posts');
|
1591 |
+
// if we have no future-dated posts scheduled, bail out
|
1592 |
+
if ( ! $future) {
|
1593 |
+
return $ID;
|
1594 |
+
}
|
1595 |
+
foreach ($future as $post) {
|
1596 |
+
// is the deleted post in the list of future posts?
|
1597 |
+
if ($ID == $post['id']) {
|
1598 |
+
// skip it
|
1599 |
+
continue;
|
1600 |
+
} else {
|
1601 |
+
// add this to the new list of future posts
|
1602 |
+
$new_future[] = $post;
|
1603 |
+
}
|
1604 |
+
}
|
1605 |
+
if ($new_future != $future) {
|
1606 |
+
update_option('s2_future_posts', $new_future);
|
1607 |
+
}
|
1608 |
+
} // end delete_future()
|
1609 |
+
|
1610 |
+
/* ===== Our constructor ===== */
|
1611 |
+
/**
|
1612 |
+
Subscribe2 constructor
|
1613 |
+
*/
|
1614 |
+
function subscribe2() {
|
1615 |
+
global $table_prefix;
|
1616 |
+
|
1617 |
+
load_plugin_textdomain('subscribe2');
|
1618 |
+
|
1619 |
+
$this->public = $table_prefix . "subscribe2";
|
1620 |
+
// do we need to install anything?
|
1621 |
+
$this->version = get_option('s2_version');
|
1622 |
+
if (! $this->version) { $this->install(); }
|
1623 |
+
if ($this->version !== S2VERSION) { $this->upgrade(); }
|
1624 |
+
|
1625 |
+
if (isset($_GET['s2'])) {
|
1626 |
+
// someone is confirming a request
|
1627 |
+
add_filter('query_string', array(&$this, 'query_filter'));
|
1628 |
+
add_filter('single_post_title', array(&$this, 'title_filter'));
|
1629 |
+
add_filter('the_title', array(&$this, 'title_filter'));
|
1630 |
+
add_filter('the_content', array(&$this, 'confirm'));
|
1631 |
+
}
|
1632 |
+
|
1633 |
+
add_action('admin_menu', array(&$this, 'admin_menu'));
|
1634 |
+
add_action('publish_post', array(&$this, 'publish'));
|
1635 |
+
add_action('edit_post', array(&$this, 'edit'));
|
1636 |
+
add_action('private_to_published', array(&$this, 'private2publish'));
|
1637 |
+
add_action('user_register', array(&$this, 'register'));
|
1638 |
+
add_filter('the_content', array(&$this, 'filter'));
|
1639 |
+
add_action('wp_cron_hourly', array(&$this, 'subscribe2_hourly'));
|
1640 |
+
if ( defined('S2DIGEST') && TRUE === S2DIGEST ) {
|
1641 |
+
add_action('wp_cron_daily', array(&$this, 'subscribe2_daily'));
|
1642 |
+
}
|
1643 |
+
add_action('delete_post', array(&$this, 'delete_future'));
|
1644 |
+
// add our button
|
1645 |
+
if ('1' == get_option('s2_show_button')) {
|
1646 |
+
add_action('init', array(&$this, 's2_button_init'));
|
1647 |
+
add_action('marker_css', array(&$this, 'subscribe2_css'));
|
1648 |
+
}
|
1649 |
+
// load our strings
|
1650 |
+
$this->load_strings();
|
1651 |
+
} // end subscribe2()
|
1652 |
+
|
1653 |
+
/* ===== our variables ===== */
|
1654 |
+
// cache variables
|
1655 |
+
var $version = '';
|
1656 |
+
var $all_public = '';
|
1657 |
+
var $all_unconfirmed = '';
|
1658 |
+
var $excluded_cats = '';
|
1659 |
+
var $post_title = '';
|
1660 |
+
var $permalink = '';
|
1661 |
+
var $myname = '';
|
1662 |
+
var $myemail = '';
|
1663 |
+
var $s2_subject = '[BLOGNAME] TITLE';
|
1664 |
+
var $signup_dates = array();
|
1665 |
+
var $private = false;
|
1666 |
+
var $filtered = 0;
|
1667 |
+
|
1668 |
+
// state variables used to affect processing
|
1669 |
+
var $action = '';
|
1670 |
+
var $email = '';
|
1671 |
+
var $message = '';
|
1672 |
+
var $error = '';
|
1673 |
+
|
1674 |
+
// some messages
|
1675 |
+
var $use_profile = '';
|
1676 |
+
var $please_log_in = '';
|
1677 |
+
var $already_subscribed = '';
|
1678 |
+
var $not_an_email = '';
|
1679 |
+
var $mail_sent = '';
|
1680 |
+
var $form = '';
|
1681 |
+
var $no_such_email = '';
|
1682 |
+
var $added = '';
|
1683 |
+
var $deleted = '';
|
1684 |
+
var $confirm_subject = '';
|
1685 |
+
var $options_saved = '';
|
1686 |
+
var $options_reset = '';
|
1687 |
+
|
1688 |
+
} // end class subscribe2
|
1689 |
+
$mysubscribe2 = new subscribe2();
|
1690 |
+
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subscribe2/subscribe2.pot
CHANGED
@@ -1,464 +1,328 @@
|
|
1 |
-
#
|
2 |
-
# Copyright (C)
|
3 |
-
# This file is distributed under the same license as the
|
4 |
-
#
|
5 |
#
|
6 |
#, fuzzy
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
-
"Project-Id-Version:
|
10 |
-
"Report-Msgid-Bugs-To: \n"
|
11 |
-
"POT-Creation-Date:
|
12 |
-
"PO-Revision-Date:
|
13 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
"MIME-Version: 1.0\n"
|
16 |
"Content-Type: text/plain; charset=CHARSET\n"
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
18 |
|
19 |
-
#: subscribe2.php:
|
20 |
-
msgid "
|
21 |
msgstr ""
|
22 |
|
23 |
-
#: subscribe2.php:
|
24 |
-
msgid "You may manage your subscription options from your "
|
25 |
msgstr ""
|
26 |
|
27 |
-
#: subscribe2.php:
|
|
|
|
|
|
|
|
|
28 |
msgid "A confirmation message is on its way!"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: subscribe2.php:
|
32 |
msgid "That email address is already subscribed."
|
33 |
msgstr ""
|
34 |
|
35 |
-
#: subscribe2.php:
|
36 |
msgid "That email address is not subscribed."
|
37 |
msgstr ""
|
38 |
|
39 |
-
#: subscribe2.php:
|
40 |
msgid "Sorry, but that does not look like an email address to me."
|
41 |
msgstr ""
|
42 |
|
43 |
-
#: subscribe2.php:
|
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:
|
54 |
msgid "Your email:"
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: subscribe2.php:
|
58 |
-
msgid "
|
59 |
msgstr ""
|
60 |
|
61 |
-
#: subscribe2.php:
|
62 |
-
msgid "
|
63 |
msgstr ""
|
64 |
|
65 |
-
#: subscribe2.php:
|
66 |
msgid "Send"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: subscribe2.php:
|
70 |
msgid "No such email address is registered."
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: subscribe2.php:
|
74 |
msgid "You have successfully subscribed!"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: subscribe2.php:
|
78 |
msgid "You have successfully unsubscribed."
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: subscribe2.php:
|
82 |
msgid "Please confirm your request"
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: subscribe2.php:
|
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:
|
102 |
msgid "Options reset!"
|
103 |
msgstr ""
|
104 |
|
105 |
-
#: subscribe2.php:
|
106 |
msgid "Subscribers"
|
107 |
msgstr ""
|
108 |
|
109 |
-
#: subscribe2.php:
|
110 |
msgid "Subscribe2 Options"
|
111 |
msgstr ""
|
112 |
|
113 |
-
#: subscribe2.php:
|
114 |
-
msgid "Subscribe2"
|
115 |
-
msgstr ""
|
116 |
-
|
117 |
-
#: subscribe2.php:151 subscribe2.php:153
|
118 |
msgid "Subscriptions"
|
119 |
msgstr ""
|
120 |
|
121 |
-
#: subscribe2.php:
|
122 |
-
msgid "Mail
|
123 |
msgstr ""
|
124 |
|
125 |
-
#: subscribe2.php:
|
126 |
-
msgid "Once Weekly"
|
127 |
-
msgstr ""
|
128 |
-
|
129 |
-
#: subscribe2.php:780
|
130 |
msgid "New subscriber"
|
131 |
msgstr ""
|
132 |
|
133 |
-
#: subscribe2.php:
|
134 |
msgid "subscribed to email notifications!"
|
135 |
msgstr ""
|
136 |
|
137 |
-
#: subscribe2.php:
|
138 |
msgid "Address(es) subscribed!"
|
139 |
msgstr ""
|
140 |
|
141 |
-
#: subscribe2.php:
|
142 |
msgid "deleted!"
|
143 |
msgstr ""
|
144 |
|
145 |
-
#: subscribe2.php:
|
146 |
msgid "status changed!"
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: subscribe2.php:
|
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:
|
170 |
msgid "Enter addresses, one per line or comma-seperated"
|
171 |
msgstr ""
|
172 |
|
173 |
-
#: subscribe2.php:
|
|
|
|
|
|
|
|
|
174 |
msgid "Filter"
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: subscribe2.php:
|
178 |
msgid ""
|
179 |
"Registered on the left, confirmed in the middle, unconfirmed on the right"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#: subscribe2.php:
|
183 |
-
msgid "Save Emails to CSV File"
|
184 |
-
msgstr ""
|
185 |
-
|
186 |
-
#: subscribe2.php:1251
|
187 |
msgid "NONE"
|
188 |
msgstr ""
|
189 |
|
190 |
-
#: subscribe2.php:
|
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:
|
213 |
msgid "Send Email From"
|
214 |
msgstr ""
|
215 |
|
216 |
-
#: subscribe2.php:
|
217 |
msgid "Author of the post"
|
218 |
msgstr ""
|
219 |
|
220 |
-
#: subscribe2.php:
|
221 |
msgid "Blog Admin"
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: subscribe2.php:
|
225 |
-
msgid "Send Email as Digest"
|
226 |
-
msgstr ""
|
227 |
-
|
228 |
-
#: subscribe2.php:1386
|
229 |
msgid "Email Templates"
|
230 |
msgstr ""
|
231 |
|
232 |
-
#: subscribe2.php:
|
233 |
msgid "New Post email (must not be empty)"
|
234 |
msgstr ""
|
235 |
|
236 |
-
#: subscribe2.php:
|
237 |
msgid "Message substitions"
|
238 |
msgstr ""
|
239 |
|
240 |
-
#: subscribe2.php:
|
241 |
msgid "the post's title"
|
242 |
msgstr ""
|
243 |
|
244 |
-
#: subscribe2.php:
|
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:
|
251 |
msgid "the post's permalink"
|
252 |
msgstr ""
|
253 |
|
254 |
-
#: subscribe2.php:
|
255 |
msgid "the admin or post author's name"
|
256 |
msgstr ""
|
257 |
|
258 |
-
#: subscribe2.php:
|
259 |
msgid "the admin or post author's email"
|
260 |
msgstr ""
|
261 |
|
262 |
-
#: subscribe2.php:
|
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:
|
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:
|
283 |
-
msgid "Reminder email to Unconfirmed Subscribers"
|
284 |
-
msgstr ""
|
285 |
-
|
286 |
-
#: subscribe2.php:1414
|
287 |
msgid "Excluded Categories"
|
288 |
msgstr ""
|
289 |
|
290 |
-
#: subscribe2.php:
|
291 |
msgid "Allow registered users to subscribe to excluded categories?"
|
292 |
msgstr ""
|
293 |
|
294 |
-
#: subscribe2.php:
|
295 |
msgid "Writing Options"
|
296 |
msgstr ""
|
297 |
|
298 |
-
#: subscribe2.php:
|
299 |
msgid "Show the Subscribe2 button on the Write toolbar?"
|
300 |
msgstr ""
|
301 |
|
302 |
-
#: subscribe2.php:
|
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:
|
349 |
msgid "Reset Default"
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: subscribe2.php:
|
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:
|
359 |
msgid "RESET"
|
360 |
msgstr ""
|
361 |
|
362 |
-
#: subscribe2.php:
|
363 |
-
msgid "Subscription preferences updated."
|
364 |
-
msgstr ""
|
365 |
-
|
366 |
-
#: subscribe2.php:1544
|
367 |
msgid "Notification Settings"
|
368 |
msgstr ""
|
369 |
|
370 |
-
#: subscribe2.php:
|
371 |
msgid "Receive email as"
|
372 |
msgstr ""
|
373 |
|
374 |
-
#: subscribe2.php:
|
|
|
|
|
|
|
|
|
375 |
msgid "Plain Text"
|
376 |
msgstr ""
|
377 |
|
378 |
-
#: subscribe2.php:
|
379 |
msgid "Email contains"
|
380 |
msgstr ""
|
381 |
|
382 |
-
#: subscribe2.php:
|
383 |
msgid "Excerpt Only"
|
384 |
msgstr ""
|
385 |
|
386 |
-
#: subscribe2.php:
|
387 |
msgid "Full Post"
|
388 |
msgstr ""
|
389 |
|
390 |
-
#: subscribe2.php:
|
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:
|
403 |
msgid "Receive daily summary of new posts?"
|
404 |
msgstr ""
|
405 |
|
406 |
-
#: subscribe2.php:
|
407 |
-
msgid "Update
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: subscribe2.php:
|
411 |
msgid "Send email to all subscribers"
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: subscribe2.php:
|
415 |
msgid "Subject"
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: subscribe2.php:
|
419 |
msgid "A message from "
|
420 |
msgstr ""
|
421 |
|
422 |
-
#: subscribe2.php:
|
423 |
msgid "Recipients: "
|
424 |
msgstr ""
|
425 |
|
426 |
-
#: subscribe2.php:
|
427 |
-
msgid "Select / Unselect All"
|
428 |
-
msgstr ""
|
429 |
-
|
430 |
-
#: subscribe2.php:1729
|
431 |
msgid "All Subscribers"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: subscribe2.php:
|
435 |
msgid "Public Subscribers"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: subscribe2.php:
|
439 |
msgid "Confirmed"
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: subscribe2.php:
|
443 |
msgid "Unconfirmed"
|
444 |
msgstr ""
|
445 |
|
446 |
-
#: subscribe2.php:
|
447 |
msgid "Registered Subscribers"
|
448 |
msgstr ""
|
449 |
|
450 |
-
#: subscribe2.php:
|
451 |
-
msgid "Per Post Email"
|
452 |
-
msgstr ""
|
453 |
-
|
454 |
-
#: subscribe2.php:1806
|
455 |
-
msgid "Next email notification will be sent"
|
456 |
-
msgstr ""
|
457 |
-
|
458 |
-
#: subscribe2.php:1906
|
459 |
msgid "Subscription Confirmation"
|
460 |
msgstr ""
|
461 |
|
462 |
-
#: subscribe2.php:
|
463 |
-
msgid "Digest
|
464 |
msgstr ""
|
1 |
+
# Subscribe2 WordPress Plugin.
|
2 |
+
# Copyright (C) 2006 Matthew Robinson
|
3 |
+
# This file is distributed under the same license as the Subscribe2 package.
|
4 |
+
# Matthew Robinson <admin@prescriber.org.uk>, 2006.
|
5 |
#
|
6 |
#, fuzzy
|
7 |
msgid ""
|
8 |
msgstr ""
|
9 |
+
"Project-Id-Version: 2.2.2\n"
|
10 |
+
"Report-Msgid-Bugs-To: admin@prescriber.org.uk\n"
|
11 |
+
"POT-Creation-Date: 2006-10-19 19:12+0100\n"
|
12 |
+
"PO-Revision-Date: 2006-10-19 19:14+0\n"
|
13 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
"MIME-Version: 1.0\n"
|
16 |
"Content-Type: text/plain; charset=CHARSET\n"
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
18 |
|
19 |
+
#: subscribe2.php:61
|
20 |
+
msgid "Please log in to manage your subscription options."
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: subscribe2.php:63
|
24 |
+
msgid "You may manage your subscription options from your profile."
|
25 |
msgstr ""
|
26 |
|
27 |
+
#: subscribe2.php:63
|
28 |
+
msgid "Click here to manage your subscription settings"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: subscribe2.php:65
|
32 |
msgid "A confirmation message is on its way!"
|
33 |
msgstr ""
|
34 |
|
35 |
+
#: subscribe2.php:67
|
36 |
msgid "That email address is already subscribed."
|
37 |
msgstr ""
|
38 |
|
39 |
+
#: subscribe2.php:69
|
40 |
msgid "That email address is not subscribed."
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: subscribe2.php:71
|
44 |
msgid "Sorry, but that does not look like an email address to me."
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: subscribe2.php:73
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
msgid "Message sent!"
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: subscribe2.php:75
|
52 |
msgid "Your email:"
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: subscribe2.php:75
|
56 |
+
msgid "subscribe"
|
57 |
msgstr ""
|
58 |
|
59 |
+
#: subscribe2.php:75
|
60 |
+
msgid "unsubscribe"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: subscribe2.php:75 subscribe2.php:1252
|
64 |
msgid "Send"
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: subscribe2.php:78
|
68 |
msgid "No such email address is registered."
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: subscribe2.php:80
|
72 |
msgid "You have successfully subscribed!"
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: subscribe2.php:82
|
76 |
msgid "You have successfully unsubscribed."
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: subscribe2.php:84
|
80 |
msgid "Please confirm your request"
|
81 |
msgstr ""
|
82 |
|
83 |
+
#: subscribe2.php:87
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
msgid "Options saved!"
|
85 |
msgstr ""
|
86 |
|
87 |
+
#: subscribe2.php:88
|
88 |
msgid "Options reset!"
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: subscribe2.php:96 subscribe2.php:944
|
92 |
msgid "Subscribers"
|
93 |
msgstr ""
|
94 |
|
95 |
+
#: subscribe2.php:97
|
96 |
msgid "Subscribe2 Options"
|
97 |
msgstr ""
|
98 |
|
99 |
+
#: subscribe2.php:98
|
|
|
|
|
|
|
|
|
100 |
msgid "Subscriptions"
|
101 |
msgstr ""
|
102 |
|
103 |
+
#: subscribe2.php:99
|
104 |
+
msgid "Mail subscribers"
|
105 |
msgstr ""
|
106 |
|
107 |
+
#: subscribe2.php:667
|
|
|
|
|
|
|
|
|
108 |
msgid "New subscriber"
|
109 |
msgstr ""
|
110 |
|
111 |
+
#: subscribe2.php:668
|
112 |
msgid "subscribed to email notifications!"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: subscribe2.php:856
|
116 |
msgid "Address(es) subscribed!"
|
117 |
msgstr ""
|
118 |
|
119 |
+
#: subscribe2.php:859
|
120 |
msgid "deleted!"
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: subscribe2.php:862
|
124 |
msgid "status changed!"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: subscribe2.php:935
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
msgid "Subscribe Addresses"
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: subscribe2.php:937
|
132 |
msgid "Enter addresses, one per line or comma-seperated"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: subscribe2.php:939
|
136 |
+
msgid "Subscribe"
|
137 |
+
msgstr ""
|
138 |
+
|
139 |
+
#: subscribe2.php:946
|
140 |
msgid "Filter"
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: subscribe2.php:950
|
144 |
msgid ""
|
145 |
"Registered on the left, confirmed in the middle, unconfirmed on the right"
|
146 |
msgstr ""
|
147 |
|
148 |
+
#: subscribe2.php:976
|
|
|
|
|
|
|
|
|
149 |
msgid "NONE"
|
150 |
msgstr ""
|
151 |
|
152 |
+
#: subscribe2.php:1037
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
msgid "Delivery Options"
|
154 |
msgstr ""
|
155 |
|
156 |
+
#: subscribe2.php:1038
|
157 |
msgid "Send Email From"
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: subscribe2.php:1043
|
161 |
msgid "Author of the post"
|
162 |
msgstr ""
|
163 |
|
164 |
+
#: subscribe2.php:1048
|
165 |
msgid "Blog Admin"
|
166 |
msgstr ""
|
167 |
|
168 |
+
#: subscribe2.php:1049
|
|
|
|
|
|
|
|
|
169 |
msgid "Email Templates"
|
170 |
msgstr ""
|
171 |
|
172 |
+
#: subscribe2.php:1052
|
173 |
msgid "New Post email (must not be empty)"
|
174 |
msgstr ""
|
175 |
|
176 |
+
#: subscribe2.php:1056
|
177 |
msgid "Message substitions"
|
178 |
msgstr ""
|
179 |
|
180 |
+
#: subscribe2.php:1060
|
181 |
msgid "the post's title"
|
182 |
msgstr ""
|
183 |
|
184 |
+
#: subscribe2.php:1061
|
185 |
msgid ""
|
186 |
"the excerpt or the entire post<br />(<i>based on the subscriber's "
|
187 |
"preferences</i>)"
|
188 |
msgstr ""
|
189 |
|
190 |
+
#: subscribe2.php:1062
|
191 |
msgid "the post's permalink"
|
192 |
msgstr ""
|
193 |
|
194 |
+
#: subscribe2.php:1063
|
195 |
msgid "the admin or post author's name"
|
196 |
msgstr ""
|
197 |
|
198 |
+
#: subscribe2.php:1064
|
199 |
msgid "the admin or post author's email"
|
200 |
msgstr ""
|
201 |
|
202 |
+
#: subscribe2.php:1065
|
|
|
|
|
|
|
|
|
203 |
msgid ""
|
204 |
"the generated link to confirm a request<br />(<i>only used in the "
|
205 |
"confirmation email template</i>)"
|
206 |
msgstr ""
|
207 |
|
208 |
+
#: subscribe2.php:1067
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
msgid "Subscribe / Unsubscribe confirmation email"
|
210 |
msgstr ""
|
211 |
|
212 |
+
#: subscribe2.php:1072
|
|
|
|
|
|
|
|
|
213 |
msgid "Excluded Categories"
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: subscribe2.php:1079
|
217 |
msgid "Allow registered users to subscribe to excluded categories?"
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: subscribe2.php:1080
|
221 |
msgid "Writing Options"
|
222 |
msgstr ""
|
223 |
|
224 |
+
#: subscribe2.php:1085
|
225 |
msgid "Show the Subscribe2 button on the Write toolbar?"
|
226 |
msgstr ""
|
227 |
|
228 |
+
#: subscribe2.php:1087
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
msgid "Submit"
|
230 |
msgstr ""
|
231 |
|
232 |
+
#: subscribe2.php:1092
|
233 |
msgid "Reset Default"
|
234 |
msgstr ""
|
235 |
|
236 |
+
#: subscribe2.php:1093
|
237 |
msgid ""
|
238 |
"Use this to reset all options to their defaults. This <strong><em>will not</"
|
239 |
"em></strong> modify your list of subscribers."
|
240 |
msgstr ""
|
241 |
|
242 |
+
#: subscribe2.php:1097
|
243 |
msgid "RESET"
|
244 |
msgstr ""
|
245 |
|
246 |
+
#: subscribe2.php:1161
|
|
|
|
|
|
|
|
|
247 |
msgid "Notification Settings"
|
248 |
msgstr ""
|
249 |
|
250 |
+
#: subscribe2.php:1165
|
251 |
msgid "Receive email as"
|
252 |
msgstr ""
|
253 |
|
254 |
+
#: subscribe2.php:1170
|
255 |
+
msgid "HTML"
|
256 |
+
msgstr ""
|
257 |
+
|
258 |
+
#: subscribe2.php:1175
|
259 |
msgid "Plain Text"
|
260 |
msgstr ""
|
261 |
|
262 |
+
#: subscribe2.php:1177
|
263 |
msgid "Email contains"
|
264 |
msgstr ""
|
265 |
|
266 |
+
#: subscribe2.php:1178
|
267 |
msgid "Excerpt Only"
|
268 |
msgstr ""
|
269 |
|
270 |
+
#: subscribe2.php:1178
|
271 |
msgid "Full Post"
|
272 |
msgstr ""
|
273 |
|
274 |
+
#: subscribe2.php:1189
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
275 |
msgid "Subscribed Categories"
|
276 |
msgstr ""
|
277 |
|
278 |
+
#: subscribe2.php:1194
|
279 |
msgid "Receive daily summary of new posts?"
|
280 |
msgstr ""
|
281 |
|
282 |
+
#: subscribe2.php:1207
|
283 |
+
msgid "Update preferences"
|
284 |
msgstr ""
|
285 |
|
286 |
+
#: subscribe2.php:1244
|
287 |
msgid "Send email to all subscribers"
|
288 |
msgstr ""
|
289 |
|
290 |
+
#: subscribe2.php:1246
|
291 |
msgid "Subject"
|
292 |
msgstr ""
|
293 |
|
294 |
+
#: subscribe2.php:1246
|
295 |
msgid "A message from "
|
296 |
msgstr ""
|
297 |
|
298 |
+
#: subscribe2.php:1249
|
299 |
msgid "Recipients: "
|
300 |
msgstr ""
|
301 |
|
302 |
+
#: subscribe2.php:1318
|
|
|
|
|
|
|
|
|
303 |
msgid "All Subscribers"
|
304 |
msgstr ""
|
305 |
|
306 |
+
#: subscribe2.php:1319
|
307 |
msgid "Public Subscribers"
|
308 |
msgstr ""
|
309 |
|
310 |
+
#: subscribe2.php:1320
|
311 |
msgid "Confirmed"
|
312 |
msgstr ""
|
313 |
|
314 |
+
#: subscribe2.php:1321
|
315 |
msgid "Unconfirmed"
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: subscribe2.php:1322
|
319 |
msgid "Registered Subscribers"
|
320 |
msgstr ""
|
321 |
|
322 |
+
#: subscribe2.php:1465
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
323 |
msgid "Subscription Confirmation"
|
324 |
msgstr ""
|
325 |
|
326 |
+
#: subscribe2.php:1569
|
327 |
+
msgid "Daily Digest"
|
328 |
msgstr ""
|