Skip to:
Content

bbPress.org

Ticket #1799: 1799.11.diff

File 1799.11.diff, 36.3 KB (added by netweb, 6 years ago)

Latest patch with PHPDoc tweaks

  • src/includes/core/actions.php

     
    255255add_action( 'bbp_approved_reply',   'bbp_update_reply_walker' );
    256256add_action( 'bbp_unapproved_reply', 'bbp_update_reply_walker' );
    257257
    258 // Users topic & reply counts
     258// Update forum topic/reply counts.
     259add_action( 'bbp_new_reply',        'bbp_increase_forum_reply_count'        );
     260add_action( 'bbp_new_topic',        'bbp_increase_forum_topic_count'        );
     261add_action( 'bbp_trashed_reply',    'bbp_decrease_forum_reply_count'        );
     262add_action( 'bbp_trashed_topic',    'bbp_decrease_forum_topic_count'        );
     263add_action( 'bbp_trashed_topic',    'bbp_increase_forum_topic_count_hidden' );
     264add_action( 'bbp_untrashed_reply',  'bbp_increase_forum_reply_count'        );
     265add_action( 'bbp_untrashed_topic',  'bbp_increase_forum_topic_count'        );
     266add_action( 'bbp_untrashed_topic',  'bbp_decrease_forum_topic_count_hidden' );
     267add_action( 'bbp_spammed_reply',    'bbp_decrease_forum_reply_count'        );
     268add_action( 'bbp_spammed_topic',    'bbp_decrease_forum_topic_count'        );
     269add_action( 'bbp_spammed_topic',    'bbp_increase_forum_topic_count_hidden' );
     270add_action( 'bbp_unspammed_reply',  'bbp_increase_forum_reply_count'        );
     271add_action( 'bbp_unspammed_topic',  'bbp_increase_forum_topic_count'        );
     272add_action( 'bbp_unspammed_topic',  'bbp_decrease_forum_topic_count_hidden' );
     273add_action( 'bbp_approved_reply',   'bbp_increase_forum_reply_count'        );
     274add_action( 'bbp_approved_topic',   'bbp_increase_forum_topic_count'        );
     275add_action( 'bbp_approved_topic',   'bbp_decrease_forum_topic_count_hidden' );
     276add_action( 'bbp_unapproved_reply', 'bbp_decrease_forum_reply_count'        );
     277add_action( 'bbp_unapproved_topic', 'bbp_decrease_forum_topic_count'        );
     278add_action( 'bbp_unapproved_topic', 'bbp_increase_forum_topic_count_hidden' );
     279
     280// Update forum reply counts for approved/unapproved topics.
     281add_action( 'bbp_approved_topic',   'bbp_approved_unapproved_topic_update_forum_reply_count' );
     282add_action( 'bbp_unapproved_topic', 'bbp_approved_unapproved_topic_update_forum_reply_count' );
     283
     284// Update topic reply counts.
     285add_action( 'bbp_new_reply',        'bbp_increase_topic_reply_count'        );
     286add_action( 'bbp_trashed_reply',    'bbp_decrease_topic_reply_count'        );
     287add_action( 'bbp_trashed_reply',    'bbp_increase_topic_reply_count_hidden' );
     288add_action( 'bbp_untrashed_reply',  'bbp_increase_topic_reply_count'        );
     289add_action( 'bbp_untrashed_reply',  'bbp_decrease_topic_reply_count_hidden' );
     290add_action( 'bbp_spammed_reply',    'bbp_decrease_topic_reply_count'        );
     291add_action( 'bbp_spammed_reply',    'bbp_increase_topic_reply_count_hidden' );
     292add_action( 'bbp_unspammed_reply',  'bbp_increase_topic_reply_count'        );
     293add_action( 'bbp_unspammed_reply',  'bbp_decrease_topic_reply_count_hidden' );
     294add_action( 'bbp_approved_reply',   'bbp_increase_topic_reply_count'        );
     295add_action( 'bbp_approved_reply',   'bbp_decrease_topic_reply_count_hidden' );
     296add_action( 'bbp_unapproved_reply', 'bbp_decrease_topic_reply_count'        );
     297add_action( 'bbp_unapproved_reply', 'bbp_increase_topic_reply_count_hidden' );
     298
     299// Users topic & reply counts.
    259300add_action( 'bbp_new_topic',     'bbp_increase_user_topic_count' );
    260301add_action( 'bbp_new_reply',     'bbp_increase_user_reply_count' );
    261302add_action( 'bbp_untrash_topic', 'bbp_increase_user_topic_count' );
     
    267308add_action( 'bbp_spam_topic',    'bbp_decrease_user_topic_count' );
    268309add_action( 'bbp_spam_reply',    'bbp_decrease_user_reply_count' );
    269310
     311// Insert topic/reply counts.
     312add_action( 'bbp_insert_topic', 'bbp_insert_topic_update_counts', 10, 2 );
     313add_action( 'bbp_insert_reply', 'bbp_insert_reply_update_counts', 10, 3 );
     314
    270315// Topic status transition helpers for replies
    271316add_action( 'bbp_trash_topic',   'bbp_trash_topic_replies'   );
    272317add_action( 'bbp_untrash_topic', 'bbp_untrash_topic_replies' );
  • src/includes/forums/functions.php

     
    7373                'forum_id' => $forum_id,
    7474        ) );
    7575
     76        /**
     77         * Fires after forum has been inserted via `bbp_insert_forum`.
     78         *
     79         * @since 2.6.0 bbPress (r6036)
     80         *
     81         * @param int $forum_id The forum id.
     82         */
     83        do_action( 'bbp_insert_forum', (int) $forum_id );
     84
    7685        // Return new forum ID
    7786        return $forum_id;
    7887}
     
    11411150                if ( ! empty( $ancestors ) ) {
    11421151                        foreach ( (array) $ancestors as $parent_forum_id ) {
    11431152
    1144                                 // Get forum counts
    1145                                 $parent_topic_count       = bbp_get_forum_topic_count( $parent_forum_id, false, true );
     1153                                // Only update topic count when an ancestor is not a category.
     1154                                if ( ! bbp_is_forum_category( $parent_forum_id ) ) {
     1155
     1156                                        $parent_topic_count = bbp_get_forum_topic_count( $parent_forum_id, false, true );
     1157                                        update_post_meta( $parent_forum_id, '_bbp_topic_count', (int) ( $parent_topic_count + $difference ) );
     1158                                }
     1159
     1160                                // Update the total topic count.
    11461161                                $parent_total_topic_count = bbp_get_forum_topic_count( $parent_forum_id, true,  true );
    1147 
    1148                                 // Update counts
    1149                                 update_post_meta( $parent_forum_id, '_bbp_topic_count',       (int) ( $parent_topic_count       + $difference ) );
    11501162                                update_post_meta( $parent_forum_id, '_bbp_total_topic_count', (int) ( $parent_total_topic_count + $difference ) );
    11511163                        }
    11521164                }
     
    11581170}
    11591171
    11601172/**
     1173 * Increase the total topic count of a forum by one.
     1174 *
     1175 * @since 2.6.0 bbPress (r6036)
     1176 *
     1177 * @param int $forum_id The forum id.
     1178 *
     1179 * @uses bbp_is_topic() To get the topic id
     1180 * @uses bbp_get_topic_forum_id() To get the topics forum id
     1181 * @uses bbp_is_topic_published() To get the topics published status
     1182 * @uses bbp_is_topic_closed() To get the topics closed status
     1183 * @uses bbp_increase_forum_topic_count_hidden() To increase the forums hidden
     1184 *                                                topic count by 1
     1185 * @uses bbp_bump_forum_topic_count() To bump the forum topic count
     1186 *
     1187 * @return void
     1188 */
     1189function bbp_increase_forum_topic_count( $forum_id = 0 ) {
     1190
     1191        // Bail early if no id is passed.
     1192        if ( empty( $forum_id ) ) {
     1193                return;
     1194        }
     1195
     1196        // If it's a topic, get the forum id.
     1197        if ( bbp_is_topic( $forum_id ) ) {
     1198                $topic_id = $forum_id;
     1199                $forum_id = bbp_get_topic_forum_id( $topic_id );
     1200
     1201                // If this is a new, unpublished, topic, increase hidden count and bail.
     1202                if ( 'bbp_new_topic' === current_filter() && ( ! bbp_is_topic_published( $topic_id ) && ! bbp_is_topic_closed( $topic_id ) ) ) {
     1203                        bbp_increase_forum_topic_count_hidden( $forum_id );
     1204                        return;
     1205                }
     1206        }
     1207
     1208        bbp_bump_forum_topic_count( $forum_id );
     1209}
     1210
     1211/**
     1212 * Decrease the total topic count of a forum by one.
     1213 *
     1214 * @since 2.6.0 bbPress (r6036)
     1215 *
     1216 * @param int $forum_id The forum id.
     1217 *
     1218 * @uses bbp_is_topic() To get the topic id
     1219 * @uses bbp_get_topic_forum_id() To get the topics forum id
     1220 * @uses bbp_bump_forum_topic_count() To bump the forum topic count
     1221 *
     1222 * @return void
     1223 */
     1224function bbp_decrease_forum_topic_count( $forum_id = 0 ) {
     1225
     1226        // Bail early if no id is passed.
     1227        if ( empty( $forum_id ) ) {
     1228                return;
     1229        }
     1230
     1231        // If it's a topic, get the forum id.
     1232        if ( bbp_is_topic( $forum_id ) ) {
     1233                $forum_id = bbp_get_topic_forum_id( $forum_id );
     1234        }
     1235
     1236        bbp_bump_forum_topic_count( $forum_id, -1 );
     1237}
     1238
     1239/**
    11611240 * Bump the total hidden topic count of a forum
    11621241 *
    11631242 * @since 2.1.0 bbPress (r3825)
     
    11911270}
    11921271
    11931272/**
     1273 * Increase the total hidden topic count of a forum by one.
     1274 *
     1275 * @since 2.6.0 bbPress (r6036)
     1276 *
     1277 * @param int $forum_id The forum id.
     1278 *
     1279 * @uses bbp_is_topic() To get the topic id
     1280 * @uses bbp_get_topic_forum_id() To get the topics forum id
     1281 * @uses bbp_bump_forum_topic_count_hidden() To bump the forum hidden topic count
     1282 *
     1283 * @return void
     1284 */
     1285function bbp_increase_forum_topic_count_hidden( $forum_id = 0 ) {
     1286
     1287        // Bail early if no id is passed.
     1288        if ( empty( $forum_id ) ) {
     1289                return;
     1290        }
     1291
     1292        // If it's a topic, get the forum id.
     1293        if ( bbp_is_topic( $forum_id ) ) {
     1294                $forum_id = bbp_get_topic_forum_id( $forum_id );
     1295        }
     1296
     1297        bbp_bump_forum_topic_count_hidden( $forum_id );
     1298}
     1299
     1300/**
     1301 * Decrease the total hidden topic count of a forum by one.
     1302 *
     1303 * @since 2.6.0 bbPress (r6036)
     1304 *
     1305 * @param int $forum_id The forum id.
     1306 *
     1307 * @uses bbp_is_topic() To get the topic id
     1308 * @uses bbp_get_topic_forum_id() To get the topics forum id
     1309 * @uses bbp_bump_forum_topic_count_hidden() To bump the forums hidden topic
     1310 *                                            count by -1
     1311 *
     1312 * @return void
     1313 */
     1314function bbp_decrease_forum_topic_count_hidden( $forum_id = 0 ) {
     1315
     1316        // Bail early if no id is passed.
     1317        if ( empty( $forum_id ) ) {
     1318                return;
     1319        }
     1320
     1321        // If it's a topic, get the forum id.
     1322        if ( bbp_is_topic( $forum_id ) ) {
     1323                $forum_id = bbp_get_topic_forum_id( $forum_id );
     1324        }
     1325
     1326        bbp_bump_forum_topic_count_hidden( $forum_id, -1 );
     1327}
     1328
     1329/**
    11941330 * Bump the total topic count of a forum
    11951331 *
    11961332 * @since 2.1.0 bbPress (r3825)
     
    12321368                if ( ! empty( $ancestors ) ) {
    12331369                        foreach ( (array) $ancestors as $parent_forum_id ) {
    12341370
    1235                                 // Get forum counts
    1236                                 $parent_topic_count       = bbp_get_forum_reply_count( $parent_forum_id, false, true );
     1371                                // Only update reply count when an ancestor is not a category.
     1372                                if ( ! bbp_is_forum_category( $parent_forum_id ) ) {
     1373
     1374                                        $parent_reply_count = bbp_get_forum_reply_count( $parent_forum_id, false, true );
     1375                                        update_post_meta( $parent_forum_id, '_bbp_reply_count', (int) ( $parent_reply_count + $difference ) );
     1376                                }
     1377
     1378                                // Update the total reply count.
    12371379                                $parent_total_reply_count = bbp_get_forum_reply_count( $parent_forum_id, true,  true );
    1238 
    1239                                 // Update counts
    1240                                 update_post_meta( $parent_forum_id, '_bbp_reply_count',       (int) ( $parent_topic_count       + $difference ) );
    12411380                                update_post_meta( $parent_forum_id, '_bbp_total_reply_count', (int) ( $parent_total_reply_count + $difference ) );
    12421381                        }
    12431382                }
     
    12481387        return (int) apply_filters( 'bbp_bump_forum_reply_count', $forum_reply_count, $forum_id, $difference, $update_ancestors );
    12491388}
    12501389
     1390/**
     1391 * Increase the total reply count of a forum by one.
     1392 *
     1393 * @since 2.6.0 bbPress (r6036)
     1394 *
     1395 * @param int $forum_id The forum id.
     1396 *
     1397 * @uses bbp_is_reply() To get the reply id
     1398 * @uses bbp_get_reply_forum_id() To get the replies forum id
     1399 * @uses bbp_is_reply_published() To get the replies published status
     1400 * @uses bbp_bump_forum_reply_count() To bump the forum reply count
     1401 *
     1402 * @return void
     1403 */
     1404function bbp_increase_forum_reply_count( $forum_id = 0 ) {
     1405
     1406        // Bail early if no id is passed.
     1407        if ( empty( $forum_id ) ) {
     1408                return;
     1409        }
     1410
     1411        // If it's a reply, get the forum id.
     1412        if ( bbp_is_reply( $forum_id ) ) {
     1413                $reply_id = $forum_id;
     1414                $forum_id = bbp_get_reply_forum_id( $reply_id );
     1415
     1416                // Don't update if this is a new, unpublished, reply.
     1417                if ( 'bbp_new_reply' === current_filter() && ! bbp_is_reply_published( $reply_id ) ) {
     1418                        return;
     1419                }
     1420        }
     1421
     1422        bbp_bump_forum_reply_count( $forum_id );
     1423}
     1424
     1425/**
     1426 * Decrease the total reply count of a forum by one.
     1427 *
     1428 * @since 2.6.0 bbPress (r6036)
     1429 *
     1430 * @param int $forum_id The forum id.
     1431 *
     1432 * @uses bbp_is_reply() To get the reply id
     1433 * @uses bbp_get_reply_forum_id() To get the replies forum id
     1434 * @uses bbp_bump_forum_reply_count() To bump the forum reply count
     1435 *
     1436 * @return void
     1437 */
     1438function bbp_decrease_forum_reply_count( $forum_id = 0 ) {
     1439
     1440        // Bail early if no id is passed.
     1441        if ( empty( $forum_id ) ) {
     1442                return;
     1443        }
     1444
     1445        // If it's a reply, get the forum id.
     1446        if ( bbp_is_reply( $forum_id ) ) {
     1447                $forum_id = bbp_get_reply_forum_id( $forum_id );
     1448        }
     1449
     1450        bbp_bump_forum_reply_count( $forum_id, -1 );
     1451}
     1452
     1453/**
     1454 * Update forum reply counts when a topic is approved or unapproved.
     1455 *
     1456 * @since 2.6.0 bbPress (r6036)
     1457 *
     1458 * @param int $topic_id The topic id.
     1459 *
     1460 * @uses bbp_get_public_child_ids() To get the topic's public child ids
     1461 * @uses bbp_get_reply_post_type() To get the reply post type
     1462 * @uses bbp_bump_forum_reply_count() To bump the forum reply count
     1463 * @uses bbp_get_topic_forum_id() To get the topics forum id
     1464 *
     1465 * @return void
     1466 */
     1467function bbp_approved_unapproved_topic_update_forum_reply_count( $topic_id = 0 ) {
     1468
     1469        // Bail early if we don't have a topic id.
     1470        if ( empty( $topic_id ) ) {
     1471                return;
     1472        }
     1473
     1474        // Get the topic's replies.
     1475        $replies = bbp_get_public_child_ids( $topic_id, bbp_get_reply_post_type() );
     1476        $count   = count( $replies );
     1477
     1478        // If we're unapproving, set count to negative.
     1479        if ( 'bbp_unapproved_topic' === current_filter() ) {
     1480                $count = -$count;
     1481        }
     1482
     1483        // Update counts.
     1484        bbp_bump_forum_reply_count( bbp_get_topic_forum_id( $topic_id ), $count );
     1485}
     1486
    12511487/** Forum Updaters ************************************************************/
    12521488
    12531489/**
     
    17321968        }
    17331969
    17341970        // Counts
    1735         bbp_update_forum_subforum_count    ( $r['forum_id'] );
    1736         bbp_update_forum_reply_count       ( $r['forum_id'] );
    1737         bbp_update_forum_topic_count       ( $r['forum_id'] );
    1738         bbp_update_forum_topic_count_hidden( $r['forum_id'] );
     1971        bbp_update_forum_subforum_count( $r['forum_id'] );
    17391972
     1973        // Only update topic count if we're deleting a topic, or in the dashboard.
     1974        if ( in_array( current_filter(), array( 'bbp_deleted_topic', 'save_post' ), true ) ) {
     1975                bbp_update_forum_reply_count(        $r['forum_id'] );
     1976                bbp_update_forum_topic_count(        $r['forum_id'] );
     1977                bbp_update_forum_topic_count_hidden( $r['forum_id'] );
     1978        }
     1979
    17401980        // Update the parent forum if one was passed
    17411981        if ( ! empty( $r['post_parent'] ) && is_numeric( $r['post_parent'] ) ) {
    17421982                bbp_update_forum( array(
     
    18482088 *                        and forum id
    18492089 */
    18502090function bbp_get_hidden_forum_ids() {
    1851         $forum_ids = get_option( '_bbp_hidden_forums', array() );
     2091        $forum_ids = get_option( '_bbp_hidden_forums', array() );
    18522092
    18532093        return apply_filters( 'bbp_get_hidden_forum_ids', (array) $forum_ids );
    18542094}
     
    18652105 *                        and forum id
    18662106 */
    18672107function bbp_get_private_forum_ids() {
    1868         $forum_ids = get_option( '_bbp_private_forums', array() );
     2108        $forum_ids = get_option( '_bbp_private_forums', array() );
    18692109
    18702110        return apply_filters( 'bbp_get_private_forum_ids', (array) $forum_ids );
    18712111}
     
    20742314 *                        and forum id
    20752315 */
    20762316function bbp_forum_query_topic_ids( $forum_id ) {
    2077         $topic_ids = bbp_get_public_child_ids( $forum_id, bbp_get_topic_post_type() );
     2317        $topic_ids = bbp_get_public_child_ids( $forum_id, bbp_get_topic_post_type() );
    20782318
    20792319        return (array) apply_filters( 'bbp_forum_query_topic_ids', $topic_ids, $forum_id );
    20802320}
  • src/includes/replies/functions.php

     
    6565        // Update the reply and hierarchy
    6666        bbp_update_reply( $reply_id, $reply_meta['topic_id'], $reply_meta['forum_id'], array(), $reply_data['post_author'], false, $reply_meta['reply_to'] );
    6767
     68        /**
     69         * Fires after reply has been inserted via `bbp_insert_reply`.
     70         *
     71         * @since 2.6.0 bbPress (r6036)
     72         *
     73         * @param int $reply_id               The reply id.
     74         * @param int $reply_meta['topic_id'] The reply topic meta.
     75         * @param int $reply_meta['forum_id'] The reply forum meta.
     76         */
     77        do_action( 'bbp_insert_reply', (int) $reply_id, (int) $reply_meta['topic_id'], (int) $reply_meta['forum_id'] );
     78
    6879        // Return new reply ID
    6980        return $reply_id;
    7081}
    7182
     83/**
     84 * Update counts after a reply is inserted via `bbp_insert_reply`.
     85 *
     86 * @since 2.6.0 bbPress (r6036)
     87 *
     88 * @param int $reply_id The reply id.
     89 * @param int $topic_id The topic id.
     90 * @param int $forum_id The forum id.
     91 *
     92 * @uses bbp_get_reply_status() To get the reply status
     93 * @uses bbp_get_public_status_id() To get the public status id
     94 * @uses bbp_increase_topic_reply_count() To bump the topics reply count by 1
     95 * @uses bbp_increase_forum_reply_count() To bump the forums reply count by 1
     96 * @uses bbp_increase_topic_reply_count_hidden() To bump the topics hidden reply
     97 *                                               count by 1
     98 *
     99 * @return void
     100 */
     101function bbp_insert_reply_update_counts( $reply_id = 0, $topic_id = 0, $forum_id = 0 ) {
     102
     103        // If the reply is public, update the forum/topic reply counts.
     104        if ( bbp_get_reply_status( $reply_id ) === bbp_get_public_status_id() ) {
     105                bbp_increase_topic_reply_count( $topic_id );
     106                bbp_increase_forum_reply_count( $forum_id );
     107
     108        // If the reply isn't public only update the topic reply hidden count.
     109        } else {
     110                bbp_increase_topic_reply_count_hidden( $topic_id );
     111        }
     112}
     113
    72114/** Post Form Handlers ********************************************************/
    73115
    74116/**
     
    9771019                                bbp_update_topic_last_active_time( $ancestor, $topic_last_active_time );
    9781020
    9791021                                // Counts
    980                                 bbp_update_topic_voice_count       ( $ancestor );
    981                                 bbp_update_topic_reply_count       ( $ancestor );
    982                                 bbp_update_topic_reply_count_hidden( $ancestor );
     1022                                bbp_update_topic_voice_count( $ancestor );
    9831023
     1024                                // Only update reply count if we're deleting a reply, or in the dashboard.
     1025                                if ( in_array( current_filter(), array( 'bbp_deleted_reply', 'save_post' ), true ) ) {
     1026                                        bbp_update_topic_reply_count(        $ancestor );
     1027                                        bbp_update_topic_reply_count_hidden( $ancestor );
     1028                                }
     1029
    9841030                        // Forum meta relating to most recent topic
    9851031                        } elseif ( bbp_is_forum( $ancestor ) ) {
    9861032
     
    10031049                                }
    10041050
    10051051                                // Counts
    1006                                 bbp_update_forum_reply_count( $ancestor );
     1052                                // Only update reply count if we're deleting a reply, or in the dashboard.
     1053                                if ( in_array( current_filter(), array( 'bbp_deleted_reply', 'save_post' ), true ) ) {
     1054                                        bbp_update_forum_reply_count( $ancestor );
     1055                                }
    10071056                        }
    10081057                }
    10091058        }
  • src/includes/topics/functions.php

     
    7070        // Update the topic and hierarchy
    7171        bbp_update_topic( $topic_id, $topic_meta['forum_id'], array(), $topic_data['post_author'], false );
    7272
     73        /**
     74         * Fires after topic has been inserted via `bbp_insert_topic`.
     75         *
     76         * @since 2.6.0 bbPress (r6036)
     77         *
     78         * @param int $topic_id               The topic id.
     79         * @param int $topic_meta['forum_id'] The topic forum meta.
     80         */
     81        do_action( 'bbp_insert_topic', (int) $topic_id, (int) $topic_meta['forum_id'] );
     82
    7383        // Return new topic ID
    7484        return $topic_id;
    7585}
     
    10211031 * Handle the moving of a topic from one forum to another. This includes walking
    10221032 * up the old and new branches and updating the counts.
    10231033 *
    1024  * @param int $topic_id Topic id
    1025  * @param int $old_forum_id Old forum id
    1026  * @param int $new_forum_id New forum id
     1034 * @since 2.0.0 bbPress (r2907)
     1035 *
     1036 * @param int $topic_id     The topic id.
     1037 * @param int $old_forum_id Old forum id.
     1038 * @param int $new_forum_id New forum id.
    10271039 * @uses bbp_get_topic_id() To get the topic id
    10281040 * @uses bbp_get_forum_id() To get the forum id
     1041 * @uses bbp_clean_post_cache() To clean the old and new forum post caches
     1042 * @uses bbp_update_topic_forum_id() To update the topic forum id
    10291043 * @uses wp_update_post() To update the topic post parent`
    10301044 * @uses bbp_get_stickies() To get the old forums sticky topics
    10311045 * @uses delete_post_meta() To delete the forum sticky meta
     
    10321046 * @uses update_post_meta() To update the old forum sticky meta
    10331047 * @uses bbp_stick_topic() To stick the topic in the new forum
    10341048 * @uses bbp_get_reply_post_type() To get the reply post type
    1035  * @uses bbp_get_all_child_ids() To get the public child ids
     1049 * @uses bbp_get_all_child_ids() To get all the child ids
    10361050 * @uses bbp_update_reply_forum_id() To update the reply forum id
    1037  * @uses bbp_update_topic_forum_id() To update the topic forum id
    10381051 * @uses get_post_ancestors() To get the topic's ancestors
     1052 * @uses bbp_get_public_child_ids() To get all the public child ids
     1053 * @uses get_post_field() To get the topic's post status
     1054 * @uses bbp_get_public_status_id() To get the public status id
     1055 * @uses bbp_decrease_forum_topic_count() To bump the forum topic count by -1
     1056 * @uses bbp_bump_forum_reply_count() To bump the forum reply count
     1057 * @uses bbp_increase_forum_topic_count() To bump the forum topic count by 1
     1058 * @uses bbp_decrease_forum_topic_count_hidden() To bump the forum topic hidden count by -1
     1059 * @uses bbp_increase_forum_topic_count_hidden() To bump the forum topic hidden count by 1
    10391060 * @uses bbp_is_forum() To check if the ancestor is a forum
    10401061 * @uses bbp_update_forum() To update the forum
    10411062 */
     
    11101131        // Get topic ancestors
    11111132        $old_forum_ancestors = array_values( array_unique( array_merge( array( $old_forum_id ), (array) get_post_ancestors( $old_forum_id ) ) ) );
    11121133
     1134        // Get reply count.
     1135        $public_reply_count = count( bbp_get_public_child_ids( $topic_id, bbp_get_reply_post_type() ) );
     1136
     1137        // Topic status.
     1138        $topic_status = get_post_field( 'post_status', $topic_id );
     1139
     1140        // Update old/new forum counts.
     1141        if ( $topic_status === bbp_get_public_status_id() ) {
     1142
     1143                // Update old forum counts.
     1144                bbp_decrease_forum_topic_count( $old_forum_id );
     1145                bbp_bump_forum_reply_count( $old_forum_id, -$public_reply_count );
     1146
     1147                // Update new forum counts.
     1148                bbp_increase_forum_topic_count( $new_forum_id );
     1149                bbp_bump_forum_reply_count( $new_forum_id, $public_reply_count );
     1150        } else {
     1151
     1152                // Update old forum counts.
     1153                bbp_decrease_forum_topic_count_hidden( $old_forum_id );
     1154
     1155                // Update new forum counts.
     1156                bbp_increase_forum_topic_count_hidden( $new_forum_id );
     1157        }
     1158
    11131159        // Loop through ancestors and update them
    11141160        if ( ! empty( $old_forum_ancestors ) ) {
    11151161                foreach ( $old_forum_ancestors as $ancestor ) {
     
    23782424}
    23792425
    23802426/**
     2427 * Increase the total reply count of a topic by one.
     2428 *
     2429 * @since 2.6.0 bbPress (r6036)
     2430 *
     2431 * @param int $topic_id The topic id.
     2432 *
     2433 * @uses bbp_is_reply() To check if the passed topic id is a reply
     2434 * @uses bbp_get_reply_topic_id() To get the replies topic id
     2435 * @uses bbp_is_reply_published() To check if the reply is published
     2436 * @uses bbp_increase_topic_reply_count_hidden() To increase the topics reply
     2437 *                                                hidden count by 1
     2438 * @uses bbp_bump_topic_reply_count() To bump the topic reply count
     2439 *
     2440 * @return void
     2441 */
     2442function bbp_increase_topic_reply_count( $topic_id = 0 ) {
     2443
     2444        // Bail early if no id is passed.
     2445        if ( empty( $topic_id ) ) {
     2446                return;
     2447        }
     2448
     2449        // If it's a reply, get the topic id.
     2450        if ( bbp_is_reply( $topic_id ) ) {
     2451                $reply_id = $topic_id;
     2452                $topic_id = bbp_get_reply_topic_id( $reply_id );
     2453
     2454                // If this is a new, unpublished, reply, update hidden count and bail.
     2455                if ( 'bbp_new_reply' === current_filter() && ! bbp_is_reply_published( $reply_id ) ) {
     2456                        bbp_increase_topic_reply_count_hidden( $topic_id );
     2457                        return;
     2458                }
     2459        }
     2460
     2461        bbp_bump_topic_reply_count( $topic_id );
     2462}
     2463
     2464/**
     2465 * Decrease the total reply count of a topic by one.
     2466 *
     2467 * @since 2.6.0 bbPress (r6036)
     2468 *
     2469 * @param int $topic_id The topic id.
     2470 *
     2471 * @uses bbp_is_reply() To check if the passed topic id is a reply
     2472 * @uses bbp_get_reply_topic_id() To get the replies topic id
     2473 * @uses bbp_bump_topic_reply_count() To bump the topic reply count
     2474 *
     2475 * @return void
     2476 */
     2477function bbp_decrease_topic_reply_count( $topic_id = 0 ) {
     2478
     2479        // Bail early if no id is passed.
     2480        if ( empty( $topic_id ) ) {
     2481                return;
     2482        }
     2483
     2484        // If it's a reply, get the topic id.
     2485        if ( bbp_is_reply( $topic_id ) ) {
     2486                $topic_id = bbp_get_reply_topic_id( $topic_id );
     2487        }
     2488
     2489        bbp_bump_topic_reply_count( $topic_id, -1 );
     2490}
     2491
     2492/**
    23812493 * Bump the total hidden reply count of a topic
    23822494 *
    23832495 * @since 2.1.0 bbPress (r3825)
     
    24102522        return (int) apply_filters( 'bbp_bump_topic_reply_count_hidden', $new_count, $topic_id, $difference );
    24112523}
    24122524
     2525/**
     2526 * Increase the total hidden reply count of a topic by one.
     2527 *
     2528 * @since 2.6.0 bbPress (r6036)
     2529 *
     2530 * @param int $topic_id The topic id.
     2531 *
     2532 * @uses bbp_is_reply() To check if the passed topic id is a reply
     2533 * @uses bbp_get_reply_topic_id() To get the topic id
     2534 * @uses bbp_bump_topic_reply_count_hidden() To bump topic hidden reply count
     2535 *
     2536 * @return void
     2537 */
     2538function bbp_increase_topic_reply_count_hidden( $topic_id = 0 ) {
     2539
     2540        // Bail early if no id is passed.
     2541        if ( empty( $topic_id ) ) {
     2542                return;
     2543        }
     2544
     2545        // If it's a reply, get the topic id.
     2546        if ( bbp_is_reply( $topic_id ) ) {
     2547                $topic_id = bbp_get_reply_topic_id( $topic_id );
     2548        }
     2549
     2550        bbp_bump_topic_reply_count_hidden( $topic_id );
     2551}
     2552
     2553/**
     2554 * Decrease the total hidden reply count of a topic by one.
     2555 *
     2556 * @since 2.6.0 bbPress (r6036)
     2557 *
     2558 * @param int $topic_id The topic id.
     2559 *
     2560 * @uses bbp_is_reply() To check if the passed topic id is a reply
     2561 * @uses bbp_get_reply_topic_id() To get the topic id
     2562 * @uses bbp_bump_topic_reply_count_hidden() To bump topic hidden reply count
     2563 *
     2564 * @return void
     2565 */
     2566function bbp_decrease_topic_reply_count_hidden( $topic_id = 0 ) {
     2567
     2568        // Bail early if no id is passed.
     2569        if ( empty( $topic_id ) ) {
     2570                return;
     2571        }
     2572
     2573        // If it's a reply, get the topic id.
     2574        if ( bbp_is_reply( $topic_id ) ) {
     2575                $topic_id = bbp_get_reply_topic_id( $topic_id );
     2576        }
     2577
     2578        bbp_bump_topic_reply_count_hidden( $topic_id, -1 );
     2579}
     2580
     2581/**
     2582 * Update counts after a topic is inserted via `bbp_insert_topic`.
     2583 *
     2584 * @since 2.6.0 bbPress (r6036)
     2585 *
     2586 * @param int $reply_id The reply id.
     2587 * @param int $topic_id The topic id.
     2588 *
     2589 * @uses bbp_get_topic_status() To get the post status
     2590 * @uses bbp_get_public_status_id() To get the public status id
     2591 * @uses bbp_increase_forum_topic_count() To bump the topic's forum topic count by 1
     2592 * @uses bbp_increase_forum_topic_count_hidden() To bump the topic's forum topic
     2593 *                                               hidden count by 1
     2594 *
     2595 * @return void
     2596 */
     2597function bbp_insert_topic_update_counts( $topic_id = 0, $forum_id = 0 ) {
     2598
     2599        // If the topic is public, update the forum topic counts.
     2600        if ( bbp_get_topic_status( $topic_id ) === bbp_get_public_status_id() ) {
     2601                bbp_increase_forum_topic_count( $forum_id );
     2602
     2603        // If the topic isn't public only update the forum topic hidden count.
     2604        } else {
     2605                bbp_increase_forum_topic_count_hidden( $forum_id );
     2606        }
     2607}
     2608
    24132609/** Topic Updaters ************************************************************/
    24142610
    24152611/**
  • tests/phpunit/testcases/forums/functions/counts.php

     
    1313         * Generic function to test the forum counts with a new topic
    1414         */
    1515        public function test_bbp_forum_new_topic_counts() {
     16                remove_action( 'bbp_insert_topic', 'bbp_insert_topic_update_counts', 10 );
     17
    1618                $f = $this->factory->forum->create();
    1719                $t1 = $this->factory->topic->create( array(
    1820                        'post_parent' => $f,
     
    2325                ) );
    2426                $u = $this->factory->user->create();
    2527
    26                 // Cheating here, but we need $_SERVER['SERVER_NAME'] to be set.
    27                 $this->setUp_wp_mail( false );
     28                // Don't attempt to send an email. This is for speed and PHP errors.
     29                remove_action( 'bbp_new_topic', 'bbp_notify_forum_subscribers', 11, 4 );
    2830
    2931                // Simulate the 'bbp_new_topic' action.
    3032                do_action( 'bbp_new_topic', $t1, $f, false, bbp_get_current_user_id(), $t1 );
    3133
    32                 // Reverse our changes.
    33                 $this->tearDown_wp_mail( false );
    34 
    3534                $count = bbp_get_forum_topic_count( $f, true, true );
    3635                $this->assertSame( 1, $count );
    3736
     
    4645                        ),
    4746                ) );
    4847
    49                 // Cheating here, but we need $_SERVER['SERVER_NAME'] to be set.
    50                 $this->setUp_wp_mail( false );
    51 
    5248                // Simulate the 'bbp_new_topic' action.
    5349                do_action( 'bbp_new_topic', $t2, $f, false, $u , $t2 );
    5450
    55                 // Reverse our changes.
    56                 $this->tearDown_wp_mail( false );
    57 
    5851                $count = bbp_get_forum_topic_count( $f, true, true );
    5952                $this->assertSame( 2, $count );
    6053
    6154                $count = bbp_get_forum_topic_count_hidden( $f, true, true );
    6255                $this->assertSame( 0, $count );
     56
     57                // Re-add removed actions.
     58                add_action( 'bbp_insert_topic', 'bbp_insert_topic_update_counts', 10, 2 );
     59                add_action( 'bbp_new_topic',    'bbp_notify_forum_subscribers',   11, 4 );
    6360        }
    6461
    6562        /**
     
    254251        }
    255252
    256253        /**
     254         * @covers ::bbp_increase_forum_topic_count
     255         */
     256        public function test_bbp_increase_forum_topic_count() {
     257                $f = $this->factory->forum->create();
     258
     259                $count = bbp_get_forum_topic_count( $f );
     260                $this->assertSame( '0', $count );
     261
     262                bbp_increase_forum_topic_count( $f );
     263
     264                $count = bbp_get_forum_topic_count( $f );
     265                $this->assertSame( '1', $count );
     266        }
     267
     268        /**
     269         * @covers ::bbp_decrease_forum_topic_count
     270         */
     271        public function test_bbp_decrease_forum_topic_count() {
     272                $f = $this->factory->forum->create();
     273
     274                $count = bbp_get_forum_topic_count( $f );
     275                $this->assertSame( '0', $count );
     276
     277                $t = $this->factory->topic->create_many( 2, array(
     278                        'post_parent' => $f,
     279                ) );
     280
     281                bbp_update_forum_topic_count( $f );
     282
     283                $count = bbp_get_forum_topic_count( $f );
     284                $this->assertSame( '2', $count );
     285
     286                bbp_update_forum_topic_count( $f );
     287
     288                bbp_decrease_forum_topic_count( $f );
     289
     290                $count = bbp_get_forum_topic_count( $f );
     291                $this->assertSame( '1', $count );
     292        }
     293
     294        /**
    257295         * @covers ::bbp_bump_forum_topic_count_hidden
    258296         */
    259297        public function test_bbp_bump_forum_topic_count_hidden() {
     
    269307        }
    270308
    271309        /**
     310         * @covers ::bbp_increase_forum_topic_count_hidden
     311         */
     312        public function test_bbp_increase_forum_topic_count_hidden() {
     313                $f = $this->factory->forum->create();
     314
     315                $count = bbp_get_forum_topic_count_hidden( $f );
     316                $this->assertSame( '0', $count );
     317
     318                bbp_increase_forum_topic_count_hidden( $f );
     319
     320                $count = bbp_get_forum_topic_count_hidden( $f );
     321                $this->assertSame( '1', $count );
     322        }
     323
     324        /**
     325         * @covers ::bbp_decrease_forum_topic_count_hidden
     326         */
     327        public function test_bbp_decrease_forum_topic_count_hidden() {
     328                $f = $this->factory->forum->create();
     329
     330                $count = bbp_get_forum_topic_count_hidden( $f );
     331                $this->assertSame( '0', $count );
     332
     333                $t = $this->factory->topic->create_many( 2, array(
     334                        'post_parent' => $f,
     335                        'post_status' => bbp_get_spam_status_id(),
     336                        'topic_meta' => array(
     337                                'forum_id' => $f,
     338                                'spam_meta_status' => 'publish',
     339                        )
     340                ) );
     341
     342                bbp_update_forum_topic_count_hidden( $f );
     343
     344                $count = bbp_get_forum_topic_count_hidden( $f );
     345                $this->assertSame( '2', $count );
     346
     347                bbp_decrease_forum_topic_count_hidden( $f );
     348
     349                $count = bbp_get_forum_topic_count_hidden( $f );
     350                $this->assertSame( '1', $count );
     351        }
     352
     353        /**
    272354         * @covers ::bbp_bump_forum_reply_count
    273355         */
    274356        public function test_bbp_bump_forum_reply_count() {
     
    284366        }
    285367
    286368        /**
     369         * @covers ::bbp_increase_forum_reply_count
     370         */
     371        public function test_bbp_increase_forum_reply_count() {
     372                $f = $this->factory->forum->create();
     373
     374                $count = bbp_get_forum_reply_count( $f );
     375                $this->assertSame( '0', $count );
     376
     377                bbp_increase_forum_reply_count( $f );
     378
     379                $count = bbp_get_forum_reply_count( $f );
     380                $this->assertSame( '1', $count );
     381        }
     382
     383        /**
     384         * @covers ::bbp_decrease_forum_reply_count
     385         */
     386        public function test_bbp_decrease_forum_reply_count() {
     387                $f = $this->factory->forum->create();
     388
     389                $count = bbp_get_forum_reply_count( $f );
     390                $this->assertSame( '0', $count );
     391
     392                $t = $this->factory->topic->create( array(
     393                        'post_parent' => $f,
     394                ) );
     395
     396                $r = $this->factory->reply->create_many( 2, array(
     397                        'post_parent' => $t,
     398                ) );
     399
     400                bbp_update_forum_reply_count( $f );
     401
     402                $count = bbp_get_forum_reply_count( $f );
     403                $this->assertSame( '2', $count );
     404
     405                bbp_decrease_forum_reply_count( $f );
     406
     407                $count = bbp_get_forum_reply_count( $f );
     408                $this->assertSame( '1', $count );
     409        }
     410
     411        /**
    287412         * @covers ::bbp_update_forum_subforum_count
    288413         */
    289414        public function test_bbp_update_forum_subforum_count() {
  • tests/phpunit/testcases/topics/functions/counts.php

     
    1313         * Generic function to test the topics counts with a new reply
    1414         */
    1515        public function test_bbp_topic_new_reply_counts() {
     16                remove_action( 'bbp_insert_reply', 'bbp_insert_reply_update_counts', 10 );
     17
    1618                $f = $this->factory->forum->create();
    1719                $t = $this->factory->topic->create( array(
    1820                        'post_parent' => $f,
     
    3133                ) );
    3234                $u = $this->factory->user->create();
    3335
    34                 // Cheating here, but we need $_SERVER['SERVER_NAME'] to be set.
    35                 $this->setUp_wp_mail( false );
     36                // Don't attempt to send an email. This is for speed and PHP errors.
     37                remove_action( 'bbp_new_reply', 'bbp_notify_topic_subscribers', 11, 5 );
    3638
    3739                // Simulate the 'bbp_new_reply' action.
    3840                do_action( 'bbp_new_reply', $r1, $t, $f, false, bbp_get_current_user_id() );
    3941
    40                 // Reverse our changes.
    41                 $this->tearDown_wp_mail( false );
    42 
    4342                $count = bbp_get_topic_reply_count( $t, true );
    4443                $this->assertSame( 1, $count );
    4544
     
    5857                        ),
    5958                ) );
    6059
    61                 // Cheating here, but we need $_SERVER['SERVER_NAME'] to be set.
    62                 $this->setUp_wp_mail( false );
    63 
    6460                // Simulate the 'bbp_new_topic' action.
    6561                do_action( 'bbp_new_reply', $r2, $t, $f, false, $u );
    6662
    67                 // Reverse our changes.
    68                 $this->tearDown_wp_mail( false );
    69 
    7063                $count = bbp_get_topic_reply_count( $t, true );
    7164                $this->assertSame( 2, $count );
    7265
     
    7568
    7669                $count = bbp_get_topic_voice_count( $t, true );
    7770                $this->assertSame( 2, $count );
     71
     72                // Re-add removed actions.
     73                add_action( 'bbp_insert_reply', 'bbp_insert_reply_update_counts', 10, 2 );
     74                add_action( 'bbp_new_reply',    'bbp_notify_topic_subscribers',   11, 5 );
     75
    7876        }
    7977
    8078        /**
     
    341339        }
    342340
    343341        /**
     342         * @covers ::bbp_increase_topic_reply_count
     343         */
     344        public function test_bbp_increase_topic_reply_count() {
     345                $t = $this->factory->topic->create();
     346
     347                $count = bbp_get_topic_reply_count( $t );
     348                $this->assertSame( '0', $count );
     349
     350                bbp_increase_topic_reply_count( $t );
     351
     352                $count = bbp_get_topic_reply_count( $t );
     353                $this->assertSame( '1', $count );
     354        }
     355
     356        /**
     357         * @covers ::bbp_decrease_topic_reply_count
     358         */
     359        public function test_bbp_decrease_topic_reply_count() {
     360                $t = $this->factory->topic->create();
     361
     362                $count = bbp_get_topic_reply_count( $t );
     363                $this->assertSame( '0', $count );
     364
     365                // Set the count manually to 2
     366                bbp_update_topic_reply_count( $t, 2 );
     367
     368                $count = bbp_get_topic_reply_count( $t );
     369                $this->assertSame( '2', $count );
     370
     371                bbp_decrease_topic_reply_count( $t );
     372
     373                $count = bbp_get_topic_reply_count( $t );
     374                $this->assertSame( '1', $count );
     375        }
     376
     377        /**
    344378         * @covers ::bbp_bump_topic_reply_count_hidden
    345379         */
    346380        public function test_bbp_bump_topic_reply_count_hidden() {
     
    359393        }
    360394
    361395        /**
     396         * @covers ::bbp_increase_topic_reply_count_hidden
     397         */
     398        public function test_bbp_increase_topic_reply_count_hidden() {
     399                $t = $this->factory->topic->create();
     400
     401                $count = bbp_get_topic_reply_count_hidden( $t );
     402                $this->assertSame( '0', $count );
     403
     404                bbp_increase_topic_reply_count_hidden( $t );
     405
     406                $count = bbp_get_topic_reply_count_hidden( $t );
     407                $this->assertSame( '1', $count );
     408        }
     409
     410        /**
     411         * @covers ::bbp_decrease_topic_reply_count_hidden
     412         */
     413        public function test_bbp_decrease_topic_reply_count_hidden() {
     414                $t = $this->factory->topic->create();
     415
     416                $count = bbp_get_topic_reply_count_hidden( $t );
     417                $this->assertSame( '0', $count );
     418
     419                // Set the count manually to 2
     420                bbp_update_topic_reply_count_hidden( $t, 2 );
     421
     422                $count = bbp_get_topic_reply_count_hidden( $t );
     423                $this->assertSame( '2', $count );
     424
     425                bbp_decrease_topic_reply_count_hidden( $t );
     426
     427                $count = bbp_get_topic_reply_count_hidden( $t );
     428                $this->assertSame( '1', $count );
     429        }
     430
     431        /**
    362432         * @covers ::bbp_update_topic_reply_count
    363433         */
    364434        public function test_bbp_update_topic_reply_count() {
  • tests/phpunit/testcases/topics/functions/topic.php

     
    181181                $this->assertSame( $new_forum_id, bbp_get_reply_forum_id( $reply_id ) );
    182182                $this->assertSame( $topic_id, bbp_get_reply_topic_id( $reply_id ) );
    183183
     184                // Old Topic/Reply Counts
     185                $this->assertSame( 0, bbp_get_forum_topic_count( $old_forum_id, true, true ) );
     186                $this->assertSame( 0, bbp_get_forum_reply_count( $old_forum_id, true, true ) );
     187
     188
    184189                // Retore the user
    185190                $this->set_current_user( $this->old_current_user );
    186191        }