<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[BuddyPress][9621] trunk/src: Activity: improve blog post excerpts by showing rich media from the post.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://buddypress.trac.wordpress.org/changeset/9621">9621</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://buddypress.trac.wordpress.org/changeset/9621","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>djpaul</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2015-03-16 18:59:09 +0000 (Mon, 16 Mar 2015)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Activity: improve blog post excerpts by showing rich media from the post.

Prior to this change, when we created excerpts for new/updated blog post activity items, we'd try to use any single image referenced in that blog post, and use it to decorate and bring interactivity to the activity stream item. This was inconsistently applied -- it was dependant on the length of the original post -- and ignored other possible media sources, such as oEmbeds and video/audio shortcodes.

Now, we use the media extractor (<a href="http://buddypress.trac.wordpress.org/changeset/9619">r9619</a>) to extract comprehensive media information from a new/updated blog post, and use the information to build a much richer excerpt for blogs posts for activity items.

See <a href="http://buddypress.trac.wordpress.org/ticket/6177">#6177</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcbpactivitybpactivityfiltersphp">trunk/src/bp-activity/bp-activity-filters.php</a></li>
<li><a href="#trunksrcbpactivitybpactivityfunctionsphp">trunk/src/bp-activity/bp-activity-functions.php</a></li>
<li><a href="#trunksrcbpblogsbpblogsactivityphp">trunk/src/bp-blogs/bp-blogs-activity.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcbpactivitybpactivityfiltersphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-activity/bp-activity-filters.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-activity/bp-activity-filters.php     2015-03-16 16:01:29 UTC (rev 9620)
+++ trunk/src/bp-activity/bp-activity-filters.php       2015-03-16 18:59:09 UTC (rev 9621)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -386,6 +386,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="cx" style="display: block; padding: 0 10px">  * Truncate long activity entries when viewed in activity streams.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * This method can only be used inside the Activity loop.
+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @since BuddyPress (1.5.0)
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @uses bp_is_single_activity()
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -402,9 +404,20 @@
</span><span class="cx" style="display: block; padding: 0 10px"> function bp_activity_truncate_entry( $text ) {
</span><span class="cx" style="display: block; padding: 0 10px">        global $activities_template;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        /**
+        * Provides a filter that lets you choose whether to skip this filter on a per-activity basis.
+        *
+        * @param bool $maybe_truncate_text If true, text should be checked to see if it needs truncating.
+        * @since BuddyPress (2.3.0)
+        */
+       $maybe_truncate_text = apply_filters( 'bp_activity_maybe_truncate_entry',
+               ! in_array( $activities_template->activity->type, array( 'new_blog_post', ), true )
+       );
+
</ins><span class="cx" style="display: block; padding: 0 10px">         // The full text of the activity update should always show on the single activity screen
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        if ( bp_is_single_activity() )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ if ( ! $maybe_truncate_text || bp_is_single_activity() ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                 return $text;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * Filters the appended text for the activity excerpt.
</span></span></pre></div>
<a id="trunksrcbpactivitybpactivityfunctionsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-activity/bp-activity-functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-activity/bp-activity-functions.php   2015-03-16 16:01:29 UTC (rev 9620)
+++ trunk/src/bp-activity/bp-activity-functions.php     2015-03-16 18:59:09 UTC (rev 9621)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1869,20 +1869,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'recorded_time'     => $post->post_date_gmt,
</span><span class="cx" style="display: block; padding: 0 10px">        );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Remove large images and replace them with just one image thumbnail.
</del><span class="cx" style="display: block; padding: 0 10px">         if ( ! empty( $activity_args['content'] ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $activity_args['content'] = bp_activity_thumbnail_content_images( $activity_args['content'], $activity_args['primary_link'], $activity_args );
-       }
-
-       if ( ! empty( $activity_args['content'] ) ) {
</del><span class="cx" style="display: block; padding: 0 10px">                 // Create the excerpt.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $activity_excerpt = bp_create_excerpt( $activity_args['content'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $activity_summary = bp_activity_create_summary( $activity_args['content'], $activity_args );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Backward compatibility filter for blog posts.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 'blogs' == $activity_post_object->component_id )  {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $activity_args['content'] = apply_filters( 'bp_blogs_record_activity_content', $activity_excerpt, $activity_args['content'], $activity_args, $post->post_type );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $activity_args['content'] = apply_filters( 'bp_blogs_record_activity_content', $activity_summary, $activity_args['content'], $activity_args, $post->post_type );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $activity_args['content'] = $activity_excerpt;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $activity_args['content'] = $activity_summary;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1963,17 +1958,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $activity = new BP_Activity_Activity( $activity_id );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        if ( ! empty( $post->post_content ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Make sure to update the thumbnail image.
-               $post_content = bp_activity_thumbnail_content_images( $post->post_content, $activity->primary_link, (array) $activity );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $activity_summary = bp_activity_create_summary( $post->post_content, (array) $activity );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // Generate an excerpt.
-               $activity_excerpt = bp_create_excerpt( $post_content );
-
</del><span class="cx" style="display: block; padding: 0 10px">                 // Backward compatibility filter for the blogs component.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( 'blogs' == $activity_post_object->component_id ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $activity->content = apply_filters( 'bp_blogs_record_activity_content', $activity_excerpt, $post_content, (array) $activity, $post->post_type );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $activity->content = apply_filters( 'bp_blogs_record_activity_content', $activity_summary, $post->post_content, (array) $activity, $post->post_type );
</ins><span class="cx" style="display: block; padding: 0 10px">                 } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $activity->content = $activity_excerpt;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $activity->content = $activity_summary;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2585,6 +2576,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * through the content, grabs the first image and converts it to a thumbnail,
</span><span class="cx" style="display: block; padding: 0 10px">  * and removes the rest of the images from the string.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * As of BuddyPress 2.3, this function is no longer in use.
+ *
</ins><span class="cx" style="display: block; padding: 0 10px">  * @since BuddyPress (1.2.0)
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @uses esc_attr()
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2656,6 +2649,161 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Create a rich summary of an activity item for the activity stream.
+ *
+ * More than just a simple excerpt, the summary could contain oEmbeds and other types of media.
+ * Currently, it's only used for blog post items, but it will probably be used for all types of
+ * activity in the future.
+ *
+ * @param string $content The content of the activity item.
+ * @param array $activity_args The data passed to bp_activity_add() or the values from an Activity obj.
+ * @return string
+ * @since BuddyPress (2.3.0)
+ */
+function bp_activity_create_summary( $content, $activity ) {
+       $args = array(
+               'width' => isset( $GLOBALS['content_width'] ) ? (int) $GLOBALS['content_width'] : 'medium',
+       );
+
+       // Get the WP_Post object if this activity type is a blog post.
+       if ( $activity['type'] === 'new_blog_post' ) {
+               $content = get_post( $activity['secondary_item_id'] );
+       }
+
+
+       /**
+        * Filter the class name of the media extractor when creating an Activity summary.
+        *
+        * Use this filter to change the media extractor used to extract media info for the activity item.
+        *
+        * @param string $extractor Class name.
+        * @param string $content The content of the activity item.
+        * @param array $activity The data passed to bp_activity_add() or the values from an Activity obj.
+        * @since BuddyPress (2.3.0)
+        */
+       $extractor = apply_filters( 'bp_activity_create_summary_extractor_class', 'BP_Media_Extractor', $content, $activity );
+       $extractor = new $extractor;
+
+       /**
+        * Filter the arguments passed to the media extractor when creating an Activity summary.
+        *
+        * @param array $args Array of bespoke data for the media extractor.
+        * @param string $content The content of the activity item.
+        * @param array $activity The data passed to bp_activity_add() or the values from an Activity obj.
+        * @param BP_Media_Extractor $extractor The media extractor object.
+        * @since BuddyPress (2.3.0)
+        */
+       $args = apply_filters( 'bp_activity_create_summary_extractor_args', $args, $content, $activity, $extractor );
+
+
+       // Extract media information from the $content.
+       $media = $extractor->extract( $content, BP_Media_Extractor::ALL, $args );
+
+       // If we converted $content to an object earlier, flip it back to a string.
+       if ( is_a( $content, 'WP_Post' ) ) {
+               $content = $content->post_content;
+       }
+
+       $para_count     = substr_count( strtolower( wpautop( $content ) ), '<p>' );
+       $has_audio      = ! empty( $media['has']['audio'] )           && $media['has']['audio'];
+       $has_videos     = ! empty( $media['has']['videos'] )          && $media['has']['videos'];
+       $has_feat_image = ! empty( $media['has']['featured_images'] ) && $media['has']['featured_images'];
+       $has_galleries  = ! empty( $media['has']['galleries'] )       && $media['has']['galleries'];
+       $has_images     = ! empty( $media['has']['images'] )          && $media['has']['images'];
+       $has_embeds     = false;
+
+       // Embeds must be subtracted from the paragraph count.
+       if ( ! empty( $media['has']['embeds'] ) ) {
+               $has_embeds = $media['has']['embeds'] > 0;
+               $para_count -= count( $media['has']['embeds'] );
+       }
+
+       $extracted_media = array();
+       $use_media_type  = '';
+       $image_source    = '';
+
+       // If it's a short article and there's an embed/audio/video, use it.
+       if ( $para_count <= 3 ) {
+               if ( $has_embeds ) {
+                       $use_media_type = 'embeds';
+               } elseif ( $has_audio ) {
+                       $use_media_type = 'audio';
+               } elseif ( $has_videos ) {
+                       $use_media_type = 'videos';
+               }
+       }
+
+       // If not, or in any other situation, try to use an image.
+       if ( ! $use_media_type && $has_images ) {
+               $use_media_type = 'images';
+               $image_source   = 'html';
+       
+               // Featured Image > Galleries > inline <img>.
+               if ( $has_feat_image ) {
+                       $image_source = 'featured_images';
+
+               } elseif ( $has_galleries ) {
+                       $image_source = 'galleries';
+               }
+       }
+
+       // Extract an item from the $media results.
+       if ( $use_media_type ) {
+               if ( $use_media_type === 'images' ) {
+                       $extracted_media = wp_list_filter( $media[ $use_media_type ], array( 'source' => $image_source ) );
+                       $extracted_media = array_shift( $extracted_media );
+               } else {
+                       $extracted_media = array_shift( $media[ $use_media_type ] );
+               }
+
+               /**
+                * Filter the results of the media extractor when creating an Activity summary.
+                *
+                * @param array $extracted_media Extracted media item. See {@link BP_Media_Extractor::extract()} for format.
+                * @param string $content Content of the activity item.
+                * @param array $activity The data passed to bp_activity_add() or the values from an Activity obj.
+                * @param array $media All results from the media extraction. See {@link BP_Media_Extractor::extract()} for format.
+                * @param string $use_media_type The kind of media item that was preferentially extracted.
+                * @param string $image_source If $use_media_type was "images", the preferential source of the image.
+                *               Otherwise empty.
+                * @since BuddyPress (2.3.0)
+                */
+               $extracted_media = apply_filters(
+                       'bp_activity_create_summary_extractor_result',
+                       $extracted_media,
+                       $content,
+                       $activity,
+                       $media,
+                       $use_media_type,
+                       $image_source
+               );
+       }
+
+       // Generate a text excerpt for this activity item (and remove any oEmbeds URLs).
+       $summary = strip_shortcodes( html_entity_decode( strip_tags( $content ) ) );
+       $summary = bp_create_excerpt( preg_replace( '#^\s*(https?://[^\s"]+)\s*$#im', '', $summary ) );
+
+       if ( $use_media_type === 'embeds' ) {
+               $summary .= PHP_EOL . PHP_EOL . $extracted_media['url'];
+       } elseif ( $use_media_type === 'images' ) {
+               $summary .= sprintf( ' <img src="%s">', esc_url( $extracted_media['url'] ) );
+       } elseif ( in_array( $use_media_type, array( 'audio', 'videos' ), true ) ) {
+               $summary .= PHP_EOL . PHP_EOL . $extracted_media['original'];  // Full shortcode.
+       }
+
+       /**
+        * Filters the newly-generated summary for the activity item.
+        *
+        * @param string $summary Activity summary HTML.
+        * @param string $content $content Content of the activity item.
+        * @param array $activity The data passed to bp_activity_add() or the values from an Activity obj.
+        * @param array $extracted_media Media item extracted. See {@link BP_Media_Extractor::extract()} for format.
+        * @since BuddyPress (2.3.0)
+        */
+       return apply_filters( 'bp_activity_create_summary', $summary, $content, $activity, $extracted_media );
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px">  * Fetch whether the current user is allowed to mark items as spam.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since BuddyPress (1.6.0)
</span></span></pre></div>
<a id="trunksrcbpblogsbpblogsactivityphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/bp-blogs/bp-blogs-activity.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/bp-blogs/bp-blogs-activity.php  2015-03-16 16:01:29 UTC (rev 9620)
+++ trunk/src/bp-blogs/bp-blogs-activity.php    2015-03-16 18:59:09 UTC (rev 9621)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -352,11 +352,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $r = wp_parse_args( $args, $defaults );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        // Remove large images and replace them with just one image thumbnail
-       if ( ! empty( $r['content'] ) ) {
-               $r['content'] = bp_activity_thumbnail_content_images( $r['content'], $r['primary_link'], $r );
-       }
-
</del><span class="cx" style="display: block; padding: 0 10px">         if ( ! empty( $r['action'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -376,11 +371,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><span class="cx" style="display: block; padding: 0 10px">                 * @since BuddyPress (1.2.0)
</span><span class="cx" style="display: block; padding: 0 10px">                 *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                 * @param string $value Generated excerpt from content for the activity stream.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          * @param string $value Generated summary from content for the activity stream.
</ins><span class="cx" style="display: block; padding: 0 10px">                  * @param string $value Content for the activity stream.
</span><span class="cx" style="display: block; padding: 0 10px">                 * @param array  $r     Array of arguments used for the activity stream item.
</span><span class="cx" style="display: block; padding: 0 10px">                 */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $r['content'] = apply_filters( 'bp_blogs_record_activity_content', bp_create_excerpt( $r['content'] ), $r['content'], $r );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $r['content'] = apply_filters( 'bp_blogs_record_activity_content', bp_activity_create_summary( $r['content'], $r ), $r['content'], $r );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        // Check for an existing entry and update if one exists.
</span></span></pre>
</div>
</div>

</body>
</html>