Skip to:
Content

BuddyPress.org

Changeset 9177


Ignore:
Timestamp:
11/25/2014 03:33:45 PM (7 years ago)
Author:
boonebgorges
Message:

Improve matching between active component status and directory page status.

  • When a directory page is deleted, delete the corresponding entry from bp_pages. This ensures that the admin will see the admin_notice that a page mapping is missing.
  • When pulling up page mappings with bp_core_get_directory_page_ids(), remove entries corresponding to deleted pages and deactivated components.

Props Mamaduka.
Fixes #5681.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-functions.php

    r9012 r9177  
    382382        foreach( (array) $page_ids as $component_name => $page_id ) {
    383383            if ( empty( $component_name ) || empty( $page_id ) ) {
    384                 unset( $page_ids[$component_name] );
     384                unset( $page_ids[ $component_name ] );
     385            }
     386
     387            if ( ! bp_is_active( $component_name ) || 'trash' == get_post_status( $page_id ) ) {
     388                unset( $page_ids[ $component_name ] );
    385389            }
    386390        }
     
    566570    }
    567571}
     572
     573/**
     574 * Remove the entry from bp_pages when the corresponding WP page is deleted.
     575 *
     576 * @since BuddyPress (2.2.0)
     577 *
     578 * @param int $post_id Post ID.
     579 */
     580function bp_core_on_directory_page_delete( $post_id ) {
     581    $page_ids = bp_core_get_directory_page_ids();
     582    $component_name = array_search( $post_id, $page_ids );
     583
     584    if ( ! empty( $component_name ) ) {
     585        unset( $page_ids[ $component_name ] );
     586    }
     587
     588    bp_core_update_directory_page_ids( $page_ids );
     589}
     590add_action( 'delete_post', 'bp_core_on_directory_page_delete' );
    568591
    569592/**
  • trunk/tests/phpunit/testcases/core/functions.php

    r8958 r9177  
    282282
    283283    /**
     284     * @group bp_core_get_directory_page_ids
     285     */
     286    public function test_bp_core_get_directory_page_ids_on_directory_page_to_trash() {
     287        $old_page_ids = bp_core_get_directory_page_ids();
     288
     289        // Grab the and remove the first page.
     290        foreach ( $old_page_ids as $component => $page_id ) {
     291            $p = $page_id;
     292            unset( $old_page_ids[ $component ] );
     293            break;
     294        }
     295
     296        // Move page to trash.
     297        wp_delete_post( $p, false );
     298
     299        $new_page_ids = bp_core_get_directory_page_ids();
     300
     301        $this->assertEquals( $old_page_ids, $new_page_ids );
     302    }
     303
     304    /**
     305     * @group bp_core_get_directory_page_ids
     306     */
     307    public function test_bp_core_get_directory_page_ids_on_directory_page_delete() {
     308        $old_page_ids = bp_core_get_directory_page_ids();
     309
     310        // Grab the and remove the first page.
     311        foreach ( $old_page_ids as $component => $page_id ) {
     312            $p = $page_id;
     313            unset( $old_page_ids[ $component ] );
     314            break;
     315        }
     316
     317        // Force delete page.
     318        wp_delete_post( $p, true );
     319
     320        $new_page_ids = bp_core_get_directory_page_ids();
     321
     322        $this->assertEquals( $old_page_ids, $new_page_ids );
     323    }
     324
     325    /**
     326     * @group bp_core_get_directory_page_ids
     327     */
     328    public function test_bp_core_get_directory_page_ids_on_non_directory_page_delete() {
     329        $old_page_ids = bp_core_get_directory_page_ids();
     330
     331        $p = $this->factory->post->create( array(
     332            'post_status' => 'publish',
     333            'post_type' => 'page',
     334        ) );
     335
     336        // Force delete page.
     337        wp_delete_post( $p, true );
     338
     339        $new_page_ids = bp_core_get_directory_page_ids();
     340
     341        $this->assertEquals( $old_page_ids, $new_page_ids );
     342    }
     343
     344    /**
     345     * @group bp_core_get_directory_page_ids
     346     */
     347    public function test_bp_core_get_directory_page_ids_non_active_component() {
     348        $old_page_ids = bp_core_get_directory_page_ids();
     349        $bp = buddypress();
     350
     351        // Grab the and remove the first page.
     352        foreach ( $old_page_ids as $component => $page_id ) {
     353            $p = $page_id;
     354            $c = $component;
     355            unset( $old_page_ids[ $component ] );
     356            break;
     357        }
     358
     359        // Deactivate component.
     360        unset( $bp->active_components[ $c ] );
     361
     362        $new_page_ids = bp_core_get_directory_page_ids();
     363
     364        // Restore components.
     365        $bp->active_components[ $c ] = 1;
     366
     367        $this->assertEquals( $old_page_ids, $new_page_ids );
     368    }
     369
     370    /**
    284371     * @group bp_core_get_directory_pages
    285372     */
Note: See TracChangeset for help on using the changeset viewer.