Skip to:
Content

BuddyPress.org

Changeset 13450


Ignore:
Timestamp:
04/12/2023 10:12:37 PM (3 years ago)
Author:
imath
Message:

Administration: add a new settings tab to manage slugs customization

Compared to [13442], change the logic of Components user navigation
generation by introducing a BP_Component::register_nav() method to
globalize the nav items early (ie: the registration step) and make them
available for the new settings tab to manage slugs customization.

After a second thought, the BP_Component::setup_nav() should remain the
navigation generation step instead of playing the registration role. This
will maximize backward compatibility & third party plugins wishing their
slugs to be customizable will need to "opt-in" for BP Rewrites using the
BP_Component::register_nav() method.

This first version of the URLs settings tab does not handle slugs
customization yet, its first usage is to make sure all BP Components user
navigation slugs were registered & to put the Accordion UI in place.

Props r-a-y, johnjamesjacoby, boonebgorges

Closes https://github.com/buddypress/buddypress/pull/84
See #4954

Location:
trunk/src
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-activity/classes/class-bp-activity-component.php

    r13441 r13450  
    239239
    240240        /**
    241          * Set up component navigation.
    242          *
    243          * @since 1.5.0
    244          *
    245          * @see BP_Component::setup_nav() for a description of arguments.
    246          *
    247          * @param array $main_nav Optional. See BP_Component::setup_nav() for description.
    248          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for description.
    249          */
    250         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    251 
    252                 // Stop if there is no user displayed or logged in.
    253                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    254                         return;
    255                 }
    256 
     241         * Register component navigation.
     242         *
     243         * @since 12.0.0
     244         *
     245         * @see `BP_Component::register_nav()` for a description of arguments.
     246         *
     247         * @param array $main_nav Optional. See `BP_Component::register_nav()` for description.
     248         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for description.
     249         */
     250        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
    257251                $slug = bp_get_activity_slug();
    258252
     
    277271
    278272                // Check @mentions.
    279                 if ( bp_activity_do_mentions() ) {
    280                         $sub_nav[] = array(
    281                                 'name'            => _x( 'Mentions', 'Profile activity screen sub nav', 'buddypress' ),
    282                                 'slug'            => 'mentions',
    283                                 'parent_slug'     => $slug,
    284                                 'screen_function' => 'bp_activity_screen_mentions',
    285                                 'position'        => 20,
    286                                 'item_css_id'     => 'activity-mentions'
    287                         );
    288                 }
     273                $sub_nav[] = array(
     274                        'name'            => _x( 'Mentions', 'Profile activity screen sub nav', 'buddypress' ),
     275                        'slug'            => 'mentions',
     276                        'parent_slug'     => $slug,
     277                        'screen_function' => 'bp_activity_screen_mentions',
     278                        'position'        => 20,
     279                        'item_css_id'     => 'activity-mentions',
     280                        'generate'        => bp_activity_do_mentions(),
     281                );
    289282
    290283                // Favorite activity items.
    291                 if ( bp_activity_can_favorite() ) {
    292                         $sub_nav[] = array(
    293                                 'name'            => _x( 'Favorites', 'Profile activity screen sub nav', 'buddypress' ),
    294                                 'slug'            => 'favorites',
    295                                 'parent_slug'     => $slug,
    296                                 'screen_function' => 'bp_activity_screen_favorites',
    297                                 'position'        => 30,
    298                                 'item_css_id'     => 'activity-favs'
    299                         );
    300                 }
     284                $sub_nav[] = array(
     285                        'name'            => _x( 'Favorites', 'Profile activity screen sub nav', 'buddypress' ),
     286                        'slug'            => 'favorites',
     287                        'parent_slug'     => $slug,
     288                        'screen_function' => 'bp_activity_screen_favorites',
     289                        'position'        => 30,
     290                        'item_css_id'     => 'activity-favs',
     291                        'generate'        => bp_activity_can_favorite(),
     292                );
    301293
    302294                // Additional menu if friends is active.
     
    308300                                'screen_function' => 'bp_activity_screen_friends',
    309301                                'position'        => 40,
    310                                 'item_css_id'     => 'activity-friends'
    311                         ) ;
     302                                'item_css_id'     => 'activity-friends',
     303                        );
    312304                }
    313305
     
    324316                }
    325317
    326                 parent::setup_nav( $main_nav, $sub_nav );
     318                parent::register_nav( $main_nav, $sub_nav );
    327319        }
    328320
  • trunk/src/bp-blogs/classes/class-bp-blogs-component.php

    r13442 r13450  
    199199
    200200        /**
    201          * Set up component navigation for bp-blogs.
    202          *
    203          * @see BP_Component::setup_nav() for a description of arguments.
    204          *
    205          * @param array $main_nav Optional. See BP_Component::setup_nav() for
     201         * Register component navigation.
     202         *
     203         * @since 12.0.0
     204         *
     205         * @see `BP_Component::register_nav()` for a description of arguments.
     206         *
     207         * @param array $main_nav Optional. See `BP_Component::register_nav()` for
    206208         *                        description.
    207          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for
     209         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
    208210         *                        description.
    209211         */
    210         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    211 
     212        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
    212213                /**
    213214                 * Blog/post/comment menus should not appear on single WordPress setups.
     
    219220                }
    220221
    221                 // Stop if there is no user displayed or logged in.
    222                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    223                         return;
    224                 }
    225 
    226222                $slug = bp_get_blogs_slug();
    227223
    228                 // Add 'Sites' to the main navigation.
    229                 $count    = (int) bp_get_total_blog_count_for_user();
    230                 $class    = ( 0 === $count ) ? 'no-count' : 'count';
    231                 $nav_text = sprintf(
    232                         /* translators: %s: Site count for the current user */
    233                         __( 'Sites %s', 'buddypress' ),
    234                         sprintf(
    235                                 '<span class="%s">%s</span>',
    236                                 esc_attr( $class ),
    237                                 esc_html( $count )
    238                         )
    239                 );
    240224                $main_nav = array(
    241                         'name'                => $nav_text,
     225                        'name'                => __( 'Sites', 'buddypress' ),
    242226                        'slug'                => $slug,
    243227                        'position'            => 30,
     
    256240
    257241                // Setup navigation.
     242                parent::register_nav( $main_nav, $sub_nav );
     243        }
     244
     245        /**
     246         * Set up component navigation.
     247         *
     248         * @since 1.5.0
     249         * @since 12.0.0 Used to customize the main navigation name.
     250         *
     251         * @see `BP_Component::setup_nav()` for a description of arguments.
     252         *
     253         * @param array $main_nav Optional. See `BP_Component::setup_nav()` for
     254         *                        description.
     255         * @param array $sub_nav  Optional. See `BP_Component::setup_nav()` for
     256         *                        description.
     257         */
     258        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
     259                // Only grab count if we're on a user page.
     260                if ( is_multisite() && bp_is_user() && isset( $this->main_nav['name'] ) ) {
     261                        // Add the number of sites to the main nav.
     262                        $count                  = (int) bp_get_total_blog_count_for_user();
     263                        $class                  = ( 0 === $count ) ? 'no-count' : 'count';
     264                        $this->main_nav['name'] = sprintf(
     265                                /* translators: %s: Site count for the displayed user */
     266                                __( 'Sites %s', 'buddypress' ),
     267                                sprintf(
     268                                        '<span class="%s">%s</span>',
     269                                        esc_attr( $class ),
     270                                        bp_core_number_format( $count )
     271                                )
     272                        );
     273                }
     274
    258275                parent::setup_nav( $main_nav, $sub_nav );
    259276        }
  • trunk/src/bp-core/admin/bp-core-admin-functions.php

    r13449 r13450  
    489489                        'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components' ), 'admin.php' ) ),
    490490                        'name' => __( 'Components', 'buddypress' ),
     491                ),
     492                '1' => array(
     493                        'id'   => 'bp-rewrites',
     494                        'href' => bp_get_admin_url( add_query_arg( array( 'page' => 'bp-rewrites' ), 'admin.php' ) ),
     495                        'name' => __( 'URLs', 'buddypress' ),
    491496                ),
    492497                '2' => array(
  • trunk/src/bp-core/bp-core-caps.php

    r13405 r13450  
    305305
    306306/**
     307 * Callback function to inform whether current user can moderate the community.
     308 *
     309 * @since 12.0.0
     310 *
     311 * @return boolean True if current user can moderate the community. False otherwise.
     312 */
     313function bp_current_user_can_moderate() {
     314        return bp_current_user_can( 'bp_moderate' );
     315}
     316
     317/**
    307318 * Check whether the specified user has a given capability on a given site.
    308319 *
  • trunk/src/bp-core/classes/class-bp-admin.php

    r13431 r13450  
    143143         */
    144144        private function includes() {
    145                 require( $this->admin_dir . 'bp-core-admin-actions.php'    );
    146                 require( $this->admin_dir . 'bp-core-admin-settings.php'   );
    147                 require( $this->admin_dir . 'bp-core-admin-functions.php'  );
    148                 require( $this->admin_dir . 'bp-core-admin-components.php' );
    149                 require( $this->admin_dir . 'bp-core-admin-tools.php'      );
    150                 require( $this->admin_dir . 'bp-core-admin-optouts.php'    );
     145                require $this->admin_dir . 'bp-core-admin-actions.php';
     146                require $this->admin_dir . 'bp-core-admin-settings.php';
     147                require $this->admin_dir . 'bp-core-admin-functions.php';
     148                require $this->admin_dir . 'bp-core-admin-components.php';
     149                require $this->admin_dir . 'bp-core-admin-rewrites.php';
     150                require $this->admin_dir . 'bp-core-admin-tools.php';
     151                require $this->admin_dir . 'bp-core-admin-optouts.php';
    151152        }
    152153
     
    274275                $this->submenu_pages['settings']['bp-components'] = $bp_components_page;
    275276                $hooks[]                                          = $bp_components_page;
     277
     278                $bp_rewrite_settings_page = add_submenu_page(
     279                        $this->settings_page,
     280                        __( 'BuddyPress URLs', 'buddypress' ),
     281                        __( 'BuddyPress URLs', 'buddypress' ),
     282                        $this->capability,
     283                        'bp-rewrites',
     284                        'bp_core_admin_rewrites_settings'
     285                );
     286
     287                $this->submenu_pages['settings']['bp-rewrites'] = $bp_rewrite_settings_page;
     288                $hooks[]                                        = $bp_rewrite_settings_page;
    276289
    277290                $bp_settings_page = add_submenu_page(
     
    375388                foreach( $hooks as $hook ) {
    376389                        add_action( "admin_head-$hook", 'bp_core_modify_admin_menu_highlight' );
     390
     391                        if ( 'settings_page_bp-rewrites' === $hook ) {
     392                                add_action( "load-{$hook}", 'bp_core_admin_rewrites_load' );
     393                        }
    377394                }
    378395
     
    614631
    615632                // Settings pages.
    616                 remove_submenu_page( $this->settings_page, 'bp-settings'      );
    617                 remove_submenu_page( $this->settings_page, 'bp-credits'       );
     633                remove_submenu_page( $this->settings_page, 'bp-rewrites' );
     634                remove_submenu_page( $this->settings_page, 'bp-settings' );
     635                remove_submenu_page( $this->settings_page, 'bp-credits'  );
    618636
    619637                // Network Admin Tools.
     
    13971415                                ),
    13981416                        ),
     1417
     1418                        // 12.0
     1419                        'bp-rewrites-ui' => array(
     1420                                'file' => "{$url}rewrites-ui.js",
     1421                                'dependencies' => array(),
     1422                                'footer'       => true,
     1423                        ),
    13991424                ) );
    14001425
  • trunk/src/bp-core/classes/class-bp-component.php

    r13442 r13450  
    544544                add_action( 'bp_late_include',           array( $this, 'late_includes'          ) );
    545545
     546                // Generate navigation.
     547                add_action( 'bp_setup_nav',              array( $this, 'register_nav'           ),  7 );
     548
    546549                // Setup navigation.
    547550                add_action( 'bp_setup_nav',              array( $this, 'setup_nav'              ),  9 );
    548 
    549                 // Generate navigation.
    550                 add_action( 'bp_setup_nav',              array( $this, 'generate_nav'           ), 10, 0 );
    551551
    552552                // Setup WP Toolbar menus.
     
    614614
    615615        /**
    616          * Set up component navigation.
    617          *
    618          * @since 1.5.0
    619          * @since 12.0.0 Uses `BP_Component::$main_nav` && `BP_Component::$sub_nav` to globalize nav items.
     616         * Registers nav items globalizing them into `BP_Component::$main_nav` & `BP_Component::$sub_nav` properties.
     617         *
     618         * @since 12.0.0
    620619         *
    621620         * @param array $main_nav Optional. Passed directly to bp_core_new_nav_item().
     
    625624         *                        function for a description.
    626625         */
    627         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
     626        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
    628627                if ( isset( $main_nav['slug'] ) ) {
    629628                        // Always set the component ID.
     
    658657
    659658        /**
    660          * Generate component navigation using the nav/subnav set up in `BP_Component::setup_nav()`.
    661          *
    662          * @since 12.0.0
    663          *
    664          * @see bp_core_new_nav_item() For a description of the $main_nav
    665          *      parameter formatting.
    666          * @see bp_core_new_subnav_item() For a description of how each item
    667          *      in the $sub_nav parameter array should be formatted.
    668          */
    669         public function generate_nav() {
    670                 // No sub nav items without a main nav item.
    671                 if ( $this->main_nav ) {
    672                         bp_core_new_nav_item( $this->main_nav, 'members' );
     659         * Set up component navigation.
     660         *
     661         * @since 1.5.0
     662         * @since 12.0.0 Uses the registered navigations to generate it.
     663         *
     664         * @param array $main_nav Optional. Passed directly to bp_core_new_nav_item().
     665         *                        See that function for a description.
     666         * @param array $sub_nav  Optional. Multidimensional array, each item in
     667         *                        which is passed to bp_core_new_subnav_item(). See that
     668         *                        function for a description.
     669         */
     670        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
     671                // Use the registered navigations if available.
     672                if ( empty( $main_nav ) && $this->main_nav ) {
     673                        // Don't generate navigation if there's no member.
     674                        if ( ! is_user_logged_in() && ! bp_is_user() ) {
     675                                return;
     676                        }
     677
     678                        $generate = true;
     679                        if ( isset( $this->main_nav['generate'] ) ) {
     680                                $generate = is_callable( $this->main_nav['generate'] ) ? call_user_func( $this->main_nav['generate'] ) : (bool) $this->main_nav['generate'];
     681                                unset( $this->main_nav['generate'] );
     682                        }
     683
     684                        if ( bp_displayed_user_has_front_template() ) {
     685                                bp_core_new_nav_item(
     686                                        array(
     687                                                'name'                => _x( 'Home', 'Member Home page', 'buddypress' ),
     688                                                'slug'                => 'front',
     689                                                'position'            => 5,
     690                                                'screen_function'     => 'bp_members_screen_display_profile',
     691                                                'default_subnav_slug' => 'public',
     692                                        ),
     693                                        'members'
     694                                );
     695                        }
     696
     697                        if ( 'xprofile' === $this->id ) {
     698                                $extra_subnavs = wp_list_filter(
     699                                        buddypress()->members->sub_nav,
     700                                        array(
     701                                                'slug'            => 'change-avatar',
     702                                                'screen_function' => 'bp_members_screen_change_cover_image',
     703                                        ),
     704                                        'OR'
     705                                );
     706
     707                                $this->sub_nav = array_merge( $this->sub_nav, $extra_subnavs );
     708                        }
     709
     710                        // No sub nav items without a main nav item.
     711                        if ( $this->main_nav && $generate) {
     712                                if ( isset( $this->main_nav['user_has_access_callback'] ) && is_callable( $this->main_nav['user_has_access_callback'] ) ) {
     713                                        $this->main_nav['show_for_displayed_user'] = call_user_func( $this->main_nav['user_has_access_callback'] );
     714                                        unset( $this->main_nav['user_has_access_callback'] );
     715                                }
     716
     717                                bp_core_new_nav_item( $this->main_nav, 'members' );
     718
     719                                // Sub nav items are not required.
     720                                if ( $this->sub_nav ) {
     721                                        foreach( (array) $this->sub_nav as $nav ) {
     722                                                if ( isset( $nav['user_has_access_callback'] ) && is_callable( $nav['user_has_access_callback'] ) ) {
     723                                                        $nav['user_has_access'] = call_user_func( $nav['user_has_access_callback'] );
     724                                                        unset( $nav['user_has_access_callback'] );
     725                                                }
     726
     727                                                if ( isset( $nav['generate'] ) ) {
     728                                                        if ( is_callable( $nav['generate'] ) ) {
     729                                                                $generate_sub = call_user_func( $nav['generate'] );
     730                                                        } else {
     731                                                                $generate_sub = (bool) $nav['generate'];
     732                                                        }
     733
     734                                                        unset( $nav['generate'] );
     735
     736                                                        if ( ! $generate_sub ) {
     737                                                                continue;
     738                                                        }
     739                                                }
     740
     741                                                bp_core_new_subnav_item( $nav, 'members' );
     742                                        }
     743                                }
     744                        }
     745
     746                        /*
     747                         * If the `$main_nav` is populated, it means a plugin is not registering its navigation using
     748                         * `BP_Component::register_nav()` to enjoy the BP Rewrites API slug customization. Let's simply
     749                         * preverve backward compatibility in this case.
     750                         */
     751                } elseif ( ! empty( $main_nav ) && ! $this->main_nav ) {
     752                        // Always set the component ID.
     753                        $main_nav['component_id'] = $this->id;
     754                        $this->main_nav           = $main_nav;
     755
     756                        bp_core_new_nav_item( $main_nav, 'members' );
    673757
    674758                        // Sub nav items are not required.
    675                         if ( $this->sub_nav ) {
    676                                 foreach( (array) $this->sub_nav as $nav ) {
     759                        if ( ! empty( $sub_nav ) ) {
     760                                $this->sub_nav = $sub_nav;
     761
     762                                foreach( (array) $sub_nav as $nav ) {
    677763                                        bp_core_new_subnav_item( $nav, 'members' );
    678764                                }
  • trunk/src/bp-friends/classes/class-bp-friends-component.php

    r13441 r13450  
    149149
    150150        /**
    151          * Set up component navigation.
    152          *
    153          * @since 1.5.0
    154          *
    155          * @see BP_Component::setup_nav() for a description of arguments.
    156          *
    157          * @param array $main_nav Optional. See BP_Component::setup_nav() for
     151         * Register component navigation.
     152         *
     153         * @since 12.0.0
     154         *
     155         * @see `BP_Component::register_nav()` for a description of arguments.
     156         *
     157         * @param array $main_nav Optional. See `BP_Component::register_nav()` for
    158158         *                        description.
    159          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for
     159         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
    160160         *                        description.
    161161         */
    162         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    163 
    164                 // Stop if there is no user displayed or logged in.
    165                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    166                         return;
    167                 }
    168 
    169                 $access = bp_core_can_edit_settings();
     162        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
    170163                $slug   = bp_get_friends_slug();
    171164
    172                 // Add 'Friends' to the main navigation.
    173                 $count = friends_get_total_friend_count();
    174                 $class = ( 0 === $count ) ? 'no-count' : 'count';
    175 
    176                 $main_nav_name = sprintf(
    177                         /* translators: %s: Friend count for the current user */
    178                         __( 'Friends %s', 'buddypress' ),
    179                         sprintf(
    180                                 '<span class="%s">%s</span>',
    181                                 esc_attr( $class ),
    182                                 esc_html( $count )
    183                         )
    184                 );
    185 
    186165                $main_nav = array(
    187                         'name'                => $main_nav_name,
     166                        'name'                => __( 'Friends', 'buddypress' ),
    188167                        'slug'                => $slug,
    189168                        'position'            => 60,
     
    204183
    205184                $sub_nav[] = array(
    206                         'name'            => _x( 'Requests', 'Friends screen sub nav', 'buddypress' ),
    207                         'slug'            => 'requests',
    208                         'parent_slug'     => $slug,
    209                         'screen_function' => 'friends_screen_requests',
    210                         'position'        => 20,
    211                         'user_has_access' => $access,
    212                 );
     185                        'name'                     => _x( 'Requests', 'Friends screen sub nav', 'buddypress' ),
     186                        'slug'                     => 'requests',
     187                        'parent_slug'              => $slug,
     188                        'screen_function'          => 'friends_screen_requests',
     189                        'position'                 => 20,
     190                        'user_has_access'          => false,
     191                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     192                );
     193
     194                parent::register_nav( $main_nav, $sub_nav );
     195        }
     196
     197        /**
     198         * Set up component navigation.
     199         *
     200         * @since 1.5.0
     201         *
     202         * @see `BP_Component::setup_nav()` for a description of arguments.
     203         *
     204         * @param array $main_nav Optional. See `BP_Component::setup_nav()` for
     205         *                        description.
     206         * @param array $sub_nav  Optional. See `BP_Component::setup_nav()` for
     207         *                        description.
     208         */
     209        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
     210                // Only grab count if we're on a user page.
     211                if ( bp_is_user() && isset( $this->main_nav['name'] ) ) {
     212                        // Add 'Friends' to the main navigation.
     213                        $count                  = friends_get_total_friend_count();
     214                        $class                  = ( 0 === $count ) ? 'no-count' : 'count';
     215                        $this->main_nav['name'] = sprintf(
     216                                /* translators: %s: Friend count for the current user */
     217                                __( 'Friends %s', 'buddypress' ),
     218                                sprintf(
     219                                        '<span class="%s">%s</span>',
     220                                        esc_attr( $class ),
     221                                        esc_html( $count )
     222                                )
     223                        );
     224                }
    213225
    214226                parent::setup_nav( $main_nav, $sub_nav );
  • trunk/src/bp-groups/classes/class-bp-groups-component.php

    r13448 r13450  
    3434         */
    3535        public $current_group;
    36 
    37         /**
    38          * Default group extension.
    39          *
    40          * @since 1.6.0
    41          * @todo Is this used anywhere? Is this a duplicate of $default_extension?
    42          * @var string
    43          */
    44         var $default_component;
    4536
    4637        /**
     
    564555
    565556        /**
     557         * Register component navigation.
     558         *
     559         * @since 12.0.0
     560         *
     561         * @see `BP_Component::register_nav()` for a description of arguments.
     562         *
     563         * @param array $main_nav Optional. See `BP_Component::register_nav()` for description.
     564         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for description.
     565         */
     566        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
     567                $slug = bp_get_groups_slug();
     568
     569                // Add 'Groups' to the main navigation.
     570                $main_nav = array(
     571                        'name'                => _x( 'Groups', 'Group screen nav without counter', 'buddypress' ),
     572                        'slug'                => $slug,
     573                        'position'            => 70,
     574                        'screen_function'     => 'groups_screen_my_groups',
     575                        'default_subnav_slug' => 'my-groups',
     576                        'item_css_id'         => $this->id
     577                );
     578
     579                // Add the My Groups nav item.
     580                $sub_nav[] = array(
     581                        'name'            => __( 'Memberships', 'buddypress' ),
     582                        'slug'            => 'my-groups',
     583                        'parent_slug'     => $slug,
     584                        'screen_function' => 'groups_screen_my_groups',
     585                        'position'        => 10,
     586                        'item_css_id'     => 'groups-my-groups'
     587                );
     588
     589                if ( bp_is_active( 'groups', 'invitations' ) ) {
     590                        // Add the Group Invites nav item.
     591                        $sub_nav[] = array(
     592                                'name'                     => __( 'Invitations', 'buddypress' ),
     593                                'slug'                     => 'invites',
     594                                'parent_slug'              => $slug,
     595                                'screen_function'          => 'groups_screen_group_invites',
     596                                'position'                 => 30,
     597                                'user_has_access'          => false,
     598                                'user_has_access_callback' => 'bp_core_can_edit_settings',
     599                        );
     600                }
     601
     602                parent::register_nav( $main_nav, $sub_nav );
     603        }
     604
     605        /**
    566606         * Set up component navigation.
    567607         *
    568608         * @since 1.5.0
    569          *
    570          * @see BP_Component::setup_nav() for a description of arguments.
    571          *
    572          * @param array $main_nav Optional. See BP_Component::setup_nav() for description.
    573          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for description.
     609         * @since 12.0.0 Used to customize the main navigation name and set
     610         *               a Groups single item navigation.
     611         *
     612         * @see `BP_Component::setup_nav()` for a description of arguments.
     613         *
     614         * @param array $main_nav Optional. See `BP_Component::setup_nav()` for
     615         *                        description.
     616         * @param array $sub_nav  Optional. See `BP_Component::setup_nav()` for
     617         *                        description.
    574618         */
    575619        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    576 
    577                 if ( is_user_logged_in() || bp_displayed_user_id() ) {
    578                         // Only grab count if we're on a user page.
    579                         if ( bp_is_user() ) {
    580                                 $class = ( 0 === groups_total_groups_for_user( bp_displayed_user_id() ) ) ? 'no-count' : 'count';
    581 
    582                                 $nav_name = sprintf(
    583                                         /* translators: %s: Group count for the current user */
    584                                         _x( 'Groups %s', 'Group screen nav with counter', 'buddypress' ),
    585                                         sprintf(
    586                                                 '<span class="%s">%s</span>',
    587                                                 esc_attr( $class ),
    588                                                 bp_get_total_group_count_for_user()
    589                                         )
    590                                 );
    591                         } else {
    592                                 $nav_name = _x( 'Groups', 'Group screen nav without counter', 'buddypress' );
    593                         }
    594 
    595                         $slug   = bp_get_groups_slug();
    596                         $access = bp_core_can_edit_settings();
    597 
    598                         // Add 'Groups' to the main navigation.
    599                         $main_nav = array(
    600                                 'name'                => $nav_name,
    601                                 'slug'                => $slug,
    602                                 'position'            => 70,
    603                                 'screen_function'     => 'groups_screen_my_groups',
    604                                 'default_subnav_slug' => 'my-groups',
    605                                 'item_css_id'         => $this->id
     620                // Only grab count if we're on a user page.
     621                if ( isset( $this->main_nav['name'] ) && bp_is_user() ) {
     622                        $class                  = ( 0 === groups_total_groups_for_user( bp_displayed_user_id() ) ) ? 'no-count' : 'count';
     623                        $this->main_nav['name'] = sprintf(
     624                                /* translators: %s: Group count for the current user */
     625                                _x( 'Groups %s', 'Group screen nav with counter', 'buddypress' ),
     626                                sprintf(
     627                                        '<span class="%s">%s</span>',
     628                                        esc_attr( $class ),
     629                                        bp_get_total_group_count_for_user()
     630                                )
    606631                        );
    607 
    608                         // Add the My Groups nav item.
    609                         $sub_nav[] = array(
    610                                 'name'            => __( 'Memberships', 'buddypress' ),
    611                                 'slug'            => 'my-groups',
    612                                 'parent_slug'     => $slug,
    613                                 'screen_function' => 'groups_screen_my_groups',
    614                                 'position'        => 10,
    615                                 'item_css_id'     => 'groups-my-groups'
    616                         );
    617 
    618                         if ( bp_is_active( 'groups', 'invitations' ) ) {
    619                                 // Add the Group Invites nav item.
    620                                 $sub_nav[] = array(
    621                                         'name'            => __( 'Invitations', 'buddypress' ),
    622                                         'slug'            => 'invites',
    623                                         'parent_slug'     => $slug,
    624                                         'screen_function' => 'groups_screen_group_invites',
    625                                         'user_has_access' => $access,
    626                                         'position'        => 30
    627                                 );
    628                         }
    629 
    630                         parent::setup_nav( $main_nav, $sub_nav );
    631632                }
    632633
    633634                if ( bp_is_groups_component() && bp_is_single_item() ) {
    634 
    635                         // Reset sub nav.
    636                         $sub_nav = array();
    637 
    638635                        /*
    639636                         * The top-level Groups item is called 'Memberships' for legacy reasons.
     
    661658                        );
    662659
    663                         // If this is a private group, and the user is not a
    664                         // member and does not have an outstanding invitation,
    665                         // show a "Request Membership" nav item.
     660                        /*
     661                         * If this is a private group, and the user is not a member and does not
     662                         * have an outstanding invitation, how a "Request Membership" nav item.
     663                         */
    666664                        if ( bp_current_user_can( 'groups_request_membership', array( 'group_id' => $this->current_group->id ) ) ) {
    667 
    668665                                $sub_nav[] = array(
    669666                                        'name'            => _x( 'Request Membership','Group screen nav', 'buddypress' ),
     
    676673
    677674                        if ( $this->current_group->front_template || bp_is_active( 'activity' ) ) {
    678                                 /**
    679                                  * If the theme is using a custom front, create activity subnav.
    680                                  */
     675                                // If the theme is using a custom front, create activity subnav.
    681676                                if ( $this->current_group->front_template && bp_is_active( 'activity' ) ) {
    682677                                        $sub_nav[] = array(
     
    692687                                }
    693688
    694                                 /**
    695                                  * Only add the members subnav if it's not the home's nav.
    696                                  */
     689                                // Only add the members subnav if it's not the home's nav.
    697690                                $sub_nav[] = array(
    698691                                        'name'            => sprintf(
     
    804797                                bp_core_new_subnav_item( $nav, 'groups' );
    805798                        }
    806                 }
    807 
    808                 if ( isset( $this->current_group->user_has_access ) ) {
    809 
    810                         /**
    811                          * Fires at the end of the groups navigation setup if user has access.
    812                          *
    813                          * @since 1.0.2
    814                          *
    815                          * @param bool $user_has_access Whether or not user has access.
    816                          */
    817                         do_action( 'groups_setup_nav', $this->current_group->user_has_access );
    818                 } else {
    819 
    820                         /** This action is documented in bp-groups/bp-groups-loader.php */
    821                         do_action( 'groups_setup_nav');
    822                 }
     799
     800                        if ( isset( $this->current_group->user_has_access ) ) {
     801
     802                                /**
     803                                 * Fires at the end of the groups navigation setup if user has access.
     804                                 *
     805                                 * @since 1.0.2
     806                                 *
     807                                 * @param bool $user_has_access Whether or not user has access.
     808                                 */
     809                                do_action( 'groups_setup_nav', $this->current_group->user_has_access );
     810                        } else {
     811
     812                                /** This action is documented in bp-groups/bp-groups-loader.php */
     813                                do_action( 'groups_setup_nav');
     814                        }
     815                }
     816
     817                parent::setup_nav( $main_nav, $sub_nav );
    823818        }
    824819
  • trunk/src/bp-members/classes/class-bp-members-component.php

    r13443 r13450  
    423423         *
    424424         * @since 6.0.0
     425         * @deprecated 12.0.0
    425426         *
    426427         * @return array The Avatar and Cover image subnavs.
    427428         */
    428429        public function get_avatar_cover_image_subnavs() {
    429                 $subnavs = array();
    430 
    431                 $access = bp_core_can_edit_settings();
    432                 $slug   = bp_get_profile_slug();
    433 
    434                 // Change Avatar.
    435                 if ( buddypress()->avatar->show_avatars ) {
    436                         $subnavs[] = array(
    437                                 'name'            => _x( 'Change Profile Photo', 'Profile header sub menu', 'buddypress' ),
    438                                 'slug'            => 'change-avatar',
    439                                 'parent_slug'     => $slug,
    440                                 'screen_function' => 'bp_members_screen_change_avatar',
    441                                 'position'        => 30,
    442                                 'user_has_access' => $access
    443                         );
    444                 }
    445 
    446                 // Change Cover image.
    447                 if ( bp_displayed_user_use_cover_image_header() ) {
    448                         $subnavs[] = array(
    449                                 'name'            => _x( 'Change Cover Image', 'Profile header sub menu', 'buddypress' ),
    450                                 'slug'            => 'change-cover-image',
    451                                 'parent_slug'     => $slug,
    452                                 'screen_function' => 'bp_members_screen_change_cover_image',
    453                                 'position'        => 40,
    454                                 'user_has_access' => $access
    455                         );
    456                 }
    457 
    458                 return $subnavs;
    459         }
    460 
    461         /**
    462          * Set up fall-back component navigation if XProfile is inactive.
    463          *
    464          * @since 1.5.0
    465          *
    466          * @see BP_Component::setup_nav() for a description of arguments.
    467          *
    468          * @param array $main_nav Optional. See BP_Component::setup_nav() for
     430                _deprecated_function( __METHOD__, '12.0.0' );
     431        }
     432
     433        /**
     434         * Register component navigation.
     435         *
     436         * @since 12.0.0
     437         *
     438         * @see `BP_Component::register_nav()` for a description of arguments.
     439         *
     440         * @param array $main_nav Optional. See `BP_Component::register_nav()` for
    469441         *                        description.
    470          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for
     442         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
    471443         *                        description.
    472444         */
    473         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    474 
    475                 // Don't set up navigation if there's no member.
    476                 if ( ! is_user_logged_in() && ! bp_is_user() ) {
    477                         return;
    478                 }
    479 
    480                 $is_xprofile_active = bp_is_active( 'xprofile' );
    481 
    482                 // Bail if XProfile component is active and there's no custom front page for the user.
    483                 if ( ! bp_displayed_user_has_front_template() && $is_xprofile_active ) {
    484                         add_action( 'bp_xprofile_setup_nav', array( $this, 'setup_xprofile_nav' ) );
    485                         return;
    486                 }
    487 
     445        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
    488446                // Set slug to profile in case the xProfile component is not active
    489447                $slug = bp_get_profile_slug();
    490448
    491                 // Defaults to empty navs
    492                 $this->main_nav = array();
    493                 $this->sub_nav  = array();
    494 
    495                 if ( ! $is_xprofile_active ) {
    496                         $this->main_nav = array(
    497                                 'name'                => _x( 'Profile', 'Member profile main navigation', 'buddypress' ),
    498                                 'slug'                => $slug,
    499                                 'position'            => 20,
    500                                 'screen_function'     => 'bp_members_screen_display_profile',
    501                                 'default_subnav_slug' => 'public',
    502                                 'item_css_id'         => buddypress()->profile->id
    503                         );
    504 
    505                 /**
    506                  * The xProfile component is active.
    507                  *
    508                  * We need to make sure the Change Avatar and Change Cover Image subnavs are
    509                  * added just like it was the case before.
    510                  */
    511                 } else {
    512                         add_action( 'bp_xprofile_setup_nav', array( $this, 'setup_xprofile_nav' ) );
    513                 }
    514 
    515                 /**
    516                  * Setup the subnav items for the member profile.
    517                  *
    518                  * This is required in case there's a custom front or in case the xprofile component
    519                  * is not active.
    520                  */
    521                 $this->sub_nav = array(
     449                $main_nav = array(
     450                        'name'                => _x( 'Profile', 'Member profile main navigation', 'buddypress' ),
     451                        'slug'                => $slug,
     452                        'position'            => 20,
     453                        'screen_function'     => 'bp_members_screen_display_profile',
     454                        'default_subnav_slug' => 'public',
     455                        'item_css_id'         => buddypress()->profile->id,
     456                        'generate'            => ! bp_is_active( 'xprofile' ),
     457                );
     458
     459                $sub_nav[] = array(
    522460                        'name'            => _x( 'View', 'Member profile view', 'buddypress' ),
    523461                        'slug'            => 'public',
    524462                        'parent_slug'     => $slug,
    525463                        'screen_function' => 'bp_members_screen_display_profile',
    526                         'position'        => 10
    527                 );
    528 
    529                 /**
    530                  * If there's a front template the members component nav
    531                  * will be there to display the user's front page.
    532                  */
    533                 if ( bp_displayed_user_has_front_template() ) {
    534                         $main_nav = array(
    535                                 'name'                => _x( 'Home', 'Member Home page', 'buddypress' ),
    536                                 'slug'                => 'front',
    537                                 'position'            => 5,
    538                                 'screen_function'     => 'bp_members_screen_display_profile',
    539                                 'default_subnav_slug' => 'public',
    540                         );
    541 
    542                         // We need a dummy subnav for the front page to load.
    543                         $front_subnav = $this->sub_nav;
    544                         $front_subnav['parent_slug'] = 'front';
    545 
    546                         // Set the subnav
    547                         $sub_nav[] = $front_subnav;
    548 
    549                         /**
    550                          * If the profile component is not active, we need to create a new
    551                          * nav to display the WordPress profile.
    552                          */
    553                         if ( ! $is_xprofile_active ) {
    554                                 add_action( 'bp_members_setup_nav', array( $this, 'setup_profile_nav' ) );
    555                         }
    556 
    557                 /**
    558                  * If there's no front template and xProfile is not active, the members
    559                  * component nav will be there to display the WordPress profile
    560                  */
    561                 } else {
    562                         $main_nav  = $this->main_nav;
    563                         $sub_nav   = array( $this->sub_nav );
    564 
    565                         if ( ! $is_xprofile_active ) {
    566                                 $sub_nav = array_merge( $sub_nav, $this->get_avatar_cover_image_subnavs() );
    567                         }
    568                 }
    569 
    570                 parent::setup_nav( $main_nav, $sub_nav );
     464                        'position'        => 10,
     465                        'generate'        => ! bp_is_active( 'xprofile' ),
     466                );
     467
     468                $sub_nav[] = array(
     469                        'name'                     => _x( 'Change Profile Photo', 'Profile header sub menu', 'buddypress' ),
     470                        'slug'                     => 'change-avatar',
     471                        'parent_slug'              => $slug,
     472                        'screen_function'          => 'bp_members_screen_change_avatar',
     473                        'position'                 => 30,
     474                        'user_has_access'          => false,
     475                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     476                        'generate'                 => buddypress()->avatar->show_avatars,
     477                );
     478
     479                $sub_nav[] = array(
     480                        'name'                     => _x( 'Change Cover Image', 'Profile header sub menu', 'buddypress' ),
     481                        'slug'                     => 'change-cover-image',
     482                        'parent_slug'              => $slug,
     483                        'screen_function'          => 'bp_members_screen_change_cover_image',
     484                        'position'                 => 40,
     485                        'user_has_access'          => false,
     486                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     487                        'generate'                 => bp_displayed_user_use_cover_image_header(),
     488                );
     489
     490                parent::register_nav( $main_nav, $sub_nav );
    571491        }
    572492
     
    577497         *
    578498         * @since 2.6.0
     499         * @deprecated 12.0.0
    579500         */
    580501        public function setup_profile_nav() {
    581                 if ( empty( $this->main_nav ) || empty( $this->sub_nav ) ) {
    582                         return;
    583                 }
    584 
    585                 // Add the main nav
    586                 bp_core_new_nav_item( $this->main_nav, 'members' );
    587 
    588                 // Add the sub nav item.
    589                 bp_core_new_subnav_item( $this->sub_nav, 'members' );
    590 
    591                 // Get the Avatar and cover image subnavs.
    592                 $this->setup_xprofile_nav();
     502                _deprecated_function( __METHOD__, '12.0.0' );
    593503        }
    594504
     
    597507         *
    598508         * @since 6.0.0
     509         * @deprecated 12.0.0
    599510         */
    600511        public function setup_xprofile_nav() {
    601                 // Get the Avatar and cover image subnavs.
    602                 $items = $this->get_avatar_cover_image_subnavs();
    603 
    604                 foreach ( $items as $item ) {
    605                         bp_core_new_subnav_item( $item, 'members' );
    606                 }
     512                _deprecated_function( __METHOD__, '12.0.0' );
    607513        }
    608514
  • trunk/src/bp-messages/classes/class-bp-messages-component.php

    r13442 r13450  
    190190
    191191        /**
    192          * Set up navigation for user pages.
    193          *
    194          * @param array $main_nav See {BP_Component::setup_nav()} for details.
    195          * @param array $sub_nav  See {BP_Component::setup_nav()} for details.
     192         * Register component navigation.
     193         *
     194         * @since 12.0.0
     195         *
     196         * @param array $main_nav See `BP_Component::register_nav()` for details.
     197         * @param array $sub_nav  See `BP_Component::register_nav()` for details.
     198         */
     199        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
     200                $slug = bp_get_messages_slug();
     201
     202                // Add 'Messages' to the main navigation.
     203                $main_nav = array(
     204                        'name'                     => __( 'Messages', 'buddypress' ),
     205                        'slug'                     => $slug,
     206                        'position'                 => 50,
     207                        'show_for_displayed_user'  => false,
     208                        'screen_function'          => 'messages_screen_inbox',
     209                        'default_subnav_slug'      => 'inbox',
     210                        'item_css_id'              => $this->id,
     211                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     212                );
     213
     214                // Add the subnav items to the profile.
     215                $sub_nav[] = array(
     216                        'name'                     => __( 'Inbox', 'buddypress' ),
     217                        'slug'                     => 'inbox',
     218                        'parent_slug'              => $slug,
     219                        'screen_function'          => 'messages_screen_inbox',
     220                        'position'                 => 10,
     221                        'user_has_access'          => false,
     222                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     223                );
     224
     225                if ( bp_is_active( $this->id, 'star' ) ) {
     226                        $sub_nav[] = array(
     227                                'name'                      => __( 'Starred', 'buddypress' ),
     228                                'slug'                     => bp_get_messages_starred_slug(),
     229                                'parent_slug'              => $slug,
     230                                'screen_function'          => 'bp_messages_star_screen',
     231                                'position'                 => 11,
     232                                'user_has_access'          => false,
     233                                'user_has_access_callback' => 'bp_core_can_edit_settings',
     234                        );
     235                }
     236
     237                $sub_nav[] = array(
     238                        'name'                     => __( 'Sent', 'buddypress' ),
     239                        'slug'                     => 'sentbox',
     240                        'parent_slug'              => $slug,
     241                        'screen_function'          => 'messages_screen_sentbox',
     242                        'position'                 => 20,
     243                        'user_has_access'          => false,
     244                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     245                );
     246
     247                // Show "Compose" on the logged-in user's profile only.
     248                $sub_nav[] = array(
     249                        'name'                     => __( 'Compose', 'buddypress' ),
     250                        'slug'                     => 'compose',
     251                        'parent_slug'              => $slug,
     252                        'screen_function'          => 'messages_screen_compose',
     253                        'position'                 => 30,
     254                        'user_has_access'          => false,
     255                        'user_has_access_callback' => 'bp_is_my_profile',
     256                );
     257
     258                // Show "Notices" to community admins only.
     259                $sub_nav[] = array(
     260                        'name'                     => __( 'Notices', 'buddypress' ),
     261                        'slug'                     => 'notices',
     262                        'parent_slug'              => $slug,
     263                        'screen_function'          => 'messages_screen_notices',
     264                        'position'                 => 90,
     265                        'user_has_access'          => false,
     266                        'user_has_access_callback' => 'bp_current_user_can_moderate',
     267                );
     268
     269                parent::register_nav( $main_nav, $sub_nav );
     270        }
     271
     272        /**
     273         * Set up component navigation.
     274         *
     275         * @since 1.5.0
     276         * @since 12.0.0 Used to customize the main navigation name.
     277         *
     278         * @see `BP_Component::setup_nav()` for a description of arguments.
     279         *
     280         * @param array $main_nav Optional. See `BP_Component::setup_nav()` for
     281         *                        description.
     282         * @param array $sub_nav  Optional. See `BP_Component::setup_nav()` for
     283         *                        description.
    196284         */
    197285        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    198 
    199                 // Stop if there is no user displayed or logged in.
    200                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    201                         return;
    202                 }
    203 
    204                 $access = bp_core_can_edit_settings();
    205                 $slug   = bp_get_messages_slug();
    206 
    207286                // Only grab count if we're on a user page and current user has access.
    208                 if ( bp_is_user() && bp_user_has_access() ) {
    209                         $count    = bp_get_total_unread_messages_count( bp_displayed_user_id() );
    210                         $class    = ( 0 === $count ) ? 'no-count' : 'count';
    211                         $nav_name = sprintf(
     287                if ( isset( $this->main_nav['name'] ) && bp_is_user() && bp_user_has_access() ) {
     288                        $count                  = bp_get_total_unread_messages_count( bp_displayed_user_id() );
     289                        $class                  = ( 0 === $count ) ? 'no-count' : 'count';
     290                        $this->main_nav['name'] = sprintf(
    212291                                /* translators: %s: Unread message count for the current user */
    213292                                __( 'Messages %s', 'buddypress' ),
     
    218297                                )
    219298                        );
    220                 } else {
    221                         $nav_name = __( 'Messages', 'buddypress' );
    222                 }
    223 
    224                 // Add 'Messages' to the main navigation.
    225                 $main_nav = array(
    226                         'name'                    => $nav_name,
    227                         'slug'                    => $slug,
    228                         'position'                => 50,
    229                         'show_for_displayed_user' => $access,
    230                         'screen_function'         => 'messages_screen_inbox',
    231                         'default_subnav_slug'     => 'inbox',
    232                         'item_css_id'             => $this->id
    233                 );
    234 
    235                 // Add the subnav items to the profile.
    236                 $sub_nav[] = array(
    237                         'name'            => __( 'Inbox', 'buddypress' ),
    238                         'slug'            => 'inbox',
    239                         'parent_slug'     => $slug,
    240                         'screen_function' => 'messages_screen_inbox',
    241                         'position'        => 10,
    242                         'user_has_access' => $access
    243                 );
    244 
    245                 if ( bp_is_active( $this->id, 'star' ) ) {
    246                         $sub_nav[] = array(
    247                                 'name'            => __( 'Starred', 'buddypress' ),
    248                                 'slug'            => bp_get_messages_starred_slug(),
    249                                 'parent_slug'     => $slug,
    250                                 'screen_function' => 'bp_messages_star_screen',
    251                                 'position'        => 11,
    252                                 'user_has_access' => $access
    253                         );
    254                 }
    255 
    256                 $sub_nav[] = array(
    257                         'name'            => __( 'Sent', 'buddypress' ),
    258                         'slug'            => 'sentbox',
    259                         'parent_slug'     => $slug,
    260                         'screen_function' => 'messages_screen_sentbox',
    261                         'position'        => 20,
    262                         'user_has_access' => $access
    263                 );
    264 
    265                 // Show "Compose" on the logged-in user's profile only.
    266                 $sub_nav[] = array(
    267                         'name'            => __( 'Compose', 'buddypress' ),
    268                         'slug'            => 'compose',
    269                         'parent_slug'     => $slug,
    270                         'screen_function' => 'messages_screen_compose',
    271                         'position'        => 30,
    272                         'user_has_access' => bp_is_my_profile(),
    273                 );
    274 
    275                 // Show "Notices" to community admins only.
    276                 $sub_nav[] = array(
    277                         'name'            => __( 'Notices', 'buddypress' ),
    278                         'slug'            => 'notices',
    279                         'parent_slug'     => $slug,
    280                         'screen_function' => 'messages_screen_notices',
    281                         'position'        => 90,
    282                         'user_has_access' => bp_current_user_can( 'bp_moderate' )
    283                 );
     299                }
    284300
    285301                parent::setup_nav( $main_nav, $sub_nav );
  • trunk/src/bp-notifications/classes/class-bp-notifications-component.php

    r13442 r13450  
    134134
    135135        /**
     136         * Register component navigation.
     137         *
     138         * @since 12.0.0
     139         *
     140         * @see `BP_Component::register_nav()` for a description of arguments.
     141         *
     142         * @param array $main_nav Optional. See `BP_Component::register_nav()` for
     143         *                        description.
     144         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
     145         *                        description.
     146         */
     147        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
     148                $slug   = bp_get_notifications_slug();
     149
     150                // Add 'Notifications' to the main navigation.
     151                $main_nav = array(
     152                        'name'                     => _x( 'Notifications', 'Profile screen nav', 'buddypress' ),
     153                        'slug'                     => $slug,
     154                        'position'                 => 30,
     155                        'show_for_displayed_user'  => false,
     156                        'screen_function'          => 'bp_notifications_screen_unread',
     157                        'default_subnav_slug'      => 'unread',
     158                        'item_css_id'              => $this->id,
     159                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     160                );
     161
     162                // Add the subnav items to the notifications nav item.
     163                $sub_nav[] = array(
     164                        'name'                     => _x( 'Unread', 'Notification screen nav', 'buddypress' ),
     165                        'slug'                     => 'unread',
     166                        'parent_slug'              => $slug,
     167                        'screen_function'          => 'bp_notifications_screen_unread',
     168                        'position'                 => 10,
     169                        'item_css_id'              => 'notifications-my-notifications',
     170                        'user_has_access'          => false,
     171                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     172                );
     173
     174                $sub_nav[] = array(
     175                        'name'                     => _x( 'Read', 'Notification screen nav', 'buddypress' ),
     176                        'slug'                     => 'read',
     177                        'parent_slug'              => $slug,
     178                        'screen_function'          => 'bp_notifications_screen_read',
     179                        'position'                 => 20,
     180                        'user_has_access'          => false,
     181                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     182                );
     183
     184                parent::register_nav( $main_nav, $sub_nav );
     185        }
     186
     187        /**
    136188         * Set up component navigation.
    137189         *
    138190         * @since 1.9.0
    139          *
    140          * @see BP_Component::setup_nav() for a description of arguments.
    141          *
    142          * @param array $main_nav Optional. See BP_Component::setup_nav() for
     191         * @since 12.0.0 Used to customize the main navigation name.
     192         *
     193         * @see `BP_Component::setup_nav()` for a description of arguments.
     194         *
     195         * @param array $main_nav Optional. See `BP_Component::setup_nav()` for
    143196         *                        description.
    144          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for
     197         * @param array $sub_nav  Optional. See `BP_Component::setup_nav()` for
    145198         *                        description.
    146199         */
    147200        public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    148 
    149                 // Stop if there is no user displayed or logged in.
    150                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    151                         return;
    152                 }
    153 
    154                 $access = bp_core_can_edit_settings();
    155                 $slug   = bp_get_notifications_slug();
    156 
    157201                // Only grab count if we're on a user page and current user has access.
    158                 if ( bp_is_user() && bp_user_has_access() ) {
    159                         $count    = bp_notifications_get_unread_notification_count( bp_displayed_user_id() );
    160                         $class    = ( 0 === $count ) ? 'no-count' : 'count';
    161                         $nav_name = sprintf(
     202                if ( isset( $this->main_nav['name'] ) && bp_is_user() && bp_user_has_access() ) {
     203                        $count                  = bp_notifications_get_unread_notification_count( bp_displayed_user_id() );
     204                        $class                  = ( 0 === $count ) ? 'no-count' : 'count';
     205                        $this->main_nav['name'] = sprintf(
    162206                                /* translators: %s: Unread notification count for the current user */
    163207                                _x( 'Notifications %s', 'Profile screen nav', 'buddypress' ),
     
    168212                                )
    169213                        );
    170                 } else {
    171                         $nav_name = _x( 'Notifications', 'Profile screen nav', 'buddypress' );
    172                 }
    173 
    174                 // Add 'Notifications' to the main navigation.
    175                 $main_nav = array(
    176                         'name'                    => $nav_name,
    177                         'slug'                    => $slug,
    178                         'position'                => 30,
    179                         'show_for_displayed_user' => $access,
    180                         'screen_function'         => 'bp_notifications_screen_unread',
    181                         'default_subnav_slug'     => 'unread',
    182                         'item_css_id'             => $this->id,
    183                 );
    184 
    185                 // Add the subnav items to the notifications nav item.
    186                 $sub_nav[] = array(
    187                         'name'            => _x( 'Unread', 'Notification screen nav', 'buddypress' ),
    188                         'slug'            => 'unread',
    189                         'parent_slug'     => $slug,
    190                         'screen_function' => 'bp_notifications_screen_unread',
    191                         'position'        => 10,
    192                         'item_css_id'     => 'notifications-my-notifications',
    193                         'user_has_access' => $access,
    194                 );
    195 
    196                 $sub_nav[] = array(
    197                         'name'            => _x( 'Read', 'Notification screen nav', 'buddypress' ),
    198                         'slug'            => 'read',
    199                         'parent_slug'     => $slug,
    200                         'screen_function' => 'bp_notifications_screen_read',
    201                         'position'        => 20,
    202                         'user_has_access' => $access,
    203                 );
     214                }
    204215
    205216                parent::setup_nav( $main_nav, $sub_nav );
  • trunk/src/bp-settings/bp-settings-functions.php

    r13140 r13450  
    362362<?php
    363363}
     364
     365/**
     366 * Whether a user can delete self account from front-end.
     367 *
     368 * @since 12.0.0
     369 *
     370 * @return boolean True if user can delete self account from front-end. False otherwise.
     371 */
     372function bp_settings_can_delete_self_account() {
     373        return ! user_can( bp_displayed_user_id(), 'delete_users' );
     374}
     375
     376/**
     377 * Whether to show the Delete account front-end nav.
     378 *
     379 * @since 12.0.0
     380 *
     381 * @return boolean True if user can be shown the Delete account nav. False otherwise.
     382 */
     383function bp_settings_show_delete_account_nav() {
     384        return ( ! bp_disable_account_deletion() && bp_is_my_profile() ) || bp_current_user_can( 'delete_users' );
     385}
     386
     387/**
     388 * Whether to show the Capability front-end nav.
     389 *
     390 * @since 12.0.0
     391 *
     392 * @return boolean True if user can be shown the Capability nav. False otherwise.
     393 */
     394function bp_settings_show_capability_nav() {
     395        return ! bp_is_my_profile();
     396}
  • trunk/src/bp-settings/classes/class-bp-settings-component.php

    r13442 r13450  
    120120
    121121        /**
    122          * Set up navigation.
    123          *
    124          * @since 1.5.0
    125          *
    126          * @see BP_Component::setup_nav() for a description of arguments.
    127          *
    128          * @param array $main_nav Optional. See BP_Component::setup_nav() for
     122         * Register component navigation.
     123         *
     124         * @since 12.0.0
     125         *
     126         * @see `BP_Component::register_nav()` for a description of arguments.
     127         *
     128         * @param array $main_nav Optional. See `BP_Component::register_nav()` for
    129129         *                        description.
    130          * @param array $sub_nav  Optional. See BP_Component::setup_nav() for
     130         * @param array $sub_nav  Optional. See `BP_Component::register_nav()` for
    131131         *                        description.
    132132         */
    133         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    134 
    135                 // Stop if there is no user displayed or logged in.
    136                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    137                         return;
    138                 }
    139 
    140                 $access = bp_core_can_edit_settings();
     133        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
    141134                $slug   = bp_get_settings_slug();
    142135
    143136                // Add the settings navigation item.
    144137                $main_nav = array(
    145                         'name'                    => __( 'Settings', 'buddypress' ),
    146                         'slug'                    => $slug,
    147                         'position'                => 100,
    148                         'show_for_displayed_user' => $access,
    149                         'screen_function'         => 'bp_settings_screen_general',
    150                         'default_subnav_slug'     => 'general',
     138                        'name'                     => __( 'Settings', 'buddypress' ),
     139                        'slug'                     => $slug,
     140                        'position'                 => 100,
     141                        'screen_function'          => 'bp_settings_screen_general',
     142                        'default_subnav_slug'      => 'general',
     143                        'user_has_access_callback' => 'bp_core_can_edit_settings',
    151144                );
    152145
    153146                // Add General Settings nav item.
    154147                $sub_nav[] = array(
    155                         'name'            => __( 'General', 'buddypress' ),
    156                         'slug'            => 'general',
    157                         'parent_slug'     => $slug,
    158                         'screen_function' => 'bp_settings_screen_general',
    159                         'position'        => 10,
    160                         'user_has_access' => $access,
     148                        'name'                     => __( 'General', 'buddypress' ),
     149                        'slug'                     => 'general',
     150                        'parent_slug'              => $slug,
     151                        'screen_function'          => 'bp_settings_screen_general',
     152                        'position'                 => 10,
     153                        'user_has_access'          => false,
     154                        'user_has_access_callback' => 'bp_core_can_edit_settings',
    161155                );
    162156
     
    164158                // retain the old slug and function names for backward compat.
    165159                $sub_nav[] = array(
    166                         'name'            => __( 'Email', 'buddypress' ),
    167                         'slug'            => 'notifications',
    168                         'parent_slug'     => $slug,
    169                         'screen_function' => 'bp_settings_screen_notification',
    170                         'position'        => 20,
    171                         'user_has_access' => $access,
    172                 );
    173 
    174                 // Add Spam Account nav item.
    175                 if ( bp_current_user_can( 'bp_moderate' ) ) {
    176                         $sub_nav[] = array(
    177                                 'name'            => __( 'Capabilities', 'buddypress' ),
    178                                 'slug'            => 'capabilities',
    179                                 'parent_slug'     => $slug,
    180                                 'screen_function' => 'bp_settings_screen_capabilities',
    181                                 'position'        => 80,
    182                                 'user_has_access' => ! bp_is_my_profile(),
    183                         );
    184                 }
     160                        'name'                     => __( 'Email', 'buddypress' ),
     161                        'slug'                     => 'notifications',
     162                        'parent_slug'              => $slug,
     163                        'screen_function'          => 'bp_settings_screen_notification',
     164                        'position'                 => 20,
     165                        'user_has_access'          => false,
     166                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     167                );
     168
     169                $sub_nav[] = array(
     170                        'name'                     => _x( 'Profile Visibility', 'Profile settings sub nav', 'buddypress' ),
     171                        'slug'                     => 'profile',
     172                        'parent_slug'              => $slug,
     173                        'screen_function'          => 'bp_xprofile_screen_settings',
     174                        'position'                 => 30,
     175                        'user_has_access'          => false,
     176                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     177                );
     178
     179                $sub_nav[] = array(
     180                        'name'                     => __( 'Capabilities', 'buddypress' ),
     181                        'slug'                     => 'capabilities',
     182                        'parent_slug'              => $slug,
     183                        'screen_function'          => 'bp_settings_screen_capabilities',
     184                        'position'                 => 80,
     185                        'user_has_access'          => false,
     186                        'user_has_access_callback' => 'bp_settings_show_capability_nav',
     187                        'generate'                 => bp_current_user_can( 'bp_moderate' ),
     188                );
    185189
    186190                /**
     
    196200                if ( true === $show_data_page ) {
    197201                        $sub_nav[] = array(
    198                                 'name'            => __( 'Export Data', 'buddypress' ),
    199                                 'slug'            => 'data',
    200                                 'parent_slug'     => $slug,
    201                                 'screen_function' => 'bp_settings_screen_data',
    202                                 'position'        => 89,
    203                                 'user_has_access' => $access,
     202                                'name'                     => __( 'Export Data', 'buddypress' ),
     203                                'slug'                     => 'data',
     204                                'parent_slug'              => $slug,
     205                                'screen_function'          => 'bp_settings_screen_data',
     206                                'position'                 => 89,
     207                                'user_has_access'          => false,
     208                                'user_has_access_callback' => 'bp_core_can_edit_settings',
    204209                        );
    205210                }
    206211
    207212                // Add Delete Account nav item.
    208                 if ( ( ! bp_disable_account_deletion() && bp_is_my_profile() ) || bp_current_user_can( 'delete_users' ) ) {
    209                         $sub_nav[] = array(
    210                                 'name'            => __( 'Delete Account', 'buddypress' ),
    211                                 'slug'            => 'delete-account',
    212                                 'parent_slug'     => $slug,
    213                                 'screen_function' => 'bp_settings_screen_delete_account',
    214                                 'position'        => 90,
    215                                 'user_has_access' => ! user_can( bp_displayed_user_id(), 'delete_users' ),
    216                         );
    217                 }
    218 
    219                 parent::setup_nav( $main_nav, $sub_nav );
     213                $sub_nav[] = array(
     214                        'name'                     => __( 'Delete Account', 'buddypress' ),
     215                        'slug'                     => 'delete-account',
     216                        'parent_slug'              => $slug,
     217                        'screen_function'          => 'bp_settings_screen_delete_account',
     218                        'position'                 => 90,
     219                        'user_has_access'          => false,
     220                        'user_has_access_callback' => 'bp_settings_can_delete_self_account',
     221                        'generate'                 => 'bp_settings_show_delete_account_nav',
     222                );
     223
     224                parent::register_nav( $main_nav, $sub_nav );
    220225        }
    221226
     
    225230         * @since 1.5.0
    226231         *
    227          * @see BP_Component::setup_nav() for a description of the $wp_admin_nav
     232         * @see `BP_Component::setup_admin_bar()` for a description of the $wp_admin_nav
    228233         *      parameter array.
    229234         *
    230          * @param array $wp_admin_nav See BP_Component::setup_admin_bar() for a
     235         * @param array $wp_admin_nav See `BP_Component::setup_admin_bar()` for a
    231236         *                            description.
    232237         */
  • trunk/src/bp-xprofile/classes/class-bp-xprofile-component.php

    r13442 r13450  
    221221
    222222        /**
    223          * Set up navigation.
    224          *
    225          * @since 1.5.0
    226          *
    227          * @param array $main_nav Array of main nav items to set up.
    228          * @param array $sub_nav  Array of sub nav items to set up.
    229          */
    230         public function setup_nav( $main_nav = array(), $sub_nav = array() ) {
    231 
    232                 // Stop if there is no user displayed or logged in.
    233                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    234                         return;
    235                 }
    236 
    237                 $access = bp_core_can_edit_settings();
    238                 $slug   = bp_get_profile_slug();
     223         * Register component navigation.
     224         *
     225         * @since 12.0.0
     226         *
     227         * @param array $main_nav See `BP_Component::register_nav()` for details.
     228         * @param array $sub_nav  See `BP_Component::register_nav()` for details.
     229         */
     230        public function register_nav( $main_nav = array(), $sub_nav = array() ) {
     231                $slug = bp_get_profile_slug();
    239232
    240233                // Add 'Profile' to the main navigation.
     
    259252                // Edit Profile.
    260253                $sub_nav[] = array(
    261                         'name'            => _x( 'Edit','Profile header sub menu', 'buddypress' ),
    262                         'slug'            => 'edit',
    263                         'parent_slug'     => $slug,
    264                         'screen_function' => 'xprofile_screen_edit_profile',
    265                         'position'        => 20,
    266                         'user_has_access' => $access,
    267                 );
    268 
    269                 // The Settings > Profile nav item can only be set up after
    270                 // the Settings component has run its own nav routine.
    271                 add_action( 'bp_settings_setup_nav', array( $this, 'setup_settings_nav' ) );
    272 
    273                 parent::setup_nav( $main_nav, $sub_nav );
     254                        'name'                     => _x( 'Edit','Profile header sub menu', 'buddypress' ),
     255                        'slug'                     => 'edit',
     256                        'parent_slug'              => $slug,
     257                        'screen_function'          => 'xprofile_screen_edit_profile',
     258                        'position'                 => 20,
     259                        'user_has_access'          => false,
     260                        'user_has_access_callback' => 'bp_core_can_edit_settings',
     261                );
     262
     263                parent::register_nav( $main_nav, $sub_nav );
    274264        }
    275265
     
    281271         *
    282272         * @since 2.1.0
     273         * @deprecated 12.0.0
    283274         */
    284275        public function setup_settings_nav() {
    285                 if ( ! bp_is_active( 'settings' ) ) {
    286                         return;
    287                 }
    288 
    289                 // Stop if there is no user displayed or logged in.
    290                 if ( ! is_user_logged_in() && ! bp_displayed_user_id() ) {
    291                         return;
    292                 }
    293 
    294                 // Get the settings slug.
    295                 $settings_slug = bp_get_settings_slug();
    296 
    297                 bp_core_new_subnav_item( array(
    298                         'name'            => _x( 'Profile Visibility', 'Profile settings sub nav', 'buddypress' ),
    299                         'slug'            => 'profile',
    300                         'parent_slug'     => $settings_slug,
    301                         'screen_function' => 'bp_xprofile_screen_settings',
    302                         'position'        => 30,
    303                         'user_has_access' => bp_core_can_edit_settings(),
    304                 ), 'members' );
     276                _deprecated_function( __METHOD__, '12.0.0' );
    305277        }
    306278
Note: See TracChangeset for help on using the changeset viewer.