WordPress.org

Make WordPress Core

Ticket #22942: 22942_updated_for_3.8.diff

File 22942_updated_for_3.8.diff, 15.9 KB (added by codebykat, 6 years ago)

Here's the version for 3.8.

  • wp-admin/includes/schema.php

    diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php
    index f88f79d..5a54356 100644
    function populate_options() { 
    373373        'comments_notify' => 1,
    374374        'posts_per_rss' => 10,
    375375        'rss_use_excerpt' => 0,
    376         'mailserver_url' => 'mail.example.com',
    377         'mailserver_login' => 'login@example.com',
    378         'mailserver_pass' => 'password',
    379         'mailserver_port' => 110,
    380376        'default_category' => 1,
    381377        'default_comment_status' => 'open',
    382378        'default_ping_status' => 'open',
    function populate_options() { 
    480476
    481477        // 3.5
    482478        'link_manager_enabled' => 0,
     479
     480        // 3.8
     481        'post_by_email_enabled' => 0,
    483482        );
    484483
    485484        // 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() { 
    405405        if ( $wp_current_db_version < 25824 )
    406406                upgrade_370();
    407407
     408        if ( $wp_current_db_version < 25824 )
     409                upgrade_380();
     410
    408411        maybe_disable_link_manager();
    409412
    410413        maybe_disable_automattic_widgets();
    411414
     415        maybe_disable_post_by_email();
     416
    412417        update_option( 'db_version', $wp_db_version );
    413418        update_option( 'db_upgraded', true );
    414419}
    function upgrade_370() { 
    12231228}
    12241229
    12251230/**
     1231 * Execute changes made in WordPress 3.8.
     1232 *
     1233 * @since 3.8.0
     1234 */
     1235function 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/**
    12261243 * Execute network level changes
    12271244 *
    12281245 * @since 3.0.0
    function maybe_disable_link_manager() { 
    19872004}
    19882005
    19892006/**
     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 */
     2011function 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/**
    19902019 * Runs before the schema is upgraded.
    19912020 *
    19922021 * @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( 
    2828        '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&#8217;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>',
    2929) );
    3030
    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&#8217;s a good idea to keep this address very secret.' ) . '</p>',
    37         ) );
    38 }
    39 
    4031/**
    4132* Toggle site update services configuration functionality.
    4233*
    do_settings_fields('writing', 'remote_publishing'); // A deprecated section. 
    132123
    133124<?php
    134125/** 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&#8217;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>
     126if ( 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>
    168129<?php } ?>
    169130
    170131<?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 ); 
    301301add_filter( 'authenticate', 'wp_authenticate_username_password',  20, 3 );
    302302add_filter( 'authenticate', 'wp_authenticate_spam_check',         99    );
    303303
     304// If the upgrade hasn't run yet, assume the post by mail options are set.
     305add_filter( 'default_option_post_by_email_enabled', '__return_true' );
     306
    304307unset($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) { 
    28192819                case 'medium_size_h':
    28202820                case 'large_size_w':
    28212821                case 'large_size_h':
    2822                 case 'mailserver_port':
    28232822                case 'comment_max_links':
    28242823                case 'page_on_front':
    28252824                case 'page_for_posts':
    function sanitize_option($option, $value) { 
    28712870
    28722871                case 'date_format':
    28732872                case 'time_format':
    2874                 case 'mailserver_url':
    2875                 case 'mailserver_login':
    2876                 case 'mailserver_pass':
    28772873                case 'upload_path':
    28782874                        $value = strip_tags( $value );
    28792875                        $value = wp_kses_data( $value );
  • wp-mail.php

    diff --git wp-mail.php wp-mail.php
    index aab9183..4c53620 100644
     
    11<?php
    22/**
    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
    611 *
    712 * @package WordPress
    813 */
     
    1015/** Make sure that the WordPress bootstrap has run before continuing. */
    1116require(dirname(__FILE__) . '/wp-load.php');
    1217
    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' );
    1620
    1721/** 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&#8217;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();
     22do_action( 'wp-mail.php' );
     23 No newline at end of file