Subscribe2 - Version 8.7

Version Description

Download this release

Release Info

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

Code changes from version 8.6 to 8.7

ChangeLog.txt ADDED
@@ -0,0 +1,747 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ = Version 8.7 by Matthew Robinson =
2
+
3
+ * Enabled {TITLE} as a keyword in URL Tracking in free version
4
+ * Moved Subscribers page class code to a new external class file to avoid fatal PHP errors on some sites
5
+ * Fixed a glitch in the {TABLELINK} tag caused by adding support for {TINYLINK} to the digest email
6
+ * Fixed and repaired addition of extra comma to s2_subscribed table values and also addition of null s2cat values
7
+ * Fixed incomplete table creation on new installs - thanks to niclaslockner
8
+ * Fix for PHP Warning about an undefined $value variable on form submission - thanks to annewinterbottom
9
+ * Rename public subscriber variables internally for consistency
10
+ * Implement variable caching for Registered users in the same way as for Public subscribers
11
+ * Widen Subject boxes on the Subscribe2->Settings:Templates page - props Orion42
12
+ * Allow easier customisation of the word wrap length in plain text emails - props Orion42
13
+ * Abstracted the upgrade() code and made it incremental so that only necessary code is executed
14
+ * Fixed a bug in the Send Email page that failed to send emails to Public Subscribers when All Users was selected - thanks to Gui
15
+ * Added an option to disable JavaScript within the Widget
16
+ * Minor code improvements
17
+
18
+ = Version 8.6 by Matthew Robinson =
19
+
20
+ * Minor layout update to Widget Settings
21
+ * Fix for non-sending notifications for pages - proposed by ctcdesign
22
+ * Fix for a translation domain error in admin/settings.php - proposed by monpelaud
23
+ * Fix for deprecated is_blog_user() function on Multisite installs - proposed by hallcp
24
+ * Extend Subscribe2 database table to collect additional data to meet DreamHost privacy policy - thanks to matt, joshukraine and Dreamhost
25
+ * Refresh Subscribers page in admin, tables now sortable on present columns
26
+ * Order CSS files better by applying CSSComb
27
+ * Reuse $value variable in the 'frontend' class to reduce translation strings
28
+ * Improve AJAX form to obey the shortcode hide parameter - proposed by bwsl
29
+ * Correct spelling error in the Settings page - proposed by dimadin
30
+ * Call translation code via a hook to allow greater dynamic control - proposed by dimadin
31
+ * Look in more locations for translation files, can place in core languages folder now for upgrade protection
32
+ * Refresh Settings page in admin to a tabbed interface
33
+ * Strip HTML from email subject to improve compatibility with other plugins and WordPress 3.5
34
+ * Fixed bug in the display of compulsory categories in the Settings page
35
+ * Add option to manually send emails to All Registered Users and Public Subscribers - proposed by TigWeb
36
+ * Enable TinyURL link shortening for Digest Notification Emails if {TINYLINK} is present in the Email Template
37
+ * Fixed bug in TinyURL error handling and fallback when link generation fails
38
+ * Fixed bug where {DATE} was left blank in the subject field for future scheduled post notifications - thanks to Steve Savoy
39
+ * Added a filter to allow on-the-fly alteration of the size of the {IMAGE} in the paid version
40
+ * Fixed a warning message for a core function ready for WordPress 3.6
41
+ * Enabled {TITLE} as a keyword in URL Tracking in HTML version
42
+
43
+ = Version 8.5 by Matthew Robinson =
44
+
45
+ * Fixed width of a page select drop down in the Widget settings - thanks to Balky79
46
+ * Added option to check the comment subscription box by default - proposed by Doug Lerner
47
+ * Improved off-domain error message in Settings page and address checking if Blogname is selected
48
+ * Fixed an issue on Multisite installs displaying the wrong link to profiles pages for other blog sites - thanks to MadtownLems
49
+ * Fixed an issue with Image and Shortcode replacement in the visual editor (TinyMCE) - thanks to Dave Firman
50
+ * Fixed unique IDs for 2 possible error messages in the Settings page - thanks to MadtownLems
51
+ * Fixed several HTML5 validation error in the admin pages
52
+ * Improved regex replacedment of s strike and del HTML tags in plaintext emails - thanks to jimshell
53
+ * Use wp_kses() rather than strip_tags() on email subject lines so that single angle brackets are allowed - thanks to eightize and esmi
54
+ * Allow remote definition of email address in form - thanks to orion42
55
+ * Added ability to have compulsory categories - proposed by iClimb
56
+ * Apply WordPress the_author filter to the author names to improve plugin compatibility - proposed by SpaciousMind
57
+ * Added the ability to track the post ID in the tracking Parameter field - proposed by Laga
58
+ * Protect the 's2email' post meta key - proposed by Nally123
59
+ * Strip excess white space within the Digest email when images are removed
60
+ * Add a time column to the public subscriber table for hosting provider spam policy compliance - proposed by Erik N
61
+ * Change plugin folder name to suppress update prompts for the HTML version
62
+ * Rename js files consistently with core ticket 21633
63
+ * Add width parameter to comment form text to fix issues with some themes - proposed by mharpen
64
+ * Added option to include Sticky Posts at the top of all Digest Notifications - proposed by pkhatmedia
65
+ * Fixed some Markdown errors in the ReadMe
66
+
67
+ = Version 8.4 by Matthew Robinson =
68
+
69
+ * Fixed an error in the 'Send Mail' page that blocked emails from being sent
70
+ * Added tracking features to Digest title links in HTML version - thanks to Jeremy Schultz
71
+ * Provide clearer user feedback for Send and Preview buttons in "Send Email" window
72
+ * Add new option to the Widget to return users to the home page on submission
73
+ * Added warning to Settings page if selected sender email address is "off-domain"
74
+ * Fixed numerous minor SQL injections vectors - thanks to Tom Adams (holizz)
75
+ * Removed auto-embed iframes from HTML emails - thanks to Doug Lerner
76
+ * Add more intuitive user messages for Public Subscribers when Unsubscribing - thanks to Doug Lerner
77
+
78
+ = Version 8.3 by Matthew Robinson =
79
+
80
+ * Fixed a bunch of PHP messages - should not show anyway unless WP_DEBUG is true or PHP error reporting is on a high setting
81
+ * Fixed bulk category management so it applies to all users and not just the first record
82
+ * Update 'autosub' to no on one-click unsubscribe instead of erasing the value
83
+ * Return empty string is get_tracking_link() is passed and empty variable
84
+ * Fixed some typographical errors
85
+ * Fixed profile page to obey 'one click' display setting
86
+ * Fixed implode error seen when sending preview emails on some configurations
87
+ * Fixed a error in the admin user dropdown on installs (particularly Multisite) where there may be no administrator level users
88
+ * Added a button text filter for the Subscribe and Unsubscribe buttons - proposed by casben79
89
+ * Use wp_hash in place of MD5 to further obfuscate confirmation links - thanks to Charlie Eriksen, Otto and Ipstenu
90
+
91
+ = Version 8.2 by Matthew Robinson =
92
+
93
+ * Implemented use of Farbtastic as colour chooser in the Counter Widget because ColorPicker has been deprecated in WordPress
94
+ * Fixed one hook call in WordPress to pass $this variable by reference to save a little more RAM
95
+ * Fixed Subscribe2 implementation of custom taxonomies
96
+ * Fixed Bulk Management Format Change code to apply for all users
97
+ * Fix for low impact security vulnerability
98
+
99
+ = Version 8.1 by Matthew Robinson =
100
+
101
+ * Fixed redirect errors and crash affecting multisite installs on upgrade to 8.0 - thanks in particular to Ed Cooper
102
+ * Fixed several other multisite bugs affecting links and styling - thanks to Mark Olbert
103
+ * Fixed empty CSV exports - thanks to Gil Namur
104
+
105
+ = Version 8.0 by Matthew Robinson =
106
+
107
+ * Split the main plugin file into separate classes for more efficient (60% less RAM) server resource usage - huge thanks to Milan Petrovic
108
+ * Ensure notifications for posts are sent to all active registered users
109
+ * Fixed bug in Bulk Management code to include all filtered Registered Subscribers, not just those on current screen - thanks to samandiriel
110
+ * Fixed some PHP messages regarding use of deprecated clean_url() function and WordPress version checking - thanks to anmari
111
+ * Improved white space trimming in the code so it respects tabs and line breaks - thanks to belg4mit
112
+ * Updated screenshots to Subscribe2 8.0 and WordPress 3.3.1 screen layouts
113
+ * Implemented one-click buttons to subscribe and unsubscribe - thanks to dimadin for code patch
114
+ * Changed some default settings, sender to BLOGNAME and number of recipients per email to 1
115
+ * Implemented a change so that categories are not displayed in the filter dropdowns when using Subscribe2 in digest mode
116
+ * Ensure an action is specified for HTML5 validity - thanks to Franco Carinato
117
+ * Introduced 4 new hooks to filter per-post subscribers for each of the 4 email types - thanks to Nicolas Noé
118
+
119
+ = Version 7.2 by Matthew Robinson =
120
+
121
+ * Fix for non-sending Preview emails when sender details match recipient details exactly
122
+ * Remove some HTML tags (DEL, S and STRIKE) from plain text content to avoid confusing reading - props cpo
123
+ * Improved removal of excess white space within the content of the plain text emails
124
+ * Introduced 'size' parameter to the shortcode to allow sizing of the email text input box
125
+ * Fix for non-sending emails to newly Registered Subscribers - thanks to Gengar003 and WebEndev
126
+ * Fix for commenter subscriptions on systems without moderation in place - thanks to elarson
127
+ * Improved the TinyMCE plugin code that handles placement of the Subscribe2 shortcode in the rich text editor
128
+ * Tidied up some public subscribe functions removing unnecessary code
129
+
130
+ = Version 7.1 by Matthew Robinson =
131
+
132
+ * Fix for Opt-out by Author for Registered Users that resulted in posts being sent even though a user had opted out
133
+ * Workaround implemented for core WordPress glitch that reults in blank sender details in digest emails when using "Post Author" as sender
134
+ * Introduced DIV HTML tags to the administrion menu screens to allow jQuery custom hiding by plugins - proposed by madtownlems
135
+ * Reduced code overhead when collecting admin level users
136
+ * Fix for non-sending emails when published via XML RPC interface (like the iOS app and Windows Live Writer) - thanks to bellarush & Marc Williams
137
+ * Removed the X-Mailer header ready for core PHPMailer update
138
+ * Removed single use of split() function which is deprecated in PHP 5.3.0
139
+ * Added additional parameters to the 's2_html_email' hook - props Milan Dinić
140
+ * Added a check on wp-cron.php to warn digest email users - props Dave Bergschneider
141
+
142
+ = Version 7.0.1 by Matthew Robinson =
143
+
144
+ * Fixed a typo in the include/options file that caused failed installs and upgrades
145
+ * Fix for get_registered() function for fringe situations
146
+
147
+ = Version 7.0 by Matthew Robinson =
148
+
149
+ * NOTE Subscribe2 now requires WordPress 3.1 or higher
150
+ * Implemented top level menu to make Subscribe2 menu access easier
151
+ * Introduced the ability to add UTM Tracking parameters to email links - Thanks to Sander de Boer
152
+ * Introduced Opt-out by Author for Registered Users (on sites where there is more than one author)
153
+ * Improved table layout code on user management page
154
+ * Make use of core checked() function to save code space
155
+ * Show user name for Registered Users when mouse is hovered over email address in Subscribe2->Subscribers
156
+ * Move IP address display on hover from date of signup to email address for Public Subscribers so consistent with above change
157
+ * Introduced the 's2_capability' filter to allow API amendments to page access for different user capabilities
158
+ * Added support to exclude 'post formats' from generating emails provided 'post formats' are supported by the current active theme
159
+ * Implemented use of core WordPress functions to place the authoring button shortcuts, removed reliance on buttonsnap.php so this library is now dropped
160
+ * Implement use of wp_register_scripts() function
161
+ * Display custom post types added using the API in the Settings page as confirmation things are working
162
+ * Added two missed strings to the translation domain and corrected a typo - thanks to Stig Ulfsby
163
+ * Added a filter for the outgoing email subject line
164
+ * Added an option to AJAXify the form, read the FAQs for how to use this new feature
165
+
166
+ = Version 6.5 by Matthew Robinson =
167
+
168
+ * Fix for Multisite / MU detection for WordPress versions prior to 3.0
169
+ * Fix in the upgrade() function to insert database entires for Registered Users on first time install
170
+ * Fix for the uninstaller script to allow use on regular and Multisite WordPress
171
+ * Updated uninstaller to remove any postmeta entries on uninstall
172
+ * Fix for blank post detail on HTML Excerpt notifications when the post content is brief
173
+ * Fix for some PHP notices
174
+ * Fix to remove all cron settings when options are reverted to per-post
175
+ * Minor code layout changes and comment updates
176
+ * Dropped use of WP_CONTENT_DIR to fix issues on site where wp-content/ folder has been moved
177
+
178
+ = Version 6.4 by Matthew Robinson =
179
+
180
+ * Wrapped all KEYWORDS in curly brackets {} so capitalised keywords can be used in content without being replaced
181
+ * Added support for Custom Taxonomies - thanks to Ian Dunn
182
+ * Added feature to allow commenters on your blog to subscribe when commenting (requires WordPress 2.9+)
183
+ * Improved and updated some of the jQuery ready for WordPress 3.2
184
+ * Introduced 's2_registered_subscribers' filter to allow other plugins to dynamically add or remove email addresses to the 'registered' array - thanks to Allan Tan
185
+ * Improved handling of [gallery] shortcode where no post id is defined for HTML emails - thanks to Chris Grady
186
+ * Removed trailing semi colons from the maybe_add_column function calls
187
+ * Fixed a type on the Settings page - thanks to Deborah Hanchey
188
+ * Updated editor buttons to insert shortcode instead of token
189
+ * Fixed some PHP notices about undeclared variables
190
+ * Compressed some of the javascript code includes to reduce download time
191
+ * Fixes to the Counter Widget ColorPicker jQuery code
192
+ * Fixes to the Counter Widget label tags
193
+ * Fixed a bug in the new_category function that was introduced in version 6.3 - thanks to crashtest
194
+ * Improved the user experience when clicking Subscribe and Unsubscribe links in the WordPress MultiSite interface - thanks to Huyz
195
+ * Improved the Bulk Manage section to take into account the digest notification setting
196
+ * Updated the uninstall script
197
+ * Updated some of the code comments to aid reviewing
198
+ * Other minor improvements and fixes
199
+
200
+ = Version 6.3 by Matthew Robinson =
201
+
202
+ * Stopped using deprecated get_usermeta(), update_usermeta() and delete_usermeta() functions in WordPress 3.1
203
+ * Use WP_User_Query class and functions in WordPress 3.1
204
+ * Stop using buggy is_blog_user() multisite function
205
+ * Fixed a bug where the creating of a new category would re-subscribed digest email users incorrectly
206
+
207
+ = Version 6.2 by Matthew Robinson =
208
+
209
+ * Pass email address to add() function explicitly
210
+ * Fix typos in the ReadMe
211
+ * Added warning on the Options page to avoid using the Subscribe2 KEYWORDS in posts as they will get substituted
212
+ * Added HTML LABEL tags to the Subscribe2 form to support WCAG
213
+ * SSL friendly with WordPress admin areas
214
+ * Added filter to allow on-the-fly manipulation of the digest email
215
+ * Added option choice to have emails send from the global admin email and addressed from the name of the blog
216
+ * Change sending details for Preview emails so they can be more easily identified by type
217
+ * Fixed a typo in a screen message to WordPressMU users
218
+
219
+ = Version 6.1 by Matthew Robinson =
220
+
221
+ * Fixed a glitch in the HTML tags in the Subscribe2 Widget that affected drag and drop functions in WordPress - thanks to Marty McOmber
222
+ * Improved detection of Multisite installs - thanks to Nada Oneal
223
+ * Fixed precontent and postcontent in the Widget to retain entered HTML tags - reported by Rob Saxe
224
+ * Fixed a few small typos in the inline code comments and email subjects
225
+ * Fixed a bug where Bulk Management changes to move all users to Plain Text Full content would result in blank settings - reported by Sean @ GetSatisfaction
226
+ * Fixed issued with TIME and AUTHORNAME keywords in digest emails - thanks to Robert @ GetSatisfaction
227
+ * Introduced a more flexible Subscribe2 shortcode - thanks to Milan for the patch code
228
+
229
+ = Version 6.0 by Matthew Robinson =
230
+
231
+ * Improved case sensitive SQL queries to avoid issues on some server configurations
232
+ * Introduced option to check the notification override button by default at Settings->Subscribe2 - Appearance
233
+ * Extend support for for multiuser sites to include WordPress 3.0
234
+ * Converted both Widgets to the WordPress 2.8 API - check your widgets are installation
235
+ * Improved the Colour Picker in the Counter Widget
236
+ * Integrated the Counter Widget into the Settings page
237
+ * Removed several functions from the code for WordPress versions prior to 2.8 (2.8 is now a minimum requirement for Subscribe2)
238
+ * Removed legacy tinymce files that are no longer required
239
+ * Added code to prevent duplicate Public Subscriber entries
240
+ * Introduced TABLELINKS keyword for digest type notifications
241
+
242
+ = Version 5.9 by Matthew Robinson =
243
+
244
+ * Added support for WordPress 3.0 Custom Post Types
245
+ * Fix for failed save of "entries per page" setting
246
+ * Correct Digest display issue associated with use of AUTHORNAME keyword
247
+ * Fixed issue where posts were not included in Digest notifications despite settings
248
+ * Fixed possible issue where a page is not included in Digest notifications if a certain category is excluded
249
+ * Fixed issue where successful emailing from Post->Mail Subscribers would report as failed if Subscribe2 is set to email one user per email - Thanks to Meini from Utech Computer Solutions (www.utechworld.com)
250
+ * Added a preview button in the Email Subscribers screen that will send current content of the window to the logged in user
251
+ * Avoid duplicating the MIME-Version header in the emails
252
+ * Removed direct links to Support forum
253
+ * Ensure that Subscribe2 sanitises email addresses to RFC5322 and RFC5321 - Thanks to Vital
254
+ * Improved the 'Save Emails to CSV' function to include additional information - Thanks to John Griffiths (www.luadesign.co.uk)
255
+ * Report that there is no digest notification to resend rather than success if there are no posts in the email
256
+
257
+ = Version 5.8 by Matthew Robinson =
258
+
259
+ * Reverted erroneous use of a WordPress 3.0 function
260
+
261
+ = Version 5.7 by Matthew Robinson =
262
+
263
+ * Corrected some missed strings to allow i18n translation
264
+ * Added AUTHORNAME to digest notification in the same was a TAGS and CATS (i.e. a fixed location in email independent of location in template)
265
+ * Ensure digest email sending times are not updated when resend is invoked
266
+ * Error check options for number of users displayed per page and if not an integer use default setting of 25
267
+ * Better name for cron 'define' and improved 'define' and 'defined' statements
268
+ * Revert to using WordPress capability when adding menus rather than user_level, latter is deprecated
269
+ * Added DATE and TIME keywords for per-post notifications
270
+
271
+ = Version 5.6 by Matthew Robinson =
272
+
273
+ * Fixed a critical bug in the digest function - a typo resulting failed notifications
274
+ * Added ability to resend the last digest email again
275
+ * Improved Bulk Management to apply to filtered users only (provided they are still Registered and not Public Subscribers)
276
+ * Fix for HTML Excerpt mails not using email template
277
+
278
+ = Version 5.5 by Matthew Robinson =
279
+
280
+ * Made the email header function pluggable to allow custom changes that persist through versions
281
+ * Fix for failed upgrades
282
+ * Ensure HTML entities in blogname are decoded for emails
283
+ * Add safety checking for options at install to protect against randomly resetting options
284
+
285
+ = Version 5.4 by Matthew Robinson =
286
+
287
+ * Fixed a bug introduced in 5.3 that produced in malformed email headers resulting in failed emails
288
+ * Fixed an upgrade error that could result in an incomplete table update which blocked new subscriptions
289
+
290
+ = Version 5.3 by Matthew Robinson =
291
+
292
+ * Added an HTML Excerpt notification type which sends an HTML formatted excerpt of the post
293
+ * Issue an error message in Settings->Subscribe2 if there is no WordPress page published on the blog site
294
+ * Improved usage of time dropdown in Settings->Subscribe2 so it works for periodic emails that are on a less than daily frequency
295
+ * Sorted categories by slugname for better presentation in the category selection area
296
+ * Make sure Preview emails skip the mail queue if WPMQ is used
297
+ * Fixed issue where blog posts made by email generated duplicate notifications
298
+ * Added fixes with the hope of stopping the random settings reset glitch many thanks to Barbara Wiebel
299
+ * Fixed AJAX bugs caused by deprecated jQuery function
300
+ * Fixed an issue where Registered Users who have requests a password reset disappear from Subscribe2
301
+ * Amended code for IP address collection to work around IIS servers
302
+ * Added COUNT keyword
303
+ * Ensure that BLOGNAME is not used in digest emails if it is empty
304
+
305
+ = Version 5.2 by Matthew Robinson =
306
+
307
+ * Added screen_icon() to each Subscribe2 admin page
308
+ * Improved addition of links to the Plugins admin page
309
+ * Improved XHTML validity of admin pages
310
+ * Improved display of category hierarchy display in the category form
311
+ * Added ability to use TAGS & CATS keywords in digest mails (position is static irrespective of keyword location)
312
+ * Use PHP variable for Subscribe2 folder to allow for easier renaming (if needed)
313
+ * Fixed a bug in TinyURL encoding introduced when links were click enabled
314
+ * Removed BurnURL from the plugin as it appears to be no longer operational
315
+ * Added urlencode to email addresses in Tools->Subscribers when editing other user preferences
316
+ * Restored several FAQs to the ReadMe file and the [WordPress.org FAQ section](http://wordpress.org/extend/plugins/subscribe2/faq/)
317
+
318
+ = Version 5.1 by Matthew Robinson =
319
+
320
+ * Add widget options to add custom text before and a after the dynamic Subscribe2 output - thank to Lee Willis
321
+ * Add protection against SQL injection attacks to the data entered into the Subscribe2 table
322
+ * Applied a fix for WP_User_Search on PHP4 installations
323
+ * Collect IP address of subscribers either at initial submission or at confirmation as required by some hosts to allow relaxation of email restrictions. IP details are in the database or available when the mouse pointer is held over the sign up date in Tools->Subscribers
324
+ * Fix for script execution time limit code for sites that have safe mode on or that have disable ini_set()
325
+ * Display category slugs when mouse pointer is held over the name in the category form area
326
+ * Fixed display of HTML entities in the subject of emails by using html_entity_decode()
327
+ * Fixed substitution of the MYNAME keyword in notification emails
328
+ * Added option to use BurnURL as an alternative to TinyURL to create shorter link URLs
329
+
330
+ = Version 5.0 by Matthew Robinson =
331
+
332
+ * Change version number to reflect change in the on going support of the plugin which is now a searchable forum or a paid service
333
+ * Added links to online Subscribe2 resources into the Options->Subscribe2 page
334
+ * Fixed Digest Time Dropdown to recall Cron Task scheduled time
335
+ * Fixed code using updated [Admin Menu Plugin](http://wordpress.org/extend/plugins/ozh-admin-drop-down-menu/) API
336
+ * Fixed foreach() error in widget rename function
337
+ * Improved layout of widget control boxes
338
+ * Improved identification of Administrator level users on blogs where usermeta table entries for user_level are low or missing
339
+ * Removed avatar plugin support on WPMU due to processing overhead
340
+ * Improved the layout of the digest email with respect to inclusion of unnecessary white space
341
+ * Extended maximum script runtime for servers not using PHP in safe mode
342
+
343
+ = Version 4.18 by Matthew Robinson =
344
+
345
+ * Option to sort digest posts in ascending or descending order
346
+ * Check that plugin options array exists before calling upgrade functions
347
+ * Improved reliability of the Preview function
348
+ * Extended Preview function to digest emails
349
+ * Fixed a code glitch that stopped CATS and TAGS from working
350
+ * Fixed incorrect sender information is emails are set to come from Post Author
351
+ * Simplified email notification format options in Users->Subscriptions for per-post notifications
352
+ * Added Bulk Manage option to update email notification format
353
+ * Simplified the usermeta database entries from two format variables down to one
354
+ * Removed trailing spaces from some strings for improved i18n support
355
+ * Improved Bulk Subscribe and Unsubscribe routines to avoid database artefacts
356
+ * Moved Select/Deselect All check box to the top of the category list in admin pages
357
+ * Fixed small layout glitch in Manage->Subscribers screen
358
+ * Added ChangeLog section to ReadMe to support WordPress.org/extend development
359
+
360
+ = Version 4.17 by Matthew Robinson =
361
+
362
+ * Tested for compatibility with WordPress 2.8.x
363
+ * Added TAGS and CATS keyword for per-post notification templates
364
+ * Fixed bug where confirmation emails may have an empty sender field if notifications come from post author
365
+ * Fixed a bug in WPMU CSS
366
+ * Added option to exclude new categories by default
367
+ * Fixed a bug where emails may not be sent to subscribers when a user subscribes or unsubscribes
368
+ * Improved accessing of 'Admin' level users on blogs where user_level is set below 10
369
+ * Added ability to send email previews to currently logged in user from Settings->Subscribe2
370
+ * Styled admin menu form buttons to fit with WordPress theme
371
+ * Improved handling of confirmation sending to reduce errors
372
+
373
+ = Version 4.16 by Matthew Robinson =
374
+
375
+ * Correct minor layout issue in Settings->Subscribe2
376
+ * Allow users to define the div class name for the widget for styling purposes
377
+ * Select from a greater number of notification senders via dropdown list in Settings
378
+ * Improved efficiency of newly added WordPressMU code
379
+ * Added ability to manage across-blog subscriptions when using WordPressMU
380
+ * Fixed bug whereby Public Subscribers may not have got notification emails for posts if Private Posts were blocked
381
+ * Added ability to define email Subject contents in Settings->Subscribe2
382
+ * Sanity checks of email subject and body templates to ensure they are not empty
383
+ * Introduced s2_html_email and s2_plain_email filters to allow manipulation of email messages after construction
384
+ * Amended handling of database entries to simplify code and database needs
385
+ * Improved the layout of the Subscriber drop down menu
386
+ * Added bullet points to the TABLE of posts
387
+ * Ensure database remains clean when categories are deleted
388
+ * Added new option to manage how auto-subscribe handles excluded categories
389
+
390
+ = Version 4.15 by Matthew Robinson =
391
+
392
+ * Fixed E_DEPRECATE warning caused by a variable being passed by reference to the ksort() function
393
+ * Fixed called to undefined function caused by typo
394
+ * Fixed a syntax error in the SQL code constructors affecting some users
395
+
396
+ = Version 4.14 by Matthew Robinson =
397
+
398
+ * Reordered some functions to improve grouping
399
+ * Stop s2mail custom variable being added if empty
400
+ * Localised 'Send Digest Notification at' string
401
+ * Add support for template tags in Post->Mail Subscribers emails
402
+ * Improve handling of translation files for more recent version of WordPress
403
+ * Implemented <label> tags in the admin pages so text descriptors are click enabled
404
+ * Improved subscription preferences for WordPress MU (Huge thanks to Benedikt Forchhammer)
405
+ * Added TINYLINK tag to allow TinyURL insertion in place of PERMALINK
406
+ * Improved layout of Tools->Subscriber page (Thanks to Anne-Marie Redpath)
407
+ * Enhancements to Subscription form layout (Thanks to Anne-Marie Redpath and Andy Steinmark)
408
+ * Sender details now uses current user information from Write->Mail Subscribers
409
+ * Introduced 's2_template_filter' to allow other plugins to amend the email template on-the-fly
410
+
411
+ = Version 4.13 by Matthew Robinson =
412
+
413
+ * Update weekly description
414
+ * Improve layout in the Subscribe2 form
415
+ * Fixed bug where registering users would not be subscribed to categories if using the checkbox on the registration page
416
+ * Improved buttonsnap function checking to reduce PHP notices
417
+ * Fixed typo when including CSS information in HTML emails
418
+ * Fix 'edit' links in the Tools->Subscribers page for blogs where the WordPress files are not in root
419
+ * Improved Tools->Subscribers page layout by hiding some buttons when they are not needed
420
+ * Fixed glitch in default options settings file
421
+ * Added option to include or exclude a link back to the blog theme CSS information within the HTML emails
422
+ * Improve per-post exceptions to sending emails by introducing a separate meta-box rather than relying on a custom field
423
+ * Fix for Gallery code in emails sending entire media library
424
+ * Updated screen shots
425
+
426
+ = Version 4.12 by Matthew Robinson =
427
+
428
+ * Added new option to remove Auto Subscribe option from Users->Your Subscriptions
429
+ * New POSTTIME token for digest email notifications
430
+ * Preserve mail after sending from Write->Mail Subscribers
431
+ * Introduced the Subscriber Counter Widget
432
+ * Use Rich Text Editor in Write->Mail Subscribers for the Paid HTML version
433
+ * Per User management in Admin
434
+ * Added support Uninstall API in WordPress 2.7
435
+ * Add support for 'Meta Widget' links
436
+ * Subscribers are sorted alphabetically before sending notifications
437
+ * Added ability to bulk unsubscribe a list of emails pasted into manage window
438
+ * Define number of subscribers in Manage window
439
+ * Added options for admin emails when public users subscribe or unsubscribe
440
+ * Fixed bug that prevented sending of Reminder emails from Manage->Subscribers
441
+ * Amended confirmation code so that only one email is sent no matter how many times users click on (un)subscribe links
442
+
443
+ = Version 4.11 by Matthew Robinson =
444
+
445
+ * Works in WordPress 2.7-almost-beta!
446
+ * Fixed a bug in the mail() function that meant emails were not sent to recipients if the BCCLimit setting was greater than the total number of recipients for that mail type
447
+ * Ensured that the array of recipients was cast correctly in the reminder function
448
+ * Fixed display of html entities in the reminder emails
449
+ * Fixed a bug in the SQL statements for WordPress MU installations
450
+ * Corrected a typo in the message displayed on the WordPress registration page if subscriptions are automatic
451
+ * Several layout and inline comment changes
452
+
453
+ = Version 4.10 by Matthew Robinson =
454
+
455
+ * Fixed Registration form action from WordPress registrations
456
+ * Repositioned the button to send reminder emails
457
+ * Implemented WP_CONTENT_URL and WP_CONTENT_DIR
458
+ * Added filter for <a href="http://planetozh.com/blog/2008/08/admin-drop-down-menu-more-goodness-an-api/">Admin Drop Down Menu</a>
459
+ * Improve functioning of Process button in Manage admin pane
460
+ * Improved form compliance with XHTML
461
+ * Fixed bug with cron time being changed every time options are changed
462
+
463
+ = Version 4.9 by Matthew Robinson =
464
+
465
+ * Send email direct to recipient if BCC is set as 1
466
+ * Fix issue where WordPress shortcodes were not stripped out of emails
467
+ * Amended Manage page to resolve issues with IE and Opera not passing form information correctly
468
+ * Amended Manage page to allow for bulk management of public users
469
+ * Amended WordPress API usage for translation files to 2.6 compatible syntax
470
+ * Allow Editor and Author users to send emails from Write->Mail Subscribers
471
+ * Post collection for CRON function is more dynamic
472
+ * CRON function sanity to checks for post content before sending a notification
473
+ * Fixed get_register() function to allow for user_activation field
474
+ * Corrected typos in options.php
475
+ * Added a search box to the Manage->Subscribers window
476
+ * Strip tags and HTML entities from email subjects
477
+ * Improved message feedback in Write->Mail
478
+ * Added html_entity_decode to sender name fields
479
+ * Change Menu string for User menu to make it clearer whose preferences are being edited
480
+
481
+ = Version 4.8 by Matthew Robinson =
482
+
483
+ * Removed unnecessary return statement at end of publish() function
484
+ * Ensured posts in digest are listed in date order
485
+ * Improved compatibility with other plugins by only inserting JavaScript code into Subscribe2's own admin pages
486
+ * Added BCCLIMIT and S2PAGE to options page with AJAX editing
487
+ * Improved setting of CRON task base time
488
+ * Improved handling of option values in the options form
489
+ * Full XHTML compliance on all Subscribe2 admin pages
490
+ * Decode HTML entity codes in notification email subjects
491
+ * Added Subscribe2 support for blogging via email
492
+ * Work-around fix implemented for WordPress the_title bug
493
+
494
+ = Version 4.7 by Matthew Robinson =
495
+
496
+ * Added admin control over default auto subscribe to new category option
497
+ * Improved Cron code to reduce the chance of duplicate emails
498
+ * Fixed a string that was missed from the translation files
499
+ * Improved time variable handling for cron functions, especially when UTC is different from both server time and blog time
500
+ * Completed code changes to allow WPMU compatibility
501
+ * Fixed some issues with the email headers now that Subscribe2 is using wp_mail() again
502
+
503
+ = Version 4.6 by Matthew Robinson =
504
+
505
+ * Fixed mis-reporting of server error when unsubscribing
506
+ * Fixed fatal errors involving buttonsnap library
507
+ * Improved database entry management for new subscribers
508
+ * Fixed issue where Subscribe2 grabbed the first page from the database even if it wasn't published
509
+ * Fixed upgrade reporting for Debug and Uninstaller plugins
510
+
511
+ = Version 4.5 by Matthew Robinson =
512
+
513
+ * Added Support for WordPress 2.5!
514
+ * Fixed HTML typo in admin submission message
515
+ * Fixed time display for cron jobs in Options->Subscribe2 when displayed on blogs using a time offset
516
+ * Added Debug plugin to the download package
517
+ * Improved descriptions of email template keywords in Options->Subscribe2
518
+ * Display subscribers in batches of 50 in Manage->Subscribers
519
+ * Fixed some XHTML validation errors
520
+ * Improved admin menu layout for compliance with WordPress 2.5
521
+ * Reverted to using wp_mail instead of mail to ensure proper header encoding
522
+ * Improved mail header formatting - thanks to Chris Carlson
523
+ * Add ability to skip email notification using a Custom Field (s2mail set as "no")
524
+ * Improved CSV export - thanks to Aaron Axelsen
525
+ * Added some compatibility for WPMU - thanks to Aaron Axelsen
526
+ * Added some error feedback to blog users if mails fail to send
527
+ * Moved Buttonsnap due to far to many fatal error complaints
528
+ * Added option to send notifications for Private posts
529
+ * Improved handling of notification for Password Protected Posts
530
+
531
+ = Version 4.4 by Matthew Robinson =
532
+
533
+ * Fixed non-substitution of TABLE keyword
534
+ * Fixed bug in usermeta update calls in unsubscribe_registered_users function
535
+ * Fixed bug in array handling in cron function that may have stopped emails sending
536
+ * Improved array handling in the Digest function
537
+ * Added an Un-installer to completely removed Subscribe2 from your WordPress install
538
+
539
+ = Version 4.3 by Matthew Robinson =
540
+
541
+ * Fixed bug where digest emails were sent to unsubscribed users - Thanks to Mr Papa
542
+ * Stripped slashes from Subject when sending from Write->Mail Subscribers - Thanks to James
543
+ * Ensured all admin pages created by Subscribe2 are valid XHTML 1.0 Transitional code
544
+ * Added default mail templates and other missed string values to i18n files to allow easier first time translation - thanks to Kjell
545
+ * Added option to set the hour for digest email notifications provided the schedule interval is one day or greater
546
+ * Moved option variable declaration to ensure better caching
547
+ * Fixed bug where cron tasks were not removed when options were reset
548
+ * Fixed email notifications for future dated posts
549
+ * Fixed QuickTag Icons and mouse-over floating text
550
+
551
+ = Version 4.2 by Matthew Robinson =
552
+
553
+ * Added translation capability to user feedback strings - thanks to Lise
554
+ * Corrected some other translation strings
555
+ * Fixed bug in notification emails to admins when new users subscribe
556
+ * Updated default options code
557
+
558
+ = Version 4.1 by Matthew Robinson =
559
+
560
+ * Fixed sending of notifications for Pages
561
+ * Fixed password protected post bug for Digest email notifications
562
+ * Fixed blank email headers if admin data is not at ID 1
563
+
564
+ = Version 4.0 by Matthew Robinson =
565
+
566
+ * Compatible with WordPress 2.3
567
+ * Widget Code now integrated into the main plugin and added as an option
568
+ * More Options for Email Notifications
569
+ * Category Lists fixed for WordPress 2.3 and now show empty categories
570
+
571
+ = Version 3.8 by Matthew Robinson =
572
+
573
+ * Fixed User Menu Settings when Digests enabled
574
+ * Changed Registered Subscribers to Registered Users in drop down to avoid confusion
575
+ * Minor code revisions for admin menu layout
576
+
577
+ = Version 3.7 by Matthew Robinson =
578
+
579
+ * Change from deprecated get_settings -> get_option
580
+ * Fix for confirmation links not working for custom installs
581
+ * Abandoned wp_mail due to core bugs
582
+ * Added Digest Table feature (untested)
583
+ * Added icons to manage window (Thanks to http://www.famfamfam.com/lab/icons/)
584
+ * Fixed Bulk Manage bug when using i18n files
585
+ * Fixed bug in cron emails if <!--more--> tag present
586
+
587
+ = Version 3.6 by Matthew Robinson =
588
+
589
+ * Fixed a typo in Content-Type mail headers
590
+ * Fixed Auto Register functions to obey Excluded Categories
591
+ * Added option to check WP-Register checkbox by default
592
+
593
+ = Version 3.5 by Matthew Robinson =
594
+
595
+ * Fixed a bug in the upgrade function that was messing up the options settings
596
+ * Updated the include.php file to preset recently introduced option settings
597
+
598
+ = Version 3.4 by Matthew Robinson =
599
+
600
+ * QuickTag button now displays a Marker! (HUGE thanks to Raven!)
601
+ * Fix for excluded categories in User Menu
602
+ * BCCLIMIT typo corrected in Mail function
603
+ * Call to translation files moved to avoid call to undefined function
604
+ * Options added to send mails for pages and password protected posts
605
+ * Option added to display subscription checkbox in WordPress Register screen
606
+ * Small typo and layout amendments
607
+
608
+ = Version 3.3 by Matthew Robinson =
609
+
610
+ * QuickTag button added! Works with Visual and Standard Editor. __Look in Code for token addition if using RTE.__
611
+ * Current Server time displayed for Cron tasks
612
+ * Fixed bug so Registered users now identified correctly
613
+ * Upgrade function called via WordPress hook to prevent calls to undefined functions
614
+ * Fixed a bug affecting Registered Users not appearing in the drop down list
615
+ * Improved handling of the Subscribe2 option array
616
+
617
+ = Version 3.2 by Matthew Robinson =
618
+
619
+ * Fixed a bug affecting Registered Users not appearing in the drop down list
620
+ * Improved handling of the Subscribe2 option array
621
+
622
+ = Version 3.1 by Matthew Robinson =
623
+
624
+ * Amended code to use core cron functionality for future posts and digest notifications, no longer need WP-Cron
625
+ * Improved HTML code generated for admin pages
626
+ * Removed sending of emails for WordPress Pages
627
+ * Fixed display issues if S2PAGE is not defined
628
+
629
+ = Version 3.0 by Matthew Robinson =
630
+
631
+ * Updated for WordPress 2.1 Branch
632
+
633
+ = Version 2.22 by Matthew Robinson =
634
+
635
+ * Fixed User Menu Settings when Digests enabled
636
+ * Changed Registered Subscribers to Registered Users in drop down to avoid confusion
637
+ * Minor code revisions for admin menu layout
638
+
639
+ = Version 2.21 by Matthew Robinson =
640
+
641
+ * Change from deprecated get_settings -> get_option
642
+ * Fixed bug in cron emails if <!--more--> tag present
643
+
644
+ = Version 2.20 by Matthew Robinson =
645
+
646
+ * Fixed a typo in Content-Type mail headers
647
+ * Fixed Auto Register functions to obey Excluded Categories
648
+
649
+ = Version 2.19 by Matthew Robinson =
650
+
651
+ * Fixed a bug in the upgrade function that was messing up the options settings
652
+
653
+ = Version 2.18 by Matthew Robinson =
654
+
655
+ * BCCLIMIT typo corrected in Mail function
656
+ * Call to translation files moved to avoid call to undefined function
657
+ * Small typo and layout amendments
658
+
659
+ = Version 2.17 by Matthew Robinson =
660
+
661
+ * Current Server time displayed for Cron tasks
662
+ * Fixed bug so Registered users now identified correctly
663
+ * Upgrade function called via WordPress hook to prevent calls to undefined functions
664
+
665
+ = Version 2.16 by Matthew Robinson =
666
+
667
+ * Fixed a bug affecting Registered Users not appearing in the drop down list
668
+ * Improved handling of the Subscribe2 option array
669
+
670
+ = Version 2.15 by Matthew Robinson =
671
+
672
+ * Improved HTML code generated for admin pages
673
+ * Fixed display issues if S2PAGE is not defined
674
+
675
+ = Version 2.14 by Matthew Robinson =
676
+
677
+ * Amended DREAMHOST setting to BCCLIMIT as more hosts are limiting emails
678
+ * Fixed oversight in upgrade() function
679
+
680
+ = Version 2.13 by Matthew Robinson =
681
+
682
+ * Added WordPress nonce functionality to improve admin security
683
+
684
+ = Version 2.12 by Matthew Robinson =
685
+
686
+ * Fix for missing Quicktags (probably since version 2.2.10)
687
+ * Fix for occasional email issue where excerpts are incomplete
688
+
689
+ = Version 2.11 by Matthew Robinson =
690
+
691
+ * Fixed bug that would cause all subscribers to get digest emails
692
+ * Added Select All check box to category listing
693
+
694
+ = Version 2.10 by Matthew Robinson =
695
+
696
+ * Improved sign up process by double checking email address
697
+ * Fix for submenu issues encountered in WP 2.0.6
698
+
699
+ = Version 2.9 by Matthew Robinson =
700
+
701
+ * Fixed get_userdata call issue
702
+ * Added CSV export
703
+ * Reworked options storage routines
704
+
705
+ = Version 2.8 by Matthew Robinson =
706
+
707
+ * Fixed missing line return in email headers that was causing failed emails
708
+ * Added user feedback messages to profile area
709
+ * Added 'Authorname' to the list of message substitutions in email messages
710
+ * Fixed name and email substitution in Digest Mails
711
+ * Fixed stripslashes issue in email subjects
712
+ * Added new 'Action' token for confirmation emails
713
+
714
+ = Version 2.7 by Matthew Robinson =
715
+
716
+ * Link to post in HTML emails is now functional
717
+ * Fixed bug in Bulk Management so it works when first loaded
718
+ * Ability to auto subscribe newly registering users
719
+ * Added additional email header information
720
+
721
+ = Version 2.6 by Matthew Robinson =
722
+
723
+ * Fixed email headers to comply with RFC2822 standard (after breaking them in the first place)
724
+ * Impoved XHTML compliance of user feedback messages and subscription form when presented on a blog
725
+ * Tidied up presentation of the code a little
726
+ * Cached some additional variables
727
+
728
+ = Version 2.5 by Matthew Robinson =
729
+
730
+ * Added functionality to Bulk Manage registered users subscriptions
731
+
732
+ = Version 2.4 by Matthew Robinson =
733
+
734
+ * Added functionality to block user specified domains from public subscription
735
+
736
+ = Version 2.3 by Matthew Robinson =
737
+
738
+ * Added functionality to allow for Subscribe2 Sidebar Widget
739
+ * Added functionality to block public email subscriptins from domains defined under Options
740
+ * Added functionality to send an email reminder to all unconfirmed public subscriber
741
+ * Added removal of html entities (for example &copy;) from plaintext emails
742
+ * Replaced spaces with tabs in Plugin format
743
+ * Minor changes to admin layout to match WordPress admin function layout
744
+
745
+ = Version 2.2 =
746
+
747
+ * By Scott Merrill, see http://www.skippy.net/blog/category/wordpress/plugins/subscribe2/
ReadMe.txt CHANGED
@@ -332,735 +332,7 @@ Secondly, make sure that the token ([subscribe2] or <!--subscribe2-->) is correc
332
 
333
  == Changelog ==
334
 
335
- = Version 8.6 by Matthew Robinson =
336
-
337
- * Minor layout update to Widget Settings
338
- * Fix for non-sending notifications for pages - proposed by ctcdesign
339
- * Fix for a translation domain error in admin/settings.php - proposed by monpelaud
340
- * Fix for deprecated is_blog_user() function on Multisite installs - proposed by hallcp
341
- * Extend Subscribe2 database table to collect additional data to meet DreamHost privacy policy - thanks to matt, joshukraine and Dreamhost
342
- * Refresh Subscribers page in admin, tables now sortable on present columns
343
- * Order CSS files better by applying CSSComb
344
- * Reuse $value variable in the 'frontend' class to reduce translation strings
345
- * Improve AJAX form to obey the shortcode hide parameter - proposed by bwsl
346
- * Correct spelling error in the Settings page - proposed by dimadin
347
- * Call translation code via a hook to allow greater dynamic control - proposed by dimadin
348
- * Look in more locations for translation files, can place in core languages folder now for upgrade protection
349
- * Refresh Settings page in admin to a tabbed interface
350
- * Strip HTML from email subject to improve compatibility with other plugins and WordPress 3.5
351
- * Fixed bug in the display of compulsory categories in the Settings page
352
- * Add option to manually send emails to All Registered Users and Public Subscribers - proposed by TigWeb
353
- * Enable TinyURL link shortening for Digest Notification Emails if {TINYLINK} is present in the Email Template
354
- * Fixed bug in TinyURL error handling and fallback when link generation fails
355
- * Fixed bug where {DATE} was left blank in the subject field for future scheduled post notifications - thanks to Steve Savoy
356
- * Added a filter to allow on-the-fly alteration of the size of the {IMAGE} in the paid version
357
- * Fixed a warning message for a core function ready for WordPress 3.6
358
-
359
- = Version 8.5 by Matthew Robinson =
360
-
361
- * Fixed width of a page select drop down in the Widget settings - thanks to Balky79
362
- * Added option to check the comment subscription box by default - proposed by Doug Lerner
363
- * Improved off-domain error message in Settings page and address checking if Blogname is selected
364
- * Fixed an issue on Multisite installs displaying the wrong link to profiles pages for other blog sites - thanks to MadtownLems
365
- * Fixed an issue with Image and Shortcode replacement in the visual editor (TinyMCE) - thanks to Dave Firman
366
- * Fixed unique IDs for 2 possible error messages in the Settings page - thanks to MadtownLems
367
- * Fixed several HTML5 validation error in the admin pages
368
- * Improved regex replacedment of s strike and del HTML tags in plaintext emails - thanks to jimshell
369
- * Use wp_kses() rather than strip_tags() on email subject lines so that single angle brackets are allowed - thanks to eightize and esmi
370
- * Allow remote definition of email address in form - thanks to orion42
371
- * Added ability to have compulsory categories - proposed by iClimb
372
- * Apply WordPress the_author filter to the author names to improve plugin compatibility - proposed by SpaciousMind
373
- * Added the ability to track the post ID in the tracking Parameter field - proposed by Laga
374
- * Protect the 's2email' post meta key - proposed by Nally123
375
- * Strip excess white space within the Digest email when images are removed
376
- * Add a time column to the public subscriber table for hosting provider spam policy compliance - proposed by Erik N
377
- * Change plugin folder name to suppress update prompts for the HTML version
378
- * Rename js files consistently with core ticket 21633
379
- * Add width parameter to comment form text to fix issues with some themes - proposed by mharpen
380
- * Added option to include Sticky Posts at the top of all Digest Notifications - proposed by pkhatmedia
381
- * Fixed some Markdown errors in the ReadMe
382
-
383
- = Version 8.4 by Matthew Robinson =
384
-
385
- * Fixed an error in the 'Send Mail' page that blocked emails from being sent
386
- * Added tracking features to Digest title links in HTML version - thanks to Jeremy Schultz
387
- * Provide clearer user feedback for Send and Preview buttons in "Send Email" window
388
- * Add new option to the Widget to return users to the home page on submission
389
- * Added warning to Settings page if selected sender email address is "off-domain"
390
- * Fixed numerous minor SQL injections vectors - thanks to Tom Adams (holizz)
391
- * Removed auto-embed iframes from HTML emails - thanks to Doug Lerner
392
- * Add more intuitive user messages for Public Subscribers when Unsubscribing - thanks to Doug Lerner
393
-
394
- = Version 8.3 by Matthew Robinson =
395
-
396
- * Fixed a bunch of PHP messages - should not show anyway unless WP_DEBUG is true or PHP error reporting is on a high setting
397
- * Fixed bulk category management so it applies to all users and not just the first record
398
- * Update 'autosub' to no on one-click unsubscribe instead of erasing the value
399
- * Return empty string is get_tracking_link() is passed and empty variable
400
- * Fixed some typographical errors
401
- * Fixed profile page to obey 'one click' display setting
402
- * Fixed implode error seen when sending preview emails on some configurations
403
- * Fixed a error in the admin user dropdown on installs (particularly Multisite) where there may be no administrator level users
404
- * Added a button text filter for the Subscribe and Unsubscribe buttons - proposed by casben79
405
- * Use wp_hash in place of MD5 to further obfuscate confirmation links - thanks to Charlie Eriksen, Otto and Ipstenu
406
-
407
- = Version 8.2 by Matthew Robinson =
408
-
409
- * Implemented use of Farbtastic as colour chooser in the Counter Widget because ColorPicker has been deprecated in WordPress
410
- * Fixed one hook call in WordPress to pass $this variable by reference to save a little more RAM
411
- * Fixed Subscribe2 implementation of custom taxonomies
412
- * Fixed Bulk Management Format Change code to apply for all users
413
- * Fix for low impact security vulnerability
414
-
415
- = Version 8.1 by Matthew Robinson =
416
-
417
- * Fixed redirect errors and crash affecting multisite installs on upgrade to 8.0 - thanks in particular to Ed Cooper
418
- * Fixed several other multisite bugs affecting links and styling - thanks to Mark Olbert
419
- * Fixed empty CSV exports - thanks to Gil Namur
420
-
421
- = Version 8.0 by Matthew Robinson =
422
-
423
- * Split the main plugin file into separate classes for more efficient (60% less RAM) server resource usage - huge thanks to Milan Petrovic
424
- * Ensure notifications for posts are sent to all active registered users
425
- * Fixed bug in Bulk Management code to include all filtered Registered Subscribers, not just those on current screen - thanks to samandiriel
426
- * Fixed some PHP messages regarding use of deprecated clean_url() function and WordPress version checking - thanks to anmari
427
- * Improved white space trimming in the code so it respects tabs and line breaks - thanks to belg4mit
428
- * Updated screenshots to Subscribe2 8.0 and WordPress 3.3.1 screen layouts
429
- * Implemented one-click buttons to subscribe and unsubscribe - thanks to dimadin for code patch
430
- * Changed some default settings, sender to BLOGNAME and number of recipients per email to 1
431
- * Implemented a change so that categories are not displayed in the filter dropdowns when using Subscribe2 in digest mode
432
- * Ensure an action is specified for HTML5 validity - thanks to Franco Carinato
433
- * Introduced 4 new hooks to filter per-post subscribers for each of the 4 email types - thanks to Nicolas Noé
434
-
435
- = Version 7.2 by Matthew Robinson =
436
-
437
- * Fix for non-sending Preview emails when sender details match recipient details exactly
438
- * Remove some HTML tags (DEL, S and STRIKE) from plain text content to avoid confusing reading - props cpo
439
- * Improved removal of excess white space within the content of the plain text emails
440
- * Introduced 'size' parameter to the shortcode to allow sizing of the email text input box
441
- * Fix for non-sending emails to newly Registered Subscribers - thanks to Gengar003 and WebEndev
442
- * Fix for commenter subscriptions on systems without moderation in place - thanks to elarson
443
- * Improved the TinyMCE plugin code that handles placement of the Subscribe2 shortcode in the rich text editor
444
- * Tidied up some public subscribe functions removing unnecessary code
445
-
446
- = Version 7.1 by Matthew Robinson =
447
-
448
- * Fix for Opt-out by Author for Registered Users that resulted in posts being sent even though a user had opted out
449
- * Workaround implemented for core WordPress glitch that reults in blank sender details in digest emails when using "Post Author" as sender
450
- * Introduced DIV HTML tags to the administrion menu screens to allow jQuery custom hiding by plugins - proposed by madtownlems
451
- * Reduced code overhead when collecting admin level users
452
- * Fix for non-sending emails when published via XML RPC interface (like the iOS app and Windows Live Writer) - thanks to bellarush & Marc Williams
453
- * Removed the X-Mailer header ready for core PHPMailer update
454
- * Removed single use of split() function which is deprecated in PHP 5.3.0
455
- * Added additional parameters to the 's2_html_email' hook - props Milan Dinić
456
- * Added a check on wp-cron.php to warn digest email users - props Dave Bergschneider
457
-
458
- = Version 7.0.1 by Matthew Robinson =
459
-
460
- * Fixed a typo in the include/options file that caused failed installs and upgrades
461
- * Fix for get_registered() function for fringe situations
462
-
463
- = Version 7.0 by Matthew Robinson =
464
-
465
- * NOTE Subscribe2 now requires WordPress 3.1 or higher
466
- * Implemented top level menu to make Subscribe2 menu access easier
467
- * Introduced the ability to add UTM Tracking parameters to email links - Thanks to Sander de Boer
468
- * Introduced Opt-out by Author for Registered Users (on sites where there is more than one author)
469
- * Improved table layout code on user management page
470
- * Make use of core checked() function to save code space
471
- * Show user name for Registered Users when mouse is hovered over email address in Subscribe2->Subscribers
472
- * Move IP address display on hover from date of signup to email address for Public Subscribers so consistent with above change
473
- * Introduced the 's2_capability' filter to allow API amendments to page access for different user capabilities
474
- * Added support to exclude 'post formats' from generating emails provided 'post formats' are supported by the current active theme
475
- * Implemented use of core WordPress functions to place the authoring button shortcuts, removed reliance on buttonsnap.php so this library is now dropped
476
- * Implement use of wp_register_scripts() function
477
- * Display custom post types added using the API in the Settings page as confirmation things are working
478
- * Added two missed strings to the translation domain and corrected a typo - thanks to Stig Ulfsby
479
- * Added a filter for the outgoing email subject line
480
- * Added an option to AJAXify the form, read the FAQs for how to use this new feature
481
-
482
- = Version 6.5 by Matthew Robinson =
483
-
484
- * Fix for Multisite / MU detection for WordPress versions prior to 3.0
485
- * Fix in the upgrade() function to insert database entires for Registered Users on first time install
486
- * Fix for the uninstaller script to allow use on regular and Multisite WordPress
487
- * Updated uninstaller to remove any postmeta entries on uninstall
488
- * Fix for blank post detail on HTML Excerpt notifications when the post content is brief
489
- * Fix for some PHP notices
490
- * Fix to remove all cron settings when options are reverted to per-post
491
- * Minor code layout changes and comment updates
492
- * Dropped use of WP_CONTENT_DIR to fix issues on site where wp-content/ folder has been moved
493
-
494
- = Version 6.4 by Matthew Robinson =
495
-
496
- * Wrapped all KEYWORDS in curly brackets {} so capitalised keywords can be used in content without being replaced
497
- * Added support for Custom Taxonomies - thanks to Ian Dunn
498
- * Added feature to allow commenters on your blog to subscribe when commenting (requires WordPress 2.9+)
499
- * Improved and updated some of the jQuery ready for WordPress 3.2
500
- * Introduced 's2_registered_subscribers' filter to allow other plugins to dynamically add or remove email addresses to the 'registered' array - thanks to Allan Tan
501
- * Improved handling of [gallery] shortcode where no post id is defined for HTML emails - thanks to Chris Grady
502
- * Removed trailing semi colons from the maybe_add_column function calls
503
- * Fixed a type on the Settings page - thanks to Deborah Hanchey
504
- * Updated editor buttons to insert shortcode instead of token
505
- * Fixed some PHP notices about undeclared variables
506
- * Compressed some of the javascript code includes to reduce download time
507
- * Fixes to the Counter Widget ColorPicker jQuery code
508
- * Fixes to the Counter Widget label tags
509
- * Fixed a bug in the new_category function that was introduced in version 6.3 - thanks to crashtest
510
- * Improved the user experience when clicking Subscribe and Unsubscribe links in the WordPress MultiSite interface - thanks to Huyz
511
- * Improved the Bulk Manage section to take into account the digest notification setting
512
- * Updated the uninstall script
513
- * Updated some of the code comments to aid reviewing
514
- * Other minor improvements and fixes
515
-
516
- = Version 6.3 by Matthew Robinson =
517
-
518
- * Stopped using deprecated get_usermeta(), update_usermeta() and delete_usermeta() functions in WordPress 3.1
519
- * Use WP_User_Query class and functions in WordPress 3.1
520
- * Stop using buggy is_blog_user() multisite function
521
- * Fixed a bug where the creating of a new category would re-subscribed digest email users incorrectly
522
-
523
- = Version 6.2 by Matthew Robinson =
524
-
525
- * Pass email address to add() function explicitly
526
- * Fix typos in the ReadMe
527
- * Added warning on the Options page to avoid using the Subscribe2 KEYWORDS in posts as they will get substituted
528
- * Added HTML LABEL tags to the Subscribe2 form to support WCAG
529
- * SSL friendly with WordPress admin areas
530
- * Added filter to allow on-the-fly manipulation of the digest email
531
- * Added option choice to have emails send from the global admin email and addressed from the name of the blog
532
- * Change sending details for Preview emails so they can be more easily identified by type
533
- * Fixed a typo in a screen message to WordPressMU users
534
-
535
- = Version 6.1 by Matthew Robinson =
536
-
537
- * Fixed a glitch in the HTML tags in the Subscribe2 Widget that affected drag and drop functions in WordPress - thanks to Marty McOmber
538
- * Improved detection of Multisite installs - thanks to Nada Oneal
539
- * Fixed precontent and postcontent in the Widget to retain entered HTML tags - reported by Rob Saxe
540
- * Fixed a few small typos in the inline code comments and email subjects
541
- * Fixed a bug where Bulk Management changes to move all users to Plain Text Full content would result in blank settings - reported by Sean @ GetSatisfaction
542
- * Fixed issued with TIME and AUTHORNAME keywords in digest emails - thanks to Robert @ GetSatisfaction
543
- * Introduced a more flexible Subscribe2 shortcode - thanks to Milan for the patch code
544
-
545
- = Version 6.0 by Matthew Robinson =
546
-
547
- * Improved case sensitive SQL queries to avoid issues on some server configurations
548
- * Introduced option to check the notification override button by default at Settings->Subscribe2 - Appearance
549
- * Extend support for for multiuser sites to include WordPress 3.0
550
- * Converted both Widgets to the WordPress 2.8 API - check your widgets are installation
551
- * Improved the Colour Picker in the Counter Widget
552
- * Integrated the Counter Widget into the Settings page
553
- * Removed several functions from the code for WordPress versions prior to 2.8 (2.8 is now a minimum requirement for Subscribe2)
554
- * Removed legacy tinymce files that are no longer required
555
- * Added code to prevent duplicate Public Subscriber entries
556
- * Introduced TABLELINKS keyword for digest type notifications
557
-
558
- = Version 5.9 by Matthew Robinson =
559
-
560
- * Added support for WordPress 3.0 Custom Post Types
561
- * Fix for failed save of "entries per page" setting
562
- * Correct Digest display issue associated with use of AUTHORNAME keyword
563
- * Fixed issue where posts were not included in Digest notifications despite settings
564
- * Fixed possible issue where a page is not included in Digest notifications if a certain category is excluded
565
- * Fixed issue where successful emailing from Post->Mail Subscribers would report as failed if Subscribe2 is set to email one user per email - Thanks to Meini from Utech Computer Solutions (www.utechworld.com)
566
- * Added a preview button in the Email Subscribers screen that will send current content of the window to the logged in user
567
- * Avoid duplicating the MIME-Version header in the emails
568
- * Removed direct links to Support forum
569
- * Ensure that Subscribe2 sanitises email addresses to RFC5322 and RFC5321 - Thanks to Vital
570
- * Improved the 'Save Emails to CSV' function to include additional information - Thanks to John Griffiths (www.luadesign.co.uk)
571
- * Report that there is no digest notification to resend rather than success if there are no posts in the email
572
-
573
- = Version 5.8 by Matthew Robinson =
574
-
575
- * Reverted erroneous use of a WordPress 3.0 function
576
-
577
- = Version 5.7 by Matthew Robinson =
578
-
579
- * Corrected some missed strings to allow i18n translation
580
- * Added AUTHORNAME to digest notification in the same was a TAGS and CATS (i.e. a fixed location in email independent of location in template)
581
- * Ensure digest email sending times are not updated when resend is invoked
582
- * Error check options for number of users displayed per page and if not an integer use default setting of 25
583
- * Better name for cron 'define' and improved 'define' and 'defined' statements
584
- * Revert to using WordPress capability when adding menus rather than user_level, latter is deprecated
585
- * Added DATE and TIME keywords for per-post notifications
586
-
587
- = Version 5.6 by Matthew Robinson =
588
-
589
- * Fixed a critical bug in the digest function - a typo resulting failed notifications
590
- * Added ability to resend the last digest email again
591
- * Improved Bulk Management to apply to filtered users only (provided they are still Registered and not Public Subscribers)
592
- * Fix for HTML Excerpt mails not using email template
593
-
594
- = Version 5.5 by Matthew Robinson =
595
-
596
- * Made the email header function pluggable to allow custom changes that persist through versions
597
- * Fix for failed upgrades
598
- * Ensure HTML entities in blogname are decoded for emails
599
- * Add safety checking for options at install to protect against randomly resetting options
600
-
601
- = Version 5.4 by Matthew Robinson =
602
-
603
- * Fixed a bug introduced in 5.3 that produced in malformed email headers resulting in failed emails
604
- * Fixed an upgrade error that could result in an incomplete table update which blocked new subscriptions
605
-
606
- = Version 5.3 by Matthew Robinson =
607
-
608
- * Added an HTML Excerpt notification type which sends an HTML formatted excerpt of the post
609
- * Issue an error message in Settings->Subscribe2 if there is no WordPress page published on the blog site
610
- * Improved usage of time dropdown in Settings->Subscribe2 so it works for periodic emails that are on a less than daily frequency
611
- * Sorted categories by slugname for better presentation in the category selection area
612
- * Make sure Preview emails skip the mail queue if WPMQ is used
613
- * Fixed issue where blog posts made by email generated duplicate notifications
614
- * Added fixes with the hope of stopping the random settings reset glitch many thanks to Barbara Wiebel
615
- * Fixed AJAX bugs caused by deprecated jQuery function
616
- * Fixed an issue where Registered Users who have requests a password reset disappear from Subscribe2
617
- * Amended code for IP address collection to work around IIS servers
618
- * Added COUNT keyword
619
- * Ensure that BLOGNAME is not used in digest emails if it is empty
620
-
621
- = Version 5.2 by Matthew Robinson =
622
-
623
- * Added screen_icon() to each Subscribe2 admin page
624
- * Improved addition of links to the Plugins admin page
625
- * Improved XHTML validity of admin pages
626
- * Improved display of category hierarchy display in the category form
627
- * Added ability to use TAGS & CATS keywords in digest mails (position is static irrespective of keyword location)
628
- * Use PHP variable for Subscribe2 folder to allow for easier renaming (if needed)
629
- * Fixed a bug in TinyURL encoding introduced when links were click enabled
630
- * Removed BurnURL from the plugin as it appears to be no longer operational
631
- * Added urlencode to email addresses in Tools->Subscribers when editing other user preferences
632
- * Restored several FAQs to the ReadMe file and the [WordPress.org FAQ section](http://wordpress.org/extend/plugins/subscribe2/faq/)
633
-
634
- = Version 5.1 by Matthew Robinson =
635
-
636
- * Add widget options to add custom text before and a after the dynamic Subscribe2 output - thank to Lee Willis
637
- * Add protection against SQL injection attacks to the data entered into the Subscribe2 table
638
- * Applied a fix for WP_User_Search on PHP4 installations
639
- * Collect IP address of subscribers either at initial submission or at confirmation as required by some hosts to allow relaxation of email restrictions. IP details are in the database or available when the mouse pointer is held over the sign up date in Tools->Subscribers
640
- * Fix for script execution time limit code for sites that have safe mode on or that have disable ini_set()
641
- * Display category slugs when mouse pointer is held over the name in the category form area
642
- * Fixed display of HTML entities in the subject of emails by using html_entity_decode()
643
- * Fixed substitution of the MYNAME keyword in notification emails
644
- * Added option to use BurnURL as an alternative to TinyURL to create shorter link URLs
645
-
646
- = Version 5.0 by Matthew Robinson =
647
-
648
- * Change version number to reflect change in the on going support of the plugin which is now a searchable forum or a paid service
649
- * Added links to online Subscribe2 resources into the Options->Subscribe2 page
650
- * Fixed Digest Time Dropdown to recall Cron Task scheduled time
651
- * Fixed code using updated [Admin Menu Plugin](http://wordpress.org/extend/plugins/ozh-admin-drop-down-menu/) API
652
- * Fixed foreach() error in widget rename function
653
- * Improved layout of widget control boxes
654
- * Improved identification of Administrator level users on blogs where usermeta table entries for user_level are low or missing
655
- * Removed avatar plugin support on WPMU due to processing overhead
656
- * Improved the layout of the digest email with respect to inclusion of unnecessary white space
657
- * Extended maximum script runtime for servers not using PHP in safe mode
658
-
659
- = Version 4.18 by Matthew Robinson =
660
-
661
- * Option to sort digest posts in ascending or descending order
662
- * Check that plugin options array exists before calling upgrade functions
663
- * Improved reliability of the Preview function
664
- * Extended Preview function to digest emails
665
- * Fixed a code glitch that stopped CATS and TAGS from working
666
- * Fixed incorrect sender information is emails are set to come from Post Author
667
- * Simplified email notification format options in Users->Subscriptions for per-post notifications
668
- * Added Bulk Manage option to update email notification format
669
- * Simplified the usermeta database entries from two format variables down to one
670
- * Removed trailing spaces from some strings for improved i18n support
671
- * Improved Bulk Subscribe and Unsubscribe routines to avoid database artefacts
672
- * Moved Select/Deselect All check box to the top of the category list in admin pages
673
- * Fixed small layout glitch in Manage->Subscribers screen
674
- * Added ChangeLog section to ReadMe to support WordPress.org/extend development
675
-
676
- = Version 4.17 by Matthew Robinson =
677
-
678
- * Tested for compatibility with WordPress 2.8.x
679
- * Added TAGS and CATS keyword for per-post notification templates
680
- * Fixed bug where confirmation emails may have an empty sender field if notifications come from post author
681
- * Fixed a bug in WPMU CSS
682
- * Added option to exclude new categories by default
683
- * Fixed a bug where emails may not be sent to subscribers when a user subscribes or unsubscribes
684
- * Improved accessing of 'Admin' level users on blogs where user_level is set below 10
685
- * Added ability to send email previews to currently logged in user from Settings->Subscribe2
686
- * Styled admin menu form buttons to fit with WordPress theme
687
- * Improved handling of confirmation sending to reduce errors
688
-
689
- = Version 4.16 by Matthew Robinson =
690
-
691
- * Correct minor layout issue in Settings->Subscribe2
692
- * Allow users to define the div class name for the widget for styling purposes
693
- * Select from a greater number of notification senders via dropdown list in Settings
694
- * Improved efficiency of newly added WordPressMU code
695
- * Added ability to manage across-blog subscriptions when using WordPressMU
696
- * Fixed bug whereby Public Subscribers may not have got notification emails for posts if Private Posts were blocked
697
- * Added ability to define email Subject contents in Settings->Subscribe2
698
- * Sanity checks of email subject and body templates to ensure they are not empty
699
- * Introduced s2_html_email and s2_plain_email filters to allow manipulation of email messages after construction
700
- * Amended handling of database entries to simplify code and database needs
701
- * Improved the layout of the Subscriber drop down menu
702
- * Added bullet points to the TABLE of posts
703
- * Ensure database remains clean when categories are deleted
704
- * Added new option to manage how auto-subscribe handles excluded categories
705
-
706
- = Version 4.15 by Matthew Robinson =
707
-
708
- * Fixed E_DEPRECATE warning caused by a variable being passed by reference to the ksort() function
709
- * Fixed called to undefined function caused by typo
710
- * Fixed a syntax error in the SQL code constructors affecting some users
711
-
712
- = Version 4.14 by Matthew Robinson =
713
-
714
- * Reordered some functions to improve grouping
715
- * Stop s2mail custom variable being added if empty
716
- * Localised 'Send Digest Notification at' string
717
- * Add support for template tags in Post->Mail Subscribers emails
718
- * Improve handling of translation files for more recent version of WordPress
719
- * Implemented <label> tags in the admin pages so text descriptors are click enabled
720
- * Improved subscription preferences for WordPress MU (Huge thanks to Benedikt Forchhammer)
721
- * Added TINYLINK tag to allow TinyURL insertion in place of PERMALINK
722
- * Improved layout of Tools->Subscriber page (Thanks to Anne-Marie Redpath)
723
- * Enhancements to Subscription form layout (Thanks to Anne-Marie Redpath and Andy Steinmark)
724
- * Sender details now uses current user information from Write->Mail Subscribers
725
- * Introduced 's2_template_filter' to allow other plugins to amend the email template on-the-fly
726
-
727
- = Version 4.13 by Matthew Robinson =
728
-
729
- * Update weekly description
730
- * Improve layout in the Subscribe2 form
731
- * Fixed bug where registering users would not be subscribed to categories if using the checkbox on the registration page
732
- * Improved buttonsnap function checking to reduce PHP notices
733
- * Fixed typo when including CSS information in HTML emails
734
- * Fix 'edit' links in the Tools->Subscribers page for blogs where the WordPress files are not in root
735
- * Improved Tools->Subscribers page layout by hiding some buttons when they are not needed
736
- * Fixed glitch in default options settings file
737
- * Added option to include or exclude a link back to the blog theme CSS information within the HTML emails
738
- * Improve per-post exceptions to sending emails by introducing a separate meta-box rather than relying on a custom field
739
- * Fix for Gallery code in emails sending entire media library
740
- * Updated screen shots
741
-
742
- = Version 4.12 by Matthew Robinson =
743
-
744
- * Added new option to remove Auto Subscribe option from Users->Your Subscriptions
745
- * New POSTTIME token for digest email notifications
746
- * Preserve mail after sending from Write->Mail Subscribers
747
- * Introduced the Subscriber Counter Widget
748
- * Use Rich Text Editor in Write->Mail Subscribers for the Paid HTML version
749
- * Per User management in Admin
750
- * Added support Uninstall API in WordPress 2.7
751
- * Add support for 'Meta Widget' links
752
- * Subscribers are sorted alphabetically before sending notifications
753
- * Added ability to bulk unsubscribe a list of emails pasted into manage window
754
- * Define number of subscribers in Manage window
755
- * Added options for admin emails when public users subscribe or unsubscribe
756
- * Fixed bug that prevented sending of Reminder emails from Manage->Subscribers
757
- * Amended confirmation code so that only one email is sent no matter how many times users click on (un)subscribe links
758
-
759
- = Version 4.11 by Matthew Robinson =
760
-
761
- * Works in WordPress 2.7-almost-beta!
762
- * Fixed a bug in the mail() function that meant emails were not sent to recipients if the BCCLimit setting was greater than the total number of recipients for that mail type
763
- * Ensured that the array of recipients was cast correctly in the reminder function
764
- * Fixed display of html entities in the reminder emails
765
- * Fixed a bug in the SQL statements for WordPress MU installations
766
- * Corrected a typo in the message displayed on the WordPress registration page if subscriptions are automatic
767
- * Several layout and inline comment changes
768
-
769
- = Version 4.10 by Matthew Robinson =
770
-
771
- * Fixed Registration form action from WordPress registrations
772
- * Repositioned the button to send reminder emails
773
- * Implemented WP_CONTENT_URL and WP_CONTENT_DIR
774
- * Added filter for <a href="http://planetozh.com/blog/2008/08/admin-drop-down-menu-more-goodness-an-api/">Admin Drop Down Menu</a>
775
- * Improve functioning of Process button in Manage admin pane
776
- * Improved form compliance with XHTML
777
- * Fixed bug with cron time being changed every time options are changed
778
-
779
- = Version 4.9 by Matthew Robinson =
780
-
781
- * Send email direct to recipient if BCC is set as 1
782
- * Fix issue where WordPress shortcodes were not stripped out of emails
783
- * Amended Manage page to resolve issues with IE and Opera not passing form information correctly
784
- * Amended Manage page to allow for bulk management of public users
785
- * Amended WordPress API usage for translation files to 2.6 compatible syntax
786
- * Allow Editor and Author users to send emails from Write->Mail Subscribers
787
- * Post collection for CRON function is more dynamic
788
- * CRON function sanity to checks for post content before sending a notification
789
- * Fixed get_register() function to allow for user_activation field
790
- * Corrected typos in options.php
791
- * Added a search box to the Manage->Subscribers window
792
- * Strip tags and HTML entities from email subjects
793
- * Improved message feedback in Write->Mail
794
- * Added html_entity_decode to sender name fields
795
- * Change Menu string for User menu to make it clearer whose preferences are being edited
796
-
797
- = Version 4.8 by Matthew Robinson =
798
-
799
- * Removed unnecessary return statement at end of publish() function
800
- * Ensured posts in digest are listed in date order
801
- * Improved compatibility with other plugins by only inserting JavaScript code into Subscribe2's own admin pages
802
- * Added BCCLIMIT and S2PAGE to options page with AJAX editing
803
- * Improved setting of CRON task base time
804
- * Improved handling of option values in the options form
805
- * Full XHTML compliance on all Subscribe2 admin pages
806
- * Decode HTML entity codes in notification email subjects
807
- * Added Subscribe2 support for blogging via email
808
- * Work-around fix implemented for WordPress the_title bug
809
-
810
- = Version 4.7 by Matthew Robinson =
811
-
812
- * Added admin control over default auto subscribe to new category option
813
- * Improved Cron code to reduce the chance of duplicate emails
814
- * Fixed a string that was missed from the translation files
815
- * Improved time variable handling for cron functions, especially when UTC is different from both server time and blog time
816
- * Completed code changes to allow WPMU compatibility
817
- * Fixed some issues with the email headers now that Subscribe2 is using wp_mail() again
818
-
819
- = Version 4.6 by Matthew Robinson =
820
-
821
- * Fixed mis-reporting of server error when unsubscribing
822
- * Fixed fatal errors involving buttonsnap library
823
- * Improved database entry management for new subscribers
824
- * Fixed issue where Subscribe2 grabbed the first page from the database even if it wasn't published
825
- * Fixed upgrade reporting for Debug and Uninstaller plugins
826
-
827
- = Version 4.5 by Matthew Robinson =
828
-
829
- * Added Support for WordPress 2.5!
830
- * Fixed HTML typo in admin submission message
831
- * Fixed time display for cron jobs in Options->Subscribe2 when displayed on blogs using a time offset
832
- * Added Debug plugin to the download package
833
- * Improved descriptions of email template keywords in Options->Subscribe2
834
- * Display subscribers in batches of 50 in Manage->Subscribers
835
- * Fixed some XHTML validation errors
836
- * Improved admin menu layout for compliance with WordPress 2.5
837
- * Reverted to using wp_mail instead of mail to ensure proper header encoding
838
- * Improved mail header formatting - thanks to Chris Carlson
839
- * Add ability to skip email notification using a Custom Field (s2mail set as "no")
840
- * Improved CSV export - thanks to Aaron Axelsen
841
- * Added some compatibility for WPMU - thanks to Aaron Axelsen
842
- * Added some error feedback to blog users if mails fail to send
843
- * Moved Buttonsnap due to far to many fatal error complaints
844
- * Added option to send notifications for Private posts
845
- * Improved handling of notification for Password Protected Posts
846
-
847
- = Version 4.4 by Matthew Robinson =
848
-
849
- * Fixed non-substitution of TABLE keyword
850
- * Fixed bug in usermeta update calls in unsubscribe_registered_users function
851
- * Fixed bug in array handling in cron function that may have stopped emails sending
852
- * Improved array handling in the Digest function
853
- * Added an Un-installer to completely removed Subscribe2 from your WordPress install
854
-
855
- = Version 4.3 by Matthew Robinson =
856
-
857
- * Fixed bug where digest emails were sent to unsubscribed users - Thanks to Mr Papa
858
- * Stripped slashes from Subject when sending from Write->Mail Subscribers - Thanks to James
859
- * Ensured all admin pages created by Subscribe2 are valid XHTML 1.0 Transitional code
860
- * Added default mail templates and other missed string values to i18n files to allow easier first time translation - thanks to Kjell
861
- * Added option to set the hour for digest email notifications provided the schedule interval is one day or greater
862
- * Moved option variable declaration to ensure better caching
863
- * Fixed bug where cron tasks were not removed when options were reset
864
- * Fixed email notifications for future dated posts
865
- * Fixed QuickTag Icons and mouse-over floating text
866
-
867
- = Version 4.2 by Matthew Robinson =
868
-
869
- * Added translation capability to user feedback strings - thanks to Lise
870
- * Corrected some other translation strings
871
- * Fixed bug in notification emails to admins when new users subscribe
872
- * Updated default options code
873
-
874
- = Version 4.1 by Matthew Robinson =
875
-
876
- * Fixed sending of notifications for Pages
877
- * Fixed password protected post bug for Digest email notifications
878
- * Fixed blank email headers if admin data is not at ID 1
879
-
880
- = Version 4.0 by Matthew Robinson =
881
-
882
- * Compatible with WordPress 2.3
883
- * Widget Code now integrated into the main plugin and added as an option
884
- * More Options for Email Notifications
885
- * Category Lists fixed for WordPress 2.3 and now show empty categories
886
-
887
- = Version 3.8 by Matthew Robinson =
888
-
889
- * Fixed User Menu Settings when Digests enabled
890
- * Changed Registered Subscribers to Registered Users in drop down to avoid confusion
891
- * Minor code revisions for admin menu layout
892
-
893
- = Version 3.7 by Matthew Robinson =
894
-
895
- * Change from deprecated get_settings -> get_option
896
- * Fix for confirmation links not working for custom installs
897
- * Abandoned wp_mail due to core bugs
898
- * Added Digest Table feature (untested)
899
- * Added icons to manage window (Thanks to http://www.famfamfam.com/lab/icons/)
900
- * Fixed Bulk Manage bug when using i18n files
901
- * Fixed bug in cron emails if <!--more--> tag present
902
-
903
- = Version 3.6 by Matthew Robinson =
904
-
905
- * Fixed a typo in Content-Type mail headers
906
- * Fixed Auto Register functions to obey Excluded Categories
907
- * Added option to check WP-Register checkbox by default
908
-
909
- = Version 3.5 by Matthew Robinson =
910
-
911
- * Fixed a bug in the upgrade function that was messing up the options settings
912
- * Updated the include.php file to preset recently introduced option settings
913
-
914
- = Version 3.4 by Matthew Robinson =
915
-
916
- * QuickTag button now displays a Marker! (HUGE thanks to Raven!)
917
- * Fix for excluded categories in User Menu
918
- * BCCLIMIT typo corrected in Mail function
919
- * Call to translation files moved to avoid call to undefined function
920
- * Options added to send mails for pages and password protected posts
921
- * Option added to display subscription checkbox in WordPress Register screen
922
- * Small typo and layout amendments
923
-
924
- = Version 3.3 by Matthew Robinson =
925
-
926
- * QuickTag button added! Works with Visual and Standard Editor. __Look in Code for token addition if using RTE.__
927
- * Current Server time displayed for Cron tasks
928
- * Fixed bug so Registered users now identified correctly
929
- * Upgrade function called via WordPress hook to prevent calls to undefined functions
930
- * Fixed a bug affecting Registered Users not appearing in the drop down list
931
- * Improved handling of the Subscribe2 option array
932
-
933
- = Version 3.2 by Matthew Robinson =
934
-
935
- * Fixed a bug affecting Registered Users not appearing in the drop down list
936
- * Improved handling of the Subscribe2 option array
937
-
938
- = Version 3.1 by Matthew Robinson =
939
-
940
- * Amended code to use core cron functionality for future posts and digest notifications, no longer need WP-Cron
941
- * Improved HTML code generated for admin pages
942
- * Removed sending of emails for WordPress Pages
943
- * Fixed display issues if S2PAGE is not defined
944
-
945
- = Version 3.0 by Matthew Robinson =
946
-
947
- * Updated for WordPress 2.1 Branch
948
-
949
- = Version 2.22 by Matthew Robinson =
950
-
951
- * Fixed User Menu Settings when Digests enabled
952
- * Changed Registered Subscribers to Registered Users in drop down to avoid confusion
953
- * Minor code revisions for admin menu layout
954
-
955
- = Version 2.21 by Matthew Robinson =
956
-
957
- * Change from deprecated get_settings -> get_option
958
- * Fixed bug in cron emails if <!--more--> tag present
959
-
960
- = Version 2.20 by Matthew Robinson =
961
-
962
- * Fixed a typo in Content-Type mail headers
963
- * Fixed Auto Register functions to obey Excluded Categories
964
-
965
- = Version 2.19 by Matthew Robinson =
966
-
967
- * Fixed a bug in the upgrade function that was messing up the options settings
968
-
969
- = Version 2.18 by Matthew Robinson =
970
-
971
- * BCCLIMIT typo corrected in Mail function
972
- * Call to translation files moved to avoid call to undefined function
973
- * Small typo and layout amendments
974
-
975
- = Version 2.17 by Matthew Robinson =
976
-
977
- * Current Server time displayed for Cron tasks
978
- * Fixed bug so Registered users now identified correctly
979
- * Upgrade function called via WordPress hook to prevent calls to undefined functions
980
-
981
- = Version 2.16 by Matthew Robinson =
982
-
983
- * Fixed a bug affecting Registered Users not appearing in the drop down list
984
- * Improved handling of the Subscribe2 option array
985
-
986
- = Version 2.15 by Matthew Robinson =
987
-
988
- * Improved HTML code generated for admin pages
989
- * Fixed display issues if S2PAGE is not defined
990
-
991
- = Version 2.14 by Matthew Robinson =
992
-
993
- * Amended DREAMHOST setting to BCCLIMIT as more hosts are limiting emails
994
- * Fixed oversight in upgrade() function
995
-
996
- = Version 2.13 by Matthew Robinson =
997
-
998
- * Added WordPress nonce functionality to improve admin security
999
-
1000
- = Version 2.12 by Matthew Robinson =
1001
-
1002
- * Fix for missing Quicktags (probably since version 2.2.10)
1003
- * Fix for occasional email issue where excerpts are incomplete
1004
-
1005
- = Version 2.11 by Matthew Robinson =
1006
-
1007
- * Fixed bug that would cause all subscribers to get digest emails
1008
- * Added Select All check box to category listing
1009
-
1010
- = Version 2.10 by Matthew Robinson =
1011
-
1012
- * Improved sign up process by double checking email address
1013
- * Fix for submenu issues encountered in WP 2.0.6
1014
-
1015
- = Version 2.9 by Matthew Robinson =
1016
-
1017
- * Fixed get_userdata call issue
1018
- * Added CSV export
1019
- * Reworked options storage routines
1020
-
1021
- = Version 2.8 by Matthew Robinson =
1022
-
1023
- * Fixed missing line return in email headers that was causing failed emails
1024
- * Added user feedback messages to profile area
1025
- * Added 'Authorname' to the list of message substitutions in email messages
1026
- * Fixed name and email substitution in Digest Mails
1027
- * Fixed stripslashes issue in email subjects
1028
- * Added new 'Action' token for confirmation emails
1029
-
1030
- = Version 2.7 by Matthew Robinson =
1031
-
1032
- * Link to post in HTML emails is now functional
1033
- * Fixed bug in Bulk Management so it works when first loaded
1034
- * Ability to auto subscribe newly registering users
1035
- * Added additional email header information
1036
-
1037
- = Version 2.6 by Matthew Robinson =
1038
-
1039
- * Fixed email headers to comply with RFC2822 standard (after breaking them in the first place)
1040
- * Impoved XHTML compliance of user feedback messages and subscription form when presented on a blog
1041
- * Tidied up presentation of the code a little
1042
- * Cached some additional variables
1043
-
1044
- = Version 2.5 by Matthew Robinson =
1045
-
1046
- * Added functionality to Bulk Manage registered users subscriptions
1047
-
1048
- = Version 2.4 by Matthew Robinson =
1049
-
1050
- * Added functionality to block user specified domains from public subscription
1051
-
1052
- = Version 2.3 by Matthew Robinson =
1053
-
1054
- * Added functionality to allow for Subscribe2 Sidebar Widget
1055
- * Added functionality to block public email subscriptins from domains defined under Options
1056
- * Added functionality to send an email reminder to all unconfirmed public subscriber
1057
- * Added removal of html entities (for example &copy;) from plaintext emails
1058
- * Replaced spaces with tabs in Plugin format
1059
- * Minor changes to admin layout to match WordPress admin function layout
1060
-
1061
- = Version 2.2 =
1062
-
1063
- * By Scott Merrill, see http://www.skippy.net/blog/category/wordpress/plugins/subscribe2/
1064
 
1065
  == Upgrade Notice ==
1066
 
332
 
333
  == Changelog ==
334
 
335
+ See [ChangeLog.txt](http://plugins.svn.wordpress.org/subscribe2/trunk/ChangeLog.txt)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
336
 
337
  == Upgrade Notice ==
338
 
admin/send_email.php CHANGED
@@ -28,6 +28,11 @@ if ( isset($_POST['s2_admin']) && 'mail' == $_POST['s2_admin'] ) {
28
  $recipients = $this->get_registered("cats=$cat");
29
  } elseif ( 'all_users' == $_POST['what'] ) {
30
  $recipients = $this->get_all_registered();
 
 
 
 
 
31
  } else {
32
  $recipients = $this->get_registered();
33
  }
28
  $recipients = $this->get_registered("cats=$cat");
29
  } elseif ( 'all_users' == $_POST['what'] ) {
30
  $recipients = $this->get_all_registered();
31
+ } elseif ( 'all' == $_POST['what'] ) {
32
+ $confirmed = $this->get_public();
33
+ $unconfirmed = $this->get_public(0);
34
+ $registered = $this->get_all_registered();
35
+ $recipients = array_merge((array)$confirmed, (array)$unconfirmed, (array)$registered);
36
  } else {
37
  $recipients = $this->get_registered();
38
  }
admin/settings.php CHANGED
@@ -48,7 +48,7 @@ if ( isset( $_POST['s2_admin']) ) {
48
  }
49
  }
50
  } elseif ( in_array($key, array('notification_subject', 'mailtext', 'confirm_subject', 'confirm_email', 'remind_subject', 'remind_email')) && !empty($_POST[$key]) ) {
51
- // email subject and body templates
52
  $this->subscribe2_options[$key] = $_POST[$key];
53
  } elseif ( in_array($key, array('compulsory', 'exclude', 'format')) ) {
54
  sort($_POST[$key]);
@@ -228,7 +228,7 @@ switch ($current_tab) {
228
  }
229
  echo __('Add Tracking Parameters to the Permalink', 'subscribe2') . ": ";
230
  echo "<input type=\"text\" name=\"tracking\" value=\"" . stripslashes($this->subscribe2_options['tracking']) . "\" size=\"50\" /> ";
231
- echo "<br />" . __('eg. utm_source=subscribe2&amp;utm_medium=email&amp;utm_campaign=postnotify&amp;utm_id={ID}', 'subscribe2') . "\r\n";
232
  echo "</p>\r\n";
233
  echo "</div>\r\n";
234
  break;
@@ -241,7 +241,7 @@ switch ($current_tab) {
241
  echo "<tr><td style=\"vertical-align: top; height: 350px; min-height: 350px;\">";
242
  echo __('New Post email (must not be empty)', 'subscribe2') . ":<br />\r\n";
243
  echo __('Subject Line', 'subscribe2') . ": ";
244
- echo "<input type=\"text\" name=\"notification_subject\" value=\"" . stripslashes($this->subscribe2_options['notification_subject']) . "\" size=\"30\" />";
245
  echo "<br />\r\n";
246
  echo "<textarea rows=\"9\" cols=\"60\" name=\"mailtext\">" . stripslashes($this->subscribe2_options['mailtext']) . "</textarea>\r\n";
247
  echo "</td><td style=\"vertical-align: top;\" rowspan=\"3\">";
@@ -271,12 +271,12 @@ switch ($current_tab) {
271
  echo "</dl></td></tr><tr><td style=\"vertical-align: top; height: 350px; min-height: 350px;\">";
272
  echo __('Subscribe / Unsubscribe confirmation email', 'subscribe2') . ":<br />\r\n";
273
  echo __('Subject Line', 'subscribe2') . ": ";
274
- echo "<input type=\"text\" name=\"confirm_subject\" value=\"" . stripslashes($this->subscribe2_options['confirm_subject']) . "\" size=\"30\" /><br />\r\n";
275
  echo "<textarea rows=\"9\" cols=\"60\" name=\"confirm_email\">" . stripslashes($this->subscribe2_options['confirm_email']) . "</textarea>\r\n";
276
  echo "</td></tr><tr><td style=\"vertical-align: top; height: 350px; min-height: 350px;\">";
277
  echo __('Reminder email to Unconfirmed Subscribers', 'subscribe2') . ":<br />\r\n";
278
  echo __('Subject Line', 'subscribe2') . ": ";
279
- echo "<input type=\"text\" name=\"remind_subject\" value=\"" . stripslashes($this->subscribe2_options['remind_subject']) . "\" size=\"30\" /><br />\r\n";
280
  echo "<textarea rows=\"9\" cols=\"60\" name=\"remind_email\">" . stripslashes($this->subscribe2_options['remind_email']) . "</textarea><br /><br />\r\n";
281
  echo "</td></tr></table>\r\n";
282
  echo "</div>\r\n";
48
  }
49
  }
50
  } elseif ( in_array($key, array('notification_subject', 'mailtext', 'confirm_subject', 'confirm_email', 'remind_subject', 'remind_email')) && !empty($_POST[$key]) ) {
51
+ // email subject and body templates
52
  $this->subscribe2_options[$key] = $_POST[$key];
53
  } elseif ( in_array($key, array('compulsory', 'exclude', 'format')) ) {
54
  sort($_POST[$key]);
228
  }
229
  echo __('Add Tracking Parameters to the Permalink', 'subscribe2') . ": ";
230
  echo "<input type=\"text\" name=\"tracking\" value=\"" . stripslashes($this->subscribe2_options['tracking']) . "\" size=\"50\" /> ";
231
+ echo "<br />" . __('eg. utm_source=subscribe2&amp;utm_medium=email&amp;utm_campaign=postnotify&amp;utm_id={ID}&amp;utm_title={TITLE}', 'subscribe2') . "\r\n";
232
  echo "</p>\r\n";
233
  echo "</div>\r\n";
234
  break;
241
  echo "<tr><td style=\"vertical-align: top; height: 350px; min-height: 350px;\">";
242
  echo __('New Post email (must not be empty)', 'subscribe2') . ":<br />\r\n";
243
  echo __('Subject Line', 'subscribe2') . ": ";
244
+ echo "<input type=\"text\" name=\"notification_subject\" value=\"" . stripslashes($this->subscribe2_options['notification_subject']) . "\" size=\"45\" />";
245
  echo "<br />\r\n";
246
  echo "<textarea rows=\"9\" cols=\"60\" name=\"mailtext\">" . stripslashes($this->subscribe2_options['mailtext']) . "</textarea>\r\n";
247
  echo "</td><td style=\"vertical-align: top;\" rowspan=\"3\">";
271
  echo "</dl></td></tr><tr><td style=\"vertical-align: top; height: 350px; min-height: 350px;\">";
272
  echo __('Subscribe / Unsubscribe confirmation email', 'subscribe2') . ":<br />\r\n";
273
  echo __('Subject Line', 'subscribe2') . ": ";
274
+ echo "<input type=\"text\" name=\"confirm_subject\" value=\"" . stripslashes($this->subscribe2_options['confirm_subject']) . "\" size=\"45\" /><br />\r\n";
275
  echo "<textarea rows=\"9\" cols=\"60\" name=\"confirm_email\">" . stripslashes($this->subscribe2_options['confirm_email']) . "</textarea>\r\n";
276
  echo "</td></tr><tr><td style=\"vertical-align: top; height: 350px; min-height: 350px;\">";
277
  echo __('Reminder email to Unconfirmed Subscribers', 'subscribe2') . ":<br />\r\n";
278
  echo __('Subject Line', 'subscribe2') . ": ";
279
+ echo "<input type=\"text\" name=\"remind_subject\" value=\"" . stripslashes($this->subscribe2_options['remind_subject']) . "\" size=\"45\" /><br />\r\n";
280
  echo "<textarea rows=\"9\" cols=\"60\" name=\"remind_email\">" . stripslashes($this->subscribe2_options['remind_email']) . "</textarea><br /><br />\r\n";
281
  echo "</td></tr></table>\r\n";
282
  echo "</div>\r\n";
admin/subscribers.php CHANGED
@@ -129,9 +129,13 @@ if ( !empty($_POST['s']) ) {
129
  $subscribers = $result;
130
  }
131
 
132
- if ( !class_exists('WP_List_Table') ){
133
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
134
  }
 
 
 
 
135
  // Instantiate and prepare our table data - this also runs the bulk actions
136
  $S2ListTable = new Subscribe2_List_Table();
137
  $S2ListTable->prepare_items();
@@ -246,141 +250,4 @@ echo "</form></div>\r\n";
246
  include(ABSPATH . 'wp-admin/admin-footer.php');
247
  // just to be sure
248
  die;
249
-
250
- class Subscribe2_List_Table extends WP_List_Table {
251
- function __construct(){
252
- global $status, $page;
253
-
254
- parent::__construct( array(
255
- 'singular' => 'subscriber',
256
- 'plural' => 'subscribers',
257
- 'ajax' => false
258
- ) );
259
- }
260
-
261
- function column_default($item, $column_name){
262
- global $current_tab;
263
- if ( $current_tab == 'registered' ) {
264
- switch($column_name){
265
- case 'email':
266
- return $item[$column_name];
267
- default:
268
- return print_r($item,true);
269
- }
270
- } else {
271
- switch($column_name){
272
- case 'email':
273
- case 'date':
274
- return $item[$column_name];
275
- default:
276
- return print_r($item,true);
277
- }
278
- }
279
- }
280
-
281
- function column_email($item){
282
- global $current_tab;
283
- if ( $current_tab == 'registered' ) {
284
- $actions = array('edit' => sprintf('<a href="?page=%s&amp;email=%s">Edit</a>', 's2', $item['email']));
285
- return sprintf('%1$s %2$s', $item['email'], $this->row_actions($actions));
286
- } else {
287
- global $mysubscribe2;
288
- if ( '0' === $mysubscribe2->is_public($item['email']) ) {
289
- return sprintf('<span style="color:#FF0000">%1$s</span>', $item['email']);
290
- } else {
291
- return sprintf('%1$s', $item['email']);
292
- }
293
- }
294
- }
295
-
296
- function column_cb($item){
297
- return sprintf('<input type="checkbox" name="%1$s[]" value="%2$s" />', $this->_args['singular'], $item['email']);
298
- }
299
-
300
- function get_columns(){
301
- global $current_tab;
302
- if ( $current_tab == 'registered' ) {
303
- $columns = array('email' => 'Email');
304
- } else {
305
- $columns = array(
306
- 'cb' => '<input type="checkbox" />',
307
- 'email' => 'Email',
308
- 'date' => 'Date'
309
- );
310
- }
311
- return $columns;
312
- }
313
-
314
- function get_sortable_columns() {
315
- global $current_tab;
316
- if ( $current_tab == 'registered' ) {
317
- $sortable_columns = array('email' => array('email', true));
318
- } else {
319
- $sortable_columns = array(
320
- 'email' => array('email', true),
321
- 'date' => array('date', false)
322
- );
323
- }
324
- return $sortable_columns;
325
- }
326
-
327
- function get_bulk_actions() {
328
- global $current_tab;
329
- if ( $current_tab == 'registered' ) {
330
- return array();
331
- } else {
332
- $actions = array(
333
- 'delete' => __('Delete', 'subscribe2'),
334
- 'toggle' => __('Toggle', 'subscribe2')
335
- );
336
- return $actions;
337
- }
338
- }
339
-
340
- function prepare_items() {
341
-
342
- global $mysubscribe2;
343
- if ( is_int($mysubscribe2->subscribe2_options['entries']) ) {
344
- $per_page = $mysubscribe2->subscribe2_options['entries'];
345
- } else {
346
- $per_page = 25;
347
- }
348
-
349
- $columns = $this->get_columns();
350
- $hidden = array();
351
- $sortable = $this->get_sortable_columns();
352
- $this->_column_headers = array($columns, $hidden, $sortable);
353
-
354
- global $mysubscribe2, $subscribers, $current_tab;
355
- $data = array();
356
- if ( $current_tab == 'public' ) {
357
- foreach($subscribers as $email) {
358
- $data[] = array('email' => $email, 'date' => $mysubscribe2->signup_date($email));
359
- }
360
- } else {
361
- foreach($subscribers as $email) {
362
- $data[] = array('email' => $email);
363
- }
364
- }
365
-
366
- function usort_reorder($a,$b){
367
- $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'email';
368
- $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc';
369
- $result = strcmp($a[$orderby], $b[$orderby]);
370
- return ($order==='asc') ? $result : -$result;
371
- }
372
- usort($data, 'usort_reorder');
373
-
374
- $current_page = $this->get_pagenum();
375
- $total_items = count($data);
376
- $data = array_slice($data,(($current_page-1)*$per_page),$per_page);
377
- $this->items = $data;
378
-
379
- $this->set_pagination_args( array(
380
- 'total_items' => $total_items,
381
- 'per_page' => $per_page,
382
- 'total_pages' => ceil($total_items/$per_page)
383
- ) );
384
- }
385
- }
386
  ?>
129
  $subscribers = $result;
130
  }
131
 
132
+ if ( !class_exists('WP_List_Table') ) {
133
  require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
134
  }
135
+ if ( !class_exists('Subscribe2_List_Table') ) {
136
+ require_once( S2PATH . 'classes/class-s2-list-table.php' );
137
+ }
138
+
139
  // Instantiate and prepare our table data - this also runs the bulk actions
140
  $S2ListTable = new Subscribe2_List_Table();
141
  $S2ListTable->prepare_items();
250
  include(ABSPATH . 'wp-admin/admin-footer.php');
251
  // just to be sure
252
  die;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
253
  ?>
admin/your_subscriptions.php CHANGED
@@ -148,7 +148,8 @@ if ( $this->subscribe2_options['email_freq'] == 'never' ) {
148
  } else {
149
  echo "<h2>" . __('Subscribed Categories', 'subscribe2') . "</h2>\r\n";
150
  }
151
- $this->display_category_form(explode(',', get_user_meta($user_ID, $this->get_usermeta_keyname('s2_subscribed'), true)), $this->subscribe2_options['reg_override'], explode(',', $this->subscribe2_options['compulsory']));
 
152
  } else {
153
  // we're doing daily digests, so just show
154
  // subscribe / unnsubscribe
148
  } else {
149
  echo "<h2>" . __('Subscribed Categories', 'subscribe2') . "</h2>\r\n";
150
  }
151
+ ('' == $this->subscribe2_options['compulsory']) ? $compulsory = array() : $compulsory = explode(',', $this->subscribe2_options['compulsory']);
152
+ $this->display_category_form(explode(',', get_user_meta($user_ID, $this->get_usermeta_keyname('s2_subscribed'), true)), $this->subscribe2_options['reg_override'], $compulsory);
153
  } else {
154
  // we're doing daily digests, so just show
155
  // subscribe / unnsubscribe
classes/class-s2-admin.php CHANGED
@@ -234,7 +234,7 @@ class s2_admin extends s2class {
234
  echo " checked=\"checked\"";
235
  }
236
  if ( in_array($cat->term_id, $compulsory) && $name === 'category' ) {
237
- echo " checked=\"checked\" DISABLED";
238
  }
239
  echo " /> <abbr title=\"" . $cat->slug . "\">" . $catName . "</abbr></label><br />\r\n";
240
  }
234
  echo " checked=\"checked\"";
235
  }
