Postie - Version 1.7.8

Version Description

(2015-09-08) = * Remove mbstring admin message. Added fallback if mbstring is not installed * More explanation for signature regex * Add 1 minute schedule to supplement new external cron recommendation * Updates to support upcoming Language Packs feature for plugins * Moved important warning to admin notices * New filter postie_category_default

Download this release

Release Info

Developer WayneAllen
Plugin Icon 128x128 Postie
Version 1.7.8
Comparing to
See all releases

Code changes from version 1.7.6 to 1.7.8

Files changed (7) hide show
  1. config_form.php +133 -133
  2. docs/Changes.txt +11 -0
  3. docs/Postie.txt +4 -2
  4. languages/makepot.cmd +0 -1
  5. postie-functions.php +54 -81
  6. postie.php +32 -19
  7. readme.txt +15 -2
config_form.php CHANGED
@@ -1,7 +1,7 @@
1
  <div class="wrap">
2
  <div style="float:right; width: 220px; border: 1px solid darkgrey; padding:2px;border-radius:10px;margin-left: 10px;" >
3
- <p class="" style="text-align:center;font-weight: bolder; margin-top: 0px; margin-bottom: 2px;"><?php _e("Please Donate, Every $ Helps!", 'postie'); ?></p>
4
- <p style="margin-top: 0;margin-bottom: 2px;"><?php _e("Your generous donation allows me to continue developing Postie for the WordPress community.", 'postie'); ?></p>
5
  <form style="" action="https://www.paypal.com/cgi-bin/webscr" method="post">
6
  <input type="hidden" name="cmd" value="_s-xclick">
7
  <input type="hidden" name="hosted_button_id" value="HPK99BJ88V4C2">
@@ -14,10 +14,10 @@
14
  <a style='text-decoration:none' href='admin.php?page=postie-settings'>
15
  <?php
16
  echo '<img src="' . plugins_url('images/mail.png', __FILE__) . '" alt="postie" />';
17
- _e('Postie Settings', 'postie');
18
  ?>
19
  </a>
20
- <span class="description">(v<?php _e(POSTIE_VERSION, 'postie'); ?>)</span>
21
  </h2>
22
 
23
  <?php
@@ -37,12 +37,12 @@
37
  exit;
38
  break;
39
  case "runpostie":
40
- EchoInfo(__("Checking for mail manually", "postie"));
41
  postie_get_mail();
42
  exit;
43
  break;
44
  case "runpostie-debug":
45
- EchoInfo(__("Checking for mail manually with debug output", "postie"));
46
  if (!defined('POSTIE_DEBUG')) {
47
  define('POSTIE_DEBUG', true);
48
  }
@@ -71,7 +71,7 @@
71
  }
72
  extract($config);
73
  if (!isset($maxemails)) {
74
- EchoInfo(__("New setting: maxemails", "postie"));
75
  $maxemails = 0;
76
  }
77
  if (!isset($category_match)) {
@@ -82,27 +82,27 @@
82
  wp_clear_scheduled_hook('check_postie_hook');
83
  }
84
 
85
- $messages[1] = __("Configuration successfully updated!", 'postie');
86
- $messages[2] = __("Error - unable to save configuration", 'postie');
87
  ?>
88
  <?php if (isset($_GET['message'])) : ?>
89
- <div class="updated"><p><?php _e($messages[$_GET['message']], 'postie'); ?></p></div>
90
  <?php endif; ?>
91
 
92
  <form name="postie-options" method='post'>
93
  <input type="hidden" name="action" value="runpostie" />
94
- <input name="Submit" value="<?php _e("Run Postie", 'postie'); ?> &raquo;" type="submit" class='button'>
95
- <?php _e("(To run the check mail script manually)", 'postie'); ?>
96
  </form>
97
  <form name="postie-options" method='post'>
98
  <input type="hidden" name="action" value="runpostie-debug" />
99
- <input name="Submit" value="<?php _e("Run Postie (Debug)", 'postie'); ?> &raquo;" type="submit" class='button'>
100
- <?php _e("(To run the check mail script manually with full debug output)", 'postie'); ?>
101
  </form>
102
  <form name="postie-options" method="post">
103
  <input type="hidden" name="action" value="test" />
104
- <input name="Submit" value="<?php _e("Test Config", 'postie'); ?>&raquo;" type="submit" class='button'>
105
- <?php _e("this will check your configuration options", 'postie'); ?>
106
  </form>
107
 
108
  <form name="postie-options" method="post" action='options.php' autocomplete="off">
@@ -115,20 +115,20 @@
115
  <div id="simpleTabs">
116
  <div class="simpleTabs-nav">
117
  <ul>
118
- <li id="simpleTabs-nav-1"><?php _e('Mailserver', 'postie') ?></li>
119
- <li id="simpleTabs-nav-2"><?php _e('User', 'postie') ?></li>
120
- <li id="simpleTabs-nav-3"><?php _e('Message', 'postie') ?></li>
121
- <li id="simpleTabs-nav-4"><?php _e('Image', 'postie') ?></li>
122
- <li id="simpleTabs-nav-5"><?php _e('Video and Audio', 'postie') ?></li>
123
- <li id="simpleTabs-nav-6"><?php _e('Attachments', 'postie') ?></li>
124
- <li id="simpleTabs-nav-7"><?php _e('Support', 'postie') ?></li>
125
  </ul>
126
  </div>
127
  <div id="simpleTabs-content-1" class="simpleTabs-content">
128
  <table class='form-table'>
129
 
130
  <tr>
131
- <th scope="row"><lable for="postie-settings-input_protocol"><?php _e('Mail Protocol', 'postie') ?></lable></th>
132
  <td>
133
  <select name='postie-settings[input_protocol]' id='postie-settings-input_protocol'>
134
  <option value="pop3" <?php echo (($input_protocol == "pop3") ? " selected='selected' " : "") ?>>POP3</option>
@@ -144,45 +144,45 @@
144
  </td>
145
  </tr>
146
 
147
- <?php echo BuildBooleanSelect(__("Use Transport Layer Security (TLS)", "postie"), 'postie-settings[email_tls]', $email_tls, __("Choose Yes if your server requires TLS", "postie")); ?>
148
 
149
  <tr>
150
- <th scope="row"><label for="postie-settings-mail_server_port"><?php _e('Port', 'postie') ?></label></th>
151
  <td valign="top">
152
  <input name='postie-settings[mail_server_port]' style="width: 70px;" type="number" min="0" id='postie-settings-mail_server_port' value="<?php echo esc_attr($mail_server_port); ?>" size="6" />
153
- <p class='description'><?php _e("Standard Ports:", 'postie'); ?><br />
154
- <?php _e("POP3", 'postie'); ?> - 110<br />
155
- <?php _e("IMAP", 'postie'); ?> - 143<br />
156
- <?php _e("IMAP-SSL", 'postie'); ?>- 993 <br />
157
- <?php _e("POP3-SSL", 'postie'); ?> - 995 <br />
158
  </p>
159
  </td>
160
  </tr>
161
  <tr valign="top">
162
- <th scope="row"><?php _e('Mail Server', 'postie') ?></th>
163
  <td><input name='postie-settings[mail_server]' type="text" id='postie-settings-mail_server' value="<?php echo esc_attr($mail_server); ?>" size="40" />
164
  </td>
165
  </tr>
166
  <tr valign="top">
167
- <th scope="row"><?php _e('Mail Userid', 'postie') ?></th>
168
  <td><input name='postie-settings[mail_userid]' type="text" id='postie-settings-mail_userid' autocomplete='off' value="<?php echo esc_attr($mail_userid); ?>" size="40" /></td>
169
  </tr>
170
  <tr valign="top">
171
- <th scope="row"><?php _e('Mail Password', 'postie') ?></th>
172
  <td>
173
  <input name='postie-settings[mail_password]' type="password" id='postie-settings-mail_password' autocomplete='off' value="<?php echo esc_attr($mail_password); ?>" size="40" />
174
  </td>
175
  </tr>
176
  <tr>
177
- <th scope="row"><?php _e('Postie Time Correction', 'postie') ?></th>
178
  <td><input style="width: 70px;" name='postie-settings[time_offset]' type="number" step="0.5" id='postie-settings-time_offset' size="2" value="<?php echo esc_attr($time_offset); ?>" />
179
- <?php _e('hours', 'postie') ?>
180
- <p class='description'><?php _e("Should be the same as your normal offset, but this lets you adjust it in cases where that doesn't work.", 'postie'); ?></p>
181
  </td>
182
  </tr>
183
  <tr>
184
  <th>
185
- <?php _e('Check for mail every', 'postie') ?>:
186
  </th>
187
  <td>
188
  <select name='postie-settings[interval]' id='postie-settings-interval'>
@@ -190,47 +190,47 @@
190
  if ($interval == "weekly") {
191
  echo "selected='selected'";
192
  }
193
- ?>><?php _e('Once weekly', 'postie') ?></option>
194
  <option value="daily"<?php
195
  if ($interval == "daily") {
196
  echo "selected='selected'";
197
  }
198
- ?>><?php _e('daily', 'postie') ?></option>
199
  <option value="hourly" <?php
200
  if ($interval == "hourly") {
201
  echo "selected='selected'";
202
  }
203
- ?>><?php _e('hourly', 'postie') ?></option>
204
  <option value="twiceperhour" <?php
205
  if ($interval == "twiceperhour") {
206
  echo "selected='selected'";
207
  }
208
- ?>><?php _e('twice per hour', 'postie') ?></option>
209
  <option value="tenminutes" <?php
210
  if ($interval == "tenminutes") {
211
  echo "selected='selected'";
212
  }
213
- ?>><?php _e('every ten minutes', 'postie') ?></option>
214
  <option value="fiveminutes" <?php
215
  if ($interval == "fiveminutes") {
216
  echo "selected='selected'";
217
  }
218
- ?>><?php _e('every five minutes', 'postie') ?></option>
219
  <option value="manual" <?php
220
  if ($interval == "manual") {
221
  echo "selected='selected'";
222
  }
223
- ?>><?php _e('check manually', 'postie') ?></option>
224
  </select>
225
  </td>
226
  </tr>
227
  <tr>
228
  <th>
229
- <?php _e('Maximum number of emails to process', 'postie'); ?>
230
  </th>
231
  <td>
232
  <select name='postie-settings[maxemails]' id='postie-settings-maxemails'>
233
- <option value="0" <?php if ($maxemails == '0') echo "selected='selected'" ?>><?php _e('All', 'postie'); ?></option>
234
  <option value="1" <?php if ($maxemails == '1') echo "selected='selected'" ?>>1</option>
235
  <option value="2" <?php if ($maxemails == '2') echo "selected='selected'" ?>>2</option>
236
  <option value="5" <?php if ($maxemails == '5') echo "selected='selected'" ?>>5</option>
@@ -240,19 +240,19 @@
240
  </select>
241
  </td>
242
  </tr>
243
- <?php echo BuildBooleanSelect(__("Delete email after posting", "postie"), 'postie-settings[delete_mail_after_processing]', $delete_mail_after_processing, __("Only set to no for testing purposes", "postie")); ?>
244
- <?php echo BuildTextArea(__("Allowed SMTP servers", "postie"), "postie-settings[smtp]", $smtp, __("Only allow messages which have been sent throught the following SMTP servers. Put each server on a separate line. Leave blank to allow any SMTP server.", "postie")); ?>
245
  </table>
246
  </div>
247
 
248
  <div id="simpleTabs-content-2" class="simpleTabs-content">
249
  <table class='form-table'>
250
 
251
- <?php echo BuildBooleanSelect(__("Allow Anyone To Post Via Email", "postie"), "postie-settings[turn_authorization_off]", $turn_authorization_off, __("Changing this to yes <b style='color: red'>is not recommended</b> - anything that gets sent in will automatically be posted.", "postie")); ?>
252
- <?php echo BuildBooleanSelect(__("Force User Login", "postie"), "postie-settings[force_user_login]", $force_user_login, __("Changing this to yes will cause Postie to try and login as the 'from' user if they exist. This should be set to 'Yes' if you use custom taxonomies in the subject line.", "postie")); ?>
253
  <tr>
254
  <th scope="row">
255
- <?php _e('Roles That Can Post', 'postie') ?><br />
256
  </th>
257
  <td>
258
  <table class="checkbox-table">
@@ -280,15 +280,15 @@
280
  }
281
  }
