Newsletter - Version 6.4.6

Version Description

  • Added hook to register custom theme folders
  • Removed old themes
  • Removed packages theme folder scan (so locally added themes are not loaded, see site documentation if you need to create a custom theme)
  • Polylang support on default theme
  • Better error check on addon list retrieval
  • Added language on targeting options
  • Fixed user list pagination
  • Subject replacement for online preview
Download this release

Release Info

Developer satollo
Plugin Icon 128x128 Newsletter
Version 6.4.6
Comparing to
See all releases

Code changes from version 6.4.4 to 6.4.6

admin.css CHANGED
@@ -1247,6 +1247,13 @@ table.widefat {
1247
  font-family: "Circular Std", sans-serif;
1248
  }
1249
 
 
 
 
 
 
 
 
1250
  #tnp-body #tabs .ui-widget-header {
1251
  background: #28313C;
1252
  border: 0;
@@ -1262,23 +1269,27 @@ table.widefat {
1262
  color: #444;
1263
  }
1264
 
 
 
 
 
1265
  #tnp-body .ui-tabs .ui-tabs-nav li a {
1266
  font-size: 14px;
1267
  }
1268
 
1269
- #tnp-body .ui-tabs {
1270
  border-color: #28313C;
1271
  background-color: #28313C;
1272
  border: 0;
1273
  }
1274
 
1275
- #tnp-body .ui-tabs .ui-tabs-nav {
1276
  margin: 0;
1277
  padding: .2em .2em 0 0;
1278
  background-color: #f2f2f2;
1279
  }
1280
 
1281
- #tnp-body .ui-tabs .ui-tabs-panel {
1282
  padding: 1em 0;
1283
  background-color: #f2f2f2;
1284
  margin: 0;
@@ -1291,8 +1302,9 @@ table.widefat {
1291
  font-family: "Circular Std", sans-serif;
1292
  }
1293
 
 
1294
  #tnp-body .ui-widget-content {
1295
- background: #fff !important;
1296
  }
1297
 
1298
  #tnp-body .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
1247
  font-family: "Circular Std", sans-serif;
1248
  }
1249
 
1250
+ #tnp-body #tabs {
1251
+ background-color: transparent;
1252
+ border: 0!important;
1253
+ padding: 0;
1254
+ margin: 0;
1255
+ }
1256
+
1257
  #tnp-body #tabs .ui-widget-header {
1258
  background: #28313C;
1259
  border: 0;
1269
  color: #444;
1270
  }
1271
 
1272
+ #tnp-body .ui-tabs .ui-tabs-nav {
1273
+ padding: 0;
1274
+ }
1275
+
1276
  #tnp-body .ui-tabs .ui-tabs-nav li a {
1277
  font-size: 14px;
1278
  }
1279
 
1280
+ #tnp-body #tabs .ui-tabs {
1281
  border-color: #28313C;
1282
  background-color: #28313C;
1283
  border: 0;
1284
  }
1285
 
1286
+ #tnp-body #tabs .ui-tabs .ui-tabs-nav {
1287
  margin: 0;
1288
  padding: .2em .2em 0 0;
1289
  background-color: #f2f2f2;
1290
  }
1291
 
1292
+ #tnp-body #tabs .ui-tabs .ui-tabs-panel {
1293
  padding: 1em 0;
1294
  background-color: #f2f2f2;
1295
  margin: 0;
1302
  font-family: "Circular Std", sans-serif;
1303
  }
1304
 
1305
+
1306
  #tnp-body .ui-widget-content {
1307
+ background: #fff;
1308
  }
1309
 
1310
  #tnp-body .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
