Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
02/06/2017 07:26:44 PM (9 years ago)
Author:
r-a-y
Message:

Activity: Add parameter to bp_activity_get_comment_depth().

Previously, bp_activity_get_comment_depth() only supported looking for an
activity comment's depth during a queried activity comment loop.

This commit allows a developer to pass either a comment object or an
activity ID to the function so the activity comment depth can be fetched
outside the activity comment loop.

This fixes an issue with a notice displaying in the BuddyPress Activity
admin dashboard.

See #7329.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-activity/bp-activity-template.php

    r11360 r11413  
    22282228 *
    22292229 * @since 2.0.0
    2230  */
    2231 function bp_activity_comment_depth() {
    2232         echo bp_activity_get_comment_depth();
    2233 }
     2230 * @since 2.8.0 Added $comment as a parameter.
     2231 *
     2232 * @param object|int $comment Object of the activity comment or activity comment ID. Usually unnecessary
     2233 *                            when used in activity comment loop.
     2234 */
     2235function bp_activity_comment_depth( $comment = 0 ) {
     2236        echo bp_activity_get_comment_depth( $comment );
     2237}
     2238
    22342239        /**
    22352240         * Return the current activity comment depth.
    22362241         *
    22372242         * @since 2.0.0
    2238          *
    2239          * @return int $depth Depth for the current activity comment.
    2240          */
    2241         function bp_activity_get_comment_depth() {
    2242                 global $activities_template;
     2243         * @since 2.8.0 Added $comment as a parameter.
     2244         *
     2245         * @param  object|int $comment Object of the activity comment or activity comment ID. Usually unnecessary
     2246         *                             when used in activity comment loop.
     2247         * @return int
     2248         */
     2249        function bp_activity_get_comment_depth( $comment = 0 ) {
     2250                $depth = 0;
     2251
     2252                // Activity comment loop takes precedence.
     2253                if ( isset( $GLOBALS['activities_template']->activity->current_comment->depth ) ) {
     2254                        $depth = $GLOBALS['activities_template']->activity->current_comment->depth;
     2255
     2256                // Get depth for activity comment manually.
     2257                } elseif ( ! empty( $comment ) ) {
     2258                        // We passed an activity ID, so fetch the activity object.
     2259                        if ( is_int( $comment ) ) {
     2260                                $comment = new BP_Activity_Activity( $comment );
     2261                        }
     2262
     2263                        // Recurse through activity tree to find the depth.
     2264                        if ( is_object( $comment ) && isset( $comment->type ) && 'activity_comment' === $comment->type ) {
     2265                                // Fetch the entire root comment tree... ugh.
     2266                                $comments = BP_Activity_Activity::get_activity_comments( $comment->item_id, 1, constant( 'PHP_INT_MAX' ) );
     2267
     2268                                // Recursively find our comment object from the comment tree.
     2269                                $iterator  = new RecursiveArrayIterator( $comments );
     2270                                $recursive = new RecursiveIteratorIterator( $iterator, RecursiveIteratorIterator::SELF_FIRST );
     2271                                foreach ( $recursive as $cid => $cobj ) {
     2272                                        // Skip items that are not a comment object.
     2273                                        if ( ! is_numeric( $cid ) || ! is_object( $cobj ) ) {
     2274                                                continue;
     2275                                        }
     2276
     2277                                        // We found the activity comment! Set the depth.
     2278                                        if ( $cid === $comment->id && isset( $cobj->depth ) ) {
     2279                                                $depth = $cobj->depth;
     2280                                                break;
     2281                                        }
     2282                                }
     2283                        }
     2284                }
    22432285
    22442286                /**
     
    22492291                 * @param int $depth Depth for the current activity comment.
    22502292                 */
    2251                 return apply_filters( 'bp_activity_get_comment_depth', $activities_template->activity->current_comment->depth );
     2293                return apply_filters( 'bp_activity_get_comment_depth', $depth );
    22522294        }
    22532295
     
    28852927                $comment_depth = isset( $comment->depth )
    28862928                        ? intval( $comment->depth )
    2887                         : bp_activity_get_comment_depth();
     2929                        : bp_activity_get_comment_depth( $comment );
    28882930
    28892931                // Threading is turned on, so check the depth.
Note: See TracChangeset for help on using the changeset viewer.