282
  ?>
283
- <p class='description'><?php _e("This allows you to grant access to other users to post if they have the proper access level. Administrators can always post.", 'postie'); ?></p>
284
 
285
  </table>
286
  </td>
287
  </tr>
288
 
289
- <?php echo BuildTextArea(__("Authorized Addresses", "postie"), "postie-settings[authorized_addresses]", $authorized_addresses, __("Put each email address on a single line. Posts from emails in this list will be treated as if they came from the admin. If you would prefer to have users post under their own name - create a WordPress user with the correct access level.", "postie")); ?>
290
  <tr>
291
- <th scope="row"><?php _e('Default Poster', 'postie') ?></th>
292
  <td>
293
  <select name='postie-settings[admin_username]' id='postie-settings[admin_username]'>
294
  <?php
@@ -305,7 +305,7 @@
305
  }
306
  ?>
307
  </select>
308
- <p class='description'><?php _e("This will be the poster if you allow posting from emails that are not a registered blog user.", 'postie'); ?></p>
309
  </td>
310
  </tr>
311
  </table>
@@ -314,7 +314,7 @@
314
  <div id = "simpleTabs-content-3" class = "simpleTabs-content">
315
  <table class = 'form-table'>
316
  <tr>
317
- <th scope="row"><?php _e('Preferred Text Type', 'postie') ?> </th>
318
  <td>
319
  <select name='postie-settings[prefer_text_type]' id='postie-settings-prefer_text_type'>
320
  <?php printf('<option value="plain" %s>plain</option>', ($prefer_text_type == "plain") ? "selected" : "") ?>
@@ -323,7 +323,7 @@
323
  </td>
324
  </tr>
325
  <tr valign = "top">
326
- <th scope = "row"><?php _e('Default category', 'postie') ?></th>
327
  <td>
328
  <?php
329
  $defaultCat = $default_post_category;
@@ -331,20 +331,20 @@
331
  wp_dropdown_categories($args);
332
  ?>
333
  </tr>
334
- <?php echo BuildBooleanSelect(__("Match short category", "postie"), "postie-settings[category_match]", $category_match, __("Try to match categories using 'starts with logic' otherwise only do exact matches.<br />Note that custom taxonomies will not be found if this setting is 'No'", "postie")); ?>
335
 
336
  <tr valign="top">
337
  <th scope="row">
338
- <?php _e('Default tag(s)', 'postie') ?><br />
339
  </th>
340
  <td>
341
  <input type='text' name='postie-settings[default_post_tags]' id='postie-settings-default_post_tags' value='<?php echo esc_attr($default_post_tags) ?>' />
342
- <p class='description'><?php _e('separated by commas', 'postie') ?></p>
343
  </td>
344
  </tr>
345
 
346
  <tr>
347
- <th scope="row"><?php _e('Default Post Status', 'postie') ?> </th>
348
  <td>
349
  <select name='postie-settings[post_status]' id='postie-settings-post_status'>
350
  <?php
@@ -364,7 +364,7 @@
364
  </tr>
365
 
366
  <tr>
367
- <th scope="row"><?php _e('Default Post Format', 'postie') ?> </th>
368
  <td>
369
  <select name='postie-settings[post_format]' id='postie-settings-post_format'>
370
  <?php
@@ -388,7 +388,7 @@
388
  </tr>
389
 
390
  <tr>
391
- <th scope="row"><?php _e('Default Post Type', 'postie') ?> </th>
392
  <td>
393
  <select name='postie-settings[post_type]' id='postie-settings-post_type'>
394
  <?php
@@ -407,65 +407,65 @@
407
  </tr>
408
 
409
  <tr>
410
- <th scope="row"><?php _e('Default Title', 'postie') ?> </th>
411
  <td>
412
  <input name='postie-settings[default_title]' type="text" id='postie-settings-default_title' value="<?php echo esc_attr($default_title); ?>" size="50" /><br />
413
  </td>
414
  </tr>
415
 
416
- <?php echo BuildBooleanSelect(__("Treat Replies As", "postie"), "postie-settings[reply_as_comment]", $reply_as_comment, "", array("comments", "new posts")); ?>
417
- <?php echo BuildBooleanSelect(__("Forward Rejected Mail", "postie"), "postie-settings[forward_rejected_mail]", $forward_rejected_mail); ?>
418
- <?php echo BuildBooleanSelect(__("Allow Subject In Mail", "postie"), "postie-settings[allow_subject_in_mail]", $allow_subject_in_mail, "Enclose the subject between '#' on the very first line. E.g. #this is my subject#"); ?>
419
- <?php echo BuildBooleanSelect(__("Allow HTML In Mail Subject", "postie"), "postie-settings[allow_html_in_subject]", $allow_html_in_subject); ?>
420
- <?php echo BuildBooleanSelect(__("Allow HTML In Mail Body", "postie"), "postie-settings[allow_html_in_body]", $allow_html_in_body); ?>
421
  <tr>
422
- <th scope="row"><?php _e('Text for Message Start', 'postie') ?> </th>
423
  <td>
424
  <input name='postie-settings[message_start]' type="text" id='postie-settings-message_start' value="<?php echo esc_attr($message_start); ?>" size="50" /><br />
425
- <p class='description'><?php _e('Remove all text from the beginning of the message up to the point where this is found.', 'postie') ?></p>
426
  </td>
427
  </tr>
428
  <tr>
429
- <th scope="row"><?php _e('Text for Message End', 'postie') ?> </th>
430
  <td>
431
  <input name='postie-settings[message_end]' type="text" id='postie-settings-message_end' value="<?php echo esc_attr($message_end); ?>" size="50" /><br />
432
- <p class='description'><?php _e('Remove all text from the point this is found to the end of the message.', 'postie') ?></p>
433
  </td>
434
  </tr>
435
 
436
  <?php
437
- echo BuildBooleanSelect(__("Filter newlines", "postie"), "postie-settings[filternewlines]", $filternewlines, __("Whether to strip newlines from plain text. Set to no if using markdown or textitle syntax", "postie"));
438
- echo BuildBooleanSelect(__("Replace newline characters with html line breaks (&lt;br /&gt;)", "postie"), "postie-settings[convertnewline]", $convertnewline, __("Filter newlines must be turned on for this option to take effect", "postie"));
439
- echo BuildBooleanSelect(__("Return rejected mail to sender", "postie"), "postie-settings[return_to_sender]", $return_to_sender);
440
  ?>
441
  <tr>
442
  <th>
443
- <?php _e("Send post confirmation email to", 'postie') ?>:
444
  </th>
445
  <td>
446
  <select name='postie-settings[confirmation_email]' id='postie-settings-confirmation_email'>
447
- <option value="sender" <?php echo($confirmation_email == "sender") ? "selected" : "" ?>><?php _e('sender', 'postie') ?></option>
448
- <option value="admin" <?php echo ($confirmation_email == "admin") ? "selected" : "" ?>><?php _e('administrator', 'postie') ?></option>
449
- <option value="both" <?php echo ($confirmation_email == "both") ? "selected" : "" ?>><?php _e('sender and administrator', 'postie') ?></option>
450
- <option value="" <?php echo ($confirmation_email == "") ? "selected" : "" ?>><?php _e('none', 'postie') ?></option>
451
  </select>
452
  </td>
453
  </tr>
454
 
455
  <?php
456
- echo BuildBooleanSelect(__("Automatically convert urls to links", "postie"), "postie-settings[converturls]", $converturls);
457
  ?>
458
  <tr>
459
- <th scope="row"><?php _e('Encoding for pages and feeds', 'postie') ?> </th>
460
  <td>
461
  <input name='postie-settings[message_encoding]' type="text" id='postie-settings-message_encoding' value="<?php echo esc_attr($message_encoding); ?>" size="10" />
462
- <p class='description'><?php _e('The character set for your blog.', 'postie') ?></p>
463
- <p class='description'>UTF-8 <?php _e("should handle ISO-8859-1 as well", 'postie'); ?></p>
464
  </td>
465
  </tr>
466
- <?php echo BuildBooleanSelect(__("Decode Quoted Printable Data", "postie"), "postie-settings[message_dequote]", $message_dequote); ?>
467
- <?php echo BuildBooleanSelect(__("Drop The Signature From Mail", "postie"), "postie-settings[drop_signature]", $drop_signature); ?>
468
- <?php echo BuildTextArea(__("Signature Patterns", "postie"), "postie-settings[sig_pattern_list]", $sig_pattern_list, __("Put each pattern on a separate line. Patterns are <a href='http://regex101.com/' target='_blank'>regular expressions</a>", "postie")); ?>
469
  </table>
470
  </div>
471
 
@@ -473,23 +473,23 @@
473
  <table class='form-table'>
474
 
475
  <?php
476
- echo BuildBooleanSelect(__("Use First Image as Featured Image", "postie"), "postie-settings[featured_image]", $featured_image, __("If any images are attached, the first one will be the featured image for the post", "postie"));
477
- echo BuildBooleanSelect(__("Include Featured Image in Post", "postie"), "postie-settings[include_featured_image]", $include_featured_image, __("Should the featured image be included in the post", "postie"));
478
- echo BuildBooleanSelect(__("Automatically insert image gallery", "postie"), "postie-settings[auto_gallery]", $auto_gallery, __("If any images are attached, they will automatically be inserted as a gallery", "postie"));
479
- echo BuildSelect(__("Gallery Link Type", "postie"), "postie-settings[auto_gallery_link]", $auto_gallery_link, array('Default', 'Post', 'File', 'None'),"Select the type of link the gallery should use");
480
- echo BuildBooleanSelect(__("Image Location", "postie"), "postie-settings[images_append]", $images_append, __("Location of attachments if using 'plain' format. Before or After content.", "postie"), array('After', 'Before'));
481
- echo BuildBooleanSelect(__("Generate Thumbnails", "postie"), "postie-settings[generate_thumbnails]", $generate_thumbnails, __("Some hosts crash during thumbnail generation. Set this to 'No' if you have this issue", "postie"));
482
- echo BuildBooleanSelect(__("Start Image Count At", "postie"), "postie-settings[start_image_count_at_zero]", $start_image_count_at_zero, __('For use if using "Image Place Holder Tag" below.', "postie"), array('Start at 0', 'Start at 1'));
483
  ?>
484
  <tr>
485
- <th scope="row"><?php _e('Image Place Holder Tag', 'postie') ?></th>
486
  <td>
487
  <input name='postie-settings[image_placeholder]' type="text" id='postie-settings-image_placeholder' value="<?php echo esc_attr($image_placeholder); ?>" size="50" /><br />
488
- <p class='description'><?php _e("For use in 'plain' messages. The code for inserting an image. I.e. put \"#img1# in your email where you want the first image to show. See also \"Start Image Count At\"", 'postie') ?></p>
489
  </td>
490
  </tr>
491
  <tr>
492
- <th scope="row"><?php _e('Image Template', 'postie') ?></th>
493
  <td>
494
  <input type='hidden' id='postie-settings-selected_imagetemplate' name='postie-settings[selected_imagetemplate]'
495
  value="<?php echo esc_attr($selected_imagetemplate) ?>" />
@@ -515,10 +515,10 @@
515
  }
516
  ?>
517
  </select>
518
- <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', 'postie'); ?></p>
519
- <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', 'postie'); ?></p>
520
- <p class='description'><?php _e('Sizes for thumbnail, medium, and large images can be chosen in the <a href="options-media.php">Media Settings</a>. The samples here use the default sizes, and will not reflect the sizes you have chosen.', 'postie'); ?></p>
521
- <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', 'postie'); ?></div>
522
  <div id='imageTemplatePreview'></div>
523
  <textarea onchange='changeStyle("imageTemplatePreview", "postie-settings-imagetemplate", "imagetemplateselect",
524
  "postie-settings-selected_imagetemplate", "smiling.jpg", true);' cols='70' rows='7' id='postie-settings-imagetemplate' name='postie-settings[imagetemplate]'>
@@ -563,10 +563,10 @@
563
  <div id="simpleTabs-content-5" class="simpleTabs-content">
564
  <table class='form-table'>
565
  <?php
566
- echo BuildBooleanSelect(__("Use shortcode for embedding video (youtube or vimeo)", "postie"), "postie-settings[shortcode]", $shortcode, "Only change this value to 'Yes' if you have another plugin that will process the shortcode.");
567
  ?>
568
  <tr>
