diff --git src/bp-blogs/bp-blogs-activity.php src/bp-blogs/bp-blogs-activity.php
index c52287c..030507f 100644
|
|
function bp_blogs_format_activity_action_new_blog_post( $action, $activity ) { |
117 | 117 | bp_blogs_update_blogmeta( $activity->item_id, 'name', $blog_name ); |
118 | 118 | } |
119 | 119 | |
120 | | if ( empty( $activity->post_url ) ) { |
121 | | $post_url = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( $blog_url ) ); |
122 | | } else { |
| 120 | /** |
| 121 | * When the post is published we are faking an activity object |
| 122 | * to which we add 2 properties : |
| 123 | * - the post url |
| 124 | * - the post title |
| 125 | * This is done to build the 'post link' part of the activity |
| 126 | * action string. |
| 127 | * NB: in this case the activity has not yet been created. |
| 128 | */ |
| 129 | if ( isset( $activity->post_url ) ) { |
123 | 130 | $post_url = $activity->post_url; |
124 | | } |
125 | 131 | |
126 | | if ( empty( $activity->post_title ) ) { |
127 | | $post_title = bp_activity_get_meta( $activity->id, 'post_title' ); |
| 132 | /** |
| 133 | * The post_url property is not set, we need to build the url |
| 134 | * thanks to the post id which is also saved as the secondary |
| 135 | * item id property of the activity object. |
| 136 | */ |
128 | 137 | } else { |
| 138 | $post_url = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( $blog_url ) ); |
| 139 | } |
| 140 | |
| 141 | // Should be the case when the post has just been published |
| 142 | if ( isset( $activity->post_title ) ) { |
129 | 143 | $post_title = $activity->post_title; |
| 144 | |
| 145 | // If activity already exists try to get the post title from activity meta |
| 146 | } else if ( ! empty( $activity->id ) ) { |
| 147 | $post_title = bp_activity_get_meta( $activity->id, 'post_title' ); |
130 | 148 | } |
131 | 149 | |
132 | | // Should only be empty at the time of post creation |
| 150 | /** |
| 151 | * In case the post was published without a title |
| 152 | * or the activity meta was not found |
| 153 | */ |
133 | 154 | if ( empty( $post_title ) ) { |
| 155 | // Defaults to no title |
| 156 | $post_title = esc_html__( '(no title)', 'buddypress' ); |
| 157 | |
134 | 158 | switch_to_blog( $activity->item_id ); |
135 | 159 | |
136 | 160 | $post = get_post( $activity->secondary_item_id ); |
137 | 161 | if ( is_a( $post, 'WP_Post' ) ) { |
138 | | $post_title = $post->post_title; |
139 | | bp_activity_update_meta( $activity->id, 'post_title', $post_title ); |
| 162 | // Does the post have a title ? |
| 163 | if ( ! empty( $post->post_title ) ) { |
| 164 | $post_title = $post->post_title; |
| 165 | } |
| 166 | |
| 167 | // Make sure the activity exists before saving the post title in activity meta |
| 168 | if ( ! empty( $activity->id ) ) { |
| 169 | bp_activity_update_meta( $activity->id, 'post_title', $post_title ); |
| 170 | } |
140 | 171 | } |
141 | 172 | |
142 | 173 | restore_current_blog(); |
143 | 174 | } |
144 | 175 | |
| 176 | // Build the 'post link' part of the activity action string |
145 | 177 | $post_link = '<a href="' . $post_url . '">' . $post_title . '</a>'; |
146 | 178 | |
147 | 179 | $user_link = bp_core_get_userlink( $activity->user_id ); |
148 | 180 | |
| 181 | // Build the complete activity action string |
149 | 182 | if ( is_multisite() ) { |
150 | 183 | $action = sprintf( __( '%1$s wrote a new post, %2$s, on the site %3$s', 'buddypress' ), $user_link, $post_link, '<a href="' . esc_url( $blog_url ) . '">' . esc_html( $blog_name ) . '</a>' ); |
151 | 184 | } else { |
diff --git tests/phpunit/testcases/blogs/activity.php tests/phpunit/testcases/blogs/activity.php
index e67adab..a5d548d 100644
|
|
class BP_Tests_Blogs_Activity extends BP_UnitTestCase { |
283 | 283 | |
284 | 284 | $this->assertEquals( $this->comment_post_id, $p ); |
285 | 285 | } |
| 286 | |
| 287 | /** |
| 288 | * @group activity_action |
| 289 | * @group bp_blogs_format_activity_action_new_blog_post |
| 290 | */ |
| 291 | public function test_bp_blogs_format_activity_action_new_blog_post_no_title() { |
| 292 | if ( is_multisite() ) { |
| 293 | return; |
| 294 | } |
| 295 | |
| 296 | $u = $this->factory->user->create(); |
| 297 | $p = wp_insert_post( array( |
| 298 | 'post_author' => $u, |
| 299 | 'post_title' => '', // no title: the object of the test |
| 300 | 'post_status' => 'publish', |
| 301 | 'post_content' => 'foo bar', |
| 302 | ) ); |
| 303 | |
| 304 | $user_link = bp_core_get_userlink( $u ); |
| 305 | $blog_url = get_home_url(); |
| 306 | $post_url = add_query_arg( 'p', $p, trailingslashit( $blog_url ) ); |
| 307 | $post_title = '(no title)'; |
| 308 | $post_link = '<a href="' . $post_url . '">' . $post_title . '</a>'; |
| 309 | |
| 310 | $a_obj = bp_activity_get( array( |
| 311 | 'item_id' => 1, |
| 312 | 'secondary_item_id' => $p, |
| 313 | ) ); |
| 314 | |
| 315 | $expected = sprintf( '%s wrote a new post, %s', $user_link, $post_link ); |
| 316 | |
| 317 | $this->assertSame( $expected, $a_obj['activities'][0]->action ); |
| 318 | } |
| 319 | |
286 | 320 | /** |
287 | 321 | * Dopey passthrough method so we can check that the correct values |
288 | 322 | * are being passed to the filter |