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/functions.php

    r5121 r5156  
    314314
    315315    if ( !empty( $favorites ) ) {
    316        
     316
    317317        // Checking a specific topic id
    318318        if ( !empty( $topic_id ) ) {
     
    513513
    514514/**
     515 * Get the users who have subscribed to the forum
     516 *
     517 * @since bbPress (rxxxx)
     518 *
     519 * @param int $forum_id Optional. forum id
     520 * @uses wpdb::get_col() To execute our query and get the column back
     521 * @uses apply_filters() Calls 'bbp_get_forum_subscribers' with the subscribers
     522 * @return array|bool Results if the forum has any subscribers, otherwise false
     523 */
     524function bbp_get_forum_subscribers( $forum_id = 0 ) {
     525    $forum_id = bbp_get_forum_id( $forum_id );
     526    if ( empty( $forum_id ) )
     527        return;
     528
     529    global $wpdb;
     530
     531    $key   = $wpdb->prefix . '_bbp_forum_subscriptions';
     532    $users = wp_cache_get( 'bbp_get_forum_subscribers_' . $forum_id, 'bbpress_users' );
     533    if ( false === $users ) {
     534        $users = $wpdb->get_col( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = '{$key}' and FIND_IN_SET('{$forum_id}', meta_value) > 0" );
     535        wp_cache_set( 'bbp_get_forum_subscribers_' . $forum_id, $users, 'bbpress_users' );
     536    }
     537
     538    return apply_filters( 'bbp_get_forum_subscribers', $users );
     539}
     540
     541/**
    515542 * Get the users who have subscribed to the topic
    516543 *
     
    544571 * @since bbPress (r2668)
    545572 *
     573 * @deprecated since bbPress (rxxxx)
     574 *
     575 * @param int $user_id Optional. User id
     576 * @uses bbp_get_user_topic_subscriptions() To get the user's subscriptions
     577 * @return array|bool Results if user has subscriptions, otherwise false
     578 */
     579function bbp_get_user_subscriptions( $user_id = 0 ) {
     580    _deprecated_function( __FUNCTION__, 2.5, 'bbp_get_user_topic_subscriptions()' );
     581    $query = bbp_get_user_topic_subscriptions( $user_id );
     582    return apply_filters( 'bbp_get_user_subscriptions', $query, $user_id );
     583}
     584
     585/**
     586 * Get a user's subscribed topics
     587 *
     588 * @since bbPress (r2668)
     589 *
    546590 * @param int $user_id Optional. User id
    547591 * @uses bbp_get_user_subscribed_topic_ids() To get the user's subscriptions
     
    551595 * @return array|bool Results if user has subscriptions, otherwise false
    552596 */
    553 function bbp_get_user_subscriptions( $user_id = 0 ) {
     597function bbp_get_user_topic_subscriptions( $user_id = 0 ) {
    554598
    555599    // Default to the displayed user
    556600    $user_id = bbp_get_user_id( $user_id );
    557     if ( empty( $user_id ) )
    558         return false;
     601    if ( empty( $user_id ) ) {
     602        return false;
     603    }
    559604
    560605    // If user has subscriptions, load them
     
    566611    }
    567612
    568     return apply_filters( 'bbp_get_user_subscriptions', $query, $user_id );
     613    return apply_filters( 'bbp_get_user_topic_subscriptions', $query, $user_id );
     614}
     615
     616/**
     617 * Get a user's subscribed forums
     618 *
     619 * @since bbPress (rxxxx)
     620 *
     621 * @param int $user_id Optional. User id
     622 * @uses bbp_get_user_subscribed_forum_ids() To get the user's subscriptions
     623 * @uses bbp_has_forums() To get the forums
     624 * @uses apply_filters() Calls 'bbp_get_user_forum_subscriptions' with the forum
     625 *                        query and user id
     626 * @return array|bool Results if user has subscriptions, otherwise false
     627 */
     628function bbp_get_user_forum_subscriptions( $user_id = 0 ) {
     629
     630    // Default to the displayed user
     631    $user_id = bbp_get_user_id( $user_id );
     632    if ( empty( $user_id ) ) {
     633        return false;
     634    }
     635
     636    // If user has subscriptions, load them
     637    $subscriptions = bbp_get_user_subscribed_forum_ids( $user_id );
     638    if ( !empty( $subscriptions ) ) {
     639        $query = bbp_has_forums( array( 'post__in' => $subscriptions ) );
     640    } else {
     641        $query = false;
     642    }
     643
     644    return apply_filters( 'bbp_get_user_forum_subscriptions', $query, $user_id );
     645}
     646
     647/**
     648 * Get a user's subscribed forum ids
     649 *
     650 * @since bbPress (rxxxx)
     651 *
     652 * @param int $user_id Optional. User id
     653 * @uses bbp_get_user_id() To get the user id
     654 * @uses get_user_option() To get the user's subscriptions
     655 * @uses apply_filters() Calls 'bbp_get_user_subscribed_forum_ids' with
     656 *                        the subscriptions and user id
     657 * @return array|bool Results if user has subscriptions, otherwise false
     658 */
     659function bbp_get_user_subscribed_forum_ids( $user_id = 0 ) {
     660    $user_id = bbp_get_user_id( $user_id );
     661    if ( empty( $user_id ) )
     662        return false;
     663
     664    $subscriptions = get_user_option( '_bbp_forum_subscriptions', $user_id );
     665    $subscriptions = array_filter( wp_parse_id_list( $subscriptions ) );
     666
     667    return (array) apply_filters( 'bbp_get_user_subscribed_forum_ids', $subscriptions, $user_id );
    569668}
    570669
     
    593692
    594693/**
     694 * Check if a topic or forum is in user's subscription list or not
     695 *
     696 * @since bbPress (rxxxx)
     697 *
     698 * @param int $user_id Optional. User id
     699 * @param int $forum_id Optional. Topic id
     700 * @uses get_post() To get the post object
     701 * @uses bbp_get_user_subscribed_forum_ids() To get the user's forum subscriptions
     702 * @uses bbp_get_user_subscribed_topic_ids() To get the user's topic subscriptions
     703 * @uses bbp_get_forum_post_type() To get the forum post type
     704 * @uses bbp_get_topic_post_type() To get the topic post type
     705 * @uses apply_filters() Calls 'bbp_is_user_subscribed' with the bool, user id,
     706 *                        forum/topic id and subsriptions
     707 * @return bool True if the forum or topic is in user's subscriptions, otherwise false
     708 */
     709function bbp_is_user_subscribed( $user_id = 0, $object_id = 0 ) {
     710
     711    // Assume user is not subscribed
     712    $retval = false;
     713
     714    // Setup ID's array
     715    $subscribed_ids = array();
     716
     717    // User and object ID's are passed
     718    if ( ! empty( $user_id ) && ! empty( $object_id ) ) {
     719
     720        // Get the post type
     721        $post_type = get_post_type( $object_id );
     722
     723        // Post exists, so check the types
     724        if ( ! empty( $post_type ) ) {
     725
     726            switch( $post_type ) {
     727
     728                // Forum
     729                case bbp_get_forum_post_type() :
     730                    $subscribed_ids = bbp_get_user_subscribed_forum_ids( $user_id );
     731                    $retval         = bbp_is_user_subscribed_to_forum( $user_id, $object_id, $subscribed_ids );
     732                    break;
     733
     734                // Topic (default)
     735                case bbp_get_topic_post_type() :
     736                default :
     737                    $subscribed_ids = bbp_get_user_subscribed_topic_ids( $user_id );
     738                    $retval         = bbp_is_user_subscribed_to_topic( $user_id, $object_id, $subscribed_ids );
     739                    break;
     740            }
     741        }
     742    }
     743
     744    return (bool) apply_filters( 'bbp_is_user_subscribed', $retval, $user_id, $object_id, $subscribed_ids );
     745}
     746
     747/**
     748 * Check if a forum is in user's subscription list or not
     749 *
     750 * @since bbPress (rxxxx)
     751 *
     752 * @param int $user_id Optional. User id
     753 * @param int $forum_id Optional. Topic id
     754 * @param array $subscribed_ids Optional. Array of forum ID's to check
     755 * @uses bbp_get_user_id() To get the user id
     756 * @uses bbp_get_user_subscribed_forum_ids() To get the user's subscriptions
     757 * @uses bbp_get_forum() To get the forum
     758 * @uses bbp_get_forum_id() To get the forum id
     759 * @uses apply_filters() Calls 'bbp_is_user_subscribed' with the bool, user id,
     760 *                        forum id and subsriptions
     761 * @return bool True if the forum is in user's subscriptions, otherwise false
     762 */
     763function bbp_is_user_subscribed_to_forum( $user_id = 0, $forum_id = 0, $subscribed_ids = array() ) {
     764
     765    // Assume user is not subscribed
     766    $retval = false;
     767
     768    // Validate user
     769    $user_id = bbp_get_user_id( $user_id, true, true );
     770    if ( ! empty( $user_id ) ) {
     771
     772        // Get subscription ID's if none passed
     773        if ( empty( $subscribed_ids ) ) {
     774            $subscribed_ids = bbp_get_user_subscribed_forum_ids( $user_id );
     775        }
     776
     777        // User has forum subscriptions
     778        if ( ! empty( $subscribed_ids ) ) {
     779
     780            // Checking a specific forum id
     781            if ( ! empty( $forum_id ) ) {
     782                $forum    = bbp_get_forum( $forum_id );
     783                $forum_id = ! empty( $forum ) ? $forum->ID : 0;
     784
     785            // Using the global forum id
     786            } elseif ( bbp_get_forum_id() ) {
     787                $forum_id = bbp_get_forum_id();
     788
     789            // Use the current post id
     790            } elseif ( ! bbp_get_forum_id() ) {
     791                $forum_id = get_the_ID();
     792            }
     793
     794            // Is forum_id in the user's favorites
     795            if ( ! empty( $forum_id ) ) {
     796                $retval = in_array( $forum_id, $subscribed_ids );
     797            }
     798        }
     799    }
     800
     801    return (bool) apply_filters( 'bbp_is_user_subscribed_to_forum', (bool) $retval, $user_id, $forum_id, $subscribed_ids );
     802}
     803
     804/**
    595805 * Check if a topic is in user's subscription list or not
    596806 *
    597  * @since bbPress (r2668)
     807 * @since bbPress (rxxxx)
    598808 *
    599809 * @param int $user_id Optional. User id
    600810 * @param int $topic_id Optional. Topic id
     811 * @param array $subscribed_ids Optional. Array of topic ID's to check
    601812 * @uses bbp_get_user_id() To get the user id
    602813 * @uses bbp_get_user_subscribed_topic_ids() To get the user's subscriptions
     
    607818 * @return bool True if the topic is in user's subscriptions, otherwise false
    608819 */
    609 function bbp_is_user_subscribed( $user_id = 0, $topic_id = 0 ) {
     820function bbp_is_user_subscribed_to_topic( $user_id = 0, $topic_id = 0, $subscribed_ids = array() ) {
     821
     822    // Assume user is not subscribed
     823    $retval = false;
    610824
    611825    // Validate user
    612826    $user_id = bbp_get_user_id( $user_id, true, true );
    613     if ( empty( $user_id ) )
    614         return false;
    615 
    616     $retval        = false;
    617     $subscriptions = bbp_get_user_subscribed_topic_ids( $user_id );
    618 
    619     if ( !empty( $subscriptions ) ) {
    620 
    621         // Checking a specific topic id
    622         if ( !empty( $topic_id ) ) {
    623             $topic     = bbp_get_topic( $topic_id );
    624             $topic_id = !empty( $topic ) ? $topic->ID : 0;
    625 
    626         // Using the global topic id
    627         } elseif ( bbp_get_topic_id() ) {
    628             $topic_id = bbp_get_topic_id();
    629 
    630         // Use the current post id
    631         } elseif ( !bbp_get_topic_id() ) {
    632             $topic_id = get_the_ID();
     827    if ( !empty( $user_id ) ) {
     828
     829        // Get subscription ID's if none passed
     830        if ( empty( $subscribed_ids ) ) {
     831            $subscribed_ids = bbp_get_user_subscribed_topic_ids( $user_id );
    633832        }
    634833
    635         // Is topic_id in the user's favorites
    636         if ( !empty( $topic_id ) ) {
    637             $retval = in_array( $topic_id, $subscriptions );
     834        // User has topic subscriptions
     835        if ( ! empty( $subscribed_ids ) ) {
     836
     837            // Checking a specific topic id
     838            if ( ! empty( $topic_id ) ) {
     839                $topic    = bbp_get_topic( $topic_id );
     840                $topic_id = ! empty( $topic ) ? $topic->ID : 0;
     841
     842            // Using the global topic id
     843            } elseif ( bbp_get_topic_id() ) {
     844                $topic_id = bbp_get_topic_id();
     845
     846            // Use the current post id
     847            } elseif ( !bbp_get_topic_id() ) {
     848                $topic_id = get_the_ID();
     849            }
     850
     851            // Is topic_id in the user's favorites
     852            if ( ! empty( $topic_id ) ) {
     853                $retval = in_array( $topic_id, $subscribed_ids );
     854            }
    638855        }
    639856    }
    640857
    641     return (bool) apply_filters( 'bbp_is_user_subscribed', (bool) $retval, $user_id, $topic_id, $subscriptions );
     858    return (bool) apply_filters( 'bbp_is_user_subscribed_to_topic', (bool) $retval, $user_id, $topic_id, $subscribed_ids );
     859}
     860
     861/**
     862 * Add a topic to user's subscriptions
     863 *
     864 * @since bbPress (rxxxx)
     865 *
     866 * @param int $user_id Optional. User id
     867 * @param int $topic_id Optional. Topic id
     868 * @uses get_post() To get the post object
     869 * @uses bbp_get_user_subscribed_forum_ids() To get the user's forum subscriptions
     870 * @uses bbp_get_user_subscribed_topic_ids() To get the user's topic subscriptions
     871 * @uses bbp_get_forum_post_type() To get the forum post type
     872 * @uses bbp_get_topic_post_type() To get the topic post type
     873 * @uses update_user_option() To update the user's subscriptions
     874 * @uses do_action() Calls 'bbp_add_user_subscription' with the user & topic id
     875 * @return bool Always true
     876 */
     877function bbp_add_user_subscription( $user_id = 0, $object_id = 0 ) {
     878    if ( empty( $user_id ) || empty( $object_id ) ) {
     879        return false;
     880    }
     881
     882    // Get the post type
     883    $post_type = get_post_type( $object_id );
     884    if ( empty( $post_type ) ) {
     885        return false;
     886    }
     887
     888    switch( $post_type ) {
     889
     890        // Forum
     891        case bbp_get_forum_post_type() :
     892            bbp_add_user_forum_subscription( $user_id, $object_id );
     893            break;
     894
     895        // Topic
     896        case bbp_get_topic_post_type() :
     897        default :
     898            bbp_add_user_topic_subscription( $user_id, $object_id );
     899            break;
     900    }
     901
     902    do_action( 'bbp_add_user_subscription', $user_id, $object_id, $post_type );
     903
     904    return true;
     905}
     906
     907/**
     908 * Add a forum to user's subscriptions
     909 *
     910 * @since bbPress (rxxxx)
     911 *
     912 * @param int $user_id Optional. User id
     913 * @param int $forum_id Optional. forum id
     914 * @uses bbp_get_user_subscribed_forum_ids() To get the user's subscriptions
     915 * @uses bbp_get_forum() To get the forum
     916 * @uses update_user_option() To update the user's subscriptions
     917 * @uses do_action() Calls 'bbp_add_user_subscription' with the user & forum id
     918 * @return bool Always true
     919 */
     920function bbp_add_user_forum_subscription( $user_id = 0, $forum_id = 0 ) {
     921    if ( empty( $user_id ) || empty( $forum_id ) ) {
     922        return false;
     923    }
     924
     925    $forum = bbp_get_forum( $forum_id );
     926    if ( empty( $forum ) ) {
     927        return false;
     928    }
     929
     930    $subscriptions = (array) bbp_get_user_subscribed_forum_ids( $user_id );
     931    if ( !in_array( $forum_id, $subscriptions ) ) {
     932        $subscriptions[] = $forum_id;
     933        $subscriptions   = implode( ',', wp_parse_id_list( array_filter( $subscriptions ) ) );
     934        update_user_option( $user_id, '_bbp_forum_subscriptions', $subscriptions );
     935
     936        wp_cache_delete( 'bbp_get_forum_subscribers_' . $forum_id, 'bbpress_users' );
     937    }
     938
     939    do_action( 'bbp_add_user_forum_subscription', $user_id, $forum_id );
     940
     941    return true;
    642942}
    643943
     
    655955 * @return bool Always true
    656956 */
    657 function bbp_add_user_subscription( $user_id = 0, $topic_id = 0 ) {
    658     if ( empty( $user_id ) || empty( $topic_id ) )
    659         return false;
     957function bbp_add_user_topic_subscription( $user_id = 0, $topic_id = 0 ) {
     958    if ( empty( $user_id ) || empty( $topic_id ) ) {
     959        return false;
     960    }
    660961
    661962    $topic = bbp_get_topic( $topic_id );
    662     if ( empty( $topic ) )
    663         return false;
     963    if ( empty( $topic ) ) {
     964        return false;
     965    }
    664966
    665967    $subscriptions = (array) bbp_get_user_subscribed_topic_ids( $user_id );
     
    672974    }
    673975
    674     do_action( 'bbp_add_user_subscription', $user_id, $topic_id );
     976    do_action( 'bbp_add_user_topic_subscription', $user_id, $topic_id );
    675977
    676978    return true;
     
    681983 *
    682984 * @since bbPress (r2668)
     985 *
     986 * @param int $user_id Optional. User id
     987 * @param int $topic_id Optional. Topic id
     988 * @uses get_post() To get the post object
     989 * @uses bbp_get_forum_post_type() To get the forum post type
     990 * @uses bbp_get_topic_post_type() To get the topic post type
     991 * @uses bbp_remove_user_forum_subscription() To remove the user's subscription
     992 * @uses bbp_remove_user_topic_subscription() To remove the user's subscription
     993 * @uses do_action() Calls 'bbp_remove_user_subscription' with the user id and
     994 *                    topic id
     995 * @return bool True if the topic was removed from user's subscriptions,
     996 *               otherwise false
     997 */
     998function bbp_remove_user_subscription( $user_id = 0, $object_id = 0 ) {
     999    if ( empty( $user_id ) || empty( $object_id ) ) {
     1000        return false;
     1001    }
     1002
     1003    $post_type = get_post_type( $object_id );
     1004    if ( empty( $post_type ) ) {
     1005        return false;
     1006    }
     1007
     1008    switch( $post_type ) {
     1009
     1010        // Forum
     1011        case bbp_get_forum_post_type() :
     1012            bbp_remove_user_forum_subscription( $user_id, $object_id );
     1013            break;
     1014
     1015        // Topic
     1016        case bbp_get_topic_post_type() :
     1017        default :
     1018            bbp_remove_user_topic_subscription( $user_id, $object_id );
     1019            break;
     1020    }
     1021
     1022    do_action( 'bbp_remove_user_subscription', $user_id, $object_id, $post_type );
     1023
     1024    return true;
     1025}
     1026
     1027/**
     1028 * Remove a forum from user's subscriptions
     1029 *
     1030 * @since bbPress (rxxxx)
     1031 *
     1032 * @param int $user_id Optional. User id
     1033 * @param int $forum_id Optional. forum id
     1034 * @uses bbp_get_user_subscribed_forum_ids() To get the user's subscriptions
     1035 * @uses update_user_option() To update the user's subscriptions
     1036 * @uses delete_user_option() To delete the user's subscriptions meta
     1037 * @uses do_action() Calls 'bbp_remove_user_subscription' with the user id and
     1038 *                    forum id
     1039 * @return bool True if the forum was removed from user's subscriptions,
     1040 *               otherwise false
     1041 */
     1042function bbp_remove_user_forum_subscription( $user_id, $forum_id ) {
     1043    if ( empty( $user_id ) || empty( $forum_id ) ) {
     1044        return false;
     1045    }
     1046
     1047    $subscriptions = (array) bbp_get_user_subscribed_forum_ids( $user_id );
     1048    if ( empty( $subscriptions ) ) {
     1049        return false;
     1050    }
     1051
     1052    $pos = array_search( $forum_id, $subscriptions );
     1053    if ( false === $pos ) {
     1054        return false;
     1055    }
     1056
     1057    array_splice( $subscriptions, $pos, 1 );
     1058    $subscriptions = array_filter( $subscriptions );
     1059
     1060    if ( !empty( $subscriptions ) ) {
     1061        $subscriptions = implode( ',', wp_parse_id_list( $subscriptions ) );
     1062        update_user_option( $user_id, '_bbp_forum_subscriptions', $subscriptions );
     1063    } else {
     1064        delete_user_option( $user_id, '_bbp_forum_subscriptions' );
     1065    }
     1066
     1067    wp_cache_delete( 'bbp_get_forum_subscribers_' . $forum_id, 'bbpress_users' );
     1068
     1069    do_action( 'bbp_remove_user_forum_subscription', $user_id, $forum_id );
     1070
     1071    return true;
     1072}
     1073
     1074/**
     1075 * Remove a topic from user's subscriptions
     1076 *
     1077 * @since bbPress (rxxxx)
    6831078 *
    6841079 * @param int $user_id Optional. User id
     
    6871082 * @uses update_user_option() To update the user's subscriptions
    6881083 * @uses delete_user_option() To delete the user's subscriptions meta
    689  * @uses do_action() Calls 'bbp_remove_user_subscription' with the user id and
     1084 * @uses do_action() Calls 'bbp_remove_user_topic_subscription' with the user id and
    6901085 *                    topic id
    6911086 * @return bool True if the topic was removed from user's subscriptions,
    6921087 *               otherwise false
    6931088 */
    694 function bbp_remove_user_subscription( $user_id, $topic_id ) {
    695     if ( empty( $user_id ) || empty( $topic_id ) )
    696         return false;
     1089function bbp_remove_user_topic_subscription( $user_id, $topic_id ) {
     1090    if ( empty( $user_id ) || empty( $topic_id ) ) {
     1091        return false;
     1092    }
    6971093
    6981094    $subscriptions = (array) bbp_get_user_subscribed_topic_ids( $user_id );
    699 
    700     if ( empty( $subscriptions ) )
    701         return false;
     1095    if ( empty( $subscriptions ) ) {
     1096        return false;
     1097    }
    7021098
    7031099    $pos = array_search( $topic_id, $subscriptions );
    704     if ( is_numeric( $pos ) ) {
    705         array_splice( $subscriptions, $pos, 1 );
    706         $subscriptions = array_filter( $subscriptions );
    707 
    708         if ( !empty( $subscriptions ) ) {
    709             $subscriptions = implode( ',', wp_parse_id_list( $subscriptions ) );
    710             update_user_option( $user_id, '_bbp_subscriptions', $subscriptions );
     1100    if ( false === $pos ) {
     1101        return false;
     1102    }
     1103
     1104    array_splice( $subscriptions, $pos, 1 );
     1105    $subscriptions = array_filter( $subscriptions );
     1106
     1107    if ( !empty( $subscriptions ) ) {
     1108        $subscriptions = implode( ',', wp_parse_id_list( $subscriptions ) );
     1109        update_user_option( $user_id, '_bbp_subscriptions', $subscriptions );
     1110    } else {
     1111        delete_user_option( $user_id, '_bbp_subscriptions' );
     1112    }
     1113
     1114    wp_cache_delete( 'bbp_get_topic_subscribers_' . $topic_id, 'bbpress_users' );
     1115
     1116    do_action( 'bbp_remove_user_topic_subscription', $user_id, $topic_id );
     1117
     1118    return true;
     1119}
     1120
     1121/**
     1122 * Handles the front end subscribing and unsubscribing forums
     1123 *
     1124 * @since bbPress (rxxxx)
     1125 *
     1126 * @param string $action The requested action to compare this function to
     1127 * @uses bbp_is_subscriptions_active() To check if the subscriptions are active
     1128 * @uses bbp_get_user_id() To get the user id
     1129 * @uses bbp_verify_nonce_request() To verify the nonce and check the request
     1130 * @uses current_user_can() To check if the current user can edit the user
     1131 * @uses bbPress:errors:add() To log the error messages
     1132 * @uses bbp_is_user_subscribed() To check if the forum is in user's
     1133 *                                 subscriptions
     1134 * @uses bbp_remove_user_subscription() To remove the user subscription
     1135 * @uses bbp_add_user_subscription() To add the user subscription
     1136 * @uses do_action() Calls 'bbp_subscriptions_handler' with success, user id,
     1137 *                    forum id and action
     1138 * @uses bbp_is_subscription() To check if it's the subscription page
     1139 * @uses bbp_get_forum_permalink() To get the forum permalink
     1140 * @uses wp_safe_redirect() To redirect to the url
     1141 */
     1142function bbp_forum_subscriptions_handler( $action = '' ) {
     1143
     1144    if ( ! bbp_is_subscriptions_active() ) {
     1145        return false;
     1146    }
     1147
     1148    // Bail if no forum ID is passed
     1149    if ( empty( $_GET['forum_id'] ) ) {
     1150        return;
     1151    }
     1152
     1153    // Setup possible get actions
     1154    $possible_actions = array(
     1155        'bbp_subscribe',
     1156        'bbp_unsubscribe',
     1157    );
     1158
     1159    // Bail if actions aren't meant for this function
     1160    if ( ! in_array( $action, $possible_actions ) ) {
     1161        return;
     1162    }
     1163
     1164    // Get required data
     1165    $user_id  = bbp_get_user_id( 0, true, true );
     1166    $forum_id = intval( $_GET['forum_id'] );
     1167
     1168    // Check for empty forum
     1169    if ( empty( $forum_id ) ) {
     1170        bbp_add_error( 'bbp_subscription_forum_id', __( '<strong>ERROR</strong>: No forum was found! Which forum are you subscribing/unsubscribing to?', 'bbpress' ) );
     1171
     1172    // Check nonce
     1173    } elseif ( ! bbp_verify_nonce_request( 'toggle-subscription_' . $forum_id ) ) {
     1174        bbp_add_error( 'bbp_subscription_forum_id', __( '<strong>ERROR</strong>: Are you sure you wanted to do that?', 'bbpress' ) );
     1175
     1176    // Check current user's ability to edit the user
     1177    } elseif ( !current_user_can( 'edit_user', $user_id ) ) {
     1178        bbp_add_error( 'bbp_subscription_permissions', __( '<strong>ERROR</strong>: You don\'t have the permission to edit favorites of that user!', 'bbpress' ) );
     1179    }
     1180
     1181    // Bail if we have errors
     1182    if ( bbp_has_errors() ) {
     1183        return;
     1184    }
     1185
     1186    /** No errors *************************************************************/
     1187
     1188    $is_subscription = bbp_is_user_subscribed( $user_id, $forum_id );
     1189    $success         = false;
     1190
     1191    if ( true === $is_subscription && 'bbp_unsubscribe' === $action ) {
     1192        $success = bbp_remove_user_subscription( $user_id, $forum_id );
     1193    } elseif ( false === $is_subscription && 'bbp_subscribe' === $action ) {
     1194        $success = bbp_add_user_subscription( $user_id, $forum_id );
     1195    }
     1196
     1197    // Do additional subscriptions actions
     1198    do_action( 'bbp_subscriptions_handler', $success, $user_id, $forum_id, $action );
     1199
     1200    // Success!
     1201    if ( true === $success ) {
     1202
     1203        // Redirect back from whence we came
     1204        if ( bbp_is_subscriptions() ) {
     1205            $redirect = bbp_get_subscriptions_permalink( $user_id );
     1206        } elseif ( bbp_is_single_user() ) {
     1207            $redirect = bbp_get_user_profile_url();
     1208        } elseif ( is_singular( bbp_get_forum_post_type() ) ) {
     1209            $redirect = bbp_get_forum_permalink( $forum_id );
     1210        } elseif ( is_single() || is_page() ) {
     1211            $redirect = get_permalink();
    7111212        } else {
    712             delete_user_option( $user_id, '_bbp_subscriptions' );
     1213            $redirect = get_permalink( $forum_id );
    7131214        }
    7141215
    715         wp_cache_delete( 'bbp_get_topic_subscribers_' . $topic_id, 'bbpress_users' );
    716     }
    717 
    718     do_action( 'bbp_remove_user_subscription', $user_id, $topic_id );
    719 
    720     return true;
     1216        wp_safe_redirect( $redirect );
     1217
     1218        // For good measure
     1219        exit();
     1220
     1221    // Fail! Handle errors
     1222    } elseif ( true === $is_subscription && 'bbp_unsubscribe' === $action ) {
     1223        bbp_add_error( 'bbp_unsubscribe', __( '<strong>ERROR</strong>: There was a problem unsubscribing from that forum!', 'bbpress' ) );
     1224    } elseif ( false === $is_subscription && 'bbp_subscribe' === $action ) {
     1225        bbp_add_error( 'bbp_subscribe',    __( '<strong>ERROR</strong>: There was a problem subscribing to that forum!', 'bbpress' ) );
     1226    }
    7211227}
    7221228
     
    7371243 *                    topic id and action
    7381244 * @uses bbp_is_subscription() To check if it's the subscription page
    739  * @uses bbp_get_subscription_link() To get the subscription page link
    7401245 * @uses bbp_get_topic_permalink() To get the topic permalink
    7411246 * @uses wp_safe_redirect() To redirect to the url
     
    7431248function bbp_subscriptions_handler( $action = '' ) {
    7441249
    745     if ( !bbp_is_subscriptions_active() )
    746         return false;
     1250    if ( !bbp_is_subscriptions_active() ) {
     1251        return false;
     1252    }
    7471253
    7481254    // Bail if no topic ID is passed
    749     if ( empty( $_GET['topic_id'] ) )
    750         return;
     1255    if ( empty( $_GET['topic_id'] ) ) {
     1256        return;
     1257    }
    7511258
    7521259    // Setup possible get actions
     
    7571264
    7581265    // Bail if actions aren't meant for this function
    759     if ( !in_array( $action, $possible_actions ) )
    760         return;
     1266    if ( !in_array( $action, $possible_actions ) ) {
     1267        return;
     1268    }
    7611269
    7621270    // Get required data
     
    7781286
    7791287    // Bail if we have errors
    780     if ( bbp_has_errors() )
    781         return;
     1288    if ( bbp_has_errors() ) {
     1289        return;
     1290    }
    7821291
    7831292    /** No errors *************************************************************/
     
    7861295    $success         = false;
    7871296
    788     if ( true === $is_subscription && 'bbp_unsubscribe' === $action )
     1297    if ( true === $is_subscription && 'bbp_unsubscribe' === $action ) {
    7891298        $success = bbp_remove_user_subscription( $user_id, $topic_id );
    790     elseif ( false === $is_subscription && 'bbp_subscribe' === $action )
     1299    } elseif ( false === $is_subscription && 'bbp_subscribe' === $action ) {
    7911300        $success = bbp_add_user_subscription( $user_id, $topic_id );
     1301    }
    7921302
    7931303    // Do additional subscriptions actions
     
    9691479 */
    9701480function bbp_get_user_topics_started( $user_id = 0 ) {
    971    
     1481
    9721482    // Validate user
    9731483    $user_id = bbp_get_user_id( $user_id );
     
    9941504 */
    9951505function bbp_get_user_replies_created( $user_id = 0 ) {
    996    
     1506
    9971507    // Validate user
    9981508    $user_id = bbp_get_user_id( $user_id );
     
    10321542 * met. We assume a user cannot perform this task, and look for ways they can
    10331543 * earn the ability to access this template.
    1034  * 
     1544 *
    10351545 * @since bbPress (r3605)
    10361546 *
Note: See TracChangeset for help on using the changeset viewer.