569
- <th scope='row'><?php _e('Video template 1', 'postie') ?></th>
570
  <?php $templateDir = get_option('siteurl') . '/' . PLUGINDIR . '/postie/templates'; ?>
571
  <td>
572
  <input type='hidden' id='postie-settings-selected_video1template' name='postie-settings[selected_video1template]'
@@ -592,10 +592,10 @@
592
  }
593
  ?>
594
  </select>
595
- <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', 'postie') ?></p>
596
- <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', 'postie'); ?></p>
597
 
598
- <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', 'postie'); ?></div>
599
  <div id='video1TemplatePreview'></div>
600
  <textarea onchange="changeStyle('video1TemplatePreview', 'postie-settings-video1template',
601
  'video1templateselect', 'postie-settings-selected_video1template', 'hi.mp4', true);" cols='70' rows='7' id='postie-settings-video1template'
@@ -603,17 +603,17 @@
603
  </td>
604
  </tr>
605
  <tr>
606
- <th scope="row"><?php _e('Video 1 file extensions', 'postie') ?></th>
607
  <td>
608
  <br/><input name='postie-settings[video1types]' type="text" id='postie-settings-video1types'
609
  value="<?php if ($video1types != '') echo esc_attr($video1types); ?>" size="40" />
610
  <p class='description'>
611
- <?php _e('Use video template 1 for files with these extensions (separated by commas)', 'postie') ?></p>
612
  </td>
613
  </tr>
614
  <tr><td colspan="2"><hr /></td></tr>
615
  <tr>
616
- <th scope='row'><?php _e('Video template 2', 'postie') ?></th>
617
  <td>
618
  <input type='hidden' id='postie-settings-selected_video2template' name='postie-settings[selected_video2template]'
619
  value="<?php echo esc_attr($selected_video2template) ?>" />
@@ -638,10 +638,10 @@
638
  }
639
  ?>
640
  </select>
641
- <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', 'postie') ?></p>
642
- <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', 'postie'); ?></p>
643
 
644
- <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', 'postie'); ?></div>
645
  <div id='video2TemplatePreview'></div>
646
  <textarea onchange="changeStyle('video2TemplatePreview', 'postie-settings-video2template',
647
  'video2templateselect', 'postie-settings-selected_video2template', 'hi.flv', true);" cols='70' rows='7' id='postie-settings-video2template'
@@ -651,17 +651,17 @@
651
  </td>
652
  </tr>
653
  <tr>
654
- <th scope="row"><?php _e('Video 2 file extensions', 'postie') ?></th>
655
  <td>
656
  <br/><input name='postie-settings[video2types]' type="text" id='postie-settings-video2types'
657
  value="<?php if ($video2types != '') echo esc_attr($video2types); ?>" size="40" />
658
  <p class='description'>
659
- <?php _e('Use video template 2 for files with these extensions (separated by commas)', 'postie') ?></p>
660
  </td>
661
  </tr>
662
  <tr><td colspan="2"><hr /></td></tr>
663
  <tr>
664
- <th scope='row'><?php _e('Audio template', 'postie') ?></th>
665
  <td>
666
  <input type='hidden' id='postie-settings-selected_audiotemplate' name='postie-settings[selected_audiotemplate]'
667
  value="<?php echo esc_attr($selected_audiotemplate) ?>" />
@@ -687,10 +687,10 @@
687
  }
688
  ?>
689
  </select>
690
- <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', 'postie') ?></p>
691
- <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', 'postie'); ?></p>
692
 
693
- <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', 'postie'); ?></div>
694
  <div id='audioTemplatePreview'></div>
695
  <textarea onchange="changeStyle('audioTemplatePreview', 'postie-settings-audiotemplate',
696
  'audiotemplateselect', 'postie-settings-selected_audiotemplate', 'funky.mp3', true);" cols='70' rows='7' id='postie-settings-audiotemplate'
@@ -698,10 +698,10 @@
698
  </td>
699
  </tr>
700
  <tr>
701
- <th scope="row"><?php _e('Audio file extensions', 'postie') ?></th>
702
  <td>
703
  <input name='postie-settings[audiotypes]' type="text" id='postie-settings-audiotypes' value="<?php echo esc_attr($audiotypes); ?>" size="40" />
704
- <p class='description'><?php _e('Use the audio template for files with these extensions (separated by commas)', 'postie') ?></p>
705
  </td>
706
  </tr>
707
  </table>
@@ -713,11 +713,11 @@
713
 
714
  <div id="simpleTabs-content-6" class="simpleTabs-content">
715
  <table class='form-table'>
716
- <?php echo BuildTextArea(__("Supported MIME Types", "postie"), "postie-settings[supported_file_types]", $supported_file_types, __("Add just the type (not the subtype). Text, Video, Audio, Image and Multipart are always supported. Put each type on a single line", "postie")); ?>
717
- <?php echo BuildTextArea(__("Banned File Names", "postie"), "postie-settings[banned_files_list]", $banned_files_list, __("Put each file name on a single line.Files matching this list will never be posted to your blog. You can use wildcards such as *.xls, or *.* for all files", "postie")); ?>
718
 
719
  <tr>
720
- <th scope='row'><?php _e('Attachment icon set', 'postie') ?></th>
721
  <td>
722
  <input type='hidden' id='postie-settings-icon_set' name='postie-settings[icon_set]'
723
  value="<?php echo esc_attr($icon_set) ?>" />
@@ -746,7 +746,7 @@
746
  </td>
747
  </tr>
748
  <tr>
749
- <th scope='row'><?php _e('Attachment icon size (in pixels)', 'postie') ?></th>
750
  <td>
751
  <input type='hidden' id='postie-settings-icon_size' name='postie-settings[icon_size]'
752
  value="<?php echo esc_attr($icon_size) ?>" />
@@ -769,7 +769,7 @@
769
  </td>
770
  </tr>
771
  <tr>
772
- <th scope='row'><?php _e('Attachment template', 'postie') ?>:<br />
773
  </th>
774
  <td>
775
  <input type='hidden' id='postie-settings-selected_generaltemplate' name='postie-settings[selected_generaltemplate]'
@@ -795,11 +795,11 @@
795
  }
796
  ?>
797
  </select>
798
- <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', 'postie') ?></p>
799
- <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', 'postie'); ?></p>
800
 
801
  <div style="margin-top: 10px; font-weight: bold;">
802
- <?php _e('Preview', 'postie'); ?>
803
  </div>
804
  <div id='generalTemplatePreview'></div>
805
  <textarea onchange="changeStyle('generalTemplatePreview', 'postie-settings-generaltemplate', 'generaltemplateselect', 'postie-settings-selected_generaltemplate', 'interesting_document.doc', true);"
@@ -808,7 +808,7 @@
808
  name='postie-settings[generaltemplate]'><?php echo esc_attr($generaltemplate) ?></textarea>
809
  </td>
810
  </tr>
811
- <?php echo BuildBooleanSelect(__("Use custom image field for attachments", "postie"), "postie-settings[custom_image_field]", $custom_image_field, __("When set to 'Yes' no attachments will appear in the post (including images, video &amp; sound files). Instead the url to the attachment will be put into a custom field named 'image'. Your theme will need logic to display these attachments", "postie")); ?>
812
  </table>
813
  </div>
814
  <div id="simpleTabs-content-7" class="simpleTabs-content">
@@ -838,8 +838,8 @@
838
  </form>
839
  <form id="postie-options" name="postie-options" method="post">
840
  <input type="hidden" name="action" value="reset" />
841
- <input name="Submit" value="<?php _e("Reset Settings To Defaults", 'postie') ?>" type="submit" class='button'>
842
- <span>&nbsp;<?php _e('(Your Mail server settings will be retained)', 'postie') ?></span>
843
  </form>
844
  </div>
845
 
1
  <div class="wrap">
2
  <div style="float:right; width: 220px; border: 1px solid darkgrey; padding:2px;border-radius:10px;margin-left: 10px;" >
3
+ <p class="" style="text-align:center;font-weight: bolder; margin-top: 0px; margin-bottom: 2px;"><?php _e("Please Donate, Every $ Helps!", POSTIE_SLUG); ?></p>
4
+ <p style="margin-top: 0;margin-bottom: 2px;"><?php _e("Your generous donation allows me to continue developing Postie for the WordPress community.", POSTIE_SLUG); ?></p>
5
  <form style="" action="https://www.paypal.com/cgi-bin/webscr" method="post">
6
  <input type="hidden" name="cmd" value="_s-xclick">
7
  <input type="hidden" name="hosted_button_id" value="HPK99BJ88V4C2">
14
  <a style='text-decoration:none' href='admin.php?page=postie-settings'>
15
  <?php
16
  echo '<img src="' . plugins_url('images/mail.png', __FILE__) . '" alt="postie" />';
17
+ _e('Postie Settings', POSTIE_SLUG);
18
  ?>
19
  </a>
20
+ <span class="description">(v<?php _e(POSTIE_VERSION, POSTIE_SLUG); ?>)</span>
21
  </h2>
22
 
23
  <?php
37
  exit;
38
  break;
39
  case "runpostie":
40
+ EchoInfo(__("Checking for mail manually", POSTIE_SLUG));
41
  postie_get_mail();
42
  exit;
43
  break;
44
  case "runpostie-debug":
45
+ EchoInfo(__("Checking for mail manually with debug output", POSTIE_SLUG));
46
  if (!defined('POSTIE_DEBUG')) {
47
  define('POSTIE_DEBUG', true);
48
  }
71
  }
72
  extract($config);
73
  if (!isset($maxemails)) {
74
+ EchoInfo(__("New setting: maxemails", POSTIE_SLUG));
75
  $maxemails = 0;
76
  }
77
  if (!isset($category_match)) {
82
  wp_clear_scheduled_hook('check_postie_hook');
83
  }
84
 
85
+ $messages[1] = __("Configuration successfully updated!", POSTIE_SLUG);
86
+ $messages[2] = __("Error - unable to save configuration", POSTIE_SLUG);
87
  ?>
88
  <?php if (isset($_GET['message'])) : ?>
89
+ <div class="updated"><p><?php _e($messages[$_GET['message']], POSTIE_SLUG); ?></p></div>
90
  <?php endif; ?>
91
 
92
  <form name="postie-options" method='post'>
93
  <input type="hidden" name="action" value="runpostie" />
94
+ <input name="Submit" value="<?php _e("Run Postie", POSTIE_SLUG); ?> &raquo;" type="submit" class='button'>
95
+ <?php _e("(To run the check mail script manually)", POSTIE_SLUG); ?>
96
  </form>
97
  <form name="postie-options" method='post'>
98
  <input type="hidden" name="action" value="runpostie-debug" />
99
+ <input name="Submit" value="<?php _e("Run Postie (Debug)", POSTIE_SLUG); ?> &raquo;" type="submit" class='button'>
100
+ <?php _e("(To run the check mail script manually with full debug output)", POSTIE_SLUG); ?>
101
  </form>
102
  <form name="postie-options" method="post">
103
  <input type="hidden" name="action" value="test" />
104
+ <input name="Submit" value="<?php _e("Test Config", POSTIE_SLUG); ?>&raquo;" type="submit" class='button'>
105
+ <?php _e("this will check your configuration options", POSTIE_SLUG); ?>
106
  </form>
107
 
108
  <form name="postie-options" method="post" action='options.php' autocomplete="off">
115
  <div id="simpleTabs">
116
  <div class="simpleTabs-nav">
117
  <ul>
118
+ <li id="simpleTabs-nav-1"><?php _e('Mailserver', POSTIE_SLUG) ?></li>
119
+ <li id="simpleTabs-nav-2"><?php _e('User', POSTIE_SLUG) ?></li>
120
+ <li id="simpleTabs-nav-3"><?php _e('Message', POSTIE_SLUG) ?></li>
121
+ <li id="simpleTabs-nav-4"><?php _e('Image', POSTIE_SLUG) ?></li>
122
+ <li id="simpleTabs-nav-5"><?php _e('Video and Audio', POSTIE_SLUG) ?></li>
123
+ <li id="simpleTabs-nav-6"><?php _e('Attachments', POSTIE_SLUG) ?></li>
124
+ <li id="simpleTabs-nav-7"><?php _e('Support', POSTIE_SLUG) ?></li>
125
  </ul>
126
  </div>
127
  <div id="simpleTabs-content-1" class="simpleTabs-content">
128
  <table class='form-table'>
