BP_Nouveau_Customizer_Group_Nav
A specific Group Nav class to make it possible to set new positions for buddypress()->groups->nav.
Description Description
Source Source
File: bp-templates/bp-nouveau/includes/groups/classes.php
class BP_Nouveau_Customizer_Group_Nav extends BP_Core_Nav { /** * Constructor * * @param int $object_id Optional. The random group ID used to generate the nav. */ public function __construct( $object_id = 0 ) { $error = new WP_Error( 'missing_parameter' ); if ( empty( $object_id ) || ! bp_current_user_can( 'bp_moderate' ) || ! did_action( 'admin_init' ) ) { return $error; } $group = groups_get_group( array( 'group_id' => $object_id ) ); if ( empty( $group->id ) ) { return $error; } $this->group = $group; parent::__construct( $group->id ); $this->setup_nav(); } /** * Checks whether a property is set. * * Overrides BP_Core_Nav::__isset() to avoid looking into its nav property. * * @since 3.0.0 * * @param string $key The property. * * @return bool True if the property is set, false otherwise. */ public function __isset( $key ) { return isset( $this->{$key} ); } /** * Gets a property. * * Overrides BP_Core_Nav::__isset() to avoid looking into its nav property. * * @since 3.0.0 * * @param string $key The property. * * @return mixed The value corresponding to the property. */ public function __get( $key ) { if ( ! isset( $this->{$key} ) ) { $this->{$key} = null; } return $this->{$key}; } /** * Sets a property. * * Overrides BP_Core_Nav::__isset() to avoid adding a value to its nav property. * * @since 3.0.0 * * @param string $key The property. * * @param mixed $value The value of the property. */ public function __set( $key, $value ) { $this->{$key} = $value; } /** * Setup a temporary nav with only the needed parameters. * * @since 3.0.0 */ protected function setup_nav() { $nav_items = array( 'root' => array( 'name' => __( 'Memberships', 'buddypress' ), 'slug' => $this->group->slug, 'position' => -1, /** This filter is documented in bp-groups/classes/class-bp-groups-component.php. */ 'default_subnav_slug' => apply_filters( 'bp_groups_default_extension', defined( 'BP_GROUPS_DEFAULT_EXTENSION' ) ? BP_GROUPS_DEFAULT_EXTENSION : 'home' ), ), 'home' => array( 'name' => _x( 'Home', 'Group screen navigation title', 'buddypress' ), 'slug' => 'home', 'parent_slug' => $this->group->slug, 'position' => 10, ), 'invites' => array( 'name' => _x( 'Invite', 'My Group screen nav', 'buddypress' ), 'slug' => 'send-invites', 'parent_slug' => $this->group->slug, 'position' => 70, ), 'manage' => array( 'name' => _x( 'Manage', 'My Group screen nav', 'buddypress' ), 'slug' => 'admin', 'parent_slug' => $this->group->slug, 'position' => 1000, ), ); // Make sure only global front.php will be checked. add_filter( '_bp_nouveau_group_reset_front_template', array( $this, 'all_groups_fronts' ), 10, 1 ); $front_template = bp_groups_get_front_template( $this->group ); remove_filter( '_bp_nouveau_group_reset_front_template', array( $this, 'all_groups_fronts' ), 10, 1 ); if ( ! $front_template ) { if ( bp_is_active( 'activity' ) ) { $nav_items['home']['name'] = _x( 'Home (Activity)', 'Group screen navigation title', 'buddypress' ); } else { $nav_items['home']['name'] = _x( 'Home (Members)', 'Group screen navigation title', 'buddypress' ); } } else { if ( bp_is_active( 'activity' ) ) { $nav_items['activity'] = array( 'name' => _x( 'Activity', 'My Group screen nav', 'buddypress' ), 'slug' => 'activity', 'parent_slug' => $this->group->slug, 'position' => 11, ); } // Add the members one $nav_items['members'] = array( 'name' => _x( 'Members', 'My Group screen nav', 'buddypress' ), 'slug' => 'members', 'parent_slug' => $this->group->slug, 'position' => 60, ); } // Required params $required_params = array( 'slug' => true, 'name' => true, 'nav_item_position' => true, ); // Now find nav items plugins are creating within their Group extensions! foreach ( get_declared_classes() as $class ) { if ( is_subclass_of( $class, 'BP_Group_Extension' ) ) { $extension = new $class; if ( ! empty( $extension->params ) && ! array_diff_key( $required_params, $extension->params ) ) { $nav_items[ $extension->params['slug'] ] = array( 'name' => $extension->params['name'], 'slug' => $extension->params['slug'], 'parent_slug' => $this->group->slug, 'position' => $extension->params['nav_item_position'], ); } } } // Now we got all, create the temporary nav. foreach ( $nav_items as $nav_item ) { $this->add_nav( $nav_item ); } } /** * Front template: do not look into group's template hierarchy. * * @since 3.0.0 * * @param array $templates The list of possible group front templates. * * @return array The list of "global" group front templates. */ public function all_groups_fronts( $templates = array() ) { return array_intersect( array( 'groups/single/front.php', 'groups/single/default-front.php', ), $templates ); } /** * Get the original order for the group navigation. * * @since 3.0.0 * * @return array a list of nav items slugs ordered. */ public function get_default_value() { $default_nav = $this->get_secondary( array( 'parent_slug' => $this->group->slug ) ); return wp_list_pluck( $default_nav, 'slug' ); } /** * Get the list of nav items ordered according to the Site owner preferences. * * @since 3.0.0 * * @return array the nav items ordered. */ public function get_group_nav() { // Eventually reset the order bp_nouveau_set_nav_item_order( $this, bp_nouveau_get_appearance_settings( 'group_nav_order' ), $this->group->slug ); return $this->get_secondary( array( 'parent_slug' => $this->group->slug ) ); } }
Changelog Changelog
Version | Description |
---|---|
3.0.0 | Introduced. |
Methods Methods
- __construct — Constructor
- __get — Gets a property.
- __isset — Checks whether a property is set.
- __set — Sets a property.
- all_groups_fronts — Front template: do not look into group's template hierarchy.
- get_default_value — Get the original order for the group navigation.
- get_group_nav — Get the list of nav items ordered according to the Site owner preferences.
- setup_nav — Setup a temporary nav with only the needed parameters.