Ticket #5669: 5669.patch
File 5669.patch, 19.1 KB (added by , 11 years ago) |
---|
-
src/bp-activity/bp-activity-classes.php
diff --git src/bp-activity/bp-activity-classes.php src/bp-activity/bp-activity-classes.php index f1e6054..543a58d 100644
class BP_Activity_Feed { 1680 1680 </rss><?php 1681 1681 } 1682 1682 } 1683 1684 /** 1685 * Activity Post Types tracking class 1686 * 1687 * @since BuddyPress (2.1.0) 1688 */ 1689 class BP_Activity_Tracking { 1690 1691 /** Properties ************************************************************/ 1692 1693 /** 1694 * post types to track. 1695 * 1696 * @var array 1697 */ 1698 public $post_types = array(); 1699 1700 /** 1701 * Start. 1702 */ 1703 public static function start() { 1704 $bp = buddypress(); 1705 1706 if ( empty( $bp->activity->tracker ) ) { 1707 $bp->activity->tracker = new self; 1708 } 1709 1710 return $bp->activity->tracker; 1711 } 1712 1713 /** 1714 * Constructor method. 1715 */ 1716 public function __construct() { 1717 $this->setup_hooks(); 1718 } 1719 1720 /** 1721 * Hooks 1722 */ 1723 private function setup_hooks() { 1724 // Register activity actions 1725 add_action( 'bp_register_activity_actions', array( $this, 'register_activity_actions' ) ); 1726 1727 // Manage tracking 1728 add_action( 'transition_post_status', array( $this, 'track' ), 10, 3 ); 1729 add_action( 'delete_post', array( $this, 'delete' ), 10, 1 ); 1730 } 1731 1732 /** 1733 * Define activity actions. 1734 */ 1735 public function register_activity_actions() { 1736 $bp = buddypress(); 1737 1738 $active_components = array_keys( $bp->active_components ); 1739 1740 foreach ( $active_components as $component ) { 1741 if ( ! empty( $bp->{$component}->tracking ) ) { 1742 $post_types = array_keys( $bp->{$component}->tracking ); 1743 1744 foreach( $post_types as $post_type ) { 1745 1746 $activity_args = $bp->{$component}->tracking[ $post_type ]; 1747 1748 if ( empty( $activity_args->track ) || empty( $activity_args->type ) || empty( $activity_args->description ) ) { 1749 continue; 1750 } 1751 1752 // for later use 1753 $this->post_types[ $post_type ] = $component; 1754 1755 if ( empty( $activity_args->label ) ) { 1756 $activity_args->label = $activity_args->description; 1757 } 1758 1759 bp_activity_set_action( 1760 $component, 1761 $activity_args->type, 1762 $activity_args->description, 1763 $activity_args->format_callback, 1764 $activity_args->label, 1765 $activity_args->context 1766 ); 1767 1768 do_action( "bp_activity_tracking_{$component}_{$post_type}", $activity_args ); 1769 } 1770 } 1771 } 1772 1773 $this->post_types = apply_filters( 'bp_activity_tracking_post_types', $this->post_types ); 1774 } 1775 1776 /** 1777 * Track post types 1778 */ 1779 public function track( $new_status = '', $old_status = '', $post = null ) { 1780 $bp = buddypress(); 1781 $tracked = array_keys( $this->post_types ); 1782 1783 if ( empty( $post->post_type ) || ! in_array( $post->post_type, $tracked ) ) { 1784 return; 1785 } 1786 1787 $component = $this->post_types[ $post->post_type ]; 1788 1789 if ( empty( $component ) || empty( $bp->{$component}->tracking[ $post->post_type ] ) ) { 1790 return; 1791 } else { 1792 $tracking_args = apply_filters( "bp_activity_tracking_{$component}_args", $bp->{$component}->tracking[ $post->post_type ] ); 1793 } 1794 1795 if ( empty( $tracking_args->track ) ) { 1796 return; 1797 } 1798 1799 // This is an edit 1800 if ( $new_status === $old_status ) { 1801 if ( $new_status == 'publish' ) { 1802 1803 if ( ! empty( $tracking_args->update_callback ) && is_callable( $tracking_args->update_callback ) ) { 1804 call_user_func_array( $tracking_args->update_callback, array( 'post' => $post ) ); 1805 } 1806 return; 1807 } 1808 } 1809 1810 // Publishing a previously unpublished post 1811 if ( 'publish' === $new_status ) { 1812 // Untrashing the post 1813 if ( 'trash' == $old_status ) { 1814 if ( ! empty( $tracking_args->untrash_callback ) && is_callable( $tracking_args->untrash_callback ) ) { 1815 call_user_func_array( $tracking_args->untrash_callback, array( 'post_id' => $post->ID, 'post' => $post ) ); 1816 } 1817 return; 1818 } 1819 1820 if ( ! empty( $tracking_args->publish_callback ) && is_callable( $tracking_args->publish_callback ) ) { 1821 call_user_func_array( $tracking_args->publish_callback, array( 'post_id' => $post->ID, 'post' => $post ) ); 1822 } else { 1823 // Define default activity args 1824 $activity_args = array( 1825 'action' => '', 1826 'content' => bp_create_excerpt( $post->post_content ), 1827 'component' => $component, 1828 'type' => 'new_item', 1829 'user_id' => $post->post_author, 1830 'item_id' => get_current_blog_id(), 1831 'secondary_item_id' => $post->ID, 1832 ); 1833 1834 if ( ! empty( $tracking_args->type ) ) { 1835 $activity_args['type'] = $tracking_args->type; 1836 } 1837 1838 // Default action if format callback is not set 1839 if ( empty( $tracking_args->format_callback ) ) { 1840 $blog_id = $activity_args['item_id']; 1841 1842 // Record this in activity streams 1843 $post_permalink = add_query_arg( 1844 'p', 1845 $post_id, 1846 trailingslashit( get_home_url( $blog_id ) ) 1847 ); 1848 1849 if ( is_multisite() ){ 1850 $activity_args['action'] = sprintf( __( '%1$s wrote a new item, %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>' ); 1851 } else { 1852 $activity_args['action'] = sprintf( __( '%1$s wrote a new item, %2$s', 'buddypress' ), bp_core_get_userlink( (int) $post->post_author ), '<a href="' . $post_permalink . '">' . $post->post_title . '</a>' ); 1853 } 1854 } 1855 1856 // Add the activity 1857 bp_activity_add( $activity_args ); 1858 } 1859 1860 // Unpublishing a previously published post 1861 } else if ( 'publish' === $old_status ) { 1862 if ( ! empty( $tracking_args->unpublish_callback ) && is_callable( $tracking_args->unpublish_callback ) ) { 1863 call_user_func_array( $tracking_args->unpublish_callback, array( 'post' => $post ) ); 1864 } else { 1865 // Define default activity args 1866 $activity_args = array( 1867 'component' => $component, 1868 'type' => 'new_item', 1869 'user_id' => $post->post_author, 1870 'item_id' => get_current_blog_id(), 1871 'secondary_item_id' => $post->ID, 1872 ); 1873 1874 if ( ! empty( $tracking_args->type ) ) { 1875 $activity_args['type'] = $tracking_args->type; 1876 } 1877 1878 // Delete the activity 1879 bp_activity_delete( $activity_args ); 1880 } 1881 } 1882 } 1883 1884 /** 1885 * Remove the activity when the tracked post type is deleted 1886 */ 1887 public function delete( $post_id = 0 ) { 1888 $bp = buddypress(); 1889 $tracked = array_keys( $this->post_types ); 1890 1891 if ( empty( $post_id ) ) { 1892 return; 1893 } 1894 1895 if ( empty( $tracked ) ) { 1896 return; 1897 } 1898 1899 $post_type = get_post_type( $post_id ); 1900 1901 if ( ! in_array( $post_type, $tracked ) ) { 1902 return; 1903 } 1904 1905 $component = $this->post_types[ $post_type ]; 1906 1907 if ( empty( $component ) || empty( $bp->{$component}->tracking[ $post_type ] ) ) { 1908 return; 1909 } else { 1910 $tracking_args = apply_filters( "bp_activity_tracking_{$component}_args", $bp->{$component}->tracking[ $post_type ] ); 1911 } 1912 1913 if ( empty( $tracking_args->track ) ) { 1914 return; 1915 } 1916 1917 if ( ! empty( $tracking_args->remove_callback ) && is_callable( $tracking_args->remove_callback ) ) { 1918 call_user_func_array( $tracking_args->remove_callback, array( 'post_id' => $post_id ) ); 1919 } else { 1920 $activity_args = array( 1921 'type' => 'new_item', 1922 'component' => $component, 1923 'item_id' => get_current_blog_id(), 1924 'secondary_item_id' => $post_id, 1925 ); 1926 1927 if ( ! empty( $tracking_args->type ) ) { 1928 $activity_args['type'] = $tracking_args->type; 1929 } 1930 1931 bp_activity_delete( $activity_args ); 1932 } 1933 } 1934 } 1935 add_action( 'bp_init', array( 'BP_Activity_Tracking', 'start' ), 7 ); -
src/bp-blogs/bp-blogs-activity.php
diff --git src/bp-blogs/bp-blogs-activity.php src/bp-blogs/bp-blogs-activity.php index 19f567b..aae2bd4 100644
11 11 if ( !defined( 'ABSPATH' ) ) exit; 12 12 13 13 /** 14 * Register activity actionsfor the blogs component.14 * Register new blog activity action for the blogs component. 15 15 * 16 16 * @since BuddyPress (1.0.0) 17 17 * … … if ( !defined( 'ABSPATH' ) ) exit; 19 19 * 20 20 * @return bool|null Returns false if activity component is not active. 21 21 */ 22 function bp_blogs_register_activity_ actions() {22 function bp_blogs_register_activity_newblog_action() { 23 23 global $bp; 24 24 25 25 // Bail if activity is not active … … function bp_blogs_register_activity_actions() { 36 36 __( 'New Sites', 'buddypress' ) 37 37 ); 38 38 } 39 } 40 add_action( 'bp_register_activity_actions', 'bp_blogs_register_activity_newblog_action' ); 39 41 42 /** 43 * Register activity actions for the blogs component. 44 * 45 * @since BuddyPress (2.1.0) 46 * 47 * @uses bp_activity_set_action() 48 * @uses buddypress() 49 * 50 * @return bool|null Returns false if activity component is not active. 51 */ 52 function bp_blogs_register_activity_actions() { 40 53 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, 54 buddypress()->blogs->id, 51 55 'new_blog_comment', 52 56 __( 'New post comment posted', 'buddypress' ), 53 57 'bp_blogs_format_activity_action_new_blog_comment', … … function bp_blogs_register_activity_actions() { 57 61 58 62 do_action( 'bp_blogs_register_activity_actions' ); 59 63 } 60 add_action( 'bp_ register_activity_actions', 'bp_blogs_register_activity_actions' );64 add_action( 'bp_activity_tracking_blogs_post', 'bp_blogs_register_activity_actions' ); 61 65 62 66 /** 63 67 * Format 'new_blog' activity actions. -
src/bp-blogs/bp-blogs-filters.php
diff --git src/bp-blogs/bp-blogs-filters.php src/bp-blogs/bp-blogs-filters.php index 07ad0e3..c3d8b69 100644
function bp_blogs_creation_location( $url ) { 36 36 return apply_filters( 'bp_blogs_creation_location', trailingslashit( bp_get_root_domain() . '/' . bp_get_blogs_root_slug() . '/create', $url ) ); 37 37 } 38 38 add_filter( 'wp_signup_location', 'bp_blogs_creation_location' ); 39 40 /** 41 * Ensure post types tracking is respecting the blog's tracking settings. 42 * 43 * @since BuddyPress (2.1.0) 44 * 45 * @param object $args The tracking args. 46 * @return object $args The tracking args. 47 */ 48 function bp_blogs_filter_tracking_args( $args = null ) { 49 if ( empty( $args->track ) ) 50 return $args; 51 52 $blog_id = get_current_blog_id(); 53 $is_blog_public = apply_filters( 'bp_is_blog_public', (int)get_blog_option( $blog_id, 'blog_public' ) ); 54 55 if ( ( empty( $is_blog_public ) && is_multisite() ) || ! bp_blogs_is_blog_trackable( $blog_id ) ) { 56 $args->track = false; 57 } 58 59 return $args; 60 } 61 add_filter( 'bp_activity_tracking_blogs_args', 'bp_blogs_filter_tracking_args', 10, 1 ); -
src/bp-blogs/bp-blogs-functions.php
diff --git src/bp-blogs/bp-blogs-functions.php src/bp-blogs/bp-blogs-functions.php index 384693a..b03fcd9 100644
add_action( 'update_option_thread_comments_depth', 'bp_blogs_update_option_threa 359 359 * 360 360 * @since BuddyPress (2.0.0) 361 361 * 362 * @todo Support untrashing better362 * @todo deprecated 363 363 * 364 364 * @param string $new_status New status for the post. 365 365 * @param string $old_status Old status for the post. … … function bp_blogs_catch_transition_post_status( $new_status, $old_status, $post 396 396 ) ); 397 397 } 398 398 } 399 add_action( 'transition_post_status', 'bp_blogs_catch_transition_post_status', 10, 3 );400 399 401 400 /** 402 401 * Record a new blog post in the BuddyPress activity stream. … … function bp_blogs_record_post( $post_id, $post, $user_id = 0 ) { 413 412 $post_id = (int) $post_id; 414 413 $blog_id = (int) $wpdb->blogid; 415 414 416 // If blog is not trackable, do not record the activity.417 if ( ! bp_blogs_is_blog_trackable( $blog_id, $user_id ) )418 return false;419 420 415 if ( !$user_id ) 421 416 $user_id = (int) $post->post_author; 422 417 … … function bp_blogs_record_post( $post_id, $post, $user_id = 0 ) { 436 431 if ( !in_array( $post->post_type, apply_filters( 'bp_blogs_record_post_post_types', array( 'post' ) ) ) ) 437 432 return false; 438 433 439 $is_blog_public = apply_filters( 'bp_is_blog_public', (int)get_blog_option( $blog_id, 'blog_public' ) );440 441 434 if ( 'publish' == $post->post_status && empty( $post->post_password ) ) { 442 if ( $is_blog_public || !is_multisite() ) { 443 444 // Record this in activity streams 445 $post_permalink = add_query_arg( 446 'p', 447 $post_id, 448 trailingslashit( get_home_url( $blog_id ) ) 449 ); 450 451 if ( is_multisite() ) 452 $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>' ); 453 else 454 $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>' ); 455 456 // Make sure there's not an existing entry for this post (prevent bumping) 457 if ( bp_is_active( 'activity' ) ) { 458 $existing = bp_activity_get( array( 459 'filter' => array( 460 'action' => 'new_blog_post', 461 'primary_id' => $blog_id, 462 'secondary_id' => $post_id, 463 ) 464 ) ); 465 466 if ( !empty( $existing['activities'] ) ) { 467 return; 468 } 435 // Record this in activity streams 436 $post_permalink = add_query_arg( 437 'p', 438 $post_id, 439 trailingslashit( get_home_url( $blog_id ) ) 440 ); 441 442 if ( is_multisite() ) 443 $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>' ); 444 else 445 $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>' ); 446 447 // Make sure there's not an existing entry for this post (prevent bumping) 448 if ( bp_is_active( 'activity' ) ) { 449 $existing = bp_activity_get( array( 450 'filter' => array( 451 'action' => 'new_blog_post', 452 'primary_id' => $blog_id, 453 'secondary_id' => $post_id, 454 ) 455 ) ); 456 457 if ( !empty( $existing['activities'] ) ) { 458 return; 469 459 } 460 } 470 461 471 462 $activity_content = $post->post_content; 472 463 473 bp_blogs_record_activity( array( 474 'user_id' => (int) $post->post_author, 475 'content' => apply_filters( 'bp_blogs_activity_new_post_content', $activity_content, $post, $post_permalink ), 476 'primary_link' => apply_filters( 'bp_blogs_activity_new_post_primary_link', $post_permalink, $post_id ), 477 'type' => 'new_blog_post', 478 'item_id' => $blog_id, 479 'secondary_item_id' => $post_id, 480 'recorded_time' => $post->post_date_gmt, 481 )); 482 } 464 bp_blogs_record_activity( array( 465 'user_id' => (int) $post->post_author, 466 'content' => apply_filters( 'bp_blogs_activity_new_post_content', $activity_content, $post, $post_permalink ), 467 'primary_link' => apply_filters( 'bp_blogs_activity_new_post_primary_link', $post_permalink, $post_id ), 468 'type' => 'new_blog_post', 469 'item_id' => $blog_id, 470 'secondary_item_id' => $post_id, 471 'recorded_time' => $post->post_date_gmt, 472 )); 483 473 484 474 // Update the blogs last activity 485 475 bp_blogs_update_blogmeta( $blog_id, 'last_activity', bp_core_current_time() ); -
src/bp-blogs/bp-blogs-loader.php
diff --git src/bp-blogs/bp-blogs-loader.php src/bp-blogs/bp-blogs-loader.php index 89cf2a1..44d3f73 100644
class BP_Blogs_Component extends BP_Component { 241 241 242 242 parent::setup_title(); 243 243 } 244 /** 245 * Register the post types 246 * 247 * @since BuddyPress (2.1.0) 248 */ 249 public function register_post_types( $post_types = array() ) { 250 $post_types = apply_filters( 'bp_blogs_register_post_types', array( 251 'post' => array( 252 'buddypress' => array( 253 'type' => 'new_blog_post', 254 'description' => __( 'New post published', 'buddypress' ), 255 'format_callback' => 'bp_blogs_format_activity_action_new_blog_post', 256 'label' => __( 'Posts', 'buddypress' ), 257 'context' => array( 'activity', 'member' ), 258 'track' => true, 259 'publish_callback' => 'bp_blogs_record_post', 260 'update_callback' => 'bp_blogs_update_post', 261 'remove_callback' => 'bp_blogs_remove_post' 262 ) 263 ) 264 ) ); 265 266 parent::register_post_types( $post_types ); 267 } 244 268 } 245 269 246 270 /** -
src/bp-core/bp-core-actions.php
diff --git src/bp-core/bp-core-actions.php src/bp-core/bp-core-actions.php index df61f5a..c2991c0 100644
add_action( 'bp_loaded', 'bp_register_theme_directory', 14 ); 64 64 * The load order helps to execute code at the correct time. 65 65 * v---Load order 66 66 */ 67 add_action( 'bp_init', 'bp_register_post_types', 1 ); 67 68 add_action( 'bp_init', 'bp_core_set_uri_globals', 2 ); 68 69 add_action( 'bp_init', 'bp_setup_globals', 4 ); 69 70 add_action( 'bp_init', 'bp_setup_nav', 6 ); -
src/bp-core/bp-core-component.php
diff --git src/bp-core/bp-core-component.php src/bp-core/bp-core-component.php index c16c17c..88bb814 100644
class BP_Component { 532 532 * 533 533 * @uses do_action() Calls 'bp_{@link bp_Component::name}_register_post_types'. 534 534 */ 535 public function register_post_types() { 535 public function register_post_types( $post_types = array() ) { 536 537 if ( ! empty( $post_types ) ) { 538 $this->tracking = array(); 539 540 foreach ( $post_types as $post_type => $args ) { 541 542 if ( ! empty( $args['buddypress'] ) ) { 543 $activity_args = wp_parse_args( $args['buddypress'], array( 544 'type' => '', 545 'description' => '', 546 'format_callback' => '', 547 'label' => '', 548 'context' => array(), 549 'track' => false 550 ) ); 551 $this->tracking[ $post_type ] = (object) $activity_args; 552 unset( $args['buddypress'] ); 553 } 554 555 if ( ! post_type_exists( $post_type ) && ! empty( $args ) && bp_is_root_blog() ) { 556 register_post_type( $post_type, $args ); 557 } 558 } 559 } 560 536 561 do_action( 'bp_' . $this->id . '_register_post_types' ); 537 562 } 538 563 -
src/bp-core/bp-core-dependency.php
diff --git src/bp-core/bp-core-dependency.php src/bp-core/bp-core-dependency.php index eaf839c..1228b07 100644
function bp_setup_title() { 61 61 } 62 62 63 63 /** 64 * Fire the 'bp_setup_components' action, where plugins should initialize components. 65 */ 66 function bp_register_post_types() { 67 do_action( 'bp_register_post_types' ); 68 } 69 70 /** 64 71 * Fire the 'bp_register_widgets' action, where plugins should register widgets. 65 72 */ 66 73 function bp_setup_widgets() {