Changeset 12317
- Timestamp:
- 12/07/2018 06:41:16 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-xprofile/bp-xprofile-cache.php
r11818 r12317 288 288 add_action( 'xprofile_field_before_save', 'bp_xprofile_reset_fields_by_name_cache_incrementor' ); 289 289 290 /** 291 * Resets all incremented bp_xprofile_groups caches. 292 * 293 * @since 5.0.0 294 */ 295 function bp_xprofile_reset_groups_cache_incrementor() { 296 bp_core_reset_incrementor( 'bp_xprofile_groups' ); 297 } 298 add_action( 'xprofile_group_after_delete', 'bp_xprofile_reset_groups_cache_incrementor' ); 299 add_action( 'xprofile_group_after_save', 'bp_xprofile_reset_groups_cache_incrementor' ); 300 add_action( 'xprofile_field_after_delete', 'bp_xprofile_reset_groups_cache_incrementor' ); 301 add_action( 'xprofile_field_after_save', 'bp_xprofile_reset_groups_cache_incrementor' ); 302 290 303 // List actions to clear super cached pages on, if super cache is installed. 291 304 add_action( 'xprofile_updated_profile', 'bp_core_clear_cache' ); -
trunk/src/bp-xprofile/classes/class-bp-xprofile-field.php
r11847 r12317 978 978 $parent = $wpdb->query( $sql ); 979 979 980 $retval = false; 981 980 982 // Update $field_id with new $position and $field_group_id. 981 983 if ( ! empty( $parent ) && ! is_wp_error( $parent ) ) { … … 985 987 $wpdb->query( $sql ); 986 988 987 // Invalidate profile field cache.989 // Invalidate profile field and group query cache. 988 990 wp_cache_delete( $field_id, 'bp_xprofile_fields' ); 989 991 990 return $parent; 991 } 992 993 return false; 992 $retval = $parent; 993 } 994 995 bp_core_reset_incrementor( 'bp_xprofile_groups' ); 996 997 return $retval; 994 998 } 995 999 -
trunk/src/bp-xprofile/classes/class-bp-xprofile-group.php
r12210 r12317 289 289 ); 290 290 291 // WHERE. 291 $bp = buddypress(); 292 293 $group_ids = self::get_group_ids( $r ); 294 295 // Get all group data. 296 $groups = self::get_group_data( $group_ids ); 297 298 // Bail if not also getting fields. 299 if ( empty( $r['fetch_fields'] ) ) { 300 return $groups; 301 } 302 303 // Get the group ids from the groups we found. 304 $group_ids = wp_list_pluck( $groups, 'id' ); 305 306 // Store for meta cache priming. 307 $object_ids['group'] = $group_ids; 308 309 // Bail if no groups found. 310 if ( empty( $group_ids ) ) { 311 return $groups; 312 } 313 314 $field_ids = self::get_group_field_ids( $group_ids, $r ); 315 316 foreach( $groups as $group ) { 317 $group->fields = array(); 318 } 319 320 // Bail if no fields. 321 if ( empty( $field_ids ) ) { 322 return $groups; 323 } 324 325 $field_ids = array_map( 'intval', $field_ids ); 326 327 // Prime the field cache. 328 $uncached_field_ids = bp_get_non_cached_ids( $field_ids, 'bp_xprofile_fields' ); 329 if ( ! empty( $uncached_field_ids ) ) { 330 $_uncached_field_ids = implode( ',', array_map( 'intval', $uncached_field_ids ) ); 331 $uncached_fields = $wpdb->get_results( "SELECT * FROM {$bp->profile->table_name_fields} WHERE id IN ({$_uncached_field_ids})" ); 332 foreach ( $uncached_fields as $uncached_field ) { 333 $fid = intval( $uncached_field->id ); 334 wp_cache_set( $fid, $uncached_field, 'bp_xprofile_fields' ); 335 } 336 } 337 338 // Pull field objects from the cache. 339 $fields = array(); 340 foreach ( $field_ids as $field_id ) { 341 $fields[] = xprofile_get_field( $field_id, null, false ); 342 } 343 344 // Store field IDs for meta cache priming. 345 $object_ids['field'] = $field_ids; 346 347 // Maybe fetch field data. 348 if ( ! empty( $r['fetch_field_data'] ) ) { 349 350 // Get field data for user ID. 351 if ( ! empty( $field_ids ) && ! empty( $r['user_id'] ) ) { 352 $field_data = BP_XProfile_ProfileData::get_data_for_user( $r['user_id'], $field_ids ); 353 } 354 355 // Remove data-less fields, if necessary. 356 if ( ! empty( $r['hide_empty_fields'] ) && ! empty( $field_ids ) && ! empty( $field_data ) ) { 357 358 // Loop through the results and find the fields that have data. 359 foreach( (array) $field_data as $data ) { 360 361 // Empty fields may contain a serialized empty array. 362 $maybe_value = maybe_unserialize( $data->value ); 363 364 // Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731. 365 if ( ( ! empty( $maybe_value ) || '0' == $maybe_value ) && false !== $key = array_search( $data->field_id, $field_ids ) ) { 366 367 // Fields that have data get removed from the list. 368 unset( $field_ids[ $key ] ); 369 } 370 } 371 372 // The remaining members of $field_ids are empty. Remove them. 373 foreach( $fields as $field_key => $field ) { 374 if ( in_array( $field->id, $field_ids ) ) { 375 unset( $fields[ $field_key ] ); 376 } 377 } 378 379 // Reset indexes. 380 $fields = array_values( $fields ); 381 } 382 383 // Field data was found. 384 if ( ! empty( $fields ) && ! empty( $field_data ) && ! is_wp_error( $field_data ) ) { 385 386 // Loop through fields. 387 foreach( (array) $fields as $field_key => $field ) { 388 389 // Loop through the data in each field. 390 foreach( (array) $field_data as $data ) { 391 392 // Assign correct data value to the field. 393 if ( $field->id == $data->field_id ) { 394 $fields[ $field_key ]->data = new stdClass; 395 $fields[ $field_key ]->data->value = $data->value; 396 $fields[ $field_key ]->data->id = $data->id; 397 } 398 399 // Store for meta cache priming. 400 $object_ids['data'][] = $data->id; 401 } 402 } 403 } 404 } 405 406 // Prime the meta cache, if necessary. 407 if ( ! empty( $r['update_meta_cache'] ) ) { 408 bp_xprofile_update_meta_cache( $object_ids ); 409 } 410 411 // Maybe fetch visibility levels. 412 if ( ! empty( $r['fetch_visibility_level'] ) ) { 413 $fields = self::fetch_visibility_level( $r['user_id'], $fields ); 414 } 415 416 // Merge the field array back in with the group array. 417 foreach( (array) $groups as $group ) { 418 // Indexes may have been shifted after previous deletions, so we get a 419 // fresh one each time through the loop. 420 $index = array_search( $group, $groups ); 421 422 foreach( (array) $fields as $field ) { 423 if ( $group->id === $field->group_id ) { 424 $groups[ $index ]->fields[] = $field; 425 } 426 } 427 428 // When we unset fields above, we may have created empty groups. 429 // Remove them, if necessary. 430 if ( empty( $group->fields ) && ! empty( $r['hide_empty_groups'] ) ) { 431 unset( $groups[ $index ] ); 432 } 433 434 // Reset indexes. 435 $groups = array_values( $groups ); 436 } 437 438 return $groups; 439 } 440 441 /** 442 * Gets group IDs, based on passed parameters. 443 * 444 * @since 5.0.0 445 * 446 * @param array $args { 447 * Array of optional arguments: 448 * @type int $profile_group_id Limit results to a single profile group. Default false. 449 * @type array $exclude_groups Comma-separated list or array of group IDs to exclude. Default false. 450 * @type bool $hide_empty_groups True to hide groups that don't have any fields. Default: false. 451 * } 452 * @return array 453 */ 454 public static function get_group_ids( $args = array() ) { 455 global $wpdb; 456 457 $r = array_merge( 458 array( 459 'profile_group_id' => false, 460 'exclude_groups' => false, 461 'hide_empty_groups' => false, 462 ), 463 $args 464 ); 465 466 $bp = buddypress(); 467 292 468 if ( ! empty( $r['profile_group_id'] ) ) { 293 469 $where_sql = $wpdb->prepare( 'WHERE g.id = %d', $r['profile_group_id'] ); … … 299 475 } 300 476 301 $bp = buddypress();302 303 477 // Include or exclude empty groups. 304 478 if ( ! empty( $r['hide_empty_groups'] ) ) { 305 $group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g INNER JOIN {$bp->profile->table_name_fields} f ON g.id = f.group_id {$where_sql} ORDER BY g.group_order ASC" );479 $group_ids_sql = "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g INNER JOIN {$bp->profile->table_name_fields} f ON g.id = f.group_id {$where_sql} ORDER BY g.group_order ASC"; 306 480 } else { 307 $group_ids = $wpdb->get_col( "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g {$where_sql} ORDER BY g.group_order ASC" ); 308 } 309 310 // Get all group data. 311 $groups = self::get_group_data( $group_ids ); 312 313 // Bail if not also getting fields. 314 if ( empty( $r['fetch_fields'] ) ) { 315 return $groups; 316 } 317 318 // Get the group ids from the groups we found. 319 $group_ids = wp_list_pluck( $groups, 'id' ); 320 321 // Store for meta cache priming. 322 $object_ids['group'] = $group_ids; 323 324 // Bail if no groups found. 481 $group_ids_sql = "SELECT DISTINCT g.id FROM {$bp->profile->table_name_groups} g {$where_sql} ORDER BY g.group_order ASC"; 482 } 483 484 $cached = bp_core_get_incremented_cache( $group_ids_sql, 'bp_xprofile_groups' ); 485 if ( false === $cached ) { 486 $group_ids = $wpdb->get_col( $group_ids_sql ); 487 bp_core_set_incremented_cache( $group_ids_sql, 'bp_xprofile_groups', $group_ids ); 488 } else { 489 $group_ids = $cached; 490 } 491 492 return array_map( 'intval', $group_ids ); 493 } 494 495 /** 496 * Gets group field IDs, based on passed parameters. 497 * 498 * @since 5.0.0 499 * 500 * @param array $group_ids Array of group IDs. 501 * @param array $args { 502 * Array of optional arguments: 503 * @type array $exclude_fields Comma-separated list or array of field IDs to exclude. 504 * Default empty. 505 * @type int $user_id Limit results to fields associated with a given user's 506 * member type. Default empty. 507 * @type array|string $member_type Limit fields by those restricted to a given member type, or array of 508 * member types. If `$user_id` is provided, the value of `$member_type` 509 * is honored. 510 * } 511 * @return array 512 */ 513 public static function get_group_field_ids( $group_ids, $args = array() ) { 514 global $wpdb; 515 516 $r = array_merge( 517 array( 518 'exclude_fields' => false, 519 'user_id' => false, 520 'member_type' => false, 521 ), 522 $args 523 ); 524 525 $bp = buddypress(); 526 527 // Setup IN query from group IDs. 325 528 if ( empty( $group_ids ) ) { 326 return $groups; 327 } 328 329 // Setup IN query from group IDs. 330 $group_ids_in = implode( ',', (array) $group_ids ); 529 $group_ids = array( 0 ); 530 } 531 $group_ids_in = implode( ',', array_map( 'intval', $group_ids ) ); 331 532 332 533 // Support arrays and comma-separated strings. … … 371 572 } 372 573 373 // Fetch the fields. 374 $field_ids = $wpdb->get_col( "SELECT id FROM {$bp->profile->table_name_fields} WHERE group_id IN ( {$group_ids_in} ) AND parent_id = 0 {$exclude_fields_sql} {$in_sql} ORDER BY field_order" ); 375 376 foreach( $groups as $group ) { 377 $group->fields = array(); 378 } 379 380 // Bail if no fields. 381 if ( empty( $field_ids ) ) { 382 return $groups; 383 } 384 385 $field_ids = array_map( 'intval', $field_ids ); 386 387 // Prime the field cache. 388 $uncached_field_ids = bp_get_non_cached_ids( $field_ids, 'bp_xprofile_fields' ); 389 if ( ! empty( $uncached_field_ids ) ) { 390 $_uncached_field_ids = implode( ',', array_map( 'intval', $uncached_field_ids ) ); 391 $uncached_fields = $wpdb->get_results( "SELECT * FROM {$bp->profile->table_name_fields} WHERE id IN ({$_uncached_field_ids})" ); 392 foreach ( $uncached_fields as $uncached_field ) { 393 $fid = intval( $uncached_field->id ); 394 wp_cache_set( $fid, $uncached_field, 'bp_xprofile_fields' ); 395 } 396 } 397 398 // Pull field objects from the cache. 399 $fields = array(); 400 foreach ( $field_ids as $field_id ) { 401 $fields[] = xprofile_get_field( $field_id, null, false ); 402 } 403 404 // Store field IDs for meta cache priming. 405 $object_ids['field'] = $field_ids; 406 407 // Maybe fetch field data. 408 if ( ! empty( $r['fetch_field_data'] ) ) { 409 410 // Get field data for user ID. 411 if ( ! empty( $field_ids ) && ! empty( $r['user_id'] ) ) { 412 $field_data = BP_XProfile_ProfileData::get_data_for_user( $r['user_id'], $field_ids ); 413 } 414 415 // Remove data-less fields, if necessary. 416 if ( ! empty( $r['hide_empty_fields'] ) && ! empty( $field_ids ) && ! empty( $field_data ) ) { 417 418 // Loop through the results and find the fields that have data. 419 foreach( (array) $field_data as $data ) { 420 421 // Empty fields may contain a serialized empty array. 422 $maybe_value = maybe_unserialize( $data->value ); 423 424 // Valid field values of 0 or '0' get caught by empty(), so we have an extra check for these. See #BP5731. 425 if ( ( ! empty( $maybe_value ) || '0' == $maybe_value ) && false !== $key = array_search( $data->field_id, $field_ids ) ) { 426 427 // Fields that have data get removed from the list. 428 unset( $field_ids[ $key ] ); 429 } 430 } 431 432 // The remaining members of $field_ids are empty. Remove them. 433 foreach( $fields as $field_key => $field ) { 434 if ( in_array( $field->id, $field_ids ) ) { 435 unset( $fields[ $field_key ] ); 436 } 437 } 438 439 // Reset indexes. 440 $fields = array_values( $fields ); 441 } 442 443 // Field data was found. 444 if ( ! empty( $fields ) && ! empty( $field_data ) && ! is_wp_error( $field_data ) ) { 445 446 // Loop through fields. 447 foreach( (array) $fields as $field_key => $field ) { 448 449 // Loop through the data in each field. 450 foreach( (array) $field_data as $data ) { 451 452 // Assign correct data value to the field. 453 if ( $field->id == $data->field_id ) { 454 $fields[ $field_key ]->data = new stdClass; 455 $fields[ $field_key ]->data->value = $data->value; 456 $fields[ $field_key ]->data->id = $data->id; 457 } 458 459 // Store for meta cache priming. 460 $object_ids['data'][] = $data->id; 461 } 462 } 463 } 464 } 465 466 // Prime the meta cache, if necessary. 467 if ( ! empty( $r['update_meta_cache'] ) ) { 468 bp_xprofile_update_meta_cache( $object_ids ); 469 } 470 471 // Maybe fetch visibility levels. 472 if ( ! empty( $r['fetch_visibility_level'] ) ) { 473 $fields = self::fetch_visibility_level( $r['user_id'], $fields ); 474 } 475 476 // Merge the field array back in with the group array. 477 foreach( (array) $groups as $group ) { 478 // Indexes may have been shifted after previous deletions, so we get a 479 // fresh one each time through the loop. 480 $index = array_search( $group, $groups ); 481 482 foreach( (array) $fields as $field ) { 483 if ( $group->id === $field->group_id ) { 484 $groups[ $index ]->fields[] = $field; 485 } 486 } 487 488 // When we unset fields above, we may have created empty groups. 489 // Remove them, if necessary. 490 if ( empty( $group->fields ) && ! empty( $r['hide_empty_groups'] ) ) { 491 unset( $groups[ $index ] ); 492 } 493 494 // Reset indexes. 495 $groups = array_values( $groups ); 496 } 497 498 return $groups; 574 $field_ids_sql = "SELECT id FROM {$bp->profile->table_name_fields} WHERE group_id IN ( {$group_ids_in} ) AND parent_id = 0 {$exclude_fields_sql} {$in_sql} ORDER BY field_order"; 575 576 $cached = bp_core_get_incremented_cache( $field_ids_sql, 'bp_xprofile_groups' ); 577 if ( false === $cached ) { 578 $field_ids = $wpdb->get_col( $field_ids_sql ); 579 bp_core_set_incremented_cache( $field_ids_sql, 'bp_xprofile_groups', $field_ids ); 580 } else { 581 $field_ids = $cached; 582 } 583 584 return array_map( 'intval', $field_ids ); 499 585 } 500 586 … … 614 700 } 615 701 616 // Purge profile field group cache.702 // Purge profile field group and group query caches. 617 703 wp_cache_delete( 'all', 'bp_xprofile_groups' ); 704 bp_core_reset_incrementor( 'bp_xprofile_groups' ); 618 705 619 706 $bp = buddypress(); -
trunk/tests/phpunit/testcases/xprofile/class-bp-xprofile-group.php
r12210 r12317 442 442 $this->assertSame( "Test ' Name", $e1->name ); 443 443 } 444 445 /** 446 * @group BP7435 447 * @group cache 448 */ 449 public function test_group_ids_query_should_be_cached() { 450 global $wpdb; 451 452 $group_ids = array( 1 ); // Default group. 453 $group_ids[] = self::factory()->xprofile_group->create(); 454 $group_ids[] = self::factory()->xprofile_group->create(); 455 $group_ids[] = self::factory()->xprofile_group->create(); 456 457 $params_1 = array( 458 'exclude_groups' => false, 459 ); 460 461 $params_2 = array( 462 'exclude_groups' => array( 0 ), 463 ); 464 465 // Prime cache. 466 $found_1 = BP_XProfile_Group::get_group_ids( $params_1 ); 467 $this->assertEqualSets( $group_ids, $found_1 ); 468 469 $num_queries = $wpdb->num_queries; 470 471 $found_1 = BP_XProfile_Group::get_group_ids( $params_1 ); 472 $this->assertEqualSets( $group_ids, $found_1 ); 473 $this->assertSame( $num_queries, $wpdb->num_queries ); 474 475 // Different parameters should trigger a cache miss. 476 $found_2 = BP_XProfile_Group::get_group_ids( $params_2 ); 477 $this->assertEqualSets( $group_ids, $found_2 ); 478 $this->assertNotSame( $num_queries, $wpdb->num_queries ); 479 } 480 481 /** 482 * @group BP7435 483 * @group cache 484 */ 485 public function test_group_ids_query_cache_should_be_busted_on_group_delete() { 486 $group_ids = array( 1 ); // Default group. 487 $group_ids[1] = self::factory()->xprofile_group->create(); 488 $group_ids[2] = self::factory()->xprofile_group->create(); 489 $group_ids[3] = self::factory()->xprofile_group->create(); 490 491 // Prime cache. 492 $found = BP_XProfile_Group::get_group_ids(); 493 $this->assertContains( $group_ids[1], $found ); 494 495 $g1 = new BP_XProfile_Group( $group_ids[1] ); 496 $g1->delete(); 497 498 $found = BP_XProfile_Group::get_group_ids(); 499 $this->assertNotContains( $group_ids[1], $found ); 500 } 501 502 /** 503 * @group BP7435 504 * @group cache 505 */ 506 public function test_group_ids_query_cache_should_be_busted_on_group_save() { 507 global $wpdb; 508 509 $group_ids = array( 1 ); // Default group. 510 $group_ids[1] = self::factory()->xprofile_group->create(); 511 $group_ids[2] = self::factory()->xprofile_group->create(); 512 $group_ids[3] = self::factory()->xprofile_group->create(); 513 514 // Prime cache. 515 $found = BP_XProfile_Group::get_group_ids(); 516 $this->assertContains( $group_ids[1], $found ); 517 518 $g1 = new BP_XProfile_Group( $group_ids[1] ); 519 $g1->save(); 520 521 $num_queries = $wpdb->num_queries; 522 523 $found = BP_XProfile_Group::get_group_ids(); 524 $this->assertNotSame( $num_queries, $wpdb->num_queries ); 525 } 526 527 /** 528 * @group BP7435 529 * @group cache 530 */ 531 public function test_group_ids_query_cache_should_be_busted_on_field_save() { 532 global $wpdb; 533 534 $group_ids = array( 1 ); // Default group. 535 $group_ids[1] = self::factory()->xprofile_group->create(); 536 $group_ids[2] = self::factory()->xprofile_group->create(); 537 $group_ids[3] = self::factory()->xprofile_group->create(); 538 539 $f = self::factory()->xprofile_field->create( array( 540 'field_group_id' => $group_ids[1], 541 ) ); 542 $field = new BP_XProfile_Field( $f ); 543 544 // Prime cache. 545 $found = BP_XProfile_Group::get_group_ids(); 546 $this->assertContains( $group_ids[1], $found ); 547 548 $field->save(); 549 550 $num_queries = $wpdb->num_queries; 551 552 $found = BP_XProfile_Group::get_group_ids(); 553 $this->assertNotSame( $num_queries, $wpdb->num_queries ); 554 } 555 556 /** 557 * @group BP7435 558 * @group cache 559 */ 560 public function test_group_ids_query_cache_should_be_busted_on_field_delete() { 561 $group_ids = array( 1 ); // Default group. 562 $group_ids[1] = self::factory()->xprofile_group->create(); 563 $group_ids[2] = self::factory()->xprofile_group->create(); 564 $group_ids[3] = self::factory()->xprofile_group->create(); 565 566 $f = self::factory()->xprofile_field->create( array( 567 'field_group_id' => $group_ids[1], 568 ) ); 569 $field = new BP_XProfile_Field( $f ); 570 571 $args = array( 572 'hide_empty_groups' => true, 573 ); 574 575 // Prime cache. 576 $found = BP_XProfile_Group::get_group_ids( $args ); 577 $this->assertContains( $group_ids[1], $found ); 578 579 $field->delete(); 580 581 $found = BP_XProfile_Group::get_group_ids( $args ); 582 $this->assertNotContains( $group_ids[1], $found ); 583 } 584 585 /** 586 * @group BP7435 587 * @group cache 588 */ 589 public function test_group_field_ids_query_cache() { 590 global $wpdb; 591 592 $group_id = self::factory()->xprofile_group->create(); 593 594 $f = self::factory()->xprofile_field->create( array( 595 'field_group_id' => $group_id, 596 ) ); 597 $field = new BP_XProfile_Field( $f ); 598 599 // Prime cache. 600 $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) ); 601 $this->assertContains( $f, $found ); 602 603 $num_queries = $wpdb->num_queries; 604 605 $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) ); 606 $this->assertContains( $f, $found ); 607 $this->assertSame( $num_queries, $wpdb->num_queries ); 608 } 609 610 /** 611 * @group BP7435 612 * @group cache 613 */ 614 public function test_group_field_ids_query_cache_should_be_busted_on_field_save() { 615 global $wpdb; 616 617 $group_id = self::factory()->xprofile_group->create(); 618 619 $f = self::factory()->xprofile_field->create( array( 620 'field_group_id' => $group_id, 621 ) ); 622 $field = new BP_XProfile_Field( $f ); 623 624 // Prime cache. 625 $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) ); 626 $this->assertContains( $f, $found ); 627 628 $field->save(); 629 $num_queries = $wpdb->num_queries; 630 631 $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) ); 632 $this->assertContains( $f, $found ); 633 $this->assertNotSame( $num_queries, $wpdb->num_queries ); 634 } 635 636 /** 637 * @group BP7435 638 * @group cache 639 */ 640 public function test_group_field_ids_query_cache_should_be_busted_on_field_delete() { 641 $group_id = self::factory()->xprofile_group->create(); 642 643 $f = self::factory()->xprofile_field->create( array( 644 'field_group_id' => $group_id, 645 ) ); 646 $field = new BP_XProfile_Field( $f ); 647 648 // Prime cache. 649 $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) ); 650 $this->assertContains( $f, $found ); 651 652 $field->delete(); 653 654 $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) ); 655 $this->assertNotContains( $f, $found ); 656 } 444 657 }
Note: See TracChangeset
for help on using the changeset viewer.