236
  if ( in_array($cat->term_id, $compulsory) && $name === 'category' ) {
237
+ echo " DISABLED";
238
  }
239
  echo " /> <abbr title=\"" . $cat->slug . "\">" . $catName . "</abbr></label><br />\r\n";
240
  }
classes/class-s2-core.php CHANGED
@@ -78,161 +78,77 @@ class s2class {
78
  active tinyint(1) default 0,
79
  date DATE default '$date' NOT NULL,
80
  ip char(64) NOT NULL default 'admin',
 
 
 
 
81
  PRIMARY KEY (id) )";
82
 
83
  // create the table, as needed
84
  maybe_create_table($this->public, $sql);
85
 
86
- // safety check if options exist and if not create them
87
- if ( !is_array($this->subscribe2_options) ) {
88
- $this->reset();
89
- }
90
- } // end install()
91
-
92
- /**
93
- Upgrade function for the database and settings
94
- */
95
- function upgrade() {
96
- global $wpdb, $wp_version, $wpmu_version;
97
- // include upgrade-functions for maybe_add_column;
98
- if ( !function_exists('maybe_add_column') ) {
99
- require_once(ABSPATH . 'wp-admin/install-helper.php');
100
- }
101
- $date = date('Y-m-d');
102
- maybe_add_column($this->public, 'date', "ALTER TABLE $this->public ADD date DATE DEFAULT '$date' NOT NULL AFTER active");
103
- maybe_add_column($this->public, 'ip', "ALTER TABLE $this->public ADD ip char(64) DEFAULT 'admin' NOT NULL AFTER date");
104
- maybe_add_column($this->public, 'time', "ALTER TABLE $this->public ADD time TIME DEFAULT '00:00:00' NOT NULL AFTER date");
105
- maybe_add_column($this->public, 'conf_date', "ALTER TABLE $this->public ADD conf_date DATE AFTER ip");
106
- maybe_add_column($this->public, 'conf_time', "ALTER TABLE $this->public ADD conf_time TIME AFTER conf_date");
107
- maybe_add_column($this->public, 'conf_ip', "ALTER TABLE $this->public ADD conf_ip char(64) AFTER conf_time");
108
-
109
- // let's take the time to check process registered users
110
- // existing public subscribers are subscribed to all categories
111
  $users = $this->get_all_registered('ID');
112
  if ( !empty($users) ) {
113
  foreach ( $users as $user_ID ) {
114
  $check_format = get_user_meta($user_ID, $this->get_usermeta_keyname('s2_format'), true);
115
- // if user is already registered update format remove 's2_excerpt' field and update 's2_format'
116
- if ( 'html' == $check_format ) {
117
- delete_user_meta($user_ID, 's2_excerpt');
118
- } elseif ( 'text' == $check_format ) {
119
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_format'), get_user_meta($user_ID, 's2_excerpt'));
120
- delete_user_meta($user_ID, 's2_excerpt');
121
- } elseif ( empty($check_format) ) {
122
  // no prior settings so create them
123
  $this->register($user_ID);
124
  }
125
- $subscribed = get_user_meta($user_ID, $this->get_usermeta_keyname('s2_subscribed'), true);
126
- if ( strstr($subscribed, '-1') ) {
127
- // make sure we remove '-1' from any settings
128
- $old_cats = explode(',', $subscribed);
129
- $pos = array_search('-1', $old_cats);
130
- unset($old_cats[$pos]);
131
- $cats = implode(',', $old_cats);
132
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_subscribed'), $cats);
133
- }
134
- $check_authors = get_user_meta($user_ID, $this->get_usermeta_keyname('s2_authors'), true);
135
- if ( empty($check_authors) ) {
136
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_authors'), '');
137
- }
138
  }
139
  }
140
- // update the options table to serialized format
141
- $old_options = $wpdb->get_col("SELECT option_name from $wpdb->options where option_name LIKE 's2%' AND option_name != 's2_future_posts'");
142
 
143
- if ( !empty($old_options) ) {
144
- foreach ( $old_options as $option ) {
145
- $value = get_option($option);
146
- $option_array = substr($option, 3);
147
- $this->subscribe2_options[$option_array] = $value;
148
- delete_option($option);
149
- }
150
  }
151
- $this->subscribe2_options['version'] = S2VERSION;
152
- // ensure that the options are in the database
153
- require(S2PATH . "include/options.php");
154
- // correct autoformat to upgrade from pre 5.6
155
- if ( $this->subscribe2_options['autoformat'] == 'text' ) {
156
- $this->subscribe2_options['autoformat'] = 'excerpt';
157
- }
158
- if ( $this->subscribe2_options['autoformat'] == 'full' ) {
159
- $this->subscribe2_options['autoformat'] = 'post';
160
- }
161
- // change old CAPITALISED keywords to those in {PARENTHESES}; since version 6.4
162
- $keywords = array('BLOGNAME', 'BLOGLINK', 'TITLE', 'POST', 'POSTTIME', 'TABLE', 'TABLELINKS', 'PERMALINK', 'TINYLINK', 'DATE', 'TIME', 'MYNAME', 'EMAIL', 'AUTHORNAME', 'LINK', 'CATS', 'TAGS', 'COUNT', 'ACTION');
163
- $keyword = implode('|', $keywords);
164
- $regex = '/(?<!\{)\b('.$keyword.')\b(?!\{)/xm';
165
- $replace = '{\1}';
166
- $this->subscribe2_options['mailtext'] = preg_replace($regex, $replace, $this->subscribe2_options['mailtext']);
167
- $this->subscribe2_options['notification_subject'] = preg_replace($regex, $replace, $this->subscribe2_options['notification_subject']);
168
- $this->subscribe2_options['confirm_email'] = preg_replace($regex, $replace, $this->subscribe2_options['confirm_email']);
169
- $this->subscribe2_options['confirm_subject'] = preg_replace($regex, $replace, $this->subscribe2_options['confirm_subject']);
170
- $this->subscribe2_options['remind_email'] = preg_replace($regex, $replace, $this->subscribe2_options['remind_email']);
171
- $this->subscribe2_options['remind_subject'] = preg_replace($regex, $replace, $this->subscribe2_options['remind_subject']);
172
- update_option('subscribe2_options', $this->subscribe2_options);
173
-
174
- // upgrade old wpmu user meta data to new
175
- if ( $this->s2_mu === true ) {
176
- global $s2class_multisite;
177
- $s2class_multisite->namechange_subscribe2_widget();
178
- // loop through all users
179
- foreach ( $users as $user_ID ) {
180
- // get categories which the user is subscribed to (old ones)
181
- $categories = get_user_meta($user_ID, 's2_subscribed', true);
182
- $categories = explode(',', $categories);
183
- $format = get_user_meta($user_ID, 's2_format', true);
184
- $autosub = get_user_meta($user_ID, 's2_autosub', true);
185
-
186
- // load blogs of user (only if we need them)
187
- $blogs = array();
188
- if ( count($categories) > 0 && !in_array('-1', $categories) ) {
189
- $blogs = get_blogs_of_user($user_ID, true);
190
- }
191
-
192
- foreach ( $blogs as $blog ) {
193
- switch_to_blog($blog->userblog_id);
194
 
195
- $blog_categories = (array)$wpdb->get_col("SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = 'category'");
196
- $subscribed_categories = array_intersect($categories, $blog_categories);
197
- if ( !empty($subscribed_categories) ) {
198
- foreach ( $subscribed_categories as $subscribed_category ) {
199
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_cat') . $subscribed_category, $subscribed_category);
200
- }
201
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_subscribed'), implode(',', $subscribed_categories));
202
- }
203
- if ( !empty($format) ) {
204
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_format'), $format);
205
- }
206
- if ( !empty($autosub) ) {
207
- update_user_meta($user_ID, $this->get_usermeta_keyname('s2_autosub'), $autosub);
208
- }
209
- restore_current_blog();
210
- }
211
 
212
- // delete old user meta keys
213
- delete_user_meta($user_ID, 's2_subscribed');
214
- delete_user_meta($user_ID, 's2_format');
215
- delete_user_meta($user_ID, 's2_autosub');
216
- foreach ( $categories as $cat ) {
217
- delete_user_meta($user_ID, 's2_cat' . $cat);
218
- }
219
- }
220
  }
221
 
222
- // ensure existing public subscriber emails are all sanitized
223
- $confirmed = $this->get_public();
224
- $unconfirmed = $this->get_public(0);
225
- $public_subscribers = array_merge((array)$confirmed, (array)$unconfirmed);
226
-
227
- foreach ( $public_subscribers as $email ) {
228
- $new_email = $this->sanitize_email($email);
229
- if ( $email !== $new_email ) {
230
- $wpdb->get_results($wpdb->prepare("UPDATE $this->public SET email=%s WHERE CAST(email as binary)=%s", $new_email, $email));
231
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  }
233
 
234
- // update postmeta field to a protected name, from version 8.5
235
- $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '_s2mail' WHERE meta_key = 's2mail'" );
236
 
237
  return;
238
  } // end upgrade()
@@ -299,7 +215,7 @@ class s2class {
299
  $headers = $this->headers();
300
  $message = preg_replace('|&[^a][^m][^p].{0,3};|', '', $message);
301
  $message = preg_replace('|&amp;|', '&', $message);
302
- $message = wordwrap(strip_tags($message), 80, "\n");
303
  $mailtext = apply_filters('s2_plain_email', $message);
304
  }
305
 
@@ -434,12 +350,17 @@ class s2class {
434
  if ( empty($link) ) { return; }
435
  if ( !empty($this->subscribe2_options['tracking']) ) {
436
  (strpos($link, '?') > 0) ? $delimiter .= '&' : $delimiter = '?';
437
- if ( strpos($this->subscribe2_options['tracking'], "{ID}") ) {
 
 
 
 
 
438
  $id = url_to_postid($link);
439
- $tracking = str_replace("{ID}", $id, $this->subscribe2_options['tracking']);
440
- return $link . $delimiter . $tracking;
441
  }
442
- return $link . $delimiter . $this->subscribe2_options['tracking'];
443
  } else {
444
  return $link;
445
  }
@@ -751,10 +672,10 @@ class s2class {
751
  function get_public($confirmed = 1) {
752
  global $wpdb;
753
  if ( 1 == $confirmed ) {
754
- if ( '' == $this->all_public ) {
755
- $this->all_public = $wpdb->get_col("SELECT email FROM $this->public WHERE active='1'");
756
  }
757
- return $this->all_public;
758
  } else {
759
  if ( '' == $this->all_unconfirmed ) {
760
  $this->all_unconfirmed = $wpdb->get_col("SELECT email FROM $this->public WHERE active='0'");
@@ -965,15 +886,27 @@ class s2class {
965
 
966
  if ( $this->s2_mu ) {
967
  if ( $return === 'ID' ) {
968
- return $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key='" . $wpdb->prefix . "capabilities'");
 
 
 
969
  } else {
970
- return $wpdb->get_col("SELECT a.user_email FROM $wpdb->users AS a INNER JOIN $wpdb->usermeta AS b ON a.ID = b.user_id WHERE b.meta_key='" . $wpdb->prefix . "capabilities'");
 
 
 
971
  }
972
  } else {
973
  if ( $return === 'ID' ) {
974
- return $wpdb->get_col("SELECT ID FROM $wpdb->users");
 
 
 
975
  } else {
976
- return $wpdb->get_col("SELECT user_email FROM $wpdb->users");
 
 
 
977
  }
978
  }
979
  } // end get_all_registered()
@@ -1549,15 +1482,17 @@ class s2class {
1549
  $message_posttime .= __('Posted on', 'subscribe2') . ": " . mysql2date($datetime, $post->post_date) . "\r\n";
1550
  if ( strstr($mailtext, "{TINYLINK}") ) {
1551
  $tinylink = file_get_contents('http://tinyurl.com/api-create.php?url=' . urlencode($this->get_tracking_link(get_permalink($post->ID))));
1552
- if ( $tinylink !== 'Error' && $tinylink !== false ) {
1553
- $tablelinks .= "\r\n" . $tinylink . "\r\n";
1554
- $message_post .= $tinylink . "\r\n";
1555
- $message_posttime .= $tinylink . "\r\n";
1556
- } else {
1557
- $tablelinks .= "\r\n" . $this->get_tracking_link(get_permalink($post->ID)) . "\r\n";
1558
- $message_post .= $this->get_tracking_link(get_permalink($post->ID)) . "\r\n";
1559
- $message_posttime .= $this->get_tracking_link(get_permalink($post->ID)) . "\r\n";
1560
- }
 
 
1561
  }
1562
 
1563
  if ( strstr($mailtext, "{CATS}") ) {
@@ -1575,7 +1510,7 @@ class s2class {
1575
  $message_post .= "\r\n";
1576
  $message_posttime .= "\r\n";
1577
 
1578
- $excerpt = $post->post_excerpt;
1579
  if ( '' == $excerpt ) {
1580
  // no excerpt, is there a <!--more--> ?
1581
  if ( false !== strpos($post->post_content, '<!--more-->') ) {
@@ -1697,7 +1632,7 @@ class s2class {
1697
  $this->public = $table_prefix . "subscribe2";
1698
  if ( $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $this->public)) != $this->public ) { $this->install(); }
1699
  //do we need to upgrade anything?
1700
- if ( is_array($this->subscribe2_options) && $this->subscribe2_options['version'] !== S2VERSION ) {
1701
  add_action('shutdown', array(&$this, 'upgrade'));
1702
  }
1703
 
@@ -1822,8 +1757,10 @@ class s2class {
1822
  /* ===== our variables ===== */
1823
  // cache variables
1824
  var $subscribe2_options = array();
1825
- var $all_public = '';
1826
  var $all_unconfirmed = '';
 
 
1827
  var $all_authors = '';
1828
  var $excluded_cats = '';
1829
  var $post_title = '';
@@ -1845,6 +1782,7 @@ class s2class {
1845
  var $action = '';
1846
  var $email = '';
1847
  var $message = '';
 
1848
  var $excerpt_length = 55;
1849
 
1850
  // some messages
78
  active tinyint(1) default 0,
79
  date DATE default '$date' NOT NULL,
80
  ip char(64) NOT NULL default 'admin',
81
+ time TIME DEFAULT '00:00:00' NOT NULL,
82
+ conf_date DATE,
83
+ conf_time TIME,
84
+ conf_ip char(64),
85
  PRIMARY KEY (id) )";
86
 
87
  // create the table, as needed
88
  maybe_create_table($this->public, $sql);
89
 
90
+ // create table entries for registered users
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  $users = $this->get_all_registered('ID');
92
  if ( !empty($users) ) {
93
  foreach ( $users as $user_ID ) {
94
  $check_format = get_user_meta($user_ID, $this->get_usermeta_keyname('s2_format'), true);
95
+ if ( empty($check_format) ) {
 
 
 
 
 
 
96
  // no prior settings so create them
97
  $this->register($user_ID);
98
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
  }
 
 
101
 
102
+ // safety check if options exist and if not create them
103
+ if ( !is_array($this->subscribe2_options) ) {
104
+ $this->reset();
 
 
 
 
105
  }
106
+ } // end install()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
 
108
+ /**
109
+ Upgrade function for the database and settings
110
+ */
111
+ function upgrade() {
112
+ require(S2PATH . "classes/class-s2-upgrade.php");
113
+ global $s2_upgrade;
114
+ $s2_upgrade = new s2class_upgrade;
 
 
 
 
 
 
 
 
 
115
 
116
+ // ensure that the options are in the database
117
+ require(S2PATH . "include/options.php");
118
+ // catch older versions that didn't use serialised options
119
+ if ( !isset($this->subscribe2_options['version']) ) {
120
+ $this->subscribe2_options['version'] = '2.0';
 
 
 
121
  }
122
 
123
+ // let's take the time to ensure that database entries exist for all registered users
124
+ $s2_upgrade->upgrade_core();
125
+ if ( version_compare($this->subscribe2_options['version'], '2.3', '<') ) {
126
+ $s2_upgrade->upgrade23();
127
+ }
128
+ if ( version_compare($this->subscribe2_options['version'], '5.1', '<') ) {
129
+ $s2_upgrade->upgrade51();
130
+ }
131
+ if ( version_compare($this->subscribe2_options['version'], '5.6', '<') ) {
132
+ $s2_upgrade->upgrade56();
133
+ }
134
+ if ( version_compare($this->subscribe2_options['version'], '5.9', '<') ) {
135
+ $s2_upgrade->upgrade59();
136
+ }
137
+ if ( version_compare($this->subscribe2_options['version'], '6.4', '<') ) {
138
+ $s2_upgrade->upgrade64();
139
+ }
140
+ if ( version_compare($this->subscribe2_options['version'], '7.0', '<') ) {
141
+ $s2_upgrade->upgrade70();
142
+ }
143
+ if ( version_compare($this->subscribe2_options['version'], '8.5', '<') ) {
144
+ $s2_upgrade->upgrade85();
145
+ }
146
+ if ( version_compare($this->subscribe2_options['version'], '8.6', '<') ) {
147
+ $s2_upgrade->upgrade86();
148
  }
149
 
150
+ $this->subscribe2_options['version'] = S2VERSION;
151
+ update_option('subscribe2_options', $this->subscribe2_options);
152
 
153
  return;
154
  } // end upgrade()
215
  $headers = $this->headers();
216
  $message = preg_replace('|&[^a][^m][^p].{0,3};|', '', $message);
217
  $message = preg_replace('|&amp;|', '&', $message);
218
+ $message = wordwrap(strip_tags($message), $this->word_wrap, "\n");
219
  $mailtext = apply_filters('s2_plain_email', $message);
220
  }
221
 
350
  if ( empty($link) ) { return; }
351
  if ( !empty($this->subscribe2_options['tracking']) ) {
352
  (strpos($link, '?') > 0) ? $delimiter .= '&' : $delimiter = '?';
353
+ $tracking = $this->subscribe2_options['tracking'];
354
+ if ( strpos($tracking, "{ID}") ) {
355
+ $id = url_to_postid($link);
356
+ $tracking = str_replace("{ID}", $id, $tracking);
357
+ }
358
+ if ( strpos($tracking, "{TITLE}") ) {
359
  $id = url_to_postid($link);
360
+ $title = urlencode(htmlentities(get_the_title($id),1));
361
+ $tracking = str_replace("{TITLE}", $title, $tracking);
362
  }
363
+ return $link . $delimiter . $tracking;
364
  } else {
365
  return $link;
366
  }
672
  function get_public($confirmed = 1) {
673
  global $wpdb;
674
  if ( 1 == $confirmed ) {
675
+ if ( '' == $this->all_confirmed ) {
676
+ $this->all_confirmed = $wpdb->get_col("SELECT email FROM $this->public WHERE active='1'");
677
  }
678
+ return $this->all_confirmed;
679
  } else {
680
  if ( '' == $this->all_unconfirmed ) {
681
  $this->all_unconfirmed = $wpdb->get_col("SELECT email FROM $this->public WHERE active='0'");
886
 
887
  if ( $this->s2_mu ) {
888
  if ( $return === 'ID' ) {
889
+ if ( $this->all_registered_id === '' ) {
890
+ $this->all_registered_id = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE meta_key='" . $wpdb->prefix . "capabilities'");
891
+ }
892
+ return $this->all_registered_id;
893
  } else {
894
+ if ( $this->all_registered_email === '' ) {
895
+ $this->all_registered_email = $wpdb->get_col("SELECT a.user_email FROM $wpdb->users AS a INNER JOIN $wpdb->usermeta AS b ON a.ID = b.user_id WHERE b.meta_key='" . $wpdb->prefix . "capabilities'");
896
+ }
897
+ return $this->all_registered_email;
898
  }
899
  } else {
900
  if ( $return === 'ID' ) {
901
+ if ( $this->all_registered_id === '' ) {
902
+ $this->all_registered_id = $wpdb->get_col("SELECT ID FROM $wpdb->users");
903
+ }
904
+ return $this->all_registered_id;
905
  } else {
906
+ if ( $this->all_registered_email === '' ) {
907
+ $this->all_registered_email = $wpdb->get_col("SELECT user_email FROM $wpdb->users");
908
+ }
909
+ return $this->all_registered_email;
910
  }
911
  }
912
  } // end get_all_registered()
1482
  $message_posttime .= __('Posted on', 'subscribe2') . ": " . mysql2date($datetime, $post->post_date) . "\r\n";
1483
  if ( strstr($mailtext, "{TINYLINK}") ) {
1484
  $tinylink = file_get_contents('http://tinyurl.com/api-create.php?url=' . urlencode($this->get_tracking_link(get_permalink($post->ID))));
1485
+ } else {
1486
+ $tinylink = false;
1487
+ }
1488
+ if ( strstr($mailtext, "{TINYLINK}") && $tinylink !== 'Error' && $tinylink !== false ) {
1489
+ $tablelinks .= "\r\n" . $tinylink . "\r\n";
1490
+ $message_post .= $tinylink . "\r\n";
1491
+ $message_posttime .= $tinylink . "\r\n";
1492
+ } else {
1493
+ $tablelinks .= "\r\n" . $this->get_tracking_link(get_permalink($post->ID)) . "\r\n";
1494
+ $message_post .= $this->get_tracking_link(get_permalink($post->ID)) . "\r\n";
1495
+ $message_posttime .= $this->get_tracking_link(get_permalink($post->ID)) . "\r\n";
1496
  }
1497
 
1498
  if ( strstr($mailtext, "{CATS}") ) {
1510
  $message_post .= "\r\n";
1511
  $message_posttime .= "\r\n";
1512
 
1513
+ ( !empty($post->post_excerpt) ) ? $excerpt = $post->post_excerpt : $excerpt = '';
1514
  if ( '' == $excerpt ) {
1515
  // no excerpt, is there a <!--more--> ?
1516
  if ( false !== strpos($post->post_content, '<!--more-->') ) {
1632
  $this->public = $table_prefix . "subscribe2";
1633
  if ( $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $this->public)) != $this->public ) { $this->install(); }
1634
  //do we need to upgrade anything?
1635
+ if ( $this->subscribe2_options === false || is_array($this->subscribe2_options) && $this->subscribe2_options['version'] !== S2VERSION ) {
1636
  add_action('shutdown', array(&$this, 'upgrade'));
1637
  }
1638
 
1757
  /* ===== our variables ===== */
1758
  // cache variables
1759
  var $subscribe2_options = array();
1760
+ var $all_confirmed = '';
1761
  var $all_unconfirmed = '';
1762
+ var $all_registered_id = '';
1763
+ var $all_registered_email = '';
1764
  var $all_authors = '';
1765
  var $excluded_cats = '';
1766
  var $post_title = '';
1782
  var $action = '';
1783
  var $email = '';
1784
  var $message = '';
1785
+ var $word_wrap = 80;
1786
  var $excerpt_length = 55;
1787
 
1788
  // some messages
classes/class-s2-frontend.php CHANGED
@@ -44,10 +44,8 @@ class s2_frontend extends s2class {
44
  }
45
 
46
  // allow remote setting of email in form
47
- if ( isset($_REQUEST['email']) ) {
48
- if ( is_email($_REQUEST['email']) ) {
49
- $value = $this->sanitize_email($_REQUEST['email']);
50
- }
51
  } elseif ( $nojs == 'true' ) {
52
  $value = '';
53
  } else {
44
  }
45
 
46
  // allow remote setting of email in form
47
+ if ( isset($_REQUEST['email']) && is_email($_REQUEST['email']) ) {
48
+ $value = $this->sanitize_email($_REQUEST['email']);
 
 
49
  } elseif ( $nojs == 'true' ) {
50
  $value = '';
51
  } else {
classes/class-s2-list-table.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Subscribe2_List_Table extends WP_List_Table {
3
+ function __construct(){
4
+ global $status, $page;
5
+
6
+ parent::__construct( array(
7
+ 'singular' => 'subscriber',
8
+ 'plural' => 'subscribers',
9
+ 'ajax' => false
10
+ ) );
11
+ }
12
+
13
+ function column_default($item, $column_name){
14
+ global $current_tab;
15
+ if ( $current_tab == 'registered' ) {
16
+ switch($column_name){
17
+ case 'email':
18
+ return $item[$column_name];
19
+ default:
20
+ return print_r($item,true);
21
+ }
22
+ } else {
23
+ switch($column_name){
24
+ case 'email':
25
+ case 'date':
26
+ return $item[$column_name];
27
+ default:
28
+ return print_r($item,true);
29
+ }
30
+ }
31
+ }
32
+
33
+ function column_email($item){
34
+ global $current_tab;
35
+ if ( $current_tab == 'registered' ) {
36
+ $actions = array('edit' => sprintf('<a href="?page=%s&amp;email=%s">Edit</a>', 's2', $item['email']));
37
+ return sprintf('%1$s %2$s', $item['email'], $this->row_actions($actions));
38
+ } else {
39
+ global $mysubscribe2;
40
+ if ( '0' === $mysubscribe2->is_public($item['email']) ) {
41
+ return sprintf('<span style="color:#FF0000">%1$s</span>', $item['email']);
42
+ } else {
43
+ return sprintf('%1$s', $item['email']);
44
+ }
45
+ }
46
+ }
47
+
48
+ function column_cb($item){
49
+ return sprintf('<input type="checkbox" name="%1$s[]" value="%2$s" />', $this->_args['singular'], $item['email']);
50
+ }
51
+
52
+ function get_columns(){
53
+ global $current_tab;
54
+ if ( $current_tab == 'registered' ) {
55
+ $columns = array('email' => 'Email');
56
+ } else {
57
+ $columns = array(
58
+ 'cb' => '<input type="checkbox" />',
59
+ 'email' => 'Email',
60
+ 'date' => 'Date'
61
+ );
62
+ }
63
+ return $columns;
64
+ }
65
+
66
+ function get_sortable_columns() {
67
+ global $current_tab;
68
+ if ( $current_tab == 'registered' ) {
69
+ $sortable_columns = array('email' => array('email', true));
70
+ } else {
71
+ $sortable_columns = array(
72
+ 'email' => array('email', true),
73
+ 'date' => array('date', false)
74
+ );
75
+ }
76
+ return $sortable_columns;
77
+ }
78
+
79
+ function get_bulk_actions() {
80
+ global $current_tab;
81
+ if ( $current_tab == 'registered' ) {
82
+ return array();
83
+ } else {
84
+ $actions = array(
85
+ 'delete' => __('Delete', 'subscribe2'),
86
+ 'toggle' => __('Toggle', 'subscribe2')
87
+ );
88
+ return $actions;
89
+ }
90
+ }
91
+
92
+ function prepare_items() {
93
+
94
+ global $mysubscribe2;
95
+ if ( is_int($mysubscribe2->subscribe2_options['entries']) ) {
96
+ $per_page = $mysubscribe2->subscribe2_options['entries'];
97
+ } else {
98
+ $per_page = 25;
99
+ }
100
+
101
+ $columns = $this->get_columns();
102
+ $hidden = array();
103
+ $sortable = $this->get_sortable_columns();
104
+ $this->_column_headers = array($columns, $hidden, $sortable);
105
+
106
+ global $mysubscribe2, $subscribers, $current_tab;
107
+ $data = array();
108
+ if ( $current_tab == 'public' ) {
109
+ foreach($subscribers as $email) {
110
+ $data[] = array('email' => $email, 'date' => $mysubscribe2->signup_date($email));
111
+ }
112
+ } else {
113
+ foreach($subscribers as $email) {
114
+ $data[] = array('email' => $email);
115
+ }
116
+ }
117
+
118
+ function usort_reorder($a,$b){
119
+ $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'email';
120
+ $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc';
121
+ $result = strcmp($a[$orderby], $b[$orderby]);
122
+ return ($order==='asc') ? $result : -$result;
123
+ }
124
+ usort($data, 'usort_reorder');
125
+
126
+ $current_page = $this->get_pagenum();
127
+ $total_items = count($data);
128
+ $data = array_slice($data,(($current_page-1)*$per_page),$per_page);
129
+ $this->items = $data;
130
+
131
+ $this->set_pagination_args( array(
132
+ 'total_items' => $total_items,
133
+ 'per_page' => $per_page,
134
+ 'total_pages' => ceil($total_items/$per_page)
135
+ ) );
136
+ }
137
+ }
138
+ ?>
classes/class-s2-upgrade.php ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class s2class_upgrade {
3
+ function upgrade_core() {
4
+ // let's take the time to double check data for registered users
5
+ global $mysubscribe2;
6
+ if ( version_compare($mysubscribe2->wp_release, '3.5', '<') ) {
7
+ global $wpdb;
8
+ $users = $wpdb->get_col($wpdb->prepare("SELECT ID from $wpdb->users WHERE ID NOT IN (SELECT user_id FROM $wpdb->usermeta WHERE meta_key=%s)", $mysubscribe2->get_usermeta_keyname('s2_format')));
9
+ if ( !empty($users) ) {
10
+ foreach ($users as $user_ID) {
11
+ $mysubscribe2->register($user_ID);
12
+ }
13
+ }
14
+ } else {
15
+ $args = array(
16
+ 'meta_query' => array(
17
+ array('key' => $mysubscribe2->get_usermeta_keyname('s2_format'), 'compare' => 'NOT EXISTS')
18
+ )
19
+ );
20
+
21
+ $user_query = new WP_User_Query( $args );
22
+ $users = $user_query->get_results();
23
+ if ( !empty($users) ) {
24
+ foreach ($users as $user) {
25
+ $mysubscribe2->register($user->ID);
26
+ }
27
+ }
28
+ }
29
+ } // end upgrade_core()
30
+
31
+ function upgrade23() {
32
+ global $mysubscribe2, $wpdb;
33
+
34
+ // include upgrade-functions for maybe_add_column;
35
+ if ( !function_exists('maybe_add_column') ) {
36
+ require_once(ABSPATH . 'wp-admin/install-helper.php');
37
+ }
38
+ $date = date('Y-m-d');
39
+ maybe_add_column($mysubscribe2->public, 'date', "ALTER TABLE $mysubscribe2->public ADD date DATE DEFAULT '$date' NOT NULL AFTER active");
40
+
41
+ // update the options table to serialized format
42
+ $old_options = $wpdb->get_col("SELECT option_name from $wpdb->options where option_name LIKE 's2%' AND option_name != 's2_future_posts'");
43
+
44
+ if ( !empty($old_options) ) {
45
+ foreach ( $old_options as $option ) {
46
+ $value = get_option($option);
47
+ $option_array = substr($option, 3);
48
+ $mysubscribe2->subscribe2_options[$option_array] = $value;
49
+ delete_option($option);
50
+ }
51
+ }
52
+ return;
53
+ } // end upgrade23()
54
+
55
+ function upgrade51() {
56
+ global $mysubscribe2;
57
+
58
+ // include upgrade-functions for maybe_add_column;
59
+ if ( !function_exists('maybe_add_column') ) {
60
+ require_once(ABSPATH . 'wp-admin/install-helper.php');
61
+ }
62
+ maybe_add_column($mysubscribe2->public, 'ip', "ALTER TABLE $mysubscribe2->public ADD ip char(64) DEFAULT 'admin' NOT NULL AFTER date");
63
+ } // end upgrade51()
64
+
65
+ function upgrade56(){
66
+ global $mysubscribe2;
67
+ // correct autoformat to upgrade from pre 5.6
68
+ if ( $mysubscribe2->subscribe2_options['autoformat'] == 'text' ) {
69
+ $mysubscribe2->subscribe2_options['autoformat'] = 'excerpt';
70
+ }
71
+ if ( $mysubscribe2->subscribe2_options['autoformat'] == 'full' ) {
72
+ $mysubscribe2->subscribe2_options['autoformat'] = 'post';
73
+ }
74
+ } // end upgrade56()
75
+
76
+ function upgrade59() {
77
+ global $mysubscribe2, $wpdb;
78
+ // ensure existing public subscriber emails are all sanitized
79
+ $confirmed = $mysubscribe2->get_public();
80
+ $unconfirmed = $mysubscribe2->get_public(0);
81
+ $public_subscribers = array_merge((array)$confirmed, (array)$unconfirmed);
82
+
83
+ foreach ( $public_subscribers as $email ) {
84
+ $new_email = $mysubscribe2->sanitize_email($email);
85
+ if ( $email !== $new_email ) {
86
+ $wpdb->get_results($wpdb->prepare("UPDATE $mysubscribe2->public SET email=%s WHERE CAST(email as binary)=%s", $new_email, $email));
87
+ }
88
+ }
89
+ return;
90
+ } // end upgrade59()
91
+
92
+ function upgrade64() {
93
+ global $mysubscribe2;
94
+ // change old CAPITALISED keywords to those in {PARENTHESES}; since version 6.4
95
+ $keywords = array('BLOGNAME', 'BLOGLINK', 'TITLE', 'POST', 'POSTTIME', 'TABLE', 'TABLELINKS', 'PERMALINK', 'TINYLINK', 'DATE', 'TIME', 'MYNAME', 'EMAIL', 'AUTHORNAME', 'LINK', 'CATS', 'TAGS', 'COUNT', 'ACTION');
96
+ $keyword = implode('|', $keywords);
97
+ $regex = '/(?<!\{)\b('.$keyword.')\b(?!\{)/xm';
98
+ $replace = '{\1}';
99
+ $mysubscribe2->subscribe2_options['mailtext'] = preg_replace($regex, $replace, $mysubscribe2->subscribe2_options['mailtext']);
100
+ $mysubscribe2->subscribe2_options['notification_subject'] = preg_replace($regex, $replace, $mysubscribe2->subscribe2_options['notification_subject']);
101
+ $mysubscribe2->subscribe2_options['confirm_email'] = preg_replace($regex, $replace, $mysubscribe2->subscribe2_options['confirm_email']);
102
+ $mysubscribe2->subscribe2_options['confirm_subject'] = preg_replace($regex, $replace, $mysubscribe2->subscribe2_options['confirm_subject']);
103
+ $mysubscribe2->subscribe2_options['remind_email'] = preg_replace($regex, $replace, $mysubscribe2->subscribe2_options['remind_email']);
104
+ $mysubscribe2->subscribe2_options['remind_subject'] = preg_replace($regex, $replace, $mysubscribe2->subscribe2_options['remind_subject']);
105
+
106
+ $users = $mysubscribe2->get_all_registered('ID');
107
+ foreach ( $users as $user_ID ) {
108
+ $check_format = get_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_format'), true);
109
+ // if user is already registered update format remove 's2_excerpt' field and update 's2_format'
110
+ if ( 'html' == $check_format ) {
111
+ delete_user_meta($user_ID, 's2_excerpt');
112
+ } elseif ( 'text' == $check_format ) {
113
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_format'), get_user_meta($user_ID, 's2_excerpt'));
114
+ delete_user_meta($user_ID, 's2_excerpt');
115
+ }
116
+ $subscribed = get_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_subscribed'), true);
117
+ if ( strstr($subscribed, '-1') ) {
118
+ // make sure we remove '-1' from any settings
119
+ $old_cats = explode(',', $subscribed);
120
+ $pos = array_search('-1', $old_cats);
121
+ unset($old_cats[$pos]);
122
+ $cats = implode(',', $old_cats);
123
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_subscribed'), $cats);
124
+ }
125
+ }
126
+
127
+ // upgrade old wpmu user meta data to new
128
+ if ( $mysubscribe2->s2_mu === true ) {
129
+ global $s2class_multisite, $wpdb;
130
+ $s2class_multisite->namechange_subscribe2_widget();
131
+ // loop through all users
132
+ foreach ( $users as $user_ID ) {
133
+ // get categories which the user is subscribed to (old ones)
134
+ $categories = get_user_meta($user_ID, 's2_subscribed', true);
135
+ $categories = explode(',', $categories);
136
+ $format = get_user_meta($user_ID, 's2_format', true);
137
+ $autosub = get_user_meta($user_ID, 's2_autosub', true);
138
+
139
+ // load blogs of user (only if we need them)
140
+ $blogs = array();
141
+ if ( count($categories) > 0 && !in_array('-1', $categories) ) {
142
+ $blogs = get_blogs_of_user($user_ID, true);
143
+ }
144
+
145
+ foreach ( $blogs as $blog ) {
146
+ switch_to_blog($blog->userblog_id);
147
+
148
+ $blog_categories = (array)$wpdb->get_col("SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = 'category'");
149
+ $subscribed_categories = array_intersect($categories, $blog_categories);
150
+ if ( !empty($subscribed_categories) ) {
151
+ foreach ( $subscribed_categories as $subscribed_category ) {
152
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_cat') . $subscribed_category, $subscribed_category);
153
+ }
154
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_subscribed'), implode(',', $subscribed_categories));
155
+ }
156
+ if ( !empty($format) ) {
157
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_format'), $format);
158
+ }
159
+ if ( !empty($autosub) ) {
160
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_autosub'), $autosub);
161
+ }
162
+ restore_current_blog();
163
+ }
164
+
165
+ // delete old user meta keys
166
+ delete_user_meta($user_ID, 's2_subscribed');
167
+ delete_user_meta($user_ID, 's2_format');
168
+ delete_user_meta($user_ID, 's2_autosub');
169
+ foreach ( $categories as $cat ) {
170
+ delete_user_meta($user_ID, 's2_cat' . $cat);
171
+ }
172
+ }
173
+ }
174
+ return;
175
+ } // end upgrade64()
176
+
177
+ function upgrade70() {
178
+ global $mysubscribe2;
179
+ $users = $mysubscribe2->get_all_registered('ID');
180
+ foreach ( $users as $user_ID ) {
181
+ $check_authors = get_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_authors'), true);
182
+ if ( empty($check_authors) ) {
183
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_authors'), '');
184
+ }
185
+ }
186
+ return;
187
+ } // end upgrade70()
188
+
189
+ function upgrade85() {
190
+ global $wpdb;
191
+
192
+ // include upgrade-functions for maybe_add_column;
193
+ if ( !function_exists('maybe_add_column') ) {
194
+ require_once(ABSPATH . 'wp-admin/install-helper.php');
195
+ }
196
+ maybe_add_column($mysubscribe2->public, 'time', "ALTER TABLE $mysubscribe2->public ADD time TIME DEFAULT '00:00:00' NOT NULL AFTER date");
197
+
198
+ // update postmeta field to a protected name, from version 8.5
199
+ $wpdb->query( "UPDATE $wpdb->postmeta SET meta_key = '_s2mail' WHERE meta_key = 's2mail'" );
200
+ return;
201
+ } // end upgrade85()
202
+
203
+ function upgrade86() {
204
+ global $mysubscribe2, $wpdb;
205
+
206
+ // include upgrade-functions for maybe_add_column;
207
+ if ( !function_exists('maybe_add_column') ) {
208
+ require_once(ABSPATH . 'wp-admin/install-helper.php');
209
+ }
210
+ maybe_add_column($mysubscribe2->public, 'conf_date', "ALTER TABLE $mysubscribe2->public ADD conf_date DATE AFTER ip");
211
+ maybe_add_column($mysubscribe2->public, 'conf_time', "ALTER TABLE $mysubscribe2->public ADD conf_time TIME AFTER conf_date");
212
+ maybe_add_column($mysubscribe2->public, 'conf_ip', "ALTER TABLE $mysubscribe2->public ADD conf_ip char(64) AFTER conf_time");
213
+
214
+ // remove unnecessary table data
215
+ $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key = 's2_cat'" );
216
+ if ( strpos($subscribed, ',') === 0 ) {
217
+ // make sure we remove leading ',' from this setting
218
+ $old_cats = explode(',', $subscribed);
219
+ unset($old_cats[0]);
220
+ $cats = implode(',', $old_cats);
221
+ update_user_meta($user_ID, $mysubscribe2->get_usermeta_keyname('s2_subscribed'), $cats);
222
+ }
223
+ return;
224
+ } // end upgrade86()
225
+ }
226
+ ?>
include/widget.php CHANGED
@@ -18,9 +18,10 @@ class S2_Form_widget extends WP_Widget {
18
  $div = empty($instance['div']) ? 'search' : $instance['div'];
19
  $widgetprecontent = empty($instance['widgetprecontent']) ? '' : $instance['widgetprecontent'];
20
  $widgetpostcontent = empty($instance['widgetpostcontent']) ? '' : $instance['widgetpostcontent'];
 
21
  $hidebutton = empty($instance['hidebutton']) ? 'none' : $instance['hidebutton'];
22
  $postto = empty($instance['postto']) ? '' : $instance['postto'];
23
- $textbox_size = empty($instance['size']) ? 20 : $instance['size'];
24
  $hide = '';
25
  if ( $hidebutton == 'subscribe' || $hidebutton == 'unsubscribe' ) {
26
  $hide = " hide=\"" . $hidebutton . "\"";
@@ -32,7 +33,11 @@ class S2_Form_widget extends WP_Widget {
32
  $postid = " id=\"" . $postto . "\"";
33
  }
34
  $size = " size=\"" . $textbox_size . "\"";
35
- $shortcode = "[subscribe2" . $hide . $postid . $size . "]";
 
 
 
 
36
  echo $before_widget;
37
  echo $before_title . $title . $after_title;
38
  echo "<div class=\"" . $div . "\">";
@@ -57,9 +62,10 @@ class S2_Form_widget extends WP_Widget {
57
  $instance['div'] = strip_tags(stripslashes($new_instance['div']));
58
  $instance['widgetprecontent'] = stripslashes($new_instance['widgetprecontent']);
59
  $instance['widgetpostcontent'] = stripslashes($new_instance['widgetpostcontent']);
 
60
  $instance['hidebutton'] = strip_tags(stripslashes($new_instance['hidebutton']));
61
  $instance['postto'] = stripslashes($new_instance['postto']);
62
- $instance['size'] = intval(stripslashes($new_instance['size']));
63
 
64
  return $instance;
65
  }
@@ -71,9 +77,9 @@ class S2_Form_widget extends WP_Widget {
71
  // set some defaults, getting any old options first
72
  $options = get_option('widget_subscribe2widget');
73
  if ( $options === false ) {
74
- $defaults = array('title' => 'Subscribe2', 'div' => 'search', 'widgetprecontent' => '', 'widgetpostcontent' => '', 'hidebutton' => 'none', 'postto' => '', 'size' => 20);
75
  } else {
76
- $defaults = array('title' => $options['title'], 'div' => $options['div'], 'widgetprecontent' => $options['widgetprecontent'], 'widgetpostcontent' => $options['widgetpostcontent'], 'hidebutton' => $options['hidebutton'], 'postto' => $options['postto'], 'size' => $options['size']);
77
  delete_option('widget_subscribe2widget');
78
  }
79
  // code to obtain old settings too
@@ -83,39 +89,44 @@ class S2_Form_widget extends WP_Widget {
83
  $div = htmlspecialchars($instance['div'], ENT_QUOTES);
84
  $widgetprecontent = htmlspecialchars($instance['widgetprecontent'], ENT_QUOTES);
85
  $widgetpostcontent = htmlspecialchars($instance['widgetpostcontent'], ENT_QUOTES);
 
86
  $hidebutton = htmlspecialchars($instance['hidebutton'], ENT_QUOTES);
87
  $postto = htmlspecialchars($instance['postto'], ENT_QUOTES);
88
- $size = htmlspecialchars($instance['size'], ENT_QUOTES);
89
 
90
  global $wpdb, $mysubscribe2;
91
  $sql = "SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish'";
92
 
93
  echo "<div>\r\n";
94
- echo "<p><label for=\"" . $this->get_field_name('title') . "\">" . __('Title', 'subscribe2') . ":\r\n";
95
  echo "<input class=\"widefat\" id=\"" . $this->get_field_id('title') . "\" name=\"" . $this->get_field_name('title') . "\" type=\"text\" value=\"" . $title . "\" /></label></p>\r\n";
96
- echo "<p><label for=\"" . $this->get_field_name('div') . "\">" . __('Div class name', 'subscribe2') . ":\r\n";
97
  echo "<input class=\"widefat\" id=\"" . $this->get_field_id('div') . "\" name=\"" . $this->get_field_name('div') . "\" type=\"text\" value=\"" . $div . "\" /></label></p>\r\n";
98
- echo "<p><label for=\"" . $this->get_field_name('widgetprecontent') . "\">" . __('Pre-Content', 'subscribe2') . ":\r\n";
99
- echo "<textarea class=\"widefat\" id=\"" . $this->get_field_name('widgetprecontent') . "\" name=\"" . $this->get_field_name('widgetprecontent') . "\" rows=\"2\" cols=\"25\">" . $widgetprecontent . "</textarea></label></p>\r\n";
100
- echo "<p><label for=\"" . $this->get_field_name('widgetpostcontent') . "\">" . __('Post-Content', 'subscribe2') . ":\r\n";
101
  echo "<textarea class=\"widefat\" id=\"" . $this->get_field_id('widgetpostcontent') . "\" name=\"" . $this->get_field_name('widgetpostcontent') . "\" rows=\"2\" cols=\"25\">" . $widgetpostcontent . "</textarea></label></p>\r\n";
102
- echo "<p><label for=\"" . $this->get_field_name('size') . "\">" . __('Text Box Size', 'subscribe2') . ":\r\n";
103
- echo "<input class=\"widefat\" id=\"" . $this->get_field_id('size') . "\" name=\"" . $this->get_field_name('size') . "\" type=\"text\" value=\"" . $size . "\" /></label></label></p>\r\n";
104
- echo "<p><label for=\"" . $this->get_field_name('hidebutton') . "\">" . __('Display options', 'subscribe2') . ":<br />\r\n";
105
- echo "<input name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"none\"". checked('none', $hidebutton, false) . "/> " . __('Show complete form', 'subscribe2') . "<br /><input name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"subscribe\"". checked('subscribe', $hidebutton, false) . "/> " . __('Hide Subscribe button', 'subscribe2') . "<br /><input name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"unsubscribe\"". checked('unsubscribe', $hidebutton, false) . "/> " . __('Hide Unsubscribe button', 'subscribe2');
 
 
106
  if ( '1' == $mysubscribe2->subscribe2_options['ajax'] ) {
107
- echo "<br /><input name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"link\"". checked('link', $hidebutton, false) . "/>" . __('Show as link', 'subscribe2');
108
  }
109
- echo "</label></p>\r\n";
110
- echo "<p><label for=\"" . $this->get_field_name('postto') . "\">" . __('Post form content to page', 'subscribe2') . ":\r\n";
111
  echo "<select class=\"widefat\" id=\"" . $this->get_field_id('postto') . "\" name=\"" . $this->get_field_name('postto') . "\">\r\n";
112
- global $mysubscribe2;
113
  echo "<option value=\"" . $mysubscribe2->subscribe2_options['s2page'] . "\">" . __('Use Subscribe2 Default', 'subscribe2') . "</option>\r\n";
114
  echo "<option value=\"home\"";
115
  if ( $postto === 'home' ) { echo " selected=\"selected\""; }
116
  echo ">" . __('Use Home Page', 'subscribe2') . "</option>\r\n";
117
  $mysubscribe2->pages_dropdown($postto);
118
  echo "</select></label></p>\r\n";
 
 
 
119
  echo "</div>\r\n";
120
  }
121
  } // End S2_Form_widget class
18
  $div = empty($instance['div']) ? 'search' : $instance['div'];
19
  $widgetprecontent = empty($instance['widgetprecontent']) ? '' : $instance['widgetprecontent'];
20
  $widgetpostcontent = empty($instance['widgetpostcontent']) ? '' : $instance['widgetpostcontent'];
21
+ $textbox_size = empty($instance['size']) ? 20 : $instance['size'];
22
  $hidebutton = empty($instance['hidebutton']) ? 'none' : $instance['hidebutton'];
23
  $postto = empty($instance['postto']) ? '' : $instance['postto'];
24
+ $js = empty($instance['js']) ? '' : $instance['js'];
25
  $hide = '';
26
  if ( $hidebutton == 'subscribe' || $hidebutton == 'unsubscribe' ) {
27
  $hide = " hide=\"" . $hidebutton . "\"";
33
  $postid = " id=\"" . $postto . "\"";
34
  }
35
  $size = " size=\"" . $textbox_size . "\"";
36
+ $nojs = '';
37
+ if ( $js ) {
38
+ $nojs = " nojs=\"true\"";
39
+ }
40
+ $shortcode = "[subscribe2" . $hide . $postid . $size . $nojs . "]";
41
  echo $before_widget;
42
  echo $before_title . $title . $after_title;
43
  echo "<div class=\"" . $div . "\">";
62
  $instance['div'] = strip_tags(stripslashes($new_instance['div']));
63
  $instance['widgetprecontent'] = stripslashes($new_instance['widgetprecontent']);
64
  $instance['widgetpostcontent'] = stripslashes($new_instance['widgetpostcontent']);
65
+ $instance['size'] = intval(stripslashes($new_instance['size']));
66
  $instance['hidebutton'] = strip_tags(stripslashes($new_instance['hidebutton']));
67
  $instance['postto'] = stripslashes($new_instance['postto']);
68
+ $instance['js'] = stripslashes($new_instance['js']);
69
 
70
  return $instance;
71
  }
77
  // set some defaults, getting any old options first
78
  $options = get_option('widget_subscribe2widget');
79
  if ( $options === false ) {
80
+ $defaults = array('title' => 'Subscribe2', 'div' => 'search', 'widgetprecontent' => '', 'widgetpostcontent' => '', 'size' => 20, 'hidebutton' => 'none', 'postto' => '', 'js' => '');
81
  } else {
82
+ $defaults = array('title' => $options['title'], 'div' => $options['div'], 'widgetprecontent' => $options['widgetprecontent'], 'widgetpostcontent' => $options['widgetpostcontent'], 'size' => $options['size'], 'hidebutton' => $options['hidebutton'], 'postto' => $options['postto'], 'js' => $options['js']);
83
  delete_option('widget_subscribe2widget');
84
  }
85
  // code to obtain old settings too
89
  $div = htmlspecialchars($instance['div'], ENT_QUOTES);
90
  $widgetprecontent = htmlspecialchars($instance['widgetprecontent'], ENT_QUOTES);
91
  $widgetpostcontent = htmlspecialchars($instance['widgetpostcontent'], ENT_QUOTES);
92
+ $size = htmlspecialchars($instance['size'], ENT_QUOTES);
93
  $hidebutton = htmlspecialchars($instance['hidebutton'], ENT_QUOTES);
94
  $postto = htmlspecialchars($instance['postto'], ENT_QUOTES);
95
+ $js = htmlspecialchars($instance['js'], ENT_QUOTES);
96
 
97
  global $wpdb, $mysubscribe2;
98
  $sql = "SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish'";
99
 
100
  echo "<div>\r\n";
101
+ echo "<p><label for=\"" . $this->get_field_id('title') . "\">" . __('Title', 'subscribe2') . ":\r\n";
102
  echo "<input class=\"widefat\" id=\"" . $this->get_field_id('title') . "\" name=\"" . $this->get_field_name('title') . "\" type=\"text\" value=\"" . $title . "\" /></label></p>\r\n";
103
+ echo "<p><label for=\"" . $this->get_field_id('div') . "\">" . __('Div class name', 'subscribe2') . ":\r\n";
104
  echo "<input class=\"widefat\" id=\"" . $this->get_field_id('div') . "\" name=\"" . $this->get_field_name('div') . "\" type=\"text\" value=\"" . $div . "\" /></label></p>\r\n";
105
+ echo "<p><label for=\"" . $this->get_field_id('widgetprecontent') . "\">" . __('Pre-Content', 'subscribe2') . ":\r\n";
106
+ echo "<textarea class=\"widefat\" id=\"" . $this->get_field_id('widgetprecontent') . "\" name=\"" . $this->get_field_name('widgetprecontent') . "\" rows=\"2\" cols=\"25\">" . $widgetprecontent . "</textarea></label></p>\r\n";
107
+ echo "<p><label for=\"" . $this->get_field_id('widgetpostcontent') . "\">" . __('Post-Content', 'subscribe2') . ":\r\n";
108
  echo "<textarea class=\"widefat\" id=\"" . $this->get_field_id('widgetpostcontent') . "\" name=\"" . $this->get_field_name('widgetpostcontent') . "\" rows=\"2\" cols=\"25\">" . $widgetpostcontent . "</textarea></label></p>\r\n";
109
+ echo "<p><label for=\"" . $this->get_field_id('size') . "\">" . __('Text Box Size', 'subscribe2') . ":\r\n";
110
+ echo "<input class=\"widefat\" id=\"" . $this->get_field_id('size') . "\" name=\"" . $this->get_field_name('size') . "\" type=\"text\" value=\"" . $size . "\" /></label></p>\r\n";
111
+ echo "<p>" . __('Display options', 'subscribe2') . ":<br />\r\n";
112
+ echo "<label for=\"" . $this->get_field_id('hidebutton') . "complete\"><input id=\"" . $this->get_field_id('hidebutton') . "complete\" name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"none\"". checked('none', $hidebutton, false) . "/> " . __('Show complete form', 'subscribe2') . "</label>\r\n";
113
+ echo "<br /><label for=\"" . $this->get_field_id('hidebutton') . "subscribe\"><input id=\"" . $this->get_field_id('hidebutton') . "subscribe\" name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"subscribe\"". checked('subscribe', $hidebutton, false) . "/> " . __('Hide Subscribe button', 'subscribe2') . "</label>\r\n";
114
+ echo "<br /><label for=\"" . $this->get_field_id('hidebutton') . "unsubscribe\"><input id=\"" . $this->get_field_id('hidebutton') . "unsubscribe\" name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"unsubscribe\"". checked('unsubscribe', $hidebutton, false) . "/> " . __('Hide Unsubscribe button', 'subscribe2') . "</label>\r\n";
115
  if ( '1' == $mysubscribe2->subscribe2_options['ajax'] ) {
116
+ echo "<br /><label for=\"" . $this->get_field_id('hidebutton') . "ajax\"><input id=\"" . $this->get_field_id('hidebutton') . "ajax\" name=\"" . $this->get_field_name('hidebutton') . "\" type=\"radio\" value=\"link\"". checked('link', $hidebutton, false) . "/>" . __('Show as link', 'subscribe2') . "</label>\r\n";
117
  }
118
+ echo "</p>\r\n";
119
+ echo "<p><label for=\"" . $this->get_field_id('postto') . "\">" . __('Post form content to page', 'subscribe2') . ":\r\n";
120
  echo "<select class=\"widefat\" id=\"" . $this->get_field_id('postto') . "\" name=\"" . $this->get_field_name('postto') . "\">\r\n";
 
121
  echo "<option value=\"" . $mysubscribe2->subscribe2_options['s2page'] . "\">" . __('Use Subscribe2 Default', 'subscribe2') . "</option>\r\n";
122
  echo "<option value=\"home\"";
123
  if ( $postto === 'home' ) { echo " selected=\"selected\""; }
124
  echo ">" . __('Use Home Page', 'subscribe2') . "</option>\r\n";
125
  $mysubscribe2->pages_dropdown($postto);
126
  echo "</select></label></p>\r\n";
127
+ echo "<p><label for=\"" . $this->get_field_id('js') . "\">" . __('Disable JavaScript', 'subscribe2') . ":\r\n";
128
+ echo "<input id=\"" . $this->get_field_id('js') . "\" name =\"" . $this->get_field_name('js') . "\" value=\"true\" type=\"checkbox\"" . checked('true', $js, false) . "/>";
129
+ echo "</label></p>\r\n";
130
  echo "</div>\r\n";
131
  }
132
  } // End S2_Form_widget class
subscribe2.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Subscribe2
4
  Plugin URI: http://subscribe2.wordpress.com
5
  Description: Notifies an email list when new entries are posted.
6
- Version: 8.6
7
  Author: Matthew Robinson
8
  Author URI: http://subscribe2.wordpress.com
9
  Licence: GPL3
@@ -43,7 +43,7 @@ if ( version_compare($GLOBALS['wp_version'], '3.1', '<') || !function_exists( 'a
43
 
44
  // our version number. Don't touch this or any line below
45
  // unless you know exactly what you are doing
46
- define( 'S2VERSION', '8.6' );
47
  define( 'S2PATH', trailingslashit(dirname(__FILE__)) );
48
  define( 'S2DIR', trailingslashit(dirname(plugin_basename(__FILE__))) );
49
  define( 'S2URL', plugin_dir_url(dirname(__FILE__)) . S2DIR );
@@ -54,14 +54,14 @@ if ( !in_array(ini_get('safe_mode'), $safe_mode) && ini_get('max_execution_time'
54
  @ini_set('max_execution_time', 300);
55
  }
56
 
57
- require_once(S2PATH . 'classes/class-s2-core.php');
58
  if ( is_admin() ) {
59
- require_once(S2PATH . 'classes/class-s2-admin.php');
60
  global $mysubscribe2;
61
  $mysubscribe2 = new s2_admin;
62
  $mysubscribe2->s2init();
63
  } else {
64
- require_once(S2PATH . 'classes/class-s2-frontend.php');
65
  global $mysubscribe2;
66
  $mysubscribe2 = new s2_frontend;
67
  $mysubscribe2->s2init();
3
  Plugin Name: Subscribe2
4
  Plugin URI: http://subscribe2.wordpress.com
5
  Description: Notifies an email list when new entries are posted.
6
+ Version: 8.7
7
  Author: Matthew Robinson
8
  Author URI: http://subscribe2.wordpress.com
9
  Licence: GPL3
43
 
44
  // our version number. Don't touch this or any line below
45
  // unless you know exactly what you are doing
46
+ define( 'S2VERSION', '8.7' );
47
  define( 'S2PATH', trailingslashit(dirname(__FILE__)) );
48
  define( 'S2DIR', trailingslashit(dirname(plugin_basename(__FILE__))) );
49
  define( 'S2URL', plugin_dir_url(dirname(__FILE__)) . S2DIR );
54
  @ini_set('max_execution_time', 300);
55
  }
56
 
57
+ require_once( S2PATH . 'classes/class-s2-core.php' );
58
  if ( is_admin() ) {
59
+ require_once( S2PATH . 'classes/class-s2-admin.php' );
60
  global $mysubscribe2;
61
  $mysubscribe2 = new s2_admin;
62
  $mysubscribe2->s2init();
63
  } else {
64
+ require_once( S2PATH . 'classes/class-s2-frontend.php' );
65
  global $mysubscribe2;
66
  $mysubscribe2 = new s2_frontend;
67
  $mysubscribe2->s2init();
subscribe2.pot CHANGED
@@ -8,7 +8,7 @@ msgid ""
8
  msgstr ""
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2012-12-13 19:53+0000\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,35 +17,35 @@ msgstr ""
17
  "Content-Type: text/plain; charset=CHARSET\n"
18
  "Content-Transfer-Encoding: 8bit\n"
19
 
20
- #: admin/send_email.php:41
21
  msgid "Preview message sent!"
22
  msgstr ""
23
 
24
- #: admin/send_email.php:46
25
  msgid "Your email was empty"
26
  msgstr ""
27
 
28
- #: admin/send_email.php:57
29
  msgid "Send an email to subscribers"
30
  msgstr ""
31
 
32
- #: admin/send_email.php:65
33
  msgid "A message from"
34
  msgstr ""
35
 
36
- #: admin/send_email.php:70
37
  msgid "Subject"
38
  msgstr ""
39
 
40
- #: admin/send_email.php:73
41
  msgid "Recipients:"
42
  msgstr ""
43
 
44
- #: admin/send_email.php:77
45
  msgid "Preview"
46
  msgstr ""
47
 
48
- #: admin/send_email.php:77
49
  msgid "Send"
50
  msgstr ""
51
 
@@ -132,8 +132,8 @@ msgstr ""
132
  #: admin/settings.php:183 admin/settings.php:189 admin/settings.php:203
133
  #: admin/settings.php:208 admin/settings.php:213 admin/settings.php:333
134
  #: admin/settings.php:338 admin/settings.php:352 admin/settings.php:359
135
- #: admin/settings.php:371 admin/settings.php:376 admin/subscribers.php:237
136
- #: admin/your_subscriptions.php:121 admin/your_subscriptions.php:161
137
  msgid "Yes"
138
  msgstr ""
139
 
@@ -141,8 +141,8 @@ msgstr ""
141
  #: admin/settings.php:210 admin/settings.php:215 admin/settings.php:330
142
  #: admin/settings.php:335 admin/settings.php:340 admin/settings.php:354
143
  #: admin/settings.php:361 admin/settings.php:368 admin/settings.php:373
144
- #: admin/settings.php:378 admin/subscribers.php:239
145
- #: admin/your_subscriptions.php:123 admin/your_subscriptions.php:165
146
  msgid "No"
147
  msgstr ""
148
 
@@ -194,7 +194,7 @@ msgstr ""
194
  #: admin/settings.php:231
195
  msgid ""
196
  "eg. utm_source=subscribe2&amp;utm_medium=email&amp;"
197
- "utm_campaign=postnotify&amp;utm_id={ID}"
198
  msgstr ""
199
 
200
  #: admin/settings.php:242
@@ -367,22 +367,22 @@ msgstr ""
367
  msgid "Auto-subscribe users to receive email as"
368
  msgstr ""
369
 
370
- #: admin/settings.php:343 admin/subscribers.php:227
371
  #: admin/your_subscriptions.php:110
372
  msgid "HTML - Full"
373
  msgstr ""
374
 
375
- #: admin/settings.php:345 admin/subscribers.php:228
376
  #: admin/your_subscriptions.php:112
377
  msgid "HTML - Excerpt"
378
  msgstr ""
379
 
380
- #: admin/settings.php:347 admin/subscribers.php:229
381
  #: admin/your_subscriptions.php:114
382
  msgid "Plain Text - Full"
383
  msgstr ""
384
 
385
- #: admin/settings.php:349 admin/subscribers.php:230
386
  #: admin/your_subscriptions.php:116
387
  msgid "Plain Text - Excerpt"
388
  msgstr ""
@@ -545,95 +545,87 @@ msgstr ""
545
  msgid "Digest Subscription updated for Selected Registered Users!"
546
  msgstr ""
547
 
548
- #: admin/subscribers.php:154 admin/subscribers.php:176
549
  msgid "Add/Remove Subscribers"
550
  msgstr ""
551
 
552
- #: admin/subscribers.php:155
553
  msgid "Enter addresses, one per line or comma-separated"
554
  msgstr ""
555
 
556
- #: admin/subscribers.php:158 admin/subscribers.php:222
557
- #: admin/your_subscriptions.php:259 classes/class-s2-core.php:27
558
  #: classes/class-s2-frontend.php:26
559
  msgid "Subscribe"
560
  msgstr ""
561
 
562
- #: admin/subscribers.php:159 admin/subscribers.php:223
563
- #: admin/your_subscriptions.php:238 classes/class-s2-frontend.php:25
564
  msgid "Unsubscribe"
565
  msgstr ""
566
 
567
- #: admin/subscribers.php:164 admin/subscribers.php:183
568
  msgid "Current Subscribers"
569
  msgstr ""
570
 
571
- #: admin/subscribers.php:177
572
  msgid "Add Registered User"
573
  msgstr ""
574
 
575
- #: admin/subscribers.php:192
576
  msgid "Filter"
577
  msgstr ""
578
 
579
- #: admin/subscribers.php:196
580
  msgid "Send Reminder Email"
581
  msgstr ""
582
 
583
- #: admin/subscribers.php:203
584
  msgid "Save Emails to CSV File"
585
  msgstr ""
586
 
587
- #: admin/subscribers.php:210
588
  msgid "Search"
589
  msgstr ""
590
 
591
- #: admin/subscribers.php:217
592
  msgid "Bulk Management"
593
  msgstr ""
594
 
595
- #: admin/subscribers.php:219 admin/subscribers.php:233
596
  msgid ""
597
  "Preferences for Registered Users selected in the filter above can be changed "
598
  "using this section."
599
  msgstr ""
600
 
601
- #: admin/subscribers.php:220 admin/subscribers.php:234
602
  msgid "Consider User Privacy as changes cannot be undone"
603
  msgstr ""
604
 
605
- #: admin/subscribers.php:221
606
  msgid "Action to perform"
607
  msgstr ""
608
 
609
- #: admin/subscribers.php:225
610
  msgid "Bulk Update Categories"
611
  msgstr ""
612
 
613
- #: admin/subscribers.php:226
614
  msgid "Send email as"
615
  msgstr ""
616
 
617
- #: admin/subscribers.php:231
618
  msgid "Bulk Update Format"
619
  msgstr ""
620
 
621
- #: admin/subscribers.php:235
622
  msgid "Subscribe Selected Users to recieve a periodic digest notification"
623
  msgstr ""
624
 
625
- #: admin/subscribers.php:240
626
  msgid "Bulk Update Digest Subscription"
627
  msgstr ""
628
 
629
- #: admin/subscribers.php:333
630
- msgid "Delete"
631
- msgstr ""
632
-
633
- #: admin/subscribers.php:334
634
- msgid "Toggle"
635
- msgstr ""
636
-
637
  #: admin/your_subscriptions.php:90
638
  msgid "Subscription preferences updated."
639
  msgstr ""
@@ -682,31 +674,31 @@ msgstr ""
682
  msgid "Subscribed Categories"
683
  msgstr ""
684
 
685
- #: admin/your_subscriptions.php:155
686
  msgid "Receive periodic summaries of new posts?"
687
  msgstr ""
688
 
689
- #: admin/your_subscriptions.php:171
690
  msgid "Do not send notifications for post made by these authors"
691
  msgstr ""
692
 
693
- #: admin/your_subscriptions.php:177
694
  msgid "Update Preferences"
695
  msgstr ""
696
 
697
- #: admin/your_subscriptions.php:227
698
  msgid "Subscribed Blogs"
699
  msgstr ""
700
 
701
- #: admin/your_subscriptions.php:232 admin/your_subscriptions.php:253
702
  msgid "Viewing Settings Now"
703
  msgstr ""
704
 
705
- #: admin/your_subscriptions.php:236 admin/your_subscriptions.php:257
706
  msgid "View Settings"
707
  msgstr ""
708
 
709
- #: admin/your_subscriptions.php:248
710
  msgid "Subscribe to new blogs"
711
  msgstr ""
712
 
@@ -921,116 +913,124 @@ msgstr ""
921
  msgid "Options reset!"
922
  msgstr ""
923
 
924
- #: classes/class-s2-core.php:655
925
  msgid "Plain Text Excerpt Preview"
926
  msgstr ""
927
 
928
- #: classes/class-s2-core.php:657
929
  msgid "Plain Text Full Preview"
930
  msgstr ""
931
 
932
- #: classes/class-s2-core.php:659
933
  msgid "HTML Excerpt Preview"
934
  msgstr ""
935
 
936
- #: classes/class-s2-core.php:661
937
  msgid "HTML Full Preview"
938
  msgstr ""
939
 
940
- #: classes/class-s2-core.php:1242
941
  msgid "Registered User"
942
  msgstr ""
943
 
944
- #: classes/class-s2-core.php:1247
945
  msgid "Confirmed Public Subscriber"
946
  msgstr ""
947
 
948
- #: classes/class-s2-core.php:1249
949
  msgid "Unconfirmed Public Subscriber"
950
  msgstr ""
951
 
952
- #: classes/class-s2-core.php:1286
953
  msgid "Check here to Subscribe to email notifications for new posts"
954
  msgstr ""
955
 
956
- #: classes/class-s2-core.php:1292
957
  msgid ""
958
  "By registering with this blog you are also agreeing to receive email "
959
  "notifications for new posts but you can unsubscribe at anytime"
960
  msgstr ""
961
 
962
- #: classes/class-s2-core.php:1318
963
  msgid "Check here to Subscribe to notifications for new posts"
964
  msgstr ""
965
 
966
- #: classes/class-s2-core.php:1408
967
  msgid "Weekly"
968
  msgstr ""
969
 
970
- #: classes/class-s2-core.php:1542 classes/class-s2-core.php:1543
971
  msgid "Author"
972
  msgstr ""
973
 
974
- #: classes/class-s2-core.php:1549
975
  msgid "Posted on"
976
  msgstr ""
977
 
978
- #: classes/class-s2-core.php:1565 classes/class-s2-core.php:1566
979
  msgid "Posted in"
980
  msgstr ""
981
 
982
- #: classes/class-s2-core.php:1571 classes/class-s2-core.php:1572
983
  msgid "Tagged as"
984
  msgstr ""
985
 
986
- #: classes/class-s2-core.php:1638
987
  msgid "Digest Email"
988
  msgstr ""
989
 
990
- #: classes/class-s2-core.php:1648
991
  msgid "Digest Preview"
992
  msgstr ""
993
 
994
- #: classes/class-s2-frontend.php:54
995
  msgid "Enter email address..."
996
  msgstr ""
997
 
998
- #: classes/class-s2-frontend.php:59 classes/class-s2-frontend.php:61
999
  msgid "Your email:"
1000
  msgstr ""
1001
 
1002
- #: classes/class-s2-frontend.php:169
1003
  msgid "Subscription Confirmation"
1004
  msgstr ""
1005
 
1006
- #: classes/class-s2-frontend.php:171
1007
  msgid "Unsubscription Confirmation"
1008
  msgstr ""
1009
 
1010
- #: classes/class-s2-frontend.php:210
1011
  msgid "New Subscription"
1012
  msgstr ""
1013
 
1014
- #: classes/class-s2-frontend.php:212
1015
  msgid "subscribed to email notifications!"
1016
  msgstr ""
1017
 
1018
- #: classes/class-s2-frontend.php:233
1019
  msgid "New Unsubscription"
1020
  msgstr ""
1021
 
1022
- #: classes/class-s2-frontend.php:235
1023
  msgid "unsubscribed from email notifications!"
1024
  msgstr ""
1025
 
1026
- #: classes/class-s2-frontend.php:261
1027
  msgid "[Un]Subscribe to Posts"
1028
  msgstr ""
1029
 
1030
- #: classes/class-s2-frontend.php:291 classes/class-s2-frontend.php:293
1031
  msgid "Subscribe to this blog"
1032
  msgstr ""
1033
 
 
 
 
 
 
 
 
 
1034
  #: include/counterwidget.php:7
1035
  msgid "Subscriber Counter widget for Subscribe2"
1036
  msgstr ""
@@ -1132,62 +1132,66 @@ msgstr ""
1132
  msgid "Subscribe2 Widget"
1133
  msgstr ""
1134
 
1135
- #: include/widget.php:28
1136
  msgid "(Un)Subscribe to Posts"
1137
  msgstr ""
1138
 
1139
- #: include/widget.php:94
1140
  msgid "Title"
1141
  msgstr ""
1142
 
1143
- #: include/widget.php:96
1144
  msgid "Div class name"
1145
  msgstr ""
1146
 
1147
- #: include/widget.php:98
1148
  msgid "Pre-Content"
1149
  msgstr ""
1150
 
1151
- #: include/widget.php:100
1152
  msgid "Post-Content"
1153
  msgstr ""
1154
 
1155
- #: include/widget.php:102
1156
  msgid "Text Box Size"
1157
  msgstr ""
1158
 
1159
- #: include/widget.php:104
1160
  msgid "Display options"
1161
  msgstr ""
1162
 
1163
- #: include/widget.php:105
1164
  msgid "Show complete form"
1165
  msgstr ""
1166
 
1167
- #: include/widget.php:105
1168
  msgid "Hide Subscribe button"
1169
  msgstr ""
1170
 
1171
- #: include/widget.php:105
1172
  msgid "Hide Unsubscribe button"
1173
  msgstr ""
1174
 
1175
- #: include/widget.php:107
1176
  msgid "Show as link"
1177
  msgstr ""
1178
 
1179
- #: include/widget.php:110
1180
  msgid "Post form content to page"
1181
  msgstr ""
1182
 
1183
- #: include/widget.php:113
1184
  msgid "Use Subscribe2 Default"
1185
  msgstr ""
1186
 
1187
- #: include/widget.php:116
1188
  msgid "Use Home Page"
1189
  msgstr ""
1190
 
 
 
 
 
1191
  #: subscribe2.php:39
1192
  #, php-format
1193
  msgid ""
8
  msgstr ""
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
  "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2013-01-15 17:59+0000\n"
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
17
  "Content-Type: text/plain; charset=CHARSET\n"
18
  "Content-Transfer-Encoding: 8bit\n"
19
 
20
+ #: admin/send_email.php:46
21
  msgid "Preview message sent!"
22
  msgstr ""
23
 
24
+ #: admin/send_email.php:51
25
  msgid "Your email was empty"
26
  msgstr ""
27
 
28
+ #: admin/send_email.php:62
29
  msgid "Send an email to subscribers"
30
  msgstr ""
31
 
32
+ #: admin/send_email.php:70
33
  msgid "A message from"
34
  msgstr ""
35
 
36
+ #: admin/send_email.php:75
37
  msgid "Subject"
38
  msgstr ""
39
 
40
+ #: admin/send_email.php:78
41
  msgid "Recipients:"
42
  msgstr ""
43
 
44
+ #: admin/send_email.php:82
45
  msgid "Preview"
46
  msgstr ""
47
 
48
+ #: admin/send_email.php:82
49
  msgid "Send"
50
  msgstr ""
51
 
132
  #: admin/settings.php:183 admin/settings.php:189 admin/settings.php:203
133
  #: admin/settings.php:208 admin/settings.php:213 admin/settings.php:333
134
  #: admin/settings.php:338 admin/settings.php:352 admin/settings.php:359
135
+ #: admin/settings.php:371 admin/settings.php:376 admin/subscribers.php:241
136
+ #: admin/your_subscriptions.php:121 admin/your_subscriptions.php:162
137
  msgid "Yes"
138
  msgstr ""
139
 
141
  #: admin/settings.php:210 admin/settings.php:215 admin/settings.php:330
142
  #: admin/settings.php:335 admin/settings.php:340 admin/settings.php:354
143
  #: admin/settings.php:361 admin/settings.php:368 admin/settings.php:373
144
+ #: admin/settings.php:378 admin/subscribers.php:243
145
+ #: admin/your_subscriptions.php:123 admin/your_subscriptions.php:166
146
  msgid "No"
147
  msgstr ""
148
 
194
  #: admin/settings.php:231
195
  msgid ""
196
  "eg. utm_source=subscribe2&amp;utm_medium=email&amp;"
197
+ "utm_campaign=postnotify&amp;utm_id={ID}&amp;utm_title={TITLE}"
198
  msgstr ""
199
 
200
  #: admin/settings.php:242
367
  msgid "Auto-subscribe users to receive email as"
368
  msgstr ""
369
 
370
+ #: admin/settings.php:343 admin/subscribers.php:231
371
  #: admin/your_subscriptions.php:110
372
  msgid "HTML - Full"
373
  msgstr ""
374
 
375
+ #: admin/settings.php:345 admin/subscribers.php:232
376
  #: admin/your_subscriptions.php:112
377
  msgid "HTML - Excerpt"
378
  msgstr ""
379
 
380
+ #: admin/settings.php:347 admin/subscribers.php:233
381
  #: admin/your_subscriptions.php:114
382
  msgid "Plain Text - Full"
383
  msgstr ""
384
 
385
+ #: admin/settings.php:349 admin/subscribers.php:234
386
  #: admin/your_subscriptions.php:116
387
  msgid "Plain Text - Excerpt"
388
  msgstr ""
545
  msgid "Digest Subscription updated for Selected Registered Users!"
546
  msgstr ""
547
 
548
+ #: admin/subscribers.php:158 admin/subscribers.php:180
549
  msgid "Add/Remove Subscribers"
550
  msgstr ""
551
 
552
+ #: admin/subscribers.php:159
553
  msgid "Enter addresses, one per line or comma-separated"
554
  msgstr ""
555
 
556
+ #: admin/subscribers.php:162 admin/subscribers.php:226
557
+ #: admin/your_subscriptions.php:260 classes/class-s2-core.php:27
558
  #: classes/class-s2-frontend.php:26
559
  msgid "Subscribe"
560
  msgstr ""
561
 
562
+ #: admin/subscribers.php:163 admin/subscribers.php:227
563
+ #: admin/your_subscriptions.php:239 classes/class-s2-frontend.php:25
564
  msgid "Unsubscribe"
565
  msgstr ""
566
 
567
+ #: admin/subscribers.php:168 admin/subscribers.php:187
568
  msgid "Current Subscribers"
569
  msgstr ""
570
 
571
+ #: admin/subscribers.php:181
572
  msgid "Add Registered User"
573
  msgstr ""
574
 
575
+ #: admin/subscribers.php:196
576
  msgid "Filter"
577
  msgstr ""
578
 
579
+ #: admin/subscribers.php:200
580
  msgid "Send Reminder Email"
581
  msgstr ""
582
 
583
+ #: admin/subscribers.php:207
584
  msgid "Save Emails to CSV File"
585
  msgstr ""
586
 
587
+ #: admin/subscribers.php:214
588
  msgid "Search"
589
  msgstr ""
590
 
591
+ #: admin/subscribers.php:221
592
  msgid "Bulk Management"
593
  msgstr ""
594
 
595
+ #: admin/subscribers.php:223 admin/subscribers.php:237
596
  msgid ""
597
  "Preferences for Registered Users selected in the filter above can be changed "
598
  "using this section."
599
  msgstr ""
600
 
601
+ #: admin/subscribers.php:224 admin/subscribers.php:238
602
  msgid "Consider User Privacy as changes cannot be undone"
603
  msgstr ""
604
 
605
+ #: admin/subscribers.php:225
606
  msgid "Action to perform"
607
  msgstr ""
608
 
609
+ #: admin/subscribers.php:229
610
  msgid "Bulk Update Categories"
611
  msgstr ""
612
 
613
+ #: admin/subscribers.php:230
614
  msgid "Send email as"
615
  msgstr ""
616
 
617
+ #: admin/subscribers.php:235
618
  msgid "Bulk Update Format"
619
  msgstr ""
620
 
621
+ #: admin/subscribers.php:239
622
  msgid "Subscribe Selected Users to recieve a periodic digest notification"
623
  msgstr ""
624
 
625
+ #: admin/subscribers.php:244
626
  msgid "Bulk Update Digest Subscription"
627
  msgstr ""
628
 
 
 
 
 
 
 
 
 
629
  #: admin/your_subscriptions.php:90
630
  msgid "Subscription preferences updated."
631
  msgstr ""
674
  msgid "Subscribed Categories"
675
  msgstr ""
676
 
677
+ #: admin/your_subscriptions.php:156
678
  msgid "Receive periodic summaries of new posts?"
679
  msgstr ""
680
 
681
+ #: admin/your_subscriptions.php:172
682
  msgid "Do not send notifications for post made by these authors"
683
  msgstr ""
684
 
685
+ #: admin/your_subscriptions.php:178
686
  msgid "Update Preferences"
687
  msgstr ""
688
 
689
+ #: admin/your_subscriptions.php:228
690
  msgid "Subscribed Blogs"
691
  msgstr ""
692
 
693
+ #: admin/your_subscriptions.php:233 admin/your_subscriptions.php:254
694
  msgid "Viewing Settings Now"
695
  msgstr ""
696
 
697
+ #: admin/your_subscriptions.php:237 admin/your_subscriptions.php:258
698
  msgid "View Settings"
699
  msgstr ""
700
 
701
+ #: admin/your_subscriptions.php:249
702
  msgid "Subscribe to new blogs"
703
  msgstr ""
704
 
913
  msgid "Options reset!"
914
  msgstr ""
915
 
916
+ #: classes/class-s2-core.php:576
917
  msgid "Plain Text Excerpt Preview"
918
  msgstr ""
919
 
920
+ #: classes/class-s2-core.php:578
921
  msgid "Plain Text Full Preview"
922
  msgstr ""
923
 
924
+ #: classes/class-s2-core.php:580
925
  msgid "HTML Excerpt Preview"
926
  msgstr ""
927
 
928
+ #: classes/class-s2-core.php:582
929
  msgid "HTML Full Preview"
930
  msgstr ""
931
 
932
+ #: classes/class-s2-core.php:1175
933
  msgid "Registered User"
934
  msgstr ""
935
 
936
+ #: classes/class-s2-core.php:1180
937
  msgid "Confirmed Public Subscriber"
938
  msgstr ""
939
 
940
+ #: classes/class-s2-core.php:1182
941
  msgid "Unconfirmed Public Subscriber"
942
  msgstr ""
943
 
944
+ #: classes/class-s2-core.php:1219
945
  msgid "Check here to Subscribe to email notifications for new posts"
946
  msgstr ""
947
 
948
+ #: classes/class-s2-core.php:1225
949
  msgid ""
950
  "By registering with this blog you are also agreeing to receive email "
951
  "notifications for new posts but you can unsubscribe at anytime"
952
  msgstr ""
953
 
954
+ #: classes/class-s2-core.php:1251
955
  msgid "Check here to Subscribe to notifications for new posts"
956
  msgstr ""
957
 
958
+ #: classes/class-s2-core.php:1341
959
  msgid "Weekly"
960
  msgstr ""
961
 
962
+ #: classes/class-s2-core.php:1475 classes/class-s2-core.php:1476
963
  msgid "Author"
964
  msgstr ""
965
 
966
+ #: classes/class-s2-core.php:1482
967
  msgid "Posted on"
968
  msgstr ""
969
 
970
+ #: classes/class-s2-core.php:1500 classes/class-s2-core.php:1501
971
  msgid "Posted in"
972
  msgstr ""
973
 
974
+ #: classes/class-s2-core.php:1506 classes/class-s2-core.php:1507
975
  msgid "Tagged as"
976
  msgstr ""
977
 
978
+ #: classes/class-s2-core.php:1573
979
  msgid "Digest Email"
980
  msgstr ""
981
 
982
+ #: classes/class-s2-core.php:1583
983
  msgid "Digest Preview"
984
  msgstr ""
985
 
986
+ #: classes/class-s2-frontend.php:52
987
  msgid "Enter email address..."
988
  msgstr ""
989
 
990
+ #: classes/class-s2-frontend.php:57 classes/class-s2-frontend.php:59
991
  msgid "Your email:"
992
  msgstr ""
993
 
994
+ #: classes/class-s2-frontend.php:167
995
  msgid "Subscription Confirmation"
996
  msgstr ""
997
 
998
+ #: classes/class-s2-frontend.php:169
999
  msgid "Unsubscription Confirmation"
1000
  msgstr ""
1001
 
1002
+ #: classes/class-s2-frontend.php:208
1003
  msgid "New Subscription"
1004
  msgstr ""
1005
 
1006
+ #: classes/class-s2-frontend.php:210
1007
  msgid "subscribed to email notifications!"
1008
  msgstr ""
1009
 
1010
+ #: classes/class-s2-frontend.php:231
1011
  msgid "New Unsubscription"
1012
  msgstr ""
1013
 
1014
+ #: classes/class-s2-frontend.php:233
1015
  msgid "unsubscribed from email notifications!"
1016
  msgstr ""
1017
 
1018
+ #: classes/class-s2-frontend.php:259
1019
  msgid "[Un]Subscribe to Posts"
1020
  msgstr ""
1021
 
1022
+ #: classes/class-s2-frontend.php:289 classes/class-s2-frontend.php:291
1023
  msgid "Subscribe to this blog"
1024
  msgstr ""
1025
 
1026
+ #: classes/class-s2-list-table.php:85
1027
+ msgid "Delete"
1028
+ msgstr ""
1029
+
1030
+ #: classes/class-s2-list-table.php:86
1031
+ msgid "Toggle"
1032
+ msgstr ""
1033
+
1034
  #: include/counterwidget.php:7
1035
  msgid "Subscriber Counter widget for Subscribe2"
1036
  msgstr ""
1132
  msgid "Subscribe2 Widget"
1133
  msgstr ""
1134
 
1135
+ #: include/widget.php:29
1136
  msgid "(Un)Subscribe to Posts"
1137
  msgstr ""
1138
 
1139
+ #: include/widget.php:101
1140
  msgid "Title"
1141
  msgstr ""
1142
 
1143
+ #: include/widget.php:103
1144
  msgid "Div class name"
1145
  msgstr ""
1146
 
1147
+ #: include/widget.php:105
1148
  msgid "Pre-Content"
1149
  msgstr ""
1150
 
1151
+ #: include/widget.php:107
1152
  msgid "Post-Content"
1153
  msgstr ""
1154
 
1155
+ #: include/widget.php:109
1156
  msgid "Text Box Size"
1157
  msgstr ""
1158
 
1159
+ #: include/widget.php:111
1160
  msgid "Display options"
1161
  msgstr ""
1162
 
1163
+ #: include/widget.php:112
1164
  msgid "Show complete form"
1165
  msgstr ""
1166
 
1167
+ #: include/widget.php:113
1168
  msgid "Hide Subscribe button"
1169
  msgstr ""
1170
 
1171
+ #: include/widget.php:114
1172
  msgid "Hide Unsubscribe button"
1173
  msgstr ""
1174
 
1175
+ #: include/widget.php:116
1176
  msgid "Show as link"
1177
  msgstr ""
1178
 
1179
+ #: include/widget.php:119
1180
  msgid "Post form content to page"
1181
  msgstr ""
1182
 
1183
+ #: include/widget.php:121
1184
  msgid "Use Subscribe2 Default"
1185
  msgstr ""
1186
 
1187
+ #: include/widget.php:124
1188
  msgid "Use Home Page"
1189
  msgstr ""
1190
 
1191
+ #: include/widget.php:127
1192
+ msgid "Disable JavaScript"
1193
+ msgstr ""
1194
+
1195
  #: subscribe2.php:39
1196
  #, php-format
1197
  msgid ""