Skip to:
Content

bbPress.org

Ticket #2336: 2336.patch

File 2336.patch, 18.0 KB (added by johnjamesjacoby, 12 years ago)
  • bbpress.php

     
    55 *
    66 * bbPress is forum software with a twist from the creators of WordPress.
    77 *
    8  * $Id$
     8 * $Id: bbpress.php 4893 2013-05-06 21:53:04Z johnjamesjacoby $
    99 *
    1010 * @package bbPress
    1111 * @subpackage Main
     
    235235                $this->favs_id           = apply_filters( 'bbp_favs_id',   'bbp_favs'   );
    236236                $this->subs_id           = apply_filters( 'bbp_subs_id',   'bbp_subs'   );
    237237                $this->view_id           = apply_filters( 'bbp_view_id',   'bbp_view'   );
    238                 $this->search_id         = apply_filters( 'bbp_search_id', 'bbp_search' );
    239238                $this->edit_id           = apply_filters( 'bbp_edit_id',   'edit'       );
     239                $this->paged_id          = apply_filters( 'bbp_paged_id',  'paged'      );
     240                $this->search_id         = apply_filters( 'bbp_search_id', 'bbp_search' );
    240241
    241242                /** Queries ***********************************************************/
    242243
     
    369370                        'register_theme_packages',  // Register bundled theme packages (bbp-theme-compat/bbp-themes)
    370371                        'load_textdomain',          // Load textdomain (bbpress)
    371372                        'add_rewrite_tags',         // Add rewrite tags (view|user|edit|search)
    372                         'generate_rewrite_rules'    // Generate rewrite rules (view|edit|search)
     373                        'generate_rewrite_rules',   // Generate rewrite rules (view|edit|paged|search)
     374                        'add_permastructs'          // Add permalink structures (view|user|search)
    373375                );
    374376
    375377                // Add the actions
     
    854856         * @uses add_rewrite_tag() To add the rewrite tags
    855857         */
    856858        public static function add_rewrite_tags() {
    857                 add_rewrite_tag( '%%' . bbp_get_view_rewrite_id()               . '%%', '([^/]+)'   ); // View Page tag
    858                 add_rewrite_tag( '%%' . bbp_get_edit_rewrite_id()               . '%%', '([1]{1,})' ); // Edit Page tag
    859                 add_rewrite_tag( '%%' . bbp_get_search_rewrite_id()             . '%%', '([^/]+)'   ); // Search Results tag
    860                 add_rewrite_tag( '%%' . bbp_get_user_rewrite_id()               . '%%', '([^/]+)'   ); // User Profile tag
    861                 add_rewrite_tag( '%%' . bbp_get_user_favorites_rewrite_id()     . '%%', '([1]{1,})' ); // User Favorites tag
    862                 add_rewrite_tag( '%%' . bbp_get_user_subscriptions_rewrite_id() . '%%', '([1]{1,})' ); // User Subscriptions tag
    863                 add_rewrite_tag( '%%' . bbp_get_user_topics_rewrite_id()        . '%%', '([1]{1,})' ); // User Topics Tag
    864                 add_rewrite_tag( '%%' . bbp_get_user_replies_rewrite_id()       . '%%', '([1]{1,})' ); // User Replies Tag
     859
     860                // Get the unique ID's
     861                $edit_id      = 'edit';
     862                $view_id      = bbp_get_view_rewrite_id();
     863                $search_id    = bbp_get_search_rewrite_id();
     864                $user_id      = bbp_get_user_rewrite_id();
     865                $user_favs_id = bbp_get_user_favorites_rewrite_id();
     866                $user_subs_id = bbp_get_user_subscriptions_rewrite_id();
     867                $user_tops_id = bbp_get_user_topics_rewrite_id();
     868                $user_reps_id = bbp_get_user_replies_rewrite_id();
     869
     870                // Setup the rewrite tags
     871                add_rewrite_tag( '%' . $view_id      . '%', '([^/]+)'   ); // View Page tag
     872                add_rewrite_tag( '%' . $edit_id      . '%', '([1]{1,})' ); // Edit Page tag
     873                add_rewrite_tag( '%' . $search_id    . '%', '([^/]+)'   ); // Search Results tag
     874                add_rewrite_tag( '%' . $user_id      . '%', '([^/]+)'   ); // User Profile tag
     875                add_rewrite_tag( '%' . $user_favs_id . '%', '([1]{1,})' ); // User Favorites tag
     876                add_rewrite_tag( '%' . $user_subs_id . '%', '([1]{1,})' ); // User Subscriptions tag
     877                add_rewrite_tag( '%' . $user_tops_id . '%', '([1]{1,})' ); // User Topics Tag
     878                add_rewrite_tag( '%' . $user_reps_id . '%', '([1]{1,})' ); // User Replies Tag
    865879        }
    866880
    867881        /**
     
    872886         * - User profiles
    873887         *
    874888         * @since bbPress (r2688)
    875          * @param WP_Rewrite $wp_rewrite bbPress-sepecific rules are appended in
    876          *                                $wp_rewrite->rules
    877889         */
    878         public static function generate_rewrite_rules( $wp_rewrite ) {
     890        public static function generate_rewrite_rules() {
    879891
    880                 // Slugs
    881                 $view_slug   = bbp_get_view_slug();
    882                 $search_slug = bbp_get_search_slug();
    883                 $user_slug   = bbp_get_user_slug();
     892                // Single Slugs
     893                $forum_slug         = bbp_get_forum_slug();
     894                $topic_slug         = bbp_get_topic_slug();
     895                $reply_slug         = bbp_get_reply_slug();
     896                $ttag_slug          = bbp_get_topic_tag_tax_slug();
    884897
     898                // Archive Slugs
     899                $user_slug          = bbp_get_user_slug();
     900                $view_slug          = bbp_get_view_slug();
     901                $search_slug        = bbp_get_search_slug();
     902                $topic_archive_slug = bbp_get_topic_archive_slug();
     903                $reply_archive_slug = bbp_get_reply_archive_slug();
     904
     905                // Tertiary Slugs
     906                $feed_slug          = 'feed';
     907                $edit_slug          = 'edit';
     908                $paged_slug         = bbp_get_paged_slug();
     909                $user_favs_slug     = bbp_get_user_favorites_slug();
     910                $user_subs_slug     = bbp_get_user_subscriptions_slug();
     911
    885912                // Unique rewrite ID's
    886                 $edit_id     = bbp_get_edit_rewrite_id();
    887                 $view_id     = bbp_get_view_rewrite_id();
    888                 $search_id   = bbp_get_search_rewrite_id();
    889                 $user_id     = bbp_get_user_rewrite_id();
    890                 $favs_id     = bbp_get_user_favorites_rewrite_id();
    891                 $subs_id     = bbp_get_user_subscriptions_rewrite_id();
    892                 $tops_id     = bbp_get_user_topics_rewrite_id();
    893                 $reps_id     = bbp_get_user_replies_rewrite_id();
     913                $feed_id            = 'feed';
     914                $edit_id            = 'edit';
     915                $view_id            = bbp_get_view_rewrite_id();
     916                $paged_id           = bbp_get_paged_rewrite_id();
     917                $search_id          = bbp_get_search_rewrite_id();
     918                $user_id            = bbp_get_user_rewrite_id();
     919                $user_favs_id       = bbp_get_user_favorites_rewrite_id();
     920                $user_subs_id       = bbp_get_user_subscriptions_rewrite_id();
     921                $user_tops_id       = bbp_get_user_topics_rewrite_id();
     922                $user_reps_id       = bbp_get_user_replies_rewrite_id();
    894923
    895924                // Rewrite rule matches used repeatedly below
    896                 $root_rule   = '/([^/]+)/?$';
    897                 $edit_rule   = '/([^/]+)/edit/?$';
    898                 $feed_rule   = '/([^/]+)/feed/?$';
    899                 $page_rule   = '/([^/]+)/page/?([0-9]{1,})/?$';
     925                $root_rule    = '/([^/]+)/?$';
     926                $feed_rule    = '/([^/]+)/' . $feed_slug  . '/?$';
     927                $edit_rule    = '/([^/]+)/' . $edit_slug  . '/?$';
     928                $paged_rule   = '/([^/]+)/' . $paged_slug . '/?([0-9]{1,})/?$';
    900929
    901930                // Search rules (without slug check)
    902                 $search_root_rule = '/?$';
    903                 $search_page_rule = '/page/?([0-9]{1,})/?$';
     931                $search_root_rule  = '/?$';
     932                $search_paged_rule = '/' . $paged_slug . '/?([0-9]{1,})/?$';
    904933
    905934                // User profile rules
    906                 $tops_rule      = '/([^/]+)/topics/?$';
    907                 $reps_rule      = '/([^/]+)/replies/?$';
    908                 $favs_rule      = '/([^/]+)/' . bbp_get_user_favorites_slug()     . '/?$';
    909                 $subs_rule      = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/?$';
    910                 $tops_page_rule = '/([^/]+)/topics/page/?([0-9]{1,})/?$';
    911                 $reps_page_rule = '/([^/]+)/replies/page/?([0-9]{1,})/?$';
    912                 $favs_page_rule = '/([^/]+)/' . bbp_get_user_favorites_slug()     . '/page/?([0-9]{1,})/?$';
    913                 $subs_page_rule = '/([^/]+)/' . bbp_get_user_subscriptions_slug() . '/page/?([0-9]{1,})/?$';
     935                $tops_rule       = '/([^/]+)/' . $topic_archive_slug . '/?$';
     936                $reps_rule       = '/([^/]+)/' . $reply_archive_slug . '/?$';
     937                $favs_rule       = '/([^/]+)/' . $user_favs_slug     . '/?$';
     938                $subs_rule       = '/([^/]+)/' . $user_subs_slug    . '/?$';
     939                $tops_paged_rule = '/([^/]+)/' . $topic_archive_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$';
     940                $reps_paged_rule = '/([^/]+)/' . $reply_archive_slug . '/' . $paged_slug . '/?([0-9]{1,})/?$';
     941                $favs_paged_rule = '/([^/]+)/' . $user_favs_slug     . '/' . $paged_slug . '/?([0-9]{1,})/?$';
     942                $subs_paged_rule = '/([^/]+)/' . $user_subs_slug     . '/' . $paged_slug . '/?([0-9]{1,})/?$';
    914943
    915                 // New bbPress specific rules to merge with existing that are not
    916                 // handled automatically by custom post types or taxonomy types
    917                 $bbp_rules = array(
     944                /** Rewrite Rules *****************************************************/
    918945
    919                         // Edit Forum|Topic|Reply|Topic-tag
    920                         bbp_get_forum_slug()         . $edit_rule => 'index.php?' . bbp_get_forum_post_type()  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
    921                         bbp_get_topic_slug()         . $edit_rule => 'index.php?' . bbp_get_topic_post_type()  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
    922                         bbp_get_reply_slug()         . $edit_rule => 'index.php?' . bbp_get_reply_post_type()  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
    923                         bbp_get_topic_tag_tax_slug() . $edit_rule => 'index.php?' . bbp_get_topic_tag_tax_id() . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
     946                // Edit Forum|Topic|Reply|Topic-tag
     947                add_rewrite_rule( $forum_slug . $edit_rule, 'index.php?' . bbp_get_forum_post_type()  . '=$matches[1]&' . $edit_id . '=1', 'top' );
     948                add_rewrite_rule( $topic_slug . $edit_rule, 'index.php?' . bbp_get_topic_post_type()  . '=$matches[1]&' . $edit_id . '=1', 'top' );
     949                add_rewrite_rule( $reply_slug . $edit_rule, 'index.php?' . bbp_get_reply_post_type()  . '=$matches[1]&' . $edit_id . '=1', 'top' );
     950                add_rewrite_rule( $ttag_slug  . $edit_rule, 'index.php?' . bbp_get_topic_tag_tax_id() . '=$matches[1]&' . $edit_id . '=1', 'top' );
    924951
    925                         // User Pagination|Edit|View
    926                         $user_slug . $tops_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $tops_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
    927                         $user_slug . $reps_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $reps_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
    928                         $user_slug . $favs_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $favs_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
    929                         $user_slug . $subs_page_rule => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $subs_id . '=1&paged=' . $wp_rewrite->preg_index( 2 ),
    930                         $user_slug . $tops_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $tops_id . '=1',
    931                         $user_slug . $reps_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $reps_id . '=1',
    932                         $user_slug . $favs_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $favs_id . '=1',
    933                         $user_slug . $subs_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $subs_id . '=1',
    934                         $user_slug . $edit_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ) . '&' . $edit_id . '=1',
    935                         $user_slug . $root_rule      => 'index.php?' . $user_id  . '=' . $wp_rewrite->preg_index( 1 ),
     952                // User Pagination|Edit|View
     953                add_rewrite_rule( $user_slug . $tops_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_tops_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
     954                add_rewrite_rule( $user_slug . $reps_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_reps_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
     955                add_rewrite_rule( $user_slug . $favs_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_favs_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
     956                add_rewrite_rule( $user_slug . $subs_paged_rule, 'index.php?' . $user_id  . '=$matches[1]&' . $user_subs_id . '=1&' . $paged_id . '=$matches[2]', 'top' );
     957                add_rewrite_rule( $user_slug . $tops_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_tops_id . '=1',                               'top' );
     958                add_rewrite_rule( $user_slug . $reps_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_reps_id . '=1',                               'top' );
     959                add_rewrite_rule( $user_slug . $favs_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_favs_id . '=1',                               'top' );
     960                add_rewrite_rule( $user_slug . $subs_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $user_subs_id . '=1',                               'top' );
     961                add_rewrite_rule( $user_slug . $edit_rule,       'index.php?' . $user_id  . '=$matches[1]&' . $edit_id      . '=1',                               'top' );
     962                add_rewrite_rule( $user_slug . $root_rule,       'index.php?' . $user_id  . '=$matches[1]',                                                       'top' );
    936963
    937                         // Topic-View Pagination|Feed|View
    938                         $view_slug . $page_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    939                         $view_slug . $feed_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ) . '&feed='  . $wp_rewrite->preg_index( 2 ),
    940                         $view_slug . $root_rule => 'index.php?' . $view_id . '=' . $wp_rewrite->preg_index( 1 ),
     964                // Topic-View Pagination|Feed|View
     965                add_rewrite_rule( $view_slug . $paged_rule, 'index.php?' . $view_id . '=$matches[1]&' . $paged_id . '=$matches[2]', 'top' );
     966                add_rewrite_rule( $view_slug . $feed_rule,  'index.php?' . $view_id . '=$matches[1]&' . $feed_id  . '=$matches[2]', 'top' );
     967                add_rewrite_rule( $view_slug . $root_rule,  'index.php?' . $view_id . '=$matches[1]',                               'top' );
    941968
    942                         // Search All
    943                         $search_slug . $search_page_rule => 'index.php?paged=' . $wp_rewrite->preg_index( 1 ),
    944                         $search_slug . $search_root_rule => 'index.php?' . $search_id,
    945                 );
     969                // Search All
     970                add_rewrite_rule( $search_slug . $search_paged_rule, 'index.php?' . $paged_id .'=$matches[1]', 'top' );
     971                add_rewrite_rule( $search_slug . $search_root_rule,  'index.php?' . $search_id,                'top' );
     972        }
    946973
    947                 // Merge bbPress rules with existing
    948                 $wp_rewrite->rules = array_merge( $bbp_rules, $wp_rewrite->rules );
     974        public function add_permastructs() {
    949975
    950                 // Return merged rules
    951                 return $wp_rewrite;
     976                // Get unique ID's
     977                $user_id     = bbp_get_user_rewrite_id();
     978                $view_id     = bbp_get_view_rewrite_id();
     979                $search_id   = bbp_get_search_rewrite_id();
     980
     981                // Get root slugs
     982                $user_slug   = bbp_get_user_slug();
     983                $view_slug   = bbp_get_view_slug();
     984                $search_slug = bbp_get_search_slug();
     985
     986                // User Permastruct
     987                add_permastruct( $user_id, $user_slug . '/%' . $user_id . '%', array(
     988                        'with_front'  => false,
     989                        'ep_mask'     => EP_NONE,
     990                        'paged'       => false,
     991                        'feed'        => false,
     992                        'forcomments' => false,
     993                        'walk_dirs'   => true,
     994                        'endpoints'   => true,
     995                ) );
     996
     997                // Topic View Permastruct
     998                add_permastruct( $view_id, $view_slug . '/%' . $view_id . '%', array(
     999                        'with_front'  => false,
     1000                        'ep_mask'     => EP_NONE,
     1001                        'paged'       => false,
     1002                        'feed'        => false,
     1003                        'forcomments' => false,
     1004                        'walk_dirs'   => true,
     1005                        'endpoints'   => true,
     1006                ) );
     1007
     1008                // Search Permastruct
     1009                add_permastruct( $user_id, $search_slug . '/%' . $search_id . '%', array(
     1010                        'with_front'  => false,
     1011                        'ep_mask'     => EP_NONE,
     1012                        'paged'       => true,
     1013                        'feed'        => false,
     1014                        'forcomments' => false,
     1015                        'walk_dirs'   => true,
     1016                        'endpoints'   => true,
     1017                ) );
    9521018        }
    9531019}
    9541020
  • includes/core/actions.php

     
    4141add_action( 'init',                     'bbp_init',                     0     ); // Early for bbp_register
    4242add_action( 'parse_query',              'bbp_parse_query',              2     ); // Early for overrides
    4343add_action( 'widgets_init',             'bbp_widgets_init',             10    );
    44 add_action( 'generate_rewrite_rules',   'bbp_generate_rewrite_rules',   10    );
    4544add_action( 'wp_enqueue_scripts',       'bbp_enqueue_scripts',          10    );
    4645add_action( 'wp_head',                  'bbp_head',                     10    );
    4746add_action( 'wp_footer',                'bbp_footer',                   10    );
     
    7473 *
    7574 * Attach various initialization actions to the init action.
    7675 * The load order helps to execute code at the correct time.
    77  *                                              v---Load order
     76 *                                                    v---Load order
    7877 */
    79 add_action( 'bbp_init', 'bbp_load_textdomain',  0   );
    80 add_action( 'bbp_init', 'bbp_register',         0   );
    81 add_action( 'bbp_init', 'bbp_add_rewrite_tags', 20  );
    82 add_action( 'bbp_init', 'bbp_ready',            999 );
     78add_action( 'bbp_init', 'bbp_load_textdomain',        0   );
     79add_action( 'bbp_init', 'bbp_register',               0   );
     80add_action( 'bbp_init', 'bbp_add_rewrite_tags',       20  );
     81add_action( 'bbp_init', 'bbp_generate_rewrite_rules', 30  );
     82add_action( 'bbp_init', 'bbp_add_permastructs',       40  );
     83add_action( 'bbp_init', 'bbp_ready',                  999 );
    8384
    8485/**
    8586 * There is no action API for roles to use, so hook in immediately after
  • includes/core/functions.php

     
    507507        return bbpress()->view_id;
    508508}
    509509
     510/** Rewrite Extras ************************************************************/
     511
    510512/**
     513 * Get the id used for paginated requests
     514 *
     515 * @since bbPress (rxxxx)
     516 * @return string
     517 */
     518function bbp_get_paged_rewrite_id() {
     519        return bbpress()->paged_id;
     520}
     521
     522/**
     523 * Get the slug used for paginated requests
     524 *
     525 * @since bbPress (rxxxx)
     526 * @global object $wp_rewrite The WP_Rewrite object
     527 * @return string
     528 */
     529function bbp_get_paged_slug() {
     530        global $wp_rewrite;
     531        return $wp_rewrite->pagination_base;
     532}
     533
     534/**
    511535 * Delete a blogs rewrite rules, so that they are automatically rebuilt on
    512536 * the subsequent page load.
    513537 *
  • includes/core/options.php

     
    6161
    6262                '_bbp_root_slug'            => 'forums',    // Forum archive slug
    6363                '_bbp_topic_archive_slug'   => 'topics',    // Topic archive slug
     64                '_bbp_reply_archive_slug'   => 'replies',   // Reply archive slug
    6465
    6566                /** Single Slugs ******************************************************/
    6667
     
    431432}
    432433
    433434/**
     435 * Return the reply archive slug
     436 *
     437 * @since bbPress (r3759)
     438 * @return string
     439 */
     440function bbp_get_reply_archive_slug( $default = 'replies' ) {
     441        return apply_filters( 'bbp_get_reply_archive_slug', get_option( '_bbp_reply_archive_slug', $default ) );
     442}
     443
     444/**
    434445 * Return the single topic slug
    435446 *
    436447 * @since bbPress (r3759)
  • includes/core/sub-actions.php

     
    233233}
    234234
    235235/**
     236 * Add the bbPress-specific permalink structures
     237 *
     238 * @since bbPress (rxxxx)
     239 * @uses do_action() Calls 'bbp_add_permastructs'
     240 */
     241function bbp_add_permastructs() {
     242        do_action( 'bbp_add_permastructs' );
     243}
     244
     245/**
    236246 * Add the bbPress-specific login forum action
    237247 *
    238248 * @since bbPress (r2753)