<!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][11629] branches/2.8: Activation: Ensure we use the XProfile field's default visibility level during activation.</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/11629">11629</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/11629","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>r-a-y</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2017-07-07 18:37:55 +0000 (Fri, 07 Jul 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'>Activation: Ensure we use the XProfile field's default visibility level during activation.

Previously, if the visibility option for a XProfile field was removed from
the registration template, the visibility level for the user would always
fallback to 'public' instead of what the actual XProfile field's default
visibility level was.

Commit includes a unit test and rectifies the problem.

Props uscore713.

Fixes <a href="http://buddypress.trac.wordpress.org/ticket/7553">#7553</a> (2.8-branch)</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branches28srcbpmembersbpmembersfunctionsphp">branches/2.8/src/bp-members/bp-members-functions.php</a></li>
<li><a href="#branches28srcbpmembersclassesclassbpsignupphp">branches/2.8/src/bp-members/classes/class-bp-signup.php</a></li>
<li><a href="#branches28testsphpunittestcasesmembersclassbpsignupphp">branches/2.8/tests/phpunit/testcases/members/class-bp-signup.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branches28srcbpmembersbpmembersfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: branches/2.8/src/bp-members/bp-members-functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- branches/2.8/src/bp-members/bp-members-functions.php      2017-07-07 18:25:30 UTC (rev 11628)
+++ branches/2.8/src/bp-members/bp-members-functions.php        2017-07-07 18:37:55 UTC (rev 11629)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2063,8 +2063,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        xprofile_set_field_data( $field_id, $user_id, $current_field );
</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">-                                // Save the visibility level.
-                               $visibility_level = ! empty( $user['meta']['field_' . $field_id . '_visibility'] ) ? $user['meta']['field_' . $field_id . '_visibility'] : 'public';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         /*
+                                * Save the visibility level.
+                                *
+                                * Use the field's default visibility if not present, and 'public' if a
+                                * default visibility is not defined.
+                                */
+                               $key = "field_{$field_id}_visibility";
+                               if ( isset( $user['meta'][ $key ] ) ) {
+                                       $visibility_level = $user['meta'][ $key ];
+                               } else {
+                                       $vfield           = xprofile_get_field( $field_id );
+                                       $visibility_level = isset( $vfield->default_visibility ) ? $vfield->default_visibility : 'public';
+                               }
</ins><span class="cx" style="display: block; padding: 0 10px">                                 xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre></div>
<a id="branches28srcbpmembersclassesclassbpsignupphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: branches/2.8/src/bp-members/classes/class-bp-signup.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- branches/2.8/src/bp-members/classes/class-bp-signup.php   2017-07-07 18:25:30 UTC (rev 11628)
+++ branches/2.8/src/bp-members/classes/class-bp-signup.php     2017-07-07 18:37:55 UTC (rev 11629)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -388,8 +388,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $current_field = $usermeta["field_{$field_id}"];
</span><span class="cx" style="display: block; padding: 0 10px">                                        xprofile_set_field_data( $field_id, $user_id, $current_field );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // Save the visibility level.
-                                       $visibility_level = ! empty( $usermeta['field_' . $field_id . '_visibility'] ) ? $usermeta['field_' . $field_id . '_visibility'] : 'public';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 /*
+                                        * Save the visibility level.
+                                        *
+                                        * Use the field's default visibility if not present, and 'public' if a
+                                        * default visibility is not defined.
+                                        */
+                                       $key = "field_{$field_id}_visibility";
+                                       if ( isset( $usermeta[ $key ] ) ) {
+                                               $visibility_level = $usermeta[ $key ];
+                                       } else {
+                                               $vfield           = xprofile_get_field( $field_id );
+                                               $visibility_level = isset( $vfield->default_visibility ) ? $vfield->default_visibility : 'public';
+                                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                                         xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span></span></pre></div>
<a id="branches28testsphpunittestcasesmembersclassbpsignupphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: branches/2.8/tests/phpunit/testcases/members/class-bp-signup.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- branches/2.8/tests/phpunit/testcases/members/class-bp-signup.php  2017-07-07 18:25:30 UTC (rev 11628)
+++ branches/2.8/tests/phpunit/testcases/members/class-bp-signup.php    2017-07-07 18:37:55 UTC (rev 11629)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -62,6 +62,44 @@
</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">        /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         * @group add
+        */
+       public function test_add_no_visibility_level_set_should_use_default_visiblity_level() {
+               // Update field_1's default visiblity to 'adminsonly'
+               bp_xprofile_update_field_meta( 1, 'default_visibility', 'adminsonly' );
+
+               // Add new signup without a custom field visibility set for field_1.
+               $signup = BP_Signup::add( array(
+                       'domain' => 'foo',
+                       'path' => 'bar',
+                       'title' => 'Foo bar',
+                       'user_login' => 'user1',
+                       'user_email' => 'user1@example.com',
+                       'registered' => bp_core_current_time(),
+                       'activation_key' => '12345',
+                       'meta' => array(
+                               'field_1' => 'Foo Bar',
+                               'meta1' => 'meta2',
+                               'password' => 'password',
+
+                               /*
+                                * Ensure we pass the field ID.
+                                *
+                                * See bp_core_activate_signup() and BP_Signup::add_backcompat().
+                                */
+                               'profile_field_ids' => '1'
+                       ),
+               ) );
+
+               // Activate the signup.
+               $activate = BP_Signup::activate( (array) $signup );
+
+               // Assert that field 1's visibility for the signup is still 'adminsonly'
+               $vis = xprofile_get_field_visibility_level( 1, $activate['activated'][0] );
+               $this->assertSame( 'adminsonly', $vis );
+       }
+
+       /**
</ins><span class="cx" style="display: block; padding: 0 10px">          * @group get
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function test_get_with_offset() {
</span></span></pre>
</div>
</div>

</body>
</html>