Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
01/17/2015 04:46:05 AM (9 years ago)
Author:
imath
Message:

Fix notice errors when an activity is generated for a post having no title.

Post types activities are using dynamic action strings when the activity is displayed in the stream and when the activity is saved into the database. In this particular case, once the post is published, we are "faking" an activity object to which we add two extra properties : the post_title and the post_url. To avoid switching blogs too many times, we are saving the post title into an activity meta. To know if we must build the action string for insert or display, we are checking the post_title property of the activity object. When a post is published without a title, the empty() check was not right. Changing for an isset() check prevents the notice errors.

props boonebgorges

Fixes #6119

File:
1 edited

Legend:

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

    r9351 r9369  
    118118    }
    119119
    120     if ( empty( $activity->post_url ) ) {
     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 ) ) {
     130        $post_url = $activity->post_url;
     131
     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     */
     137    } else {
    121138        $post_url = add_query_arg( 'p', $activity->secondary_item_id, trailingslashit( $blog_url ) );
    122     } else {
    123         $post_url = $activity->post_url;
    124     }
    125 
    126     if ( empty( $activity->post_title ) ) {
     139    }
     140
     141    // Should be the case when the post has just been published
     142    if ( isset( $activity->post_title ) ) {
     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 ) ) {
    127147        $post_title = bp_activity_get_meta( $activity->id, 'post_title' );
    128     } else {
    129         $post_title = $activity->post_title;
    130     }
    131 
    132     // Should only be empty at the time of post creation
     148    }
     149
     150    /**
     151     * In case the post was published without a title
     152     * or the activity meta was not found
     153     */
    133154    if ( empty( $post_title ) ) {
     155        // Defaults to no title
     156        $post_title = esc_html__( '(no title)', 'buddypress' );
     157
    134158        switch_to_blog( $activity->item_id );
    135159
    136160        $post = get_post( $activity->secondary_item_id );
    137161        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            }
    140171        }
    141172
     
    143174    }
    144175
     176    // Build the 'post link' part of the activity action string
    145177    $post_link  = '<a href="' . $post_url . '">' . $post_title . '</a>';
    146178
    147179    $user_link = bp_core_get_userlink( $activity->user_id );
    148180
     181    // Build the complete activity action string
    149182    if ( is_multisite() ) {
    150183        $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>' );
Note: See TracChangeset for help on using the changeset viewer.