Skip to:
Content

bbPress.org


Ignore:
Timestamp:
11/20/2013 07:50:55 PM (8 years ago)
Author:
johnjamesjacoby
Message:

Forum Subscriptions - Allow users to subscribe to new topics in specific forums.

  • Code largely lifted from existing Topics Subscriptions, and is based largely on forum-subscriptions.2.diff from mordauk, with edits for code consistency across bbPress components.
  • Refactor existing ambiguous function names into base functions for both forum and topic subscriptions.
  • Include new functions for getting and outputting subscriptions.
  • Modify user-subscriptions.php to show subscribed forums. This includes a modification to content-single-forum.php to include the "Unsubscribe" link if looking at a user profile page.
  • Modify templates/default/bbpress-functions.php to enqueue new JS file to handle forum subscription ajax.
  • Rename HTML element classes from bbp-topic-action to bbp-row-actions to better accommodate forum subscriptions (and any future actions.)
  • BuddyPress tested, JJJ approved.
  • See #2299. Props mordauk, netweb for the considerable effort.
  • More to do here, largely from forum-subscriptions.3.diff
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/includes/users/template.php

    r5126 r5156  
    613613
    614614/** Anonymous Fields **********************************************************/
    615    
     615
    616616/**
    617617 * Output the author disylay-name of a topic or reply.
     
    886886     */
    887887    function bbp_get_user_favorites_link( $args = '', $user_id = 0, $wrap = true ) {
    888         if ( !bbp_is_favorites_active() )
     888        if ( ! bbp_is_favorites_active() ) {
    889889            return false;
     890        }
    890891
    891892        // Parse arguments against default values
     
    907908
    908909        // No link if you can't edit yourself
    909         if ( !current_user_can( 'edit_user', (int) $user_id ) ) {
     910        if ( ! current_user_can( 'edit_user', (int) $user_id ) ) {
    910911            return false;
    911912        }
     
    913914        // Decide which link to show
    914915        $is_fav = bbp_is_user_favorite( $user_id, $topic_id );
    915         if ( !empty( $is_fav ) ) {
     916        if ( ! empty( $is_fav ) ) {
    916917            $text       = $r['favorited'];
    917918            $query_args = array( 'action' => 'bbp_favorite_remove', 'topic_id' => $topic_id );
     
    936937
    937938        // Initial output is wrapped in a span, ajax output is hooked to this
    938         if ( !empty( $wrap ) ) {
     939        if ( ! empty( $wrap ) ) {
    939940            $html = '<span id="favorite-toggle">' . $html . '</span>';
    940941        }
     
    10191020}
    10201021    /**
    1021      * Return the link to subscribe/unsubscribe from a topic
     1022     * Return the link to subscribe/unsubscribe from a forum or topic
    10221023     *
    10231024     * @since bbPress (r2668)
     
    10281029     *  - user_id: User id
    10291030     *  - topic_id: Topic id
     1031     *  - forum_id: Forum id
    10301032     *  - before: Before the link
    10311033     *  - after: After the link
    10321034     * @param int $user_id Optional. User id
    10331035     * @param bool $wrap Optional. If you want to wrap the link in <span id="subscription-toggle">.
     1036     * @uses bbp_is_subscriptions_active() to check if subscriptions are active
    10341037     * @uses bbp_get_user_id() To get the user id
     1038     * @uses bbp_get_user_id() To get the user id
     1039     * @uses bbp_get_topic_id() To get the topic id
     1040     * @uses bbp_get_forum_id() To get the forum id
    10351041     * @uses current_user_can() To check if the current user can edit user
    1036      * @uses bbp_get_topic_id() To get the topic id
    1037      * @uses bbp_is_user_subscribed() To check if the user is subscribed
     1042     * @uses bbp_is_user_subscribed_to_forum() To check if the user is subscribed to the forum
     1043     * @uses bbp_is_user_subscribed_to_topic() To check if the user is subscribed to the topic
    10381044     * @uses bbp_is_subscriptions() To check if it's the subscriptions page
    10391045     * @uses bbp_get_subscriptions_permalink() To get subscriptions link
     
    10441050     */
    10451051    function bbp_get_user_subscribe_link( $args = '', $user_id = 0, $wrap = true ) {
    1046         if ( !bbp_is_subscriptions_active() )
     1052        if ( ! bbp_is_subscriptions_active() ) {
    10471053            return;
     1054        }
    10481055
    10491056        // Parse arguments against default values
     
    10531060            'user_id'     => 0,
    10541061            'topic_id'    => 0,
     1062            'forum_id'    => 0,
    10551063            'before'      => '&nbsp;|&nbsp;',
    10561064            'after'       => ''
    10571065        ), 'get_user_subscribe_link' );
    10581066
    1059         // Validate user and topic ID's
     1067        // Validate user and object ID's
    10601068        $user_id  = bbp_get_user_id( $r['user_id'], true, true );
    10611069        $topic_id = bbp_get_topic_id( $r['topic_id'] );
    1062         if ( empty( $user_id ) || empty( $topic_id ) ) {
     1070        $forum_id = bbp_get_forum_id( $r['forum_id'] );
     1071        if ( empty( $user_id ) || ( empty( $topic_id ) && empty( $forum_id ) ) ) {
    10631072            return false;
    10641073        }
    10651074
    10661075        // No link if you can't edit yourself
    1067         if ( !current_user_can( 'edit_user', (int) $user_id ) ) {
     1076        if ( ! current_user_can( 'edit_user', (int) $user_id ) ) {
    10681077            return false;
    10691078        }
    10701079
    1071         // Decide which link to show
    1072         $is_subscribed = bbp_is_user_subscribed( $user_id, $topic_id );
    1073         if ( !empty( $is_subscribed ) ) {
    1074             $text       = $r['unsubscribe'];
    1075             $query_args = array( 'action' => 'bbp_unsubscribe', 'topic_id' => $topic_id );
     1080        // Check if viewing a single forum
     1081        if ( empty( $topic_id ) && ! empty( $forum_id ) ) {
     1082
     1083            // Decide which link to show
     1084            $is_subscribed = bbp_is_user_subscribed_to_forum( $user_id, $forum_id );
     1085            if ( ! empty( $is_subscribed ) ) {
     1086                $text       = $r['unsubscribe'];
     1087                $query_args = array( 'action' => 'bbp_unsubscribe', 'forum_id' => $forum_id );
     1088            } else {
     1089                $text       = $r['subscribe'];
     1090                $query_args = array( 'action' => 'bbp_subscribe',   'forum_id' => $forum_id );
     1091            }
     1092
     1093            // Create the link based where the user is and if the user is
     1094            // subscribed already
     1095            if ( bbp_is_subscriptions() ) {
     1096                $permalink = bbp_get_subscriptions_permalink( $user_id );
     1097            } elseif ( bbp_is_single_forum() || bbp_is_single_reply() ) {
     1098                $permalink = bbp_get_forum_permalink( $forum_id );
     1099            } else {
     1100                $permalink = get_permalink();
     1101            }
     1102
     1103            $url  = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-subscription_' . $forum_id ) );
     1104            $sub  = $is_subscribed ? ' class="is-subscribed"' : '';
     1105            $html = sprintf( '%s<span id="subscribe-%d"  %s><a href="%s" class="subscription-toggle" data-forum="%d">%s</a></span>%s', $r['before'], $forum_id, $sub, $url, $forum_id, $text, $r['after'] );
     1106
     1107            // Initial output is wrapped in a span, ajax output is hooked to this
     1108            if ( !empty( $wrap ) ) {
     1109                $html = '<span id="subscription-toggle">' . $html . '</span>';
     1110            }
     1111
    10761112        } else {
    1077             $text       = $r['subscribe'];
    1078             $query_args = array( 'action' => 'bbp_subscribe', 'topic_id' => $topic_id );
    1079         }
    1080 
    1081         // Create the link based where the user is and if the user is
    1082         // subscribed already
    1083         if ( bbp_is_subscriptions() ) {
    1084             $permalink = bbp_get_subscriptions_permalink( $user_id );
    1085         } elseif ( bbp_is_single_topic() || bbp_is_single_reply() ) {
    1086             $permalink = bbp_get_topic_permalink( $topic_id );
    1087         } else {
    1088             $permalink = get_permalink();
    1089         }
    1090 
    1091         $url  = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-subscription_' . $topic_id ) );
    1092         $sub  = $is_subscribed ? ' class="is-subscribed"' : '';
    1093         $html = sprintf( '%s<span id="subscribe-%d"  %s><a href="%s" class="subscription-toggle" data-topic="%d">%s</a></span>%s', $r['before'], $topic_id, $sub, $url, $topic_id, $text, $r['after'] );
    1094 
    1095         // Initial output is wrapped in a span, ajax output is hooked to this
    1096         if ( !empty( $wrap ) ) {
    1097             $html = '<span id="subscription-toggle">' . $html . '</span>';
     1113
     1114            // Decide which link to show
     1115            $is_subscribed = bbp_is_user_subscribed_to_topic( $user_id, $topic_id );
     1116            if ( ! empty( $is_subscribed ) ) {
     1117                $text       = $r['unsubscribe'];
     1118                $query_args = array( 'action' => 'bbp_unsubscribe', 'topic_id' => $topic_id );
     1119            } else {
     1120                $text       = $r['subscribe'];
     1121                $query_args = array( 'action' => 'bbp_subscribe',   'topic_id' => $topic_id );
     1122            }
     1123
     1124            // Create the link based where the user is and if the user is
     1125            // subscribed already
     1126            if ( bbp_is_subscriptions() ) {
     1127                $permalink = bbp_get_subscriptions_permalink( $user_id );
     1128            } elseif ( bbp_is_single_topic() || bbp_is_single_reply() ) {
     1129                $permalink = bbp_get_topic_permalink( $topic_id );
     1130            } else {
     1131                $permalink = get_permalink();
     1132            }
     1133
     1134            $url  = esc_url( wp_nonce_url( add_query_arg( $query_args, $permalink ), 'toggle-subscription_' . $topic_id ) );
     1135            $sub  = $is_subscribed ? ' class="is-subscribed"' : '';
     1136            $html = sprintf( '%s<span id="subscribe-%d"  %s><a href="%s" class="subscription-toggle" data-topic="%d">%s</a></span>%s', $r['before'], $topic_id, $sub, $url, $topic_id, $text, $r['after'] );
     1137
     1138            // Initial output is wrapped in a span, ajax output is hooked to this
     1139            if ( !empty( $wrap ) ) {
     1140                $html = '<span id="subscription-toggle">' . $html . '</span>';
     1141            }
    10981142        }
    10991143
Note: See TracChangeset for help on using the changeset viewer.