Skip to:
Content

bbPress.org

Changeset 6804


Ignore:
Timestamp:
04/22/2018 11:08:01 PM (8 years ago)
Author:
johnjamesjacoby
Message:

BuddyPress: updates to member profile URL filters:

  • Introduce methods for known user profile pages
  • Update public filter methods to use a private method

This change uses new intercept hooks to make sure bbPress profile URLs are turned into BuddyPress ones instead.

See #3814.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/includes/extend/buddypress/members.php

    r6583 r6804  
    6767     */
    6868    private function setup_filters() {
    69         add_filter( 'bbp_pre_get_user_profile_url',     array( $this, 'user_profile_url'            )        );
    70         add_filter( 'bbp_pre_get_user_engagements_url', array( $this, 'get_engagements_permalink'   )        );
    71         add_filter( 'bbp_get_favorites_permalink',      array( $this, 'get_favorites_permalink'     ), 10, 2 );
    72         add_filter( 'bbp_get_subscriptions_permalink',  array( $this, 'get_subscriptions_permalink' ), 10, 2 );
     69        add_filter( 'bbp_pre_get_user_profile_url',         array( $this, 'get_user_profile_url'        ) );
     70        add_filter( 'bbp_pre_get_user_topics_created_url',  array( $this, 'get_topics_created_url'      ) );
     71        add_filter( 'bbp_pre_get_user_replies_created_url', array( $this, 'get_replies_created_url'     ) );
     72        add_filter( 'bbp_pre_get_user_engagements_url',     array( $this, 'get_engagements_permalink'   ) );
     73        add_filter( 'bbp_pre_get_favorites_permalink',      array( $this, 'get_favorites_permalink'     ) );
     74        add_filter( 'bbp_pre_get_subscriptions_permalink',  array( $this, 'get_subscriptions_permalink' ) );
    7375    }
    7476
     
    8183     * @since 2.6.0 bbPress (r6320) Add engagements support
    8284     *
    83      * @param string $url
    84      * @param int $user_id
    85      * @param string $user_nicename
    86      * @return string
    87      */
    88     public function user_profile_url( $user_id ) {
    89 
    90         // Do not filter if not on BuddyPress root blog
    91         if ( ! bp_is_root_blog() ) {
    92             return false;
    93         }
    94 
    95         // Define local variable(s)
    96         $profile_url    = '';
    97         $component_slug = bbpress()->extend->buddypress->slug;
    98         $profile_url    = bp_core_get_user_domain( $user_id );
    99 
    100         // Special handling for forum component
    101         if ( bp_is_current_component( $component_slug ) ) {
    102 
    103             // Empty action or 'topics' action
    104             if ( ! bp_current_action() || bp_is_current_action( bbp_get_topic_archive_slug() ) ) {
    105                 $profile_url = $profile_url . $component_slug . '/' . bbp_get_topic_archive_slug();
    106 
    107             // Empty action or 'topics' action
    108             } elseif ( bp_is_current_action( bbp_get_reply_archive_slug() ) ) {
    109                 $profile_url = $profile_url . $component_slug . '/' . bbp_get_reply_archive_slug();
    110 
    111             // 'favorites' action
    112             } elseif ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
    113                 $profile_url = $this->get_favorites_permalink( '', $user_id );
    114 
    115             // 'subscriptions' action
    116             } elseif ( bbp_is_subscriptions_active() && bp_is_current_action( bbp_get_user_subscriptions_slug() ) ) {
    117                 $profile_url = $this->get_subscriptions_permalink( '', $user_id );
    118 
    119             // 'engagements' action
    120             } elseif ( bbp_is_engagements_active() && bp_is_current_action( bbp_get_user_engagements_slug() ) ) {
    121                 $profile_url = $this->get_engagements_permalink( $user_id );
    122             }
    123         }
    124 
    125         return trailingslashit( $profile_url );
     85     * @param int $user_id
     86     * @return string
     87     */
     88    public function get_user_profile_url( $user_id = 0 ) {
     89        return $this->get_profile_url( $user_id );
     90    }
     91
     92    /**
     93     * Override bbPress topics created URL with BuddyPress profile URL
     94     *
     95     * @since 2.6.0 bbPress (r3721)
     96     * @since 2.6.0 bbPress (r6803) Use private method
     97     *
     98     * @param int $user_id
     99     * @return string
     100     */
     101    public function get_topics_created_url( $user_id = 0 ) {
     102        return $this->get_profile_url( $user_id, bbp_get_topic_archive_slug() );
     103    }
     104
     105    /**
     106     * Override bbPress replies created URL with BuddyPress profile URL
     107     *
     108     * @since 2.6.0 bbPress (r3721)
     109     * @since 2.6.0 bbPress (r6803) Use private method
     110     *
     111     * @param int $user_id
     112     * @return string
     113     */
     114    public function get_replies_created_url( $user_id = 0 ) {
     115        return $this->get_profile_url( $user_id, bbp_get_reply_archive_slug() );
    126116    }
    127117
     
    130120     *
    131121     * @since 2.1.0 bbPress (r3721)
    132      *
    133      * @param string $url
    134      * @param int $user_id
    135      * @return string
    136      */
    137     public function get_favorites_permalink( $url, $user_id ) {
    138 
    139         // Do not filter if not on BuddyPress root blog
    140         if ( ! bp_is_root_blog() ) {
    141             return false;
    142         }
    143 
    144         $component_slug = bbpress()->extend->buddypress->slug;
    145         $url            = trailingslashit( bp_core_get_user_domain( $user_id ) . $component_slug . '/' . bbp_get_user_favorites_slug() );
    146 
    147         return $url;
     122     * @since 2.6.0 bbPress (r6803) Use private method
     123     *
     124     * @param int $user_id
     125     * @return string
     126     */
     127    public function get_favorites_permalink( $user_id = 0 ) {
     128        return $this->get_profile_url( $user_id, bbp_get_user_favorites_slug() );
    148129    }
    149130
     
    152133     *
    153134     * @since 2.1.0 bbPress (r3721)
    154      *
    155      * @param string $url
    156      * @param int $user_id
    157      * @return string
    158      */
    159     public function get_subscriptions_permalink( $url, $user_id ) {
    160 
    161         // Do not filter if not on BuddyPress root blog
    162         if ( ! bp_is_root_blog() ) {
    163             return false;
    164         }
    165 
    166         $component_slug = bbpress()->extend->buddypress->slug;
    167         $url            = trailingslashit( bp_core_get_user_domain( $user_id ) . $component_slug . '/' . bbp_get_user_subscriptions_slug() );
    168 
    169         return $url;
     135     * @since 2.6.0 bbPress (r6803) Use private method
     136     *
     137     * @param int $user_id
     138     * @return string
     139     */
     140    public function get_subscriptions_permalink( $user_id = 0 ) {
     141        return $this->get_profile_url( $user_id, bbp_get_user_subscriptions_slug() );
    170142    }
    171143
     
    175147     * @since 2.6.0 bbPress (r6320)
    176148     *
    177      * @param string $url
    178      * @param int $user_id
    179      * @return string
    180      */
    181     public function get_engagements_permalink( $user_id ) {
    182 
    183         // Do not filter if not on BuddyPress root blog
    184         if ( ! bp_is_root_blog() ) {
    185             return false;
    186         }
    187 
    188         $component_slug = bbpress()->extend->buddypress->slug;
    189         $url            = trailingslashit( bp_core_get_user_domain( $user_id ) . $component_slug . '/' . bbp_get_user_engagements_slug() );
    190 
    191         return $url;
     149     * @param int $user_id
     150     * @return string
     151     */
     152    public function get_engagements_permalink( $user_id = 0 ) {
     153        return $this->get_profile_url( $user_id, bbp_get_user_engagements_slug() );
    192154    }
    193155
     
    197159     *
    198160     * @since 2.3.0 bbPress (r4615)
    199      * @since 2.6.0 bbPress (r6320) Add engagements support
     161     * @since 2.6.0 bbPress (r6320) Support all profile sections
    200162     *
    201163     * @global WP_Query $wp_query
     
    212174        $wp_query = bbp_get_wp_query();
    213175
     176        // 'topics' action
     177        if ( bp_is_current_action( bbp_get_topic_archive_slug() ) ) {
     178            $wp_query->bbp_is_single_user_topics = true;
     179
     180        // 'replies' action
     181        } elseif ( bp_is_current_action( bbp_get_reply_archive_slug() ) ) {
     182            $wp_query->bbp_is_single_user_replies = true;
     183
    214184        // 'favorites' action
    215         if ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
     185        } elseif ( bbp_is_favorites_active() && bp_is_current_action( bbp_get_user_favorites_slug() ) ) {
    216186            $wp_query->bbp_is_single_user_favs = true;
    217187
     
    225195        }
    226196    }
     197
     198    /** Private Methods *******************************************************/
     199
     200    /**
     201     * Private method used to concatenate user IDs and slugs into URLs
     202     *
     203     * @since 2.6.0 bbPress (r6803)
     204     *
     205     * @param int    $user_id
     206     * @param string $slug
     207     *
     208     * @return string
     209     */
     210    private function get_profile_url( $user_id = 0, $slug = '' ) {
     211
     212        // Do not filter if not on BuddyPress root blog
     213        if ( empty( $user_id ) || ! bp_is_root_blog() ) {
     214            return false;
     215        }
     216
     217        // Setup profile URL
     218        $url = array(
     219            bp_core_get_user_domain( $user_id ),
     220            bbpress()->extend->buddypress->slug
     221        );
     222
     223        // Maybe push slug to end of URL array
     224        if ( ! empty( $slug ) ) {
     225            array_push( $url, $slug );
     226        }
     227
     228        // Slash it
     229        $url = array_map( 'trailingslashit', $url );
     230
     231        // Return
     232        return implode( '', $url );
     233    }
    227234}
    228235endif;
Note: See TracChangeset for help on using the changeset viewer.