129
 
130
  <tr>
131
+ <th scope="row"><lable for="postie-settings-input_protocol"><?php _e('Mail Protocol', POSTIE_SLUG) ?></lable></th>
132
  <td>
133
  <select name='postie-settings[input_protocol]' id='postie-settings-input_protocol'>
134
  <option value="pop3" <?php echo (($input_protocol == "pop3") ? " selected='selected' " : "") ?>>POP3</option>
144
  </td>
145
  </tr>
146
 
147
+ <?php echo BuildBooleanSelect(__("Use Transport Layer Security (TLS)", POSTIE_SLUG), 'postie-settings[email_tls]', $email_tls, __("Choose Yes if your server requires TLS", POSTIE_SLUG)); ?>
148
 
149
  <tr>
150
+ <th scope="row"><label for="postie-settings-mail_server_port"><?php _e('Port', POSTIE_SLUG) ?></label></th>
151
  <td valign="top">
152
  <input name='postie-settings[mail_server_port]' style="width: 70px;" type="number" min="0" id='postie-settings-mail_server_port' value="<?php echo esc_attr($mail_server_port); ?>" size="6" />
153
+ <p class='description'><?php _e("Standard Ports:", POSTIE_SLUG); ?><br />
154
+ <?php _e("POP3", POSTIE_SLUG); ?> - 110<br />
155
+ <?php _e("IMAP", POSTIE_SLUG); ?> - 143<br />
156
+ <?php _e("IMAP-SSL", POSTIE_SLUG); ?>- 993 <br />
157
+ <?php _e("POP3-SSL", POSTIE_SLUG); ?> - 995 <br />
158
  </p>
159
  </td>
160
  </tr>
161
  <tr valign="top">
162
+ <th scope="row"><?php _e('Mail Server', POSTIE_SLUG) ?></th>
163
  <td><input name='postie-settings[mail_server]' type="text" id='postie-settings-mail_server' value="<?php echo esc_attr($mail_server); ?>" size="40" />
164
  </td>
165
  </tr>
166
  <tr valign="top">
167
+ <th scope="row"><?php _e('Mail Userid', POSTIE_SLUG) ?></th>
168
  <td><input name='postie-settings[mail_userid]' type="text" id='postie-settings-mail_userid' autocomplete='off' value="<?php echo esc_attr($mail_userid); ?>" size="40" /></td>
169
  </tr>
170
  <tr valign="top">
171
+ <th scope="row"><?php _e('Mail Password', POSTIE_SLUG) ?></th>
172
  <td>
173
  <input name='postie-settings[mail_password]' type="password" id='postie-settings-mail_password' autocomplete='off' value="<?php echo esc_attr($mail_password); ?>" size="40" />
174
  </td>
175
  </tr>
176
  <tr>
177
+ <th scope="row"><?php _e('Postie Time Correction', POSTIE_SLUG) ?></th>
178
  <td><input style="width: 70px;" name='postie-settings[time_offset]' type="number" step="0.5" id='postie-settings-time_offset' size="2" value="<?php echo esc_attr($time_offset); ?>" />
179
+ <?php _e('hours', POSTIE_SLUG) ?>
180
+ <p class='description'><?php _e("Should be the same as your normal offset, but this lets you adjust it in cases where that doesn't work.", POSTIE_SLUG); ?></p>
181
  </td>
182
  </tr>
183
  <tr>
184
  <th>
185
+ <?php _e('Check for mail every', POSTIE_SLUG) ?>:
186
  </th>
187
  <td>
188
  <select name='postie-settings[interval]' id='postie-settings-interval'>
190
  if ($interval == "weekly") {
191
  echo "selected='selected'";
192
  }
193
+ ?>><?php _e('Once weekly', POSTIE_SLUG) ?></option>
194
  <option value="daily"<?php
195
  if ($interval == "daily") {
196
  echo "selected='selected'";
197
  }
198
+ ?>><?php _e('daily', POSTIE_SLUG) ?></option>
199
  <option value="hourly" <?php
200
  if ($interval == "hourly") {
201
  echo "selected='selected'";
202
  }
203
+ ?>><?php _e('hourly', POSTIE_SLUG) ?></option>
204
  <option value="twiceperhour" <?php
205
  if ($interval == "twiceperhour") {
206
  echo "selected='selected'";
207
  }
208
+ ?>><?php _e('twice per hour', POSTIE_SLUG) ?></option>
209
  <option value="tenminutes" <?php
210
  if ($interval == "tenminutes") {
211
  echo "selected='selected'";
212
  }
213
+ ?>><?php _e('every ten minutes', POSTIE_SLUG) ?></option>
214
  <option value="fiveminutes" <?php
215
  if ($interval == "fiveminutes") {
216
  echo "selected='selected'";
217
  }
218
+ ?>><?php _e('every five minutes', POSTIE_SLUG) ?></option>
219
  <option value="manual" <?php
220
  if ($interval == "manual") {
221
  echo "selected='selected'";
222
  }
223
+ ?>><?php _e('check manually', POSTIE_SLUG) ?></option>
224
  </select>
225
  </td>
226
  </tr>
227
  <tr>
228
  <th>
229
+ <?php _e('Maximum number of emails to process', POSTIE_SLUG); ?>
230
  </th>
231
  <td>
232
  <select name='postie-settings[maxemails]' id='postie-settings-maxemails'>
233
+ <option value="0" <?php if ($maxemails == '0') echo "selected='selected'" ?>><?php _e('All', POSTIE_SLUG); ?></option>
234
  <option value="1" <?php if ($maxemails == '1') echo "selected='selected'" ?>>1</option>
235
  <option value="2" <?php if ($maxemails == '2') echo "selected='selected'" ?>>2</option>
236
  <option value="5" <?php if ($maxemails == '5') echo "selected='selected'" ?>>5</option>
240
  </select>
241
  </td>
242
  </tr>
243
+ <?php echo BuildBooleanSelect(__("Delete email after posting", POSTIE_SLUG), 'postie-settings[delete_mail_after_processing]', $delete_mail_after_processing, __("Only set to no for testing purposes", POSTIE_SLUG)); ?>
244
+ <?php echo BuildTextArea(__("Allowed SMTP servers", POSTIE_SLUG), "postie-settings[smtp]", $smtp, __("Only allow messages which have been sent throught the following SMTP servers. Put each server on a separate line. Leave blank to allow any SMTP server.", POSTIE_SLUG)); ?>
245
  </table>
246
  </div>
247
 
248
  <div id="simpleTabs-content-2" class="simpleTabs-content">
249
  <table class='form-table'>
250
 
251
+ <?php echo BuildBooleanSelect(__("Allow Anyone To Post Via Email", POSTIE_SLUG), "postie-settings[turn_authorization_off]", $turn_authorization_off, __("Changing this to yes <b style='color: red'>is not recommended</b> - anything that gets sent in will automatically be posted.", POSTIE_SLUG)); ?>
252
+ <?php echo BuildBooleanSelect(__("Force User Login", POSTIE_SLUG), "postie-settings[force_user_login]", $force_user_login, __("Changing this to yes will cause Postie to try and login as the 'from' user if they exist. This should be set to 'Yes' if you use custom taxonomies in the subject line.", POSTIE_SLUG)); ?>
253
  <tr>
254
  <th scope="row">
255
+ <?php _e('Roles That Can Post', POSTIE_SLUG) ?><br />
256
  </th>
257
  <td>
258
  <table class="checkbox-table">
280
  }
281
  }
282
  ?>
283
+ <p class='description'><?php _e("This allows you to grant access to other users to post if they have the proper access level. Administrators can always post.", POSTIE_SLUG); ?></p>
284
 
285
  </table>
286
  </td>
287
  </tr>
288
 
289
+ <?php echo BuildTextArea(__("Authorized Addresses", POSTIE_SLUG), "postie-settings[authorized_addresses]", $authorized_addresses, __("Put each email address on a single line. Posts from emails in this list will be treated as if they came from the admin. If you would prefer to have users post under their own name - create a WordPress user with the correct access level.", POSTIE_SLUG)); ?>
290
  <tr>
291
+ <th scope="row"><?php _e('Default Poster', POSTIE_SLUG) ?></th>
292
  <td>
293
  <select name='postie-settings[admin_username]' id='postie-settings[admin_username]'>
294
  <?php
305
  }
306
  ?>
307
  </select>
308
+ <p class='description'><?php _e("This will be the poster if you allow posting from emails that are not a registered blog user.", POSTIE_SLUG); ?></p>
309
  </td>
310
  </tr>
311
  </table>
314
  <div id = "simpleTabs-content-3" class = "simpleTabs-content">
315
  <table class = 'form-table'>
316
  <tr>
317
+ <th scope="row"><?php _e('Preferred Text Type', POSTIE_SLUG) ?> </th>
318
  <td>
319
  <select name='postie-settings[prefer_text_type]' id='postie-settings-prefer_text_type'>
320
  <?php printf('<option value="plain" %s>plain</option>', ($prefer_text_type == "plain") ? "selected" : "") ?>
323
  </td>
324
  </tr>
325
  <tr valign = "top">
326
+ <th scope = "row"><?php _e('Default category', POSTIE_SLUG) ?></th>
327
  <td>
328
  <?php
329
  $defaultCat = $default_post_category;
331
  wp_dropdown_categories($args);
332
  ?>
333
  </tr>
334
+ <?php echo BuildBooleanSelect(__("Match short category", POSTIE_SLUG), "postie-settings[category_match]", $category_match, __("Try to match categories using 'starts with logic' otherwise only do exact matches.<br />Note that custom taxonomies will not be found if this setting is 'No'", POSTIE_SLUG)); ?>
335
 
336
  <tr valign="top">
337
  <th scope="row">
338
+ <?php _e('Default tag(s)', POSTIE_SLUG) ?><br />
339
  </th>
340
  <td>
341
  <input type='text' name='postie-settings[default_post_tags]' id='postie-settings-default_post_tags' value='<?php echo esc_attr($default_post_tags) ?>' />
342
+ <p class='description'><?php _e('separated by commas', POSTIE_SLUG) ?></p>
343
  </td>
344
  </tr>
345
 
346
  <tr>
347
+ <th scope="row"><?php _e('Default Post Status', POSTIE_SLUG) ?> </th>
348
  <td>
349
  <select name='postie-settings[post_status]' id='postie-settings-post_status'>
350
  <?php
364
  </tr>
365
 
366
  <tr>
367
+ <th scope="row"><?php _e('Default Post Format', POSTIE_SLUG) ?> </th>
368
  <td>
369
  <select name='postie-settings[post_format]' id='postie-settings-post_format'>
370
  <?php
388
  </tr>
389
 
390
  <tr>
391
+ <th scope="row"><?php _e('Default Post Type', POSTIE_SLUG) ?> </th>
392
  <td>
393
  <select name='postie-settings[post_type]' id='postie-settings-post_type'>
394
  <?php
407
  </tr>
408
 
409
  <tr>
410
+ <th scope="row"><?php _e('Default Title', POSTIE_SLUG) ?> </th>
411
  <td>
412
  <input name='postie-settings[default_title]' type="text" id='postie-settings-default_title' value="<?php echo esc_attr($default_title); ?>" size="50" /><br />
413
  </td>
414
  </tr>
415
 
416
+ <?php echo BuildBooleanSelect(__("Treat Replies As", POSTIE_SLUG), "postie-settings[reply_as_comment]", $reply_as_comment, "", array("comments", "new posts")); ?>
417
+ <?php echo BuildBooleanSelect(__("Forward Rejected Mail", POSTIE_SLUG), "postie-settings[forward_rejected_mail]", $forward_rejected_mail); ?>
418
+ <?php echo BuildBooleanSelect(__("Allow Subject In Mail", POSTIE_SLUG), "postie-settings[allow_subject_in_mail]", $allow_subject_in_mail, "Enclose the subject between '#' on the very first line. E.g. #this is my subject#"); ?>
419
+ <?php echo BuildBooleanSelect(__("Allow HTML In Mail Subject", POSTIE_SLUG), "postie-settings[allow_html_in_subject]", $allow_html_in_subject); ?>
420
+ <?php echo BuildBooleanSelect(__("Allow HTML In Mail Body", POSTIE_SLUG), "postie-settings[allow_html_in_body]", $allow_html_in_body); ?>
421
  <tr>
