Changeset 1044

Show
Ignore:
Timestamp:
01/20/08 19:23:29 (11 months ago)
Author:
sambauers
Message:

New topic (first post only) feeds for front-page and forums. Fixes #742

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/bb-admin/rewrite-rules.php

    r980 r1044  
    3030RewriteRule ^view/([^/]+)/?$ <?php bb_option( 'path' ); ?>view.php?view=$1 [L,QSA] 
    3131RewriteRule ^rss/?$ <?php bb_option( 'path' ); ?>rss.php [L,QSA] 
     32RewriteRule ^rss/topics/?$ <?php bb_option( 'path' ); ?>rss.php?topics=1 [L,QSA] 
    3233RewriteRule ^rss/forum/([^/]+)/?$ <?php bb_option( 'path' ); ?>rss.php?forum=$1 [L,QSA] 
     34RewriteRule ^rss/forum/([^/]+)/topics/?$ <?php bb_option( 'path' ); ?>rss.php?forum=$1&topics=1 [L,QSA] 
    3335RewriteRule ^rss/topic/([^/]+)/?$ <?php bb_option( 'path' ); ?>rss.php?topic=$1 [L,QSA] 
    3436RewriteRule ^rss/tags/([^/]+)/?$ <?php bb_option( 'path' ); ?>rss.php?tag=$1 [L,QSA] 
  • trunk/bb-includes/deprecated.php

    r1007 r1044  
    531531} 
    532532 
     533// Old RSS related functions 
     534function get_recent_rss_link() { 
     535        return bb_get_posts_rss_link(); 
     536} 
     537 
     538function forum_rss_link( $forum_id = 0 ) { 
     539        echo bb_get_forum_posts_rss_link( $forum_id ); 
     540} 
     541 
     542function get_forum_rss_link( $forum_id = 0 ) { 
     543        return bb_get_forum_posts_rss_link( $forum_id ); 
     544} 
     545 
    533546?> 
  • trunk/bb-includes/template-functions.php

    r1040 r1044  
    346346 
    347347function bb_feed_head() { 
    348         $feed_link = ''; 
    349         if ( is_topic() ) 
    350                 $feed_link = '<link rel="alternate" type="application/rss+xml" title="' . attribute_escape( sprintf( __('Topic: %s'), get_topic_title() ) ) . '" href="' . attribute_escape( get_topic_rss_link() ) . '" />'; 
    351         elseif ( is_bb_tag() ) 
    352                 $feed_link = '<link rel="alternate" type="application/rss+xml" title="' . attribute_escape( sprintf( __('Tag: %s'), bb_get_tag_name() ) ) . '" href="' . attribute_escape( bb_get_tag_rss_link() ) . '" />'; 
    353         elseif ( is_forum() ) 
    354                 $feed_link = '<link rel="alternate" type="application/rss+xml" title="' . attribute_escape( sprintf( __('Forum: %s'), get_forum_name() ) ) . '" href="' . attribute_escape( get_forum_rss_link() ) . '" />'; 
    355         elseif ( is_front() ) 
    356                 $feed_link = '<link rel="alternate" type="application/rss+xml" title="' . attribute_escape( __('Recent Posts') ) . '" href="' . attribute_escape( get_recent_rss_link() ) . '" />'; 
    357         echo apply_filters('bb_feed_head', $feed_link); 
    358 
    359  
    360 function get_recent_rss_link() { 
     348         
     349        $feeds = array(); 
     350         
     351        switch (bb_get_location()) { 
     352                case 'topic-page': 
     353                        $feeds[] = array( 
     354                                'title' => sprintf(__('Topic: %s'), get_topic_title()), 
     355                                'href'  => get_topic_rss_link() 
     356                        ); 
     357                        break; 
     358                 
     359                case 'tag-page': 
     360                        if (is_bb_tag()) { 
     361                                $feeds[] = array( 
     362                                        'title' => sprintf(__('Tag: %s'), bb_get_tag_name()), 
     363                                        'href'  => bb_get_tag_rss_link() 
     364                                ); 
     365                        } 
     366                        break; 
     367                 
     368                case 'forum-page': 
     369                        $feeds[] = array( 
     370                                'title' => sprintf(__('Forum: %s - Recent Posts'), get_forum_name()), 
     371                                'href'  => get_forum_rss_link() 
     372                        ); 
     373                        $feeds[] = array( 
     374                                'title' => sprintf(__('Forum: %s - Recent Topics'), get_forum_name()), 
     375                                'href'  => bb_get_forum_topics_rss_link() 
     376                        ); 
     377                        break; 
     378                 
     379                case 'front-page': 
     380                        $feeds[] = array( 
     381                                'title' => __('Recent Posts'), 
     382                                'href'  => bb_get_posts_rss_link() 
     383                        ); 
     384                        $feeds[] = array( 
     385                                'title' => __('Recent Topics'), 
     386                                'href'  => bb_get_topics_rss_link() 
     387                        ); 
     388                        break; 
     389        } 
     390         
     391        if (count($feeds)) { 
     392                $feed_links = array(); 
     393                foreach ($feeds as $feed) { 
     394                        $link = '<link rel="alternate" type="application/rss+xml" '; 
     395                        $link .= 'title="' . attribute_escape($feed['title']) . '" '; 
     396                        $link .= 'href="' . attribute_escape($feed['href']) . '" />'; 
     397                        $feed_links[] = $link; 
     398                } 
     399                $feed_links = join("\n", $feed_links); 
     400        } else { 
     401                $feed_links = ''; 
     402        } 
     403         
     404        echo apply_filters('bb_feed_head', $feed_links); 
     405
     406 
     407function bb_get_posts_rss_link() { 
    361408        if ( bb_get_option( 'mod_rewrite' ) ) 
    362409                $link = bb_get_option( 'uri' ) . 'rss/'; 
    363410        else 
    364411                $link = bb_get_option( 'uri' ) . "rss.php"; 
    365         return apply_filters( 'get_recent_rss_link', $link ); 
     412        return apply_filters( 'bb_get_posts_rss_link', $link ); 
     413
     414 
     415function bb_get_topics_rss_link() { 
     416        if ( bb_get_option( 'mod_rewrite' ) ) 
     417                $link = bb_get_option( 'uri' ) . 'rss/topics'; 
     418        else 
     419                $link = bb_get_option( 'uri' ) . "rss.php?topics=1"; 
     420        return apply_filters( 'bb_get_topics_rss_link', $link ); 
    366421} 
    367422 
     
    467522} 
    468523 
    469 function forum_rss_link( $forum_id = 0 ) { 
    470         echo apply_filters('forum_rss_link', get_forum_rss_link( $forum_id ) ); 
    471 } 
    472  
    473 function get_forum_rss_link( $forum_id = 0 ) { 
     524function bb_forum_posts_rss_link( $forum_id = 0 ) { 
     525        echo apply_filters('bb_forum_posts_rss_link', bb_get_forum_posts_rss_link( $forum_id ) ); 
     526} 
     527 
     528function bb_get_forum_posts_rss_link( $forum_id = 0 ) { 
    474529        $forum = get_forum( get_forum_id( $forum_id ) ); 
    475530        if ( bb_get_option('mod_rewrite') ) 
     
    478533                $link = bb_get_option('uri') . "rss.php?forum=$forum->forum_id"; 
    479534 
    480         return apply_filters( 'get_forum_rss_link', $link, $forum_id ); 
     535        return apply_filters( 'bb_get_forum_posts_rss_link', $link, $forum_id ); 
     536
     537 
     538function bb_forum_topics_rss_link( $forum_id = 0 ) { 
     539        echo apply_filters('bb_forum_topics_rss_link', bb_get_forum_topics_rss_link( $forum_id ) ); 
     540
     541 
     542function bb_get_forum_topics_rss_link( $forum_id = 0 ) { 
     543        $forum = get_forum( get_forum_id( $forum_id ) ); 
     544        if ( bb_get_option('mod_rewrite') ) 
     545                $link = bb_get_option('uri') . "rss/forum/$forum->forum_id/topics"; 
     546        else 
     547                $link = bb_get_option('uri') . "rss.php?forum=$forum->forum_id&amp;topics=1"; 
     548 
     549        return apply_filters( 'bb_get_forum_topics_rss_link', $link, $forum_id ); 
    481550} 
    482551 
  • trunk/rss.php

    r939 r1044  
    33require_once( BBPATH . BBINC . 'feed-functions.php'); 
    44 
    5 if ( isset($_GET['topic']) ) 
    6         $topic_id = (int) $_GET['topic']; 
    7 elseif ( 'topic' == get_path() ) 
    8         $topic_id = (int) get_path(2); 
     5// Determine the type of feed and the id of the object 
     6if ( isset($_GET['topic']) || get_path() == 'topic' ) { 
     7         
     8        // Topic 
     9        $feed = 'topic'; 
     10        $feed_id = isset($_GET['topic']) ? $_GET['topic'] : get_path(2); 
     11         
     12} elseif ( isset($_GET['profile']) || get_path() == 'profile' ) { 
     13         
     14        // Profile 
     15        $feed = 'profile'; 
     16        $feed_id = isset($_GET['profile']) ? $_GET['profile'] : get_path(2); 
     17         
     18} elseif ( isset($_GET['tag']) || get_path() == 'tag' ) { 
     19         
     20        // Tag 
     21        $feed = 'tag'; 
     22        $feed_id = isset($_GET['tag']) ? $_GET['tag'] : get_path(2); 
     23         
     24} elseif ( isset($_GET['forum']) || get_path() == 'forum' ) { 
     25         
     26        if ( isset($_GET['topics']) || get_path(3) == 'topics' ) { 
     27                // Forum recent topics 
     28                $feed = 'forum-topics'; 
     29        } else { 
     30                // Forum recent posts 
     31                $feed = 'forum-posts'; 
     32        } 
     33        $feed_id = isset($_GET['forum']) ? $_GET['forum'] : get_path(2); 
     34         
     35} elseif ( isset($_GET['topics']) || get_path() == 'topics' ) { 
     36         
     37        // Recent topics 
     38        $feed = 'all-topics'; 
     39         
     40} else { 
     41         
     42        // Recent posts 
     43        $feed = 'all-posts'; 
     44         
     45
    946 
    10 elseif ( isset($_GET['profile']) ) 
    11         $user_id = (int) $_GET['profile']; 
    12 elseif ( 'profile' == get_path() ) 
    13         $user_id = (int) get_path(2); 
    14  
    15 elseif ( isset($_GET['tag']) ) 
    16         $tag = $_GET['tag']; 
    17 elseif ( 'tags' == get_path() ) 
    18         $tag = get_path(2); 
    19  
    20 elseif ( isset($_GET['forum']) ) 
    21         $forum_id = (int) $_GET['forum']; 
    22 elseif ( 'forum' == get_path() ) 
    23         $forum_id = (int) get_path(2); 
    24  
     47// Initialise the override variable 
    2548$bb_db_override = false; 
    2649do_action( 'bb_rss.php_pre_db', '' ); 
    2750 
    28 if ( !$bb_db_override ) : 
    29 if ( isset($topic_id) ) { 
    30         if ( !$topic = get_topic ( $topic_id ) ) 
    31                 die(); 
    32         if ( !$posts = get_thread( $topic_id, 0, 1 ) ) 
    33                 die(); 
    34         $title = wp_specialchars( bb_get_option( 'name' ) . ' ' . __('Topic') . ': ' . get_topic_title() ); 
    35 } elseif ( isset($user_id) ) { 
    36         if ( !$user = bb_get_user( $user_id ) ) 
    37                 die(); 
    38         if ( !$posts = get_user_favorites( $user->ID ) ) 
    39                 die(); 
    40         $title = wp_specialchars( bb_get_option( 'name' ) . ' ' . __('User Favorites') . ': ' . $user->user_login ); 
    41 } elseif ( isset($tag) ) { 
    42         if ( !$tag = bb_get_tag_by_name($tag) ) 
    43                 die(); 
    44         if ( !$posts = get_tagged_topic_posts( $tag->tag_id, 0 ) ) 
    45                 die(); 
    46         $title = wp_specialchars( bb_get_option( 'name' ) . ' ' . __('Tag') . ': ' . bb_get_tag_name() ); 
    47 } elseif ( isset($forum_id) ) { 
    48         if ( !$posts = get_latest_forum_posts( $forum_id ) ) 
    49                 die(); 
    50         $title = wp_specialchars( bb_get_option( 'name' ) ) . ' ' . __('Forum') . ': ' . get_forum_name( $forum_id ); 
    51 } else { 
    52         if ( !$posts = get_latest_posts( 35 ) ) 
    53                 die(); 
    54         $title = wp_specialchars( bb_get_option( 'name' ) ) . ': ' . __('Last 35 Posts'); 
     51if ( !$bb_db_override ) { 
     52         
     53        // Get the posts and the title for the given feed 
     54        switch ($feed) { 
     55                case 'topic': 
     56                        if ( !$topic = get_topic ( $feed_id ) ) 
     57                                die(); 
     58                        if ( !$posts = get_thread( $feed_id, 0, 1 ) ) 
     59                                die(); 
     60                        $title = wp_specialchars( bb_get_option( 'name' ) . ' ' . __('Topic') . ': ' . get_topic_title() ); 
     61                        break; 
     62                 
     63                case 'profile': 
     64                        if ( !$user = bb_get_user( $feed_id ) ) 
     65                                if ( !$user = bb_get_user_by_name( $feed_id ) ) 
     66                                        die(); 
     67                        if ( !$posts = get_user_favorites( $user->ID ) ) 
     68                                die(); 
     69                        $title = wp_specialchars( bb_get_option( 'name' ) . ' ' . __('User Favorites') . ': ' . $user->user_login ); 
     70                        break; 
     71                 
     72                case 'tag': 
     73                        if ( !$tag = bb_get_tag_by_name( $feed_id ) ) 
     74                                die(); 
     75                        if ( !$posts = get_tagged_topic_posts( $tag->tag_id, 0 ) ) 
     76                                die(); 
     77                        $title = wp_specialchars( bb_get_option( 'name' ) . ' ' . __('Tag') . ': ' . bb_get_tag_name() ); 
     78                        break; 
     79                 
     80                case 'forum-topics': 
     81                        if ( !$topics = get_latest_topics( $feed_id ) ) 
     82                                die(); 
     83                         
     84                        $posts = array(); 
     85                        foreach ($topics as $topic) { 
     86                                $posts[] = bb_get_first_post($topic->topic_id); 
     87                        } 
     88                         
     89                        $title = wp_specialchars( bb_get_option( 'name' ) ) . ': ' . __('Forum') . ': ' . get_forum_name( $feed_id ) . ' - ' . __('Recent Topics'); 
     90                        break; 
     91                 
     92                case 'forum-posts': 
     93                        if ( !$posts = get_latest_forum_posts( $feed_id ) ) 
     94                                die(); 
     95                        $title = wp_specialchars( bb_get_option( 'name' ) ) . ': ' . __('Forum') . ': ' . get_forum_name( $feed_id ) . ' - ' . __('Recent Posts'); 
     96                        break; 
     97                 
     98                // Get just the first post from the latest topics 
     99                case 'all-topics': 
     100                        if ( !$topics = get_latest_topics() ) 
     101                                die(); 
     102                         
     103                        $posts = array(); 
     104                        foreach ($topics as $topic) { 
     105                                $posts[] = bb_get_first_post($topic->topic_id); 
     106                        } 
     107                         
     108                        $title = wp_specialchars( bb_get_option( 'name' ) ) . ': ' . __('Recent Topics'); 
     109                        break; 
     110                 
     111                // Get latest posts by default 
     112                case 'all-posts': 
     113                default: 
     114                        if ( !$posts = get_latest_posts( 35 ) ) 
     115                                die(); 
     116                        $title = wp_specialchars( bb_get_option( 'name' ) ) . ': ' . __('Recent Posts'); 
     117                        break; 
     118        } 
    55119} 
    56 endif; 
    57120 
    58121do_action( 'bb_rss.php', '' );