<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[2236] 2013/codebykat/post-by-email/trunk/22942_updated_for_3.7.diff: updated Core deprecation patch for 3.7</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://gsoc.trac.wordpress.org/changeset/2236">2236</a></dd>
<dt>Author</dt> <dd>codebykat</dd>
<dt>Date</dt> <dd>2013-08-27 05:48:32 +0000 (Tue, 27 Aug 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>updated Core deprecation patch for 3.7</pre>

<h3>Added Paths</h3>
<ul>
<li><a href="#2013codebykatpostbyemailtrunk22942_updated_for_37diff">2013/codebykat/post-by-email/trunk/22942_updated_for_3.7.diff</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="2013codebykatpostbyemailtrunk22942_updated_for_37diff"></a>
<div class="addfile"><h4>Added: 2013/codebykat/post-by-email/trunk/22942_updated_for_3.7.diff (0 => 2236)</h4>
<pre class="diff"><span>
<span class="info">--- 2013/codebykat/post-by-email/trunk/22942_updated_for_3.7.diff                            (rev 0)
+++ 2013/codebykat/post-by-email/trunk/22942_updated_for_3.7.diff       2013-08-27 05:48:32 UTC (rev 2236)
</span><span class="lines">@@ -0,0 +1,371 @@
</span><ins>+diff --git wp-admin/includes/schema.php wp-admin/includes/schema.php
+index b200995..ec5d1ca 100644
+--- wp-admin/includes/schema.php
++++ wp-admin/includes/schema.php
+@@ -369,10 +369,6 @@ function populate_options() {
+       'comments_notify' => 1,
+       'posts_per_rss' => 10,
+       'rss_use_excerpt' => 0,
+-      'mailserver_url' => 'mail.example.com',
+-      'mailserver_login' => 'login@example.com',
+-      'mailserver_pass' => 'password',
+-      'mailserver_port' => 110,
+       'default_category' => 1,
+       'default_comment_status' => 'open',
+       'default_ping_status' => 'open',
+@@ -476,6 +472,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 0d17d8f..fdf8907 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 < 25134 )
++              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.6.0
++ */
++function maybe_disable_post_by_email() {
++      global $wp_current_db_version;
++
++      if ( $wp_current_db_version >= 25134 && 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 8015bae..e38dea3 100644
+--- wp-admin/options-writing.php
++++ wp-admin/options-writing.php
+@@ -28,7 +28,7 @@ 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&#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>',
+ ) );

+-if ( apply_filters( 'enable_post_by_email_configuration', true ) ) {
++if ( get_option( 'post_by_email_enabled' ) && apply_filters( 'enable_post_by_email_configuration', true ) ) {
+       get_current_screen()->add_help_tab( array(
+               'id'      => 'options-postemail',
+               'title'   => __( 'Post Via Email' ),
+@@ -122,34 +122,9 @@ do_settings_fields('writing', 'remote_publishing'); // A deprecated section.
+       <p><textarea rows="5" cols="120" readonly="readonly"><?php echo htmlspecialchars( get_shortcut_link() ); ?></textarea></p>
+ </div>

+-<?php if ( apply_filters( 'enable_post_by_email_configuration', true ) ) { ?>
++<?php 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 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>
+-
+-<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));
+-?>
++<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>
+ </td>
+ </tr>
+ <?php do_settings_fields('writing', 'post_via_email'); ?>
+diff --git wp-includes/default-filters.php wp-includes/default-filters.php
+index 84d43aa..8acef7e 100644
+--- wp-includes/default-filters.php
++++ wp-includes/default-filters.php
+@@ -305,4 +305,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-mail.php wp-mail.php
+index 27290b1..59351c6 100644
+--- wp-mail.php
++++ wp-mail.php
+@@ -10,221 +10,5 @@
+ /** 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.' ) );
+-
+ /** 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&#8217;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();
</ins></span></pre>
</div>
</div>

</body>
</html>