Changeset 10542
- Timestamp:
- 02/07/2016 04:29:52 PM (8 years ago)
- Location:
- trunk/src/bp-activity
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/bp-activity/bp-activity-functions.php
r10515 r10542 439 439 } 440 440 441 $activity_labels = array( 442 /* Post labels */ 443 'bp_activity_admin_filter', 444 'bp_activity_front_filter', 445 'bp_activity_new_post', 446 'bp_activity_new_post_ms', 447 /* Comment labels */ 448 'bp_activity_comments_admin_filter', 449 'bp_activity_comments_front_filter', 450 'bp_activity_new_comment', 451 'bp_activity_new_comment_ms' 452 ); 453 441 454 // Labels are loaded into the post type object. 442 foreach ( array( 'bp_activity_admin_filter', 'bp_activity_front_filter', 'bp_activity_new_post', 'bp_activity_new_post_ms' )as $label_type ) {455 foreach ( $activity_labels as $label_type ) { 443 456 if ( ! empty( $args[ $label_type ] ) ) { 444 457 $wp_post_types[ $post_type ]->labels->{$label_type} = $args[ $label_type ]; … … 457 470 * 458 471 * @since 2.2.0 472 * @since 2.5.0 Add post type comments tracking args 459 473 * 460 474 * @param string $post_type Name of the post type. … … 466 480 } 467 481 468 $post_type_object = get_post_type_object( $post_type ); 482 $post_type_object = get_post_type_object( $post_type ); 483 $post_type_support_comments = post_type_supports( $post_type, 'comments' ); 469 484 470 485 $post_type_activity = array( 471 'component_id' => buddypress()->activity->id, 472 'action_id' => 'new_' . $post_type, 473 'format_callback' => 'bp_activity_format_activity_action_custom_post_type_post', 474 'front_filter' => $post_type_object->labels->name, 475 'contexts' => array( 'activity' ), 476 'position' => 0, 477 'singular' => strtolower( $post_type_object->labels->singular_name ), 478 'activity_comment' => ! post_type_supports( $post_type, 'comments' ), 486 'component_id' => buddypress()->activity->id, 487 'action_id' => 'new_' . $post_type, 488 'format_callback' => 'bp_activity_format_activity_action_custom_post_type_post', 489 'front_filter' => $post_type_object->labels->name, 490 'contexts' => array( 'activity' ), 491 'position' => 0, 492 'singular' => strtolower( $post_type_object->labels->singular_name ), 493 'activity_comment' => ! $post_type_support_comments, 494 'comment_action_id' => false, 495 'comment_format_callback' => 'bp_activity_format_activity_action_custom_post_type_comment', 479 496 ); 480 497 … … 509 526 } 510 527 528 // If the post type supports comments and has a comment action id, build the comments tracking args 529 if ( $post_type_support_comments && ! empty( $post_type_activity->comment_action_id ) ) { 530 // Init a new container for the activity type for comments 531 $post_type_activity->comments_tracking = new stdClass(); 532 533 // Build the activity type for comments 534 $post_type_activity->comments_tracking->component_id = $post_type_activity->component_id; 535 $post_type_activity->comments_tracking->action_id = $post_type_activity->comment_action_id; 536 537 // Try to get the comments admin filter from the post type labels. 538 if ( ! empty( $post_type_object->labels->bp_activity_comments_admin_filter ) ) { 539 $post_type_activity->comments_tracking->admin_filter = $post_type_object->labels->bp_activity_comments_admin_filter; 540 541 // Fall back to a generic name. 542 } else { 543 $post_type_activity->comments_tracking->admin_filter = _x( 'New item comment posted', 'Post Type generic comments activity admin filter', 'buddypress' ); 544 } 545 546 $post_type_activity->comments_tracking->format_callback = $post_type_activity->comment_format_callback; 547 548 // Check for the comments front filter in the post type labels. 549 if ( ! empty( $post_type_object->labels->bp_activity_comments_front_filter ) ) { 550 $post_type_activity->comments_tracking->front_filter = $post_type_object->labels->bp_activity_comments_front_filter; 551 552 // Fall back to a generic name. 553 } else { 554 $post_type_activity->comments_tracking->front_filter = sprintf( __( '%s comments', 'buddypress' ), $post_type_object->labels->singular_name ); 555 } 556 557 $post_type_activity->comments_tracking->contexts = $post_type_activity->contexts; 558 $post_type_activity->comments_tracking->position = (int) $post_type_activity->position + 1; 559 560 // Try to get the action for new post type comment action on non-multisite installations. 561 if ( ! empty( $post_type_object->labels->bp_activity_new_comment ) ) { 562 $post_type_activity->comments_tracking->new_post_type_comment_action = $post_type_object->labels->bp_activity_new_comment; 563 } 564 565 // Try to get the action for new post type comment action on multisite installations. 566 if ( ! empty( $post_type_object->labels->bp_activity_new_comment_ms ) ) { 567 $post_type_activity->comments_tracking->new_post_type_comment_action_ms = $post_type_object->labels->bp_activity_new_comment_ms; 568 } 569 } 570 571 // Finally make sure we'll be able to find the post type this activity type is associated to. 572 $post_type_activity->post_type = $post_type; 573 511 574 /** 512 575 * Filters tracking arguments for a specific post type. … … 524 587 * 525 588 * @since 2.2.0 589 * @since 2.5.0 Include post type comments tracking args if needed 526 590 * 527 591 * @return array List of post types with their tracking arguments. … … 537 601 538 602 if ( ! empty( $track_post_type ) ) { 603 // Set the post type comments tracking args 604 if ( ! empty( $track_post_type->comments_tracking->action_id ) ) { 605 // Used to check support for comment tracking by activity type (new_post_type_comment) 606 $track_post_type->comments_tracking->comments_tracking = true; 607 608 // Used to be able to find the post type this activity type is associated to. 609 $track_post_type->comments_tracking->post_type = $post_type; 610 611 $post_types_tracking_args[ $track_post_type->comments_tracking->action_id ] = $track_post_type->comments_tracking; 612 613 // Used to check support for comment tracking by activity type (new_post_type) 614 $track_post_type->comments_tracking = true; 615 } 616 539 617 $post_types_tracking_args[ $track_post_type->action_id ] = $track_post_type; 540 618 } … … 551 629 */ 552 630 return apply_filters( 'bp_activity_get_post_types_tracking_args', $post_types_tracking_args ); 631 } 632 633 /** 634 * Check if the *Post Type* activity supports a specific feature. 635 * 636 * @since 2.5.0 637 * 638 * @param string $activity_type The activity type to check. 639 * @param string $feature The feature to check. Currently supports: 640 * 'post-type-comment-tracking', 'post-type-comment-reply' & 'comment-reply'. 641 * See inline doc for more info. 642 * @return bool 643 */ 644 function bp_activity_type_supports( $activity_type = '', $feature = '' ) { 645 $retval = false; 646 647 $bp = buddypress(); 648 649 switch ( $feature ) { 650 /** 651 * Does this activity type support comment tracking? 652 * 653 * eg. 'new_blog_post' and 'new_blog_comment' will both return true. 654 */ 655 case 'post-type-comment-tracking' : 656 // Set the activity track global if not set yet 657 if ( empty( $bp->activity->track ) ) { 658 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 659 } 660 661 if ( ! empty( $bp->activity->track[ $activity_type ]->comments_tracking ) ) { 662 $retval = true; 663 } 664 break; 665 666 /** 667 * Is this a parent activity type that support post comments? 668 * 669 * eg. 'new_blog_post' will return true; 'new_blog_comment' will return false. 670 */ 671 case 'post-type-comment-reply' : 672 // Set the activity track global if not set yet. 673 if ( empty( $bp->activity->track ) ) { 674 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 675 } 676 677 if ( ! empty( $bp->activity->track[ $activity_type ]->comments_tracking ) && ! empty( $bp->activity->track[ $activity_type ]->comment_action_id ) ) { 678 $retval = true; 679 } 680 break; 681 682 /** 683 * Does this activity type support comment & reply? 684 */ 685 case 'comment-reply' : 686 // Set the activity track global if not set yet. 687 if ( empty( $bp->activity->track ) ) { 688 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 689 } 690 691 // Post Type activities 692 if ( ! empty( $bp->activity->track[ $activity_type ] ) ) { 693 if ( isset( $bp->activity->track[ $activity_type ]->activity_comment ) ) { 694 $retval = $bp->activity->track[ $activity_type ]->activity_comment; 695 } 696 697 // Eventually override with comment synchronization feature. 698 if ( isset( $bp->activity->track[ $activity_type ]->comments_tracking ) ) { 699 $retval = $bp->activity->track[ $activity_type ]->comments_tracking && ! bp_disable_blogforum_comments(); 700 } 701 702 // Retired Forums component 703 } elseif ( 'new_forum_topic' === $activity_type || 'new_forum_post' === $activity_type ) { 704 $retval = ! bp_disable_blogforum_comments(); 705 706 // By Default, all other activity types are supporting comments. 707 } else { 708 $retval = true; 709 } 710 break; 711 } 712 713 return $retval; 714 } 715 716 /** 717 * Get a specific tracking argument for a given activity type 718 * 719 * @since 2.5.0 720 * 721 * @param string $activity_type the activity type. 722 * @param string $arg the key of the tracking argument. 723 * @return mixed the value of the tracking arg, false if not found. 724 */ 725 function bp_activity_post_type_get_tracking_arg( $activity_type, $arg = '' ) { 726 if ( empty( $activity_type ) || empty( $arg ) ) { 727 return false; 728 } 729 730 $bp = buddypress(); 731 732 // Set the activity track global if not set yet 733 if ( empty( $bp->activity->track ) ) { 734 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 735 } 736 737 if ( isset( $bp->activity->track[ $activity_type ]->{$arg} ) ) { 738 return $bp->activity->track[ $activity_type ]->{$arg}; 739 } else { 740 return false; 741 } 553 742 } 554 743 … … 1402 1591 */ 1403 1592 return apply_filters( 'bp_activity_custom_post_type_post_action', $action, $activity ); 1593 } 1594 1595 /** 1596 * Format activity action strings for custom post types comments. 1597 * 1598 * @since 2.5.0 1599 * 1600 * @param string $action Static activity action. 1601 * @param object $activity Activity data object. 1602 * 1603 * @return string 1604 */ 1605 function bp_activity_format_activity_action_custom_post_type_comment( $action, $activity ) { 1606 $bp = buddypress(); 1607 1608 // Fetch all the tracked post types once. 1609 if ( empty( $bp->activity->track ) ) { 1610 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 1611 } 1612 1613 if ( empty( $activity->type ) || empty( $bp->activity->track[ $activity->type ] ) ) { 1614 return $action; 1615 } 1616 1617 $user_link = bp_core_get_userlink( $activity->user_id ); 1618 1619 if ( is_multisite() ) { 1620 $blog_link = '<a href="' . esc_url( get_home_url( $activity->item_id ) ) . '">' . get_blog_option( $activity->item_id, 'blogname' ) . '</a>'; 1621 1622 if ( ! empty( $bp->activity->track[ $activity->type ]->new_post_type_comment_action_ms ) ) { 1623 $action = sprintf( $bp->activity->track[ $activity->type ]->new_post_type_comment_action_ms, $user_link, $activity->primary_link, $blog_link ); 1624 } else { 1625 $action = sprintf( _x( '%1$s commented on the <a href="%2$s">item</a>, on the site %3$s', 'Activity Custom Post Type comment action', 'buddypress' ), $user_link, $activity->primary_link, $blog_link ); 1626 } 1627 } else { 1628 if ( ! empty( $bp->activity->track[ $activity->type ]->new_post_type_comment_action ) ) { 1629 $action = sprintf( $bp->activity->track[ $activity->type ]->new_post_type_comment_action, $user_link, $activity->primary_link ); 1630 } else { 1631 $action = sprintf( _x( '%1$s commented on the <a href="%2$s">item</a>', 'Activity Custom Post Type post comment action', 'buddypress' ), $user_link, $activity->primary_link ); 1632 } 1633 } 1634 1635 /** 1636 * Filters the formatted custom post type activity comment action string. 1637 * 1638 * @since 2.5.0 1639 * 1640 * @param string $action Activity action string value. 1641 * @param BP_Activity_Activity $activity Activity item object. 1642 */ 1643 return apply_filters( 'bp_activity_custom_post_type_comment_action', $action, $activity ); 1404 1644 } 1405 1645 -
trunk/src/bp-activity/bp-activity-template.php
r10516 r10542 3030 3030 $bp = buddypress(); 3031 3031 3032 // Assume activity can be commented on. 3033 $can_comment = true; 3034 3035 // Determine ability to comment based on activity action name. 3036 $activity_action = bp_get_activity_action_name(); 3037 3038 $turn_off = 0; 3039 if ( ! empty( $activities_template->disable_blogforum_replies ) ) { 3040 $turn_off = 1; 3041 } 3042 3043 $maybe_turn_off = array_fill_keys( array( 3044 'new_blog_post', 3045 'new_blog_comment', 3046 'new_forum_topic', 3047 'new_forum_post', 3048 ), $turn_off ); 3049 3050 $maybe_turn_off['activity_comment'] = 1; 3051 3052 // Fetch all the tracked post types once. 3053 if ( empty( $bp->activity->track ) ) { 3054 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 3055 } 3056 3057 foreach ( $bp->activity->track as $action => $tracking_args ) { 3058 if ( empty( $tracking_args->activity_comment ) ) { 3059 $maybe_turn_off[ $action ] = $turn_off; 3060 } 3061 } 3062 3063 $can_comment = empty( $maybe_turn_off[ $activity_action ] ); 3032 // Determine ability to comment based on activity type name. 3033 $activity_type = bp_get_activity_type(); 3034 3035 // Get the 'comment-reply' support for the current activity type. 3036 $can_comment = bp_activity_type_supports( $activity_type, 'comment-reply' ); 3037 3038 // Neutralize activity_comment. 3039 if ( 'activity_comment' === $activity_type ) { 3040 $can_comment = false; 3041 } 3064 3042 3065 3043 /** … … 3067 3045 * 3068 3046 * @since 1.5.0 3047 * @since 2.5.0 Use $activity_type instead of $activity_name for the second parameter. 3069 3048 * 3070 3049 * @param bool $can_comment Status on if activity can be commented on. 3071 * @param string $activity_ action Current activity actionbeing checked on.3072 */ 3073 return apply_filters( 'bp_activity_can_comment', $can_comment, $activity_ action);3050 * @param string $activity_type Current activity type being checked on. 3051 */ 3052 return apply_filters( 'bp_activity_can_comment', $can_comment, $activity_type ); 3074 3053 } 3075 3054
Note: See TracChangeset
for help on using the changeset viewer.