WordPress.org

Make WordPress Core

Ticket #22942: 22942_updated_for_3.7.diff

File 22942_updated_for_3.7.diff, 14.4 KB (added by codebykat, 6 years ago)

Updated for 3.7

  • wp-admin/includes/schema.php

    diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php
    index b200995..ec5d1ca 100644
    function populate_options() { 
    369369        'comments_notify' => 1,
    370370        'posts_per_rss' => 10,
    371371        'rss_use_excerpt' => 0,
    372         'mailserver_url' => 'mail.example.com',
    373         'mailserver_login' => 'login@example.com',
    374         'mailserver_pass' => 'password',
    375         'mailserver_port' => 110,
    376372        'default_category' => 1,
    377373        'default_comment_status' => 'open',
    378374        'default_ping_status' => 'open',
    function populate_options() { 
    476472
    477473        // 3.5
    478474        'link_manager_enabled' => 0,
     475
     476        // 3.7
     477        'post_by_email_enabled' => 0,
    479478        );
    480479
    481480        // 3.3
  • wp-admin/includes/upgrade.php

    diff --git wp-admin/includes/upgrade.php wp-admin/includes/upgrade.php
    index 0d17d8f..63e6c1a 100644
    function upgrade_all() { 
    402402        if ( $wp_current_db_version < 22422 )
    403403                upgrade_350();
    404404
     405        if ( $wp_current_db_version < 25150 )
     406                upgrade_370();
     407
    405408        maybe_disable_link_manager();
    406409
    407410        maybe_disable_automattic_widgets();
    408411
     412        maybe_disable_post_by_email();
     413
    409414        update_option( 'db_version', $wp_db_version );
    410415        update_option( 'db_upgraded', true );
    411416}
    function upgrade_350() { 
    12091214}
    12101215
    12111216/**
     1217 * Execute changes made in WordPress 3.7.
     1218 *
     1219 * @since 3.7.0
     1220 */
     1221function upgrade_370() {
     1222        global $wp_current_db_version;
     1223
     1224        if ( $wp_current_db_version < 25134 && 'mail.example.com' != get_option( 'mailserver_url' ) )
     1225                update_option( 'post_by_email_enabled', 1 ); // Previously set to 0 by populate_options()
     1226}
     1227
     1228/**
    12121229 * Execute network level changes
    12131230 *
    12141231 * @since 3.0.0
    function maybe_disable_link_manager() { 
    19591976}
    19601977
    19611978/**
     1979 * Disables Post by Email options if, at the time of upgrade, the settings have not been changed from original defaults.
     1980 *
     1981 * @since 3.6.0
     1982 */
     1983function maybe_disable_post_by_email() {
     1984        global $wp_current_db_version;
     1985
     1986        if ( $wp_current_db_version >= 25134 && get_option( 'post_by_email_enabled' ) && 'mail.example.com' == get_option( 'mailserver_url' ) )
     1987                update_option( 'post_by_email_enabled', 0 );
     1988}
     1989
     1990/**
    19621991 * Runs before the schema is upgraded.
    19631992 *
    19641993 * @since 2.9.0
  • wp-admin/options-writing.php

    diff --git wp-admin/options-writing.php wp-admin/options-writing.php
    index 8015bae..8c0ea6d 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 if ( apply_filters( 'enable_post_by_email_configuration', true ) ) {
    32         get_current_screen()->add_help_tab( array(
    33                 'id'      => 'options-postemail',
    34                 'title'   => __( 'Post Via Email' ),
    35                 '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>',
    36         ) );
    37 }
    38 
    3931if ( apply_filters( 'enable_update_services_configuration', true ) ) {
    4032        get_current_screen()->add_help_tab( array(
    4133                'id'      => 'options-services',
    do_settings_fields('writing', 'remote_publishing'); // A deprecated section. 
    122114        <p><textarea rows="5" cols="120" readonly="readonly"><?php echo htmlspecialchars( get_shortcut_link() ); ?></textarea></p>
    123115</div>
    124116
    125 <?php if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { ?>
    126 <h3 class="title"><?php _e('Post via e-mail') ?></h3>
    127 <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>
    128 
    129 <table class="form-table">
    130 <tr valign="top">
    131 <th scope="row"><label for="mailserver_url"><?php _e('Mail Server') ?></label></th>
    132 <td><input name="mailserver_url" type="text" id="mailserver_url" value="<?php form_option('mailserver_url'); ?>" class="regular-text code" />
    133 <label for="mailserver_port"><?php _e('Port') ?></label>
    134 <input name="mailserver_port" type="text" id="mailserver_port" value="<?php form_option('mailserver_port'); ?>" class="small-text" />
    135 </td>
    136 </tr>
    137 <tr valign="top">
    138 <th scope="row"><label for="mailserver_login"><?php _e('Login Name') ?></label></th>
    139 <td><input name="mailserver_login" type="text" id="mailserver_login" value="<?php form_option('mailserver_login'); ?>" class="regular-text ltr" /></td>
    140 </tr>
    141 <tr valign="top">
    142 <th scope="row"><label for="mailserver_pass"><?php _e('Password') ?></label></th>
    143 <td>
    144 <input name="mailserver_pass" type="text" id="mailserver_pass" value="<?php form_option('mailserver_pass'); ?>" class="regular-text ltr" />
    145 </td>
    146 </tr>
    147 <tr valign="top">
    148 <th scope="row"><label for="default_email_category"><?php _e('Default Mail Category') ?></label></th>
    149 <td>
    150 <?php
    151 wp_dropdown_categories(array('hide_empty' => 0, 'name' => 'default_email_category', 'orderby' => 'name', 'selected' => get_option('default_email_category'), 'hierarchical' => true));
    152 ?>
     117<?php if ( get_option( 'post_by_email_enabled' ) && apply_filters( 'enable_post_by_email_configuration', true ) ) { ?>
     118<h3 class="title"><?php _e( 'Post via e-mail' ) ?></h3>
     119<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>
    153120</td>
    154121</tr>
    155122<?php do_settings_fields('writing', 'post_via_email'); ?>
  • wp-includes/default-filters.php

    diff --git wp-includes/default-filters.php wp-includes/default-filters.php
    index 7c55dfb..485faea 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-mail.php

    diff --git wp-mail.php wp-mail.php
    index 27290b1..59351c6 100644
     
    1010/** Make sure that the WordPress bootstrap has run before continuing. */
    1111require(dirname(__FILE__) . '/wp-load.php');
    1212
    13 if ( ! apply_filters( 'enable_post_by_email_configuration', true ) )
    14         wp_die( __( 'This action has been disabled by the administrator.' ) );
    15 
    1613/** Allow a plugin to do a complete takeover of Post by Email **/
    1714do_action('wp-mail.php');
    18 
    19 /** Get the POP3 class with which to access the mailbox. */
    20 require_once( ABSPATH . WPINC . '/class-pop3.php' );
    21 
    22 /** Only check at this interval for new messages. */
    23 if ( !defined('WP_MAIL_INTERVAL') )
    24         define('WP_MAIL_INTERVAL', 300); // 5 minutes
    25 
    26 $last_checked = get_transient('mailserver_last_checked');
    27 
    28 if ( $last_checked )
    29         wp_die(__('Slow down cowboy, no need to check for new mails so often!'));
    30 
    31 set_transient('mailserver_last_checked', true, WP_MAIL_INTERVAL);
    32 
    33 $time_difference = get_option('gmt_offset') * HOUR_IN_SECONDS;
    34 
    35 $phone_delim = '::';
    36 
    37 $pop3 = new POP3();
    38 
    39 if ( !$pop3->connect( get_option('mailserver_url'), get_option('mailserver_port') ) || !$pop3->user( get_option('mailserver_login') ) )
    40         wp_die( esc_html( $pop3->ERROR ) );
    41 
    42 $count = $pop3->pass( get_option('mailserver_pass') );
    43 
    44 if( false === $count )
    45         wp_die( esc_html( $pop3->ERROR ) );
    46 
    47 if( 0 === $count ) {
    48         $pop3->quit();
    49         wp_die( __('There doesn&#8217;t seem to be any new mail.') );
    50 }
    51 
    52 for ( $i = 1; $i <= $count; $i++ ) {
    53 
    54         $message = $pop3->get($i);
    55 
    56         $bodysignal = false;
    57         $boundary = '';
    58         $charset = '';
    59         $content = '';
    60         $content_type = '';
    61         $content_transfer_encoding = '';
    62         $post_author = 1;
    63         $author_found = false;
    64         $dmonths = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
    65         foreach ($message as $line) {
    66                 // body signal
    67                 if ( strlen($line) < 3 )
    68                         $bodysignal = true;
    69                 if ( $bodysignal ) {
    70                         $content .= $line;
    71                 } else {
    72                         if ( preg_match('/Content-Type: /i', $line) ) {
    73                                 $content_type = trim($line);
    74                                 $content_type = substr($content_type, 14, strlen($content_type) - 14);
    75                                 $content_type = explode(';', $content_type);
    76                                 if ( ! empty( $content_type[1] ) ) {
    77                                         $charset = explode('=', $content_type[1]);
    78                                         $charset = ( ! empty( $charset[1] ) ) ? trim($charset[1]) : '';
    79                                 }
    80                                 $content_type = $content_type[0];
    81                         }
    82                         if ( preg_match('/Content-Transfer-Encoding: /i', $line) ) {
    83                                 $content_transfer_encoding = trim($line);
    84                                 $content_transfer_encoding = substr($content_transfer_encoding, 27, strlen($content_transfer_encoding) - 27);
    85                                 $content_transfer_encoding = explode(';', $content_transfer_encoding);
    86                                 $content_transfer_encoding = $content_transfer_encoding[0];
    87                         }
    88                         if ( ( $content_type == 'multipart/alternative' ) && ( false !== strpos($line, 'boundary="') ) && ( '' == $boundary ) ) {
    89                                 $boundary = trim($line);
    90                                 $boundary = explode('"', $boundary);
    91                                 $boundary = $boundary[1];
    92                         }
    93                         if (preg_match('/Subject: /i', $line)) {
    94                                 $subject = trim($line);
    95                                 $subject = substr($subject, 9, strlen($subject) - 9);
    96                                 // Captures any text in the subject before $phone_delim as the subject
    97                                 if ( function_exists('iconv_mime_decode') ) {
    98                                         $subject = iconv_mime_decode($subject, 2, get_option('blog_charset'));
    99                                 } else {
    100                                         $subject = wp_iso_descrambler($subject);
    101                                 }
    102                                 $subject = explode($phone_delim, $subject);
    103                                 $subject = $subject[0];
    104                         }
    105 
    106                         // Set the author using the email address (From or Reply-To, the last used)
    107                         // otherwise use the site admin
    108                         if ( ! $author_found && preg_match( '/^(From|Reply-To): /', $line ) ) {
    109                                 if ( preg_match('|[a-z0-9_.-]+@[a-z0-9_.-]+(?!.*<)|i', $line, $matches) )
    110                                         $author = $matches[0];
    111                                 else
    112                                         $author = trim($line);
    113                                 $author = sanitize_email($author);
    114                                 if ( is_email($author) ) {
    115                                         echo '<p>' . sprintf(__('Author is %s'), $author) . '</p>';
    116                                         $userdata = get_user_by('email', $author);
    117                                         if ( ! empty( $userdata ) ) {
    118                                                 $post_author = $userdata->ID;
    119                                                 $author_found = true;
    120                                         }
    121                                 }
    122                         }
    123 
    124                         if (preg_match('/Date: /i', $line)) { // of the form '20 Mar 2002 20:32:37'
    125                                 $ddate = trim($line);
    126                                 $ddate = str_replace('Date: ', '', $ddate);
    127                                 if (strpos($ddate, ',')) {
    128                                         $ddate = trim(substr($ddate, strpos($ddate, ',') + 1, strlen($ddate)));
    129                                 }
    130                                 $date_arr = explode(' ', $ddate);
    131                                 $date_time = explode(':', $date_arr[3]);
    132 
    133                                 $ddate_H = $date_time[0];
    134                                 $ddate_i = $date_time[1];
    135                                 $ddate_s = $date_time[2];
    136 
    137                                 $ddate_m = $date_arr[1];
    138                                 $ddate_d = $date_arr[0];
    139                                 $ddate_Y = $date_arr[2];
    140                                 for ( $j = 0; $j < 12; $j++ ) {
    141                                         if ( $ddate_m == $dmonths[$j] ) {
    142                                                 $ddate_m = $j+1;
    143                                         }
    144                                 }
    145 
    146                                 $time_zn = intval($date_arr[4]) * 36;
    147                                 $ddate_U = gmmktime($ddate_H, $ddate_i, $ddate_s, $ddate_m, $ddate_d, $ddate_Y);
    148                                 $ddate_U = $ddate_U - $time_zn;
    149                                 $post_date = gmdate('Y-m-d H:i:s', $ddate_U + $time_difference);
    150                                 $post_date_gmt = gmdate('Y-m-d H:i:s', $ddate_U);
    151                         }
    152                 }
    153         }
    154 
    155         // Set $post_status based on $author_found and on author's publish_posts capability
    156         if ( $author_found ) {
    157                 $user = new WP_User($post_author);
    158                 $post_status = ( $user->has_cap('publish_posts') ) ? 'publish' : 'pending';
    159         } else {
    160                 // Author not found in DB, set status to pending. Author already set to admin.
    161                 $post_status = 'pending';
    162         }
    163 
    164         $subject = trim($subject);
    165 
    166         if ( $content_type == 'multipart/alternative' ) {
    167                 $content = explode('--'.$boundary, $content);
    168                 $content = $content[2];
    169                 // match case-insensitive content-transfer-encoding
    170                 if ( preg_match( '/Content-Transfer-Encoding: quoted-printable/i', $content, $delim) ) {
    171                         $content = explode($delim[0], $content);
    172                         $content = $content[1];
    173                 }
    174                 $content = strip_tags($content, '<img><p><br><i><b><u><em><strong><strike><font><span><div>');
    175         }
    176         $content = trim($content);
    177 
    178         //Give Post-By-Email extending plugins full access to the content
    179         //Either the raw content or the content of the last quoted-printable section
    180         $content = apply_filters('wp_mail_original_content', $content);
    181 
    182         if ( false !== stripos($content_transfer_encoding, "quoted-printable") ) {
    183                 $content = quoted_printable_decode($content);
    184         }
    185 
    186         if ( function_exists('iconv') && ! empty( $charset ) ) {
    187                 $content = iconv($charset, get_option('blog_charset'), $content);
    188         }
    189 
    190         // Captures any text in the body after $phone_delim as the body
    191         $content = explode($phone_delim, $content);
    192         $content = empty( $content[1] ) ? $content[0] : $content[1];
    193 
    194         $content = trim($content);
    195 
    196         $post_content = apply_filters('phone_content', $content);
    197 
    198         $post_title = xmlrpc_getposttitle($content);
    199 
    200         if ($post_title == '') $post_title = $subject;
    201 
    202         $post_category = array(get_option('default_email_category'));
    203 
    204         $post_data = compact('post_content','post_title','post_date','post_date_gmt','post_author','post_category', 'post_status');
    205         $post_data = wp_slash($post_data);
    206 
    207         $post_ID = wp_insert_post($post_data);
    208         if ( is_wp_error( $post_ID ) )
    209                 echo "\n" . $post_ID->get_error_message();
    210 
    211         // We couldn't post, for whatever reason. Better move forward to the next email.
    212         if ( empty( $post_ID ) )
    213                 continue;
    214 
    215         do_action('publish_phone', $post_ID);
    216 
    217         echo "\n<p>" . sprintf(__('<strong>Author:</strong> %s'), esc_html($post_author)) . '</p>';
    218         echo "\n<p>" . sprintf(__('<strong>Posted title:</strong> %s'), esc_html($post_title)) . '</p>';
    219 
    220         if(!$pop3->delete($i)) {
    221                 echo '<p>' . sprintf(__('Oops: %s'), esc_html($pop3->ERROR)) . '</p>';
    222                 $pop3->reset();
    223                 exit;
    224         } else {
    225                 echo '<p>' . sprintf(__('Mission complete. Message <strong>%s</strong> deleted.'), $i) . '</p>';
    226         }
    227 
    228 }
    229 
    230 $pop3->quit();