Ticket #22942: 22942_updated_for_3.8.26148.diff
File 22942_updated_for_3.8.26148.diff, 16.4 KB (added by , 11 years ago) |
---|
-
wp-admin/includes/schema.php
diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php index 90ab600..97a9330 100644
function populate_options() { 377 377 'comments_notify' => 1, 378 378 'posts_per_rss' => 10, 379 379 'rss_use_excerpt' => 0, 380 'mailserver_url' => 'mail.example.com',381 'mailserver_login' => 'login@example.com',382 'mailserver_pass' => 'password',383 'mailserver_port' => 110,384 380 'default_category' => 1, 385 381 'default_comment_status' => 'open', 386 382 'default_ping_status' => 'open', … … function populate_options() { 484 480 485 481 // 3.5 486 482 'link_manager_enabled' => 0, 483 484 // 3.8 485 'post_by_email_enabled' => 0, 487 486 ); 488 487 489 488 // 3.3 -
wp-admin/includes/upgrade.php
diff --git wp-admin/includes/upgrade.php wp-admin/includes/upgrade.php index bd250ae..623bb5a 100644
function upgrade_all() { 408 408 if ( $wp_current_db_version < 26148 ) 409 409 upgrade_372(); 410 410 411 if ( $wp_current_db_version < 26148 ) 412 upgrade_380(); 413 411 414 maybe_disable_link_manager(); 412 415 413 416 maybe_disable_automattic_widgets(); 414 417 418 maybe_disable_post_by_email(); 419 415 420 update_option( 'db_version', $wp_db_version ); 416 421 update_option( 'db_upgraded', true ); 417 422 } … … function upgrade_372() { 1238 1243 } 1239 1244 1240 1245 /** 1246 * Execute changes made in WordPress 3.8. 1247 * 1248 * @since 3.8.0 1249 */ 1250 function upgrade_380() { 1251 global $wp_current_db_version; 1252 1253 if ( $wp_current_db_version < 26148 && 'mail.example.com' != get_option( 'mailserver_url' ) ) 1254 update_option( 'post_by_email_enabled', 1 ); // Previously set to 0 by populate_options() 1255 } 1256 1257 /** 1241 1258 * Execute network level changes 1242 1259 * 1243 1260 * @since 3.0.0 … … function maybe_disable_link_manager() { 2002 2019 } 2003 2020 2004 2021 /** 2022 * Disables Post by Email options if, at the time of upgrade, the settings have not been changed from original defaults. 2023 * 2024 * @since 3.8.0 2025 */ 2026 function maybe_disable_post_by_email() { 2027 global $wp_current_db_version; 2028 2029 if ( $wp_current_db_version >= 26148 && get_option( 'post_by_email_enabled' ) && 'mail.example.com' == get_option( 'mailserver_url' ) ) 2030 update_option( 'post_by_email_enabled', 0 ); 2031 } 2032 2033 /** 2005 2034 * Runs before the schema is upgraded. 2006 2035 * 2007 2036 * @since 2.9.0 -
wp-admin/options-writing.php
diff --git wp-admin/options-writing.php wp-admin/options-writing.php index b3f9f68..a04edb2 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 56aac4c..116703d 100644
function sanitize_option($option, $value) { 2849 2849 case 'medium_size_h': 2850 2850 case 'large_size_w': 2851 2851 case 'large_size_h': 2852 case 'mailserver_port':2853 2852 case 'comment_max_links': 2854 2853 case 'page_on_front': 2855 2854 case 'page_for_posts': … … function sanitize_option($option, $value) { 2901 2900 2902 2901 case 'date_format': 2903 2902 case 'time_format': 2904 case 'mailserver_url':2905 case 'mailserver_login':2906 case 'mailserver_pass':2907 2903 case 'upload_path': 2908 2904 $value = strip_tags( $value ); 2909 2905 $value = wp_kses_data( $value ); -
wp-mail.php
diff --git wp-mail.php wp-mail.php index 550c28c..15d37be 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.' ) ); 16 17 /** 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' ); 20 21 /** 18 22 * Fires to allow a plugin to do a complete takeover of Post by Email. 19 23 * 20 24 * @since 2.9.0 21 25 */ 22 do_action( 'wp-mail.php' ); 23 24 /** Get the POP3 class with which to access the mailbox. */ 25 require_once( ABSPATH . WPINC . '/class-pop3.php' ); 26 27 /** Only check at this interval for new messages. */ 28 if ( !defined('WP_MAIL_INTERVAL') ) 29 define('WP_MAIL_INTERVAL', 300); // 5 minutes 30 31 $last_checked = get_transient('mailserver_last_checked'); 32 33 if ( $last_checked ) 34 wp_die(__('Slow down cowboy, no need to check for new mails so often!')); 35 36 set_transient('mailserver_last_checked', true, WP_MAIL_INTERVAL); 37 38 $time_difference = get_option('gmt_offset') * HOUR_IN_SECONDS; 39 40 $phone_delim = '::'; 41 42 $pop3 = new POP3(); 43 44 if ( !$pop3->connect( get_option('mailserver_url'), get_option('mailserver_port') ) || !$pop3->user( get_option('mailserver_login') ) ) 45 wp_die( esc_html( $pop3->ERROR ) ); 46 47 $count = $pop3->pass( get_option('mailserver_pass') ); 48 49 if( false === $count ) 50 wp_die( esc_html( $pop3->ERROR ) ); 51 52 if( 0 === $count ) { 53 $pop3->quit(); 54 wp_die( __('There doesn’t seem to be any new mail.') ); 55 } 56 57 for ( $i = 1; $i <= $count; $i++ ) { 58 59 $message = $pop3->get($i); 60 61 $bodysignal = false; 62 $boundary = ''; 63 $charset = ''; 64 $content = ''; 65 $content_type = ''; 66 $content_transfer_encoding = ''; 67 $post_author = 1; 68 $author_found = false; 69 $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); 70 foreach ($message as $line) { 71 // body signal 72 if ( strlen($line) < 3 ) 73 $bodysignal = true; 74 if ( $bodysignal ) { 75 $content .= $line; 76 } else { 77 if ( preg_match('/Content-Type: /i', $line) ) { 78 $content_type = trim($line); 79 $content_type = substr($content_type, 14, strlen($content_type) - 14); 80 $content_type = explode(';', $content_type); 81 if ( ! empty( $content_type[1] ) ) { 82 $charset = explode('=', $content_type[1]); 83 $charset = ( ! empty( $charset[1] ) ) ? trim($charset[1]) : ''; 84 } 85 $content_type = $content_type[0]; 86 } 87 if ( preg_match('/Content-Transfer-Encoding: /i', $line) ) { 88 $content_transfer_encoding = trim($line); 89 $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding) - 27); 90 $content_transfer_encoding = explode(';', $content_transfer_encoding); 91 $content_transfer_encoding = $content_transfer_encoding[0]; 92 } 93 if ( ( $content_type == 'multipart/alternative' ) && ( false !== strpos($line, 'boundary="') ) && ( '' == $boundary ) ) { 94 $boundary = trim($line); 95 $boundary = explode('"', $boundary); 96 $boundary = $boundary[1]; 97 } 98 if (preg_match('/Subject: /i', $line)) { 99 $subject = trim($line); 100 $subject = substr($subject, 9, strlen($subject) - 9); 101 // Captures any text in the subject before $phone_delim as the subject 102 if ( function_exists('iconv_mime_decode') ) { 103 $subject = iconv_mime_decode($subject, 2, get_option('blog_charset')); 104 } else { 105 $subject = wp_iso_descrambler($subject); 106 } 107 $subject = explode($phone_delim, $subject); 108 $subject = $subject[0]; 109 } 110 111 // Set the author using the email address (From or Reply-To, the last used) 112 // otherwise use the site admin 113 if ( ! $author_found && preg_match( '/^(From|Reply-To): /', $line ) ) { 114 if ( preg_match('|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches) ) 115 $author = $matches[0]; 116 else 117 $author = trim($line); 118 $author = sanitize_email($author); 119 if ( is_email($author) ) { 120 echo '<p>' . sprintf(__('Author is %s'), $author) . '</p>'; 121 $userdata = get_user_by('email', $author); 122 if ( ! empty( $userdata ) ) { 123 $post_author = $userdata->ID; 124 $author_found = true; 125 } 126 } 127 } 128 129 if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37' 130 $ddate = trim($line); 131 $ddate = str_replace('Date: ', '', $ddate); 132 if (strpos($ddate, ',')) { 133 $ddate = trim(substr($ddate, strpos($ddate, ',') + 1, strlen($ddate))); 134 } 135 $date_arr = explode(' ', $ddate); 136 $date_time = explode(':', $date_arr[3]); 137 138 $ddate_H = $date_time[0]; 139 $ddate_i = $date_time[1]; 140 $ddate_s = $date_time[2]; 141 142 $ddate_m = $date_arr[1]; 143 $ddate_d = $date_arr[0]; 144 $ddate_Y = $date_arr[2]; 145 for ( $j = 0; $j < 12; $j++ ) { 146 if ( $ddate_m == $dmonths[$j] ) { 147 $ddate_m = $j+1; 148 } 149 } 150 151 $time_zn = intval($date_arr[4]) * 36; 152 $ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y); 153 $ddate_U = $ddate_U - $time_zn; 154 $post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference); 155 $post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U); 156 } 157 } 158 } 159 160 // Set $post_status based on $author_found and on author's publish_posts capability 161 if ( $author_found ) { 162 $user = new WP_User($post_author); 163 $post_status = ( $user->has_cap('publish_posts') ) ? 'publish' : 'pending'; 164 } else { 165 // Author not found in DB, set status to pending. Author already set to admin. 166 $post_status = 'pending'; 167 } 168 169 $subject = trim($subject); 170 171 if ( $content_type == 'multipart/alternative' ) { 172 $content = explode('--'.$boundary, $content); 173 $content = $content[2]; 174 // match case-insensitive content-transfer-encoding 175 if ( preg_match( '/Content-Transfer-Encoding: quoted-printable/i', $content, $delim) ) { 176 $content = explode($delim[0], $content); 177 $content = $content[1]; 178 } 179 $content = strip_tags($content, '<img><p><br><i><b><u><em><strong><strike><font><span><div>'); 180 } 181 $content = trim($content); 182 183 /** 184 * Filter the original content of the email. 185 * 186 * Give Post-By-Email extending plugins full access to the content, either 187 * the raw content, or the content of the last quoted-printable section. 188 * 189 * @since 2.8.0 190 * 191 * @param string $content The original email content. 192 */ 193 $content = apply_filters( 'wp_mail_original_content', $content ); 194 195 if ( false !== stripos($content_transfer_encoding, "quoted-printable") ) { 196 $content = quoted_printable_decode($content); 197 } 198 199 if ( function_exists('iconv') && ! empty( $charset ) ) { 200 $content = iconv($charset, get_option('blog_charset'), $content); 201 } 202 203 // Captures any text in the body after $phone_delim as the body 204 $content = explode($phone_delim, $content); 205 $content = empty( $content[1] ) ? $content[0] : $content[1]; 206 207 $content = trim($content); 208 209 /** 210 * Filter the content of the post submitted by email before saving. 211 * 212 * @since 1.2.0 213 * 214 * @param string $content The email content. 215 */ 216 $post_content = apply_filters( 'phone_content', $content ); 217 218 $post_title = xmlrpc_getposttitle($content); 219 220 if ($post_title == '') $post_title = $subject; 221 222 $post_category = array(get_option('default_email_category')); 223 224 $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status'); 225 $post_data = wp_slash($post_data); 226 227 $post_ID = wp_insert_post($post_data); 228 if ( is_wp_error( $post_ID ) ) 229 echo "\n" . $post_ID->get_error_message(); 230 231 // We couldn't post, for whatever reason. Better move forward to the next email. 232 if ( empty( $post_ID ) ) 233 continue; 234 235 /** 236 * Fires after a post submitted by email is published. 237 * 238 * @since 1.2.0 239 * 240 * @param int $post_ID The post ID. 241 */ 242 do_action( 'publish_phone', $post_ID ); 243 244 echo "\n<p>" . sprintf(__('<strong>Author:</strong> %s'), esc_html($post_author)) . '</p>'; 245 echo "\n<p>" . sprintf(__('<strong>Posted title:</strong> %s'), esc_html($post_title)) . '</p>'; 246 247 if(!$pop3->delete($i)) { 248 echo '<p>' . sprintf(__('Oops: %s'), esc_html($pop3->ERROR)) . '</p>'; 249 $pop3->reset(); 250 exit; 251 } else { 252 echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>'; 253 } 254 255 } 256 257 $pop3->quit(); 26 do_action( 'wp-mail.php' ); 27 No newline at end of file