422
+ <th scope="row"><?php _e('Text for Message Start', POSTIE_SLUG) ?> </th>
423
  <td>
424
  <input name='postie-settings[message_start]' type="text" id='postie-settings-message_start' value="<?php echo esc_attr($message_start); ?>" size="50" /><br />
425
+ <p class='description'><?php _e('Remove all text from the beginning of the message up to the point where this is found.', POSTIE_SLUG) ?></p>
426
  </td>
427
  </tr>
428
  <tr>
429
+ <th scope="row"><?php _e('Text for Message End', POSTIE_SLUG) ?> </th>
430
  <td>
431
  <input name='postie-settings[message_end]' type="text" id='postie-settings-message_end' value="<?php echo esc_attr($message_end); ?>" size="50" /><br />
432
+ <p class='description'><?php _e('Remove all text from the point this is found to the end of the message.', POSTIE_SLUG) ?></p>
433
  </td>
434
  </tr>
435
 
436
  <?php
437
+ echo BuildBooleanSelect(__("Filter newlines", POSTIE_SLUG), "postie-settings[filternewlines]", $filternewlines, __("Whether to strip newlines from plain text. Set to no if using markdown or textitle syntax", POSTIE_SLUG));
438
+ echo BuildBooleanSelect(__("Replace newline characters with html line breaks (&lt;br /&gt;)", POSTIE_SLUG), "postie-settings[convertnewline]", $convertnewline, __("Filter newlines must be turned on for this option to take effect", POSTIE_SLUG));
439
+ echo BuildBooleanSelect(__("Return rejected mail to sender", POSTIE_SLUG), "postie-settings[return_to_sender]", $return_to_sender);
440
  ?>
441
  <tr>
442
  <th>
443
+ <?php _e("Send post confirmation email to", POSTIE_SLUG) ?>:
444
  </th>
445
  <td>
446
  <select name='postie-settings[confirmation_email]' id='postie-settings-confirmation_email'>
447
+ <option value="sender" <?php echo($confirmation_email == "sender") ? "selected" : "" ?>><?php _e('sender', POSTIE_SLUG) ?></option>
448
+ <option value="admin" <?php echo ($confirmation_email == "admin") ? "selected" : "" ?>><?php _e('administrator', POSTIE_SLUG) ?></option>
449
+ <option value="both" <?php echo ($confirmation_email == "both") ? "selected" : "" ?>><?php _e('sender and administrator', POSTIE_SLUG) ?></option>
450
+ <option value="" <?php echo ($confirmation_email == "") ? "selected" : "" ?>><?php _e('none', POSTIE_SLUG) ?></option>
451
  </select>
452
  </td>
453
  </tr>
454
 
455
  <?php
456
+ echo BuildBooleanSelect(__("Automatically convert urls to links", POSTIE_SLUG), "postie-settings[converturls]", $converturls);
457
  ?>
458
  <tr>
459
+ <th scope="row"><?php _e('Encoding for pages and feeds', POSTIE_SLUG) ?> </th>
460
  <td>
461
  <input name='postie-settings[message_encoding]' type="text" id='postie-settings-message_encoding' value="<?php echo esc_attr($message_encoding); ?>" size="10" />
462
+ <p class='description'><?php _e('The character set for your blog.', POSTIE_SLUG) ?></p>
463
+ <p class='description'>UTF-8 <?php _e("should handle ISO-8859-1 as well", POSTIE_SLUG); ?></p>
464
  </td>
465
  </tr>
466
+ <?php echo BuildBooleanSelect(__("Decode Quoted Printable Data", POSTIE_SLUG), "postie-settings[message_dequote]", $message_dequote); ?>
467
+ <?php echo BuildBooleanSelect(__("Drop The Signature From Mail", POSTIE_SLUG), "postie-settings[drop_signature]", $drop_signature, __("Really only works with 'plain' format.")); ?>
468
+ <?php echo BuildTextArea(__("Signature Patterns", POSTIE_SLUG), "postie-settings[sig_pattern_list]", $sig_pattern_list, __("Really only works with 'plain' format. Put each pattern on a separate line. Patterns are <a href='http://regex101.com/' target='_blank'>regular expressions</a> and are put inside /^{pattern}$/i", POSTIE_SLUG)); ?>
469
  </table>
470
  </div>
471
 
473
  <table class='form-table'>
474
 
475
  <?php
476
+ echo BuildBooleanSelect(__("Use First Image as Featured Image", POSTIE_SLUG), "postie-settings[featured_image]", $featured_image, __("If any images are attached, the first one will be the featured image for the post", POSTIE_SLUG));
477
+ echo BuildBooleanSelect(__("Include Featured Image in Post", POSTIE_SLUG), "postie-settings[include_featured_image]", $include_featured_image, __("Should the featured image be included in the post", POSTIE_SLUG));
478
+ echo BuildBooleanSelect(__("Automatically insert image gallery", POSTIE_SLUG), "postie-settings[auto_gallery]", $auto_gallery, __("If any images are attached, they will automatically be inserted as a gallery", POSTIE_SLUG));
479
+ echo BuildSelect(__("Gallery Link Type", POSTIE_SLUG), "postie-settings[auto_gallery_link]", $auto_gallery_link, array('Default', 'Post', 'File', 'None'), "Select the type of link the gallery should use");
480
+ echo BuildBooleanSelect(__("Image Location", POSTIE_SLUG), "postie-settings[images_append]", $images_append, __("Location of attachments if using 'plain' format. Before or After content.", POSTIE_SLUG), array('After', 'Before'));
481
+ echo BuildBooleanSelect(__("Generate Thumbnails", POSTIE_SLUG), "postie-settings[generate_thumbnails]", $generate_thumbnails, __("Some hosts crash during thumbnail generation. Set this to 'No' if you have this issue", POSTIE_SLUG));
482
+ echo BuildBooleanSelect(__("Start Image Count At", POSTIE_SLUG), "postie-settings[start_image_count_at_zero]", $start_image_count_at_zero, __('For use if using "Image Place Holder Tag" below.', POSTIE_SLUG), array('Start at 0', 'Start at 1'));
483
  ?>
484
  <tr>
485
+ <th scope="row"><?php _e('Image Place Holder Tag', POSTIE_SLUG) ?></th>
486
  <td>
487
  <input name='postie-settings[image_placeholder]' type="text" id='postie-settings-image_placeholder' value="<?php echo esc_attr($image_placeholder); ?>" size="50" /><br />
488
+ <p class='description'><?php _e("For use in 'plain' messages. The code for inserting an image. I.e. put \"#img1# in your email where you want the first image to show. See also \"Start Image Count At\"", POSTIE_SLUG) ?></p>
489
  </td>
490
  </tr>
491
  <tr>
492
+ <th scope="row"><?php _e('Image Template', POSTIE_SLUG) ?></th>
493
  <td>
494
  <input type='hidden' id='postie-settings-selected_imagetemplate' name='postie-settings[selected_imagetemplate]'
495
  value="<?php echo esc_attr($selected_imagetemplate) ?>" />
515
  }
516
  ?>
517
  </select>
518
+ <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', POSTIE_SLUG); ?></p>
519
+ <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', POSTIE_SLUG); ?></p>
520
+ <p class='description'><?php _e('Sizes for thumbnail, medium, and large images can be chosen in the <a href="options-media.php">Media Settings</a>. The samples here use the default sizes, and will not reflect the sizes you have chosen.', POSTIE_SLUG); ?></p>
521
+ <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', POSTIE_SLUG); ?></div>
522
  <div id='imageTemplatePreview'></div>
523
  <textarea onchange='changeStyle("imageTemplatePreview", "postie-settings-imagetemplate", "imagetemplateselect",
524
  "postie-settings-selected_imagetemplate", "smiling.jpg", true);' cols='70' rows='7' id='postie-settings-imagetemplate' name='postie-settings[imagetemplate]'>
563
  <div id="simpleTabs-content-5" class="simpleTabs-content">
564
  <table class='form-table'>
565
  <?php
566
+ echo BuildBooleanSelect(__("Use shortcode for embedding video (youtube or vimeo)", POSTIE_SLUG), "postie-settings[shortcode]", $shortcode, "Only change this value to 'Yes' if you have another plugin that will process the shortcode.");
567
  ?>
568
  <tr>
569
+ <th scope='row'><?php _e('Video template 1', POSTIE_SLUG) ?></th>
570
  <?php $templateDir = get_option('siteurl') . '/' . PLUGINDIR . '/postie/templates'; ?>
571
  <td>
572
  <input type='hidden' id='postie-settings-selected_video1template' name='postie-settings[selected_video1template]'
592
  }
593
  ?>
594
  </select>
595
+ <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', POSTIE_SLUG) ?></p>
596
+ <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', POSTIE_SLUG); ?></p>
597
 
598
+ <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', POSTIE_SLUG); ?></div>
599
  <div id='video1TemplatePreview'></div>
600
  <textarea onchange="changeStyle('video1TemplatePreview', 'postie-settings-video1template',
601
  'video1templateselect', 'postie-settings-selected_video1template', 'hi.mp4', true);" cols='70' rows='7' id='postie-settings-video1template'
603
  </td>
604
  </tr>
605
  <tr>
606
+ <th scope="row"><?php _e('Video 1 file extensions', POSTIE_SLUG) ?></th>
607
  <td>
608
  <br/><input name='postie-settings[video1types]' type="text" id='postie-settings-video1types'
609
  value="<?php if ($video1types != '') echo esc_attr($video1types); ?>" size="40" />
610
  <p class='description'>
611
+ <?php _e('Use video template 1 for files with these extensions (separated by commas)', POSTIE_SLUG) ?></p>
612
  </td>
613
  </tr>
614
  <tr><td colspan="2"><hr /></td></tr>
615
  <tr>
616
+ <th scope='row'><?php _e('Video template 2', POSTIE_SLUG) ?></th>
617
  <td>
618
  <input type='hidden' id='postie-settings-selected_video2template' name='postie-settings[selected_video2template]'
619
  value="<?php echo esc_attr($selected_video2template) ?>" />
638
  }
639
  ?>
640
  </select>
641
+ <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', POSTIE_SLUG) ?></p>
642
+ <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', POSTIE_SLUG); ?></p>
643
 
644
+ <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', POSTIE_SLUG); ?></div>
645
  <div id='video2TemplatePreview'></div>
646
  <textarea onchange="changeStyle('video2TemplatePreview', 'postie-settings-video2template',
647
  'video2templateselect', 'postie-settings-selected_video2template', 'hi.flv', true);" cols='70' rows='7' id='postie-settings-video2template'
651
  </td>
652
  </tr>
653
  <tr>
654
+ <th scope="row"><?php _e('Video 2 file extensions', POSTIE_SLUG) ?></th>
655
  <td>
656
  <br/><input name='postie-settings[video2types]' type="text" id='postie-settings-video2types'
657
  value="<?php if ($video2types != '') echo esc_attr($video2types); ?>" size="40" />
658
  <p class='description'>
659
+ <?php _e('Use video template 2 for files with these extensions (separated by commas)', POSTIE_SLUG) ?></p>
660
  </td>
661
  </tr>
662
  <tr><td colspan="2"><hr /></td></tr>
663
  <tr>
664
+ <th scope='row'><?php _e('Audio template', POSTIE_SLUG) ?></th>
665
  <td>
666
  <input type='hidden' id='postie-settings-selected_audiotemplate' name='postie-settings[selected_audiotemplate]'
667
  value="<?php echo esc_attr($selected_audiotemplate) ?>" />
687
  }
688
  ?>
689
  </select>
690
+ <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', POSTIE_SLUG) ?></p>
691
+ <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', POSTIE_SLUG); ?></p>
692
 
693
+ <div style="margin-top: 10px; font-weight: bold;"><?php _e('Preview', POSTIE_SLUG); ?></div>
694
  <div id='audioTemplatePreview'></div>
695
  <textarea onchange="changeStyle('audioTemplatePreview', 'postie-settings-audiotemplate',
696
  'audiotemplateselect', 'postie-settings-selected_audiotemplate', 'funky.mp3', true);" cols='70' rows='7' id='postie-settings-audiotemplate'
698
  </td>
699
  </tr>
700
  <tr>
701
+ <th scope="row"><?php _e('Audio file extensions', POSTIE_SLUG) ?></th>
702
  <td>
703
  <input name='postie-settings[audiotypes]' type="text" id='postie-settings-audiotypes' value="<?php echo esc_attr($audiotypes); ?>" size="40" />
