Ticket #5669: 5669.2.patch
File 5669.2.patch, 59.2 KB (added by , 10 years ago) |
---|
-
src/bp-activity/bp-activity-actions.php
diff --git src/bp-activity/bp-activity-actions.php src/bp-activity/bp-activity-actions.php index 2a04601..17f23e6 100644
function bp_ajax_get_suggestions() { 766 766 wp_send_json_success( $results ); 767 767 } 768 768 add_action( 'wp_ajax_bp_get_suggestions', 'bp_ajax_get_suggestions' ); 769 770 /** 771 * Detect a change in post type status, and initiate an activity update if necessary. 772 * 773 * @since BuddyPress (2.2.0) 774 * 775 * @todo Support untrashing better. 776 * 777 * @param string $new_status New status for the post. 778 * @param string $old_status Old status for the post. 779 * @param object $post Post data. 780 */ 781 function bp_activity_catch_transition_post_type_status( $new_status, $old_status, $post ) { 782 if ( ! post_type_supports( $post->post_type, 'buddypress-activity' ) ) { 783 return; 784 } 785 786 // This is an edit. 787 if ( $new_status === $old_status ) { 788 // An edit of an existing post should update the existing activity item. 789 if ( $new_status == 'publish' ) { 790 bp_activity_post_type_update( $post ); 791 } 792 793 return; 794 } 795 796 // Publishing a previously unpublished post. 797 if ( 'publish' === $new_status ) { 798 // Untrashing the post type - nothing here yet. 799 if ( 'trash' == $old_status ) { 800 do_action( 'bp_activity_post_type_untrash_' . $post->post_type, $post ); 801 } else { 802 // Record the post. 803 bp_activity_post_type_publish( $post->ID, $post ); 804 } 805 806 // Unpublishing a previously published post. 807 } else if ( 'publish' === $old_status ) { 808 // Some form of pending status - only remove the activity entry 809 bp_activity_post_type_unpublish( $post->ID, $post ); 810 } 811 } 812 add_action( 'transition_post_status', 'bp_activity_catch_transition_post_type_status', 10, 3 ); -
src/bp-activity/bp-activity-admin.php
diff --git src/bp-activity/bp-activity-admin.php src/bp-activity/bp-activity-admin.php index 5eb6c48..4386b28 100644
function bp_activity_admin_get_activity_actions() { 798 798 $actions = array(); 799 799 800 800 // Walk through the registered actions, and build an array of actions/values. 801 foreach ( b uddypress()->activity->actionsas $action ) {801 foreach ( bp_activity_get_actions() as $action ) { 802 802 $action = array_values( (array) $action ); 803 803 804 804 for ( $i = 0, $i_count = count( $action ); $i < $i_count; $i++ ) { … … function bp_activity_admin_edit_metabox_type( $item ) { 831 831 $selected = $item->type; 832 832 833 833 // Walk through the registered actions, and build an array of actions/values. 834 foreach ( $bp->activity->actionsas $action ) {834 foreach ( bp_activity_get_actions() as $action ) { 835 835 $action = array_values( (array) $action ); 836 836 837 837 for ( $i = 0, $i_count = count( $action ); $i < $i_count; $i++ ) … … class BP_Activity_List_Table extends WP_List_Table { 1365 1365 $selected = ( ! empty( $_REQUEST['activity_type'] ) ) ? $_REQUEST['activity_type'] : ''; 1366 1366 1367 1367 // Get the actions 1368 $activity_actions = b uddypress()->activity->actions; ?>1368 $activity_actions = bp_activity_get_actions(); ?> 1369 1369 1370 1370 <div class="alignleft actions"> 1371 1371 <select name="activity_type"> -
src/bp-activity/bp-activity-functions.php
diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php index fcbbc07..05231fc 100644
function bp_activity_get_userid_from_mentionname( $mentionname ) { 316 316 * 317 317 * @since BuddyPress (1.1.0) 318 318 * 319 * @param string $component_idThe unique string ID of the component.320 * @param string $typeThe action type.321 * @param string $descriptionThe action description.322 * @param callable $format_callback Callback for formatting the action string.323 * @param string $label String to describe this action in the activity stream324 * filter dropdown.325 * @param array $context Activity stream contexts where the filter should appear.326 * 'activity', 'member', 'member_groups', 'group'319 * @param string $component_id The unique string ID of the component. 320 * @param string $type The action type. 321 * @param string $description The action description. 322 * @param callable $format_callback Callback for formatting the action string. 323 * @param string $label String to describe this action in the activity stream filter dropdown. 324 * @param array $context Optional. Activity stream contexts where the filter should appear. 325 * Values: 'activity', 'member', 'member_groups', 'group' 326 * @param int $position Optional. The position of the action when listed in dropdowns. 327 327 * @return bool False if any param is empty, otherwise true. 328 328 */ 329 function bp_activity_set_action( $component_id, $type, $description, $format_callback = false, $label = false, $context = array() ) {329 function bp_activity_set_action( $component_id, $type, $description, $format_callback = false, $label = false, $context = array(), $position = 0 ) { 330 330 $bp = buddypress(); 331 331 332 332 // Return false if any of the above values are not set … … function bp_activity_set_action( $component_id, $type, $description, $format_cal 368 368 'format_callback' => $format_callback, 369 369 'label' => $label, 370 370 'context' => $context, 371 'position' => $position, 371 372 ), $component_id, $type, $description, $format_callback, $label, $context ); 372 373 373 374 return true; 374 375 } 375 376 376 377 /** 378 * Set tracking arguments for a given post type. 379 * 380 * @since BuddyPress (2.2.0) 381 * 382 * @global $wp_post_types 383 * 384 * @param string $post_type The name of the post type, as registered with WordPress. Eg 'post' or 'page'. 385 * @param array $args { 386 * An associative array of tracking parameters. All items are optional. 387 * 388 * @type string $bp_activity_admin_filter String to use in the Dashboard > Activity dropdown. 389 * @type string $bp_activity_front_filter String to use in frontend dropdown. 390 * @type string $bp_activity_new_post String format to use for generating the activity action. Should be a 391 * translatable string where %1$s is replaced by a user link and %2$s is 392 * the URL of the newly created post. 393 * @type string $bp_activity_new_post_ms String format to use for generating the activity action on Multisite. 394 * Should be a translatable string where %1$s is replaced by a user link, 395 * %2$s is the URL of the newly created post, and %3$s is a link to 396 * the site. 397 * @type string $component_id ID of the BuddyPress component to associate the activity item. 398 * @type string $action_id Value for the 'type' param of the new activity item. 399 * @type callable $format_callback Callback for formatting the activity action string. 400 * Default: 'bp_activity_format_activity_action_custom_post_type_post'. 401 * @type array $contexts The directory contexts in which the filter will show. 402 * Default: array( 'activity' ), 403 * @type array $position Position of the item in filter dropdowns. 404 * @type string $singular Singular, translatable name of the post type item. If no value is 405 * provided, it's pulled from the 'singular_name' of the post type. 406 * @type bool $activity_comment Whether to allow comments on the activity items. Defaults to true if 407 * the post type does not natively support comments, otherwise false. 408 * } 409 */ 410 function bp_activity_set_post_type_tracking_args( $post_type = '', $args = array() ) { 411 global $wp_post_types; 412 $bp = buddypress(); 413 414 if ( empty( $wp_post_types[ $post_type ] ) || ! post_type_supports( $post_type, 'buddypress-activity' ) || ! is_array( $args ) ) { 415 return false; 416 } 417 418 // Labels are loaded into the post type object. 419 foreach ( array( 'bp_activity_admin_filter', 'bp_activity_front_filter', 'bp_activity_new_post', 'bp_activity_new_post_ms' ) as $label_type ) { 420 if ( ! empty( $args[ $label_type ] ) ) { 421 $wp_post_types[ $post_type ]->labels->{$label_type} = $args[ $label_type ]; 422 unset( $args[ $post_type ] ); 423 } 424 } 425 426 // If there are any additional args, put them in the bp_activity attribute of the post type. 427 if ( ! empty( $args ) ) { 428 $wp_post_types[ $post_type ]->bp_activity = $args; 429 } 430 } 431 432 /** 433 * Get tracking arguments for a specific post type. 434 * 435 * @since BuddyPress (2.2.0) 436 * 437 * @param string $post_type Name of the post type 438 * @return object The tracking arguments of the post type. 439 */ 440 function bp_activity_get_post_type_tracking_args( $post_type ) { 441 if ( ! post_type_supports( $post_type, 'buddypress-activity' ) ) { 442 return false; 443 } 444 445 $post_type_object = get_post_type_object( $post_type ); 446 447 $post_type_activity = array( 448 'component_id' => buddypress()->activity->id, 449 'action_id' => 'new_' . $post_type, 450 'format_callback' => 'bp_activity_format_activity_action_custom_post_type_post', 451 'front_filter' => $post_type_object->labels->name, 452 'contexts' => array( 'activity' ), 453 'position' => 0, 454 'singular' => strtolower( $post_type_object->labels->singular_name ), 455 'activity_commment' => ! post_type_supports( $post_type, 'comments' ), 456 ); 457 458 if ( ! empty( $post_type_object->bp_activity ) ) { 459 $post_type_activity = bp_parse_args( (array) $post_type_object->bp_activity, $post_type_activity, $post_type . '_tracking_args' ); 460 } 461 462 $post_type_activity = (object) $post_type_activity; 463 464 // Try to get the admin filter from the post type labels. 465 if ( ! empty( $post_type_object->labels->bp_activity_admin_filter ) ) { 466 $post_type_activity->admin_filter = $post_type_object->labels->bp_activity_admin_filter; 467 468 // Fall back to a generic name. 469 } else { 470 $post_type_activity->admin_filter = _x( 'New item published', 'Post Type generic activity post admin filter', 'buddypress' ); 471 } 472 473 // Check for the front filter in the post type labels. 474 if ( ! empty( $post_type_object->labels->bp_activity_front_filter ) ) { 475 $post_type_activity->front_filter = $post_type_object->labels->bp_activity_front_filter; 476 } 477 478 // Try to get the action for new post type action on non-multisite installations. 479 if ( ! empty( $post_type_object->labels->bp_activity_new_post ) ) { 480 $post_type_activity->new_post_type_action = $post_type_object->labels->bp_activity_new_post; 481 } 482 483 // Try to get the action for new post type action on multisite installations. 484 if ( ! empty( $post_type_object->labels->bp_activity_new_post_ms ) ) { 485 $post_type_activity->new_post_type_action_ms = $post_type_object->labels->bp_activity_new_post_ms; 486 } 487 488 return apply_filters( 'bp_activity_get_post_type_tracking_args', $post_type_activity, $post_type ); 489 } 490 491 /** 492 * Get tracking arguments for all post types. 493 * 494 * @since BuddyPress (2.2.0) 495 * 496 * @return array List of post types with their tracking arguments. 497 */ 498 function bp_activity_get_post_types_tracking_args() { 499 // Fetch all public post types 500 $post_types = get_post_types( array( 'public' => true ), 'names' ); 501 502 $post_types_tracking_args = array(); 503 504 foreach ( $post_types as $post_type ) { 505 $track_post_type = bp_activity_get_post_type_tracking_args( $post_type ); 506 507 if ( ! empty( $track_post_type ) ) { 508 $post_types_tracking_args[ $track_post_type->action_id ] = $track_post_type; 509 } 510 511 } 512 513 return apply_filters( 'bp_activity_get_post_types_tracking_args', $post_types_tracking_args ); 514 } 515 516 /** 517 * Get all components' activity actions, sorted by their position attribute. 518 * 519 * @since BuddyPress (2.2.0) 520 * 521 * @return object actions ordered by their position 522 */ 523 function bp_activity_get_actions() { 524 $bp = buddypress(); 525 526 $post_types = bp_activity_get_post_types_tracking_args(); 527 528 // Create the actions for the post types, if they haven't already been created. 529 if ( ! empty( $post_types ) ) { 530 foreach ( $post_types as $post_type ) { 531 if ( isset( $bp->activity->actions->{$post_type->component_id}->{$post_type->action_id} ) ) { 532 continue; 533 } 534 535 bp_activity_set_action( 536 $post_type->component_id, 537 $post_type->action_id, 538 $post_type->admin_filter, 539 $post_type->format_callback, 540 $post_type->front_filter, 541 $post_type->contexts, 542 $post_type->position 543 ); 544 } 545 } 546 547 // Sort the actions by their position within each component. 548 foreach ( $bp->activity->actions as $component => $actions ) { 549 $actions = (array) $actions; 550 $temp = bp_sort_by_key( $actions, 'position', 'num' ); 551 552 // Restore keys. 553 $bp->activity->actions->{$component} = new stdClass; 554 foreach ( $temp as $key_ordered ) { 555 $bp->activity->actions->{$component}->{$key_ordered['key']} = $key_ordered; 556 } 557 } 558 559 return $bp->activity->actions; 560 } 561 562 /** 377 563 * Retreive the current action from a component and key. 378 564 * 379 565 * @since BuddyPress (1.1.0) … … function bp_activity_get_action( $component_id, $key ) { 391 577 return false; 392 578 } 393 579 394 $bp = buddypress(); 395 $retval = isset( $bp->activity->actions->{$component_id}->{$key} ) 396 ? $bp->activity->actions->{$component_id}->{$key} 397 : false; 580 $bp = buddypress(); 581 $actions = bp_activity_get_actions(); 582 583 $retval = false; 584 if ( isset( $actions->{$component_id}->{$key} ) ) { 585 $retval = $actions->{$component_id}->{$key}; 586 } 398 587 399 588 /** 400 589 * Filters the current action by component and key. 401 590 * 402 591 * @since BuddyPress (1.1.0) 403 592 * 404 * @param string|bool $retval The action key.593 * @param string|bool $retval The action key. 405 594 * @param string $component_id The unique string ID of the component. 406 * @param string $key The action key.595 * @param string $key The action key. 407 596 */ 408 597 return apply_filters( 'bp_activity_get_action', $retval, $component_id, $key ); 409 598 } … … function bp_activity_get_types() { 419 608 $actions = array(); 420 609 421 610 // Walk through the registered actions, and build an array of actions/values. 422 foreach ( b uddypress()->activity->actionsas $action ) {611 foreach ( bp_activity_get_actions() as $action ) { 423 612 $action = array_values( (array) $action ); 424 613 425 614 for ( $i = 0, $i_count = count( $action ); $i < $i_count; $i++ ) { … … function bp_activity_format_activity_action_activity_comment( $action, $activity 1130 1319 return apply_filters( 'bp_activity_comment_action', $action, $activity ); 1131 1320 } 1132 1321 1322 /** 1323 * Format activity action strings for custom post types. 1324 * 1325 * @since BuddyPress (2.2.0) 1326 * 1327 * @param string $action Static activity action. 1328 * @param object $activity Activity data object. 1329 * @return string 1330 */ 1331 function bp_activity_format_activity_action_custom_post_type_post( $action, $activity ) { 1332 $bp = buddypress(); 1333 1334 // Fetch all the tracked post types once. 1335 if ( empty( $bp->activity->track ) ) { 1336 $bp->activity->track = bp_activity_get_post_types_tracking_args(); 1337 } 1338 1339 if ( empty( $activity->type ) || empty( $bp->activity->track[ $activity->type ] ) ) { 1340 return $action; 1341 } 1342 1343 $user_link = bp_core_get_userlink( $activity->user_id ); 1344 $blog_url = get_home_url( $activity->item_id ); 1345 1346 if ( empty( $activity->post_url ) ) { 1347 $post_url = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( $blog_url ) ); 1348 } else { 1349 $post_url = $activity->post_url; 1350 } 1351 1352 if ( is_multisite() ) { 1353 $blog_link = '<a href="' . $blog_url . '">' . get_blog_option( $activity->item_id, 'blogname' ) . '</a>'; 1354 1355 if ( ! empty( $bp->activity->track[ $activity->type ]->new_post_type_action_ms ) ) { 1356 $action = sprintf( $bp->activity->track[ $activity->type ]->new_post_type_action_ms, $user_link, $post_url, $blog_link ); 1357 } else { 1358 $action = sprintf( _x( '%1$s wrote a new <a href="%2$s">item</a>, on the site %3$s', 'Activity Custom Post Type post action', 'buddypress' ), $user_link, $post_url, $blog_link ); 1359 } 1360 } else { 1361 if ( ! empty( $bp->activity->track[ $activity->type ]->new_post_type_action ) ) { 1362 $action = sprintf( $bp->activity->track[ $activity->type ]->new_post_type_action, $user_link, $post_url ); 1363 } else { 1364 $action = sprintf( _x( '%1$s wrote a new <a href="%2$s">item</a>', 'Activity Custom Post Type post action', 'buddypress' ), $user_link, $post_url ); 1365 } 1366 } 1367 1368 /** 1369 * Filters the formatted custom post type activity post action string. 1370 * 1371 * @since BuddyPress (2.2.0) 1372 * 1373 * @param string $action Activity action string value. 1374 * @param BP_Activity_Activity $activity Activity item object. 1375 */ 1376 return apply_filters( 'bp_activity_custom_post_type_post_action', $action, $activity ); 1377 } 1378 1133 1379 /****************************************************************************** 1134 1380 * Business functions are where all the magic happens in BuddyPress. They will 1135 1381 * handle the actual saving or manipulation of information. Usually they will … … function bp_activity_post_update( $args = '' ) { 1513 1759 } 1514 1760 1515 1761 /** 1762 * Create an activity item for a newly published post type post. 1763 * 1764 * @since BuddyPress (2.2.0) 1765 * 1766 * @param int $post_id ID of the new post. 1767 * @param WP_Post $post Post object. 1768 * @param int $user_id ID of the post author. 1769 * @return int|bool The ID of the activity on success. False on error. 1770 */ 1771 function bp_activity_post_type_publish( $post_id = 0, $post = null, $user_id = 0 ) { 1772 $bp = buddypress(); 1773 1774 if ( ! is_a( $post, 'WP_Post' ) ) { 1775 return; 1776 } 1777 1778 // Get the post type tracking args. 1779 $activity_post_object = bp_activity_get_post_type_tracking_args( $post->post_type ); 1780 1781 if ( 'publish' != $post->post_status || ! empty( $post->post_password ) || empty( $activity_post_object->action_id ) ) { 1782 return; 1783 } 1784 1785 if ( empty( $post_id ) ) { 1786 $post_id = $post->ID; 1787 } 1788 1789 $blog_id = get_current_blog_id(); 1790 1791 if ( empty( $user_id ) ) { 1792 $user_id = (int) $post->post_author; 1793 } 1794 1795 // Bail if an activity item already exists for this post. 1796 $existing = bp_activity_get( array( 1797 'filter' => array( 1798 'action' => $activity_post_object->action_id, 1799 'primary_id' => $blog_id, 1800 'secondary_id' => $post_id, 1801 ) 1802 ) ); 1803 1804 if ( ! empty( $existing['activities'] ) ) { 1805 return; 1806 } 1807 1808 // Let components/plugins bail before the activity is posted. 1809 if ( false === apply_filters( "bp_activity_{$post->post_type}_pre_publish", true, $blog_id, $post_id, $user_id ) ) { 1810 return; 1811 } 1812 1813 // Record this in activity streams. 1814 $blog_url = get_home_url( $blog_id ); 1815 $post_url = add_query_arg( 1816 'p', 1817 $post_id, 1818 trailingslashit( $blog_url ) 1819 ); 1820 1821 // Backward compatibility filters for the 'blogs' component. 1822 if ( 'blogs' == $activity_post_object->component_id ) { 1823 $activity_content = apply_filters( 'bp_blogs_activity_new_post_content', $post->post_content, $post, $post_url, $post->post_type ); 1824 $activity_primary_link = apply_filters( 'bp_blogs_activity_new_post_primary_link', $post_url, $post_id, $post->post_type ); 1825 } else { 1826 $activity_content = $post->post_content; 1827 $activity_primary_link = $post_url; 1828 } 1829 1830 $activity_args = array( 1831 'user_id' => $user_id, 1832 'content' => $activity_content, 1833 'primary_link' => $activity_primary_link, 1834 'component' => $activity_post_object->component_id, 1835 'type' => $activity_post_object->action_id, 1836 'item_id' => $blog_id, 1837 'secondary_item_id' => $post_id, 1838 'recorded_time' => $post->post_date_gmt, 1839 ); 1840 1841 // Remove large images and replace them with just one image thumbnail. 1842 if ( ! empty( $activity_args['content'] ) ) { 1843 $activity_args['content'] = bp_activity_thumbnail_content_images( $activity_args['content'], $activity_args['primary_link'], $activity_args ); 1844 } 1845 1846 if ( ! empty( $activity_args['content'] ) ) { 1847 // Create the excerpt. 1848 $activity_excerpt = bp_create_excerpt( $activity_args['content'] ); 1849 1850 // Backward compatibility filter for blog posts. 1851 if ( 'blogs' == $activity_post_object->component_id ) { 1852 $activity_args['content'] = apply_filters( 'bp_blogs_record_activity_content', $activity_excerpt, $activity_args['content'], $activity_args, $post->post_type ); 1853 } else { 1854 $activity_args['content'] = $activity_excerpt; 1855 } 1856 } 1857 1858 // Set up the action by using the format functions. 1859 $action_args = array_merge( $activity_args, array( 1860 'post_title' => $post->post_title, 1861 'post_url' => $post_url, 1862 ) ); 1863 1864 $activity_args['action'] = call_user_func_array( $activity_post_object->format_callback, array( '', (object) $action_args ) ); 1865 1866 // Make sure the action is set. 1867 if ( empty( $activity_args['action'] ) ) { 1868 return; 1869 } else { 1870 // Backward compatibility filter for the blogs component. 1871 if ( 'blogs' == $activity_post_object->component_id ) { 1872 $activity_args['action'] = apply_filters( 'bp_blogs_record_activity_action', $activity_args['action'] ); 1873 } 1874 } 1875 1876 $activity_id = bp_activity_add( $activity_args ); 1877 1878 do_action( 'bp_activity_post_type_published', $activity_id, $post, $activity_args ); 1879 1880 return $activity_id; 1881 } 1882 1883 /** 1884 * Update the activity item for a custom post type entry. 1885 * 1886 * @since BuddyPress (2.2.0) 1887 * 1888 * @param WP_Post $post Post item. 1889 * @return bool True on success, false on failure. 1890 */ 1891 function bp_activity_post_type_update( $post = null ) { 1892 $bp = buddypress(); 1893 1894 if ( ! is_a( $post, 'WP_Post' ) ) { 1895 return; 1896 } 1897 1898 // Get the post type tracking args. 1899 $activity_post_object = bp_activity_get_post_type_tracking_args( $post->post_type ); 1900 1901 if ( empty( $activity_post_object->action_id ) ) { 1902 return; 1903 } 1904 1905 $activity_id = bp_activity_get_activity_id( array( 1906 'component' => $activity_post_object->component_id, 1907 'item_id' => get_current_blog_id(), 1908 'secondary_item_id' => $post->ID, 1909 'type' => $activity_post_object->action_id, 1910 ) ); 1911 1912 // Activity ID doesn't exist, so stop! 1913 if ( empty( $activity_id ) ) { 1914 return; 1915 } 1916 1917 // Delete the activity if the post was updated with a password. 1918 if ( ! empty( $post->post_password ) ) { 1919 bp_activity_delete( array( 'id' => $activity_id ) ); 1920 } 1921 1922 // Update the activity entry. 1923 $activity = new BP_Activity_Activity( $activity_id ); 1924 1925 if ( ! empty( $post->post_content ) ) { 1926 // Make sure to update the thumbnail image. 1927 $post_content = bp_activity_thumbnail_content_images( $post->post_content, $activity->primary_link, (array) $activity ); 1928 1929 // Generate an excerpt. 1930 $activity_excerpt = bp_create_excerpt( $post_content ); 1931 1932 // Backward compatibility filter for the blogs component. 1933 if ( 'blogs' == $activity_post_object->component_id ) { 1934 $activity->content = apply_filters( 'bp_blogs_record_activity_content', $activity_excerpt, $post_content, (array) $activity, $post->post_type ); 1935 } else { 1936 $activity->content = $activity_excerpt; 1937 } 1938 } 1939 1940 // Save the updated activity. 1941 $updated = $activity->save(); 1942 1943 do_action( 'bp_activity_post_type_updated', $post, $activity ); 1944 1945 return $updated; 1946 } 1947 1948 /** 1949 * Unpublish an activity for the custom post type. 1950 * 1951 * @since BuddyPress (2.2.0) 1952 * 1953 * @param int $post_id ID of the post being unpublished. 1954 * @param WP_Post $post Post object. 1955 * @return bool True on success, false on failure. 1956 */ 1957 function bp_activity_post_type_unpublish( $post_id = 0, $post = null ) { 1958 $bp = buddypress(); 1959 1960 if ( ! is_a( $post, 'WP_Post' ) ) { 1961 return; 1962 } 1963 1964 // Get the post type tracking args 1965 $activity_post_object = bp_activity_get_post_type_tracking_args( $post->post_type ); 1966 1967 if ( empty( $activity_post_object->action_id ) ) { 1968 return; 1969 } 1970 1971 if ( empty( $post_id ) ) { 1972 $post_id = $post->ID; 1973 } 1974 1975 $delete_activity_args = array( 1976 'item_id' => get_current_blog_id(), 1977 'secondary_item_id' => $post_id, 1978 'component' => $activity_post_object->component_id, 1979 'type' => $activity_post_object->action_id, 1980 'user_id' => false, 1981 ); 1982 1983 $deleted = bp_activity_delete_by_item_id( $delete_activity_args ); 1984 1985 do_action( 'bp_activity_post_type_unpublished', $delete_activity_args, $post, $deleted ); 1986 1987 return $deleted; 1988 } 1989 1990 /** 1516 1991 * Add an activity comment. 1517 1992 * 1518 1993 * @since BuddyPress (1.2.0) … … function bp_activity_delete_comment( $activity_id, $comment_id ) { 1988 2463 * @return string $link Permalink for the activity item. 1989 2464 */ 1990 2465 function bp_activity_get_permalink( $activity_id, $activity_obj = false ) { 2466 $bp = buddypress(); 1991 2467 1992 2468 if ( empty( $activity_obj ) ) { 1993 2469 $activity_obj = new BP_Activity_Activity( $activity_id ); … … function bp_activity_get_permalink( $activity_id, $activity_obj = false ) { 1997 2473 $activity_obj = $activity_obj->current_comment; 1998 2474 } 1999 2475 2000 if ( 'new_blog_post' == $activity_obj->type || 'new_blog_comment' == $activity_obj->type || 'new_forum_topic' == $activity_obj->type || 'new_forum_post' == $activity_obj->type ) { 2476 $use_primary_links = array( 2477 'new_blog_post', 2478 'new_blog_comment', 2479 'new_forum_topic', 2480 'new_forum_post', 2481 ); 2482 2483 if ( ! empty( $bp->activity->track ) ) { 2484 $use_primary_links = array_merge( $use_primary_links, array_keys( $bp->activity->track ) ); 2485 } 2486 2487 if ( false !== array_search( $activity_obj->type, $use_primary_links ) ) { 2001 2488 $link = $activity_obj->primary_link; 2002 2489 } else { 2003 2490 if ( 'activity_comment' == $activity_obj->type ) { -
src/bp-activity/bp-activity-template.php
diff --git src/bp-activity/bp-activity-template.php src/bp-activity/bp-activity-template.php index d51c2f3..9035a86 100644
function bp_activity_filter_links( $args = false ) { 3315 3315 */ 3316 3316 function bp_activity_can_comment() { 3317 3317 global $activities_template; 3318 $bp = buddypress(); 3318 3319 3319 3320 // Assume activity can be commented on 3320 3321 $can_comment = true; 3321 3322 3322 3323 // Determine ability to comment based on activity action name 3323 3324 $activity_action = bp_get_activity_action_name(); 3324 switch ( $activity_action ) {3325 3326 // Maybe turn off for blog and forum updates3327 case 'new_blog_post' :3328 case 'new_blog_comment' :3329 case 'new_forum_topic' :3330 case 'new_forum_post' :3331 if ( ! empty( $activities_template->disable_blogforum_replies ) ) {3332 $can_comment = false;3333 }3334 break;3335 3325 3336 // Turn off for activity comments 3337 case 'activity_comment' : 3338 $can_comment = false; 3339 break; 3326 $turn_off = 0; 3327 if ( ! empty( $activities_template->disable_blogforum_replies ) ) { 3328 $turn_off = 1; 3340 3329 } 3341 3330 3331 $maybe_turn_off = array_fill_keys( array( 3332 'new_blog_post', 3333 'new_blog_comment', 3334 'new_forum_topic', 3335 'new_forum_post', 3336 ), $turn_off ); 3337 3338 $maybe_turn_off['activity_comment'] = 1; 3339 3340 if ( ! empty( $bp->activity->track ) ) { 3341 foreach ( array_keys( $bp->activity->track ) as $action ) { 3342 if ( empty( $bp->activity->track[ $action ]['activity_commment'] ) ) { 3343 $maybe_turn_off[ $action ] = $turn_off; 3344 } 3345 } 3346 } 3347 3348 $can_comment = empty( $maybe_turn_off[ $activity_action ] ); 3349 3342 3350 /** 3343 3351 * Filters whether a comment can be made on an activity item. 3344 3352 * … … function bp_activity_show_filters( $context = '' ) { 4367 4375 4368 4376 // Walk through the registered actions, and prepare an the 4369 4377 // select box options. 4370 foreach ( b uddypress()->activity->actionsas $actions ) {4378 foreach ( bp_activity_get_actions() as $actions ) { 4371 4379 foreach ( $actions as $action ) { 4372 4380 if ( ! in_array( $context, (array) $action['context'] ) ) { 4373 4381 continue; -
src/bp-blogs/bp-blogs-activity.php
diff --git src/bp-blogs/bp-blogs-activity.php src/bp-blogs/bp-blogs-activity.php index 8b67a16..0a43935 100644
function bp_blogs_register_activity_actions() { 33 33 'new_blog', 34 34 __( 'New site created', 'buddypress' ), 35 35 'bp_blogs_format_activity_action_new_blog', 36 __( 'New Sites', 'buddypress' ) 36 __( 'New Sites', 'buddypress' ), 37 0 37 38 ); 38 39 } 39 40 40 bp_activity_set_action( 41 $bp->blogs->id, 42 'new_blog_post', 43 __( 'New post published', 'buddypress' ), 44 'bp_blogs_format_activity_action_new_blog_post', 45 __( 'Posts', 'buddypress' ), 46 array( 'activity', 'member' ) 47 ); 48 49 bp_activity_set_action( 50 $bp->blogs->id, 51 'new_blog_comment', 52 __( 'New post comment posted', 'buddypress' ), 53 'bp_blogs_format_activity_action_new_blog_comment', 54 __( 'Comments', 'buddypress' ), 55 array( 'activity', 'member' ) 56 ); 41 // Only add the comment type if the 'post' post type is trackable 42 if ( post_type_supports( 'post', 'buddypress-activity' ) ) { 43 bp_activity_set_action( 44 $bp->blogs->id, 45 'new_blog_comment', 46 __( 'New post comment posted', 'buddypress' ), 47 'bp_blogs_format_activity_action_new_blog_comment', 48 __( 'Comments', 'buddypress' ), 49 array( 'activity', 'member' ), 50 10 51 ); 52 } 57 53 58 54 do_action( 'bp_blogs_register_activity_actions' ); 59 55 } … … function bp_blogs_format_activity_action_new_blog_post( $action, $activity ) { 108 104 bp_blogs_update_blogmeta( $activity->item_id, 'name', $blog_name ); 109 105 } 110 106 111 $post_url = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( $blog_url ) ); 107 if ( empty( $activity->post_url ) ) { 108 $post_url = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( $blog_url ) ); 109 } else { 110 $post_url = $activity->post_url; 111 } 112 112 113 $post_title = bp_activity_get_meta( $activity->id, 'post_title' ); 113 if ( empty( $activity->post_title ) ) { 114 $post_title = bp_activity_get_meta( $activity->id, 'post_title' ); 115 } else { 116 $post_title = $activity->post_title; 117 } 114 118 115 119 // Should only be empty at the time of post creation 116 120 if ( empty( $post_title ) ) { -
src/bp-blogs/bp-blogs-filters.php
diff --git src/bp-blogs/bp-blogs-filters.php src/bp-blogs/bp-blogs-filters.php index 9cf0c92..ab3b60e 100644
add_filter( 'wp_signup_location', 'bp_blogs_creation_location' ); 42 42 * 43 43 * @since BuddyPress (2.1.0) 44 44 * 45 * @see bp_blogs_update_post ()45 * @see bp_blogs_update_post_activity_meta() 46 46 * 47 47 * @param array Current SQL clauses in array format 48 48 * @return array 49 49 */ 50 50 function bp_blogs_comments_clauses_select_by_id( $retval ) { 51 51 $retval['fields'] = 'comment_ID'; 52 52 53 53 return $retval; 54 } 55 No newline at end of file 54 } 55 56 /** 57 * Check whether the current post can be published. 58 * 59 * Abstracted from the deprecated `bp_blogs_record_post()`. 60 * 61 * @since BuddyPress (2.2.0) 62 * 63 * @param bool $return Whether the post should be published. 64 * @param int $blog_id ID of the blog. 65 * @param int $post_id ID of the post. 66 * @param int $user_id ID of the post author. 67 * @return bool True to authorize the post to be published, otherwise false. 68 */ 69 function bp_blogs_post_pre_publish( $return = true, $blog_id = 0, $post_id = 0, $user_id = 0 ) { 70 $bp = buddypress(); 71 72 // If blog is not trackable, do not record the activity. 73 if ( ! bp_blogs_is_blog_trackable( $blog_id, $user_id ) ) { 74 return false; 75 } 76 77 /* 78 * Stop infinite loops with WordPress MU Sitewide Tags. 79 * That plugin changed the way its settings were stored at some point. Thus the dual check. 80 */ 81 if ( ! empty( $bp->site_options['sitewide_tags_blog'] ) ) { 82 $st_options = maybe_unserialize( $bp->site_options['sitewide_tags_blog'] ); 83 $tags_blog_id = isset( $st_options['tags_blog_id'] ) ? $st_options['tags_blog_id'] : 0; 84 } else { 85 $tags_blog_id = isset( $bp->site_options['tags_blog_id'] ) ? $bp->site_options['tags_blog_id'] : 0; 86 } 87 88 if ( (int) $blog_id == $tags_blog_id && apply_filters( 'bp_blogs_block_sitewide_tags_activity', true ) ) { 89 return false; 90 } 91 92 $is_blog_public = apply_filters( 'bp_is_blog_public', (int) get_blog_option( $blog_id, 'blog_public' ) ); 93 94 if ( 0 === $is_blog_public && is_multisite() ) { 95 return false; 96 } 97 98 return $return; 99 } 100 add_filter( 'bp_activity_post_pre_publish', 'bp_blogs_post_pre_publish', 10, 4 ); -
src/bp-blogs/bp-blogs-functions.php
diff --git src/bp-blogs/bp-blogs-functions.php src/bp-blogs/bp-blogs-functions.php index 41f62f6..caffa1e 100644
function bp_blogs_update_option_thread_comments_depth( $oldvalue, $newvalue ) { 402 402 add_action( 'update_option_thread_comments_depth', 'bp_blogs_update_option_thread_comments_depth', 10, 2 ); 403 403 404 404 /** 405 * Detect a change in post status, and initiate an activity update if necessary.405 * Record activity metadata about a published blog post. 406 406 * 407 * Posts get new activity updates when (a) they are being published, and (b) 408 * they have not already been published. This enables proper posting for 409 * regular posts as well as scheduled posts, while preventing post bumping. 407 * @since BuddyPress (2.2.0) 410 408 * 411 * See #4090, #3746, #2546 for background. 412 * 413 * @since BuddyPress (2.0.0) 414 * 415 * @todo Support untrashing better 416 * 417 * @param string $new_status New status for the post. 418 * @param string $old_status Old status for the post. 419 * @param object $post Post data. 409 * @param int $activity_id ID of the acitvity item. 410 * @param WP_Post $post Post object. 420 411 */ 421 function bp_blogs_catch_transition_post_status( $new_status, $old_status, $post ) { 422 423 // This is an edit 424 if ( $new_status === $old_status ) { 425 if ( $new_status == 'publish' ) { 426 bp_blogs_update_post( $post ); 427 return; 428 } 429 } 430 431 // Publishing a previously unpublished post 432 if ( 'publish' === $new_status ) { 433 // Untrashing the post 434 // Nothing here yet 435 if ( 'trash' == $old_status ) {} 436 437 // Record the post 438 bp_blogs_record_post( $post->ID, $post ); 439 440 // Unpublishing a previously published post 441 } else if ( 'publish' === $old_status ) { 442 // Some form of pending status 443 // Only remove the activity entry 444 bp_blogs_delete_activity( array( 445 'item_id' => get_current_blog_id(), 446 'secondary_item_id' => $post->ID, 447 'component' => buddypress()->blogs->id, 448 'type' => 'new_blog_post' 449 ) ); 412 function bp_blogs_publish_post_activity_meta( $activity_id, $post, $args ) { 413 if ( empty( $activity_id ) || 'post' != $post->post_type ) { 414 return; 450 415 } 451 }452 add_action( 'transition_post_status', 'bp_blogs_catch_transition_post_status', 10, 3 );453 454 /**455 * Record a new blog post in the BuddyPress activity stream.456 *457 * @param int $post_id ID of the post being recorded.458 * @param object $post The WP post object passed to the 'save_post' action.459 * @param int $user_id Optional. The user to whom the activity item will be460 * associated. Defaults to the post_author.461 * @return bool|null Returns false on failure.462 */463 function bp_blogs_record_post( $post_id, $post, $user_id = 0 ) {464 global $bp, $wpdb;465 466 $post_id = (int) $post_id;467 $blog_id = (int) $wpdb->blogid;468 469 // If blog is not trackable, do not record the activity.470 if ( ! bp_blogs_is_blog_trackable( $blog_id, $user_id ) )471 return false;472 416 473 if ( !$user_id ) 474 $user_id = (int) $post->post_author; 417 bp_activity_update_meta( $activity_id, 'post_title', $post->post_title ); 475 418 476 // Stop infinite loops with WordPress MU Sitewide Tags. 477 // That plugin changed the way its settings were stored at some point. Thus the dual check. 478 if ( !empty( $bp->site_options['sitewide_tags_blog'] ) ) { 479 $st_options = maybe_unserialize( $bp->site_options['sitewide_tags_blog'] ); 480 $tags_blog_id = isset( $st_options['tags_blog_id'] ) ? $st_options['tags_blog_id'] : 0; 419 if ( ! empty( $args['post_url'] ) ) { 420 $post_permalink = $args['post_url']; 481 421 } else { 482 $ tags_blog_id = isset( $bp->site_options['tags_blog_id'] ) ? $bp->site_options['tags_blog_id'] : 0;422 $post_permalink = $post->guid; 483 423 } 484 424 485 if ( (int) $blog_id == $tags_blog_id && apply_filters( 'bp_blogs_block_sitewide_tags_activity', true ) ) 486 return false; 487 488 // Don't record this if it's not a post 489 if ( !in_array( $post->post_type, apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) ) ) ) 490 return false; 491 492 $is_blog_public = apply_filters( 'bp_is_blog_public', (int)get_blog_option( $blog_id, 'blog_public' ) ); 493 494 if ( 'publish' == $post->post_status && empty( $post->post_password ) ) { 495 if ( $is_blog_public || !is_multisite() ) { 425 bp_activity_update_meta( $activity_id, 'post_url', $post_permalink ); 496 426 497 // Record this in activity streams 498 $post_permalink = add_query_arg( 499 'p', 500 $post_id, 501 trailingslashit( get_home_url( $blog_id ) ) 502 ); 503 504 if ( is_multisite() ) 505 $activity_action = sprintf( __( '%1$s wrote a new post, %2$s, on the site %3$s', 'buddypress' ), bp_core_get_userlink( (int) $post->post_author ), '<a href="' . $post_permalink . '">' . $post->post_title . '</a>', '<a href="' . get_blog_option( $blog_id, 'home' ) . '">' . get_blog_option( $blog_id, 'blogname' ) . '</a>' ); 506 else 507 $activity_action = sprintf( __( '%1$s wrote a new post, %2$s', 'buddypress' ), bp_core_get_userlink( (int) $post->post_author ), '<a href="' . $post_permalink . '">' . $post->post_title . '</a>' ); 508 509 // Make sure there's not an existing entry for this post (prevent bumping) 510 if ( bp_is_active( 'activity' ) ) { 511 $existing = bp_activity_get( array( 512 'filter' => array( 513 'action' => 'new_blog_post', 514 'primary_id' => $blog_id, 515 'secondary_id' => $post_id, 516 ) 517 ) ); 518 519 if ( !empty( $existing['activities'] ) ) { 520 return; 521 } 522 } 523 524 $activity_content = $post->post_content; 525 526 $activity_id = bp_blogs_record_activity( array( 527 'user_id' => (int) $post->post_author, 528 'content' => apply_filters( 'bp_blogs_activity_new_post_content', $activity_content, $post, $post_permalink ), 529 'primary_link' => apply_filters( 'bp_blogs_activity_new_post_primary_link', $post_permalink, $post_id ), 530 'type' => 'new_blog_post', 531 'item_id' => $blog_id, 532 'secondary_item_id' => $post_id, 533 'recorded_time' => $post->post_date_gmt, 534 ) ); 535 536 // save post title in activity meta 537 if ( bp_is_active( 'activity' ) ) { 538 bp_activity_update_meta( $activity_id, 'post_title', $post->post_title ); 539 bp_activity_update_meta( $activity_id, 'post_url', $post_permalink ); 540 } 541 } 542 543 // Update the blogs last activity 544 bp_blogs_update_blogmeta( $blog_id, 'last_activity', bp_core_current_time() ); 545 } else { 546 bp_blogs_remove_post( $post_id, $blog_id, $user_id ); 547 } 427 // Update the blog's last activity. 428 bp_blogs_update_blogmeta( $args['item_id'], 'last_activity', bp_core_current_time() ); 548 429 549 do_action( 'bp_blogs_new_blog_post', $post _id, $post, $user_id);430 do_action( 'bp_blogs_new_blog_post', $post->ID, $post, $args['user_id'] ); 550 431 } 432 add_action( 'bp_activity_post_type_published', 'bp_blogs_publish_post_activity_meta', 10, 3 ); 551 433 552 434 /** 553 * Updates a blog post's corresponding activityentry during a post edit.435 * Updates a blog post's activity meta entry during a post edit. 554 436 * 555 * @since BuddyPress (2.0.0) 556 * 557 * @see bp_blogs_catch_transition_post_status() 437 * @since BuddyPress (2.2.0) 558 438 * 559 * @param WP_Post $post 439 * @param WP_Post $post Post object. 440 * @param BP_Actitivy_Activity $activity Activity object. 560 441 */ 561 function bp_blogs_update_post( $post ) { 562 if ( ! bp_is_active( 'activity' ) ) { 563 return; 564 } 565 566 $activity_id = bp_activity_get_activity_id( array( 567 'component' => buddypress()->blogs->id, 568 'item_id' => get_current_blog_id(), 569 'secondary_item_id' => $post->ID, 570 'type' => 'new_blog_post', 571 ) ); 572 573 // activity ID doesn't exist, so stop! 574 if ( empty( $activity_id ) ) { 442 function bp_blogs_update_post_activity_meta( $post, $activity ) { 443 if ( empty( $activity->id ) || 'post' != $post->post_type ) { 575 444 return; 576 445 } 577 446 578 // update the activity entry 579 $activity = new BP_Activity_Activity( $activity_id ); 580 581 if ( ! empty( $post->post_content ) ) { 582 // Make sure to update the thumbnail image 583 $post_content = bp_activity_thumbnail_content_images( $post->post_content, $activity->primary_link, (array) $activity ); 584 585 // Make sure to apply the blop post excerpt 586 $activity->content = apply_filters( 'bp_blogs_record_activity_content', bp_create_excerpt( $post_content ), $post_content, (array) $activity ); 587 } 588 589 // Save the updated activity 590 $activity->save(); 591 592 // update post title in activity meta 593 $existing_title = bp_activity_get_meta( $activity_id, 'post_title' ); 447 // Update post title in activity meta. 448 $existing_title = bp_activity_get_meta( $activity->id, 'post_title' ); 594 449 if ( $post->post_title !== $existing_title ) { 595 bp_activity_update_meta( $activity _id, 'post_title', $post->post_title );450 bp_activity_update_meta( $activity->id, 'post_title', $post->post_title ); 596 451 597 // now update activity meta for post comments... sigh452 // Now update activity meta for post comments... sigh. 598 453 add_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' ); 599 454 $comments = get_comments( array( 'post_id' => $post->ID ) ); 600 455 remove_filter( 'comments_clauses', 'bp_blogs_comments_clauses_select_by_id' ); … … function bp_blogs_update_post( $post ) { 603 458 $activity_ids = array(); 604 459 $comment_ids = wp_list_pluck( $comments, 'comment_ID' ); 605 460 606 // setup activity args461 // Set up activity args. 607 462 $args = array( 608 463 'update_meta_cache' => false, 609 464 'show_hidden' => true, 610 465 'per_page' => 99999, 611 466 ); 612 467 613 // query for old-style "new_blog_comment" activity items468 // Query for old-style "new_blog_comment" activity items. 614 469 $args['filter'] = array( 615 470 'object' => buddypress()->blogs->id, 616 471 'action' => 'new_blog_comment', … … function bp_blogs_update_post( $post ) { 622 477 $activity_ids = (array) wp_list_pluck( $activities['activities'], 'id' ); 623 478 } 624 479 625 // query for activity comments connected to a blog post480 // Query for activity comments connected to a blog post. 626 481 unset( $args['filter'] ); 627 482 $args['meta_query'] = array( array( 628 483 'key' => 'bp_blogs_post_comment_id', … … function bp_blogs_update_post( $post ) { 637 492 $activity_ids = array_merge( $activity_ids, (array) wp_list_pluck( $activities['activities'], 'id' ) ); 638 493 } 639 494 640 // update activity meta for all found activity items495 // Update activity meta for all found activity items. 641 496 if ( ! empty( $activity_ids ) ) { 642 497 foreach ( $activity_ids as $aid ) { 643 498 bp_activity_update_meta( $aid, 'post_title', $post->post_title ); … … function bp_blogs_update_post( $post ) { 648 503 } 649 504 } 650 505 651 // add post comment status to activity meta if closed506 // Add post comment status to activity meta if closed. 652 507 if( 'closed' == $post->comment_status ) { 653 bp_activity_update_meta( $activity _id, 'post_comment_status', $post->comment_status );508 bp_activity_update_meta( $activity->id, 'post_comment_status', $post->comment_status ); 654 509 } else { 655 bp_activity_delete_meta( $activity _id, 'post_comment_status' );510 bp_activity_delete_meta( $activity->id, 'post_comment_status' ); 656 511 } 657 512 } 513 add_action( 'bp_activity_post_type_updated', 'bp_blogs_update_post_activity_meta', 10, 2 ); 658 514 659 515 /** 660 516 * Record a new blog comment in the BuddyPress activity stream. -
src/bp-blogs/bp-blogs-loader.php
diff --git src/bp-blogs/bp-blogs-loader.php src/bp-blogs/bp-blogs-loader.php index 112cc80..989ac1c 100644
class BP_Blogs_Component extends BP_Component { 75 75 76 76 // Setup the globals 77 77 parent::setup_globals( $args ); 78 79 /* 80 * Set up the post post type to track. 81 * 82 * In case the config is not multisite, the blog_public option is ignored. 83 */ 84 if ( 0 !== (int) get_option( 'blog_public' ) || ! is_multisite() ) { 85 // Get all posts to track. 86 $post_types = apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) ); 87 88 foreach ( $post_types as $post_type ) { 89 add_post_type_support( $post_type, 'buddypress-activity' ); 90 } 91 } 92 93 // Filter the generic track parameters for the 'post' post type. 94 add_filter( 'bp_activity_get_post_type_tracking_args', array( $this, 'post_tracking_args' ), 10, 2 ); 78 95 } 79 96 80 97 /** … … class BP_Blogs_Component extends BP_Component { 246 263 247 264 parent::setup_title(); 248 265 } 266 267 /** 268 * Set up the tracking arguments for the 'post' post type. 269 * 270 * @since BuddyPress (2.2.0) 271 * 272 * @see bp_activity_get_post_type_tracking_args() for information on parameters. 273 */ 274 public function post_tracking_args( $params = array(), $post_type = 0 ) { 275 if ( 'post' != $post_type ) { 276 return $params; 277 } 278 279 // Set specific params for the 'post' post type. 280 $params->component_id = $this->id; 281 $params->action_id = 'new_blog_post'; 282 $params->admin_filter = __( 'New post published', 'buddypress' ); 283 $params->format_callback = 'bp_blogs_format_activity_action_new_blog_post'; 284 $params->front_filter = __( 'Posts', 'buddypress' ); 285 $params->contexts = array( 'activity', 'member' ); 286 $params->position = 5; 287 288 return $params; 289 } 249 290 } 250 291 251 292 /** -
tests/phpunit/testcases/activity/functions.php
diff --git tests/phpunit/testcases/activity/functions.php tests/phpunit/testcases/activity/functions.php index 6cea6bd..4f8cad6 100644
Bar!'; 576 576 } 577 577 578 578 /** 579 * @group activity_action 580 * @group bp_activity_format_activity_action_custom_post_type_post 581 * @group activity_tracking 582 */ 583 public function test_bp_activity_format_activity_action_custom_post_type_post_nonms() { 584 if ( is_multisite() ) { 585 return; 586 } 587 588 $bp = buddypress(); 589 590 register_post_type( 'foo', array( 591 'label' => 'foo', 592 'public' => true, 593 'supports' => array( 'buddypress-activity' ), 594 ) ); 595 596 // Build the actions to fetch the tracking args 597 bp_activity_get_actions(); 598 599 $u = $this->factory->user->create(); 600 $p = $this->factory->post->create( array( 601 'post_author' => $u, 602 'post_type' => 'foo', 603 ) ); 604 605 $a = $this->factory->activity->create( array( 606 'component' => 'activity', 607 'type' => 'new_foo', 608 'user_id' => $u, 609 'item_id' => 1, 610 'secondary_item_id' => $p, 611 ) ); 612 613 $a_obj = new BP_Activity_Activity( $a ); 614 615 $user_link = bp_core_get_userlink( $u ); 616 $blog_url = get_home_url(); 617 $post_url = add_query_arg( 'p', $p, trailingslashit( $blog_url ) ); 618 $post_link = '<a href="' . $post_url . '">item</a>'; 619 620 $expected = sprintf( '%s wrote a new %s', $user_link, $post_link ); 621 622 $this->assertSame( $expected, $a_obj->action ); 623 624 _unregister_post_type( 'foo' ); 625 626 // Reset globals 627 unset( $bp->activity->actions->activity->new_foo ); 628 $bp->activity->track = array(); 629 } 630 631 /** 632 * @group activity_action 633 * @group bp_activity_format_activity_action_custom_post_type_post_ms 634 * @group activity_tracking 635 */ 636 public function test_bp_activity_format_activity_action_custom_post_type_post_ms() { 637 if ( ! is_multisite() ) { 638 return; 639 } 640 641 $bp = buddypress(); 642 643 $b = $this->factory->blog->create(); 644 $u = $this->factory->user->create(); 645 646 switch_to_blog( $b ); 647 648 register_post_type( 'foo', array( 649 'label' => 'foo', 650 'public' => true, 651 'supports' => array( 'buddypress-activity' ), 652 ) ); 653 654 // Build the actions to fetch the tracking args 655 bp_activity_get_actions(); 656 657 $p = $this->factory->post->create( array( 658 'post_author' => $u, 659 'post_type' => 'foo', 660 ) ); 661 662 $activity_args = array( 663 'component' => 'activity', 664 'type' => 'new_foo', 665 'user_id' => $u, 666 'item_id' => $b, 667 'secondary_item_id' => $p, 668 ); 669 670 _unregister_post_type( 'foo' ); 671 bp_activity_get_actions(); 672 673 restore_current_blog(); 674 675 $a = $this->factory->activity->create( $activity_args ); 676 677 $a_obj = new BP_Activity_Activity( $a ); 678 679 $user_link = bp_core_get_userlink( $u ); 680 $blog_url = get_blog_option( $a_obj->item_id, 'home' ); 681 $post_url = add_query_arg( 'p', $p, trailingslashit( $blog_url ) ); 682 683 $post_link = '<a href="' . $post_url . '">item</a>'; 684 685 $expected = sprintf( '%s wrote a new %s, on the site %s', $user_link, $post_link, '<a href="' . $blog_url . '">' . get_blog_option( $a_obj->item_id, 'blogname' ) . '</a>' ); 686 687 $this->assertSame( $expected, $a_obj->action ); 688 689 // Reset globals 690 unset( $bp->activity->actions->activity->new_foo ); 691 $bp->activity->track = array(); 692 } 693 694 /** 695 * @group activity_action 696 * @group bp_activity_get_actions 697 */ 698 public function test_bp_activity_get_actions_should_sort_by_position() { 699 $old_actions = bp_activity_get_actions(); 700 buddypress()->activity->actions = new stdClass; 701 702 register_post_type( 'foo5', array( 703 'public' => true, 704 'supports' => array( 'buddypress-activity' ), 705 'bp_activity' => array( 706 'component_id' => 'foo', 707 'action_id' => 'foo_bar_5', 708 'position' => 5, 709 ), 710 ) ); 711 712 register_post_type( 'foo50', array( 713 'public' => true, 714 'supports' => array( 'buddypress-activity' ), 715 'bp_activity' => array( 716 'component_id' => 'foo', 717 'action_id' => 'foo_bar_50', 718 'position' => 50, 719 ), 720 ) ); 721 722 register_post_type( 'foo25', array( 723 'public' => true, 724 'supports' => array( 'buddypress-activity' ), 725 'bp_activity' => array( 726 'component_id' => 'foo', 727 'action_id' => 'foo_bar_25', 728 'position' => 25, 729 ), 730 ) ); 731 732 $actions = bp_activity_get_actions(); 733 734 $expected = array( 735 'foo_bar_5', 736 'foo_bar_25', 737 'foo_bar_50', 738 ); 739 $foo_actions = (array) $actions->foo; 740 $this->assertEquals( $expected, array_values( wp_list_pluck( $foo_actions, 'key' ) ) ); 741 742 buddypress()->activity->actions = $old_actions; 743 } 744 745 /** 746 * @group activity_action 747 * @group bp_activity_format_activity_action_custom_post_type_post 748 */ 749 public function test_bp_activity_format_activity_action_custom_string_post_type_post_nonms() { 750 if ( is_multisite() ) { 751 return; 752 } 753 754 $bp = buddypress(); 755 756 $labels = array( 757 'name' => 'bars', 758 'singular_name' => 'bar', 759 'bp_activity_new_post' => '%1$s shared a new <a href="%2$s">bar</a>', 760 ); 761 762 register_post_type( 'foo', array( 763 'labels' => $labels, 764 'public' => true, 765 'supports' => array( 'buddypress-activity' ), 766 'bp_activity' => array( 767 'action_id' => 'foo_bar', 768 ), 769 ) ); 770 771 // Build the actions to fetch the tracking args 772 bp_activity_get_actions(); 773 774 $u = $this->factory->user->create(); 775 $p = $this->factory->post->create( array( 776 'post_author' => $u, 777 'post_type' => 'foo', 778 ) ); 779 780 $a = $this->factory->activity->create( array( 781 'component' => 'activity', 782 'type' => 'foo_bar', 783 'user_id' => $u, 784 'item_id' => 1, 785 'secondary_item_id' => $p, 786 ) ); 787 788 $a_obj = new BP_Activity_Activity( $a ); 789 790 $user_link = bp_core_get_userlink( $u ); 791 $blog_url = get_home_url(); 792 $post_url = add_query_arg( 'p', $p, trailingslashit( $blog_url ) ); 793 794 $expected = sprintf( '%1$s shared a new <a href="%2$s">bar</a>', $user_link, $post_url ); 795 796 $this->assertSame( $expected, $a_obj->action ); 797 798 _unregister_post_type( 'foo' ); 799 800 // Reset globals 801 unset( $bp->activity->actions->activity->foo_bar ); 802 $bp->activity->track = array(); 803 } 804 805 /** 806 * @group activity_action 807 * @group bp_activity_format_activity_action_custom_post_type_post_ms 808 * @group activity_tracking 809 */ 810 public function test_bp_activity_format_activity_action_custom_string_post_type_post_ms() { 811 if ( ! is_multisite() ) { 812 return; 813 } 814 815 $bp = buddypress(); 816 $reset = $bp->activity->actions; 817 818 $b = $this->factory->blog->create(); 819 $u = $this->factory->user->create(); 820 821 switch_to_blog( $b ); 822 823 $labels = array( 824 'name' => 'bars', 825 'singular_name' => 'bar', 826 'bp_activity_new_post_ms' => '%1$s shared a new <a href="%2$s">bar</a>, on the site %3$s', 827 ); 828 829 register_post_type( 'foo', array( 830 'labels' => $labels, 831 'public' => true, 832 'supports' => array( 'buddypress-activity' ), 833 ) ); 834 835 // Build the actions to fetch the tracking args 836 bp_activity_get_actions(); 837 838 $p = $this->factory->post->create( array( 839 'post_author' => $u, 840 'post_type' => 'foo', 841 ) ); 842 843 $activity_args = array( 844 'component' => 'activity', 845 'type' => 'new_foo', 846 'user_id' => $u, 847 'item_id' => $b, 848 'secondary_item_id' => $p, 849 ); 850 851 _unregister_post_type( 'foo' ); 852 853 restore_current_blog(); 854 855 $a = $this->factory->activity->create( $activity_args ); 856 857 $a_obj = new BP_Activity_Activity( $a ); 858 859 $user_link = bp_core_get_userlink( $u ); 860 $blog_url = get_blog_option( $a_obj->item_id, 'home' ); 861 $post_url = add_query_arg( 'p', $p, trailingslashit( $blog_url ) ); 862 863 $expected = sprintf( '%1$s shared a new <a href="%2$s">bar</a>, on the site %3$s', $user_link, $post_url, '<a href="' . $blog_url . '">' . get_blog_option( $a_obj->item_id, 'blogname' ) . '</a>' ); 864 865 $this->assertSame( $expected, $a_obj->action ); 866 867 // Reset globals 868 unset( $bp->activity->actions->activity->new_foo ); 869 $bp->activity->track = array(); 870 } 871 872 /** 873 * @group bp_activity_set_post_type_tracking_args 874 * @group activity_tracking 875 */ 876 public function test_bp_activity_set_post_type_tracking_args() { 877 $bp = buddypress(); 878 879 add_post_type_support( 'page', 'buddypress-activity' ); 880 881 bp_activity_set_post_type_tracking_args( 'page', array( 882 'component_id' => $bp->blogs->id, 883 'dummy' => 'dummy value', 884 ) ); 885 886 // Build the actions to fetch the tracking args 887 bp_activity_get_actions(); 888 889 $u = $this->factory->user->create(); 890 891 $post_id = $this->factory->post->create( array( 892 'post_author' => $u, 893 'post_status' => 'publish', 894 'post_type' => 'page', 895 ) ); 896 897 $a = bp_activity_get( array( 898 'action' => 'new_page', 899 'item_id' => get_current_blog_id(), 900 'secondary_item_id' => $post_id, 901 ) ); 902 903 $this->assertSame( $bp->blogs->id, $a['activities'][0]->component ); 904 905 remove_post_type_support( 'page', 'buddypress-activity' ); 906 907 // Reset globals 908 unset( $bp->activity->actions->blogs->new_page ); 909 $bp->activity->track = array(); 910 } 911 912 /** 579 913 * @group bp_activity_new_comment 580 914 * @group cache 581 915 */ -
tests/phpunit/testcases/blogs/activity.php
diff --git tests/phpunit/testcases/blogs/activity.php tests/phpunit/testcases/blogs/activity.php index cc16b1f..e67adab 100644
2 2 3 3 class BP_Tests_Blogs_Activity extends BP_UnitTestCase { 4 4 /** 5 * @group bp_blogs_register_activity_actions 6 * @group activity_tracking 7 */ 8 public function test_bp_blogs_loader_post_tracking_args_filter() { 9 $bp = buddypress(); 10 11 $expected = array( 'new_blog_post', 'new_blog_comment' ); 12 13 if ( is_multisite() ) { 14 $expected = array_merge( array( 'new_blog' ), $expected ); 15 } 16 17 $actions = bp_activity_get_actions(); 18 $actions = array_keys( (array) $actions->blogs ); 19 20 $this->assertEquals( $expected, $actions ); 21 } 22 23 /** 5 24 * @group activity_action 6 25 * @group bp_blogs_format_activity_action_new_blog 7 26 */ -
tests/phpunit/testcases/blogs/functions.php
diff --git tests/phpunit/testcases/blogs/functions.php tests/phpunit/testcases/blogs/functions.php index 6e03d5c..b2ee4eb 100644
class BP_Tests_Blogs_Functions extends BP_UnitTestCase { 303 303 /** 304 304 * @group bp_blogs_catch_transition_post_status 305 305 */ 306 public function test_transition_post_status_password_publish() { 307 $post_id = $this->factory->post->create( array( 308 'post_status' => 'publish', 309 'post_type' => 'post', 310 'post_password' => 'pass', 311 ) ); 312 $post = get_post( $post_id ); 313 314 // 'new' => 'publish with password' 315 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Published with password post should not have activity' ); 316 } 317 318 /** 319 * @group bp_blogs_catch_transition_post_status 320 */ 321 public function test_transition_post_status_publish_update_password() { 322 $post_id = $this->factory->post->create( array( 323 'post_status' => 'publish', 324 'post_type' => 'post', 325 ) ); 326 $post = get_post( $post_id ); 327 328 // 'publish' => 'publish' 329 $this->assertTrue( $this->activity_exists_for_post( $post_id ), 'Published post should have activity' ); 330 331 $post->post_content .= ' foo'; 332 $post->post_password = 'pass'; 333 334 wp_update_post( $post ); 335 336 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Updated with password post should not have activity' ); 337 } 338 339 /** 340 * @group bp_blogs_catch_transition_post_status 341 */ 342 public function test_transition_post_status_private_publish() { 343 $post_id = $this->factory->post->create( array( 344 'post_status' => 'private', 345 'post_type' => 'post', 346 ) ); 347 $post = get_post( $post_id ); 348 349 // 'new' => 'private' 350 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Private post should not have activity' ); 351 352 $post->post_status = 'publish'; 353 354 wp_update_post( $post ); 355 356 // 'private' => 'publish' 357 $this->assertTrue( $this->activity_exists_for_post( $post_id ), 'Published post should have activity' ); 358 } 359 360 /** 361 * @group bp_blogs_catch_transition_post_status 362 */ 363 public function test_transition_post_status_publish_private() { 364 $post_id = $this->factory->post->create( array( 365 'post_status' => 'publish', 366 'post_type' => 'post', 367 ) ); 368 $post = get_post( $post_id ); 369 370 // 'new' => 'publish' 371 $this->assertTrue( $this->activity_exists_for_post( $post_id ), 'Published post should have activity' ); 372 373 $post->post_status = 'private'; 374 375 wp_update_post( $post ); 376 377 // 'publish' => 'private' 378 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Private post should not have activity' ); 379 } 380 381 /** 382 * @group bp_blogs_catch_transition_post_status 383 */ 306 384 public function test_transition_post_status_draft_to_draft() { 307 385 $post_id = $this->factory->post->create( array( 308 386 'post_status' => 'draft', … … class BP_Tests_Blogs_Functions extends BP_UnitTestCase { 477 555 $this->set_current_user( $old_user ); 478 556 } 479 557 558 /** 559 * @group bp_blogs_catch_transition_post_status 560 */ 561 public function test_bp_blogs_is_blog_trackable_false_publish_post() { 562 add_filter( 'bp_blogs_is_blog_trackable', '__return_false' ); 563 564 $post_id = $this->factory->post->create( array( 565 'post_status' => 'publish', 566 'post_type' => 'post', 567 ) ); 568 $post = get_post( $post_id ); 569 570 // 'new' => 'publish' 571 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Not trackable blog post should not have activity' ); 572 573 $post->post_content .= ' foo'; 574 575 wp_update_post( $post ); 576 577 // 'publish' => 'publish' 578 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Not trackable blog post should not have activity' ); 579 580 remove_filter( 'bp_blogs_is_blog_trackable', '__return_false' ); 581 } 582 583 /** 584 * @group bp_blogs_catch_transition_post_status 585 */ 586 public function test_bp_is_blog_public_zero_publish_post() { 587 if ( ! is_multisite() ) { 588 return; 589 } 590 591 add_filter( 'bp_is_blog_public', '__return_zero' ); 592 593 $post_id = $this->factory->post->create( array( 594 'post_status' => 'publish', 595 'post_type' => 'post', 596 ) ); 597 $post = get_post( $post_id ); 598 599 // 'new' => 'publish' 600 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Not public blog post should not have activity' ); 601 602 $post->post_content .= ' foo'; 603 604 wp_update_post( $post ); 605 606 // 'publish' => 'publish' 607 $this->assertFalse( $this->activity_exists_for_post( $post_id ), 'Not public blog post should not have activity' ); 608 609 remove_filter( 'bp_is_blog_public', '__return_zero' ); 610 } 611 480 612 protected function activity_exists_for_post( $post_id ) { 481 613 $a = bp_activity_get( array( 482 614 'component' => buddypress()->blogs->id,