Ticket #22942: 22942_updated_for_3.8.diff
File 22942_updated_for_3.8.diff, 15.9 KB (added by , 11 years ago) |
---|
-
wp-admin/includes/schema.php
diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php index f88f79d..5a54356 100644
function populate_options() { 373 373 'comments_notify' => 1, 374 374 'posts_per_rss' => 10, 375 375 'rss_use_excerpt' => 0, 376 'mailserver_url' => 'mail.example.com',377 'mailserver_login' => 'login@example.com',378 'mailserver_pass' => 'password',379 'mailserver_port' => 110,380 376 'default_category' => 1, 381 377 'default_comment_status' => 'open', 382 378 'default_ping_status' => 'open', … … function populate_options() { 480 476 481 477 // 3.5 482 478 'link_manager_enabled' => 0, 479 480 // 3.8 481 'post_by_email_enabled' => 0, 483 482 ); 484 483 485 484 // 3.3 -
wp-admin/includes/upgrade.php
diff --git wp-admin/includes/upgrade.php wp-admin/includes/upgrade.php index b1b8555..596d4dc 100644
function upgrade_all() { 405 405 if ( $wp_current_db_version < 25824 ) 406 406 upgrade_370(); 407 407 408 if ( $wp_current_db_version < 25824 ) 409 upgrade_380(); 410 408 411 maybe_disable_link_manager(); 409 412 410 413 maybe_disable_automattic_widgets(); 411 414 415 maybe_disable_post_by_email(); 416 412 417 update_option( 'db_version', $wp_db_version ); 413 418 update_option( 'db_upgraded', true ); 414 419 } … … function upgrade_370() { 1223 1228 } 1224 1229 1225 1230 /** 1231 * Execute changes made in WordPress 3.8. 1232 * 1233 * @since 3.8.0 1234 */ 1235 function upgrade_380() { 1236 global $wp_current_db_version; 1237 1238 if ( $wp_current_db_version < 25824 && 'mail.example.com' != get_option( 'mailserver_url' ) ) 1239 update_option( 'post_by_email_enabled', 1 ); // Previously set to 0 by populate_options() 1240 } 1241 1242 /** 1226 1243 * Execute network level changes 1227 1244 * 1228 1245 * @since 3.0.0 … … function maybe_disable_link_manager() { 1987 2004 } 1988 2005 1989 2006 /** 2007 * Disables Post by Email options if, at the time of upgrade, the settings have not been changed from original defaults. 2008 * 2009 * @since 3.8.0 2010 */ 2011 function maybe_disable_post_by_email() { 2012 global $wp_current_db_version; 2013 2014 if ( $wp_current_db_version >= 25824 && get_option( 'post_by_email_enabled' ) && 'mail.example.com' == get_option( 'mailserver_url' ) ) 2015 update_option( 'post_by_email_enabled', 0 ); 2016 } 2017 2018 /** 1990 2019 * Runs before the schema is upgraded. 1991 2020 * 1992 2021 * @since 2.9.0 -
wp-admin/options-writing.php
diff --git wp-admin/options-writing.php wp-admin/options-writing.php index cad326a..f0f5dd5 100644
get_current_screen()->add_help_tab( array( 28 28 '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>', 29 29 ) ); 30 30 31 /** This filter is documented in wp-admin/options.php */32 if ( apply_filters( 'enable_post_by_email_configuration', true ) ) {33 get_current_screen()->add_help_tab( array(34 'id' => 'options-postemail',35 'title' => __( 'Post Via Email' ),36 '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>',37 ) );38 }39 40 31 /** 41 32 * Toggle site update services configuration functionality. 42 33 * … … do_settings_fields('writing', 'remote_publishing'); // A deprecated section. 132 123 133 124 <?php 134 125 /** This filter is documented in wp-admin/options.php */ 135 if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { 136 ?> 137 <h3 class="title"><?php _e('Post via e-mail') ?></h3> 138 <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> 139 140 <table class="form-table"> 141 <tr valign="top"> 142 <th scope="row"><label for="mailserver_url"><?php _e('Mail Server') ?></label></th> 143 <td><input name="mailserver_url" type="text" id="mailserver_url" value="<?php form_option('mailserver_url'); ?>" class="regular-text code" /> 144 <label for="mailserver_port"><?php _e('Port') ?></label> 145 <input name="mailserver_port" type="text" id="mailserver_port" value="<?php form_option('mailserver_port'); ?>" class="small-text" /> 146 </td> 147 </tr> 148 <tr valign="top"> 149 <th scope="row"><label for="mailserver_login"><?php _e('Login Name') ?></label></th> 150 <td><input name="mailserver_login" type="text" id="mailserver_login" value="<?php form_option('mailserver_login'); ?>" class="regular-text ltr" /></td> 151 </tr> 152 <tr valign="top"> 153 <th scope="row"><label for="mailserver_pass"><?php _e('Password') ?></label></th> 154 <td> 155 <input name="mailserver_pass" type="text" id="mailserver_pass" value="<?php form_option('mailserver_pass'); ?>" class="regular-text ltr" /> 156 </td> 157 </tr> 158 <tr valign="top"> 159 <th scope="row"><label for="default_email_category"><?php _e('Default Mail Category') ?></label></th> 160 <td> 161 <?php 162 wp_dropdown_categories(array('hide_empty' => 0, 'name' => 'default_email_category', 'orderby' => 'name', 'selected' => get_option('default_email_category'), 'hierarchical' => true)); 163 ?> 164 </td> 165 </tr> 166 <?php do_settings_fields('writing', 'post_via_email'); ?> 167 </table> 126 if ( get_option( 'post_by_email_enabled' ) && apply_filters( 'enable_post_by_email_configuration', true ) ) { ?> 127 <h3 class="title"><?php _e( 'Post via e-mail' ) ?></h3> 128 <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> 168 129 <?php } ?> 169 130 170 131 <?php -
wp-includes/default-filters.php
diff --git wp-includes/default-filters.php wp-includes/default-filters.php index b6c7527..f70458c 100644
add_filter( 'heartbeat_nopriv_received', 'wp_auth_check', 10, 2 ); 301 301 add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 ); 302 302 add_filter( 'authenticate', 'wp_authenticate_spam_check', 99 ); 303 303 304 // If the upgrade hasn't run yet, assume the post by mail options are set. 305 add_filter( 'default_option_post_by_email_enabled', '__return_true' ); 306 304 307 unset($filter, $action); -
wp-includes/formatting.php
diff --git wp-includes/formatting.php wp-includes/formatting.php index 904c99b..6ae8416 100644
function sanitize_option($option, $value) { 2819 2819 case 'medium_size_h': 2820 2820 case 'large_size_w': 2821 2821 case 'large_size_h': 2822 case 'mailserver_port':2823 2822 case 'comment_max_links': 2824 2823 case 'page_on_front': 2825 2824 case 'page_for_posts': … … function sanitize_option($option, $value) { 2871 2870 2872 2871 case 'date_format': 2873 2872 case 'time_format': 2874 case 'mailserver_url':2875 case 'mailserver_login':2876 case 'mailserver_pass':2877 2873 case 'upload_path': 2878 2874 $value = strip_tags( $value ); 2879 2875 $value = wp_kses_data( $value ); -
wp-mail.php
diff --git wp-mail.php wp-mail.php index aab9183..4c53620 100644
1 1 <?php 2 2 /** 3 * Gets the email message from the user's mailbox to add as 4 * a WordPress post. Mailbox connection information must be 5 * configured under Settings > Writing 3 * This file is deprecated and has been replaced by the 4 * plugin Post By Email. Instead of loading wp-mail.php to 5 * trigger the "wp-mail.php" action, you should trigger it 6 * yourself, either in a plugin/theme hook or via wp_cron. 7 * 8 * For more information: 9 * http://wordpress.org/plugins/post-by-email/ 10 * http://codex.wordpress.org/Category:WP-Cron_Functions 6 11 * 7 12 * @package WordPress 8 13 */ … … 10 15 /** Make sure that the WordPress bootstrap has run before continuing. */ 11 16 require(dirname(__FILE__) . '/wp-load.php'); 12 17 13 /** This filter is documented in wp-admin/options.php */ 14 if ( ! apply_filters( 'enable_post_by_email_configuration', true ) ) 15 wp_die( __( 'This action has been disabled by the administrator.' ) ); 18 /** Show an error in debug mode if this file is loaded directly. **/ 19 _doing_it_wrong( 'wp-mail.php', __( "This file is deprecated and should not be called directly. Schedule the action 'wp-mail.php' instead." ), '3.8' ); 16 20 17 21 /** Allow a plugin to do a complete takeover of Post by Email **/ 18 do_action('wp-mail.php'); 19 20 /** Get the POP3 class with which to access the mailbox. */ 21 require_once( ABSPATH . WPINC . '/class-pop3.php' ); 22 23 /** Only check at this interval for new messages. */ 24 if ( !defined('WP_MAIL_INTERVAL') ) 25 define('WP_MAIL_INTERVAL', 300); // 5 minutes 26 27 $last_checked = get_transient('mailserver_last_checked'); 28 29 if ( $last_checked ) 30 wp_die(__('Slow down cowboy, no need to check for new mails so often!')); 31 32 set_transient('mailserver_last_checked', true, WP_MAIL_INTERVAL); 33 34 $time_difference = get_option('gmt_offset') * HOUR_IN_SECONDS; 35 36 $phone_delim = '::'; 37 38 $pop3 = new POP3(); 39 40 if ( !$pop3->connect( get_option('mailserver_url'), get_option('mailserver_port') ) || !$pop3->user( get_option('mailserver_login') ) ) 41 wp_die( esc_html( $pop3->ERROR ) ); 42 43 $count = $pop3->pass( get_option('mailserver_pass') ); 44 45 if( false === $count ) 46 wp_die( esc_html( $pop3->ERROR ) ); 47 48 if( 0 === $count ) { 49 $pop3->quit(); 50 wp_die( __('There doesn’t seem to be any new mail.') ); 51 } 52 53 for ( $i = 1; $i <= $count; $i++ ) { 54 55 $message = $pop3->get($i); 56 57 $bodysignal = false; 58 $boundary = ''; 59 $charset = ''; 60 $content = ''; 61 $content_type = ''; 62 $content_transfer_encoding = ''; 63 $post_author = 1; 64 $author_found = false; 65 $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); 66 foreach ($message as $line) { 67 // body signal 68 if ( strlen($line) < 3 ) 69 $bodysignal = true; 70 if ( $bodysignal ) { 71 $content .= $line; 72 } else { 73 if ( preg_match('/Content-Type: /i', $line) ) { 74 $content_type = trim($line); 75 $content_type = substr($content_type, 14, strlen($content_type) - 14); 76 $content_type = explode(';', $content_type); 77 if ( ! empty( $content_type[1] ) ) { 78 $charset = explode('=', $content_type[1]); 79 $charset = ( ! empty( $charset[1] ) ) ? trim($charset[1]) : ''; 80 } 81 $content_type = $content_type[0]; 82 } 83 if ( preg_match('/Content-Transfer-Encoding: /i', $line) ) { 84 $content_transfer_encoding = trim($line); 85 $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding) - 27); 86 $content_transfer_encoding = explode(';', $content_transfer_encoding); 87 $content_transfer_encoding = $content_transfer_encoding[0]; 88 } 89 if ( ( $content_type == 'multipart/alternative' ) && ( false !== strpos($line, 'boundary="') ) && ( '' == $boundary ) ) { 90 $boundary = trim($line); 91 $boundary = explode('"', $boundary); 92 $boundary = $boundary[1]; 93 } 94 if (preg_match('/Subject: /i', $line)) { 95 $subject = trim($line); 96 $subject = substr($subject, 9, strlen($subject) - 9); 97 // Captures any text in the subject before $phone_delim as the subject 98 if ( function_exists('iconv_mime_decode') ) { 99 $subject = iconv_mime_decode($subject, 2, get_option('blog_charset')); 100 } else { 101 $subject = wp_iso_descrambler($subject); 102 } 103 $subject = explode($phone_delim, $subject); 104 $subject = $subject[0]; 105 } 106 107 // Set the author using the email address (From or Reply-To, the last used) 108 // otherwise use the site admin 109 if ( ! $author_found && preg_match( '/^(From|Reply-To): /', $line ) ) { 110 if ( preg_match('|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches) ) 111 $author = $matches[0]; 112 else 113 $author = trim($line); 114 $author = sanitize_email($author); 115 if ( is_email($author) ) { 116 echo '<p>' . sprintf(__('Author is %s'), $author) . '</p>'; 117 $userdata = get_user_by('email', $author); 118 if ( ! empty( $userdata ) ) { 119 $post_author = $userdata->ID; 120 $author_found = true; 121 } 122 } 123 } 124 125 if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37' 126 $ddate = trim($line); 127 $ddate = str_replace('Date: ', '', $ddate); 128 if (strpos($ddate, ',')) { 129 $ddate = trim(substr($ddate, strpos($ddate, ',') + 1, strlen($ddate))); 130 } 131 $date_arr = explode(' ', $ddate); 132 $date_time = explode(':', $date_arr[3]); 133 134 $ddate_H = $date_time[0]; 135 $ddate_i = $date_time[1]; 136 $ddate_s = $date_time[2]; 137 138 $ddate_m = $date_arr[1]; 139 $ddate_d = $date_arr[0]; 140 $ddate_Y = $date_arr[2]; 141 for ( $j = 0; $j < 12; $j++ ) { 142 if ( $ddate_m == $dmonths[$j] ) { 143 $ddate_m = $j+1; 144 } 145 } 146 147 $time_zn = intval($date_arr[4]) * 36; 148 $ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y); 149 $ddate_U = $ddate_U - $time_zn; 150 $post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference); 151 $post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U); 152 } 153 } 154 } 155 156 // Set $post_status based on $author_found and on author's publish_posts capability 157 if ( $author_found ) { 158 $user = new WP_User($post_author); 159 $post_status = ( $user->has_cap('publish_posts') ) ? 'publish' : 'pending'; 160 } else { 161 // Author not found in DB, set status to pending. Author already set to admin. 162 $post_status = 'pending'; 163 } 164 165 $subject = trim($subject); 166 167 if ( $content_type == 'multipart/alternative' ) { 168 $content = explode('--'.$boundary, $content); 169 $content = $content[2]; 170 // match case-insensitive content-transfer-encoding 171 if ( preg_match( '/Content-Transfer-Encoding: quoted-printable/i', $content, $delim) ) { 172 $content = explode($delim[0], $content); 173 $content = $content[1]; 174 } 175 $content = strip_tags($content, '<img><p><br><i><b><u><em><strong><strike><font><span><div>'); 176 } 177 $content = trim($content); 178 179 //Give Post-By-Email extending plugins full access to the content 180 //Either the raw content or the content of the last quoted-printable section 181 $content = apply_filters('wp_mail_original_content', $content); 182 183 if ( false !== stripos($content_transfer_encoding, "quoted-printable") ) { 184 $content = quoted_printable_decode($content); 185 } 186 187 if ( function_exists('iconv') && ! empty( $charset ) ) { 188 $content = iconv($charset, get_option('blog_charset'), $content); 189 } 190 191 // Captures any text in the body after $phone_delim as the body 192 $content = explode($phone_delim, $content); 193 $content = empty( $content[1] ) ? $content[0] : $content[1]; 194 195 $content = trim($content); 196 197 $post_content = apply_filters('phone_content', $content); 198 199 $post_title = xmlrpc_getposttitle($content); 200 201 if ($post_title == '') $post_title = $subject; 202 203 $post_category = array(get_option('default_email_category')); 204 205 $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status'); 206 $post_data = wp_slash($post_data); 207 208 $post_ID = wp_insert_post($post_data); 209 if ( is_wp_error( $post_ID ) ) 210 echo "\n" . $post_ID->get_error_message(); 211 212 // We couldn't post, for whatever reason. Better move forward to the next email. 213 if ( empty( $post_ID ) ) 214 continue; 215 216 do_action('publish_phone', $post_ID); 217 218 echo "\n<p>" . sprintf(__('<strong>Author:</strong> %s'), esc_html($post_author)) . '</p>'; 219 echo "\n<p>" . sprintf(__('<strong>Posted title:</strong> %s'), esc_html($post_title)) . '</p>'; 220 221 if(!$pop3->delete($i)) { 222 echo '<p>' . sprintf(__('Oops: %s'), esc_html($pop3->ERROR)) . '</p>'; 223 $pop3->reset(); 224 exit; 225 } else { 226 echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>'; 227 } 228 229 } 230 231 $pop3->quit(); 22 do_action( 'wp-mail.php' ); 23 No newline at end of file