forked from codebykat/wp-post-by-email
-
Notifications
You must be signed in to change notification settings - Fork 0
/
22942_updated_for_3.7.diff
426 lines (412 loc) · 15.7 KB
/
22942_updated_for_3.7.diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php
index 037210a..a5e896b 100644
--- wp-admin/includes/schema.php
+++ wp-admin/includes/schema.php
@@ -373,10 +373,6 @@ function populate_options() {
'comments_notify' => 1,
'posts_per_rss' => 10,
'rss_use_excerpt' => 0,
- 'mailserver_url' => 'mail.example.com',
- 'mailserver_login' => '[email protected]',
- 'mailserver_pass' => 'password',
- 'mailserver_port' => 110,
'default_category' => 1,
'default_comment_status' => 'open',
'default_ping_status' => 'open',
@@ -480,6 +476,9 @@ function populate_options() {
// 3.5
'link_manager_enabled' => 0,
+
+ // 3.7
+ 'post_by_email_enabled' => 0,
);
// 3.3
diff --git wp-admin/includes/upgrade.php wp-admin/includes/upgrade.php
index cfbaac8..354cb6f 100644
--- wp-admin/includes/upgrade.php
+++ wp-admin/includes/upgrade.php
@@ -402,10 +402,15 @@ function upgrade_all() {
if ( $wp_current_db_version < 22422 )
upgrade_350();
+ if ( $wp_current_db_version < 25448 )
+ upgrade_370();
+
maybe_disable_link_manager();
maybe_disable_automattic_widgets();
+ maybe_disable_post_by_email();
+
update_option( 'db_version', $wp_db_version );
update_option( 'db_upgraded', true );
}
@@ -1209,6 +1214,18 @@ function upgrade_350() {
}
/**
+ * Execute changes made in WordPress 3.7.
+ *
+ * @since 3.7.0
+ */
+function upgrade_370() {
+ global $wp_current_db_version;
+
+ if ( $wp_current_db_version < 25134 && 'mail.example.com' != get_option( 'mailserver_url' ) )
+ update_option( 'post_by_email_enabled', 1 ); // Previously set to 0 by populate_options()
+}
+
+/**
* Execute network level changes
*
* @since 3.0.0
@@ -1959,6 +1976,18 @@ function maybe_disable_link_manager() {
}
/**
+ * Disables Post by Email options if, at the time of upgrade, the settings have not been changed from original defaults.
+ *
+ * @since 3.7.0
+ */
+function maybe_disable_post_by_email() {
+ global $wp_current_db_version;
+
+ if ( $wp_current_db_version >= 25448 && get_option( 'post_by_email_enabled' ) && 'mail.example.com' == get_option( 'mailserver_url' ) )
+ update_option( 'post_by_email_enabled', 0 );
+}
+
+/**
* Runs before the schema is upgraded.
*
* @since 2.9.0
diff --git wp-admin/options-writing.php wp-admin/options-writing.php
index 87fbf53..4202ef6 100644
--- wp-admin/options-writing.php
+++ wp-admin/options-writing.php
@@ -28,15 +28,6 @@ get_current_screen()->add_help_tab( array(
'content' => '<p>' . __('Press This is a bookmarklet that makes it easy to blog about something you come across on the web. You can use it to just grab a link, or to post an excerpt. Press This will even allow you to choose from images included on the page and use them in your post. Just drag the Press This link on this screen to your bookmarks bar in your browser, and you’ll be on your way to easier content creation. Clicking on it while on another website opens a popup window with all these options.') . '</p>',
) );
-//duplicate_hook
-if ( apply_filters( 'enable_post_by_email_configuration', true ) ) {
- get_current_screen()->add_help_tab( array(
- 'id' => 'options-postemail',
- 'title' => __( 'Post Via Email' ),
- 'content' => '<p>' . __( 'Post via email settings allow you to send your WordPress install an email with the content of your post. You must set up a secret e-mail account with POP3 access to use this, and any mail received at this address will be posted, so it’s a good idea to keep this address very secret.' ) . '</p>',
- ) );
-}
-
/**
* Toggle site update services configuration functionality.
*
@@ -132,39 +123,9 @@ do_settings_fields('writing', 'remote_publishing'); // A deprecated section.
<?php
//duplicate_hook
-if ( apply_filters( 'enable_post_by_email_configuration', true ) ) {
-?>
-<h3 class="title"><?php _e('Post via e-mail') ?></h3>
-<p><?php printf(__('To post to WordPress by e-mail you must set up a secret e-mail account with POP3 access. Any mail received at this address will be posted, so it’s a good idea to keep this address very secret. Here are three random strings you could use: <kbd>%s</kbd>, <kbd>%s</kbd>, <kbd>%s</kbd>.'), wp_generate_password(8, false), wp_generate_password(8, false), wp_generate_password(8, false)) ?></p>
-
-<table class="form-table">
-<tr valign="top">
-<th scope="row"><label for="mailserver_url"><?php _e('Mail Server') ?></label></th>
-<td><input name="mailserver_url" type="text" id="mailserver_url" value="<?php form_option('mailserver_url'); ?>" class="regular-text code" />
-<label for="mailserver_port"><?php _e('Port') ?></label>
-<input name="mailserver_port" type="text" id="mailserver_port" value="<?php form_option('mailserver_port'); ?>" class="small-text" />
-</td>
-</tr>
-<tr valign="top">
-<th scope="row"><label for="mailserver_login"><?php _e('Login Name') ?></label></th>
-<td><input name="mailserver_login" type="text" id="mailserver_login" value="<?php form_option('mailserver_login'); ?>" class="regular-text ltr" /></td>
-</tr>
-<tr valign="top">
-<th scope="row"><label for="mailserver_pass"><?php _e('Password') ?></label></th>
-<td>
-<input name="mailserver_pass" type="text" id="mailserver_pass" value="<?php form_option('mailserver_pass'); ?>" class="regular-text ltr" />
-</td>
-</tr>
-<tr valign="top">
-<th scope="row"><label for="default_email_category"><?php _e('Default Mail Category') ?></label></th>
-<td>
-<?php
-wp_dropdown_categories(array('hide_empty' => 0, 'name' => 'default_email_category', 'orderby' => 'name', 'selected' => get_option('default_email_category'), 'hierarchical' => true));
-?>
-</td>
-</tr>
-<?php do_settings_fields('writing', 'post_via_email'); ?>
-</table>
+if ( get_option( 'post_by_email_enabled' ) && apply_filters( 'enable_post_by_email_configuration', true ) ) { ?>
+<h3 class="title"><?php _e( 'Post via e-mail' ) ?></h3>
+<p><?php _e( 'This functionality is no longer packaged with WordPress. To continue using it, please install the <a href="http://wordpress.org/plugins/post-by-email">Post By Email plugin</a>.' ); ?></p>
<?php } ?>
<?php
diff --git wp-includes/default-filters.php wp-includes/default-filters.php
index b6c7527..f70458c 100644
--- wp-includes/default-filters.php
+++ wp-includes/default-filters.php
@@ -301,4 +301,7 @@ add_filter( 'heartbeat_nopriv_received', 'wp_auth_check', 10, 2 );
add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_spam_check', 99 );
+// If the upgrade hasn't run yet, assume the post by mail options are set.
+add_filter( 'default_option_post_by_email_enabled', '__return_true' );
+
unset($filter, $action);
diff --git wp-includes/formatting.php wp-includes/formatting.php
index 58b4f9d..4655267 100644
--- wp-includes/formatting.php
+++ wp-includes/formatting.php
@@ -2819,7 +2819,6 @@ function sanitize_option($option, $value) {
case 'medium_size_h':
case 'large_size_w':
case 'large_size_h':
- case 'mailserver_port':
case 'comment_max_links':
case 'page_on_front':
case 'page_for_posts':
@@ -2871,9 +2870,6 @@ function sanitize_option($option, $value) {
case 'date_format':
case 'time_format':
- case 'mailserver_url':
- case 'mailserver_login':
- case 'mailserver_pass':
case 'upload_path':
$value = strip_tags( $value );
$value = wp_kses_data( $value );
diff --git wp-mail.php wp-mail.php
index 27290b1..4020a6a 100644
--- wp-mail.php
+++ wp-mail.php
@@ -1,8 +1,13 @@
<?php
/**
- * Gets the email message from the user's mailbox to add as
- * a WordPress post. Mailbox connection information must be
- * configured under Settings > Writing
+ * This file is deprecated and has been replaced by the
+ * plugin Post By Email. Instead of loading wp-mail.php to
+ * trigger the "wp-mail.php" action, you should trigger it
+ * yourself, either in a plugin/theme hook or via wp_cron.
+ *
+ * For more information:
+ * http://wordpress.org/plugins/post-by-email/
+ * http://codex.wordpress.org/Category:WP-Cron_Functions
*
* @package WordPress
*/
@@ -10,221 +15,7 @@
/** Make sure that the WordPress bootstrap has run before continuing. */
require(dirname(__FILE__) . '/wp-load.php');
-if ( ! apply_filters( 'enable_post_by_email_configuration', true ) )
- wp_die( __( 'This action has been disabled by the administrator.' ) );
+_doing_it_wrong( 'wp-mail.php', __( "This file is deprecated and should not be called directly. Schedule the action 'wp-mail.php' instead." ), '3.7' );
/** Allow a plugin to do a complete takeover of Post by Email **/
-do_action('wp-mail.php');
-
-/** Get the POP3 class with which to access the mailbox. */
-require_once( ABSPATH . WPINC . '/class-pop3.php' );
-
-/** Only check at this interval for new messages. */
-if ( !defined('WP_MAIL_INTERVAL') )
- define('WP_MAIL_INTERVAL', 300); // 5 minutes
-
-$last_checked = get_transient('mailserver_last_checked');
-
-if ( $last_checked )
- wp_die(__('Slow down cowboy, no need to check for new mails so often!'));
-
-set_transient('mailserver_last_checked', true, WP_MAIL_INTERVAL);
-
-$time_difference = get_option('gmt_offset') * HOUR_IN_SECONDS;
-
-$phone_delim = '::';
-
-$pop3 = new POP3();
-
-if ( !$pop3->connect( get_option('mailserver_url'), get_option('mailserver_port') ) || !$pop3->user( get_option('mailserver_login') ) )
- wp_die( esc_html( $pop3->ERROR ) );
-
-$count = $pop3->pass( get_option('mailserver_pass') );
-
-if( false === $count )
- wp_die( esc_html( $pop3->ERROR ) );
-
-if( 0 === $count ) {
- $pop3->quit();
- wp_die( __('There doesn’t seem to be any new mail.') );
-}
-
-for ( $i = 1; $i <= $count; $i++ ) {
-
- $message = $pop3->get($i);
-
- $bodysignal = false;
- $boundary = '';
- $charset = '';
- $content = '';
- $content_type = '';
- $content_transfer_encoding = '';
- $post_author = 1;
- $author_found = false;
- $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
- foreach ($message as $line) {
- // body signal
- if ( strlen($line) < 3 )
- $bodysignal = true;
- if ( $bodysignal ) {
- $content .= $line;
- } else {
- if ( preg_match('/Content-Type: /i', $line) ) {
- $content_type = trim($line);
- $content_type = substr($content_type, 14, strlen($content_type) - 14);
- $content_type = explode(';', $content_type);
- if ( ! empty( $content_type[1] ) ) {
- $charset = explode('=', $content_type[1]);
- $charset = ( ! empty( $charset[1] ) ) ? trim($charset[1]) : '';
- }
- $content_type = $content_type[0];
- }
- if ( preg_match('/Content-Transfer-Encoding: /i', $line) ) {
- $content_transfer_encoding = trim($line);
- $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding) - 27);
- $content_transfer_encoding = explode(';', $content_transfer_encoding);
- $content_transfer_encoding = $content_transfer_encoding[0];
- }
- if ( ( $content_type == 'multipart/alternative' ) && ( false !== strpos($line, 'boundary="') ) && ( '' == $boundary ) ) {
- $boundary = trim($line);
- $boundary = explode('"', $boundary);
- $boundary = $boundary[1];
- }
- if (preg_match('/Subject: /i', $line)) {
- $subject = trim($line);
- $subject = substr($subject, 9, strlen($subject) - 9);
- // Captures any text in the subject before $phone_delim as the subject
- if ( function_exists('iconv_mime_decode') ) {
- $subject = iconv_mime_decode($subject, 2, get_option('blog_charset'));
- } else {
- $subject = wp_iso_descrambler($subject);
- }
- $subject = explode($phone_delim, $subject);
- $subject = $subject[0];
- }
-
- // Set the author using the email address (From or Reply-To, the last used)
- // otherwise use the site admin
- if ( ! $author_found && preg_match( '/^(From|Reply-To): /', $line ) ) {
- if ( preg_match('|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches) )
- $author = $matches[0];
- else
- $author = trim($line);
- $author = sanitize_email($author);
- if ( is_email($author) ) {
- echo '<p>' . sprintf(__('Author is %s'), $author) . '</p>';
- $userdata = get_user_by('email', $author);
- if ( ! empty( $userdata ) ) {
- $post_author = $userdata->ID;
- $author_found = true;
- }
- }
- }
-
- if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37'
- $ddate = trim($line);
- $ddate = str_replace('Date: ', '', $ddate);
- if (strpos($ddate, ',')) {
- $ddate = trim(substr($ddate, strpos($ddate, ',') + 1, strlen($ddate)));
- }
- $date_arr = explode(' ', $ddate);
- $date_time = explode(':', $date_arr[3]);
-
- $ddate_H = $date_time[0];
- $ddate_i = $date_time[1];
- $ddate_s = $date_time[2];
-
- $ddate_m = $date_arr[1];
- $ddate_d = $date_arr[0];
- $ddate_Y = $date_arr[2];
- for ( $j = 0; $j < 12; $j++ ) {
- if ( $ddate_m == $dmonths[$j] ) {
- $ddate_m = $j+1;
- }
- }
-
- $time_zn = intval($date_arr[4]) * 36;
- $ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y);
- $ddate_U = $ddate_U - $time_zn;
- $post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference);
- $post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U);
- }
- }
- }
-
- // Set $post_status based on $author_found and on author's publish_posts capability
- if ( $author_found ) {
- $user = new WP_User($post_author);
- $post_status = ( $user->has_cap('publish_posts') ) ? 'publish' : 'pending';
- } else {
- // Author not found in DB, set status to pending. Author already set to admin.
- $post_status = 'pending';
- }
-
- $subject = trim($subject);
-
- if ( $content_type == 'multipart/alternative' ) {
- $content = explode('--'.$boundary, $content);
- $content = $content[2];
- // match case-insensitive content-transfer-encoding
- if ( preg_match( '/Content-Transfer-Encoding: quoted-printable/i', $content, $delim) ) {
- $content = explode($delim[0], $content);
- $content = $content[1];
- }
- $content = strip_tags($content, '<img><p><br><i><b><u><em><strong><strike><font><span><div>');
- }
- $content = trim($content);
-
- //Give Post-By-Email extending plugins full access to the content
- //Either the raw content or the content of the last quoted-printable section
- $content = apply_filters('wp_mail_original_content', $content);
-
- if ( false !== stripos($content_transfer_encoding, "quoted-printable") ) {
- $content = quoted_printable_decode($content);
- }
-
- if ( function_exists('iconv') && ! empty( $charset ) ) {
- $content = iconv($charset, get_option('blog_charset'), $content);
- }
-
- // Captures any text in the body after $phone_delim as the body
- $content = explode($phone_delim, $content);
- $content = empty( $content[1] ) ? $content[0] : $content[1];
-
- $content = trim($content);
-
- $post_content = apply_filters('phone_content', $content);
-
- $post_title = xmlrpc_getposttitle($content);
-
- if ($post_title == '') $post_title = $subject;
-
- $post_category = array(get_option('default_email_category'));
-
- $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status');
- $post_data = wp_slash($post_data);
-
- $post_ID = wp_insert_post($post_data);
- if ( is_wp_error( $post_ID ) )
- echo "\n" . $post_ID->get_error_message();
-
- // We couldn't post, for whatever reason. Better move forward to the next email.
- if ( empty( $post_ID ) )
- continue;
-
- do_action('publish_phone', $post_ID);
-
- echo "\n<p>" . sprintf(__('<strong>Author:</strong> %s'), esc_html($post_author)) . '</p>';
- echo "\n<p>" . sprintf(__('<strong>Posted title:</strong> %s'), esc_html($post_title)) . '</p>';
-
- if(!$pop3->delete($i)) {
- echo '<p>' . sprintf(__('Oops: %s'), esc_html($pop3->ERROR)) . '</p>';
- $pop3->reset();
- exit;
- } else {
- echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>';
- }
-
-}
-
-$pop3->quit();
+do_action( 'wp-mail.php' );
\ No newline at end of file