Skip to:
Content

BuddyPress.org

Ticket #8291: 8291-2.patch

File 8291-2.patch, 9.9 KB (added by imath, 5 years ago)
  • src/bp-core/admin/bp-core-admin-functions.php

    diff --git src/bp-core/admin/bp-core-admin-functions.php src/bp-core/admin/bp-core-admin-functions.php
    index 5bb10b656..a7f7d8a0b 100644
    function bp_admin_wp_nav_menu_meta_box() { 
    755755                return;
    756756        }
    757757
    758         add_meta_box( 'add-buddypress-nav-menu', __( 'BuddyPress', 'buddypress' ), 'bp_admin_do_wp_nav_menu_meta_box', 'nav-menus', 'side', 'default' );
     758        add_meta_box( 'add-buddypress-nav-menu', __( 'BuddyPress Member', 'buddypress' ), 'bp_admin_do_wp_nav_menu_meta_box', 'nav-menus', 'side', 'default' );
    759759
    760760        add_action( 'admin_print_footer_scripts', 'bp_admin_wp_nav_menu_restrict_items' );
    761761}
    762762
     763/**
     764 * BP Member nav menu filter to short-circuit WP's query.
     765 *
     766 * @since 7.0.0
     767 *
     768 * @param null     $null     A null value.
     769 * @param WP_Query $wp_query The WP_Query instance (passed by reference).
     770 * @return array   The BP Member nav items to short-circuit WP's query,
     771 */
     772function bp_admin_get_wp_nav_menu_items( $null = null, $wp_query ) {
     773        if ( isset( $wp_query->query['orderby'], $wp_query->query['order'] ) && 'post_date' === $wp_query->query['orderby'] && 'DESC' === $wp_query->query['order'] ) {
     774                return bp_nav_menu_get_loggedin_pages();
     775        } elseif ( isset( $wp_query->query['nopaging'] ) && true === $wp_query->query['nopaging'] ) {
     776                return array_merge( bp_nav_menu_get_loggedin_pages(), bp_nav_menu_get_loggedout_pages() );
     777        }
     778
     779        return bp_nav_menu_get_loggedout_pages();
     780}
     781
    763782/**
    764783 * Build and populate the BuddyPress accordion on Appearance > Menus.
    765784 *
    766785 * @since 1.9.0
     786 * @since 7.0.0 Uses wp_nav_menu_item_post_type_meta_box()
    767787 *
    768788 * @global $nav_menu_selected_id
    769789 */
    770 function bp_admin_do_wp_nav_menu_meta_box() {
     790function bp_admin_do_wp_nav_menu_meta_box( $object = '', $box = array() ) {
    771791        global $nav_menu_selected_id;
    772792
    773         $walker = new BP_Walker_Nav_Menu_Checklist( false );
    774         $args   = array( 'walker' => $walker );
     793        $box['args'] = (object) array(
     794                'name'           => 'bp_nav_menu_item',
     795                '_default_query' => array(),
     796        );
    775797
    776         $post_type_name = 'buddypress';
     798        // Temporarly register a post type.
     799        register_post_type(
     800                'bp_nav_menu_item',
     801                array(
     802                        'label'  => 'BuddyPress',
     803                        'labels' => array(
     804                                'search_items' => __( 'Search BuddyPress member menu items', 'buddypress' ),
     805                                'all_items'    => __( 'All BuddyPress Member menu items', 'buddypress' ),
     806                        ),
     807                        'public' => true,
     808                        'hierarchical' => false,
     809                        'has_archive'  => false,
     810                        'rewrite'      => false,
     811                )
     812        );
    777813
    778         $tabs = array();
     814        // Temporarly override the posts query results.
     815        add_filter( 'posts_pre_query', 'bp_admin_get_wp_nav_menu_items', 10, 2 );
    779816
    780         $tabs['loggedin']['label'] = __( 'Logged-In', 'buddypress' );
    781         $tabs['loggedin']['pages'] = bp_nav_menu_get_loggedin_pages();
     817        ob_start();
     818        wp_nav_menu_item_post_type_meta_box( 'buddypress', $box );
     819        $output = ob_get_clean();
    782820
    783         $tabs['loggedout']['label'] = __( 'Logged-Out', 'buddypress' );
    784         $tabs['loggedout']['pages'] = bp_nav_menu_get_loggedout_pages();
     821        $get_bp_items = new WP_Query;
     822        $all_bp_items = $get_bp_items->query( array( 'nopaging' => true ) );
     823        $walker       = new Walker_Nav_Menu_Checklist();
     824        $all_bp_tabs  = sprintf(
     825                '<div id="bp_nav_menu_item-all" class="tabs-panel tabs-panel-view-all tabs-panel-inactive" role="region" aria-label="%1$s" tabindex="0">
     826                        <ul id="bp_nav_menu_itemchecklist" data-wp-lists="list:bp_nav_menu_item" class="categorychecklist form-no-clear">
     827                                %2$s
     828                        </ul>
     829                </div>',
     830                esc_html__( 'All BuddyPress Member menu items', 'buddypress' ),
     831                walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $all_bp_items ), 0, (object) array( 'walker' => $walker ) )
     832        );
    785833
    786         ?>
     834        // Remove temporary post type and filter.
     835        unregister_post_type( 'bp_nav_menu_item' );
     836        remove_filter( 'posts_pre_query', 'bp_admin_get_wp_nav_menu_items', 10, 2 );
    787837
    788         <div id="buddypress-menu" class="posttypediv">
    789                 <h4><?php _e( 'Logged-In', 'buddypress' ); ?></h4>
    790                 <p><?php _e( '<em>Logged-In</em> links are relative to the current user, and are not visible to visitors who are not logged in.', 'buddypress' ); ?></p>
     838        $tab_name    = 'bp_nav_menu_item-tab';
     839        $current_tab = 'logged-in';
     840        $tabs        = array(
     841                'logged-in'  => __( 'Logged-In', 'buddypress' ),
     842                'logged-out' => __( 'Logged-Out', 'buddypress' ),
     843                'all'        => __( 'All', 'buddypress' ),
     844        );
     845        $tab_urls    = array(
     846                'all'        => '',
     847                'logged-in'  => '',
     848                'logged-out' => '',
     849        );
    791850
    792                 <div id="tabs-panel-posttype-<?php echo $post_type_name; ?>-loggedin" class="tabs-panel tabs-panel-active">
    793                         <ul id="buddypress-menu-checklist-loggedin" class="categorychecklist form-no-clear">
    794                                 <?php echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $tabs['loggedin']['pages'] ), 0, (object) $args ); ?>
    795                         </ul>
    796                 </div>
     851        if ( isset( $_REQUEST[ $tab_name ] ) && in_array( $_REQUEST[ $tab_name ], array_keys( $tabs ), true ) ) {
     852                $current_tab = $_REQUEST[ $tab_name ];
     853        }
    797854
    798                 <h4><?php _e( 'Logged-Out', 'buddypress' ); ?></h4>
    799                 <p><?php _e( '<em>Logged-Out</em> links are not visible to users who are logged in.', 'buddypress' ); ?></p>
     855        $removed_args = array(
     856                'action',
     857                'customlink-tab',
     858                'edit-menu-item',
     859                'menu-item',
     860                'page-tab',
     861                '_wpnonce',
     862        );
    800863
    801                 <div id="tabs-panel-posttype-<?php echo $post_type_name; ?>-loggedout" class="tabs-panel tabs-panel-active">
    802                         <ul id="buddypress-menu-checklist-loggedout" class="categorychecklist form-no-clear">
    803                                 <?php echo walk_nav_menu_tree( array_map( 'wp_setup_nav_menu_item', $tabs['loggedout']['pages'] ), 0, (object) $args ); ?>
    804                         </ul>
    805                 </div>
     864        if ( $nav_menu_selected_id ) {
     865                $tab_urls['all']        = esc_url( add_query_arg( $tab_name, 'all', remove_query_arg( $removed_args ) ) );
     866                $tab_urls['logged-in']  = esc_url( add_query_arg( $tab_name, 'logged-in', remove_query_arg( $removed_args ) ) );
     867                $tab_urls['logged-out'] = esc_url( add_query_arg( $tab_name, 'logged-out', remove_query_arg( $removed_args ) ) );
     868        }
     869
     870        $bp_tabs_nav = '';
     871        foreach ( $tabs as $tab => $tab_text ) {
     872                $class    = '';
     873                $datatype = 'bp_nav_menu_item-' . $tab;
     874
     875                if ( $current_tab === $tab ) {
     876                        $class = ' class="tabs"';
     877                }
     878
     879                if ( 'all' !== $tab ) {
     880                        $datatype = 'tabs-panel-posttype-bp_nav_menu_item-' . $tab;
     881                }
    806882
    807                 <?php
    808                 $removed_args = array(
    809                         'action',
    810                         'customlink-tab',
    811                         'edit-menu-item',
    812                         'menu-item',
    813                         'page-tab',
    814                         '_wpnonce',
     883                $bp_tabs_nav .= sprintf(
     884                        '<li%1$s>
     885                                <a class="nav-tab-link" data-type="%2$s" href="%3$s">
     886                                        %4$s
     887                                </a>
     888                        </li>',
     889                        $class,
     890                        $datatype,
     891                        esc_url( $tab_urls[ $tab ] ) . '#' . $datatype,
     892                        esc_html( $tab_text )
    815893                );
    816                 ?>
     894        }
    817895
    818                 <p class="button-controls">
    819                         <span class="list-controls">
    820                                 <a href="
    821                                 <?php
    822                                 echo esc_url(
    823                                         add_query_arg(
    824                                                 array(
    825                                                         $post_type_name . '-tab' => 'all',
    826                                                         'selectall'              => 1,
    827                                                 ),
    828                                                 remove_query_arg( $removed_args )
    829                                         )
    830                                 );
    831                                 ?>
    832                                 #buddypress-menu" class="select-all"><?php _e( 'Select All', 'buddypress' ); ?></a>
    833                         </span>
    834                         <span class="add-to-menu">
    835                                 <input type="submit"
    836                                 <?php
    837                                 if ( function_exists( 'wp_nav_menu_disabled_check' ) ) :
    838                                         wp_nav_menu_disabled_check( $nav_menu_selected_id );
    839 endif;
    840                                 ?>
    841                                  class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e( 'Add to Menu', 'buddypress' ); ?>" name="add-custom-menu-item" id="submit-buddypress-menu" />
    842                                 <span class="spinner"></span>
    843                         </span>
    844                 </p>
    845         </div><!-- /#buddypress-menu -->
     896        $output = str_replace(
     897                array(
     898                        'tabs-panel-posttype-bp_nav_menu_item-most-recent',
     899                        'bp_nav_menu_itemchecklist-most-recent',
     900                        'bp_nav_menu_item-all',
     901                        'bp_nav_menu_itemchecklist',
     902                ),
     903                array(
     904                        'tabs-panel-posttype-bp_nav_menu_item-logged-in',
     905                        'bp_nav_menu_itemchecklist-logged-in',
     906                        'tabs-panel-posttype-bp_nav_menu_item-logged-out',
     907                        'bp_nav_menu_itemchecklist-logged-out',
     908                ),
     909                $output
     910        );
    846911
    847         <?php
     912        preg_match( '/\<ul\sid=\"posttype-bp_nav_menu_item-tabs\"[^>]*>(.*?)\<\/ul\>\<!-- \.posttype-tabs --\>/s', $output, $tabs_nav );
     913
     914        if ( isset( $tabs_nav[1] ) ) {
     915                $output = str_replace( $tabs_nav[1], $bp_tabs_nav, $output );
     916        }
     917
     918        echo preg_replace( '/\<div\sclass=\".*\"\sid=\"tabs-panel-posttype-bp_nav_menu_item-search\"[^>]*>(.*?)\<\/div\>/s', $all_bp_tabs, $output );
    848919}
    849920
    850921/**
  • src/bp-core/bp-core-filters.php

    diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
    index d84cdb1f7..ec84a6990 100644
    add_filter( 'document_title_parts', 'bp_modify_document_title_parts', 20, 1 ); 
    691691 */
    692692function bp_setup_nav_menu_item( $menu_item ) {
    693693        if ( is_admin() ) {
     694                if ( 'bp_nav_menu_item' === $menu_item->object ) {
     695                        $menu_item->type = 'custom';
     696                        $menu_item->url  = $menu_item->guid;
     697
     698                        if ( ! in_array( array( 'bp-menu', 'bp-'. $menu_item->post_excerpt .'-nav' ), $menu_item->classes ) ) {
     699                                $menu_item->classes[] = 'bp-menu';
     700                                $menu_item->classes[] = 'bp-'. $menu_item->post_excerpt .'-nav';
     701                        }
     702                }
     703
    694704                return $menu_item;
    695705        }
    696706
  • src/bp-core/bp-core-functions.php

    diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
    index 4fd977039..e66c78188 100644
    function bp_nav_menu_get_loggedin_pages() { 
    25802580                        'post_author'    => 0,
    25812581                        'post_date'      => 0,
    25822582                        'post_excerpt'   => $bp_item['slug'],
    2583                         'post_type'      => 'page',
     2583                        'post_type'      => 'bp_nav_menu_item',
    25842584                        'post_status'    => 'publish',
    25852585                        'comment_status' => 'closed',
    25862586                        'guid'           => $bp_item['link']
    function bp_nav_menu_get_loggedout_pages() { 
    26552655                        'post_author'    => 0,
    26562656                        'post_date'      => 0,
    26572657                        'post_excerpt'   => $bp_item['slug'],
    2658                         'post_type'      => 'page',
     2658                        'post_type'      => 'bp_nav_menu_item',
    26592659                        'post_status'    => 'publish',
    26602660                        'comment_status' => 'closed',
    26612661                        'guid'           => $bp_item['link']