Skip to:
Content

bbPress.org

Changeset 3171


Ignore:
Timestamp:
05/18/2011 12:08:18 PM (14 years ago)
Author:
johnjamesjacoby
Message:

First pass at RSS feeds. See #1422.

Location:
branches/plugin/bbp-includes
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/plugin/bbp-includes/bbp-core-hooks.php

    r3169 r3171  
    209209
    210210/** FILTERS *******************************************************************/
     211
     212// Feeds
     213add_filter( 'request', 'bbp_request_feed_trap' );
    211214
    212215// Links
  • branches/plugin/bbp-includes/bbp-general-functions.php

    r3151 r3171  
    10231023}
    10241024
     1025/** Feeds *********************************************************************/
     1026
     1027/**
     1028 * This function is hooked into the WordPress 'request' action and is
     1029 * responsible for sniffing out the query vars and serving up RSS2 feeds if
     1030 * the stars align and the user has requested a feed of any bbPress type.
     1031 *
     1032 * @since bbPress (r3171)
     1033 *
     1034 * @global WP_Query $wp_query
     1035 * @global bbPress $bbp
     1036 * @param array $query_vars
     1037 * @return array
     1038 */
     1039function bbp_request_feed_trap( $query_vars ) {
     1040    global $wp_query, $bbp;
     1041
     1042    // Looking at a feed
     1043    if ( isset( $query_vars['feed'] ) ) {
     1044
     1045        // Forum Feed
     1046        if ( isset( $query_vars['post_type'] ) ) {
     1047
     1048            // What bbPress post type are we looking for feeds on?
     1049            switch ( $query_vars['post_type'] ) {
     1050
     1051                // Forum
     1052                case bbp_get_forum_post_type() :
     1053
     1054                    // Single forum
     1055                    if ( isset( $query_vars[bbp_get_forum_post_type()] ) ) {
     1056
     1057                        // Load up our own query
     1058                        $wp_query = new WP_Query( array(
     1059                            'post_type' => bbp_get_forum_post_type(),
     1060                            'name'      => $query_vars[bbp_get_forum_post_type()]
     1061                        ) );
     1062
     1063                        // Forum replies
     1064                        if ( !empty( $_GET['type'] ) && ( bbp_get_reply_post_type() == $_GET['type'] ) ) {
     1065
     1066                            // The query
     1067                            $the_query = array(
     1068                                'author'         => 0,
     1069                                'post_type'      => bbp_get_reply_post_type(),
     1070                                'post_parent'    => 'any',
     1071                                'post_status'    => join( ',', array( 'publish', $bbp->closed_status_id ) ),
     1072                                'posts_per_page' => get_option( '_bbp_replies_per_rss_page', 25 ),
     1073                                'order'          => 'DESC',
     1074                                'meta_query'     => array( array(
     1075                                    'key'        => '_bbp_forum_id',
     1076                                    'value'      => bbp_get_forum_id(),
     1077                                    'compare'    => '='
     1078                                ) )
     1079                            );
     1080
     1081                            // Output the feed
     1082                            bbp_display_replies_feed_rss2( $the_query );
     1083
     1084                        // Forum topics
     1085                        } else {
     1086
     1087                            // The query
     1088                            $the_query = array(
     1089                                'author'         => 0,
     1090                                'post_type'      => bbp_get_topic_post_type(),
     1091                                'post_parent'    => bbp_get_forum_id(),
     1092                                'post_status'    => join( ',', array( 'publish', $bbp->closed_status_id ) ),
     1093                                'posts_per_page' => get_option( '_bbp_topics_per_rss_page', 25 ),
     1094                                'order'          => 'DESC',
     1095                                'meta_query'     => array( array(
     1096                                    'key'        => '_bbp_forum_id',
     1097                                    'value'      => bbp_get_forum_id(),
     1098                                    'compare'    => '='
     1099                                ) )
     1100                            );
     1101
     1102                            // Output the feed
     1103                            bbp_display_topics_feed_rss2( $the_query );
     1104                        }
     1105                    }
     1106
     1107                    break;
     1108
     1109                // Topic - Show replies
     1110                case bbp_get_topic_post_type() :
     1111
     1112                    // Single topic
     1113                    if ( isset( $query_vars[bbp_get_topic_post_type()] ) ) {
     1114
     1115                        // Load up our own query
     1116                        $wp_query = new WP_Query( array(
     1117                            'post_type' => bbp_get_topic_post_type(),
     1118                            'name'      => $query_vars[bbp_get_topic_post_type()]
     1119                        ) );
     1120
     1121                        // Output the feed
     1122                        bbp_display_replies_feed_rss2();
     1123
     1124                    // All topics
     1125                    } else {
     1126
     1127                        // The query
     1128                        $the_query = array(
     1129                            'author'         => 0,
     1130                            'post_parent'    => 'any',
     1131                            'posts_per_page' => get_option( '_bbp_topics_per_rss_page', 25 ),
     1132                            'show_stickies'  => false,
     1133                        );
     1134
     1135                        // Output the feed
     1136                        bbp_display_topics_feed_rss2( $the_query );
     1137                    }
     1138
     1139                    break;
     1140
     1141                // Replies
     1142                case bbp_get_reply_post_type() :
     1143
     1144                    // The query
     1145                    $the_query = array(
     1146                        'posts_per_page' => get_option( '_bbp_replies_per_rss_page', 25 ),
     1147                        'meta_query'     => array( array( ) )
     1148                    );
     1149
     1150                    // All replies
     1151                    if ( !isset( $query_vars[bbp_get_reply_post_type()] ) ) {
     1152                        bbp_display_replies_feed_rss2( $the_query );
     1153                    }
     1154
     1155                    break;
     1156            }
     1157        }
     1158    }
     1159
     1160    // No feed so continue on
     1161    return $query_vars;
     1162}
     1163
    10251164?>
  • branches/plugin/bbp-includes/bbp-reply-functions.php

    r3125 r3171  
    937937}
    938938
     939/** Feeds *********************************************************************/
     940
     941/**
     942 * Output an RSS2 feed of replies, based on the query passed.
     943 *
     944 * @since bbPress (r3171)
     945 *
     946 * @global bbPress $bbp
     947 *
     948 * @uses bbp_exclude_forum_ids()
     949 * @uses bbp_is_topic()
     950 * @uses bbp_user_can_view_forum()
     951 * @uses bbp_get_topic_forum_id()
     952 * @uses bbp_show_load_topic()
     953 * @uses bbp_topic_permalink()
     954 * @uses bbp_topic_title()
     955 * @uses bbp_get_topic_reply_count()
     956 * @uses bbp_topic_content()
     957 * @uses bbp_has_replies()
     958 * @uses bbp_replies()
     959 * @uses bbp_the_reply()
     960 * @uses bbp_reply_url()
     961 * @uses bbp_reply_title()
     962 * @uses bbp_reply_content()
     963 * @uses get_wp_title_rss()
     964 * @uses get_option()
     965 * @uses bloginfo_rss
     966 * @uses self_link()
     967 * @uses the_author()
     968 * @uses get_post_time()
     969 * @uses rss_enclosure()
     970 * @uses do_action()
     971 * @uses apply_filters()
     972 *
     973 * @param array $replies_query
     974 */
     975function bbp_display_replies_feed_rss2( $replies_query = array() ) {
     976    global $bbp;
     977
     978    // User cannot access forum this topic is in
     979    if ( bbp_is_topic() && !bbp_user_can_view_forum( array( 'forum_id' => bbp_get_topic_forum_id() ) ) )
     980        return;
     981
     982    // Remove any replies from hidden forums
     983    $replies_query = bbp_exclude_forum_ids( $replies_query );
     984
     985    // Adjust the title based on context
     986    if ( bbp_is_topic() && bbp_user_can_view_forum( array( 'forum_id' => bbp_get_topic_forum_id() ) ) )
     987        $title = apply_filters( 'wp_title_rss', get_wp_title_rss( ' » ' ) );
     988    elseif ( !bbp_show_lead_topic() )
     989        $title = ' » ' .  __( 'All Posts',   'bbpress' );
     990    else
     991        $title = ' » ' .  __( 'All Replies', 'bbpress' );
     992
     993    // Display the feed
     994    header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true );
     995    header( 'Status: 200 OK' );
     996    echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
     997
     998    <rss version="2.0"
     999        xmlns:content="http://purl.org/rss/1.0/modules/content/"
     1000        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     1001        xmlns:dc="http://purl.org/dc/elements/1.1/"
     1002        xmlns:atom="http://www.w3.org/2005/Atom"
     1003
     1004        <?php do_action( 'bbp_feed' ); ?>
     1005    >
     1006
     1007    <channel>
     1008        <title><?php bloginfo_rss('name'); echo $title; ?></title>
     1009        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
     1010        <link><?php self_link(); ?></link>
     1011        <description><?php //?></description>
     1012        <pubDate><?php echo mysql2date( 'D, d M Y H:i:s O', '', false ); ?></pubDate>
     1013        <generator>http://bbpress.org/?v=<?php echo BBP_VERSION; ?></generator>
     1014        <language><?php echo get_option( 'rss_language' ); ?></language>
     1015
     1016        <?php do_action( 'bbp_feed_head' ); ?>
     1017
     1018        <?php if ( bbp_is_topic() ) : ?>
     1019            <?php if ( bbp_user_can_view_forum( array( 'forum_id' => bbp_get_topic_forum_id() ) ) ) : ?>
     1020                <?php if ( bbp_show_lead_topic() ) : ?>
     1021
     1022                    <item>
     1023                        <guid><?php bbp_topic_permalink(); ?></guid>
     1024                        <title><![CDATA[<?php bbp_topic_title(); ?>]]></title>
     1025                        <link><?php bbp_topic_permalink(); ?></link>
     1026                        <pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false ); ?></pubDate>
     1027                        <dc:creator><?php the_author(); ?></dc:creator>
     1028
     1029                        <description>
     1030                            <![CDATA[
     1031                            <p><?php printf( __( 'Replies: %s', 'bbpress' ), bbp_get_topic_reply_count() ); ?></p>
     1032                            <?php bbp_topic_content(); ?>
     1033                            ]]>
     1034                        </description>
     1035
     1036                        <?php rss_enclosure(); ?>
     1037
     1038                        <?php do_action( 'bbp_feed_item' ); ?>
     1039
     1040                    </item>
     1041
     1042                <?php endif; ?>
     1043            <?php endif; ?>
     1044        <?php endif; ?>
     1045
     1046        <?php if ( bbp_has_replies( $replies_query ) ) : ?>
     1047            <?php while ( bbp_replies() ) : bbp_the_reply(); ?>
     1048
     1049                <item>
     1050                    <guid><?php bbp_reply_url(); ?></guid>
     1051                    <title><![CDATA[<?php bbp_reply_title(); ?>]]></title>
     1052                    <link><?php bbp_reply_url(); ?></link>
     1053                    <pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false ); ?></pubDate>
     1054                    <dc:creator><?php the_author() ?></dc:creator>
     1055
     1056                    <description>
     1057                        <![CDATA[
     1058                        <?php bbp_reply_content(); ?>
     1059                        ]]>
     1060                    </description>
     1061
     1062                    <?php rss_enclosure(); ?>
     1063
     1064                    <?php do_action( 'bbp_feed_item' ); ?>
     1065
     1066                </item>
     1067
     1068            <?php endwhile; ?>
     1069        <?php endif; ?>
     1070
     1071        <?php do_action( 'bbp_feed_footer' ); ?>
     1072
     1073    </channel>
     1074    </rss>
     1075
     1076<?php
     1077
     1078    // We're done here
     1079    exit();
     1080}
    9391081
    9401082?>
  • branches/plugin/bbp-includes/bbp-topic-functions.php

    r3141 r3171  
    25122512}
    25132513
     2514/** Feeds *********************************************************************/
     2515
     2516/**
     2517 * Output an RSS2 feed of topics, based on the query passed.
     2518 *
     2519 * @since bbPress (r3171)
     2520 *
     2521 * @global bbPress $bbp
     2522 *
     2523 * @uses bbp_exclude_forum_ids()
     2524 * @uses bbp_is_topic()
     2525 * @uses bbp_user_can_view_forum()
     2526 * @uses bbp_get_topic_forum_id()
     2527 * @uses bbp_show_load_topic()
     2528 * @uses bbp_topic_permalink()
     2529 * @uses bbp_topic_title()
     2530 * @uses bbp_get_topic_reply_count()
     2531 * @uses bbp_topic_content()
     2532 * @uses bbp_has_topics()
     2533 * @uses bbp_topics()
     2534 * @uses bbp_the_topic()
     2535 * @uses get_wp_title_rss()
     2536 * @uses get_option()
     2537 * @uses bloginfo_rss
     2538 * @uses self_link()
     2539 * @uses the_author()
     2540 * @uses get_post_time()
     2541 * @uses rss_enclosure()
     2542 * @uses do_action()
     2543 * @uses apply_filters()
     2544 *
     2545 * @param array $topics_query
     2546 */
     2547function bbp_display_topics_feed_rss2( $topics_query = array() ) {
     2548    global $bbp;
     2549
     2550    // User cannot access forum this topic is in
     2551    if ( bbp_is_topic() && !bbp_user_can_view_forum( array( 'forum_id' => bbp_get_topic_forum_id() ) ) )
     2552        return;
     2553
     2554    // Remove any topics from hidden forums
     2555    $topics_query = bbp_exclude_forum_ids( $topics_query );
     2556
     2557    // Display the feed
     2558    header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true );
     2559    header( 'Status: 200 OK' );
     2560    echo '<?xml version="1.0" encoding="' . get_option( 'blog_charset' ) . '"?' . '>'; ?>
     2561
     2562    <rss version="2.0"
     2563        xmlns:content="http://purl.org/rss/1.0/modules/content/"
     2564        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     2565        xmlns:dc="http://purl.org/dc/elements/1.1/"
     2566        xmlns:atom="http://www.w3.org/2005/Atom"
     2567
     2568        <?php do_action( 'bbp_feed' ); ?>
     2569    >
     2570
     2571    <channel>
     2572
     2573        <title><?php bloginfo_rss( 'name' ); ?> &#187; <?php _e( 'All Topics', 'bbpress' ); ?></title>
     2574        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
     2575        <link><?php self_link(); ?></link>
     2576        <description><?php //?></description>
     2577        <pubDate><?php echo mysql2date( 'D, d M Y H:i:s O', '', false ); ?></pubDate>
     2578        <generator>http://bbpress.org/?v=<?php echo BBP_VERSION; ?></generator>
     2579        <language><?php echo get_option( 'rss_language' ); ?></language>
     2580
     2581        <?php do_action( 'bbp_feed_head' ); ?>
     2582
     2583        <?php if ( bbp_has_topics( $topics_query ) ) : ?>
     2584
     2585            <?php while ( bbp_topics() ) : bbp_the_topic(); ?>
     2586
     2587                <item>
     2588                    <guid><?php bbp_topic_permalink(); ?></guid>
     2589                    <title><![CDATA[<?php bbp_topic_title(); ?>]]></title>
     2590                    <link><?php bbp_topic_permalink(); ?></link>
     2591                    <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_meta( bbp_get_topic_id(), '_bbp_last_active_time', true ) ); ?></pubDate>
     2592                    <dc:creator><?php the_author() ?></dc:creator>
     2593
     2594                    <?php if ( !post_password_required() ) : ?>
     2595
     2596                    <description>
     2597                        <![CDATA[
     2598                        <p><?php printf( __( 'Replies: %s', 'bbpress' ), bbp_get_topic_reply_count() ); ?></p>
     2599                        <?php bbp_topic_content(); ?>
     2600                        ]]>
     2601                    </description>
     2602
     2603                    <?php rss_enclosure(); ?>
     2604
     2605                    <?php endif; ?>
     2606
     2607                    <?php do_action( 'bbp_feed_item' ); ?>
     2608
     2609                </item>
     2610
     2611                <?php endwhile; ?>
     2612            <?php endif; ?>
     2613
     2614        <?php do_action( 'bbp_feed_footer' ); ?>
     2615
     2616    </channel>
     2617    </rss>
     2618
     2619<?php
     2620    exit();
     2621}
     2622
    25142623?>
Note: See TracChangeset for help on using the changeset viewer.