704
+ <p class='description'><?php _e('Use the audio template for files with these extensions (separated by commas)', POSTIE_SLUG) ?></p>
705
  </td>
706
  </tr>
707
  </table>
713
 
714
  <div id="simpleTabs-content-6" class="simpleTabs-content">
715
  <table class='form-table'>
716
+ <?php echo BuildTextArea(__("Supported MIME Types", POSTIE_SLUG), "postie-settings[supported_file_types]", $supported_file_types, __("Add just the type (not the subtype). Text, Video, Audio, Image and Multipart are always supported. Put each type on a single line", POSTIE_SLUG)); ?>
717
+ <?php echo BuildTextArea(__("Banned File Names", POSTIE_SLUG), "postie-settings[banned_files_list]", $banned_files_list, __("Put each file name on a single line.Files matching this list will never be posted to your blog. You can use wildcards such as *.xls, or *.* for all files", POSTIE_SLUG)); ?>
718
 
719
  <tr>
720
+ <th scope='row'><?php _e('Attachment icon set', POSTIE_SLUG) ?></th>
721
  <td>
722
  <input type='hidden' id='postie-settings-icon_set' name='postie-settings[icon_set]'
723
  value="<?php echo esc_attr($icon_set) ?>" />
746
  </td>
747
  </tr>
748
  <tr>
749
+ <th scope='row'><?php _e('Attachment icon size (in pixels)', POSTIE_SLUG) ?></th>
750
  <td>
751
  <input type='hidden' id='postie-settings-icon_size' name='postie-settings[icon_size]'
752
  value="<?php echo esc_attr($icon_size) ?>" />
769
  </td>
770
  </tr>
771
  <tr>
772
+ <th scope='row'><?php _e('Attachment template', POSTIE_SLUG) ?>:<br />
773
  </th>
774
  <td>
775
  <input type='hidden' id='postie-settings-selected_generaltemplate' name='postie-settings[selected_generaltemplate]'
795
  }
796
  ?>
797
  </select>
798
+ <p class='description'><?php _e('Choose a default template, then customize to your liking in the text box', POSTIE_SLUG) ?></p>
799
+ <p class='description'><?php _e('Note that this template are only used if the "Preferred Text Type" setting is set to "plain"', POSTIE_SLUG); ?></p>
800
 
801
  <div style="margin-top: 10px; font-weight: bold;">
802
+ <?php _e('Preview', POSTIE_SLUG); ?>
803
  </div>
804
  <div id='generalTemplatePreview'></div>
805
  <textarea onchange="changeStyle('generalTemplatePreview', 'postie-settings-generaltemplate', 'generaltemplateselect', 'postie-settings-selected_generaltemplate', 'interesting_document.doc', true);"
808
  name='postie-settings[generaltemplate]'><?php echo esc_attr($generaltemplate) ?></textarea>
809
  </td>
810
  </tr>
811
+ <?php echo BuildBooleanSelect(__("Use custom image field for attachments", POSTIE_SLUG), "postie-settings[custom_image_field]", $custom_image_field, __("When set to 'Yes' no attachments will appear in the post (including images, video &amp; sound files). Instead the url to the attachment will be put into a custom field named 'image'. Your theme will need logic to display these attachments", POSTIE_SLUG)); ?>
812
  </table>
813
  </div>
814
  <div id="simpleTabs-content-7" class="simpleTabs-content">
838
  </form>
839
  <form id="postie-options" name="postie-options" method="post">
840
  <input type="hidden" name="action" value="reset" />
841
+ <input name="Submit" value="<?php _e("Reset Settings To Defaults", POSTIE_SLUG) ?>" type="submit" class='button'>
842
+ <span>&nbsp;<?php _e('(Your Mail server settings will be retained)', POSTIE_SLUG) ?></span>
843
  </form>
844
  </div>
845
 
docs/Changes.txt CHANGED
@@ -27,6 +27,17 @@ All script, style and body tags are stripped from html emails.
27
  Attachments are now processed in the order they were attached.
28
 
29
  == CHANGELOG ==
 
 
 
 
 
 
 
 
 
 
 
30
  = 1.7.6 (2015-08-13) =
31
  * Added setting to control whether the featured image is included in the post or not.
32
  * Added 2 new filters, postie_comment_before and postie_comment_after
27
  Attachments are now processed in the order they were attached.
28
 
29
  == CHANGELOG ==
30
+ = 1.7.8 (2015-09-08) =
31
+ * Remove mbstring admin message. Added fallback if mbstring is not installed
32
+ * More explanation for signature regex
33
+ * Add 1 minute schedule to supplement new external cron recommendation
34
+ * Updates to support upcoming Language Packs feature for plugins
35
+ * Moved important warning to admin notices
36
+ * New filter postie_category_default
37
+
38
+ = 1.7.7 (2015-08-24) =
39
+ * Fixed bug where "To" and "Reply-To" emails were not parsed correctly for postie_filter_email2 filter
40
+
41
  = 1.7.6 (2015-08-13) =
42
  * Added setting to control whether the featured image is included in the post or not.
43
  * Added 2 new filters, postie_comment_before and postie_comment_after
docs/Postie.txt CHANGED
@@ -5,10 +5,12 @@ Author URI: http://allens-home.com/
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email, post-by-email
7
  Requires at least: 3.3.0
8
- Tested up to: 4.2.4
9
- Stable tag: 1.7.6
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
 
12
 
13
  Postie allows you to create posts via email, including many advanced features not found in WordPress's default Post by Email feature.
14
 
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email, post-by-email
7
  Requires at least: 3.3.0
8
+ Tested up to: 4.3
9
+ Stable tag: 1.7.8
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
+ Text Domain: postie
13
+ Domain Path: /languages
14
 
15
  Postie allows you to create posts via email, including many advanced features not found in WordPress's default Post by Email feature.
16
 
languages/makepot.cmd DELETED
@@ -1 +0,0 @@
1
- php.exe ..\util\wp-i18n\makepot.php wp-plugin .. postie.pot
 
postie-functions.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
  /*
3
- $Id: postie-functions.php 1220239 2015-08-13 19:39:22Z WayneAllen $
4
  */
5
 
6
  //to turn on debug output add the following line to wp-config.php
@@ -28,28 +28,36 @@ if (!function_exists('boolval')) {
28
  }
29
 
30
  if (!function_exists('mb_str_replace')) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
- function mb_str_replace($search, $replace, $subject, &$count = 0) {
33
- if (!is_array($subject)) {
34
- // Normalize $search and $replace so they are both arrays of the same length
35
- $searches = is_array($search) ? array_values($search) : array($search);
36
- $replacements = array_pad(is_array($replace) ? array_values($replace) : array($replace), count($searches), '');
37
 
38
- foreach ($searches as $key => $search) {
39
- $parts = mb_split(preg_quote($search), $subject);
40
- $count += count($parts) - 1;
41
- $subject = implode($replacements[$key], $parts);
42
- }
43
- } else {
44
- // Call mb_str_replace for each subject in array, recursively
45
- foreach ($subject as $key => $value) {
46
- $subject[$key] = mb_str_replace($search, $replace, $value, $count);
47
- }
48
  }
49
 
50
- return $subject;
51
  }
52
-
53
  }
54
 
