Changeset 10164
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-xprofile/classes/class-bp-xprofile-field.php
r10163 r10164 124 124 * 125 125 * @since 1.9.0 126 * 126 * @since 2.4.0 Property marked protected. Now accessible by magic method or by `get_default_visibility()`. 127 * 128 * @access protected 127 129 * @var string Default field data visibility. 128 130 */ 129 p ublic $default_visibility = 'public';131 protected $default_visibility; 130 132 131 133 /** … … 133 135 * 134 136 * @since 2.3.0 135 * 137 + * @since 2.4.0 Property marked protected. Now accessible by magic method or by `get_allow_custom_visibility()`. 138 * 139 * @access protected 136 140 * @var string Members are allowed/disallowed to modify data visibility. 137 141 */ 138 p ublic $allow_custom_visibility = 'allowed';142 protected $allow_custom_visibility; 139 143 140 144 /** … … 229 233 $this->data = $this->get_field_data( $user_id ); 230 234 } 231 232 // Get metadata for field. 233 $default_visibility = bp_xprofile_get_meta( $id, 'field', 'default_visibility' ); 234 $allow_custom_visibility = bp_xprofile_get_meta( $id, 'field', 'allow_custom_visibility' ); 235 236 // Setup default visibility. 237 $this->default_visibility = ! empty( $default_visibility ) 238 ? $default_visibility 239 : 'public'; 240 241 // Allow members to customize visibilty. 242 $this->allow_custom_visibility = ( 'disabled' === $allow_custom_visibility ) 243 ? 'disabled' 244 : 'allowed'; 235 } 236 } 237 238 /** 239 * Magic getter. 240 * 241 * @since 2.4.0 242 * 243 * @param string $key Property name. 244 * @return mixed 245 */ 246 public function __get( $key ) { 247 switch ( $key ) { 248 case 'default_visibility' : 249 return $this->get_default_visibility(); 250 break; 251 252 case 'allow_custom_visibility' : 253 return $this->get_allow_custom_visibility(); 254 break; 255 } 256 } 257 258 /** 259 * Magic issetter. 260 * 261 * @since 2.4.0 262 * 263 * @param string $key Property name. 264 * @return bool 265 */ 266 public function __isset( $key ) { 267 switch ( $key ) { 268 // Backward compatibility for when these were public methods. 269 case 'allow_custom_visibility' : 270 case 'default_visibility' : 271 return true; 272 break; 245 273 } 246 274 } … … 693 721 } 694 722 723 /** 724 * Get the field's default visibility setting. 725 * 726 * Lazy-loaded to reduce overhead. 727 * 728 * Defaults to 'public' if no visibility setting is found in the database. 729 * 730 * @since 2.4.0 731 * 732 * @return string 733 */ 734 public function get_default_visibility() { 735 if ( ! isset( $this->default_visibility ) ) { 736 $this->default_visibility = bp_xprofile_get_meta( $this->id, 'field', 'default_visibility' ); 737 738 if ( ! $this->default_visibility ) { 739 $this->default_visibility = 'public'; 740 } 741 } 742 743 return $this->default_visibility; 744 } 745 746 /** 747 * Get whether the field's default visibility can be overridden by users. 748 * 749 * Lazy-loaded to reduce overhead. 750 * 751 * Defaults to 'allowed'. 752 * 753 * @since 4.4.0 754 * 755 * @return string 'disabled' or 'allowed'. 756 */ 757 public function get_allow_custom_visibility() { 758 if ( ! isset( $this->allow_custom_visibility ) ) { 759 $allow_custom_visibility = bp_xprofile_get_meta( $this->id, 'field', 'allow_custom_visibility' ); 760 761 if ( 'disabled' === $allow_custom_visibility ) { 762 $this->allow_custom_visibility = 'disabled'; 763 } else { 764 $this->allow_custom_visibility = 'allowed'; 765 } 766 } 767 768 return $this->allow_custom_visibility; 769 } 770 695 771 /** Static Methods ********************************************************/ 696 772 … … 1254 1330 <?php foreach( bp_xprofile_get_visibility_levels() as $level ) : ?> 1255 1331 1256 <option value="<?php echo esc_attr( $level['id'] ); ?>" <?php selected( $this-> default_visibility, $level['id'] ); ?>>1332 <option value="<?php echo esc_attr( $level['id'] ); ?>" <?php selected( $this->get_default_visibility(), $level['id'] ); ?>> 1257 1333 <?php echo esc_html( $level['label'] ); ?> 1258 1334 </option> … … 1266 1342 <ul> 1267 1343 <li> 1268 <input type="radio" id="allow-custom-visibility-allowed" name="allow-custom-visibility" value="allowed" <?php checked( $this-> allow_custom_visibility, 'allowed' ); ?> />1344 <input type="radio" id="allow-custom-visibility-allowed" name="allow-custom-visibility" value="allowed" <?php checked( $this->get_allow_custom_visibility(), 'allowed' ); ?> /> 1269 1345 <label for="allow-custom-visibility-allowed"><?php esc_html_e( 'Allow members to override', 'buddypress' ); ?></label> 1270 1346 </li> 1271 1347 <li> 1272 <input type="radio" id="allow-custom-visibility-disabled" name="allow-custom-visibility" value="disabled" <?php checked( $this-> allow_custom_visibility, 'disabled' ); ?> />1348 <input type="radio" id="allow-custom-visibility-disabled" name="allow-custom-visibility" value="disabled" <?php checked( $this->get_allow_custom_visibility(), 'disabled' ); ?> /> 1273 1349 <label for="allow-custom-visibility-disabled"><?php esc_html_e( 'Enforce field visibility', 'buddypress' ); ?></label> 1274 1350 </li> -
trunk/tests/phpunit/testcases/xprofile/class-bp-xprofile-field.php
r10004 r10164 5 5 */ 6 6 class BP_Tests_BP_XProfile_Field_TestCases extends BP_UnitTestCase { 7 7 8 8 /** 9 9 * @group xprofile_field_save … … 121 121 $this->assertSame( $new_field_id, $field->id ); 122 122 } 123 124 /** 125 * @ticket BP6638 126 */ 127 public function test_default_visibility_should_be_lazy_loaded() { 128 global $wpdb; 129 130 $group = $this->factory->xprofile_group->create(); 131 $field = $this->factory->xprofile_field->create( array( 132 'field_group_id' => $group, 133 ) ); 134 135 bp_xprofile_update_meta( $field, 'field', 'default_visibility', 'loggedin' ); 136 137 // Initial setup takes just one query. 138 $num_queries = $wpdb->num_queries; 139 $field_obj = new BP_XProfile_Field( $field ); 140 $num_queries++; 141 142 $this->assertSame( $num_queries, $wpdb->num_queries ); 143 144 // Fetching the default_visibility should cause another query. 145 $this->assertSame( 'loggedin', $field_obj->default_visibility ); 146 $num_queries++; 147 148 $this->assertSame( $num_queries, $wpdb->num_queries ); 149 } 150 151 /** 152 * @ticket BP6638 153 */ 154 public function test_allow_custom_visibility_should_be_lazy_loaded() { 155 global $wpdb; 156 157 $group = $this->factory->xprofile_group->create(); 158 $field = $this->factory->xprofile_field->create( array( 159 'field_group_id' => $group, 160 ) ); 161 162 bp_xprofile_update_meta( $field, 'field', 'allow_custom_visibility', 'disabled' ); 163 164 // Initial setup takes just one query. 165 $num_queries = $wpdb->num_queries; 166 $field_obj = new BP_XProfile_Field( $field ); 167 $num_queries++; 168 169 $this->assertSame( $num_queries, $wpdb->num_queries ); 170 171 // Fetching the allow_custom_visibility should cause another query. 172 $this->assertSame( 'disabled', $field_obj->allow_custom_visibility ); 173 $num_queries++; 174 175 $this->assertSame( $num_queries, $wpdb->num_queries ); 176 } 123 177 }
Note: See TracChangeset
for help on using the changeset viewer.