changelog.txt ADDED
@@ -0,0 +1,1673 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ = 5.9.5 =
3
+
4
+ * Changed edit and delete icons on composer to avoid conflict with FontAwesome JS
5
+
6
+ = 5.9.4 =
7
+
8
+ * Added multi subscriber deletion
9
+
10
+ = 5.9.3 =
11
+
12
+ * Fixed multi newsletter deletion warning
13
+ * Fixed privacy checkbox
14
+ * Fixed a link on header warning
15
+
16
+ = 5.9.2 =
17
+
18
+ * Fixed a debug notice on subscription page
19
+
20
+ = 5.9.1 =
21
+
22
+ * Fixed language support on some shortcodes
23
+
24
+ = 5.9.0 =
25
+
26
+ * Fixes on privacy setting with multilanguage plugins
27
+ * Added per language statistics on subscribers statistics panel
28
+ * Added language set action on subscribers maintenance panel
29
+ * Separated the pre confirm and post confirm tokens
30
+
31
+ = 5.8.9 =
32
+
33
+ * Global constant to block the media resizing
34
+ * Resized thumbnails folder changed to the uploads folder (newsletter/thumbnails subfolder)
35
+ * Fall back on first post gallery image if the featured image is missing
36
+ * Patch to block third party plugins visual editor injection in out pages
37
+ * Fix media selector button on visual composer
38
+
39
+ = 5.8.8 =
40
+
41
+ * Fixed multilanguage text for newsletter page
42
+ * Fixed a profile panel debug notice
43
+
44
+ = 5.8.7 =
45
+
46
+ * Tags replacement even on template for messages
47
+ * Fixed profile page labels translation
48
+ * Added text and title color on hero block
49
+ * Added text color on preheader block
50
+ * Fixed giphy options panel
51
+
52
+
53
+ = 5.8.6 =
54
+
55
+ * Improved geolocation support
56
+ * Improved composer image block
57
+
58
+ = 5.8.5 =
59
+
60
+ * Reverted back to select2 3.x
61
+ * Added last_ip field for better geolocation
62
+ * Changed the thumbnails folder from wp-content to wp-content/uploads
63
+ * Added a more uniform internal mailer management
64
+ * Improved the mail test on status panel
65
+
66
+ = 5.8.4 =
67
+
68
+ * Fixed export error
69
+
70
+ = 5.8.3 =
71
+
72
+ * Fixed a debug notice with PHP 7.2
73
+ * Status, SMTP and main settings limited to the administrators
74
+ * Fixed buttons overlapping on composer text block
75
+ * Support for the advanced import addons
76
+
77
+ = 5.8.2 =
78
+
79
+ * Fixed shortcode check on dedicated page
80
+
81
+ = 5.8.1 =
82
+
83
+ * Delivery expected time indicator on status panel
84
+ * Fixed notice on email token missing
85
+ * Addons installation availability on status panel
86
+ * Option to remove the dedicated page check
87
+
88
+ = 5.8.0 =
89
+
90
+ * Addons manager compatibility
91
+
92
+ = 5.7.9 =
93
+
94
+ * Fixes on add-ons panel
95
+
96
+ = 5.7.8 =
97
+
98
+ * Support for the [Add on Manager](https://www.thenewsletterplugin.com/documentation/how-to-install-the-addons-manager)
99
+
100
+ = 5.7.7 =
101
+
102
+ * TinyMCE library fix
103
+
104
+ = 5.7.6 =
105
+
106
+ * Included third party's js libraries
107
+
108
+ = 5.7.5 =
109
+
110
+ * Init hook priority fix for who uses alternative wp cron
111
+
112
+ = 5.7.4 =
113
+
114
+ * Support for first and last name from wp users integration extension
115
+ * CSS fix for few themes
116
+
117
+ = 5.7.3 =
118
+
119
+ * Fixed block padding warning
120
+ * Fixed lists display on import panel
121
+ * Fixed lists display on targeting panel when in multilanguage mode
122
+
123
+ = 5.7.2 =
124
+
125
+ * Improvements on posts block
126
+ * New hero block layout
127
+ * Transaltepress extension compatibility pack
128
+
129
+ = 5.7.1 =
130
+
131
+ * Improvements on posts block
132
+
133
+ = 5.7.0 =
134
+
135
+ * Cancellation error message fix
136
+
137
+ = 5.6.9 =
138
+
139
+ * Improved separator block for Outlook compatibility
140
+ * Fixed "read more" button on posts block
141
+ * Fixed lists on notification email
142
+
143
+ = 5.6.8 =
144
+
145
+ * Removed debug notices
146
+
147
+ = 5.6.7 =
148
+
149
+ * Fixed multilanguage support for service messages template
150
+
151
+ = 5.6.6 =
152
+
153
+ * Fixed unsubscription two-steps process message
154
+
155
+ = 5.6.5 =
156
+
157
+ * Fixed email validation message
158
+
159
+ = 5.6.4 =
160
+
161
+ * Fixed reactivation message display
162
+
163
+ = 5.6.3 =
164
+
165
+ * Removed unused files
166
+ * Fixed few links with permalink disabled and WMPL language as parameter
167
+ * Fixed the minimal form with WPML
168
+
169
+ = 5.6.2 =
170
+
171
+ * readme.txt improvements
172
+ * Fixed subscribe URL for blogs with WPML and permalinks disabled
173
+
174
+ = 5.6.1 =
175
+
176
+ * Fix debug notice on profile URL when no privacy page is set on WP
177
+ * Fixed export list filter
178
+
179
+ = 5.6.0 =
180
+
181
+ * Lists pre-assignment by language (no more need to customize the newsletter shortcode or duplicate the widgets)
182
+ * Improved Polylang support (still not fully tested)
183
+
184
+ = 5.5.9 =
185
+
186
+ * Fixed a possible debug notice on subscription without a dedicated page configured
187
+ * Fixed minimal widget with WPML language selector without permalink
188
+
189
+ = 5.5.8 =
190
+
191
+ * Fixed multilanguage text on profile page
192
+ * Fix the image resizer for small images
193
+ * Page message url based on subscriber language if available
194
+
195
+ = 5.5.7 =
196
+
197
+ * Fixed the unsubscription multilanguage messages using even the user language
198
+ * Fixed the goodby message
199
+
200
+ = 5.5.5 =
201
+
202
+ * Minimal form fix with WPML
203
+ * Privacy label fix with WPML
204
+
205
+ = 5.5.4 =
206
+
207
+ * WPML integration. [Read our integration page](https://www.thenewsletterplugin.com/documentation/multilanguage)
208
+
209
+ = 5.5.3 =
210
+
211
+ * Updated tinyMCE for Edge compatibility
212
+ * Debug mode notification
213
+ * Fix debug notice on profile page
214
+
215
+ = 5.5.2 =
216
+
217
+ * Fixed the multiple dedicated page creation on Welcome screen
218
+
219
+ = 5.5.1 =
220
+
221
+ * Fixed few debug notices
222
+ * API unsubscription messages fix
223
+
224
+ = 5.5.0 =
225
+
226
+ * Added IP storage control
227
+ * Fixed a warning and a debug notice
228
+ * Aggregated warnings on admin side
229
+
230
+ = 5.4.9 =
231
+
232
+ * Lists management in APIs
233
+ * Code cleanup
234
+ * New subscribers data export controls
235
+ * New global check and notice if the dedicated page is misconfigured
236
+ * Fix privacy note display on profile page even without a privacy url set
237
+
238
+ = 5.4.8 =
239
+
240
+ * Fixed the (duplicated) style.css reference
241
+
242
+ = 5.4.7 =
243
+
244
+ * Fixed pre-assigned lists
245
+
246
+ = 5.4.6 =
247
+
248
+ * Fixed few debug notices
249
+ * Added more translatable texts
250
+ * Improved performances
251
+ * Profile saving used as confirmation
252
+ * Fixed the captcha layout and style
253
+ * Fix initialization default messages template on first install
254
+
255
+ = 5.4.5 =
256
+
257
+ * Fixed tested up version value in readme.txt
258
+ * Added support for the WP privacy url
259
+ * Added initialization values for company info on first installation
260
+ * Fixed few debug notices
261
+ * Added button in lists panel to dissociate the list from every subscriber (list clean up)
262
+ * Fix of messages on profile editing panel
263
+
264
+ = 5.4.4 =
265
+
266
+ * Fixed warning on default option init
267
+
268
+ = 5.4.3 =
269
+
270
+ * Improved the profile editing page and the email change check with activation id in double opt-in mode
271
+ * New profile editing panel configuration
272
+ * Privacy notice optionally even on profile panel
273
+ * New list change logging with source
274
+ * Removed old tabled-layout on profile editing page
275
+ * Clean up procedure for statistics and logs tables
276
+ * Removed old widget layout
277
+ * New options on list management panel
278
+ * Forced lists option removed from the subscription panel
279
+ * Dedicated page moved to main settings panel
280
+ * Tracking default value on main settings panel
281
+ * Removed old translations
282
+ * Added default option files
283
+ * Service message template no more on PHP file, the configurable template must be used
284
+ * Reactivation after cancellation feature
285
+ * Revised and simplified all texts for easy translation by the community
286
+ * The messages alternative page (/extensions/newsletter/subscription/page.php) is now deprecated and will be removed
287
+ * New [cancellation documentation page published](/extensions/newsletter/subscription/page.php)
288
+ * Integrated SMTP is now deprecated (soon will be replaced with a **free extension**)
289
+ * {home_url} tag is now deprecated, use {blog_url} instead
290
+ * Introduced tags {company_name} and {company_address} replaced by info in the company info configuration
291
+ * Default template for messages has been improved with company contacts
292
+ * Repeated subscriptions management
293
+ * Generally improved the performances with caching and code clean up
294
+ * General CSS moved to the main settings panel
295
+ * Option to disable the default CSS
296
+ * Profile export fix
297
+
298
+ = 5.4.2 =
299
+
300
+ * SVN Deleted files fix
301
+
302
+ = 5.4.1 =
303
+
304
+ * Fixed debug notice in the standard widget
305
+ * Gender label fix
306
+ * Fixed the global variable conflict on widget (rare case)
307
+ * CSS fix on widget list field
308
+
309
+ = 5.4.0 =
310
+
311
+ * Fix lists as dropdown in the widget
312
+
313
+ = 5.3.9 =
314
+
315
+ * Version number fix
316
+
317
+ = 5.3.8 =
318
+
319
+ * Fixed failed insert on ip null
320
+
321
+ = 5.3.7 =
322
+
323
+ * Fixed the newsletter deletion with clean up of log tables
324
+
325
+ = 5.3.6 =
326
+
327
+ * Fixed composer block background editing
328
+ * Fixed API functions
329
+ * Minor fixes
330
+
331
+ = 5.3.5 =
332
+
333
+ * Fixed error notice on profile.php
334
+
335
+ = 5.3.4 =
336
+
337
+ * GDPR ready
338
+ * Maintenance option to add all subscriber without a list to a specified list
339
+ * Dismissed the tabled subscription form
340
+ * Fixed privacy checkbox label for field shortcode
341
+ * Logs of lists change
342
+ * Last activity tracking
343
+ * Retargeting/deletion of inactive subscribers
344
+ * Privacy checkbox without the checkbox (option)
345
+ * Personal data export
346
+ * Improved subscriber deletion with cleanup of log tables
347
+
348
+ = 5.3.3 =
349
+
350
+ * Added GIPHY composer block
351
+ * Added raw HTML composer block
352
+ * API: Newsletters and subscribers lists
353
+
354
+ = 5.3.2 =
355
+
356
+ * Security panel reorganized
357
+ * Added Akismet spam check
358
+
359
+ = 5.3.1 =
360
+
361
+ * Name and last name check for spam
362
+ * 404 responses on error condition
363
+ * jQuery fix
364
+ * Email cleanup on admin edit panel
365
+ * Name check for spam on subscription
366
+
367
+ = 5.3.0 =
368
+
369
+ * CAPTCHA system
370
+ * IP black list
371
+ * Email address black list
372
+
373
+ = 5.2.8 =
374
+
375
+ * Redirect fix
376
+
377
+ = 5.2.7 =
378
+
379
+ * Improved block layout
380
+ * Added filter on profile url
381
+ * Removed old obsolete query
382
+ * Improved the antibot
383
+ * Antiflood configurable to 30 minutes
384
+
385
+ = 5.2.6 =
386
+
387
+ * Fixed url attributes on privacy field shortcode
388
+ * Fixed few debug notices
389
+ * (NEW) PHP API for coders (and companion REST API with the free Newsletter API extension)
390
+
391
+ = 5.2.4 =
392
+
393
+ * readme.txt fix
394
+ * Improved extension version checking
395
+ * Changed the database timeout check on status panel
396
+ * Added support for pixel perfect thumb nails of media library images
397
+
398
+ = 5.2.3 =
399
+
400
+ * Newsletter subject ideas popup
401
+
402
+ = 5.2.2 =
403
+
404
+ * Removed create_function from widgets (compatibility PHP 7.2)
405
+ * Fixed the list exclusion condition
406
+ * Added [options to Newsletter shortcodes](https://www.thenewsletterplugin.com/documentation/subscription-form-shortcodes) to show the lists as dropdown
407
+
408
+ = 5.2.1 =
409
+
410
+ * Commit fix
411
+
412
+ = 5.2.0 =
413
+
414
+ * Fixed email_url tag (broken to fix Automated in previous version)
415
+
416
+ = 5.1.9 =
417
+
418
+ * Fixed debug notice on test email from Automated Extension
419
+
420
+ = 5.1.8 =
421
+
422
+ * Newsletter page creation fix
423
+
424
+ = 5.1.7 =
425
+
426
+ * NEW! Welcome wizard
427
+
428
+ = 5.1.6 =
429
+
430
+ * Fix list selection on first save
431
+
432
+ = 5.1.5 =
433
+
434
+ * Re-confirmation is now allows for unsubscribed and bounced
435
+ * Fixed to minimal widget and minimal css
436
+ * Fixed the approx. subscriber count on newsletter creation (was showing encoded data)
437
+
438
+ = 5.1.4 =
439
+
440
+ * Fixed notices on email edit panel
441
+ * Added microdata to the call to action block
442
+ * Added filter on name field while sending. [See this post](https://www.thenewsletterplugin.com/?p=54292)
443
+ * Improved the online [viewability rules](https://www.thenewsletterplugin.com/documentation/newsletters-module#view-online)
444
+ * Fixed theme editor bad behavior
445
+ * Fixed the min size of thumbnails on default theme
446
+ * Removed references to font awesome where not used
447
+
448
+ = 5.1.3 =
449
+
450
+ * Fixed newsletter duplication which was loosing the editor type
451
+ * Fixed gender saving on targeting
452
+
453
+ = 5.1.2 =
454
+
455
+ * Improved the speed report on status panel
456
+ * Removed the obsolete diagnostic panel
457
+ * Removed obsolete code
458
+ * Removed the locked content menu entry (please install the free content lock extension)
459
+ * Fixed validation call on widget minimal
460
+ * Added more translatable strings
461
+ * Fixed the editor CSS when a theme has its own
462
+ * Confirmation is now activation
463
+ * CSS clean up
464
+
465
+ = 5.1.1 =
466
+
467
+ * Fix on email check
468
+
469
+ = 5.1.0 =
470
+
471
+ * "ncu" parameter can be used for alternative welcome page as well, not only confirmation, when single opt in is selected
472
+ * Removed the old "email alternative" to create custom subscription messages templates (has no effects)
473
+ * Added the antiflood system
474
+
475
+ = 5.0.9 =
476
+
477
+ * Removed wp users integration and locked content now available as FREE optional extensions (to make the plugin smaller)
478
+ * Removed obsolete code loading old-style extensions
479
+
480
+ = 5.0.8 =
481
+
482
+ * Improved select 2 layout
483
+ * Support for conditional comments in the editor
484
+
485
+ = 5.0.7 =
486
+
487
+ * Fix a database table field size
488
+
489
+ = 5.0.6 =
490
+
491
+ * Improved performance with new db indexes
492
+ * Fixed a bug in social URLs
493
+ * Home URL check on status panel
494
+ * Fixed a not removable notice
495
+
496
+ = 5.0.5 =
497
+
498
+ * Fixed an administration notice removal
499
+
500
+ = 5.0.4 =
501
+
502
+ * Fix media selector for blog without absolute URLs
503
+ * Notice to install the wp users integration
504
+ * Added workaround for XSS protection in chrome on custom form when they contains JS code
505
+
506
+ = 5.0.3 =
507
+
508
+ * Added {email_url_encoded} tag
509
+ * Changed https to http for compatibility with old servers
510
+
511
+ = 5.0.2 =
512
+
513
+ * Fixed a notice on theme selection panel
514
+ * Fixed a block initialization error notice for woocommerce
515
+ * Improved the emoji support on newsletter subject
516
+
517
+ = 5.0.1 =
518
+
519
+ * Fixed and improved the heading block
520
+ * Fixed the can spam block (not showing default texts is not configured)
521
+ * Fixed the footer block changed the unsubscribe url to the profile url
522
+
523
+ = 5.0.0 =
524
+
525
+ * Added wp user identifier on subscriber details panel
526
+ * Fixed a notice on subscriber list panel
527
+ * Added the Auto-Submit header
528
+ * Added the X-Auto-Response-Suppress header
529
+ * Added microdata markup for native confirmation button on email clients
530
+ * Fixed url checking with ending spaces
531
+ * Fix for sites with forced relative content url
532
+ * Fix debug notices on vimeo theme
533
+
534
+ = 4.9.9 =
535
+
536
+ * Fixed action URL for hand written forms in the subscription text
537
+ * Fixed rewrite not working with specific html formatting
538
+ * Change the composer text editor height
539
+
540
+ = 4.9.8 =
541
+
542
+ * Fixed the antibot option
543
+
544
+ = 4.9.7 =
545
+
546
+ * Fixed setup script throwing a debug notice
547
+ * Changed chart library
548
+
549
+ = 4.9.6 =
550
+
551
+ * Extension version check improved
552
+ * HTML5 form source code on profile panel
553
+
554
+ = 4.9.5 =
555
+
556
+ * Fixed table creation with dbDelta
557
+
558
+ = 4.9.4 =
559
+
560
+ * Admin css fix
561
+ * Log fix
562
+
563
+ = 4.9.3 =
564
+
565
+ * Replacing fix
566
+
567
+ = 4.9.2 =
568
+
569
+ * Style fix
570
+
571
+ = 4.9.1 =
572
+
573
+ * Small code fixes
574
+ * Chart js conflict fix
575
+ * Curl SSL version on status panel
576
+
577
+ = 4.9.0 =
578
+
579
+ * Fixed logo editing when not set in the Company Info
580
+ * Fix few layout problem on the user statistics panel
581
+ * Composer layout improvements
582
+ * Added select2 support
583
+ * Fixed syntax error on status panel auto call check
584
+ * Fixed notice for theme without the text part
585
+ * Added chart.js from cdn
586
+ * Improved stats collection and aggregation
587
+
588
+ = 4.8.9 =
589
+
590
+ * Package problems on WP.org
591
+
592
+ = 4.8.8 =
593
+
594
+ * WP Users Integration and Locked Content Extensions readiness
595
+ * Improved the SSL management on admin side
596
+ * Fix privacy checkbox layout when the link is used
597
+ * Standard form CSS improvements
598
+
599
+ = 4.8.7 =
600
+
601
+ * Empty excerpt fix
602
+ * Fixed the list of blocks not appearing on few PHP installations
603
+ * Fixed the composer editor
604
+
605
+ = 4.8.6 =
606
+
607
+ * Warnings on SMTP panel when configured but not yet activated
608
+ * Warning management in controls
609
+ * Font family selector in the editor
610
+ * Font size selector in the editor
611
+ * Removed embedded tiny
612
+ * Removed embedded ace
613
+ * HTTPS on external links
614
+ * Fixed tag replacement on subject on test confirmation and welcome emails
615
+
616
+ = 4.8.5 =
617
+
618
+ * Added HTML editor plugin to tiny
619
+ * Fixed a couple of debug notices on widget
620
+
621
+ = 4.8.4 =
622
+
623
+ * Fixed posts block background editing
624
+ * Composer js improvements
625
+ * Fixed a couple of debug notices
626
+ * CSS fix
627
+
628
+ = 4.8.3 =
629
+
630
+ * Fixed debug notices on widgets
631
+ * Fixed Vimeo icon on social block
632
+ * Fixed javascript in the editor
633
+
634
+ = 4.8.2 =
635
+
636
+ * Changed few labels
637
+ * CSS fix on admin panels
638
+
639
+ = 4.8.1 =
640
+
641
+ * Lists selection on widget
642
+ * CSS fix for submit button on widget
643
+ * Fixed the status panel on action call check
644
+ * Fixed the dedicated page creation
645
+ * New editor for service messages' template with desktop and mobile preview
646
+ * New raw html editor for newsletter with with desktop and mobile preview
647
+ * Improved status panel scheduler check
648
+ * Removed the old tiny mce 3
649
+
650
+ = 4.8.0 =
651
+
652
+ * New media selection on newsletter editor with size picker
653
+ * Fixed the required attribute on profile form
654
+ * Support for Analytics extension
655
+
656
+ = 4.7.9 =
657
+
658
+ * Removed the TGMPA library
659
+ * Some CSS fixes
660
+ * Fix few debug notices
661
+
662
+ = 4.7.8 =
663
+
664
+ * Old TGMPA library compatibility
665
+
666
+ = 4.7.7 =
667
+
668
+ * New extensions panel
669
+ * Minor fixes and enhancements
670
+ * New media selection on newsletter edit panel
671
+ * Removed enqueuing of no more used scripts
672
+ * Fixed the subscriber count on targeting panel
673
+
674
+ = 4.7.6 =
675
+
676
+ * New status panel
677
+
678
+ = 4.7.5 =
679
+
680
+ * Removed references to old css
681
+ * Fixed the relative URLs problem in the composer
682
+
683
+ = 4.7.4 =
684
+
685
+ * Improved widget CSS
686
+ * Added Instagram to social icons
687
+ * Little style improvements
688
+
689
+ = 4.7.3 =
690
+
691
+ * Added custom CSS field to customize the forms appearance
692
+ * Added codemirror for CSS edit
693
+ * Added plugin version to style link
694
+ * Added plugin version to script link
695
+ * Corrected a tag in newsletter widget minimal
696
+ * Added line height on form fields
697
+ * Changed CSS class prefixes to tnp
698
+ * Fixed a divide by zero on diagnostic panel
699
+ * Improved the collection of emails sending speed data
700
+ * Fixed a bug when adding a new subscriber from the admin panel
701
+
702
+ = 4.7.2 =
703
+
704
+ * Fixed a debug notice
705
+
706
+ = 4.7.1 =
707
+
708
+ * Fixed missing files in the package
709
+
710
+ = 4.7.0 =
711
+
712
+ * Added the selection for the Newsletter messages dedicated page
713
+ * New forms CSS and validator
714
+ * New widget for a minimal form
715
+ * Use shortcode attribute "layout" to revert to old style table forms, using layout=table
716
+ * Added reset button for diagnostic scheduler statistics
717
+
718
+ = 4.6.8 =
719
+
720
+ * Fixed the image browser/upload URL error in themes
721
+
722
+ = 4.6.7 =
723
+
724
+ * Fixed blank page without a newsletter dedicated page
725
+
726
+ = 4.6.6 =
727
+
728
+ * Fixed the blocks reload
729
+
730
+ = 4.6.5 =
731
+
732
+ * Fixed the style stripped when switching back and forth betwenn the visual and raw editor (from version 4.6.4)
733
+
734
+ = 4.6.4 =
735
+
736
+ * Fixed the profile link in admin panels
737
+ * Fixed the composer editor
738
+ * Cleanup of old code
739
+ * Force the composer editor to keep the absolute urls
740
+
741
+ = 4.6.3 =
742
+
743
+ * Fixed the profile save with new action url
744
+
745
+ = 4.6.2 =
746
+
747
+ * Fixed the import option "override status" not working in update mode
748
+ * Fixed the missing http when the couldflare plugin is installed (!)
749
+ * Improved controls and security on open tracking link
750
+ * Added few new diagnostic parameters
751
+
752
+ = 4.6.1 =
753
+
754
+ * Fixed a security issue on admin side only exploitable by logged in admins
755
+
756
+ = 4.6.0 =
757
+
758
+ * Fixed debug notices on composer post blocks
759
+ * Improved image styles on composer hero block
760
+ * Added support for WP_Error in the logger
761
+ * Improved the license checking
762
+
763
+ = 4.5.9 =
764
+
765
+ * Fixed a PHP syntax error on composer panel
766
+
767
+ = 4.5.8 =
768
+
769
+ * Edit image alt text in the composer
770
+ * Fixed german characters problem on visual composer
771
+ * Added new data to diagnostic panel
772
+ * Change the export to be more compatible with specific blog installations
773
+ * Added translations to export panel
774
+
775
+ = 4.5.7 =
776
+
777
+ * Fixed the total sent email in dashboard
778
+ * Fixed the total sent number on newsletter list when an already sent newsletter is edited
779
+ * Removed the save button on sent newsletter
780
+ * Code cleanup
781
+ * Service message for stats panel of draft newsletters
782
+
783
+ = 4.5.6 =
784
+
785
+ * New unified themes and composer selection screen
786
+ * Fixed the WP integration panel (incompatibility with WP 4.5.3)
787
+ * Removed few notices
788
+ * More warning fix
789
+ * Fix "isHTML" error
790
+ * jQuery conflict fix
791
+ * Escape fix
792
+ * Warning fix
793
+ * Fixed the mime header
794
+
795
+ = 4.5.0 =
796
+
797
+ * New responsive email Drag & Drop composer, see [the guide](https://www.thenewsletterplugin.com/plugins/newsletter/composer).
798
+
799
+ = 4.2.4 =
800
+
801
+ * Fixed the notices display in Newsletter admin pages
802
+ * Administrative emails sent now with the Newsletter engine
803
+ * New {email_id} and {email_subject} placeholders
804
+
805
+ = 4.2.3 =
806
+
807
+ * Improvements in database error management
808
+ * Added hook for Reports Extension
809
+
810
+ = 4.2.2 =
811
+
812
+ * The lock feature is disabled for editors and administrators
813
+ * Fixed the newsletter sent table
814
+
815
+ = 4.2.1 =
816
+
817
+ * Fixed the progress indicator on newsletter list
818
+
819
+ = 4.2.0 =
820
+
821
+ * New statistics dashboard
822
+ * Newsletter Reports 4 support
823
+
824
+ = 4.1.3 =
825
+
826
+ * Fixed the notice dismiss not working on every page
827
+ * Fixed debug notice on WP 4.5
828
+ * Added unverified SSL connection option on SMTP panel
829
+
830
+ = 4.1.2 =
831
+
832
+ * Minor security fix (on admin side with admin access)
833
+
834
+ = 4.2.0 =
835
+
836
+ * Added support for Reports Extension 4
837
+ * Improved license check
838
+
839
+ = 4.1.1 =
840
+
841
+ * Added compatibility with SMTP plugins (Newsletter now sends with wp_mail if not otherwise configured)
842
+ * Small CSS fixes
843
+
844
+ = 4.1.0 =
845
+
846
+ * Fix statistics link in the dashboard newsletter list
847
+
848
+ = 4.0.9 =
849
+
850
+ * Updated jQuery UI
851
+ * Updated compatibility notice
852
+ * Fixed tabs on subscriber stats panel
853
+ * Fixed documentation on profile page
854
+
855
+ = 4.0.8 =
856
+
857
+ * Dashboard style fix for WordPress >= 4.4
858
+ * Minor improvements
859
+
860
+ = 4.0.7 =
861
+
862
+ * New check to prevent not correct message template settings to block emails
863
+ * Improved confirmation email test
864
+ * Added welcome email test
865
+ * Resubscription in single opt-in does not send the confirmation email anymore
866
+ * Fixed second subscription with Facebook extension
867
+
868
+ = 4.0.6 =
869
+
870
+ * Fixed forced lists on subscription panel
871
+ * Fixed few i18n tags
872
+ * Fixed background color on theme selector
873
+
874
+ = 4.0.5 =
875
+
876
+ * Fixed an error on content lock
877
+ * Fixed CSS for extensions
878
+ * Fixed few debug notices
879
+ * Improved the content lock user recognition
880
+ * Subscriber search by list
881
+
882
+ = 4.0.4 =
883
+
884
+ * Fixed and improved the email template for service messages
885
+
886
+ = 4.0.3 =
887
+
888
+ * Fixed the welcome email enable/disable setting
889
+
890
+ = 4.0.2 =
891
+
892
+ * Fixed main settings saving
893
+ * Fixed unsubscription settings saving
894
+
895
+ = 4.0.0 =
896
+
897
+ * Shiny new look
898
+ * New top menu
899
+ * Locked content feature moved into the subscription module
900
+ * Separated SMTP configuration panel
901
+ * Newsletter users import transfer first and last name
902
+ * Various bug fixes and improvements
903
+
904
+ = 3.9.5 =
905
+
906
+ * Corrected the call to maybe_maybe_convert_table_to_utf8mb4
907
+
908
+ = 3.9.4 =
909
+
910
+ * CSV export fix
911
+ * Delete button on newsletter list fixed (wrong since version 3.9.3)
912
+
913
+ = 3.9.3 =
914
+
915
+ * Added the blog charset to the dagnostic panel
916
+ * Fixed the read count (was due to antispam filter changes)
917
+ * Language domain fixes
918
+
919
+ = 3.9.2 =
920
+
921
+ * Fixed the tab separator in CSV export
922
+ * Removed the already subscribed option
923
+ * Removed obsolete code for anchor tracking
924
+ * Added the sent newsletters to the subscriber editing panel
925
+ * Added a sent-to table
926
+
927
+ = 3.9.1 =
928
+
929
+ * Enable the tracking key edit
930
+ * Removed the antibot option, active by default
931
+ * First round of changes for translate.wordpress.org
932
+ * Fixed few notices
933
+ * Added deprecation notices for the email.php and email-alternative.php files
934
+ * Fixed the export separator
935
+ * Removed reference to plugin files in URLs to avoid spam filter
936
+ * Removed the selection of Newsletter action URL
937
+ * Removed obsolete files
938
+
939
+ = 3.9.0 =
940
+
941
+ * Fixed the new excerpt extraction
942
+
943
+ = 3.8.9 =
944
+
945
+ * Fixed few debug notices
946
+ * Improved support for browser without javascript
947
+ * Adding multi subscription support
948
+ * Improved antibot
949
+ * Fixed some debug/deprecated noticies
950
+ * Added support for new beta Report Extension features
951
+
952
+ = 3.8.8 =
953
+
954
+ * Unsubscription works now only with JavaScript enabled browser to block bots
955
+ * New way to extract excerpts to avoid third party filters
956
+ * Fixed the image selector for header logo
957
+ * Added preview form subscription message template
958
+ * Added WordPress like metadata on themes
959
+ * Fixed the default theme
960
+ * Changed few theme screeshots
961
+ * Added attribute "layout" to shortcode with value "html5" for tableless form
962
+
963
+ = 3.8.7 =
964
+
965
+ * Fixed the widget constructor
966
+
967
+ = 3.8.6 =
968
+
969
+ * Improved checks on tracking links which could be used for spamming links (open redirect)
970
+
971
+ = 3.8.5 =
972
+
973
+ * Changed the widget constructor
974
+ * Fixed the newsletter_form shortcode
975
+ * Added shortcodes for in page form building (beta): see the [plugin documentation](https://www.thenewsletterplugin.com/plugins/newsletter/newsletter-documentation).
976
+
977
+ = 3.8.4 =
978
+
979
+ * Fixed the unsubscription problem
980
+
981
+ = 3.8.3 =
982
+
983
+ * Fixed the editor for unsubscription messages
984
+ * Added the unsubscription error message
985
+ * Fixed the email change from admin panels
986
+ * Fixed the profile field check when set as optionals
987
+
988
+ = 3.8.2 =
989
+
990
+ * Improved the profile editing page (with confirmation for email change)
991
+ * Added new sync between confirmed email and linked wp user email
992
+ * Improved check and messages on subscriber edit panel
993
+ * Changed the confirmation behavior for already confirmed users (welcome page reshown)
994
+ * Added the subscription delete option when a WordPress user si deleted
995
+ * Unsubscribe action for already unsubscribed subscribers reshow the unsubscription message
996
+ * Better management of emoji (creating sometime a database error)
997
+
998
+ = 3.8.1 =
999
+
1000
+ * Corrected open tracking with new tracking URL schema
1001
+
1002
+ = 3.8.0 =
1003
+
1004
+ * CSV import fix
1005
+
1006
+ = 3.7.9 =
1007
+
1008
+ * Added subject empty check when sending tests
1009
+ * Added option to import subscribers as confirmed or not confirmed
1010
+ * Added import subscribers from CSV file
1011
+ * Updated the WP compatibility version number
1012
+ * Fixed the save button on sent emails
1013
+ * Fixed the List-Unsubscribe header with new URL schema
1014
+
1015
+ = 3.7.8 =
1016
+
1017
+ * Fixed the online email view with the new URL schema
1018
+
1019
+ = 3.7.7 =
1020
+
1021
+ * Fixed the editor role
1022
+ * Fixed the unsubscription url with the new action url schema
1023
+ * Fixed the readme.txt
1024
+ * Tested with WP 4.2
1025
+
1026
+ = 3.7.6 =
1027
+
1028
+ * Fixed the new action URL schema
1029
+ * Added a notice for blank page on newsletter creation
1030
+ * Few notices removed
1031
+ * Added more html require attributes
1032
+ * Fixed the alternative confirmation redirect
1033
+
1034
+ = 3.7.5 =
1035
+
1036
+ * Fixed the referrer attribute on shortcodes
1037
+
1038
+ = 3.7.4 =
1039
+
1040
+ * Added control to avoid the wp super cache caching on newsletter services
1041
+ * Added the new action URL schema (see the subscription steps panel)
1042
+ * Added confirmation_url attribute to the form short code
1043
+ * Added referrer attribute to the form short code
1044
+ * Newsletters now start with empty subject and it's require to write it
1045
+ * Fixed the API add service key check
1046
+ * Fixed a couple of PHP noticies on widget (when not configured)
1047
+
1048
+ = 3.7.3 =
1049
+
1050
+ * Fixed extra profile field rules and placeholder
1051
+
1052
+ = 3.7.2 =
1053
+
1054
+ * Fixed the editor issue on subscription steps panel
1055
+
1056
+ = 3.7.1 =
1057
+
1058
+ * Attempt to fix the home url retrieval on some custom installations
1059
+ * Removed some unused code
1060
+ * Fixed the rate request notice
1061
+ * Added the new URL tracking option (beta)
1062
+ * Added the new URL tracking option notice
1063
+ * Added file owner checking on diagnostic panel
1064
+ * Added action files call checking on diagnostic panel
1065
+ * Added dimensions on read-tracking image
1066
+ * Added the html tag to the message templates
1067
+ * Changed the template generation method to avoid conflicts with themes
1068
+
1069
+ = 3.7.0 =
1070
+
1071
+ * Bugfix
1072
+
1073
+ = 3.6.9 =
1074
+
1075
+ * Little fix
1076
+
1077
+ = 3.6.8 =
1078
+
1079
+ * Fixed the subject of the administrative notification
1080
+ * Cleaned up obsolete code
1081
+ * Added support for extension versions check
1082
+ * Fixed typo in text only themes
1083
+ * Fixed wrong unsubscribe code in German Welcome Email
1084
+
1085
+ = 3.6.7 =
1086
+
1087
+ * New Blog Info configuration panel
1088
+ * New Default Theme
1089
+ * Minor layout changes
1090
+ * Fix subscription email link
1091
+ * Added notices when filters are active on subscriber management panel
1092
+ * Few fixes on statistic panel
1093
+ * Fixed undefined index noticies on subscription page
1094
+ * Several fixes
1095
+ * A TNT team member quitted smoking, so the plugin become smoking free
1096
+
1097
+ = 3.6.6 =
1098
+
1099
+ * Added a cron monitor
1100
+ * Added a xmas theme
1101
+ * Fixed the opt-in mode for wordpress registsred users
1102
+ * Fixed the noticies
1103
+ * Fixed somes styles
1104
+ * Added the direct newsletter edit for themes without options
1105
+ * Header changed
1106
+ * Fixed all links to refer the new site www.thenewsletterplugin.com
1107
+ * Fixed the newsletter editor default style
1108
+
1109
+ = 3.6.5 =
1110
+
1111
+ * Added parameter "plugin url" on diagnostic panel
1112
+ * Added custom post types to the linear theme
1113
+ * Added custom post types to the vimeo-like theme
1114
+ * Fixed the feed by mail placeholder panel
1115
+ * Fixed the antibot option with preferences
1116
+
1117
+ = 3.6.4 =
1118
+
1119
+ * Support for greek (and others) characters without the entity encoding
1120
+ * Fixed a debug notice in the widget code
1121
+ * Added gender on import
1122
+ * Added support for the constant NEWSLETTER_LOG_DIR in wp-config.php to define the loggin folder
1123
+ * Fixed the domain removal on subscription steps messages
1124
+
1125
+ = 3.6.3 =
1126
+
1127
+ * Fixed the feed by mail test function
1128
+
1129
+ = 3.6.2 =
1130
+
1131
+ * Added the separator selection on CSV export
1132
+ * Added the UTF-8 BOM to the export
1133
+ * Fixed some debug noticies
1134
+
1135
+ = 3.6.1 =
1136
+
1137
+ * Fixed the widget when field names contain double quotes
1138
+
1139
+ = 3.6.0 =
1140
+
1141
+ * Removed the extension list from welcome panel
1142
+ * Added the and operator in the newsletter recipients selector
1143
+ * Fixed the select_group(...) in NewsletterControls class
1144
+
1145
+ = 3.5.9 =
1146
+
1147
+ * Added a possible antibot to the subscription flow
1148
+
1149
+ = 3.5.8 =
1150
+
1151
+ * Added soundcloud for social icon on default theme
1152
+ * Fixed the welcome screen (should)
1153
+
1154
+ = 3.5.7 =
1155
+
1156
+ * Added the private flag on newsletters
1157
+ * Fixed old extension version checking/reporting
1158
+
1159
+ = 3.5.6 =
1160
+
1161
+ * Added custom header for newsletter tagging with mandrill
1162
+ * Added internally used html 5 subscription form
1163
+
1164
+ = 3.5.5 =
1165
+
1166
+ * Added the license key field for special installations
1167
+
1168
+ = 3.5.4 =
1169
+
1170
+ * Fixed the web preview charset
1171
+
1172
+ = 3.5.3 =
1173
+
1174
+ * Added support for extensions as plugins
1175
+
1176
+ = 3.5.2 =
1177
+
1178
+ * Fixed the {title} tag replacement for old subscriber list with the gender not set
1179
+ * Added the upgrade from old versions button on diagnostic panel
1180
+
1181
+ = 3.5.1 =
1182
+
1183
+ * Support for the SendGrid extension
1184
+
1185
+ = 3.5.0 =
1186
+
1187
+ * Fixed the subscriber list panel
1188
+ * Interface reviewed
1189
+ * Fixed the image chooser for WP 3.8.1
1190
+ * Fixed the export for editors
1191
+ * Patch for anonymous users create by woocommerce
1192
+ * Madrill API adapter
1193
+ * Header separation between this plugin and the extensions
1194
+ * Default to base 64 encoding of outgoing email to solve the long lines problem
1195
+
1196
+ = 3.4.9 =
1197
+
1198
+ * Fixed some warnings in debug mode
1199
+ * Fixed the disabling setting of the social icons (on default newsletter themes)
1200
+ * Added filters on widget for WPML
1201
+ * Added filter for single line feeds refused by some mail servers
1202
+
1203
+ = 3.4.8 =
1204
+
1205
+ * Added a javascript protection against auto confirmation from bot
1206
+ * Fixed a warning with debug active on site login
1207
+
1208
+ = 3.4.7 =
1209
+
1210
+ * Fixed the subscription panel where some panels where no more visible.
1211
+
1212
+ = 3.4.6 =
1213
+
1214
+ * Added the full_name tag
1215
+ * Added the "simple" theme
1216
+ * Added indexes to the statistic table to improve the reports extension response time
1217
+ * Fixed some noticies in debug mode
1218
+
1219
+ = 3.4.5 =
1220
+
1221
+ * Revisited the theme chooser and the theme configuration
1222
+ * Fixed a double field on the locked content configuration
1223
+ * Improved the delivery engine
1224
+
1225
+ = 3.4.4 =
1226
+
1227
+ * Improved error messages
1228
+ * Fixed the last tab store (jquery changes)
1229
+ * Added some new controls for the pop up extensions
1230
+
1231
+ = 3.4.3 =
1232
+
1233
+ * Added the precendence bulk header (https://support.google.com/mail/answer/81126)
1234
+ * Added filter on messages to avoid wrong URLs when the blog change domain or folder
1235
+ * Added the alt attribute to the tracking image
1236
+ * New option to set the PHP max execution time
1237
+ * Fixed some text on main configuration panel
1238
+
1239
+ = 3.4.2 =
1240
+
1241
+ * Refined the subscription for already subscribed emails
1242
+
1243
+ = 3.4.1 =
1244
+
1245
+ * Fixed the delivery engine warning message
1246
+ * Fixed the version check
1247
+
1248
+ = 3.4.0 =
1249
+
1250
+ * Changed newsletter copy to copy even the editor and traking status
1251
+ * Fixed the subscribers search list
1252
+ * Added some more buttons on Newsletter editor
1253
+ * Added the subscription form menu voice (I cannot answer anymore the same request about subscribe button translation :-)
1254
+ * Suppressed warning on log function
1255
+
1256
+ = 3.3.9 =
1257
+
1258
+ * Fixed activation in debug mode
1259
+ * Fixed some notices
1260
+ * Added defaults for subscriber titles (Mr, Mrs, ...)
1261
+
1262
+ = 3.3.8 =
1263
+
1264
+ * Internal code fixes
1265
+ * Fixed the "editor" access control
1266
+
1267
+ = 3.3.7 =
1268
+
1269
+ * Fixed the feed by mail field on widget
1270
+ * Fixed tab names to avoid mod_security interference
1271
+ * Fixed the "name" form field rules
1272
+ * Added (undocumented/untested) way to change the table names
1273
+
1274
+ = 3.3.6 =
1275
+
1276
+ * Fixed a caching blocking on short code
1277
+ * New way to create a newsletter
1278
+
1279
+ = 3.3.5 =
1280
+
1281
+ * Fixed the mailto rewriting
1282
+ * Added tags and categories to default theme
1283
+ * Added post type on default theme
1284
+ * Fixed some administrative CSS
1285
+ * Revisited the theme selection and configuration
1286
+
1287
+ = 3.3.4 =
1288
+
1289
+ * Fixed the module version check
1290
+
1291
+ = 3.3.3 =
1292
+
1293
+ * Fixed the IP tracking on opening
1294
+
1295
+ = 3.3.2 =
1296
+
1297
+ * Disabled the save button on composer when the newsletter is "sending" or "sent"
1298
+ * Added ip field on statistics
1299
+ * Reviewed the subscriber statistics panel
1300
+ * Fixed some links on welcome panel
1301
+ * Added extensions version check
1302
+ * Added the Mandrill Extension support
1303
+ * Fixed the banner options on default theme
1304
+ * New "new newsletter" panel (hope simpler to use)
1305
+
1306
+ = 3.3.1 =
1307
+
1308
+ * Fixed a bug in an administrative query
1309
+
1310
+ = 3.3.0 =
1311
+
1312
+ * Fixed a replacement on online email version
1313
+ * Fixed a missing privacy check box configuration
1314
+ * Improved the split posts
1315
+ * Added post_type control
1316
+ * Re-enabled the subscription for addresses not confirmed
1317
+ * Fixed the welcome and ocnfirmaiton email when sent from subscribers list panel (were not using the theme)
1318
+ * Added the "pre-checked" option to preferences configuration
1319
+
1320
+ = 3.2.9 =
1321
+
1322
+ * Fixed a possible loop on widget (when using extended fields in combobox format)
1323
+
1324
+ = 3.2.8 =
1325
+
1326
+ * Fixed the newsletter_replace filter
1327
+ * Added the person title for salutation
1328
+ * Changed the profile field panel
1329
+ * Fixed the massive deletion of unsubscribed users
1330
+
1331
+ = 3.2.7 =
1332
+
1333
+ * Added a controls for the Reports module version 1.0.4
1334
+ * Changed opening tracking and removed 1x1 GIF
1335
+ * Added support for popup on subscription form
1336
+ * Fixed the link to the reports module
1337
+
1338
+ = 3.2.6 =
1339
+
1340
+ * Fixed the forced preferences on subscription panel
1341
+
1342
+ = 3.2.5 =
1343
+
1344
+ * Fixed the home_url and blog_url replacements
1345
+ * Added the cleans up of tags used in href attributes
1346
+ * Fixed the cleans up of URL tags
1347
+ * Added module version checking support
1348
+ * Added the welcome email option to disable it
1349
+ * Fixed the new subscriber notification missing under some specific conditions
1350
+
1351
+ = 3.2.4 =
1352
+
1353
+ * Added target _blank on theme links so they open on a new windows for the online version
1354
+ * Changed to the plugins_url() function
1355
+ * Added clean up of url tags on composer
1356
+
1357
+ = 3.2.3 =
1358
+
1359
+ * Added schedule list on Diagnostic panel
1360
+ * Removed the enable/disable resubscription option
1361
+ * Added a check for the delivery engine shutdown on some particular situations
1362
+ * Revisited the WordPress registration integration
1363
+ * Revisited the WordPress user import and moved on subscriber massive action panel
1364
+ * Added links to new documentation chapter
1365
+ * Removed a survived reference to an old table
1366
+ * Reactivated the replacement of the {blog_url} tag
1367
+ * Fixed the tracking code injection
1368
+ * Fixed a default query generation for compatibility with 2.5 version
1369
+ * Fixed the tag replacements when using the old forms
1370
+
1371
+ = 3.2.2 =
1372
+
1373
+ * Fixed the subscription options change problem during the upgrade
1374
+ * English corrections by Rita Vaccaro
1375
+ * Added the Feed by Mail demo module
1376
+ * Added support for the Facebook module
1377
+
1378
+ = 3.2.1 =
1379
+
1380
+ * Fixed fatal error with old form formats
1381
+
1382
+ = 3.2.0 =
1383
+
1384
+ * Added hint() method to NewsletterControls
1385
+ * Fixed the Newsletter::replace_date() to replace even the {date} tag without a format
1386
+ * Added NewsletterModule::format_time_delta()
1387
+ * Added NewsletterModule::format_scheduler_time
1388
+ * Improved the diagnostic panel
1389
+ * Fixed an error on subscription with old forms
1390
+ * Fixed the unsubscription with old formats
1391
+ * Fixed the confirmation for multiple calls
1392
+ * Fixed user saving on new installation (column missing for followup module)
1393
+ * Added compatibility code with domain remaping plugin
1394
+ * Added a setting to let unsubscribed users to subscribe again
1395
+ * Added the re-subscription option
1396
+
1397
+ = 3.1.9 =
1398
+
1399
+ * Added the NEWSLETTER_MAX_EXECUTION_TIME
1400
+ * Added the NEWSLETTER_CRON_INTERVAL
1401
+ * Improved the delivery engine performances
1402
+ * Improved the newsletter list panel
1403
+ * Change the subscription in case of unsubscribed, bounced or confirmed address with a configurable error message
1404
+ * Some CSS review
1405
+ * Fixed the unsubscription procedure with a check on user status
1406
+ * Added Pint theme
1407
+
1408
+ = 3.1.7 =
1409
+
1410
+ * Added better support for Follow Up for Newsletter
1411
+ * Fixed integration with Feed by Mail for Newsletter
1412
+ * Fixed a bug on profile save
1413
+ * Fixed a message about log folder on diagnostic panel
1414
+ * Fixed the sex field on user creation
1415
+
1416
+ = 3.1.6 =
1417
+
1418
+ * Fixed the subscription form absent on some configurations
1419
+
1420
+ = 3.1.5 =
1421
+
1422
+ * Content locking deactivated if a user is logged in
1423
+ * Added a button to create a newsletter dedicated page
1424
+ * Added top message is the newsletter dedicated page is not configured
1425
+ * Fixed the subscription process with the old "na" action
1426
+ * Added a new option with wp registration integration
1427
+ * Added the opt-in mode to wp registration integration
1428
+
1429
+ = 3.1.4 =
1430
+
1431
+ * Fixed a bug on post/page preview
1432
+
1433
+ = 3.1.3 =
1434
+
1435
+ * Added support for SendGrid Module
1436
+ * Fixed a fatal error on new installations on emails.php
1437
+
1438
+ = 3.1.2 =
1439
+
1440
+ * Fixed the access control for editors
1441
+ * Improved to the log system to block it when the log folder cannot be created
1442
+ * Moved all menu voices to the new format
1443
+ * Improved the diagnostic panel
1444
+ * Added ability to send and email to not confirmed subscribers
1445
+ * Fixed a problem with internal module versions
1446
+
1447
+ = 3.1.1 =
1448
+
1449
+ * Fixed the copy and delete buttons on newsletter list
1450
+ * Removed the old trigger button on newsletter list
1451
+ * Fixed the edit button on old user search
1452
+ * Improved the module version checking
1453
+ * Added the "unconfirm" button on massive subscriber management panel
1454
+
1455
+ = 3.1.0 =
1456
+
1457
+ * Added link to change preferences/sex from emails
1458
+ * Added tag reference on email composer
1459
+ * Added "negative" preference selection on email targeting
1460
+ * Improved the subscription during WordPress user registration
1461
+ * Fixed the preference saving from profile page
1462
+ * Fixed the default value for the gender field to "n"
1463
+ * Added loading of the Feed by Mail module
1464
+ * Added loading of the Follow Up module
1465
+ * Added loading of the MailJet module
1466
+ * Changed the administrative page header
1467
+ * Changed the subscriber list and search panel
1468
+ * Improved the locked content feature
1469
+ * Fixed the good bye email not using the standard email template
1470
+ * Changed the diagnostics panel with module versions checking
1471
+ * Fixed some code on NewsletterModule
1472
+
1473
+ = 3.0.9 =
1474
+
1475
+ * Fixed an important bug
1476
+
1477
+ = 3.0.8 =
1478
+
1479
+ * Fixed the charset on some pages and previews for umlaut characters
1480
+
1481
+ = 3.0.7 =
1482
+
1483
+ * Fixed a warning in WP 3.5
1484
+ * Fixed the visual editor on/off on composer panel
1485
+
1486
+ = 3.0.6 =
1487
+
1488
+ * Added file permissions check on diagnostic panel
1489
+ * Fixed the default value for "sex" on email at database level
1490
+ * Fixed the checking of required surname
1491
+ * Fixed a warning on subscription panel
1492
+ * Improved the subscription management for bounced or unsubscribed addresses
1493
+ * Removed the simple theme of tinymce to reduce the number of files
1494
+ * Added neutral style for subscription form
1495
+
1496
+ = 3.0.5 =
1497
+
1498
+ * Added styling for widget
1499
+ * Fixed the widget html
1500
+ * Fixed the reset button on subscription panels
1501
+ * Fixed the language initialization on first installation
1502
+ * Fixed save button on profile page (now it can be an image)
1503
+ * Fixed email listing showing the planned status
1504
+
1505
+ = 3.0.4 =
1506
+
1507
+ * Fixed the alternative email template for subscription messages
1508
+ * Added user statistics by referrer (field nr passed during subscription)
1509
+ * Added user statistics by http referer (one r missing according to the http protocol)
1510
+ * Fixed the preview for themes without textual version
1511
+ * Fixed the subscription redirect for blogs without permalink
1512
+ * Fixed the "sex" column on database so email configuration is correctly stored
1513
+ * Fixed the wp user integration
1514
+
1515
+ = 3.0.3 =
1516
+
1517
+ * Fixed documentation on subscription panel and on subscription/page.php file
1518
+ * Fixed the statistics module URL rewriting
1519
+ * Fixed a "echo" on module.php datetime method
1520
+ * Fixed the multi-delete on newsletter list
1521
+ * Fixed eval() usage on add_menu_page and add_admin_page function
1522
+ * Fixed a number of ob_end_clean() called wht not required and interfering with other output buffering
1523
+ * Fixed the editor access level
1524
+
1525
+ = 3.0.2 =
1526
+
1527
+ * Documented how to customize the subscription/email.php file (see inside the file) for subscription messages
1528
+ * Fixed the confirmation message lost (only for who do not already save the subscription options...)
1529
+
1530
+ = 3.0.1 =
1531
+
1532
+ * Fixed an extra character on head when including the form css
1533
+ * Fixed the double privacy check on subscription widget
1534
+ * Fixed the charset of subscription/page.php
1535
+ * Fixed the theme preview with wp_nonce_url
1536
+ * Added compatibility code for forms directly coded inside the subscription message
1537
+ * Added link to composer when the javascript redirect fails on creation of a new newsletter
1538
+ * Fixed the old email list and conversion
1539
+
1540
+ = 3.0.0 =
1541
+
1542
+ * Release
1543
+
1544
+ = 2.6.2 =
1545
+
1546
+ * Added the user massive management panel
1547
+
1548
+ = 2.5.3.3 =
1549
+
1550
+ * Updated to 20 lists instead of 9
1551
+ * Max lists can be set on wp-config.php with define('NEWSLETTER_LIST_MAX', [number])
1552
+ * Default preferences ocnfigurable on subscription panel
1553
+
1554
+ = 2.5.3.2 =
1555
+
1556
+ * fixed the profile fields generation on subscription form
1557
+
1558
+ = 2.5.3.1 =
1559
+
1560
+ * fixed javascript email check
1561
+ * fixed rewrite of link that are anchors
1562
+ * possible patch to increase concurrency detection while sending
1563
+ * fixed warning message on email composer panel
1564
+
1565
+ = 2.5.3 =
1566
+
1567
+ * changed the confirmation and cancellation URLs to a direct call to Newsletter Pro to avoid double emails
1568
+ * mail opening now tracked
1569
+ * fixed the add api
1570
+ * feed by mail settings added: categories and max posts
1571
+ * feed by mail themes change to use the new settings
1572
+ * unsubscribed users are marked as unsubscribed and not removed
1573
+ * api now respect follow up and feed by mail subscription options
1574
+ * fixed the profile form to add the user id and token
1575
+ * subscribers' panel changed
1576
+ * optimizations
1577
+ * main url fixed everywhere
1578
+ * small changes to the email composer
1579
+ * small changes to the blank theme
1580
+
1581
+ = 2.5.2.3 =
1582
+
1583
+ * subscribers panel now show the profile data
1584
+ * search can be ordered by profile data
1585
+ * result limit on search can be specified
1586
+ * {unlock_url} fixed (it was not pointing to the right configured url)
1587
+
1588
+ = 2.5.2.2 =
1589
+
1590
+ * fixed the concurrent email sending problem
1591
+ * added WordPress media gallery integration inside email composer
1592
+
1593
+ = 2.5.2.1 =
1594
+
1595
+ * added the add_user method
1596
+ * fixed the API (was not working) and added multilist on API (thankyou betting-tips-uk.com)
1597
+ * fixed privacy check box on widget
1598
+
1599
+ = 2.5.2 =
1600
+
1601
+ * added compatibility with lite cache
1602
+ * fixed the list checkboxes on user edit panel
1603
+ * removed the 100 users limit on search panel
1604
+ * category an max posts selection on email composer
1605
+
1606
+ = 2.5.1.5 =
1607
+
1608
+ * improved the url tag replacement for some particular blog installation
1609
+ * fixed the unsubscription administrator notification
1610
+ * replaced sex with gender in notification emails
1611
+ * fixed the confirm/unconfirm button on user list
1612
+ * fixed some labels
1613
+ * subscription form table HTML
1614
+
1615
+ = 2.5.1.4 =
1616
+
1617
+ * added {date} tag and {date_'format'} tag, where 'format' can be any of the PHP date formats
1618
+ * added {blog_description} tag
1619
+ * fixed the feed reset button
1620
+ * added one day back button to the feed
1621
+ * updated custom forms documentation
1622
+ * fixed the trigger button on emails panel
1623
+ * changed both feed by mail themes (check them if you create your own theme)
1624
+ * fixed the custom profile field generation (important!)
1625
+ * fixed documentation about custom forms
1626
+
1627
+ Version 2.5.1.3
1628
+ - fix the feed email test id (not important, it only generates PHP error logs)
1629
+ - feed by mail send now now force the sending if in a non sending day
1630
+ - changed the way feed by mail themes extract the posts: solves the sticky posts problem
1631
+ - added the feed last check time reset button
1632
+ - fixed the confirm and cancel buttons on user list
1633
+ - fixed the welcome email when using a custom thank you page
1634
+ - added images to theme 1
1635
+ - added button to trigger the delivery engine
1636
+ - fixed the widget mail check
1637
+ - reintroduced style.css for themes
1638
+ - updated theme documentation
1639
+ - added CDATA on JavaScript
1640
+ - fixed theme 1 which was not adding the images
1641
+ - added theme 3
1642
+
1643
+ Version 2.5.1.2
1644
+ - fixed the old profile fields saving
1645
+
1646
+ Version 2.5.1.1
1647
+ - new fr_FR file
1648
+ - fixed test of SMTP configuration which was sending to test address 2 instead of test address 1
1649
+ - bounced voice remove on search filter
1650
+ - added action "of" which return only the subscription form and fire a subcription of type "os"
1651
+ - added action "os" that subscribe the user and show only the welcome/confirmation required message
1652
+ - fixed issue with main page url configuration
1653
+
1654
+ Version 2.5.1
1655
+ - Fixed the widget that was not using the extended fields
1656
+ - Fixed the widget that was not using the lists
1657
+ - Added the class "newsletter-profile" and "newsletter-profile-[number]" to the widget form
1658
+ - Added the class "newsletter-profile" and "newsletter-profile-[number]" to the main subscription form
1659
+ - Added the class "newsletter-profile" and "newsletter-profile-[number]" to the profile form
1660
+ - Added the classes "newsletter-email", "newsletter-firstname", "newsletter-surname" to the respective fields on every form
1661
+ - Removed email theme option on subscription panel (was not used)
1662
+ - Fixed the welcome email on double opt in process
1663
+ - Subscription notifications to admin only for confirmed subscription
1664
+ - Fixed subscription process panel for double opt in (layout problems)
1665
+ - Improved subscription process panel
1666
+
1667
+
1668
+ Version 2.5.0.1
1669
+ - Fix unsubscription process not working
1670
+
1671
+ Version 2.5.0
1672
+ - Official first release
1673
+
css/dropdown.css CHANGED
@@ -77,6 +77,7 @@
77
  .tnp-drowpdown ul li a small {
78
  display: block;
79
  color: #afafaf;
 
80
  }
81
 
82
  .tnp-drowpdown ul ul {
77
  .tnp-drowpdown ul li a small {
78
  display: block;
79
  color: #afafaf;
80
+ float: none !important;
81
  }
82
 
83
  .tnp-drowpdown ul ul {
emails/edit.php CHANGED
@@ -146,6 +146,10 @@ if ($controls->is_action('test') || $controls->is_action('save') || $controls->i
146
  $query .= " and wp_user_id<>0";
147
  }
148
 
 
 
 
 
149
 
150
  $list_where = array();
151
  if (isset($email['options']['lists']) && count($email['options']['lists'])) {
@@ -376,6 +380,14 @@ if ($email['status'] != 'sent') {
376
  <?php $controls->select2('options_lists_exclude', $lists, null, true, null, __('None', 'newsletter')); ?>
377
  </td>
378
  </tr>
 
 
 
 
 
 
 
 
379
  <tr>
380
  <th><?php _e('Gender', 'newsletter') ?></th>
381
  <td>
146
  $query .= " and wp_user_id<>0";
147
  }
148
 
149
+ if (!empty($email['options']['language'])) {
150
+ $query .= " and language='" . esc_sql((string) $email['options']['language']) . "'";
151
+ }
152
+
153
 
154
  $list_where = array();
155
  if (isset($email['options']['lists']) && count($email['options']['lists'])) {
380
  <?php $controls->select2('options_lists_exclude', $lists, null, true, null, __('None', 'newsletter')); ?>
381
  </td>
382
  </tr>
383
+
384
+ <tr>
385
+ <th><?php _e('Language', 'newsletter') ?></th>
386
+ <td>
387
+ <?php $controls->language('options_language'); ?>
388
+ </td>
389
+ </tr>
390
+
391
  <tr>
392
  <th><?php _e('Gender', 'newsletter') ?></th>
393
  <td>
emails/emails.php CHANGED
@@ -2,8 +2,6 @@
2
 
3
  defined('ABSPATH') || exit;
4
 
5
- require_once NEWSLETTER_INCLUDES_DIR . '/themes.php';
6
-
7
  class NewsletterEmails extends NewsletterModule {
8
 
9
  static $instance;
@@ -91,9 +89,10 @@ class NewsletterEmails extends NewsletterModule {
91
  include NEWSLETTER_INCLUDES_DIR . '/controls.php';
92
  }
93
  $options = $this->options_decode(stripslashes_deep($_REQUEST['options']));
94
-
95
- $context = array('type'=>'');
96
- if (isset($_REQUEST['context_type'])) $context['type'] = $_REQUEST['context_type'];
 
97
 
98
  // $defaults = array(
99
  // 'block_padding_top' => 15,
@@ -251,6 +250,14 @@ class NewsletterEmails extends NewsletterModule {
251
  return $text;
252
  }
253
 
 
 
 
 
 
 
 
 
254
  /**
255
  * Renders a block identified by its id, using the block options and adding a wrapper
256
  * if required (for the first block rendering.
@@ -282,19 +289,19 @@ class NewsletterEmails extends NewsletterModule {
282
  echo '<tr>';
283
  echo '<td data-options="" bgcolor="#ffffff" align="center" style="padding: 0; font-family: Helvetica, Arial, sans-serif;" class="edit-block">';
284
  }
285
- echo '<!--[if mso]><table border="0" cellpadding="0" align="center" cellspacing="0" width="' . $width . '"><tr><td width="' . $width . '"><![endif]-->';
286
- echo "\n";
 
287
 
288
- echo 'Block not found';
289
 
290
- echo "<!--[if mso]></td></tr></table><![endif]-->\n";
291
  if ($wrapper) {
292
  echo '</td></tr></table>';
293
  }
294
  return;
295
  }
296
 
297
- $out = array('subject' => '', 'return_empty_message'=>false);
298
 
299
 
300
  ob_start();
@@ -350,8 +357,8 @@ class NewsletterEmails extends NewsletterModule {
350
  }
351
 
352
  // Container that fixes the width and makes the block responsive
353
- echo '<!--[if mso]><table border="0" cellpadding="0" align="center" cellspacing="0" width="' . $width . '"><tr><td width="' . $width . '"><![endif]-->';
354
- echo "\n";
355
  echo '<table type="options" data-json="', esc_attr($data), '" class="tnpc-block-content" border="0" cellpadding="0" align="center" cellspacing="0" width="100%" style="width: 100%!important; max-width: ', $width, 'px!important">', "\n";
356
  echo "<tr>";
357
  echo '<td align="center" style="', $style, '" bgcolor="', $options['block_background'], '" width="100%">', "\n";
@@ -361,7 +368,7 @@ class NewsletterEmails extends NewsletterModule {
361
  //echo "\n<!-- /block generated content -->\n";
362
 
363
  echo "\n</td></tr></table>";
364
- echo '<!--[if mso]></td></tr></table><![endif]-->';
365
 
366
  // First time block creation wrapper
367
  if ($wrapper) {
@@ -544,12 +551,17 @@ class NewsletterEmails extends NewsletterModule {
544
  die();
545
  }
546
 
 
 
 
547
  // Used by theme code
548
- $theme_options = $this->get_current_theme_options();
549
- $theme_url = $this->get_current_theme_url();
 
 
550
  header('Content-Type: text/html;charset=UTF-8');
551
 
552
- include($this->get_current_theme_file_path('theme.php'));
553
 
554
  die();
555
  break;
@@ -567,17 +579,20 @@ class NewsletterEmails extends NewsletterModule {
567
  // Used by theme code
568
  $theme_options = $this->get_current_theme_options();
569
 
570
- $file = $this->get_current_theme_file_path('theme-text.php');
 
571
  if (is_file($file)) {
572
- include($this->get_current_theme_file_path('theme-text.php'));
573
  }
574
 
575
  die();
576
  break;
577
 
578
 
 
579
  case 'emails-create':
580
-
 
581
  if (!Newsletter::instance()->is_allowed()) {
582
  die('Not enough privileges');
583
  }
@@ -585,64 +600,58 @@ class NewsletterEmails extends NewsletterModule {
585
  require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
586
  $controls = new NewsletterControls();
587
 
588
- if ($controls->is_action('create')) {
589
- $this->save_options($controls->data);
590
-
591
- $email = array();
592
- $email['status'] = 'new';
593
- $email['subject'] = ''; //__('Here the email subject', 'newsletter');
594
- $email['track'] = 1;
595
 
596
- $theme_options = $this->get_current_theme_options();
 
 
 
 
597
 
598
- $theme_url = $this->get_current_theme_url();
599
- $theme_subject = '';
 
 
 
 
 
600
 
601
- ob_start();
602
- include $this->get_current_theme_file_path('theme.php');
603
- $email['message'] = ob_get_clean();
604
 
605
- if (!empty($theme_subject)) {
606
- $email['subject'] = $theme_subject;
607
- }
608
 
609
- ob_start();
610
- include $this->get_current_theme_file_path('theme-text.php');
611
- $email['message_text'] = ob_get_clean();
612
 
613
- $email['type'] = 'message';
614
- $email['send_on'] = time();
615
- $email = $newsletter->save_email($email);
616
 
617
- $edit_url = $this->get_editor_url($email->id, $email->editor);
 
 
618
 
619
- header('Location: ' . $edit_url);
 
 
 
 
 
620
  }
621
- die();
622
- break;
623
- }
624
- }
625
 
626
- function upgrade() {
627
- global $wpdb, $charset_collate;
628
 
629
- parent::upgrade();
630
 
631
- $this->upgrade_query("alter table " . NEWSLETTER_EMAILS_TABLE . " change column `type` `type` varchar(50) not null default ''");
632
- $this->upgrade_query("alter table " . NEWSLETTER_EMAILS_TABLE . " add column token varchar(10) not null default ''");
633
- $this->upgrade_query("alter table " . NEWSLETTER_EMAILS_TABLE . " drop column visibility");
634
- $this->upgrade_query("alter table " . NEWSLETTER_EMAILS_TABLE . " add column private tinyint(1) not null default 0");
635
 
636
- // Force a token to email without one already set.
637
- //$token = self::get_token();
638
- //$wpdb->query("update " . NEWSLETTER_EMAILS_TABLE . " set token='" . $token . "' where token=''");
639
- if ($this->old_version < '1.1.5') {
640
- $this->upgrade_query("update " . NEWSLETTER_EMAILS_TABLE . " set type='message' where type=''");
641
- $wpdb->query("update " . NEWSLETTER_EMAILS_TABLE . " set token=''");
642
  }
643
- $wpdb->query("update " . NEWSLETTER_EMAILS_TABLE . " set total=sent where status='sent' and type='message'");
644
-
645
- return true;
646
  }
647
 
648
  function admin_menu() {
@@ -654,80 +663,15 @@ class NewsletterEmails extends NewsletterModule {
654
  $this->add_admin_page('composer', 'The Composer');
655
  $this->add_admin_page('editorhtml', 'HTML Editor');
656
  $this->add_admin_page('editortinymce', 'TinyMCE Editor');
657
- //$this->add_admin_page('cpreview', 'The Composer Preview');
658
- }
659
-
660
- /**
661
- * Returns the current selected theme.
662
- */
663
- function get_current_theme() {
664
- $theme = $this->options['theme'];
665
- if (empty($theme))
666
- return 'blank';
667
- else
668
- return $theme;
669
- }
670
-
671
- function get_current_theme_options() {
672
- $theme_options = $this->themes->get_options($this->get_current_theme());
673
- // main options merge
674
- $main_options = Newsletter::instance()->options;
675
- foreach ($main_options as $key => $value) {
676
- $theme_options['main_' . $key] = $value;
677
- }
678
- $info_options = Newsletter::instance()->get_options('info');
679
- foreach ($info_options as $key => $value) {
680
- $theme_options['main_' . $key] = $value;
681
- }
682
- return $theme_options;
683
- }
684
-
685
- /**
686
- * Returns the file path to a theme using the theme overriding rules.
687
- * @param type $theme
688
- * @param type $file
689
- */
690
- function get_theme_file_path($theme, $file) {
691
- return $this->themes->get_file_path($theme);
692
- }
693
-
694
- function get_current_theme_file_path($file) {
695
- return $this->themes->get_file_path($this->get_current_theme(), $file);
696
- }
697
-
698
- function get_current_theme_url() {
699
- return $this->themes->get_theme_url($this->get_current_theme());
700
  }
701
 
702
  /**
703
- * Returns true if the emails database still contain old 2.5 format emails.
704
- *
705
- * @return boolean
 
 
706
  */
707
- function has_old_emails() {
708
- return $this->store->get_count(NEWSLETTER_EMAILS_TABLE, "where type='email'") > 0;
709
- }
710
-
711
- function convert_old_emails() {
712
- global $newsletter;
713
- $list = $newsletter->get_emails('email', ARRAY_A);
714
- foreach ($list as &$email) {
715
- $email['type'] = 'message';
716
- $query = "select * from " . NEWSLETTER_USERS_TABLE . " where status='C'";
717
-
718
- if ($email['list'] != 0)
719
- $query .= " and list_" . $email['list'] . "=1";
720
- $email['preferences'] = $email['list'];
721
-
722
- if (!empty($email['sex'])) {
723
- $query .= " and sex='" . $email['sex'] . "'";
724
- }
725
- $email['query'] = $query;
726
-
727
- $newsletter->save_email($email);
728
- }
729
- }
730
-
731
  function build_block($dir) {
732
  $file = basename($dir);
733
  $block_id = sanitize_key($file);
@@ -758,6 +702,11 @@ class NewsletterEmails extends NewsletterModule {
758
  return $data;
759
  }
760
 
 
 
 
 
 
761
  function scan_blocks_dir($dir) {
762
 
763
  if (!is_dir($dir)) {
@@ -983,7 +932,7 @@ class NewsletterEmails extends NewsletterModule {
983
  $controls->errors .= '<a href="https://www.thenewsletterplugin.com/documentation/email-sending-issues" target="_blank"><strong>' . __('Read more about delivery issues', 'newsletter') . '</strong></a>.';
984
  } else {
985
  $controls->messages = __('Test subscribers:', 'newsletter');
986
-
987
  $controls->messages .= ' ' . implode(', ', $emails);
988
  $controls->messages .= '.<br>';
989
  $controls->messages .= '<a href="https://www.thenewsletterplugin.com/documentation/subscribers#test" target="_blank"><strong>' .
2
 
3
  defined('ABSPATH') || exit;
4
 
 
 
5
  class NewsletterEmails extends NewsletterModule {
6
 
7
  static $instance;
89
  include NEWSLETTER_INCLUDES_DIR . '/controls.php';
90
  }
91
  $options = $this->options_decode(stripslashes_deep($_REQUEST['options']));
92
+
93
+ $context = array('type' => '');
94
+ if (isset($_REQUEST['context_type']))
95
+ $context['type'] = $_REQUEST['context_type'];
96
 
97
  // $defaults = array(
98
  // 'block_padding_top' => 15,
250
  return $text;
251
  }
252
 
253
+ static function get_outlook_wrapper_open($width = 600) {
254
+ return '<!--[if mso | IE]><table role="presentation" border="0" cellpadding="0" align="center" cellspacing="0" width="' . $width . '"><tr><td width="' . $width . '" style="vertical-align:top;width:' . $width . 'px;"><![endif]-->' . "\n";
255
+ }
256
+
257
+ static function get_outlook_wrapper_close() {
258
+ echo "<!--[if mso | IE]></td></tr></table><![endif]-->\n";
259
+ }
260
+
261
  /**
262
  * Renders a block identified by its id, using the block options and adding a wrapper
263
  * if required (for the first block rendering.
289
  echo '<tr>';
290
  echo '<td data-options="" bgcolor="#ffffff" align="center" style="padding: 0; font-family: Helvetica, Arial, sans-serif;" class="edit-block">';
291
  }
292
+ echo $this->get_outlook_wrapper_open($width);
293
+
294
+ echo '<p>Ops, this block type is no more registered!</p>';
295
 
296
+ echo $this->get_outlook_wrapper_close();
297
 
 
298
  if ($wrapper) {
299
  echo '</td></tr></table>';
300
  }
301
  return;
302
  }
303
 
304
+ $out = array('subject' => '', 'return_empty_message' => false);
305
 
306
 
307
  ob_start();
357
  }
358
 
359
  // Container that fixes the width and makes the block responsive
360
+ echo $this->get_outlook_wrapper_open($width);
361
+
362
  echo '<table type="options" data-json="', esc_attr($data), '" class="tnpc-block-content" border="0" cellpadding="0" align="center" cellspacing="0" width="100%" style="width: 100%!important; max-width: ', $width, 'px!important">', "\n";
363
  echo "<tr>";
364
  echo '<td align="center" style="', $style, '" bgcolor="', $options['block_background'], '" width="100%">', "\n";
368
  //echo "\n<!-- /block generated content -->\n";
369
 
370
  echo "\n</td></tr></table>";
371
+ echo $this->get_outlook_wrapper_close();
372
 
373
  // First time block creation wrapper
374
  if ($wrapper) {
551
  die();
552
  }
553
 
554
+ $theme_id = $_GET['id'];
555
+ $theme = $this->themes->get_theme($theme_id);
556
+
557
  // Used by theme code
558
+ $theme_options = $this->themes->get_options($theme_id);
559
+
560
+ $theme_url = $theme['url'];
561
+
562
  header('Content-Type: text/html;charset=UTF-8');
563
 
564
+ include $theme['dir'] . '/theme.php';
565
 
566
  die();
567
  break;
579
  // Used by theme code
580
  $theme_options = $this->get_current_theme_options();
581
 
582
+ $file = include $theme['dir'] . '/theme-text.php';
583
+
584
  if (is_file($file)) {
585
+ include $file;
586
  }
587
 
588
  die();
589
  break;
590
 
591
 
592
+
593
  case 'emails-create':
594
+ // Newsletter from themes are created on frontend context because sometime WP themes change the way the content,
595
+ // excerpt, thumbnail are extracted.
596
  if (!Newsletter::instance()->is_allowed()) {
597
  die('Not enough privileges');
598
  }
600
  require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
601
  $controls = new NewsletterControls();
602
 
603
+ if (!$controls->is_action('create')) {
604
+ die('Wrong call');
605
+ }
606
+
607
+ $theme_id = $controls->data['id'];
608
+ $theme = $this->themes->get_theme($theme_id);
 
609
 
610
+ if (!$theme) {
611
+ die('invalid theme');
612
+ }
613
+
614
+ $this->themes->save_options($theme_id, $controls->data);
615
 
616
+ $email = array();
617
+ $email['status'] = 'new';
618
+ $email['subject'] = ''; //__('Here the email subject', 'newsletter');
619
+ $email['track'] = 1;
620
+ $email['send_on'] = time();
621
+ $email['editor'] = NewsletterEmails::EDITOR_TINYMCE;
622
+ $email['type'] = 'message';
623
 
624
+ $theme_options = $this->themes->get_options($theme_id);
 
 
625
 
626
+ $theme_url = $theme['url'];
627
+ $theme_subject = '';
 
628
 
629
+ ob_start();
630
+ include $theme['dir'] . '/theme.php';
631
+ $email['message'] = ob_get_clean();
632
 
 
 
 
633
 
634
+ if (!empty($theme_subject)) {
635
+ $email['subject'] = $theme_subject;
636
+ }
637
 
638
+ if (file_exists($theme['dir'] . '/theme-text.php')) {
639
+ ob_start();
640
+ include $theme['dir'] . '/theme-text.php';
641
+ $email['message_text'] = ob_get_clean();
642
+ } else {
643
+ $email['message_text'] = 'You need a modern email client to read this email. Read it online: {email_url}.';
644
  }
 
 
 
 
645
 
646
+ $email = $newsletter->save_email($email);
 
647
 
648
+ $edit_url = $this->get_editor_url($email->id, $email->editor);
649
 
650
+ header('Location: ' . $edit_url);
 
 
 
651
 
652
+ die();
653
+ break;
 
 
 
 
654
  }
 
 
 
655
  }
656
 
657
  function admin_menu() {
663
  $this->add_admin_page('composer', 'The Composer');
664
  $this->add_admin_page('editorhtml', 'HTML Editor');
665
  $this->add_admin_page('editortinymce', 'TinyMCE Editor');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
666
  }
667
 
668
  /**
669
+ * Builds a block data structure starting from the folder containing the block
670
+ * files.
671
+ *
672
+ * @param string $dir
673
+ * @return array | WP_Error
674
  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
675
  function build_block($dir) {
676
  $file = basename($dir);
677
  $block_id = sanitize_key($file);
702
  return $data;
703
  }
704
 
705
+ /**
706
+ *
707
+ * @param type $dir
708
+ * @return type
709
+ */
710
  function scan_blocks_dir($dir) {
711
 
712
  if (!is_dir($dir)) {
932
  $controls->errors .= '<a href="https://www.thenewsletterplugin.com/documentation/email-sending-issues" target="_blank"><strong>' . __('Read more about delivery issues', 'newsletter') . '</strong></a>.';
933
  } else {
934
  $controls->messages = __('Test subscribers:', 'newsletter');
935
+
936
  $controls->messages .= ' ' . implode(', ', $emails);
937
  $controls->messages .= '.<br>';
938
  $controls->messages .= '<a href="https://www.thenewsletterplugin.com/documentation/subscribers#test" target="_blank"><strong>' .
emails/new.php CHANGED
@@ -1,133 +1,112 @@
1
  <?php
 
2
  require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
3
 
4
  $controls = new NewsletterControls();
5
- $module = NewsletterEmails::instance();
6
 
7
- if ($controls->is_action('theme')) {
8
- if ($controls->data['theme'] != 'rawhtml') {
9
- $controls->merge($module->themes->get_options($controls->data['theme']));
10
- $module->save_options($controls->data);
11
- }
12
 
13
- // If this theme has no intermediate options...
14
- if ($controls->data['theme'] == 'rawhtml' || !file_exists($module->get_current_theme_file_path('theme-options.php'))) {
15
- $email = array();
16
- $email['status'] = 'new';
17
- $email['subject'] = __('Here the email subject', 'newsletter');
18
- $email['track'] = Newsletter::instance()->options['track'];
19
- $email['token'] = $module->get_token();
20
-
21
- if ($controls->data['theme'] == 'rawhtml') {
22
- $email['editor'] = NewsletterEmails::EDITOR_HTML;
23
- $email['message'] = "<!DOCTYPE html>\n<html>\n<head>\n<title>Your email title</title>\n</head>\n<body>\n</body>\n</html>";
24
- } else {
25
- $theme_options = $module->get_current_theme_options();
26
- $theme_url = $module->get_current_theme_url();
27
- $theme_subject = '';
28
-
29
- ob_start();
30
- include $module->get_current_theme_file_path('theme.php');
31
- $email['message'] = ob_get_clean();
32
-
33
- if (!empty($theme_subject)) {
34
- $email['subject'] = $theme_subject;
35
- }
36
-
37
- $file = $module->get_current_theme_file_path('theme-text.php');
38
- if (file_exists($file)) {
39
- ob_start();
40
- include $module->get_current_theme_file_path('theme-text.php');
41
- $email['message_text'] = ob_get_clean();
42
- } else {
43
- $email['message_text'] = 'You need a modern email client to read this email. Read it online: {email_url}.';
44
- }
45
- $email['editor'] = NewsletterEmails::EDITOR_TINYMCE;
46
- }
47
-
48
- $email['type'] = 'message';
49
- $email['send_on'] = time();
50
- $email = Newsletter::instance()->save_email($email);
51
-
52
- $controls->js_redirect($module->get_editor_url($email->id, $email->editor));
53
- return;
54
- }
55
- }
56
 
57
- if ($controls->is_action('save')) {
58
- $module->save_options($controls->data);
59
- //$controls->messages = 'Saved.';
60
  }
61
 
62
- if ($controls->is_action('create')) {
63
- $module->save_options($controls->data);
64
 
 
 
 
 
 
 
 
 
65
  $email = array();
66
  $email['status'] = 'new';
67
  $email['subject'] = __('Here the email subject', 'newsletter');
68
  $email['track'] = Newsletter::instance()->options['track'];
 
 
 
 
69
 
70
- $theme_options = $module->get_current_theme_options();
71
-
72
- $theme_url = $module->get_current_theme_url();
73
  $theme_subject = '';
74
 
75
  ob_start();
76
- include $module->get_current_theme_file_path('theme.php');
77
  $email['message'] = ob_get_clean();
78
 
79
  if (!empty($theme_subject)) {
80
  $email['subject'] = $theme_subject;
81
  }
82
 
83
- ob_start();
84
- include $module->get_current_theme_file_path('theme-text.php');
85
- $email['message_text'] = ob_get_clean();
86
-
87
- $email['type'] = 'message';
88
- $email['send_on'] = time();
 
89
  $email = Newsletter::instance()->save_email($email);
90
- ?>
91
- <script>
92
- location.href = "<?php echo $module->get_admin_page_url('edit'); ?>&id=<?php echo $email->id; ?>";
93
- </script>
94
- <div class="wrap">
95
- <p><a href="<?php echo $module->get_admin_page_url('edit'); ?>&id=<?php echo $email->id; ?>">click here to proceed</a>.</p>
96
- </div>
97
- <?php
98
  return;
99
  }
100
 
101
- if ($controls->data == null) {
102
- $controls->data = $module->get_options();
103
  }
104
 
105
- function newsletter_emails_update_options($options) {
106
- add_option('newsletter_emails', '', null, 'no');
107
- update_option('newsletter_emails', $options);
108
- }
109
 
110
- function newsletter_emails_update_theme_options($theme, $options) {
111
- $x = strrpos($theme, '/');
112
- if ($x !== false) {
113
- $theme = substr($theme, $x + 1);
114
- }
115
- add_option('newsletter_emails_' . $theme, '', null, 'no');
116
- update_option('newsletter_emails_' . $theme, $options);
117
- }
118
 
119
- function newsletter_emails_get_options() {
120
- $options = get_option('newsletter_emails', array());
121
- return $options;
122
- }
 
 
 
 
 
 
123
 
124
- function newsletter_emails_get_theme_options($theme) {
125
- $x = strrpos($theme, '/');
126
- if ($x !== false) {
127
- $theme = substr($theme, $x + 1);
 
 
 
 
 
 
 
 
 
 
 
128
  }
129
- $options = get_option('newsletter_emails_' . $theme, array());
130
- return $options;
 
 
 
 
 
131
  }
132
  ?>
133
 
@@ -149,12 +128,11 @@ function newsletter_emails_get_theme_options($theme) {
149
 
150
  <form method="post" action="">
151
  <?php $controls->init(); ?>
152
- <?php $controls->hidden('theme'); ?>
153
-
154
  <table style="width: 100%; border-collapse: collapse">
155
  <tr>
156
  <td style="text-align: left; vertical-align: top; border-bottom: 1px solid #ddd; padding-bottom: 10px">
157
- <div style="float: right; margin-left: 15px;"><?php $controls->button_primary('save', __('Refresh the preview', 'newsletter')); ?></div>
158
 
159
  </td>
160
  <td style="text-align: left; vertical-align: top; border-bottom: 1px solid #ddd; padding-bottom: 10px">
@@ -165,11 +143,11 @@ function newsletter_emails_get_theme_options($theme) {
165
  <tr>
166
  <td style="width: 500px; vertical-align: top;">
167
  <div class="tnp-emails-theme-options">
168
- <?php @include $module->get_current_theme_file_path('theme-options.php'); ?>
169
  </div>
170
  </td>
171
  <td style="vertical-align: top; padding-top: 15px; padding-left: 15px">
172
- <iframe src="<?php echo wp_nonce_url(home_url('/', is_ssl() ? 'https' : 'http') . '?na=emails-preview&ts=' . time(), 'view'); ?>" height="700" style="width: 100%; border: 1px solid #ccc"></iframe>
173
  </td>
174
  </tr>
175
  </table>
1
  <?php
2
+ /* @var $this NewsletterEmails */
3
  require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
4
 
5
  $controls = new NewsletterControls();
 
6
 
7
+ $theme_id = $_GET['id'];
 
 
 
 
8
 
9
+ if ($theme_id === 'rawhtml' && check_admin_referer('newsletter-new')) {
10
+ $email = array();
11
+ $email['status'] = 'new';
12
+ $email['subject'] = __('Here the email subject', 'newsletter');
13
+ $email['track'] = Newsletter::instance()->options['track'];
14
+ $email['token'] = $this->get_token();
15
+ $email['type'] = 'message';
16
+ $email['send_on'] = time();
17
+ $email['editor'] = NewsletterEmails::EDITOR_HTML;
18
+ $email['message'] = "<!DOCTYPE html>\n<html>\n<head>\n<title>Your email title</title>\n</head>\n<body>\n</body>\n</html>";
19
+ $email = Newsletter::instance()->save_email($email);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
+ $controls->js_redirect($this->get_editor_url($email->id, $email->editor));
22
+ return;
 
23
  }
24
 
 
 
25
 
26
+ $theme = $this->themes->get_theme($theme_id);
27
+
28
+ // Should never happen
29
+ if (!$theme) {
30
+ die('Invalid theme');
31
+ }
32
+
33
+ if (!file_exists($theme['dir'] . '/theme-options.php') && check_admin_referer('newsletter-new')) {
34
  $email = array();
35
  $email['status'] = 'new';
36
  $email['subject'] = __('Here the email subject', 'newsletter');
37
  $email['track'] = Newsletter::instance()->options['track'];
38
+ $email['token'] = $this->get_token();
39
+ $email['type'] = 'message';
40
+ $email['send_on'] = time();
41
+ $email['editor'] = NewsletterEmails::EDITOR_TINYMCE;
42
 
43
+ $theme_options = $this->themes->get_options($controls->data['theme']);
44
+ $theme_url = $theme['url'];
 
45
  $theme_subject = '';
46
 
47
  ob_start();
48
+ include $theme['dir'] . '/theme.php';
49
  $email['message'] = ob_get_clean();
50
 
51
  if (!empty($theme_subject)) {
52
  $email['subject'] = $theme_subject;
53
  }
54
 
55
+ if (file_exists($theme['dir'] . '/theme-text.php')) {
56
+ ob_start();
57
+ include $theme['dir'] . '/theme-text.php';
58
+ $email['message_text'] = ob_get_clean();
59
+ } else {
60
+ $email['message_text'] = 'You need a modern email client to read this email. Read it online: {email_url}.';
61
+ }
62
  $email = Newsletter::instance()->save_email($email);
63
+
64
+ $controls->js_redirect($this->get_editor_url($email->id, $email->editor));
 
 
 
 
 
 
65
  return;
66
  }
67
 
68
+ if ($controls->is_action('refresh')) {
69
+ $this->themes->save_options($theme_id, $controls->data);
70
  }
71
 
72
+ if ($controls->is_action('create')) {
 
 
 
73
 
74
+ $this->themes->save_options($theme_id, $controls->data);
 
 
 
 
 
 
 
75
 
76
+ $email = array();
77
+ $email['status'] = 'new';
78
+ $email['subject'] = __('Here the email subject', 'newsletter');
79
+ $email['track'] = Newsletter::instance()->options['track'];
80
+ $email['message_text'] = '';
81
+ $email['type'] = 'message';
82
+ $email['send_on'] = time();
83
+ $email['editor'] = NewsletterEmails::EDITOR_TINYMCE;
84
+
85
+ $theme_options = $this->themes->get_options($theme_id);
86
 
87
+ $theme_url = $theme['url'];
88
+ $theme_subject = '';
89
+
90
+ ob_start();
91
+ include $theme['dir'] . '/theme.php';
92
+ $email['message'] = ob_get_clean();
93
+
94
+ if (!empty($theme_subject)) {
95
+ $email['subject'] = $theme_subject;
96
+ }
97
+
98
+ if (is_file($theme['dir'] . '/theme-text.php')) {
99
+ ob_start();
100
+ include $theme['dir'] . '/theme-text.php';
101
+ $email['message_text'] = ob_get_clean();
102
  }
103
+
104
+ $email = $this->save_email($email);
105
+ $controls->js_redirect($this->get_editor_url($email->id, $email->editor));
106
+ return;
107
+ } else {
108
+ $controls->data = $this->themes->get_options($theme_id);
109
+ $controls->data['id'] = $theme_id;
110
  }
111
  ?>
112
 
128
 
129
  <form method="post" action="">
130
  <?php $controls->init(); ?>
131
+ <?php $controls->hidden('id'); ?>
 
132
  <table style="width: 100%; border-collapse: collapse">
133
  <tr>
134
  <td style="text-align: left; vertical-align: top; border-bottom: 1px solid #ddd; padding-bottom: 10px">
135
+ <div style="float: right; margin-left: 15px;"><?php $controls->button_primary('refresh', __('Refresh the preview', 'newsletter')); ?></div>
136
 
137
  </td>
138
  <td style="text-align: left; vertical-align: top; border-bottom: 1px solid #ddd; padding-bottom: 10px">
143
  <tr>
144
  <td style="width: 500px; vertical-align: top;">
145
  <div class="tnp-emails-theme-options">
146
+ <?php @include $theme['dir'] . '/theme-options.php'; ?>
147
  </div>
148
  </td>
149
  <td style="vertical-align: top; padding-top: 15px; padding-left: 15px">
150
+ <iframe src="<?php echo wp_nonce_url(home_url('/', is_ssl() ? 'https' : 'http') . '?na=emails-preview&id=' . urlencode($theme_id) . '&ts=' . time(), 'view'); ?>" height="700" style="width: 100%; border: 1px solid #ccc"></iframe>
151
  </td>
152
  </tr>
153
  </table>
emails/theme.php CHANGED
@@ -1,6 +1,5 @@
1
  <?php
2
- if (!defined('ABSPATH'))
3
- exit;
4
 
5
  require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
6
  $controls = new NewsletterControls();
@@ -47,7 +46,14 @@ function newsletter_emails_get_theme_options($theme) {
47
 
48
  $themes = $module->themes->get_all_with_data();
49
  ?>
50
-
 
 
 
 
 
 
 
51
  <div class="wrap tnp-emails tnp-emails-theme" id="tnp-wrap">
52
 
53
  <?php include NEWSLETTER_DIR . '/tnp-header.php'; ?>
@@ -76,26 +82,18 @@ $themes = $module->themes->get_all_with_data();
76
 
77
  <div class="tnp-theme-preview">
78
  <p>&lt;&gt; Raw HTML</p>
79
- <a href="#" onclick="var f = document.getElementById('newsletter-form');
80
- f.act.value = 'theme';
81
- f.elements['options[theme]'].value = 'rawhtml';
82
- f.submit();
83
- return false;" style="margin-right: 20px; margin-bottom: 20px">
84
  <img src="<?php echo plugins_url('newsletter') . '/emails/images/html.png' ?>" width="200" height="200">
85
  </a>
86
  </div>
87
 
88
  </div>
89
 
90
- <?php foreach ($themes as $key => $data) { ?>
91
  <div class="tnp-theme-preview">
92
  <p><?php echo esc_html($data['name']) ?></p>
93
- <a href="#" onclick="var f = document.getElementById('newsletter-form');
94
- f.act.value = 'theme';
95
- f.elements['options[theme]'].value = '<?php echo esc_js($data['id']) ?>';
96
- f.submit();
97
- return false;" style="margin-right: 20px; margin-bottom: 20px">
98
- <img src="<?php echo esc_attr($data['screenshot']) ?>" width="200" height="200">
99
  </a>
100
  </div>
101
  <?php } ?>
1
  <?php
2
+ defined('ABSPATH') || exit;
 
3
 
4
  require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
5
  $controls = new NewsletterControls();
46
 
47
  $themes = $module->themes->get_all_with_data();
48
  ?>
49
+ <script>
50
+ function tnp_select_theme(id) {
51
+ var f = document.getElementById('newsletter-form');
52
+ f.act.value = 'theme';
53
+ f.elements['options[theme]'].value = id;
54
+ f.submit();
55
+ }
56
+ </script>
57
  <div class="wrap tnp-emails tnp-emails-theme" id="tnp-wrap">
58
 
59
  <?php include NEWSLETTER_DIR . '/tnp-header.php'; ?>
82
 
83
  <div class="tnp-theme-preview">
84
  <p>&lt;&gt; Raw HTML</p>
85
+ <a href="<?php echo wp_nonce_url('admin.php?page=newsletter_emails_new&id=rawhtml', 'newsletter-new') ?>" style="margin-right: 20px; margin-bottom: 20px">
 
 
 
 
86
  <img src="<?php echo plugins_url('newsletter') . '/emails/images/html.png' ?>" width="200" height="200">
87
  </a>
88
  </div>
89
 
90
  </div>
91
 
92
+ <?php foreach ($themes as $id => $data) { ?>
93
  <div class="tnp-theme-preview">
94
  <p><?php echo esc_html($data['name']) ?></p>
95
+ <a href="<?php echo wp_nonce_url('admin.php?page=newsletter_emails_new&id=' . urlencode($id), 'newsletter-new') ?>" style="margin-right: 20px; margin-bottom: 20px">
96
+ <img src="<?php echo esc_attr($data['screenshot']) ?>" width="300" height="450">
 
 
 
 
97
  </a>
98
  </div>
99
  <?php } ?>
emails/themes/blank/screenshot.png CHANGED
Binary file
emails/themes/blank/theme.php CHANGED
@@ -1,5 +1,12 @@
1
  <?php
2
- if (!defined('ABSPATH')) exit;
 
 
 
 
 
 
 
3
  ?><html>
4
  <head>
5
  <style>
@@ -41,5 +48,6 @@ if (!defined('ABSPATH')) exit;
41
  <p>
42
  <?php echo $theme_options['main_footer_legal'] ?>
43
  </p>
 
44
  </body>
45
  </html>
1
  <?php
2
+ /*
3
+ * Name: Really minimal
4
+ * Type: standard
5
+ * Description: -
6
+ */
7
+
8
+ defined('ABSPATH') || exit;
9
+
10
  ?><html>
11
  <head>
12
  <style>
48
  <p>
49
  <?php echo $theme_options['main_footer_legal'] ?>
50
  </p>
51
+
52
  </body>
53
  </html>
emails/themes/cta-2015/screenshot.png CHANGED
Binary file
emails/themes/default/screenshot.png CHANGED
Binary file
emails/themes/default/theme-defaults.php ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $theme_defaults = array(
4
+ 'theme_background' => '#f4f4f4',
5
+ 'theme_color' => '#555555',
6
+ 'theme_max_posts' => 10
7
+ );
8
+
emails/themes/default/theme-options.php CHANGED
@@ -11,6 +11,13 @@ defined('ABSPATH') || exit;
11
  <p class="description" style="display: inline">Hex values, e.g. #FF0000</p>
12
  </td>
13
  </tr>
 
 
 
 
 
 
 
14
  <tr>
15
  <th><?php _e('Disable social links', 'newsletter') ?></th>
16
  <td><?php $controls->checkbox('theme_social_disable', ''); ?></td>
@@ -23,7 +30,7 @@ defined('ABSPATH') || exit;
23
  <tr>
24
  <th>Language</th>
25
  <td>
26
- <?php $controls->language(); ?>
27
  </td>
28
  </tr>
29
  <tr>
11
  <p class="description" style="display: inline">Hex values, e.g. #FF0000</p>
12
  </td>
13
  </tr>
14
+ <tr>
15
+ <th><?php _e('External background color', 'newsletter') ?></th>
16
+ <td>
17
+ <?php $controls->color('theme_background'); ?>
18
+ <p class="description" style="display: inline">Hex values, e.g. #FF0000</p>
19
+ </td>
20
+ </tr>
21
  <tr>
22
  <th><?php _e('Disable social links', 'newsletter') ?></th>
23
  <td><?php $controls->checkbox('theme_social_disable', ''); ?></td>
30
  <tr>
31
  <th>Language</th>
32
  <td>
33
+ <?php $controls->language('theme_language'); ?>
34
  </td>
35
  </tr>
36
  <tr>
emails/themes/default/theme.php CHANGED
@@ -14,18 +14,23 @@ global $newsletter, $post;
14
 
15
  defined('ABSPATH') || exit;
16
 
17
- if (empty($theme_options['theme_color']))
18
- $color = '#555555';
19
- else
20
- $color = $theme_options['theme_color'];
 
 
 
 
 
 
 
 
21
 
22
  if (isset($theme_options['theme_posts'])) {
23
  $filters = array();
24
 
25
- if (empty($theme_options['theme_max_posts']))
26
- $filters['posts_per_page'] = 10;
27
- else
28
- $filters['posts_per_page'] = (int) $theme_options['theme_max_posts'];
29
 
30
  if (!empty($theme_options['theme_categories'])) {
31
  $filters['category__in'] = $theme_options['theme_categories'];
@@ -39,95 +44,160 @@ if (isset($theme_options['theme_posts'])) {
39
  $filters['post_type'] = $theme_options['theme_post_types'];
40
  }
41
 
42
- if (!empty($theme_options['language'])) {
43
- $filters['suppress_filters'] = false;
44
- do_action('wpml_switch_language', $theme_options['language']);
45
- }
46
-
47
- $posts = get_posts($filters);
48
  }
49
- ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
50
- <html>
51
- <head>
52
- <!-- Not all email client take care of styles inserted here -->
53
- <style type="text/css" media="all">
54
- a {
55
- text-decoration: none;
56
- color: <?php echo $color; ?>;
57
- }
58
- </style>
59
- </head>
60
- <body style="margin: 0!important; padding: 0!important">
61
- <div style="background-color: #f4f4f4; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color: #666; margin: 0 auto; padding: 0;">
62
-
63
- <br>
64
- <table align="center" bgcolor="#ffffff" width="100%" style="max-width: 600px; width: 100%; border-collapse: collapse; background-color: #000" cellpadding="0" cellspacing="0" border="0">
65
- <tr>
66
- <td valign="top" bgcolor="#ffffff" width="100%" style="font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color: #666;">
67
- <div style="text-align: left; background-color: #fff;">
68
- <div style="text-align: center">
69
- <?php
70
- //HEADER
71
- // if (!empty($theme_options['theme_banner'])) {
72
- // echo $theme_options['theme_banner'];
73
- if (!empty($theme_options['theme_header_logo']['url'])) {
74
- ?>
75
- <img style="max-width: 500px" alt="<?php echo esc_attr($theme_options['main_header_title']) ?>" src="<?php echo esc_attr($theme_options['theme_header_logo']['url']) ?>">
76
- <?php } elseif (!empty($theme_options['main_header_logo']['url'])) { ?>
77
- <img style="max-width: 500px" alt="<?php echo esc_attr($theme_options['main_header_title']) ?>" src="<?php echo esc_attr($theme_options['main_header_logo']['url']) ?>">
78
- <?php } elseif (!empty($theme_options['main_header_title'])) { ?>
79
- <div style="padding: 30px 0; color: #000; font-size: 28px; background-color: #EFEFEF; border-bottom: 1px solid #ddd; text-align: center;">
80
- <?php echo $theme_options['main_header_title'] ?>
81
- </div>
82
- <?php if (!empty($theme_options['main_header_sub'])) { ?>
83
- <div style="padding: 10px 0; color: #000; font-size: 16px; text-align: center;">
84
- <?php echo $theme_options['main_header_sub'] ?>
85
- </div>
86
- <?php } ?>
87
- <?php } else { ?>
88
- <div style="padding: 30px 20px; color: #000; font-size: 28px; background-color: #EFEFEF; border-bottom: 1px solid #ddd; text-align: center;">
89
- <?php echo get_option('blogname'); ?>
90
- </div>
91
- <?php if (!empty($theme_options['main_header_sub'])) { ?>
92
- <div style="padding: 10px 0; color: #000; font-size: 16px; text-align: center;">
93
- <?php echo $theme_options['main_header_sub'] ?>
94
- </div>
95
- <?php } ?>
96
- <?php } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  </div>
 
 
 
 
98
 
99
 
100
- <div style="padding: 10px 20px 20px 20px; background-color: #fff; line-height: 18px">
101
 
102
- <p style="text-align: center; font-size: small;"><a target="_blank" href="{email_url}">View this email online</a></p>
103
 
104
- <p>Here you can start to write your message. Be polite with your readers! Don't forget the subject of this message.</p>
105
- <?php if (!empty($posts)) { ?>
106
- <table cellpadding="5">
107
- <?php foreach ($posts as $post) {
108
- setup_postdata($post); ?>
109
- <tr>
110
- <?php if (isset($theme_options['theme_thumbnails'])) { ?>
111
- <td valign="top"><a target="_blank" href="<?php echo get_permalink($post); ?>"><img width="75" style="width: 75px; min-width: 75px" src="<?php echo newsletter_get_post_image($post->ID); ?>" alt="image"></a></td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  <?php } ?>
113
- <td valign="top">
114
- <a target="_blank" href="<?php echo get_permalink(); ?>" style="font-size: 20px; line-height: 26px"><?php the_title(); ?></a>
115
- <?php if (isset($theme_options['theme_excerpts'])) newsletter_the_excerpt($post); ?>
116
- </td>
117
- </tr>
118
- <?php } ?>
119
- </table>
120
- <?php } ?>
 
 
 
121
 
122
- <?php include WP_PLUGIN_DIR . '/newsletter/emails/themes/default/footer.php'; ?>
123
 
124
- </div>
125
 
126
- </div>
127
- </td>
128
- </tr>
129
- </table>
130
- <br><br>
131
- </div>
132
- </body>
 
 
 
 
133
  </html>
14
 
15
  defined('ABSPATH') || exit;
16
 
17
+ include NEWSLETTER_INCLUDES_DIR . '/helper.php';
18
+
19
+ $color = $theme_options['theme_color'];
20
+ $background = $theme_options['theme_background'];
21
+ $logo = false;
22
+
23
+ if ($theme_options['main_header_logo']['id']) {
24
+ $logo = tnp_media_resize($theme_options['main_header_logo']['id'], array(600, 200));
25
+ }
26
+
27
+ $title = $theme_options['main_header_title'];
28
+ if (empty($title)) $title = get_option('blogname');
29
 
30
  if (isset($theme_options['theme_posts'])) {
31
  $filters = array();
32
 
33
+ $filters['posts_per_page'] = (int) $theme_options['theme_max_posts'];
 
 
 
34
 
35
  if (!empty($theme_options['theme_categories'])) {
36
  $filters['category__in'] = $theme_options['theme_categories'];
44
  $filters['post_type'] = $theme_options['theme_post_types'];
45
  }
46
 
47
+ $posts = Newsletter::instance()->get_posts($filters, $theme_options['theme_language']);
 
 
 
 
 
48
  }
49
+
50
+ ?><!doctype html>
51
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
52
+ <head>
53
+ <title>{email_subject}</title>
54
+ <!--[if !mso]><!-- -->
55
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
56
+ <!--<![endif]-->
57
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
58
+ <meta name="viewport" content="width=device-width, initial-scale=1">
59
+ <style type="text/css">
60
+ a {
61
+ text-decoration: none;
62
+ color: <?php echo $color; ?>;
63
+ }
64
+ #outlook a {
65
+ padding: 0;
66
+ }
67
+
68
+ body {
69
+ margin: 0;
70
+ padding: 0;
71
+ -webkit-text-size-adjust: 100%;
72
+ -ms-text-size-adjust: 100%;
73
+ }
74
+
75
+ table,
76
+ td {
77
+ border-collapse: collapse;
78
+ mso-table-lspace: 0pt;
79
+ mso-table-rspace: 0pt;
80
+ }
81
+
82
+ img {
83
+ border: 0;
84
+ height: auto;
85
+ line-height: 100%;
86
+ outline: none;
87
+ text-decoration: none;
88
+ -ms-interpolation-mode: bicubic;
89
+ }
90
+
91
+ p {
92
+ display: block;
93
+ margin: 13px 0;
94
+ }
95
+ </style>
96
+ <!--[if mso]>
97
+ <xml>
98
+ <o:OfficeDocumentSettings>
99
+ <o:AllowPNG/>
100
+ <o:PixelsPerInch>96</o:PixelsPerInch>
101
+ </o:OfficeDocumentSettings>
102
+ </xml>
103
+ <![endif]-->
104
+
105
+ <!--[if lte mso 11]>
106
+ <style type="text/css">
107
+ .mj-outlook-group-fix { width:100% !important; }
108
+ </style>
109
+ <![endif]-->
110
+ </head>
111
+
112
+ <body style="margin: 0!important; padding: 0!important; background-color: <?php echo $background ?>;">
113
+
114
+ <div style="background-color: <?php echo $background ?>;">
115
+
116
+ <br>
117
+
118
+ <div style="background-color: #ffffff; margin:0px auto;max-width:600px;font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color: #666; padding: 0; border: 0">
119
+
120
+ <?php echo tnp_outlook_wrapper_open() ?>
121
+
122
+ <table align="center" bgcolor="#ffffff" width="100%" style="max-width: 600px; width: 100%; border-collapse: collapse;" cellpadding="0" cellspacing="0" border="0">
123
+ <tr>
124
+ <td valign="top" bgcolor="#ffffff" width="100%" align="left" style="text-align: left; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; color: #666;">
125
+
126
+ <div style="text-align: center">
127
+
128
+ <?php if ($logo) { ?>
129
+ <img style="max-width: 500px" alt="<?php echo esc_attr($title) ?>" src="<?php echo esc_attr($logo) ?>">
130
+ <?php } else { ?>
131
+ <div style="padding: 30px 0; color: #000; font-size: 28px; border-bottom: 1px solid #ddd; text-align: center;">
132
+ <?php echo $title ?>
133
+ </div>
134
+ <?php if (!empty($theme_options['main_header_sub'])) { ?>
135
+ <div style="padding: 10px 0; color: #000; font-size: 16px; text-align: center;">
136
+ <?php echo $theme_options['main_header_sub'] ?>
137
  </div>
138
+ <?php } ?>
139
+ <?php } ?>
140
+
141
+ </div>
142
 
143
 
144
+ <div style="padding: 10px 20px 20px 20px; background-color: #fff; line-height: 18px">
145
 
146
+ <p style="text-align: center; font-size: small;"><a target="_blank" href="{email_url}">View this email online</a></p>
147
 
148
+ <p>Here you can start to write your message. Be polite with your readers! Don't forget the subject of this message.</p>
149
+
150
+ <?php if (!empty($posts)) { ?>
151
+
152
+ <table cellpadding="5">
153
+ <?php foreach ($posts as $post) { ?>
154
+ <?php
155
+ setup_postdata($post);
156
+ $image = false;
157
+
158
+ if (isset($theme_options['theme_thumbnails'])) {
159
+ // Will be replaces with the new media resizer
160
+ $image = tnp_post_thumbnail_src($post, array(75, 75, true));
161
+ }
162
+
163
+ $url = get_permalink($post);
164
+ $excerpt = '';
165
+ if (isset($theme_options['theme_excerpts'])) {
166
+ $excerpt = '<p>' . tnp_post_excerpt($post) . '</p>';
167
+ }
168
+ ?>
169
+ <tr>
170
+ <!-- Image column -->
171
+ <?php if (isset($theme_options['theme_thumbnails'])) { ?>
172
+ <td valign="top" width="75">
173
+ <?php if ($image) { ?>
174
+ <a target="_blank" href="<?php echo $url ?>"><img width="75" style="width: 75px; min-width: 75px" src="<?php echo $image ?>" alt="image"></a>
175
  <?php } ?>
176
+ </td>
177
+ <?php } ?>
178
+
179
+ <td valign="top">
180
+ <a target="_blank" href="<?php echo $url ?>" style="font-size: 20px; line-height: 26px"><?php the_title(); ?></a>
181
+ <?php echo $excerpt ?>
182
+ </td>
183
+ </tr>
184
+ <?php } ?>
185
+ </table>
186
+ <?php } ?>
187
 
188
+ <?php include WP_PLUGIN_DIR . '/newsletter/emails/themes/default/footer.php'; ?>
189
 
190
+ </div>
191
 
192
+ </td>
193
+ </tr>
194
+ </table>
195
+
196
+ <?php echo tnp_outlook_wrapper_close() ?>
197
+
198
+ </div>
199
+
200
+ </div>
201
+
202
+ </body>
203
  </html>
images/theme-screenshot.png CHANGED
Binary file
includes/helper.php CHANGED
@@ -148,3 +148,11 @@ function tnp_media_resize($media_id, $size) {
148
 
149
  return $uploads['baseurl'] . '/newsletter/thumbnails/' . $relative_thumb;
150
  }
 
 
 
 
 
 
 
 
148
 
149
  return $uploads['baseurl'] . '/newsletter/thumbnails/' . $relative_thumb;
150
  }
151
+
152
+ function tnp_outlook_wrapper_open($width = 600) {
153
+ return NewsletterEmails::get_outlook_wrapper_open($width);
154
+ }
155
+
156
+ function tnp_outlook_wrapper_close() {
157
+ return NewsletterEmails::get_outlook_wrapper_close();
158
+ }
includes/module.php CHANGED
@@ -2,6 +2,12 @@
2
 
3
  defined('ABSPATH') || exit;
4
 
 
 
 
 
 
 
5
  class TNP_Composer {
6
 
7
  static $block_dirs = array();
@@ -1127,7 +1133,7 @@ class NewsletterModule {
1127
  }
1128
 
1129
  $email = $this->get_email($id);
1130
-
1131
  // TODO: Check the token? It's really useful?
1132
 
1133
  return $email;
@@ -1339,7 +1345,7 @@ class NewsletterModule {
1339
  }
1340
  return $r;
1341
  }
1342
-
1343
  /**
1344
  * Accepts a user ID or a TNP_User object. Does not check if the user really exists.
1345
  *
@@ -1978,6 +1984,7 @@ class NewsletterModule {
1978
  }
1979
 
1980
 
 
1981
  $text = str_replace('{surname}', $user->surname, $text);
1982
  $text = str_replace('{last_name}', $user->surname, $text);
1983
 
@@ -2005,20 +2012,8 @@ class NewsletterModule {
2005
  $base = (empty($this->options_main['url']) ? get_option('home') : $this->options_main['url']);
2006
  $id_token = '&amp;ni=' . $user->id . '&amp;nt=' . $user->token;
2007
 
2008
-
2009
- $nek = false;
2010
- if ($email) {
2011
- $nek = $this->get_email_key($email);
2012
- $text = str_replace('{email_id}', $email->id, $text);
2013
- $text = str_replace('{email_key}', $nek, $text);
2014
- $text = str_replace('{email_subject}', $email->subject, $text);
2015
- // Deprecated
2016
- $text = str_replace('{subject}', $email->subject, $text);
2017
- $text = $this->replace_url($text, 'EMAIL_URL', $this->build_action_url('v', $user) . '&id=' . $email->id);
2018
- }
2019
-
2020
  $text = $this->replace_url($text, 'SUBSCRIPTION_CONFIRM_URL', $this->build_action_url('c', $user));
2021
- $text = $this->replace_url($text, 'ACTIVATION_URL', $this->build_action_url('v', $user));
2022
 
2023
  // Obsolete.
2024
  $text = $this->replace_url($text, 'FOLLOWUP_SUBSCRIPTION_URL', self::add_qs($base, 'nm=fs' . $id_token));
@@ -2028,8 +2023,18 @@ class NewsletterModule {
2028
  } else {
2029
  $text = $this->replace_url($text, 'SUBSCRIPTION_CONFIRM_URL', '#');
2030
  $text = $this->replace_url($text, 'ACTIVATION_URL', '#');
2031
- $text = $this->replace_url($text, 'UNSUBSCRIPTION_CONFIRM_URL', '#');
2032
- $text = $this->replace_url($text, 'UNSUBSCRIPTION_URL', '#');
 
 
 
 
 
 
 
 
 
 
2033
  }
2034
 
2035
  if (strpos($text, '{subscription_form}') !== false) {
@@ -2294,7 +2299,7 @@ class NewsletterModule {
2294
  }
2295
  return $current_language;
2296
  }
2297
-
2298
  // Polylang
2299
  if (function_exists('pll_current_language')) {
2300
  return pll_current_language();
2
 
3
  defined('ABSPATH') || exit;
4
 
5
+ class TNP_Media {
6
+ var $url;
7
+ var $width;
8
+ var $height;
9
+ }
10
+
11
  class TNP_Composer {
12
 
13
  static $block_dirs = array();
1133
  }
1134
 
1135
  $email = $this->get_email($id);
1136
+
1137
  // TODO: Check the token? It's really useful?
1138
 
1139
  return $email;
1345
  }
1346
  return $r;
1347
  }
1348
+
1349
  /**
1350
  * Accepts a user ID or a TNP_User object. Does not check if the user really exists.
1351
  *
1984
  }
1985
 
1986
 
1987
+ // Deprecated
1988
  $text = str_replace('{surname}', $user->surname, $text);
1989
  $text = str_replace('{last_name}', $user->surname, $text);
1990
 
2012
  $base = (empty($this->options_main['url']) ? get_option('home') : $this->options_main['url']);
2013
  $id_token = '&amp;ni=' . $user->id . '&amp;nt=' . $user->token;
2014
 
 
 
 
 
 
 
 
 
 
 
 
 
2015
  $text = $this->replace_url($text, 'SUBSCRIPTION_CONFIRM_URL', $this->build_action_url('c', $user));
2016
+ $text = $this->replace_url($text, 'ACTIVATION_URL', $this->build_action_url('c', $user));
2017
 
2018
  // Obsolete.
2019
  $text = $this->replace_url($text, 'FOLLOWUP_SUBSCRIPTION_URL', self::add_qs($base, 'nm=fs' . $id_token));
2023
  } else {
2024
  $text = $this->replace_url($text, 'SUBSCRIPTION_CONFIRM_URL', '#');
2025
  $text = $this->replace_url($text, 'ACTIVATION_URL', '#');
2026
+ }
2027
+
2028
+ if ($email) {
2029
+ $nek = $this->get_email_key($email);
2030
+ $text = str_replace('{email_id}', $email->id, $text);
2031
+ $text = str_replace('{email_key}', $nek, $text);
2032
+ $text = str_replace('{email_subject}', $email->subject, $text);
2033
+ // Deprecated
2034
+ $text = str_replace('{subject}', $email->subject, $text);
2035
+ $text = $this->replace_url($text, 'EMAIL_URL', $this->build_action_url('v', $user) . '&id=' . $email->id);
2036
+ } else {
2037
+ $text = $this->replace_url($text, 'EMAIL_URL', '#');
2038
  }
2039
 
2040
  if (strpos($text, '{subscription_form}') !== false) {
2299
  }
2300
  return $current_language;
2301
  }
2302
+
2303
  // Polylang
2304
  if (function_exists('pll_current_language')) {
2305
  return pll_current_language();
includes/themes.php CHANGED
@@ -1,225 +1,184 @@
1
  <?php
2
- if (!defined('ABSPATH')) exit;
 
 
 
 
 
 
 
 
 
 
3
 
4
  class NewsletterThemes {
5
 
6
  var $module;
7
  var $is_extension = false;
 
 
 
 
 
 
 
 
 
 
8
 
9
  function __construct($module, $is_extension = false) {
10
  $this->module = $module;
11
  $this->is_extension = $is_extension;
12
  }
13
 
14
- /** Loads all themes of a module (actually only "emails" module makes sense). Themes are located inside the subfolder
15
- * named as the module on plugin folder and on a subfolder named as the module on wp-content/newsletter folder (which
16
- * must be manually created).
17
- *
18
- * @param type $module
19
- * @return type
 
 
 
 
 
 
 
 
20
  */
21
- function get_all() {
22
- $list = array();
23
 
24
- $dir = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes';
25
- $handle = @opendir($dir);
26
-
27
- if ($handle !== false) {
28
- while ($file = readdir($handle)) {
29
- if ($file == '.' || $file == '..')
30
- continue;
31
- if (!is_file($dir . '/' . $file . '/theme.php'))
32
- continue;
33
- $list[$file] = $file;
34
- }
35
- closedir($handle);
36
  }
37
-
38
- if (!$this->is_extension) {
39
- $dir = NEWSLETTER_DIR . '/' . $this->module . '/themes';
40
- $handle = @opendir($dir);
41
-
42
- if ($handle !== false) {
43
- while ($file = readdir($handle)) {
44
- if ($file == '.' || $file == '..')
45
- continue;
46
- if (isset($list[$file]))
47
- continue;
48
- if (!is_file($dir . '/' . $file . '/theme.php'))
49
- continue;
50
-
51
- $list[$file] = $file;
52
- }
53
- closedir($handle);
54
- }
55
  }
56
 
57
- return $list;
58
- }
59
-
60
- function themescmp($a, $b) {
61
- $al = strtolower($a['name']);
62
- $bl = strtolower($b['name']);
63
- if ($al == 'default') {
64
- return -1;
 
 
 
 
 
 
 
 
 
 
65
  }
66
- return (strcmp($al, $bl));
67
  }
68
 
69
  function get_all_with_data() {
70
  $list = array();
71
 
 
 
 
 
 
 
 
72
  $dir = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes';
73
  $handle = @opendir($dir);
74
 
75
  if ($handle !== false) {
76
  while ($file = readdir($handle)) {
77
- if ($file == '.' || $file == '..') {
78
- continue;
79
- }
80
- if (isset($list[$file])) {
81
- continue;
82
- }
83
- if (!is_file($dir . '/' . $file . '/theme.php')) {
84
  continue;
85
  }
86
- $data = get_file_data($dir . '/' . $file . '/theme.php', array('name' => 'Name', 'type' => 'Type', 'description'=>'Description'));
87
- $data['id'] = $file;
88
- if (empty($data['name'])) {
89
- $data['name'] = $file;
90
- }
91
- if (empty($data['type'])) {
92
- $data['type'] = 'standard';
93
- }
94
- $screenshot = $dir . '/' . $file . '/screenshot.png';
95
- if (is_file($screenshot)) {
96
- $data['screenshot'] = $this->get_theme_url($file) . '/screenshot.png';
97
- } else {
98
- $data['screenshot'] = plugins_url('newsletter') . '/images/theme-screenshot.png';
99
- }
100
- $list[$file] = $data;
101
  }
102
  closedir($handle);
103
  }
 
 
 
104
 
105
- if (!$this->is_extension) {
106
- $dir = NEWSLETTER_DIR . '/' . $this->module . '/themes';
107
- $handle = @opendir($dir);
108
-
109
- if ($handle !== false) {
110
- while ($file = readdir($handle)) {
111
- if ($file == '.' || $file == '..') {
112
- continue;
113
- }
114
- if (!is_file($dir . '/' . $file . '/theme.php')) {
115
- continue;
116
- }
117
- $data = get_file_data($dir . '/' . $file . '/theme.php', array('name' => 'Name', 'type' => 'Type', 'description'=>'Description'));
118
- $data['id'] = $file;
119
- if (empty($data['name'])) {
120
- $data['name'] = $file;
121
- }
122
- if (empty($data['type'])) {
123
- $data['type'] = 'standard';
124
- }
125
- $screenshot = $dir . '/' . $file . '/screenshot.png';
126
- if (is_file($screenshot)) {
127
- $data['screenshot'] = $this->get_theme_url($file) . '/screenshot.png';
128
- } else {
129
- $data['screenshot'] = plugins_url('newsletter') . '/images/theme-screenshot.png';
130
- }
131
- $list[$file] = $data;
132
- }
133
- closedir($handle);
134
  }
135
- }
136
 
137
- usort($list, array($this, "themescmp"));
 
138
 
139
  return $list;
140
  }
141
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  /**
143
  *
144
  * @param type $theme
145
  * @param type $options
146
  * @param type $module
147
  */
148
- function save_options($theme, &$options) {
149
- add_option('newsletter_' . $this->module . '_theme_' . $theme, array(), null, 'no');
150
  $theme_options = array();
151
  foreach ($options as $key => &$value) {
152
  if (substr($key, 0, 6) != 'theme_')
153
  continue;
154
  $theme_options[$key] = $value;
155
  }
156
- update_option('newsletter_' . $this->module . '_theme_' . $theme, $theme_options);
157
  }
158
 
159
- function get_options($theme) {
160
- $options = get_option('newsletter_' . $this->module . '_theme_' . $theme);
161
  // To avoid merge problems.
162
  if (!is_array($options)) {
163
  $options = array();
164
  }
165
- $file = $this->get_file_path($theme, 'theme-defaults.php');
 
 
 
166
  if (is_file($file)) {
167
  @include $file;
168
  }
169
  if (isset($theme_defaults) && is_array($theme_defaults)) {
170
  $options = array_merge($theme_defaults, $options);
171
  }
172
- return $options;
173
- }
174
-
175
- function get_file_path($theme, $file) {
176
- $path = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes/' . $theme . '/' . $file;
177
- if (is_file($path)) {
178
- return $path;
179
- } else {
180
- return NEWSLETTER_DIR . '/' . $this->module . '/themes/' . $theme . '/' . $file;
181
- }
182
- }
183
-
184
- function get_theme_url($theme) {
185
- if ($this->is_extension) {
186
- return WP_CONTENT_URL . '/extensions/newsletter/' . $this->module . '/themes/' . $theme;
187
- }
188
-
189
- $path = NEWSLETTER_DIR . '/' . $this->module . '/themes/' . $theme;
190
- if (is_dir($path)) {
191
- return plugins_url('newsletter') . '/' . $this->module . '/themes/' . $theme;
192
- } else {
193
- return WP_CONTENT_URL . '/extensions/newsletter/' . $this->module . '/themes/' . $theme;
194
  }
195
- }
196
-
197
- function get_default_options() {
198
- if ($this->is_extension) {
199
- $path2 = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes/' . $theme . '/languages';
200
- @include $path2 . '/en_US.php';
201
- @include $path2 . '/' . WPLANG . '.php';
202
- } else {
203
- $path1 = NEWSLETTER_DIR . '/' . $this->module . '/themes/' . $theme . '/languages';
204
- $path2 = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes/' . $theme . '/languages';
205
- @include $path1 . '/en_US.php';
206
- @include $path2 . '/en_US.php';
207
- @include $path1 . '/' . WPLANG . '.php';
208
- @include $path2 . '/' . WPLANG . '.php';
209
  }
210
-
211
- if (!is_array($options))
212
- return array();
213
  return $options;
214
  }
215
-
216
  }
217
 
218
- function nt_option($name, $def = null) {
219
- $options = get_option('newsletter_email');
220
- $option = $options['theme_' . $name];
221
- if (!isset($option))
222
- return $def;
223
- else
224
- return $option;
225
- }
1
  <?php
2
+
3
+ defined('ABSPATH') || exit;
4
+
5
+ /**
6
+ * Registers a Newsletter theme to be shown as option on standard newsletter creation
7
+ * Designers love functions...
8
+ * @param string $dir The absolute path of a folder containing a Newsletter theme
9
+ */
10
+ function tnp_register_theme($dir) {
11
+ NewsletterThemes::register_theme($dir);
12
+ }
13
 
14
  class NewsletterThemes {
15
 
16
  var $module;
17
  var $is_extension = false;
18
+ static $registered_theme_dirs = array();
19
+
20
+ static function register_theme($dir) {
21
+ if (!file_exists($dir . '/theme.php')) {
22
+ $error = new WP_Error('1', 'theme.php missing on folder ' . $dir);
23
+ return $error;
24
+ }
25
+ self::$registered_theme_dirs[] = $dir;
26
+ return true;
27
+ }
28
 
29
  function __construct($module, $is_extension = false) {
30
  $this->module = $module;
31
  $this->is_extension = $is_extension;
32
  }
33
 
34
+ /**
35
+ * Build an associative array which represent a theme starting from the theme
36
+ * parsing the files in the theme folder.<br>
37
+ * dir - the full path to the theme folder<br>
38
+ * url - the full url to the theme folder (to reference assets like images)<br>
39
+ * id - the folder name, used as unique identifier<br>
40
+ * screenshot - url to an image representing the theme (400x400)<br>
41
+ * name - the readable theme name extracted from the theme.php<br>
42
+ *
43
+ * description - not used
44
+ * type - not used
45
+ *
46
+ * @param string $dir
47
+ * @return array
48
  */
49
+ function build_theme($dir) {
 
50
 
51
+ if (!is_dir($dir)) {
52
+ return null;
 
 
 
 
 
 
 
 
 
 
53
  }
54
+
55
+ if (!is_file($dir . '/theme.php')) {
56
+ return null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
  }
58
 
59
+ $data = get_file_data($dir . '/theme.php', array('name' => 'Name', 'type' => 'Type', 'description' => 'Description'));
60
+ $data['id'] = basename($dir);
61
+ $data['dir'] = $dir;
62
+ if (empty($data['name'])) {
63
+ $data['name'] = $data['id'];
64
+ }
65
+
66
+ if (empty($data['type'])) {
67
+ $data['type'] = 'standard';
68
+ }
69
+ $relative_dir = substr($dir, strlen(WP_CONTENT_DIR));
70
+ $data['url'] = content_url($relative_dir);
71
+ $screenshot = $dir . '/screenshot.png';
72
+ if (is_file($screenshot)) {
73
+ $relative_dir = substr($dir, strlen(WP_CONTENT_DIR));
74
+ $data['screenshot'] = $data['url'] . '/screenshot.png';
75
+ } else {
76
+ $data['screenshot'] = plugins_url('newsletter') . '/images/theme-screenshot.png';
77
  }
78
+ return $data;
79
  }
80
 
81
  function get_all_with_data() {
82
  $list = array();
83
 
84
+ // Packaged themes
85
+ $list['default'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/default');
86
+ $list['blank'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/blank');
87
+ $list['cta-2015'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/cta-2015');
88
+ $list['vimeo-like'] = $this->build_theme(NEWSLETTER_DIR . '/emails/themes/vimeo-like');
89
+
90
+ // Extensions folder scan
91
  $dir = WP_CONTENT_DIR . '/extensions/newsletter/' . $this->module . '/themes';
92
  $handle = @opendir($dir);
93
 
94
  if ($handle !== false) {
95
  while ($file = readdir($handle)) {
96
+
97
+ $data = $this->build_theme($dir . '/' . $file);
98
+
99
+ if (!$data || isset($list[$data['id']])) {
 
 
 
100
  continue;
101
  }
102
+
103
+ $list[$data['id']] = $data;
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
105
  closedir($handle);
106
  }
107
+
108
+ // Registered themes
109
+ do_action('newsletter_register_themes');
110
 
111
+ foreach (self::$registered_theme_dirs as $dir) {
112
+ $data = $this->build_theme($dir);
113
+ if (!$data || isset($list[$data['id']])) {
114
+ continue;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  }
 
116
 
117
+ $list[$data['id']] = $data;
118
+ }
119
 
120
  return $list;
121
  }
122
 
123
+ /**
124
+ * Returns a data structure containing the theme details.
125
+ *
126
+ * @param string $id
127
+ * @return array
128
+ */
129
+ function get_theme($id) {
130
+ $themes = $this->get_all_with_data();
131
+ if (isset($themes[$id])) {
132
+ return $themes[$id];
133
+ }
134
+ return null;
135
+ }
136
+
137
  /**
138
  *
139
  * @param type $theme
140
  * @param type $options
141
  * @param type $module
142
  */
143
+ function save_options($theme_id, &$options) {
 
144
  $theme_options = array();
145
  foreach ($options as $key => &$value) {
146
  if (substr($key, 0, 6) != 'theme_')
147
  continue;
148
  $theme_options[$key] = $value;
149
  }
150
+ update_option('newsletter_' . $this->module . '_theme_' . $theme_id, $theme_options, false);
151
  }
152
 
153
+ function get_options($theme_id) {
154
+ $options = get_option('newsletter_' . $this->module . '_theme_' . $theme_id);
155
  // To avoid merge problems.
156
  if (!is_array($options)) {
157
  $options = array();
158
  }
159
+
160
+ $theme = $this->get_theme($theme_id);
161
+
162
+ $file = $theme['dir'] . '/theme-defaults.php';
163
  if (is_file($file)) {
164
  @include $file;
165
  }
166
  if (isset($theme_defaults) && is_array($theme_defaults)) {
167
  $options = array_merge($theme_defaults, $options);
168
  }
169
+
170
+ // main options merge
171
+ $main_options = Newsletter::instance()->options;
172
+ foreach ($main_options as $key => $value) {
173
+ $options['main_' . $key] = $value;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
  }
175
+
176
+ $info_options = Newsletter::instance()->get_options('info');
177
+ foreach ($info_options as $key => $value) {
178
+ $options['main_' . $key] = $value;
 
 
 
 
 
 
 
 
 
 
179
  }
180
+
 
 
181
  return $options;
182
  }
 
183
  }
184
 
 
 
 
 
 
 
 
 
plugin.php CHANGED
@@ -4,14 +4,14 @@
4
  Plugin Name: Newsletter
5
  Plugin URI: https://www.thenewsletterplugin.com/plugins/newsletter
6
  Description: Newsletter is a cool plugin to create your own subscriber list, to send newsletters, to build your business. <strong>Before update give a look to <a href="https://www.thenewsletterplugin.com/category/release">this page</a> to know what's changed.</strong>
7
- Version: 6.4.4
8
  Author: Stefano Lissa & The Newsletter Team
9
  Author URI: https://www.thenewsletterplugin.com
10
  Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
11
  Text Domain: newsletter
12
  License: GPLv2 or later
13
 
14
- Copyright 2009-2019 The Newsletter Team (email: info@thenewsletterplugin.com, web: https://www.thenewsletterplugin.com)
15
 
16
  Newsletter is free software: you can redistribute it and/or modify
17
  it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@
28
 
29
  */
30
 
31
- define('NEWSLETTER_VERSION', '6.4.4');
32
 
33
  global $newsletter, $wpdb;
34
 
@@ -196,8 +196,10 @@ class Newsletter extends NewsletterModule {
196
  static $slugs = array();
197
  if (empty($slugs)) {
198
  $addons = $this->getTnpExtensions();
199
- foreach ($addons as $addon) {
200
- $slugs[] = $addon->wp_slug;
 
 
201
  }
202
  }
203
  if (array_search($plugin_file, $slugs) !== false) {
@@ -1155,6 +1157,10 @@ class Newsletter extends NewsletterModule {
1155
  if (empty($extensions_json)) {
1156
  $url = "http://www.thenewsletterplugin.com/wp-content/extensions.json?ver=" . NEWSLETTER_VERSION;
1157
  $extensions_response = wp_remote_get($url);
 
 
 
 
1158
  $extensions_json = wp_remote_retrieve_body($extensions_response);
1159
  if (!empty($extensions_json)) {
1160
  set_transient('tnp_extensions_json', $extensions_json, 72 * 60 * 60);
4
  Plugin Name: Newsletter
5
  Plugin URI: https://www.thenewsletterplugin.com/plugins/newsletter
6
  Description: Newsletter is a cool plugin to create your own subscriber list, to send newsletters, to build your business. <strong>Before update give a look to <a href="https://www.thenewsletterplugin.com/category/release">this page</a> to know what's changed.</strong>
7
+ Version: 6.4.6
8
  Author: Stefano Lissa & The Newsletter Team
9
  Author URI: https://www.thenewsletterplugin.com
10
  Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
11
  Text Domain: newsletter
12
  License: GPLv2 or later
13
 
14
+ Copyright 2009-2020 The Newsletter Team (email: info@thenewsletterplugin.com, web: https://www.thenewsletterplugin.com)
15
 
16
  Newsletter is free software: you can redistribute it and/or modify
17
  it under the terms of the GNU General Public License as published by
28
 
29
  */
30
 
31
+ define('NEWSLETTER_VERSION', '6.4.6');
32
 
33
  global $newsletter, $wpdb;
34
 
196
  static $slugs = array();
197
  if (empty($slugs)) {
198
  $addons = $this->getTnpExtensions();
199
+ if ($addons) {
200
+ foreach ($addons as $addon) {
201
+ $slugs[] = $addon->wp_slug;
202
+ }
203
  }
204
  }
205
  if (array_search($plugin_file, $slugs) !== false) {
1157
  if (empty($extensions_json)) {
1158
  $url = "http://www.thenewsletterplugin.com/wp-content/extensions.json?ver=" . NEWSLETTER_VERSION;
1159
  $extensions_response = wp_remote_get($url);
1160
+ if (is_wp_error($extensions_response)) {
1161
+ $this->logger->error($extensions_response);
1162
+ return false;
1163
+ }
1164
  $extensions_json = wp_remote_retrieve_body($extensions_response);
1165
  if (!empty($extensions_json)) {
1166
  set_transient('tnp_extensions_json', $extensions_json, 72 * 60 * 60);
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Tags: email, email marketing, newsletter, newsletter subscribers, welcome email, signup forms, contact, lead generation, popup, marketing automation
3
  Requires at least: 3.4.0
4
  Tested up to: 5.3.2
5
- Stable tag: 6.4.4
6
  Requires PHP: 5.6
7
  Contributors: satollo,webagile,michael-travan
8
 
@@ -109,6 +109,22 @@ Thank you, The Newsletter Team
109
 
110
  == Changelog ==
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  = 6.4.4 =
113
 
114
  * Automatic language detection on subscription when available
@@ -307,1676 +323,3 @@ Thank you, The Newsletter Team
307
 
308
  * The Newsletter Plugin Composer - A new revamped drag & drop composer
309
  * Several improvements and fixes
310
-
311
- = 5.9.5 =
312
-
313
- * Changed edit and delete icons on composer to avoid conflict with FontAwesome JS
314
-
315
- = 5.9.4 =
316
-
317
- * Added multi subscriber deletion
318
-
319
- = 5.9.3 =
320
-
321
- * Fixed multi newsletter deletion warning
322
- * Fixed privacy checkbox
323
- * Fixed a link on header warning
324
-
325
- = 5.9.2 =
326
-
327
- * Fixed a debug notice on subscription page
328
-
329
- = 5.9.1 =
330
-
331
- * Fixed language support on some shortcodes
332
-
333
- = 5.9.0 =
334
-
335
- * Fixes on privacy setting with multilanguage plugins
336
- * Added per language statistics on subscribers statistics panel
337
- * Added language set action on subscribers maintenance panel
338
- * Separated the pre confirm and post confirm tokens
339
-
340
- = 5.8.9 =
341
-
342
- * Global constant to block the media resizing
343
- * Resized thumbnails folder changed to the uploads folder (newsletter/thumbnails subfolder)
344
- * Fall back on first post gallery image if the featured image is missing
345
- * Patch to block third party plugins visual editor injection in out pages
346
- * Fix media selector button on visual composer
347
-
348
- = 5.8.8 =
349
-
350
- * Fixed multilanguage text for newsletter page
351
- * Fixed a profile panel debug notice
352
-
353
- = 5.8.7 =
354
-
355
- * Tags replacement even on template for messages
356
- * Fixed profile page labels translation
357
- * Added text and title color on hero block
358
- * Added text color on preheader block
359
- * Fixed giphy options panel
360
-
361
-
362
- = 5.8.6 =
363
-
364
- * Improved geolocation support
365
- * Improved composer image block
366
-
367
- = 5.8.5 =
368
-
369
- * Reverted back to select2 3.x
370
- * Added last_ip field for better geolocation
371
- * Changed the thumbnails folder from wp-content to wp-content/uploads
372
- * Added a more uniform internal mailer management
373
- * Improved the mail test on status panel
374
-
375
- = 5.8.4 =
376
-
377
- * Fixed export error
378
-
379
- = 5.8.3 =
380
-
381
- * Fixed a debug notice with PHP 7.2
382
- * Status, SMTP and main settings limited to the administrators
383
- * Fixed buttons overlapping on composer text block
384
- * Support for the advanced import addons
385
-
386
- = 5.8.2 =
387
-
388
- * Fixed shortcode check on dedicated page
389
-
390
- = 5.8.1 =
391
-
392
- * Delivery expected time indicator on status panel
393
- * Fixed notice on email token missing
394
- * Addons installation availability on status panel
395
- * Option to remove the dedicated page check
396
-
397
- = 5.8.0 =
398
-
399
- * Addons manager compatibility
400
-
401
- = 5.7.9 =
402
-
403
- * Fixes on add-ons panel
404
-
405
- = 5.7.8 =
406
-
407
- * Support for the [Add on Manager](https://www.thenewsletterplugin.com/documentation/how-to-install-the-addons-manager)
408
-
409
- = 5.7.7 =
410
-
411
- * TinyMCE library fix
412
-
413
- = 5.7.6 =
414
-
415
- * Included third party's js libraries
416
-
417
- = 5.7.5 =
418
-
419
- * Init hook priority fix for who uses alternative wp cron
420
-
421
- = 5.7.4 =
422
-
423
- * Support for first and last name from wp users integration extension
424
- * CSS fix for few themes
425
-
426
- = 5.7.3 =
427
-
428
- * Fixed block padding warning
429
- * Fixed lists display on import panel
430
- * Fixed lists display on targeting panel when in multilanguage mode
431
-
432
- = 5.7.2 =
433
-
434
- * Improvements on posts block
435
- * New hero block layout
436
- * Transaltepress extension compatibility pack
437
-
438
- = 5.7.1 =
439
-
440
- * Improvements on posts block
441
-
442
- = 5.7.0 =
443
-
444
- * Cancellation error message fix
445
-
446
- = 5.6.9 =
447
-
448
- * Improved separator block for Outlook compatibility
449
- * Fixed "read more" button on posts block
450
- * Fixed lists on notification email
451
-
452
- = 5.6.8 =
453
-
454
- * Removed debug notices
455
-
456
- = 5.6.7 =
457
-
458
- * Fixed multilanguage support for service messages template
459
-
460
- = 5.6.6 =
461
-
462
- * Fixed unsubscription two-steps process message
463
-
464
- = 5.6.5 =
465
-
466
- * Fixed email validation message
467
-
468
- = 5.6.4 =
469
-
470
- * Fixed reactivation message display
471
-
472
- = 5.6.3 =
473
-
474
- * Removed unused files
475
- * Fixed few links with permalink disabled and WMPL language as parameter
476
- * Fixed the minimal form with WPML
477
-
478
- = 5.6.2 =
479
-
480
- * readme.txt improvements
481
- * Fixed subscribe URL for blogs with WPML and permalinks disabled
482
-
483
- = 5.6.1 =
484
-
485
- * Fix debug notice on profile URL when no privacy page is set on WP
486
- * Fixed export list filter
487
-
488
- = 5.6.0 =
489
-
490
- * Lists pre-assignment by language (no more need to customize the newsletter shortcode or duplicate the widgets)
491
- * Improved Polylang support (still not fully tested)
492
-
493
- = 5.5.9 =
494
-
495
- * Fixed a possible debug notice on subscription without a dedicated page configured
496
- * Fixed minimal widget with WPML language selector without permalink
497
-
498
- = 5.5.8 =
499
-
500
- * Fixed multilanguage text on profile page
501
- * Fix the image resizer for small images
502
- * Page message url based on subscriber language if available
503
-
504
- = 5.5.7 =
505
-
506
- * Fixed the unsubscription multilanguage messages using even the user language
507
- * Fixed the goodby message
508
-
509
- = 5.5.5 =
510
-
511
- * Minimal form fix with WPML
512
- * Privacy label fix with WPML
513
-
514
- = 5.5.4 =
515
-
516
- * WPML integration. [Read our integration page](https://www.thenewsletterplugin.com/documentation/multilanguage)
517
-
518
- = 5.5.3 =
519
-
520
- * Updated tinyMCE for Edge compatibility
521
- * Debug mode notification
522
- * Fix debug notice on profile page
523
-
524
- = 5.5.2 =
525
-
526
- * Fixed the multiple dedicated page creation on Welcome screen
527
-
528
- = 5.5.1 =
529
-
530
- * Fixed few debug notices
531
- * API unsubscription messages fix
532
-
533
- = 5.5.0 =
534
-
535
- * Added IP storage control
536
- * Fixed a warning and a debug notice
537
- * Aggregated warnings on admin side
538
-
539
- = 5.4.9 =
540
-
541
- * Lists management in APIs
542
- * Code cleanup
543
- * New subscribers data export controls
544
- * New global check and notice if the dedicated page is misconfigured
545
- * Fix privacy note display on profile page even without a privacy url set
546
-
547
- = 5.4.8 =
548
-
549
- * Fixed the (duplicated) style.css reference
550
-
551
- = 5.4.7 =
552
-
553
- * Fixed pre-assigned lists
554
-
555
- = 5.4.6 =
556
-
557
- * Fixed few debug notices
558
- * Added more translatable texts
559
- * Improved performances
560
- * Profile saving used as confirmation
561
- * Fixed the captcha layout and style
562
- * Fix initialization default messages template on first install
563
-
564
- = 5.4.5 =
565
-
566
- * Fixed tested up version value in readme.txt
567
- * Added support for the WP privacy url
568
- * Added initialization values for company info on first installation
569
- * Fixed few debug notices
570
- * Added button in lists panel to dissociate the list from every subscriber (list clean up)
571
- * Fix of messages on profile editing panel
572
-
573
- = 5.4.4 =
574
-
575
- * Fixed warning on default option init
576
-
577
- = 5.4.3 =
578
-
579
- * Improved the profile editing page and the email change check with activation id in double opt-in mode
580
- * New profile editing panel configuration
581
- * Privacy notice optionally even on profile panel
582
- * New list change logging with source
583
- * Removed old tabled-layout on profile editing page
584
- * Clean up procedure for statistics and logs tables
585
- * Removed old widget layout
586
- * New options on list management panel
587
- * Forced lists option removed from the subscription panel
588
- * Dedicated page moved to main settings panel
589
- * Tracking default value on main settings panel
590
- * Removed old translations
591
- * Added default option files
592
- * Service message template no more on PHP file, the configurable template must be used
593
- * Reactivation after cancellation feature
594
- * Revised and simplified all texts for easy translation by the community
595
- * The messages alternative page (/extensions/newsletter/subscription/page.php) is now deprecated and will be removed
596
- * New [cancellation documentation page published](/extensions/newsletter/subscription/page.php)
597
- * Integrated SMTP is now deprecated (soon will be replaced with a **free extension**)
598
- * {home_url} tag is now deprecated, use {blog_url} instead
599
- * Introduced tags {company_name} and {company_address} replaced by info in the company info configuration
600
- * Default template for messages has been improved with company contacts
601
- * Repeated subscriptions management
602
- * Generally improved the performances with caching and code clean up
603
- * General CSS moved to the main settings panel
604
- * Option to disable the default CSS
605
- * Profile export fix
606
-
607
- = 5.4.2 =
608
-
609
- * SVN Deleted files fix
610
-
611
- = 5.4.1 =
612
-
613
- * Fixed debug notice in the standard widget
614
- * Gender label fix
615
- * Fixed the global variable conflict on widget (rare case)
616
- * CSS fix on widget list field
617
-
618
- = 5.4.0 =
619
-
620
- * Fix lists as dropdown in the widget
621
-
622
- = 5.3.9 =
623
-
624
- * Version number fix
625
-
626
- = 5.3.8 =
627
-
628
- * Fixed failed insert on ip null
629
-
630
- = 5.3.7 =
631
-
632
- * Fixed the newsletter deletion with clean up of log tables
633
-
634
- = 5.3.6 =
635
-
636
- * Fixed composer block background editing
637
- * Fixed API functions
638
- * Minor fixes
639
-
640
- = 5.3.5 =
641
-
642
- * Fixed error notice on profile.php
643
-
644
- = 5.3.4 =
645
-
646
- * GDPR ready
647
- * Maintenance option to add all subscriber without a list to a specified list
648
- * Dismissed the tabled subscription form
649
- * Fixed privacy checkbox label for field shortcode
650
- * Logs of lists change
651
- * Last activity tracking
652
- * Retargeting/deletion of inactive subscribers
653
- * Privacy checkbox without the checkbox (option)
654
- * Personal data export
655
- * Improved subscriber deletion with cleanup of log tables
656
-
657
- = 5.3.3 =
658
-
659
- * Added GIPHY composer block
660
- * Added raw HTML composer block
661
- * API: Newsletters and subscribers lists
662
-
663
- = 5.3.2 =
664
-
665
- * Security panel reorganized
666
- * Added Akismet spam check
667
-
668
- = 5.3.1 =
669
-
670
- * Name and last name check for spam
671
- * 404 responses on error condition
672
- * jQuery fix
673
- * Email cleanup on admin edit panel
674
- * Name check for spam on subscription
675
-
676
- = 5.3.0 =
677
-
678
- * CAPTCHA system
679
- * IP black list
680
- * Email address black list
681
-
682
- = 5.2.8 =
683
-
684
- * Redirect fix
685
-
686
- = 5.2.7 =
687
-
688
- * Improved block layout
689
- * Added filter on profile url
690
- * Removed old obsolete query
691
- * Improved the antibot
692
- * Antiflood configurable to 30 minutes
693
-
694
- = 5.2.6 =
695
-
696
- * Fixed url attributes on privacy field shortcode
697
- * Fixed few debug notices
698
- * (NEW) PHP API for coders (and companion REST API with the free Newsletter API extension)
699
-
700
- = 5.2.4 =
701
-
702
- * readme.txt fix
703
- * Improved extension version checking
704
- * Changed the database timeout check on status panel
705
- * Added support for pixel perfect thumb nails of media library images
706
-
707
- = 5.2.3 =
708
-
709
- * Newsletter subject ideas popup
710
-
711
- = 5.2.2 =
712
-
713
- * Removed create_function from widgets (compatibility PHP 7.2)
714
- * Fixed the list exclusion condition
715
- * Added [options to Newsletter shortcodes](https://www.thenewsletterplugin.com/documentation/subscription-form-shortcodes) to show the lists as dropdown
716
-
717
- = 5.2.1 =
718
-
719
- * Commit fix
720
-
721
- = 5.2.0 =
722
-
723
- * Fixed email_url tag (broken to fix Automated in previous version)
724
-
725
- = 5.1.9 =
726
-
727
- * Fixed debug notice on test email from Automated Extension
728
-
729
- = 5.1.8 =
730
-
731
- * Newsletter page creation fix
732
-
733
- = 5.1.7 =
734
-
735
- * NEW! Welcome wizard
736
-
737
- = 5.1.6 =
738
-
739
- * Fix list selection on first save
740
-
741
- = 5.1.5 =
742
-
743
- * Re-confirmation is now allows for unsubscribed and bounced
744
- * Fixed to minimal widget and minimal css
745
- * Fixed the approx. subscriber count on newsletter creation (was showing encoded data)
746
-
747
- = 5.1.4 =
748
-
749
- * Fixed notices on email edit panel
750
- * Added microdata to the call to action block
751
- * Added filter on name field while sending. [See this post](https://www.thenewsletterplugin.com/?p=54292)
752
- * Improved the online [viewability rules](https://www.thenewsletterplugin.com/documentation/newsletters-module#view-online)
753
- * Fixed theme editor bad behavior
754
- * Fixed the min size of thumbnails on default theme
755
- * Removed references to font awesome where not used
756
-
757
- = 5.1.3 =
758
-
759
- * Fixed newsletter duplication which was loosing the editor type
760
- * Fixed gender saving on targeting
761
-
762
- = 5.1.2 =
763
-
764
- * Improved the speed report on status panel
765
- * Removed the obsolete diagnostic panel
766
- * Removed obsolete code
767
- * Removed the locked content menu entry (please install the free content lock extension)
768
- * Fixed validation call on widget minimal
769
- * Added more translatable strings
770
- * Fixed the editor CSS when a theme has its own
771
- * Confirmation is now activation
772
- * CSS clean up
773
-
774
- = 5.1.1 =
775
-
776
- * Fix on email check
777
-
778
- = 5.1.0 =
779
-
780
- * "ncu" parameter can be used for alternative welcome page as well, not only confirmation, when single opt in is selected
781
- * Removed the old "email alternative" to create custom subscription messages templates (has no effects)
782
- * Added the antiflood system
783
-
784
- = 5.0.9 =
785
-
786
- * Removed wp users integration and locked content now available as FREE optional extensions (to make the plugin smaller)
787
- * Removed obsolete code loading old-style extensions
788
-
789
- = 5.0.8 =
790
-
791
- * Improved select 2 layout
792
- * Support for conditional comments in the editor
793
-
794
- = 5.0.7 =
795
-
796
- * Fix a database table field size
797
-
798
- = 5.0.6 =
799
-
800
- * Improved performance with new db indexes
801
- * Fixed a bug in social URLs
802
- * Home URL check on status panel
803
- * Fixed a not removable notice
804
-
805
- = 5.0.5 =
806
-
807
- * Fixed an administration notice removal
808
-
809
- = 5.0.4 =
810
-
811
- * Fix media selector for blog without absolute URLs
812
- * Notice to install the wp users integration
813
- * Added workaround for XSS protection in chrome on custom form when they contains JS code
814
-
815
- = 5.0.3 =
816
-
817
- * Added {email_url_encoded} tag
818
- * Changed https to http for compatibility with old servers
819
-
820
- = 5.0.2 =
821
-
822
- * Fixed a notice on theme selection panel
823
- * Fixed a block initialization error notice for woocommerce
824
- * Improved the emoji support on newsletter subject
825
-
826
- = 5.0.1 =
827
-
828
- * Fixed and improved the heading block
829
- * Fixed the can spam block (not showing default texts is not configured)
830
- * Fixed the footer block changed the unsubscribe url to the profile url
831
-
832
- = 5.0.0 =
833
-
834
- * Added wp user identifier on subscriber details panel
835
- * Fixed a notice on subscriber list panel
836
- * Added the Auto-Submit header
837
- * Added the X-Auto-Response-Suppress header
838
- * Added microdata markup for native confirmation button on email clients
839
- * Fixed url checking with ending spaces
840
- * Fix for sites with forced relative content url
841
- * Fix debug notices on vimeo theme
842
-
843
- = 4.9.9 =
844
-
845
- * Fixed action URL for hand written forms in the subscription text
846
- * Fixed rewrite not working with specific html formatting
847
- * Change the composer text editor height
848
-
849
- = 4.9.8 =
850
-
851
- * Fixed the antibot option
852
-
853
- = 4.9.7 =
854
-
855
- * Fixed setup script throwing a debug notice
856
- * Changed chart library
857
-
858
- = 4.9.6 =
859
-
860
- * Extension version check improved
861
- * HTML5 form source code on profile panel
862
-
863
- = 4.9.5 =
864
-
865
- * Fixed table creation with dbDelta
866
-
867
- = 4.9.4 =
868
-
869
- * Admin css fix
870
- * Log fix
871
-
872
- = 4.9.3 =
873
-
874
- * Replacing fix
875
-
876
- = 4.9.2 =
877
-
878
- * Style fix
879
-
880
- = 4.9.1 =
881
-
882
- * Small code fixes
883
- * Chart js conflict fix
884
- * Curl SSL version on status panel
885
-
886
- = 4.9.0 =
887
-
888
- * Fixed logo editing when not set in the Company Info
889
- * Fix few layout problem on the user statistics panel
890
- * Composer layout improvements
891
- * Added select2 support
892
- * Fixed syntax error on status panel auto call check
893
- * Fixed notice for theme without the text part
894
- * Added chart.js from cdn
895
- * Improved stats collection and aggregation
896
-
897
- = 4.8.9 =
898
-
899
- * Package problems on WP.org
900
-
901
- = 4.8.8 =
902
-
903
- * WP Users Integration and Locked Content Extensions readiness
904
- * Improved the SSL management on admin side
905
- * Fix privacy checkbox layout when the link is used
906
- * Standard form CSS improvements
907
-
908
- = 4.8.7 =
909
-
910
- * Empty excerpt fix
911
- * Fixed the list of blocks not appearing on few PHP installations
912
- * Fixed the composer editor
913
-
914
- = 4.8.6 =
915
-
916
- * Warnings on SMTP panel when configured but not yet activated
917
- * Warning management in controls
918
- * Font family selector in the editor
919
- * Font size selector in the editor
920
- * Removed embedded tiny
921
- * Removed embedded ace
922
- * HTTPS on external links
923
- * Fixed tag replacement on subject on test confirmation and welcome emails
924
-
925
- = 4.8.5 =
926
-
927
- * Added HTML editor plugin to tiny
928
- * Fixed a couple of debug notices on widget
929
-
930
- = 4.8.4 =
931
-
932
- * Fixed posts block background editing
933
- * Composer js improvements
934
- * Fixed a couple of debug notices
935
- * CSS fix
936
-
937
- = 4.8.3 =
938
-
939
- * Fixed debug notices on widgets
940
- * Fixed Vimeo icon on social block
941
- * Fixed javascript in the editor
942
-
943
- = 4.8.2 =
944
-
945
- * Changed few labels
946
- * CSS fix on admin panels
947
-
948
- = 4.8.1 =
949
-
950
- * Lists selection on widget
951
- * CSS fix for submit button on widget
952
- * Fixed the status panel on action call check
953
- * Fixed the dedicated page creation
954
- * New editor for service messages' template with desktop and mobile preview
955
- * New raw html editor for newsletter with with desktop and mobile preview
956
- * Improved status panel scheduler check
957
- * Removed the old tiny mce 3
958
-
959
- = 4.8.0 =
960
-
961
- * New media selection on newsletter editor with size picker
962
- * Fixed the required attribute on profile form
963
- * Support for Analytics extension
964
-
965
- = 4.7.9 =
966
-
967
- * Removed the TGMPA library
968
- * Some CSS fixes
969
- * Fix few debug notices
970
-
971
- = 4.7.8 =
972
-
973
- * Old TGMPA library compatibility
974
-
975
- = 4.7.7 =
976
-
977
- * New extensions panel
978
- * Minor fixes and enhancements
979
- * New media selection on newsletter edit panel
980
- * Removed enqueuing of no more used scripts
981
- * Fixed the subscriber count on targeting panel
982
-
983
- = 4.7.6 =
984
-
985
- * New status panel
986
-
987
- = 4.7.5 =
988
-
989
- * Removed references to old css
990
- * Fixed the relative URLs problem in the composer
991
-
992
- = 4.7.4 =
993
-
994
- * Improved widget CSS
995
- * Added Instagram to social icons
996
- * Little style improvements
997
-
998
- = 4.7.3 =
999
-
1000
- * Added custom CSS field to customize the forms appearance
1001
- * Added codemirror for CSS edit
1002
- * Added plugin version to style link
1003
- * Added plugin version to script link
1004
- * Corrected a tag in newsletter widget minimal
1005
- * Added line height on form fields
1006
- * Changed CSS class prefixes to tnp
1007
- * Fixed a divide by zero on diagnostic panel
1008
- * Improved the collection of emails sending speed data
1009
- * Fixed a bug when adding a new subscriber from the admin panel
1010
-
1011
- = 4.7.2 =
1012
-
1013
- * Fixed a debug notice
1014
-
1015
- = 4.7.1 =
1016
-
1017
- * Fixed missing files in the package
1018
-
1019
- = 4.7.0 =
1020
-
1021
- * Added the selection for the Newsletter messages dedicated page
1022
- * New forms CSS and validator
1023
- * New widget for a minimal form
1024
- * Use shortcode attribute "layout" to revert to old style table forms, using layout=table
1025
- * Added reset button for diagnostic scheduler statistics
1026
-
1027
- = 4.6.8 =
1028
-
1029
- * Fixed the image browser/upload URL error in themes
1030
-
1031
- = 4.6.7 =
1032
-
1033
- * Fixed blank page without a newsletter dedicated page
1034
-
1035
- = 4.6.6 =
1036
-
1037
- * Fixed the blocks reload
1038
-
1039
- = 4.6.5 =
1040
-
1041
- * Fixed the style stripped when switching back and forth betwenn the visual and raw editor (from version 4.6.4)
1042
-
1043
- = 4.6.4 =
1044
-
1045
- * Fixed the profile link in admin panels
1046
- * Fixed the composer editor
1047
- * Cleanup of old code
1048
- * Force the composer editor to keep the absolute urls
1049
-
1050
- = 4.6.3 =
1051
-
1052
- * Fixed the profile save with new action url
1053
-
1054
- = 4.6.2 =
1055
-
1056
- * Fixed the import option "override status" not working in update mode
1057
- * Fixed the missing http when the couldflare plugin is installed (!)
1058
- * Improved controls and security on open tracking link
1059
- * Added few new diagnostic parameters
1060
-
1061
- = 4.6.1 =
1062
-
1063
- * Fixed a security issue on admin side only exploitable by logged in admins
1064
-
1065
- = 4.6.0 =
1066
-
1067
- * Fixed debug notices on composer post blocks
1068
- * Improved image styles on composer hero block
1069
- * Added support for WP_Error in the logger
1070
- * Improved the license checking
1071
-
1072
- = 4.5.9 =
1073
-
1074
- * Fixed a PHP syntax error on composer panel
1075
-
1076
- = 4.5.8 =
1077
-
1078
- * Edit image alt text in the composer
1079
- * Fixed german characters problem on visual composer
1080
- * Added new data to diagnostic panel
1081
- * Change the export to be more compatible with specific blog installations
1082
- * Added translations to export panel
1083
-
1084
- = 4.5.7 =
1085
-
1086
- * Fixed the total sent email in dashboard
1087
- * Fixed the total sent number on newsletter list when an already sent newsletter is edited
1088
- * Removed the save button on sent newsletter
1089
- * Code cleanup
1090
- * Service message for stats panel of draft newsletters
1091
-
1092
- = 4.5.6 =
1093
-
1094
- * New unified themes and composer selection screen
1095
- * Fixed the WP integration panel (incompatibility with WP 4.5.3)
1096
- * Removed few notices
1097
- * More warning fix
1098
- * Fix "isHTML" error
1099
- * jQuery conflict fix
1100
- * Escape fix
1101
- * Warning fix
1102
- * Fixed the mime header
1103
-
1104
- = 4.5.0 =
1105
-
1106
- * New responsive email Drag & Drop composer, see [the guide](https://www.thenewsletterplugin.com/plugins/newsletter/composer).
1107
-
1108
- = 4.2.4 =
1109
-
1110
- * Fixed the notices display in Newsletter admin pages
1111
- * Administrative emails sent now with the Newsletter engine
1112
- * New {email_id} and {email_subject} placeholders
1113
-
1114
- = 4.2.3 =
1115
-
1116
- * Improvements in database error management
1117
- * Added hook for Reports Extension
1118
-
1119
- = 4.2.2 =
1120
-
1121
- * The lock feature is disabled for editors and administrators
1122
- * Fixed the newsletter sent table
1123
-
1124
- = 4.2.1 =
1125
-
1126
- * Fixed the progress indicator on newsletter list
1127
-
1128
- = 4.2.0 =
1129
-
1130
- * New statistics dashboard
1131
- * Newsletter Reports 4 support
1132
-
1133
- = 4.1.3 =
1134
-
1135
- * Fixed the notice dismiss not working on every page
1136
- * Fixed debug notice on WP 4.5
1137
- * Added unverified SSL connection option on SMTP panel
1138
-
1139
- = 4.1.2 =
1140
-
1141
- * Minor security fix (on admin side with admin access)
1142
-
1143
- = 4.2.0 =
1144
-
1145
- * Added support for Reports Extension 4
1146
- * Improved license check
1147
-
1148
- = 4.1.1 =
1149
-
1150
- * Added compatibility with SMTP plugins (Newsletter now sends with wp_mail if not otherwise configured)
1151
- * Small CSS fixes
1152
-
1153
- = 4.1.0 =
1154
-
1155
- * Fix statistics link in the dashboard newsletter list
1156
-
1157
- = 4.0.9 =
1158
-
1159
- * Updated jQuery UI
1160
- * Updated compatibility notice
1161
- * Fixed tabs on subscriber stats panel
1162
- * Fixed documentation on profile page
1163
-
1164
- = 4.0.8 =
1165
-
1166
- * Dashboard style fix for WordPress >= 4.4
1167
- * Minor improvements
1168
-
1169
- = 4.0.7 =
1170
-
1171
- * New check to prevent not correct message template settings to block emails
1172
- * Improved confirmation email test
1173
- * Added welcome email test
1174
- * Resubscription in single opt-in does not send the confirmation email anymore
1175
- * Fixed second subscription with Facebook extension
1176
-
1177
- = 4.0.6 =
1178
-
1179
- * Fixed forced lists on subscription panel
1180
- * Fixed few i18n tags
1181
- * Fixed background color on theme selector
1182
-
1183
- = 4.0.5 =
1184
-
1185
- * Fixed an error on content lock
1186
- * Fixed CSS for extensions
1187
- * Fixed few debug notices
1188
- * Improved the content lock user recognition
1189
- * Subscriber search by list
1190
-
1191
- = 4.0.4 =
1192
-
1193
- * Fixed and improved the email template for service messages
1194
-
1195
- = 4.0.3 =
1196
-
1197
- * Fixed the welcome email enable/disable setting
1198
-
1199
- = 4.0.2 =
1200
-
1201
- * Fixed main settings saving
1202
- * Fixed unsubscription settings saving
1203
-
1204
- = 4.0.0 =
1205
-
1206
- * Shiny new look
1207
- * New top menu
1208
- * Locked content feature moved into the subscription module
1209
- * Separated SMTP configuration panel
1210
- * Newsletter users import transfer first and last name
1211
- * Various bug fixes and improvements
1212
-
1213
- = 3.9.5 =
1214
-
1215
- * Corrected the call to maybe_maybe_convert_table_to_utf8mb4
1216
-
1217
- = 3.9.4 =
1218
-
1219
- * CSV export fix
1220
- * Delete button on newsletter list fixed (wrong since version 3.9.3)
1221
-
1222
- = 3.9.3 =
1223
-
1224
- * Added the blog charset to the dagnostic panel
1225
- * Fixed the read count (was due to antispam filter changes)
1226
- * Language domain fixes
1227
-
1228
- = 3.9.2 =
1229
-
1230
- * Fixed the tab separator in CSV export
1231
- * Removed the already subscribed option
1232
- * Removed obsolete code for anchor tracking
1233
- * Added the sent newsletters to the subscriber editing panel
1234
- * Added a sent-to table
1235
-
1236
- = 3.9.1 =
1237
-
1238
- * Enable the tracking key edit
1239
- * Removed the antibot option, active by default
1240
- * First round of changes for translate.wordpress.org
1241
- * Fixed few notices
1242
- * Added deprecation notices for the email.php and email-alternative.php files
1243
- * Fixed the export separator
1244
- * Removed reference to plugin files in URLs to avoid spam filter
1245
- * Removed the selection of Newsletter action URL
1246
- * Removed obsolete files
1247
-
1248
- = 3.9.0 =
1249
-
1250
- * Fixed the new excerpt extraction
1251
-
1252
- = 3.8.9 =
1253
-
1254
- * Fixed few debug notices
1255
- * Improved support for browser without javascript
1256
- * Adding multi subscription support
1257
- * Improved antibot
1258
- * Fixed some debug/deprecated noticies
1259
- * Added support for new beta Report Extension features
1260
-
1261
- = 3.8.8 =
1262
-
1263
- * Unsubscription works now only with JavaScript enabled browser to block bots
1264
- * New way to extract excerpts to avoid third party filters
1265
- * Fixed the image selector for header logo
1266
- * Added preview form subscription message template
1267
- * Added WordPress like metadata on themes
1268
- * Fixed the default theme
1269
- * Changed few theme screeshots
1270
- * Added attribute "layout" to shortcode with value "html5" for tableless form
1271
-
1272
- = 3.8.7 =
1273
-
1274
- * Fixed the widget constructor
1275
-
1276
- = 3.8.6 =
1277
-
1278
- * Improved checks on tracking links which could be used for spamming links (open redirect)
1279
-
1280
- = 3.8.5 =
1281
-
1282
- * Changed the widget constructor
1283
- * Fixed the newsletter_form shortcode
1284
- * Added shortcodes for in page form building (beta): see the [plugin documentation](https://www.thenewsletterplugin.com/plugins/newsletter/newsletter-documentation).
1285
-
1286
- = 3.8.4 =
1287
-
1288
- * Fixed the unsubscription problem
1289
-
1290
- = 3.8.3 =
1291
-
1292
- * Fixed the editor for unsubscription messages
1293
- * Added the unsubscription error message
1294
- * Fixed the email change from admin panels
1295
- * Fixed the profile field check when set as optionals
1296
-
1297
- = 3.8.2 =
1298
-
1299
- * Improved the profile editing page (with confirmation for email change)
1300
- * Added new sync between confirmed email and linked wp user email
1301
- * Improved check and messages on subscriber edit panel
1302
- * Changed the confirmation behavior for already confirmed users (welcome page reshown)
1303
- * Added the subscription delete option when a WordPress user si deleted
1304
- * Unsubscribe action for already unsubscribed subscribers reshow the unsubscription message
1305
- * Better management of emoji (creating sometime a database error)
1306
-
1307
- = 3.8.1 =
1308
-
1309
- * Corrected open tracking with new tracking URL schema
1310
-
1311
- = 3.8.0 =
1312
-
1313
- * CSV import fix
1314
-
1315
- = 3.7.9 =
1316
-
1317
- * Added subject empty check when sending tests
1318
- * Added option to import subscribers as confirmed or not confirmed
1319
- * Added import subscribers from CSV file
1320
- * Updated the WP compatibility version number
1321
- * Fixed the save button on sent emails
1322
- * Fixed the List-Unsubscribe header with new URL schema
1323
-
1324
- = 3.7.8 =
1325
-
1326
- * Fixed the online email view with the new URL schema
1327
-
1328
- = 3.7.7 =
1329
-
1330
- * Fixed the editor role
1331
- * Fixed the unsubscription url with the new action url schema
1332
- * Fixed the readme.txt
1333
- * Tested with WP 4.2
1334
-
1335
- = 3.7.6 =
1336
-
1337
- * Fixed the new action URL schema
1338
- * Added a notice for blank page on newsletter creation
1339
- * Few notices removed
1340
- * Added more html require attributes
1341
- * Fixed the alternative confirmation redirect
1342
-
1343
- = 3.7.5 =
1344
-
1345
- * Fixed the referrer attribute on shortcodes
1346
-
1347
- = 3.7.4 =
1348
-
1349
- * Added control to avoid the wp super cache caching on newsletter services
1350
- * Added the new action URL schema (see the subscription steps panel)
1351
- * Added confirmation_url attribute to the form short code
1352
- * Added referrer attribute to the form short code
1353
- * Newsletters now start with empty subject and it's require to write it
1354
- * Fixed the API add service key check
1355
- * Fixed a couple of PHP noticies on widget (when not configured)
1356
-
1357
- = 3.7.3 =
1358
-
1359
- * Fixed extra profile field rules and placeholder
1360
-
1361
- = 3.7.2 =
1362
-
1363
- * Fixed the editor issue on subscription steps panel
1364
-
1365
- = 3.7.1 =
1366
-
1367
- * Attempt to fix the home url retrieval on some custom installations
1368
- * Removed some unused code
1369
- * Fixed the rate request notice
1370
- * Added the new URL tracking option (beta)
1371
- * Added the new URL tracking option notice
1372
- * Added file owner checking on diagnostic panel
1373
- * Added action files call checking on diagnostic panel
1374
- * Added dimensions on read-tracking image
1375
- * Added the html tag to the message templates
1376
- * Changed the template generation method to avoid conflicts with themes
1377
-
1378
- = 3.7.0 =
1379
-
1380
- * Bugfix
1381
-
1382
- = 3.6.9 =
1383
-
1384
- * Little fix
1385
-
1386
- = 3.6.8 =
1387
-
1388
- * Fixed the subject of the administrative notification
1389
- * Cleaned up obsolete code
1390
- * Added support for extension versions check
1391
- * Fixed typo in text only themes
1392
- * Fixed wrong unsubscribe code in German Welcome Email
1393
-
1394
- = 3.6.7 =
1395
-
1396
- * New Blog Info configuration panel
1397
- * New Default Theme
1398
- * Minor layout changes
1399
- * Fix subscription email link
1400
- * Added notices when filters are active on subscriber management panel
1401
- * Few fixes on statistic panel
1402
- * Fixed undefined index noticies on subscription page
1403
- * Several fixes
1404
- * A TNT team member quitted smoking, so the plugin become smoking free
1405
-
1406
- = 3.6.6 =
1407
-
1408
- * Added a cron monitor
1409
- * Added a xmas theme
1410
- * Fixed the opt-in mode for wordpress registsred users
1411
- * Fixed the noticies
1412
- * Fixed somes styles
1413
- * Added the direct newsletter edit for themes without options
1414
- * Header changed
1415
- * Fixed all links to refer the new site www.thenewsletterplugin.com
1416
- * Fixed the newsletter editor default style
1417
-
1418
- = 3.6.5 =
1419
-
1420
- * Added parameter "plugin url" on diagnostic panel
1421
- * Added custom post types to the linear theme
1422
- * Added custom post types to the vimeo-like theme
1423
- * Fixed the feed by mail placeholder panel
1424
- * Fixed the antibot option with preferences
1425
-
1426
- = 3.6.4 =
1427
-
1428
- * Support for greek (and others) characters without the entity encoding
1429
- * Fixed a debug notice in the widget code
1430
- * Added gender on import
1431
- * Added support for the constant NEWSLETTER_LOG_DIR in wp-config.php to define the loggin folder
1432
- * Fixed the domain removal on subscription steps messages
1433
-
1434
- = 3.6.3 =
1435
-
1436
- * Fixed the feed by mail test function
1437
-
1438
- = 3.6.2 =
1439
-
1440
- * Added the separator selection on CSV export
1441
- * Added the UTF-8 BOM to the export
1442
- * Fixed some debug noticies
1443
-
1444
- = 3.6.1 =
1445
-
1446
- * Fixed the widget when field names contain double quotes
1447
-
1448
- = 3.6.0 =
1449
-
1450
- * Removed the extension list from welcome panel
1451
- * Added the and operator in the newsletter recipients selector
1452
- * Fixed the select_group(...) in NewsletterControls class
1453
-
1454
- = 3.5.9 =
1455
-
1456
- * Added a possible antibot to the subscription flow
1457
-
1458
- = 3.5.8 =
1459
-
1460
- * Added soundcloud for social icon on default theme
1461
- * Fixed the welcome screen (should)
1462
-
1463
- = 3.5.7 =
1464
-
1465
- * Added the private flag on newsletters
1466
- * Fixed old extension version checking/reporting
1467
-
1468
- = 3.5.6 =
1469
-
1470
- * Added custom header for newsletter tagging with mandrill
1471
- * Added internally used html 5 subscription form
1472
-
1473
- = 3.5.5 =
1474
-
1475
- * Added the license key field for special installations
1476
-
1477
- = 3.5.4 =
1478
-
1479
- * Fixed the web preview charset
1480
-
1481
- = 3.5.3 =
1482
-
1483
- * Added support for extensions as plugins
1484
-
1485
- = 3.5.2 =
1486
-
1487
- * Fixed the {title} tag replacement for old subscriber list with the gender not set
1488
- * Added the upgrade from old versions button on diagnostic panel
1489
-
1490
- = 3.5.1 =
1491
-
1492
- * Support for the SendGrid extension
1493
-
1494
- = 3.5.0 =
1495
-
1496
- * Fixed the subscriber list panel
1497
- * Interface reviewed
1498
- * Fixed the image chooser for WP 3.8.1
1499
- * Fixed the export for editors
1500
- * Patch for anonymous users create by woocommerce
1501
- * Madrill API adapter
1502
- * Header separation between this plugin and the extensions
1503
- * Default to base 64 encoding of outgoing email to solve the long lines problem
1504
-
1505
- = 3.4.9 =
1506
-
1507
- * Fixed some warnings in debug mode
1508
- * Fixed the disabling setting of the social icons (on default newsletter themes)
1509
- * Added filters on widget for WPML
1510
- * Added filter for single line feeds refused by some mail servers
1511
-
1512
- = 3.4.8 =
1513
-
1514
- * Added a javascript protection against auto confirmation from bot
1515
- * Fixed a warning with debug active on site login
1516
-
1517
- = 3.4.7 =
1518
-
1519
- * Fixed the subscription panel where some panels where no more visible.
1520
-
1521
- = 3.4.6 =
1522
-
1523
- * Added the full_name tag
1524
- * Added the "simple" theme
1525
- * Added indexes to the statistic table to improve the reports extension response time
1526
- * Fixed some noticies in debug mode
1527
-
1528
- = 3.4.5 =
1529
-
1530
- * Revisited the theme chooser and the theme configuration
1531
- * Fixed a double field on the locked content configuration
1532
- * Improved the delivery engine
1533
-
1534
- = 3.4.4 =
1535
-
1536
- * Improved error messages
1537
- * Fixed the last tab store (jquery changes)
1538
- * Added some new controls for the pop up extensions
1539
-
1540
- = 3.4.3 =
1541
-
1542
- * Added the precendence bulk header (https://support.google.com/mail/answer/81126)
1543
- * Added filter on messages to avoid wrong URLs when the blog change domain or folder
1544
- * Added the alt attribute to the tracking image
1545
- * New option to set the PHP max execution time
1546
- * Fixed some text on main configuration panel
1547
-
1548
- = 3.4.2 =
1549
-
1550
- * Refined the subscription for already subscribed emails
1551
-
1552
- = 3.4.1 =
1553
-
1554
- * Fixed the delivery engine warning message
1555
- * Fixed the version check
1556
-
1557
- = 3.4.0 =
1558
-
1559
- * Changed newsletter copy to copy even the editor and traking status
1560
- * Fixed the subscribers search list
1561
- * Added some more buttons on Newsletter editor
1562
- * Added the subscription form menu voice (I cannot answer anymore the same request about subscribe button translation :-)
1563
- * Suppressed warning on log function
1564
-
1565
- = 3.3.9 =
1566
-
1567
- * Fixed activation in debug mode
1568
- * Fixed some notices
1569
- * Added defaults for subscriber titles (Mr, Mrs, ...)
1570
-
1571
- = 3.3.8 =
1572
-
1573
- * Internal code fixes
1574
- * Fixed the "editor" access control
1575
-
1576
- = 3.3.7 =
1577
-
1578
- * Fixed the feed by mail field on widget
1579
- * Fixed tab names to avoid mod_security interference
1580
- * Fixed the "name" form field rules
1581
- * Added (undocumented/untested) way to change the table names
1582
-
1583
- = 3.3.6 =
1584
-
1585
- * Fixed a caching blocking on short code
1586
- * New way to create a newsletter
1587
-
1588
- = 3.3.5 =
1589
-
1590
- * Fixed the mailto rewriting
1591
- * Added tags and categories to default theme
1592
- * Added post type on default theme
1593
- * Fixed some administrative CSS
1594
- * Revisited the theme selection and configuration
1595
-
1596
- = 3.3.4 =
1597
-
1598
- * Fixed the module version check
1599
-
1600
- = 3.3.3 =
1601
-
1602
- * Fixed the IP tracking on opening
1603
-
1604
- = 3.3.2 =
1605
-
1606
- * Disabled the save button on composer when the newsletter is "sending" or "sent"
1607
- * Added ip field on statistics
1608
- * Reviewed the subscriber statistics panel
1609
- * Fixed some links on welcome panel
1610
- * Added extensions version check
1611
- * Added the Mandrill Extension support
1612
- * Fixed the banner options on default theme
1613
- * New "new newsletter" panel (hope simpler to use)
1614
-
1615
- = 3.3.1 =
1616
-
1617
- * Fixed a bug in an administrative query
1618
-
1619
- = 3.3.0 =
1620
-
1621
- * Fixed a replacement on online email version
1622
- * Fixed a missing privacy check box configuration
1623
- * Improved the split posts
1624
- * Added post_type control
1625
- * Re-enabled the subscription for addresses not confirmed
1626
- * Fixed the welcome and ocnfirmaiton email when sent from subscribers list panel (were not using the theme)
1627
- * Added the "pre-checked" option to preferences configuration
1628
-
1629
- = 3.2.9 =
1630
-
1631
- * Fixed a possible loop on widget (when using extended fields in combobox format)
1632
-
1633
- = 3.2.8 =
1634
-
1635
- * Fixed the newsletter_replace filter
1636
- * Added the person title for salutation
1637
- * Changed the profile field panel
1638
- * Fixed the massive deletion of unsubscribed users
1639
-
1640
- = 3.2.7 =
1641
-
1642
- * Added a controls for the Reports module version 1.0.4
1643
- * Changed opening tracking and removed 1x1 GIF
1644
- * Added support for popup on subscription form
1645
- * Fixed the link to the reports module
1646
-
1647
- = 3.2.6 =
1648
-
1649
- * Fixed the forced preferences on subscription panel
1650
-
1651
- = 3.2.5 =
1652
-
1653
- * Fixed the home_url and blog_url replacements
1654
- * Added the cleans up of tags used in href attributes
1655
- * Fixed the cleans up of URL tags
1656
- * Added module version checking support
1657
- * Added the welcome email option to disable it
1658
- * Fixed the new subscriber notification missing under some specific conditions
1659
-
1660
- = 3.2.4 =
1661
-
1662
- * Added target _blank on theme links so they open on a new windows for the online version
1663
- * Changed to the plugins_url() function
1664
- * Added clean up of url tags on composer
1665
-
1666
- = 3.2.3 =
1667
-
1668
- * Added schedule list on Diagnostic panel
1669
- * Removed the enable/disable resubscription option
1670
- * Added a check for the delivery engine shutdown on some particular situations
1671
- * Revisited the WordPress registration integration
1672
- * Revisited the WordPress user import and moved on subscriber massive action panel
1673
- * Added links to new documentation chapter
1674
- * Removed a survived reference to an old table
1675
- * Reactivated the replacement of the {blog_url} tag
1676
- * Fixed the tracking code injection
1677
- * Fixed a default query generation for compatibility with 2.5 version
1678
- * Fixed the tag replacements when using the old forms
1679
-
1680
- = 3.2.2 =
1681
-
1682
- * Fixed the subscription options change problem during the upgrade
1683
- * English corrections by Rita Vaccaro
1684
- * Added the Feed by Mail demo module
1685
- * Added support for the Facebook module
1686
-
1687
- = 3.2.1 =
1688
-
1689
- * Fixed fatal error with old form formats
1690
-
1691
- = 3.2.0 =
1692
-
1693
- * Added hint() method to NewsletterControls
1694
- * Fixed the Newsletter::replace_date() to replace even the {date} tag without a format
1695
- * Added NewsletterModule::format_time_delta()
1696
- * Added NewsletterModule::format_scheduler_time
1697
- * Improved the diagnostic panel
1698
- * Fixed an error on subscription with old forms
1699
- * Fixed the unsubscription with old formats
1700
- * Fixed the confirmation for multiple calls
1701
- * Fixed user saving on new installation (column missing for followup module)
1702
- * Added compatibility code with domain remaping plugin
1703
- * Added a setting to let unsubscribed users to subscribe again
1704
- * Added the re-subscription option
1705
-
1706
- = 3.1.9 =
1707
-
1708
- * Added the NEWSLETTER_MAX_EXECUTION_TIME
1709
- * Added the NEWSLETTER_CRON_INTERVAL
1710
- * Improved the delivery engine performances
1711
- * Improved the newsletter list panel
1712
- * Change the subscription in case of unsubscribed, bounced or confirmed address with a configurable error message
1713
- * Some CSS review
1714
- * Fixed the unsubscription procedure with a check on user status
1715
- * Added Pint theme
1716
-
1717
- = 3.1.7 =
1718
-
1719
- * Added better support for Follow Up for Newsletter
1720
- * Fixed integration with Feed by Mail for Newsletter
1721
- * Fixed a bug on profile save
1722
- * Fixed a message about log folder on diagnostic panel
1723
- * Fixed the sex field on user creation
1724
-
1725
- = 3.1.6 =
1726
-
1727
- * Fixed the subscription form absent on some configurations
1728
-
1729
- = 3.1.5 =
1730
-
1731
- * Content locking deactivated if a user is logged in
1732
- * Added a button to create a newsletter dedicated page
1733
- * Added top message is the newsletter dedicated page is not configured
1734
- * Fixed the subscription process with the old "na" action
1735
- * Added a new option with wp registration integration
1736
- * Added the opt-in mode to wp registration integration
1737
-
1738
- = 3.1.4 =
1739
-
1740
- * Fixed a bug on post/page preview
1741
-
1742
- = 3.1.3 =
1743
-
1744
- * Added support for SendGrid Module
1745
- * Fixed a fatal error on new installations on emails.php
1746
-
1747
- = 3.1.2 =
1748
-
1749
- * Fixed the access control for editors
1750
- * Improved to the log system to block it when the log folder cannot be created
1751
- * Moved all menu voices to the new format
1752
- * Improved the diagnostic panel
1753
- * Added ability to send and email to not confirmed subscribers
1754
- * Fixed a problem with internal module versions
1755
-
1756
- = 3.1.1 =
1757
-
1758
- * Fixed the copy and delete buttons on newsletter list
1759
- * Removed the old trigger button on newsletter list
1760
- * Fixed the edit button on old user search
1761
- * Improved the module version checking
1762
- * Added the "unconfirm" button on massive subscriber management panel
1763
-
1764
- = 3.1.0 =
1765
-
1766
- * Added link to change preferences/sex from emails
1767
- * Added tag reference on email composer
1768
- * Added "negative" preference selection on email targeting
1769
- * Improved the subscription during WordPress user registration
1770
- * Fixed the preference saving from profile page
1771
- * Fixed the default value for the gender field to "n"
1772
- * Added loading of the Feed by Mail module
1773
- * Added loading of the Follow Up module
1774
- * Added loading of the MailJet module
1775
- * Changed the administrative page header
1776
- * Changed the subscriber list and search panel
1777
- * Improved the locked content feature
1778
- * Fixed the good bye email not using the standard email template
1779
- * Changed the diagnostics panel with module versions checking
1780
- * Fixed some code on NewsletterModule
1781
-
1782
- = 3.0.9 =
1783
-
1784
- * Fixed an important bug
1785
-
1786
- = 3.0.8 =
1787
-
1788
- * Fixed the charset on some pages and previews for umlaut characters
1789
-
1790
- = 3.0.7 =
1791
-
1792
- * Fixed a warning in WP 3.5
1793
- * Fixed the visual editor on/off on composer panel
1794
-
1795
- = 3.0.6 =
1796
-
1797
- * Added file permissions check on diagnostic panel
1798
- * Fixed the default value for "sex" on email at database level
1799
- * Fixed the checking of required surname
1800
- * Fixed a warning on subscription panel
1801
- * Improved the subscription management for bounced or unsubscribed addresses
1802
- * Removed the simple theme of tinymce to reduce the number of files
1803
- * Added neutral style for subscription form
1804
-
1805
- = 3.0.5 =
1806
-
1807
- * Added styling for widget
1808
- * Fixed the widget html
1809
- * Fixed the reset button on subscription panels
1810
- * Fixed the language initialization on first installation
1811
- * Fixed save button on profile page (now it can be an image)
1812
- * Fixed email listing showing the planned status
1813
-
1814
- = 3.0.4 =
1815
-
1816
- * Fixed the alternative email template for subscription messages
1817
- * Added user statistics by referrer (field nr passed during subscription)
1818
- * Added user statistics by http referer (one r missing according to the http protocol)
1819
- * Fixed the preview for themes without textual version
1820
- * Fixed the subscription redirect for blogs without permalink
1821
- * Fixed the "sex" column on database so email configuration is correctly stored
1822
- * Fixed the wp user integration
1823
-
1824
- = 3.0.3 =
1825
-
1826
- * Fixed documentation on subscription panel and on subscription/page.php file
1827
- * Fixed the statistics module URL rewriting
1828
- * Fixed a "echo" on module.php datetime method
1829
- * Fixed the multi-delete on newsletter list
1830
- * Fixed eval() usage on add_menu_page and add_admin_page function
1831
- * Fixed a number of ob_end_clean() called wht not required and interfering with other output buffering
1832
- * Fixed the editor access level
1833
-
1834
- = 3.0.2 =
1835
-
1836
- * Documented how to customize the subscription/email.php file (see inside the file) for subscription messages
1837
- * Fixed the confirmation message lost (only for who do not already save the subscription options...)
1838
-
1839
- = 3.0.1 =
1840
-
1841
- * Fixed an extra character on head when including the form css
1842
- * Fixed the double privacy check on subscription widget
1843
- * Fixed the charset of subscription/page.php
1844
- * Fixed the theme preview with wp_nonce_url
1845
- * Added compatibility code for forms directly coded inside the subscription message
1846
- * Added link to composer when the javascript redirect fails on creation of a new newsletter
1847
- * Fixed the old email list and conversion
1848
-
1849
- = 3.0.0 =
1850
-
1851
- * Release
1852
-
1853
- = 2.6.2 =
1854
-
1855
- * Added the user massive management panel
1856
-
1857
- = 2.5.3.3 =
1858
-
1859
- * Updated to 20 lists instead of 9
1860
- * Max lists can be set on wp-config.php with define('NEWSLETTER_LIST_MAX', [number])
1861
- * Default preferences ocnfigurable on subscription panel
1862
-
1863
- = 2.5.3.2 =
1864
-
1865
- * fixed the profile fields generation on subscription form
1866
-
1867
- = 2.5.3.1 =
1868
-
1869
- * fixed javascript email check
1870
- * fixed rewrite of link that are anchors
1871
- * possible patch to increase concurrency detection while sending
1872
- * fixed warning message on email composer panel
1873
-
1874
- = 2.5.3 =
1875
-
1876
- * changed the confirmation and cancellation URLs to a direct call to Newsletter Pro to avoid double emails
1877
- * mail opening now tracked
1878
- * fixed the add api
1879
- * feed by mail settings added: categories and max posts
1880
- * feed by mail themes change to use the new settings
1881
- * unsubscribed users are marked as unsubscribed and not removed
1882
- * api now respect follow up and feed by mail subscription options
1883
- * fixed the profile form to add the user id and token
1884
- * subscribers' panel changed
1885
- * optimizations
1886
- * main url fixed everywhere
1887
- * small changes to the email composer
1888
- * small changes to the blank theme
1889
-
1890
- = 2.5.2.3 =
1891
-
1892
- * subscribers panel now show the profile data
1893
- * search can be ordered by profile data
1894
- * result limit on search can be specified
1895
- * {unlock_url} fixed (it was not pointing to the right configured url)
1896
-
1897
- = 2.5.2.2 =
1898
-
1899
- * fixed the concurrent email sending problem
1900
- * added WordPress media gallery integration inside email composer
1901
-
1902
- = 2.5.2.1 =
1903
-
1904
- * added the add_user method
1905
- * fixed the API (was not working) and added multilist on API (thankyou betting-tips-uk.com)
1906
- * fixed privacy check box on widget
1907
-
1908
- = 2.5.2 =
1909
-
1910
- * added compatibility with lite cache
1911
- * fixed the list checkboxes on user edit panel
1912
- * removed the 100 users limit on search panel
1913
- * category an max posts selection on email composer
1914
-
1915
- = 2.5.1.5 =
1916
-
1917
- * improved the url tag replacement for some particular blog installation
1918
- * fixed the unsubscription administrator notification
1919
- * replaced sex with gender in notification emails
1920
- * fixed the confirm/unconfirm button on user list
1921
- * fixed some labels
1922
- * subscription form table HTML
1923
-
1924
- = 2.5.1.4 =
1925
-
1926
- * added {date} tag and {date_'format'} tag, where 'format' can be any of the PHP date formats
1927
- * added {blog_description} tag
1928
- * fixed the feed reset button
1929
- * added one day back button to the feed
1930
- * updated custom forms documentation
1931
- * fixed the trigger button on emails panel
1932
- * changed both feed by mail themes (check them if you create your own theme)
1933
- * fixed the custom profile field generation (important!)
1934
- * fixed documentation about custom forms
1935
-
1936
- Version 2.5.1.3
1937
- - fix the feed email test id (not important, it only generates PHP error logs)
1938
- - feed by mail send now now force the sending if in a non sending day
1939
- - changed the way feed by mail themes extract the posts: solves the sticky posts problem
1940
- - added the feed last check time reset button
1941
- - fixed the confirm and cancel buttons on user list
1942
- - fixed the welcome email when using a custom thank you page
1943
- - added images to theme 1
1944
- - added button to trigger the delivery engine
1945
- - fixed the widget mail check
1946
- - reintroduced style.css for themes
1947
- - updated theme documentation
1948
- - added CDATA on JavaScript
1949
- - fixed theme 1 which was not adding the images
1950
- - added theme 3
1951
-
1952
- Version 2.5.1.2
1953
- - fixed the old profile fields saving
1954
-
1955
- Version 2.5.1.1
1956
- - new fr_FR file
1957
- - fixed test of SMTP configuration which was sending to test address 2 instead of test address 1
1958
- - bounced voice remove on search filter
1959
- - added action "of" which return only the subscription form and fire a subcription of type "os"
1960
- - added action "os" that subscribe the user and show only the welcome/confirmation required message
1961
- - fixed issue with main page url configuration
1962
-
1963
- Version 2.5.1
1964
- - Fixed the widget that was not using the extended fields
1965
- - Fixed the widget that was not using the lists
1966
- - Added the class "newsletter-profile" and "newsletter-profile-[number]" to the widget form
1967
- - Added the class "newsletter-profile" and "newsletter-profile-[number]" to the main subscription form
1968
- - Added the class "newsletter-profile" and "newsletter-profile-[number]" to the profile form
1969
- - Added the classes "newsletter-email", "newsletter-firstname", "newsletter-surname" to the respective fields on every form
1970
- - Removed email theme option on subscription panel (was not used)
1971
- - Fixed the welcome email on double opt in process
1972
- - Subscription notifications to admin only for confirmed subscription
1973
- - Fixed subscription process panel for double opt in (layout problems)
1974
- - Improved subscription process panel
1975
-
1976
-
1977
- Version 2.5.0.1
1978
- - Fix unsubscription process not working
1979
-
1980
- Version 2.5.0
1981
- - Official first release
1982
-
2
  Tags: email, email marketing, newsletter, newsletter subscribers, welcome email, signup forms, contact, lead generation, popup, marketing automation
3
  Requires at least: 3.4.0
4
  Tested up to: 5.3.2
5
+ Stable tag: 6.4.6
6
  Requires PHP: 5.6
7
  Contributors: satollo,webagile,michael-travan
8
 
109
 
110
  == Changelog ==
111
 
112
+ = 6.4.6 =
113
+
114
+ * Added hook to [register custom theme folders](https://www.thenewsletterplugin.com/developers/newsletter-themes)
115
+ * Removed old themes
116
+ * Removed packages theme folder scan (so locally added themes are not loaded, see site documentation if you need to create a custom theme)
117
+ * Polylang support on default theme
118
+ * Better error check on addon list retrieval
119
+ * Added language on targeting options
120
+ * Fixed user list pagination
121
+ * Subject replacement for online preview
122
+
123
+ = 6.4.5 =
124
+
125
+ * Restored a missing method used by addons
126
+ * Added the changelog.txt file
127
+
128
  = 6.4.4 =
129
 
130
  * Automatic language detection on subscription when available
323
 
324
  * The Newsletter Plugin Composer - A new revamped drag & drop composer
325
  * Several improvements and fixes
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
statistics/statistics.php CHANGED
@@ -276,6 +276,16 @@ class NewsletterStatistics extends NewsletterModule {
276
  return $report->open_count;
277
  }
278
 
 
 
 
 
 
 
 
 
 
 
279
  /**
280
  * @deprecated
281
  *
276
  return $report->open_count;
277
  }
278
 
279
+ /**
280
+ * @deprecated
281
+ *
282
+ * @param type $email_id
283
+ * @return type
284
+ */
285
+ function get_error_count($email_id) {
286
+ return 0;
287
+ }
288
+
289
  /**
290
  * @deprecated
291
  *
unsubscription/unsubscription.php CHANGED
@@ -38,7 +38,7 @@ class NewsletterUnsubscription extends NewsletterModule {
38
  wp_redirect($url);
39
  die();
40
  break;
41
-
42
  case 'uc':
43
  if ($this->antibot_form_check()) {
44
  $user = $this->unsubscribe();
@@ -129,14 +129,15 @@ class NewsletterUnsubscription extends NewsletterModule {
129
 
130
  function hook_newsletter_replace($text, $user, $email) {
131
 
132
- if (!$user) {
133
- return $text;
 
 
 
 
 
134
  }
135
 
136
- $text = $this->replace_url($text, 'UNSUBSCRIPTION_CONFIRM_URL', $this->build_action_url('uc', $user, $email));
137
- $text = $this->replace_url($text, 'UNSUBSCRIPTION_URL', $this->build_action_url('u', $user, $email));
138
- $text = $this->replace_url($text, 'REACTIVATE_URL', $this->build_action_url('reactivate', $user, $email));
139
-
140
  return $text;
141
  }
142
 
38
  wp_redirect($url);
39
  die();
40
  break;
41
+
42
  case 'uc':
43
  if ($this->antibot_form_check()) {
44
  $user = $this->unsubscribe();
129
 
130
  function hook_newsletter_replace($text, $user, $email) {
131
 
132
+ if ($user) {
133
+ $text = $this->replace_url($text, 'UNSUBSCRIPTION_CONFIRM_URL', $this->build_action_url('uc', $user, $email));
134
+ $text = $this->replace_url($text, 'UNSUBSCRIPTION_URL', $this->build_action_url('u', $user, $email));
135
+ $text = $this->replace_url($text, 'REACTIVATE_URL', $this->build_action_url('reactivate', $user, $email));
136
+ } else {
137
+ $text = $this->replace_url($text, 'UNSUBSCRIPTION_CONFIRM_URL', '#');
138
+ $text = $this->replace_url($text, 'UNSUBSCRIPTION_URL', '#');
139
  }
140
 
 
 
 
 
141
  return $text;
142
  }
143
 
users/index.php CHANGED
@@ -236,7 +236,6 @@ $controls->data['search_page'] ++;
236
 
237
  <?php $controls->button('first', '«'); ?>
238
  <?php $controls->button('prev', '‹'); ?>
239
- <?php $controls->text('search_page', 3); ?> of <?php echo $last_page + 1 ?> <?php $controls->button('go', __('Go', 'newsletter')); ?>
240
  <?php $controls->button('next', '›'); ?>
241
  <?php $controls->button('last', '»'); ?>
242
  </div>
236
 
237
  <?php $controls->button('first', '«'); ?>
238
  <?php $controls->button('prev', '‹'); ?>
 
239
  <?php $controls->button('next', '›'); ?>
240
  <?php $controls->button('last', '»'); ?>
241
  </div>