55
  function postie_environment() {
@@ -61,16 +69,7 @@ function postie_environment() {
61
  DebugEcho("Time: " . date('Y-m-d H:i:s', time()) . " GMT");
62
  DebugEcho("Error log: " . ini_get('error_log'));
63
  DebugEcho("TMP dir: " . get_temp_dir());
64
-
65
- if (isMarkdownInstalled()) {
66
- EchoInfo("You currently have the Markdown plugin installed. It will cause problems if you send in HTML email. Please turn it off if you intend to send email using HTML.");
67
- }
68
-
69
- if (!isPostieInCorrectDirectory()) {
70
- EchoInfo("Warning! Postie expects to be in its own directory named postie.");
71
- } else {
72
- DebugEcho("Postie is in " . plugin_dir_path(__FILE__));
73
- }
74
 
75
  if (defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) {
76
  DebugEcho("Alternate cron is enabled");
@@ -86,24 +85,6 @@ function postie_environment() {
86
  if (defined('WP_CRON_LOCK_TIMEOUT') && WP_CRON_LOCK_TIMEOUT === true) {
87
  DebugEcho("Cron lock timeout is:" . WP_CRON_LOCK_TIMEOUT);
88
  }
89
-
90
- if (HasIconvInstalled()) {
91
- DebugEcho("iconv: installed");
92
- } else {
93
- EchoInfo("Warning! Postie requires that iconv be enabled.");
94
- }
95
-
96
- if (function_exists('imap_mime_header_decode')) {
97
- DebugEcho("imap: installed");
98
- } else {
99
- DebugEcho("Warning! Postie requires that imap be enabled if you are using IMAP, IMAP-SSL or POP3-SSL.");
100
- }
101
-
102
- if (HasMbStringInstalled()) {
103
- DebugEcho("mbstring: installed");
104
- } else {
105
- EchoInfo("Warning! Postie requires that mbstring be enabled.");
106
- }
107
  }
108
 
109
  function postie_disable_revisions($restore = false) {
@@ -294,7 +275,11 @@ function CreatePost($poster, $mimeDecodedEmail, $post_id, &$is_reply, $config, $
294
  DebugEcho("post type: $content");
295
  }
296
 
297
- $post_categories = tag_Categories($subject, $config['default_post_category'], $config['category_match'], $post_id);
 
 
 
 
298
  if ($fulldebug) {
299
  DebugEcho("post category: $content");
300
  }
@@ -1390,12 +1375,12 @@ function ValidatePoster(&$mimeDecodedEmail, $config) {
1390
 
1391
  $toEmail = '';
1392
  if (isset($mimeDecodedEmail->headers["to"])) {
1393
- $toEmail = $mimeDecodedEmail->headers["to"];
1394
  }
1395
 
1396
  $replytoEmail = '';
1397
  if (isset($mimeDecodedEmail->headers["reply-to"])) {
1398
- $replytoEmail = $mimeDecodedEmail->headers["reply-to"];
1399
  }
1400
 
1401
  $from = apply_filters("postie_filter_email2", $from, $toEmail, $replytoEmail);
@@ -1828,7 +1813,7 @@ function postie_media_handle_upload($part, $post_id, $poster, $generate_thubnail
1828
  $post_data = array();
1829
  $overrides = array('test_form' => false);
1830
 
1831
- $tmpFile = tempnam(get_temp_dir(), 'postie');
1832
  if ($tmpFile !== false) {
1833
  $fp = fopen($tmpFile, 'w');
1834
  if ($fp) {
@@ -1991,13 +1976,13 @@ function postie_handle_upload(&$file, $overrides = false, $time = null, $mimetyp
1991
 
1992
  // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error'].
1993
  $upload_error_strings = array(false,
1994
- __("The uploaded file exceeds the <code>upload_max_filesize</code> directive in <code>php.ini</code>."),
1995
- __("The uploaded file exceeds the <em>MAX_FILE_SIZE</em> directive that was specified in the HTML form."),
1996
- __("The uploaded file was only partially uploaded."),
1997
- __("No file was uploaded."),
1998
  '',
1999
- __("Missing a temporary folder."),
2000
- __("Failed to write file to disk."));
2001
 
2002
  // Install user overrides. Did we mention that this voids your warranty?
2003
  if (is_array($overrides)) {
@@ -2009,11 +1994,11 @@ function postie_handle_upload(&$file, $overrides = false, $time = null, $mimetyp
2009
  }
2010
  // A non-empty file will pass this test.
2011
  if (!($file['size'] > 0 )) {
2012
- return $upload_error_handler($file, __('File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.'));
2013
  }
2014
  // A properly uploaded file will pass this test. There should be no reason to override this one.
2015
  if (!file_exists($file['tmp_name'])) {
2016
- return $upload_error_handler($file, __('Specified file failed upload test.'));
2017
  }
2018
 
2019
  $mimetype = $file['type'];
@@ -2031,7 +2016,7 @@ function postie_handle_upload(&$file, $overrides = false, $time = null, $mimetyp
2031
 
2032
  if ((empty($mimetype) && empty($ext)) && !current_user_can('unfiltered_upload')) {
2033
  DebugEcho("postie_handle_upload: no type/ext & user restricted");
2034
- return $upload_error_handler($file, __('File type does not meet security guidelines. Try another.'));
2035
  }
2036
 
2037
  // A writable uploads dir will pass this test. Again, there's no point overriding this one.
@@ -2054,7 +2039,7 @@ function postie_handle_upload(&$file, $overrides = false, $time = null, $mimetyp
2054
  DebugEcho("new file: $new_file");
2055
  //DebugDump($file);
2056
  //DebugDump($uploads);
2057
- return $upload_error_handler($file, sprintf(__('The uploaded file could not be moved to %s.'), $uploads['path']));
2058
  } else {
2059
  DebugEcho("upload: rename to $new_file succeeded");
2060
  }
@@ -2721,7 +2706,7 @@ function tag_Excerpt(&$content, $config) {
2721
  * This function determines the categories ids for the post
2722
  * @return array
2723
  */
2724
- function tag_Categories(&$subject, $defaultCategory, $category_match, $post_id) {
2725
  $original_subject = $subject;
2726
  $found = false;
2727
  $post_categories = array();
@@ -2779,7 +2764,7 @@ function tag_Categories(&$subject, $defaultCategory, $category_match, $post_id)
2779
  }
2780
  }
2781
  if (!$found) {
2782
- $post_categories[] = $defaultCategory;
2783
  $subject = $original_subject;
2784
  }
2785
  $subject = trim($subject);
@@ -2864,7 +2849,7 @@ function BuildSelect($label, $id, $current_value, $options, $recommendation = NU
2864
 
2865
  $html.="</th><td><select name='$id' id='$id'>";
2866
  foreach ($options as $value) {
2867
- $html.="<option value='$value' " . ($value == $current_value ? "selected='selected'" : "") . ">" . __($value, 'postie') . '</option>';
2868
  }
2869
  $html.='</select>';
2870
  if (!empty($recommendation)) {
@@ -2894,8 +2879,8 @@ function BuildBooleanSelect($label, $id, $current_value, $recommendation = NULL,
2894
 
2895
  $html.="</th>
2896
  <td><select name='$id' id='$id'>
2897
- <option value='1'>" . __($options[0], 'postie') . "</option>
2898
- <option value='0' " . (!$current_value ? "selected='selected'" : "") . ">" . __($options[1], 'postie') . '</option>
2899
  </select>';
2900
  if (!empty($recommendation)) {
2901
  $html.='<p class = "description">' . $recommendation . '</p>';
@@ -3358,18 +3343,6 @@ function HasFunctions($function_list, $display = true) {
3358
  return true;
3359
  }
3360
 
3361
- /**
3362
- * This function tests to see if postie is its own directory
3363
- */
3364
- function isPostieInCorrectDirectory() {
3365
- $dir_parts = explode(DIRECTORY_SEPARATOR, dirname(__FILE__));
3366
- $last_dir = array_pop($dir_parts);
3367
- if ($last_dir != "postie") {
3368
- return false;
3369
- }
3370
- return true;
3371
- }
3372
-
3373
  /**
3374
  * This function looks for markdown which causes problems with postie
3375
  */
@@ -3656,10 +3629,10 @@ function postie_get_mail() {
3656
  $emails = FetchMail($config['mail_server'], $config['mail_server_port'], $config['mail_userid'], $config['mail_password'], $config['input_protocol'], $config['time_offset'], $test_email, $config['delete_mail_after_processing'], $config['maxemails'], $config['email_tls']);
3657
  $message = 'Done.';
3658
 
3659
- EchoInfo(sprintf(__("There are %d messages to process", "postie"), count($emails)));
3660
 
3661
  if (function_exists('memory_get_usage')) {
3662
- DebugEcho(__("memory at start of email processing:") . memory_get_usage());
3663
  }
3664
 
3665
  DebugDump($config);
@@ -3671,11 +3644,11 @@ function postie_get_mail() {
3671
  DebugEcho("$message_number: ------------------------------------");
3672
  //sanity check to see if there is any info in the message
3673
  if ($email == NULL) {
3674
- $message = __('Dang, message is empty!', 'postie');
3675
  EchoInfo("$message_number: $message");
3676
  continue;
3677
  } else if ($email == 'already read') {
3678
- $message = __("Message is already marked 'read'.", 'postie');
3679
  EchoInfo("$message_number: $message");
3680
  continue;
3681
  }
1
  <?php
2
  /*
3
+ $Id: postie-functions.php 1240939 2015-09-08 20:01:51Z WayneAllen $
4
  */
5
 
6
  //to turn on debug output add the following line to wp-config.php
28
  }
29
 
30
  if (!function_exists('mb_str_replace')) {
31
+ if (function_exists('mb_split')) {
32
+
33
+ function mb_str_replace($search, $replace, $subject, &$count = 0) {
34
+ if (!is_array($subject)) {
35
+ // Normalize $search and $replace so they are both arrays of the same length
36
+ $searches = is_array($search) ? array_values($search) : array($search);
37
+ $replacements = array_pad(is_array($replace) ? array_values($replace) : array($replace), count($searches), '');
38
+
39
+ foreach ($searches as $key => $search) {
40
+ $parts = mb_split(preg_quote($search), $subject);
41
+ $count += count($parts) - 1;
42
+ $subject = implode($replacements[$key], $parts);
43
+ }
44
+ } else {
45
+ // Call mb_str_replace for each subject in array, recursively
46
+ foreach ($subject as $key => $value) {
47
+ $subject[$key] = mb_str_replace($search, $replace, $value, $count);
48
+ }
49
+ }
50
 
51
+ return $subject;
52
+ }
 
 
 
53
 
54
+ } else {
55
+
56
+ function mb_str_replace($search, $replace, $subject, &$count = null) {
57
+ return str_replace($search, $replace, $subject, $count);
 
 
 
 
 
 
58
  }
59
 
 
60
  }
 
61
  }
62
 
63
  function postie_environment() {
69
  DebugEcho("Time: " . date('Y-m-d H:i:s', time()) . " GMT");
70
  DebugEcho("Error log: " . ini_get('error_log'));
71
  DebugEcho("TMP dir: " . get_temp_dir());
72
+ DebugEcho("Postie is in " . plugin_dir_path(__FILE__));
 
 
 
 
 
 
 
 
 
73
 
74
  if (defined('ALTERNATE_WP_CRON') && ALTERNATE_WP_CRON) {
75
  DebugEcho("Alternate cron is enabled");
85
  if (defined('WP_CRON_LOCK_TIMEOUT') && WP_CRON_LOCK_TIMEOUT === true) {
86
  DebugEcho("Cron lock timeout is:" . WP_CRON_LOCK_TIMEOUT);
87
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
 
90
  function postie_disable_revisions($restore = false) {
275
  DebugEcho("post type: $content");
276
  }
277
 
278
+ $default_categoryid = $config['default_post_category'];
279
+ DebugEcho("pre category: $default_categoryid");
280
+ $default_categoryid = apply_filters('postie_category_default', $default_categoryid);
281
+ DebugEcho("post postie_category_default $default_categoryid");
282
+ $post_categories = tag_Categories($subject, $default_categoryid, $config['category_match'], $post_id);
283
  if ($fulldebug) {
284
  DebugEcho("post category: $content");
285
  }
1375
 
1376
  $toEmail = '';
1377
  if (isset($mimeDecodedEmail->headers["to"])) {
1378
+ $toEmail = RemoveExtraCharactersInEmailAddress(trim($mimeDecodedEmail->headers["to"]));
1379
  }
1380
 
1381
  $replytoEmail = '';
1382
  if (isset($mimeDecodedEmail->headers["reply-to"])) {
1383
+ $replytoEmail = RemoveExtraCharactersInEmailAddress(trim($mimeDecodedEmail->headers["reply-to"]));
1384
  }
1385
 
1386
  $from = apply_filters("postie_filter_email2", $from, $toEmail, $replytoEmail);
1813
  $post_data = array();
1814
  $overrides = array('test_form' => false);
1815
 
1816
+ $tmpFile = tempnam(get_temp_dir(), POSTIE_SLUG);
1817
  if ($tmpFile !== false) {
1818
  $fp = fopen($tmpFile, 'w');
1819
  if ($fp) {
1976
 
1977
  // Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error'].
1978
  $upload_error_strings = array(false,
1979
+ __("The uploaded file exceeds the <code>upload_max_filesize</code> directive in <code>php.ini</code>.", POSTIE_SLUG),
1980
+ __("The uploaded file exceeds the <em>MAX_FILE_SIZE</em> directive that was specified in the HTML form.", POSTIE_SLUG),
1981
+ __("The uploaded file was only partially uploaded.", POSTIE_SLUG),
1982
+ __("No file was uploaded.", POSTIE_SLUG),
1983
  '',
1984
+ __("Missing a temporary folder.", POSTIE_SLUG),
1985
+ __("Failed to write file to disk.", POSTIE_SLUG));
1986
 
1987
  // Install user overrides. Did we mention that this voids your warranty?
1988
  if (is_array($overrides)) {
1994
  }
1995
  // A non-empty file will pass this test.
1996
  if (!($file['size'] > 0 )) {
1997
+ return $upload_error_handler($file, __('File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini.', POSTIE_SLUG));
1998
  }
1999
  // A properly uploaded file will pass this test. There should be no reason to override this one.
2000
  if (!file_exists($file['tmp_name'])) {
2001
+ return $upload_error_handler($file, __('Specified file failed upload test.', POSTIE_SLUG));
2002
  }
2003
 
2004
  $mimetype = $file['type'];
2016
 
2017
  if ((empty($mimetype) && empty($ext)) && !current_user_can('unfiltered_upload')) {
2018
  DebugEcho("postie_handle_upload: no type/ext & user restricted");
2019
+ return $upload_error_handler($file, __('File type does not meet security guidelines. Try another.', POSTIE_SLUG));
2020
  }
2021
 
2022
  // A writable uploads dir will pass this test. Again, there's no point overriding this one.
2039
  DebugEcho("new file: $new_file");
2040
  //DebugDump($file);
2041
  //DebugDump($uploads);
2042
+ return $upload_error_handler($file, sprintf(__('The uploaded file could not be moved to %s.', POSTIE_SLUG), $uploads['path']));
2043
  } else {
2044
  DebugEcho("upload: rename to $new_file succeeded");
2045
  }
2706
  * This function determines the categories ids for the post
2707
  * @return array
2708
  */
2709
+ function tag_Categories(&$subject, $defaultCategoryId, $category_match, $post_id) {
2710
  $original_subject = $subject;
2711
  $found = false;
2712
  $post_categories = array();
2764
  }
2765
  }
2766
  if (!$found) {
2767
+ $post_categories[] = $defaultCategoryId;
2768
  $subject = $original_subject;
2769
  }
2770
  $subject = trim($subject);
2849
 
2850
  $html.="</th><td><select name='$id' id='$id'>";
2851
  foreach ($options as $value) {
2852
+ $html.="<option value='$value' " . ($value == $current_value ? "selected='selected'" : "") . ">" . __($value, POSTIE_SLUG) . '</option>';
2853
  }
2854
  $html.='</select>';
2855
  if (!empty($recommendation)) {
2879
 
2880
  $html.="</th>
2881
  <td><select name='$id' id='$id'>
2882
+ <option value='1'>" . __($options[0], POSTIE_SLUG) . "</option>
2883
+ <option value='0' " . (!$current_value ? "selected='selected'" : "") . ">" . __($options[1], POSTIE_SLUG) . '</option>
2884
  </select>';
2885
  if (!empty($recommendation)) {
2886
  $html.='<p class = "description">' . $recommendation . '</p>';
3343
  return true;
3344
  }
3345
 
 
 
 
 
 
 
 
 
 
 
 
 
3346
  /**
3347
  * This function looks for markdown which causes problems with postie
3348
  */
3629
  $emails = FetchMail($config['mail_server'], $config['mail_server_port'], $config['mail_userid'], $config['mail_password'], $config['input_protocol'], $config['time_offset'], $test_email, $config['delete_mail_after_processing'], $config['maxemails'], $config['email_tls']);
3630
  $message = 'Done.';
3631
 
3632
+ EchoInfo(sprintf(__("There are %d messages to process", POSTIE_SLUG), count($emails)));
3633
 
3634
  if (function_exists('memory_get_usage')) {
3635
+ DebugEcho(__("memory at start of email processing:", POSTIE_SLUG) . memory_get_usage());
3636
  }
3637
 
3638
  DebugDump($config);
3644
  DebugEcho("$message_number: ------------------------------------");
3645
  //sanity check to see if there is any info in the message
3646
  if ($email == NULL) {
3647
+ $message = __('Dang, message is empty!', POSTIE_SLUG);
3648
  EchoInfo("$message_number: $message");
3649
  continue;
3650
  } else if ($email == 'already read') {
3651
+ $message = __("Message is already marked 'read'.", POSTIE_SLUG);
3652
  EchoInfo("$message_number: $message");
3653
  continue;
3654
  }
postie.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin Name: Postie
5
  Plugin URI: http://PostiePlugin.com/
6
  Description: Create posts via email. Signifigantly upgrades the Post by Email features of Word Press.
7
- Version: 1.7.6
8
  Author: Wayne Allen
9
  Author URI: http://PostiePlugin.com/
10
  License: GPL2
@@ -27,13 +27,14 @@
27
  */
28
 
29
  /*
30
- $Id: postie.php 1220239 2015-08-13 19:39:22Z WayneAllen $
31
  */
32
  require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "postie-functions.php");
33
 
34
- define('POSTIE_VERSION', '1.7.6');
35
  define("POSTIE_ROOT", dirname(__FILE__));
36
  define("POSTIE_URL", WP_PLUGIN_URL . '/' . basename(dirname(__FILE__)));
 
37
 
38
  //register the hooks early in the page in case some method needs the result of one of them (i.e. cron_schedules)
39
  add_action('init', 'postie_disable_kses_content', 20);
@@ -65,7 +66,7 @@ if (is_admin()) {
65
 
66
  function postie_load_domain() {
67
  $plugin_dir = WP_PLUGIN_DIR . '/' . basename(dirname(__FILE__));
68
- load_plugin_textdomain('postie', $plugin_dir . "/languages/", basename(dirname(__FILE__)) . '/languages/');
69
  }
70
 
71
  add_action('init', 'postie_load_domain');
@@ -140,7 +141,7 @@ function postie_loadjs_options_page() {
140
 
141
  function postie_admin_page() {
142
  if (!current_user_can('manage_options')) {
143
- wp_die(__('You do not have sufficient permissions to access this page.'));
144
  }
145
  include 'config_form.php';
146
  }
@@ -201,8 +202,8 @@ function postie_warnings() {
201
  ) && !isset($_POST['submit'])) {
202
 
203
  function postie_enter_info() {
204
- echo "<div id='postie-info-warning' class='updated fade'><p><strong>" . __('Postie is almost ready.', 'postie') . "</strong> "
205
- . sprintf(__('You must <a href="%1$s">enter your email settings</a> for it to work.', 'postie'), "admin.php?page=postie-settings")
206
  . "</p></div> ";
207
  }
208
 
@@ -214,7 +215,7 @@ function postie_warnings() {
214
 
215
  function postie_imap_warning() {
216
  echo "<div id='postie-imap-warning' class='error'><p><strong>";
217
- echo __('Warning: the IMAP php extension is not installed. Postie can not use IMAP, IMAP-SSL or POP-SSL without this extension.', 'postie');
218
  echo "</strong></p></div>";
219
  }
220
 
@@ -224,22 +225,33 @@ function postie_warnings() {
224
 
225
  function postie_tls_warning() {
226
  echo "<div id='postie-lst-warning' class='error'><p><strong>";
227
- echo __('Warning: The POP3 connector does not support TLS.', 'postie');
228
  echo "</strong></p></div>";
229
  }
230
 
231
  add_action('admin_notices', 'postie_tls_warning');
232
  }
233
 
234
- if (!function_exists('mb_detect_encoding')) {
235
 
236
- function postie_mbstring_warning() {
237
- echo "<div id='postie-mbstring-warning' class='error'><p><strong>";
238
- echo __('Warning: the Multibyte String php extension (mbstring) is not installed. Postie will not function without this extension.', 'postie');
 
 
 
 
 
 
 
 
 
 
 
239
  echo "</strong></p></div>";
240
  }
241
 
242
- add_action('admin_notices', 'postie_mbstring_warning');
243
  }
244
 
245
  $userdata = WP_User::get_data_by('login', $config['admin_username']);
@@ -247,7 +259,7 @@ function postie_warnings() {
247
 
248
  function postie_adminuser_warning() {
249
  echo "<div id='postie-mbstring-warning' class='error'><p><strong>";
250
- echo __('Warning: the Admin username is not a valid WordPress login. Postie may reject emails if this is not corrected.', 'postie');
251
  echo "</strong></p></div>";
252
  }
253
 
@@ -315,10 +327,11 @@ function postie_decron() {
315
  function postie_more_reccurences($schedules) {
316
  //Do not echo output in filters, it seems to break some installs
317
  //error_log("postie_more_reccurences: setting cron schedules");
318
- $schedules['weekly'] = array('interval' => (60 * 60 * 24 * 7), 'display' => __('Once Weekly'));
319
- $schedules['twiceperhour'] = array('interval' => 60 * 30, 'display' => __('Twice per hour'));
320
- $schedules['tenminutes'] = array('interval' => 60 * 10, 'display' => __('Every 10 minutes'));
321
- $schedules['fiveminutes'] = array('interval' => 60 * 5, 'display' => __('Every 5 minutes'));
 
322
 
323
  return $schedules;
324
  }
4
  Plugin Name: Postie
5
  Plugin URI: http://PostiePlugin.com/
6
  Description: Create posts via email. Signifigantly upgrades the Post by Email features of Word Press.
7
+ Version: 1.7.8
8
  Author: Wayne Allen
9
  Author URI: http://PostiePlugin.com/
10
  License: GPL2
27
  */
28
 
29
  /*
30
+ $Id: postie.php 1240940 2015-09-08 20:04:57Z WayneAllen $
31
  */
32
  require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "postie-functions.php");
33
 
34
+ define('POSTIE_VERSION', '1.7.8');
35
  define("POSTIE_ROOT", dirname(__FILE__));
36
  define("POSTIE_URL", WP_PLUGIN_URL . '/' . basename(dirname(__FILE__)));
37
+ define('POSTIE_SLUG', 'postie');
38
 
39
  //register the hooks early in the page in case some method needs the result of one of them (i.e. cron_schedules)
40
  add_action('init', 'postie_disable_kses_content', 20);
66
 
67
  function postie_load_domain() {
68
  $plugin_dir = WP_PLUGIN_DIR . '/' . basename(dirname(__FILE__));
69
+ load_plugin_textdomain(POSTIE_SLUG, false, dirname(plugin_basename(__FILE__)) . '/languages/');
70
  }
71
 
72
  add_action('init', 'postie_load_domain');
141
 
142
  function postie_admin_page() {
143
  if (!current_user_can('manage_options')) {
144
+ wp_die(__('You do not have sufficient permissions to access this page.', POSTIE_SLUG));
145
  }
146
  include 'config_form.php';
147
  }
202
  ) && !isset($_POST['submit'])) {
203
 
204
  function postie_enter_info() {
205
+ echo "<div id='postie-info-warning' class='updated fade'><p><strong>" . __('Postie is almost ready.', POSTIE_SLUG) . "</strong> "
206
+ . sprintf(__('You must <a href="%1$s">enter your email settings</a> for it to work.', POSTIE_SLUG), "admin.php?page=postie-settings")
207
  . "</p></div> ";
208
  }
209
 
215
 
216
  function postie_imap_warning() {
217
  echo "<div id='postie-imap-warning' class='error'><p><strong>";
218
+ echo __('Warning: the IMAP php extension is not installed. Postie can not use IMAP, IMAP-SSL or POP-SSL without this extension.', POSTIE_SLUG);
219
  echo "</strong></p></div>";
220
  }
221
 
225
 
226
  function postie_tls_warning() {
227
  echo "<div id='postie-lst-warning' class='error'><p><strong>";
228
+ echo __('Warning: The POP3 connector does not support TLS.', POSTIE_SLUG);
229
  echo "</strong></p></div>";
230
  }
231
 
232
  add_action('admin_notices', 'postie_tls_warning');
233
  }
234
 
235
+ if (isMarkdownInstalled() && $config['prefer_text_type'] == 'html') {
236
 
237
+ function postie_markdown_warning() {
238
+ echo "<div id='postie-lst-warning' class='error'><p><strong>";
239
+ _e("You currently have the Markdown plugin installed. It will cause problems if you send in HTML email. Please turn it off if you intend to send email using HTML.", POSTIE_SLUG);
240
+ echo "</strong></p></div>";
241
+ }
242
+
243
+ add_action('admin_notices', 'postie_markdown_warning');
244
+ }
245
+
246
+ if (!HasIconvInstalled()) {
247
+
248
+ function postie_iconv_warning() {
249
+ echo "<div id='postie-lst-warning' class='error'><p><strong>";
250
+ _e("Warning! Postie requires that iconv be enabled.", POSTIE_SLUG);
251
  echo "</strong></p></div>";
252
  }
253
 
254
+ add_action('admin_notices', 'postie_iconv_warning');
255
  }
256
 
257
  $userdata = WP_User::get_data_by('login', $config['admin_username']);
259
 
260
  function postie_adminuser_warning() {
261
  echo "<div id='postie-mbstring-warning' class='error'><p><strong>";
262
+ echo __('Warning: the Admin username is not a valid WordPress login. Postie may reject emails if this is not corrected.', POSTIE_SLUG);
263
  echo "</strong></p></div>";
264
  }
265
 
327
  function postie_more_reccurences($schedules) {
328
  //Do not echo output in filters, it seems to break some installs
329
  //error_log("postie_more_reccurences: setting cron schedules");
330
+ $schedules['weekly'] = array('interval' => (60 * 60 * 24 * 7), 'display' => __('Once Weekly', POSTIE_SLUG));
331
+ $schedules['twiceperhour'] = array('interval' => 60 * 30, 'display' => __('Twice per hour', POSTIE_SLUG));
332
+ $schedules['tenminutes'] = array('interval' => 60 * 10, 'display' => __('Every 10 minutes', POSTIE_SLUG));
333
+ $schedules['fiveminutes'] = array('interval' => 60 * 5, 'display' => __('Every 5 minutes', POSTIE_SLUG));
334
+ $schedules['oneminute'] = array('interval' => 60 * 1, 'display' => __('Every 1 minute', POSTIE_SLUG));
335
 
336
  return $schedules;
337
  }
readme.txt CHANGED
@@ -5,10 +5,12 @@ Author URI: http://allens-home.com/
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email, post-by-email
7
  Requires at least: 3.3.0
8
- Tested up to: 4.2.4
9
- Stable tag: 1.7.6
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
 
 
12
 
13
  Postie allows you to create posts via email, including many advanced features not found in WordPress's default Post by Email feature.
14
 
@@ -234,6 +236,17 @@ All script, style and body tags are stripped from html emails.
234
  Attachments are now processed in the order they were attached.
235
 
236
  == CHANGELOG ==
 
 
 
 
 
 
 
 
 
 
 
237
  = 1.7.6 (2015-08-13) =
238
  * Added setting to control whether the featured image is included in the post or not.
239
  * Added 2 new filters, postie_comment_before and postie_comment_after
5
  Plugin URI: http://PostiePlugin.com/
6
  Tags: e-mail, email, post-by-email
7
  Requires at least: 3.3.0
8
+ Tested up to: 4.3
9
+ Stable tag: 1.7.8
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
+ Text Domain: postie
13
+ Domain Path: /languages
14
 
15
  Postie allows you to create posts via email, including many advanced features not found in WordPress's default Post by Email feature.
16
 
236
  Attachments are now processed in the order they were attached.
237
 
238
  == CHANGELOG ==
239
+ = 1.7.8 (2015-09-08) =
240
+ * Remove mbstring admin message. Added fallback if mbstring is not installed
241
+ * More explanation for signature regex
242
+ * Add 1 minute schedule to supplement new external cron recommendation
243
+ * Updates to support upcoming Language Packs feature for plugins
244
+ * Moved important warning to admin notices
245
+ * New filter postie_category_default
246
+
247
+ = 1.7.7 (2015-08-24) =
248
+ * Fixed bug where "To" and "Reply-To" emails were not parsed correctly for postie_filter_email2 filter
249
+
250
  = 1.7.6 (2015-08-13) =
251
  * Added setting to control whether the featured image is included in the post or not.
252
  * Added 2 new filters, postie_comment_before and postie_comment_after