<!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>[40296] trunk: Multisite: Ensure first page/post/comment content is not empty when setting up a new site.</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" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/40296">40296</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/40296","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>swissspidy</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2017-03-17 15:48:35 +0000 (Fri, 17 Mar 2017)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Multisite: Ensure first page/post/comment content is not empty when setting up a new site.

This prevents creating page without any content when the options are populated with an empty string.

Props shadyvb.
Fixes <a href="https://core.trac.wordpress.org/ticket/40036">#40036</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpadminincludesupgradephp">trunk/src/wp-admin/includes/upgrade.php</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunktestsphpunittestsmultisitewpInstallDefaultsphp">trunk/tests/phpunit/tests/multisite/wpInstallDefaults.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpadminincludesupgradephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-admin/includes/upgrade.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-admin/includes/upgrade.php   2017-03-17 14:35:08 UTC (rev 40295)
+++ trunk/src/wp-admin/includes/upgrade.php     2017-03-17 15:48:35 UTC (rev 40296)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -194,18 +194,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => $cat_tt_id, 'object_id' => 1) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Default comment
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $first_comment_author = __( 'A WordPress Commenter' );
-       $first_comment_email = 'wapuu@wordpress.example';
-       $first_comment_url = 'https://wordpress.org/';
-       $first_comment = __( 'Hi, this is a comment.
-To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
-Commenter avatars come from <a href="https://gravatar.com">Gravatar</a>.' );
</del><span class="cx" style="display: block; padding: 0 10px">         if ( is_multisite() ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $first_comment_author = get_site_option( 'first_comment_author', $first_comment_author );
-               $first_comment_email = get_site_option( 'first_comment_email', $first_comment_email );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $first_comment_author = get_site_option( 'first_comment_author' );
+               $first_comment_email = get_site_option( 'first_comment_email' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 $first_comment_url = get_site_option( 'first_comment_url', network_home_url() );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $first_comment = get_site_option( 'first_comment', $first_comment );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $first_comment = get_site_option( 'first_comment' );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       $first_comment_author = ! empty( $first_comment_author ) ? $first_comment_author : __( 'A WordPress Commenter' );
+       $first_comment_email = ! empty( $first_comment_email ) ? $first_comment_email : 'wapuu@wordpress.example';
+       $first_comment_url = ! empty( $first_comment_url ) ? $first_comment_url : 'https://wordpress.org/';
+       $first_comment = ! empty( $first_comment ) ? $first_comment :  __( 'Hi, this is a comment.
+To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
+Commenter avatars come from <a href="https://gravatar.com">Gravatar</a>.' );
</ins><span class="cx" style="display: block; padding: 0 10px">         $wpdb->insert( $wpdb->comments, array(
</span><span class="cx" style="display: block; padding: 0 10px">                'comment_post_ID' => 1,
</span><span class="cx" style="display: block; padding: 0 10px">                'comment_author' => $first_comment_author,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -217,17 +218,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">        ));
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // First Page
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        $first_page = sprintf( __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( is_multisite() )
+               $first_page = get_site_option( 'first_page' );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-<blockquote>Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi&#241;a coladas. (And gettin' caught in the rain.)</blockquote>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $first_page = ! empty( $first_page ) ? $first_page : sprintf( __( "This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:
+               
+               <blockquote>Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi&#241;a coladas. (And gettin' caught in the rain.)</blockquote>
+               
+               ...or something like this:
+               
+               <blockquote>The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.</blockquote>
+               
+               As a new WordPress user, you should go to <a href=\"%s\">your dashboard</a> to delete this page and create new pages for your content. Have fun!" ), admin_url() );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-...or something like this:
-
-<blockquote>The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.</blockquote>
-
-As a new WordPress user, you should go to <a href=\"%s\">your dashboard</a> to delete this page and create new pages for your content. Have fun!" ), admin_url() );
-       if ( is_multisite() )
-               $first_page = get_site_option( 'first_page', $first_page );
</del><span class="cx" style="display: block; padding: 0 10px">         $first_post_guid = get_option('home') . '/?page_id=2';
</span><span class="cx" style="display: block; padding: 0 10px">        $wpdb->insert( $wpdb->posts, array(
</span><span class="cx" style="display: block; padding: 0 10px">                'post_author' => $user_id,
</span></span></pre></div>
<a id="trunktestsphpunittestsmultisitewpInstallDefaultsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/tests/phpunit/tests/multisite/wpInstallDefaults.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/multisite/wpInstallDefaults.php                         (rev 0)
+++ trunk/tests/phpunit/tests/multisite/wpInstallDefaults.php   2017-03-17 15:48:35 UTC (rev 40296)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,81 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+if ( is_multisite() ) :
+/**
+ * Saving network settings without altering starter content ( first page, post, and comment ) shouldn't affect
+ * the way it is added to new sites.
+ *
+ * @group ms-site
+ * @group multisite
+ */
+class Tests_Multisite_Install_Defaults extends WP_UnitTestCase {
+       /**
+        * @ticket 40036
+        */
+       public function test_option_should_not_be_empty_by_default() {
+               $blog_id = $this->factory->blog->create();
+
+               switch_to_blog( $blog_id );
+
+               $first_page = get_page_by_path( '/sample-page' );
+               $first_comment = get_comments();
+
+               restore_current_blog();
+               wpmu_delete_blog( $blog_id, true );
+
+               $this->assertNotEmpty( $first_page->post_content );
+               $this->assertNotEmpty( $first_comment[0]->comment_content );
+       }
+
+       /**
+        * @ticket 40036
+        */
+       public function test_empty_option_should_fall_back_to_default() {
+               /*
+                * Update first_page / first_comment options,
+                * just like what happens when the network settings page is saved
+                */
+               update_site_option( 'first_page', '' );
+               update_site_option( 'first_comment', '' );
+
+               $blog_id = $this->factory->blog->create();
+
+               switch_to_blog( $blog_id );
+
+               $first_page = get_page_by_path( '/sample-page' );
+               $first_comment = get_comments();
+
+               restore_current_blog();
+               wpmu_delete_blog( $blog_id, true );
+
+               $this->assertNotEmpty( $first_page->post_content );
+               $this->assertNotEmpty( $first_comment[0]->comment_content );
+       }
+
+       /**
+        * @ticket 40036
+        */
+       public function test_non_default_option_values() {
+               /*
+                * Update first_page / first_comment options,
+                * just like what happens when the network settings page is saved
+                */
+               update_site_option( 'first_page', 'Some page content' );
+               update_site_option( 'first_comment', 'Some comment content' );
+
+               $blog_id = $this->factory->blog->create();
+
+               switch_to_blog( $blog_id );
+
+               $first_page = get_page_by_path( '/sample-page' );
+               $first_comment = get_comments();
+
+               restore_current_blog();
+               wpmu_delete_blog( $blog_id, true );
+
+               $this->assertEquals( 'Some page content', $first_page->post_content );
+               $this->assertEquals( 'Some comment content', $first_comment[0]->comment_content );
+       }
+}
+
+endif;
</ins></span></pre>
</div>
</div>

</body>
</html>