<!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>[BuddyPress][11094] trunk/src/bp-core/bp-core-options.php: Core: stop `bp_get_default_options()` adding missing options to the database.</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="http://buddypress.trac.wordpress.org/changeset/11094">11094</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/11094","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>djpaul</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-09-13 17:20:29 +0000 (Tue, 13 Sep 2016)</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'>Core: stop `bp_get_default_options()` adding missing options to the database.

`bp_get_default_options()` is used to get default option names and values throughout BuddyPress. If an option is not set in the database when the function is ran, it will add it.
The function is called in lots of places, and it even gets called before the version update handler routine does, from `bp_core_set_avatar_constants()`.
This is not obvious, and causes unpredictable behaviour about when a new option should exist (or not).

This change removes the missing option insertion from `bp_get_default_options()`.
New installs will have all options added by `bp_activation()`. Version updates will take responsibility to add new options within the existing upgrade routines.

See <a href="http://buddypress.trac.wordpress.org/ticket/7254">#7254</a> and <a href="http://buddypress.trac.wordpress.org/ticket/7227">#7227</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpcorebpcoreoptionsphp">trunk/src/bp-core/bp-core-options.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbpcorebpcoreoptionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-core/bp-core-options.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-core/bp-core-options.php     2016-09-13 17:00:17 UTC (rev 11093)
+++ trunk/src/bp-core/bp-core-options.php       2016-09-13 17:20:29 UTC (rev 11094)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -414,62 +414,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $root_blog_options_meta = array_merge( $root_blog_options_meta, $network_options_meta );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Missing some options, so do some one-time fixing.
-               if ( empty( $root_blog_options_meta ) || ( count( $root_blog_options_meta ) < count( $root_blog_option_keys ) ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Loop through our results and make them usable.
+               foreach ( $root_blog_options_meta as $root_blog_option ) {
+                       $root_blog_options[$root_blog_option->name] = $root_blog_option->value;
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Get a list of the keys that are already populated.
-                       $existing_options = array();
-                       foreach( $root_blog_options_meta as $already_option ) {
-                               $existing_options[$already_option->name] = $already_option->value;
-                       }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Copy the options no the return val.
+               $root_blog_options_meta = $root_blog_options;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Unset the query - We'll be resetting it soon.
-                       unset( $root_blog_options_meta );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // Clean up our temporary copy.
+               unset( $root_blog_options );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Loop through options.
-                       foreach ( $root_blog_options as $old_meta_key => $old_meta_default ) {
-
-                               if ( isset( $existing_options[$old_meta_key] ) ) {
-                                       continue;
-                               }
-
-                               // Get old site option.
-                               if ( is_multisite() ) {
-                                       $old_meta_value = get_site_option( $old_meta_key );
-                               }
-
-                               // No site option so look in root blog.
-                               if ( empty( $old_meta_value ) ) {
-                                       $old_meta_value = bp_get_option( $old_meta_key, $old_meta_default );
-                               }
-
-                               // Update the root blog option.
-                               bp_update_option( $old_meta_key, $old_meta_value );
-
-                               // Update the global array.
-                               $root_blog_options_meta[$old_meta_key] = $old_meta_value;
-
-                               // Clear out the value for the next time around.
-                               unset( $old_meta_value );
-                       }
-
-                       $root_blog_options_meta = array_merge( $root_blog_options_meta, $existing_options );
-                       unset( $existing_options );
-
-               // We're all matched up.
-               } else {
-                       // Loop through our results and make them usable.
-                       foreach ( $root_blog_options_meta as $root_blog_option ) {
-                               $root_blog_options[$root_blog_option->name] = $root_blog_option->value;
-                       }
-
-                       // Copy the options no the return val.
-                       $root_blog_options_meta = $root_blog_options;
-
-                       // Clean up our temporary copy.
-                       unset( $root_blog_options );
-               }
-
</del><span class="cx" style="display: block; padding: 0 10px">                 wp_cache_set( 'root_blog_options', $root_blog_options_meta, 'bp' );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre>
</div>
</div>

</body>
</html>