/** * @group mentions * @group bp_activity_at_name_filter */ public function test_bp_activity_at_name_filter() { $u1 = $this->factory->user->create(array('user_login' => 'foobarbaz', 'user_nicename' => 'foobarbaz')); $u2 = $this->factory->user->create(array('user_login' => 'foo2', 'user_nicename' => 'foo2')); $u1_mention_name = bp_activity_get_user_mentionname($u1); $u1_domain = bp_core_get_user_domain($u1); $u2_mention_name = bp_activity_get_user_mentionname($u2); $u2_domain = bp_core_get_user_domain($u2); // mentions normal text should be replaced $at_name_in_text = sprintf('Hello @%s', $u1_mention_name); $at_name_in_text_final = "Hello <a href='" . $u1_domain . "' rel='nofollow'>@{$u1_mention_name}</a>"; $this->assertEquals($at_name_in_text_final, bp_activity_at_name_filter($at_name_in_text)); // mentions inside links sholudn't be replaced // inside href $at_name_in_mailto = sprintf("Send messages to <a href='mail@%s.com'>Foo Bar Baz</a>", $u1_mention_name); $at_name_in_mailto_final = sprintf("Send messages to <a href='mail@%s.com'>Foo Bar Baz</a>", $u1_mention_name); $this->assertEquals($at_name_in_mailto_final, bp_activity_at_name_filter($at_name_in_mailto)); // inside linked text $at_name_in_link = sprintf('<a href="https://twitter.com/%1$s">@%1$s</a>', $u1_mention_name); $at_name_in_link_final = sprintf('<a href="https://twitter.com/%1$s">@%1$s</a>', $u1_mention_name); $this->assertEquals($at_name_in_link_final, bp_activity_at_name_filter($at_name_in_link)); // Don't link non-existent users $text = "Don't link @non @existent @users"; $this->assertSame($text, bp_activity_at_name_filter($text)); // Don't link the domain name of the site preg_match('|https?://([^/]+)|', home_url(), $matches); if (!empty($matches[1])) { $text = $matches[1] . " Don't link the domain name " . $matches[1]; } $this->assertSame($text, bp_activity_at_name_filter($text)); // Multiples $at_name_in_mailto = sprintf("Send messages to @%s <a href='mail@%s.com'>Foo Bar Baz</a>. Please CC <a href='http://twitter.com/foo2'>@foo2</a>.", $u1_mention_name, $u1_mention_name, $u2_mention_name, $u2_mention_name); $at_name_in_mailto_final = sprintf('Send messages to <a href=\'%s\' rel=\'nofollow\'>@%s</a> <a href=\'mail@%s.com\'>Foo Bar Baz</a>. Please CC <a href=\'http://twitter.com/%s\'>@%s</a>.', $u1_domain, $u1_mention_name, $u1_mention_name, $u2_mention_name, $u2_mention_name); $this->assertEquals($at_name_in_mailto_final, bp_activity_at_name_filter($at_name_in_mailto)); }
/** * Creates two notifications for $u1, one of which is for mentions */ protected function create_notifications() { $u1_mentionname = bp_activity_get_user_mentionname($this->u1); $this->a1 = $this->factory->activity->create(array('user_id' => $this->u2, 'component' => buddypress()->activity->id, 'type' => 'activity_update', 'content' => sprintf('Hello! @%s', $u1_mentionname))); $u2_mentionname = bp_activity_get_user_mentionname($this->u2); $this->a2 = $this->factory->activity->create(array('user_id' => $this->u1, 'component' => buddypress()->activity->id, 'type' => 'activity_update', 'content' => sprintf('Hello! @%s', $u2_mentionname))); }
/** * @group scope * @group filter_query * @group BP_Activity_Query */ function test_bp_has_activities_friends_and_mentions_scope() { $u1 = $this->factory->user->create(); $u2 = $this->factory->user->create(); $u3 = $this->factory->user->create(); // user 1 becomes friends with user 2 friends_add_friend($u1, $u2, true); $now = time(); // friend status update $a1 = $this->factory->activity->create(array('user_id' => $u2, 'type' => 'activity_update', 'recorded_time' => date('Y-m-d H:i:s', $now))); // mentioned item by non-friend $mention_username = '******' . bp_activity_get_user_mentionname($u1); $a2 = $this->factory->activity->create(array('user_id' => $u3, 'component' => 'activity', 'type' => 'activity_update', 'content' => "{$mention_username} - Oy!", 'recorded_time' => date('Y-m-d H:i:s', $now - 100))); // misc activity items $this->factory->activity->create(array('user_id' => $u1, 'component' => 'blogs', 'item_id' => 1, 'type' => 'new_blog_post', 'recorded_time' => date('Y-m-d H:i:s', $now - 100))); $this->factory->activity->create(array('user_id' => $u3, 'component' => 'activity', 'type' => 'activity_update', 'recorded_time' => date('Y-m-d H:i:s', $now - 100))); $this->factory->activity->create(array('user_id' => $u3, 'component' => 'groups', 'item_id' => 324, 'type' => 'activity_update', 'recorded_time' => date('Y-m-d H:i:s', $now - 100))); global $activities_template; // grab activities from multiple scopes bp_has_activities(array('user_id' => $u1, 'scope' => 'mentions,friends')); // assert! $this->assertEqualSets(array($a1, $a2), wp_list_pluck($activities_template->activities, 'id')); // clean up! $activities_template = null; }
/** * Set up activity arguments for use with the 'favorites' scope. * * @since 2.2.0 * * @param array $retval Empty array by default. * @param array $filter Current activity arguments. * @return array $retval */ function bp_activity_filter_mentions_scope($retval = array(), $filter = array()) { // Are mentions disabled? if (!bp_activity_do_mentions()) { return $retval; } // Determine the user_id. if (!empty($filter['user_id'])) { $user_id = $filter['user_id']; } else { $user_id = bp_displayed_user_id() ? bp_displayed_user_id() : bp_loggedin_user_id(); } // Should we show all items regardless of sitewide visibility? $show_hidden = array(); if (!empty($user_id) && $user_id !== bp_loggedin_user_id()) { $show_hidden = array('column' => 'hide_sitewide', 'value' => 0); } $retval = array('relation' => 'AND', array('column' => 'content', 'compare' => 'LIKE', 'value' => '@' . bp_activity_get_user_mentionname($user_id) . '<'), $show_hidden, 'override' => array('search_terms' => false, 'display_comments' => 'stream', 'filter' => array('user_id' => 0), 'show_hidden' => true)); return $retval; }
/** * Get the mentionname for the displayed user. * * @since BuddyPress (1.9.0) * * @return string Mentionname for the displayed user, if available. */ function bp_get_displayed_user_mentionname() { /** * Filters the mentionname for the displayed user. * * @since BuddyPress (1.9.0) * * @param string $value The mentionanme for the displayed user. */ return apply_filters('bp_get_displayed_user_mentionname', bp_activity_get_user_mentionname(bp_displayed_user_id())); }
/** * Get the mentionname for the displayed user. * * @since BuddyPress (1.9.0) * * @return string Mentionname for the displayed user, if available. */ function bp_get_displayed_user_mentionname() { return apply_filters('bp_get_displayed_user_mentionname', bp_activity_get_user_mentionname(bp_displayed_user_id())); }
/** * @group bp_activity_get_user_mentionname */ public function test_bp_activity_get_user_mentionname_compatibilitymode_on() { add_filter('bp_is_username_compatibility_mode', '__return_true'); $u1 = $this->factory->user->create(array('user_login' => 'foo bar baz', 'user_nicename' => 'foo-bar-baz')); $u2 = $this->factory->user->create(array('user_login' => 'foo.bar.baz', 'user_nicename' => 'foo-bar-baz')); $this->assertEquals('foo-bar-baz', bp_activity_get_user_mentionname($u1)); $this->assertEquals('foo.bar.baz', bp_activity_get_user_mentionname($u2)); remove_filter('bp_is_username_compatibility_mode', '__return_true'); }
/** * Sets a custom <blockquote> for our oEmbed fallback HTML. * * @since 2.6.0 * * @param int $item_id The activity ID. * @return string */ protected function set_fallback_html($item_id) { $activity = new BP_Activity_Activity($item_id); $mentionname = bp_activity_do_mentions() ? ' (@' . bp_activity_get_user_mentionname($activity->user_id) . ')' : ''; $date = date_i18n(get_option('date_format'), strtotime($activity->date_recorded)); // Make sure we can use some activity functions that depend on the loop. $GLOBALS['activities_template'] = new stdClass(); $GLOBALS['activities_template']->activity = $activity; // 'wp-embedded-content' CSS class is necessary due to how the embed JS works. $blockquote = sprintf('<blockquote class="wp-embedded-content bp-activity-item">%1$s%2$s %3$s</blockquote>', bp_activity_get_embed_excerpt($activity->content), '- ' . bp_core_get_user_displayname($activity->user_id) . $mentionname, '<a href="' . esc_url(bp_activity_get_permalink($item_id)) . '">' . $date . '</a>'); // Clean up. unset($GLOBALS['activities_template']); /** * Filters the fallback HTML used when embedding a BP activity item. * * @since 2.6.0 * * @param string $blockquote Current fallback HTML * @param BP_Activity_Activity $activity Activity object */ return apply_filters('bp_activity_embed_fallback_html', $blockquote, $activity); }