displayed_user->id ) ? $bp->displayed_user->id : $bp->loggedin_user->id;
$qs[] = 'user_id=' . $user_id;
}
if ( 'all' != $_BP_COOKIE['bp-' . $object . '-scope'] && empty( $bp->displayed_user->id ) && !$bp->is_single_item )
$qs[] = 'scope=' . $_BP_COOKIE['bp-' . $object . '-scope']; // Activity stream scope only on activity directory.
}
/* If page and search_terms have been passed via the AJAX post request, use those */
if ( !empty( $_POST['page'] ) && '-1' != $_POST['page'] )
$qs[] = 'page=' . $_POST['page'];
if ( !empty( $_POST['search_terms'] ) && __( 'Search anything...', 'buddypress' ) != $_POST['search_terms'] && 'false' != $_POST['search_terms'] && 'undefined' != $_POST['search_terms'] )
$qs[] = 'search_terms=' . $_POST['search_terms'];
/* Now pass the querystring to override default values. */
$query_string = empty( $qs ) ? '' : join( '&', (array)$qs );
return apply_filters( 'bp_dtheme_ajax_querystring', $query_string, $object, $_BP_COOKIE['bp-' . $object . '-filter'], $_BP_COOKIE['bp-' . $object . '-scope'], $_BP_COOKIE['bp-' . $object . '-page'], $_BP_COOKIE['bp-' . $object . '-search-terms'], $_BP_COOKIE['bp-' . $object . '-extras'] );
}
add_filter( 'bp_ajax_querystring', 'bp_dtheme_ajax_querystring', 10, 2 );
/* This function will simply load the template loop for the current object. On an AJAX request */
function bp_dtheme_object_template_loader() {
$object = esc_attr( $_POST['object'] );
locate_template( array( "$object/$object-loop.php" ), true );
}
add_action( 'wp_ajax_members_filter', 'bp_dtheme_object_template_loader' );
add_action( 'wp_ajax_groups_filter', 'bp_dtheme_object_template_loader' );
add_action( 'wp_ajax_blogs_filter', 'bp_dtheme_object_template_loader' );
add_action( 'wp_ajax_forums_filter', 'bp_dtheme_object_template_loader' );
/* This function will load the activity loop template when activity is requested via AJAX */
function bp_dtheme_activity_template_loader() {
global $bp;
/* We need to calculate and return the feed URL for each scope */
$feed_url = site_url( BP_ACTIVITY_SLUG . '/feed/' );
switch ( $_POST['scope'] ) {
case 'friends':
$feed_url = $bp->loggedin_user->domain . BP_ACTIVITY_SLUG . '/friends/feed/';
break;
case 'groups':
$feed_url = $bp->loggedin_user->domain . BP_ACTIVITY_SLUG . '/groups/feed/';
break;
case 'favorites':
$feed_url = $bp->loggedin_user->domain . BP_ACTIVITY_SLUG . '/favorites/feed/';
break;
case 'mentions':
$feed_url = $bp->loggedin_user->domain . BP_ACTIVITY_SLUG . '/mentions/feed/';
delete_usermeta( $bp->loggedin_user->id, 'bp_new_mention_count' );
break;
}
/* Buffer the loop in the template to a var for JS to spit out. */
ob_start();
locate_template( array( 'activity/activity-loop.php' ), true );
$result['contents'] = ob_get_contents();
$result['feed_url'] = apply_filters( 'bp_dtheme_activity_feed_url', $feed_url, $_POST['scope'] );
ob_end_clean();
echo json_encode( $result );
}
add_action( 'wp_ajax_activity_widget_filter', 'bp_dtheme_activity_template_loader' );
add_action( 'wp_ajax_activity_get_older_updates', 'bp_dtheme_activity_template_loader' );
/* AJAX update posting */
function bp_dtheme_post_update() {
global $bp;
/* Check the nonce */
check_admin_referer( 'post_update', '_wpnonce_post_update' );
if ( !is_user_logged_in() ) {
echo '-1';
return false;
}
if ( empty( $_POST['content'] ) ) {
echo '-1
' . __( 'Please enter some content to post.', 'buddypress' ) . '
';
return false;
}
if ( empty( $_POST['object'] ) && function_exists( 'bp_activity_post_update' ) ) {
$activity_id = bp_activity_post_update( array( 'content' => $_POST['content'] ) );
} elseif ( $_POST['object'] == 'groups' ) {
if ( !empty( $_POST['item_id'] ) && function_exists( 'groups_post_update' ) )
$activity_id = groups_post_update( array( 'content' => $_POST['content'], 'group_id' => $_POST['item_id'] ) );
} else
$activity_id = apply_filters( 'bp_activity_custom_update', $_POST['object'], $_POST['item_id'], $_POST['content'] );
if ( !$activity_id ) {
echo '-1' . __( 'There was a problem posting your update, please try again.', 'buddypress' ) . '
';
return false;
}
if ( bp_has_activities ( 'include=' . $activity_id ) ) : ?>
' . __( 'Please do not leave the comment area blank.', 'buddypress' ) . '
';
return false;
}
if ( empty( $_POST['form_id'] ) || empty( $_POST['comment_id'] ) || !is_numeric( $_POST['form_id'] ) || !is_numeric( $_POST['comment_id'] ) ) {
echo '-1' . __( 'There was an error posting that reply, please try again.', 'buddypress' ) . '
';
return false;
}
$comment_id = bp_activity_new_comment( array(
'content' => $_POST['content'],
'activity_id' => $_POST['form_id'],
'parent_id' => $_POST['comment_id']
));
if ( !$comment_id ) {
echo '-1' . __( 'There was an error posting that reply, please try again.', 'buddypress' ) . '
';
return false;
}
if ( bp_has_activities ( 'include=' . $comment_id ) ) : ?>
user_id != $bp->loggedin_user->id )
return false;
if ( empty( $_POST['id'] ) || !is_numeric( $_POST['id'] ) )
return false;
/* Call the action before the delete so plugins can still fetch information about it */
do_action( 'bp_activity_action_delete_activity', $_POST['id'], $activity->user_id );
if ( !bp_activity_delete( array( 'id' => $_POST['id'], 'user_id' => $activity->user_id ) ) ) {
echo '-1' . __( 'There was a problem when deleting. Please try again.', 'buddypress' ) . '
';
return false;
}
return true;
}
add_action( 'wp_ajax_delete_activity', 'bp_dtheme_delete_activity' );
/* AJAX delete an activity comment */
function bp_dtheme_delete_activity_comment() {
global $bp;
/* Check the nonce */
check_admin_referer( 'bp_activity_delete_link' );
if ( !is_user_logged_in() ) {
echo '-1';
return false;
}
$comment = new BP_Activity_Activity( $_POST['id'] );
/* Check access */
if ( !is_super_admin() && $comment->user_id != $bp->loggedin_user->id )
return false;
if ( empty( $_POST['id'] ) || !is_numeric( $_POST['id'] ) )
return false;
/* Call the action before the delete so plugins can still fetch information about it */
do_action( 'bp_activity_action_delete_activity', $_POST['id'], $comment->user_id );
if ( !bp_activity_delete_comment( $comment->item_id, $comment->id ) ) {
echo '-1' . __( 'There was a problem when deleting. Please try again.', 'buddypress' ) . '
';
return false;
}
return true;
}
add_action( 'wp_ajax_delete_activity_comment', 'bp_dtheme_delete_activity_comment' );
/* AJAX mark an activity as a favorite */
function bp_dtheme_mark_activity_favorite() {
global $bp;
bp_activity_add_user_favorite( $_POST['id'] );
_e( 'Remove Favorite', 'buddypress' );
}
add_action( 'wp_ajax_activity_mark_fav', 'bp_dtheme_mark_activity_favorite' );
/* AJAX mark an activity as not a favorite */
function bp_dtheme_unmark_activity_favorite() {
global $bp;
bp_activity_remove_user_favorite( $_POST['id'] );
_e( 'Favorite', 'buddypress' );
}
add_action( 'wp_ajax_activity_mark_unfav', 'bp_dtheme_unmark_activity_favorite' );
/* AJAX invite a friend to a group functionality */
function bp_dtheme_ajax_invite_user() {
global $bp;
check_ajax_referer( 'groups_invite_uninvite_user' );
if ( !$_POST['friend_id'] || !$_POST['friend_action'] || !$_POST['group_id'] )
return false;
if ( !groups_is_user_admin( $bp->loggedin_user->id, $_POST['group_id'] ) )
return false;
if ( !friends_check_friendship( $bp->loggedin_user->id, $_POST['friend_id'] ) )
return false;
if ( 'invite' == $_POST['friend_action'] ) {
if ( !groups_invite_user( array( 'user_id' => $_POST['friend_id'], 'group_id' => $_POST['group_id'] ) ) )
return false;
$user = new BP_Core_User( $_POST['friend_id'] );
echo '';
echo $user->avatar_thumb;
echo '' . $user->user_link . '
';
echo '' . esc_attr( $user->last_active ) . '';
echo '';
echo '';
} else if ( 'uninvite' == $_POST['friend_action'] ) {
if ( !groups_uninvite_user( $_POST['friend_id'], $_POST['group_id'] ) )
return false;
return true;
} else {
return false;
}
}
add_action( 'wp_ajax_groups_invite_user', 'bp_dtheme_ajax_invite_user' );
/* AJAX add/remove a user as a friend when clicking the button */
function bp_dtheme_ajax_addremove_friend() {
global $bp;
if ( 'is_friend' == BP_Friends_Friendship::check_is_friend( $bp->loggedin_user->id, $_POST['fid'] ) ) {
check_ajax_referer('friends_remove_friend');
if ( !friends_remove_friend( $bp->loggedin_user->id, $_POST['fid'] ) ) {
echo __("Friendship could not be canceled.", 'buddypress');
} else {
echo '' . __( 'Add Friend', 'buddypress' ) . '';
}
} else if ( 'not_friends' == BP_Friends_Friendship::check_is_friend( $bp->loggedin_user->id, $_POST['fid'] ) ) {
check_ajax_referer('friends_add_friend');
if ( !friends_add_friend( $bp->loggedin_user->id, $_POST['fid'] ) ) {
echo __("Friendship could not be requested.", 'buddypress');
} else {
echo '' . __( 'Friendship Requested', 'buddypress' ) . '';
}
} else {
echo __( 'Request Pending', 'buddypress' );
}
return false;
}
add_action( 'wp_ajax_addremove_friend', 'bp_dtheme_ajax_addremove_friend' );
/* AJAX accept a user as a friend when clicking the "accept" button */
function bp_dtheme_ajax_accept_friendship() {
check_admin_referer( 'friends_accept_friendship' );
if ( !friends_accept_friendship( $_POST['id'] ) )
echo "-1" . __( 'There was a problem accepting that request. Please try again.', 'buddypress' ) . '
';
return true;
}
add_action( 'wp_ajax_accept_friendship', 'bp_dtheme_ajax_accept_friendship' );
/* AJAX reject a user as a friend when clicking the "reject" button */
function bp_dtheme_ajax_reject_friendship() {
check_admin_referer( 'friends_reject_friendship' );
if ( !friends_reject_friendship( $_POST['id'] ) )
echo "-1" . __( 'There was a problem rejecting that request. Please try again.', 'buddypress' ) . '
';
return true;
}
add_action( 'wp_ajax_reject_friendship', 'bp_dtheme_ajax_reject_friendship' );
/* AJAX join or leave a group when clicking the "join/leave" button */
function bp_dtheme_ajax_joinleave_group() {
global $bp;
if ( groups_is_user_banned( $bp->loggedin_user->id, $_POST['gid'] ) )
return false;
if ( !$group = new BP_Groups_Group( $_POST['gid'], false, false ) )
return false;
if ( 'hidden' == $group->status )
return false;
if ( !groups_is_user_member( $bp->loggedin_user->id, $group->id ) ) {
if ( 'public' == $group->status ) {
check_ajax_referer( 'groups_join_group' );
if ( !groups_join_group( $group->id ) ) {
_e( 'Error joining group', 'buddypress' );
} else {
echo '' . __( 'Leave Group', 'buddypress' ) . '';
}
} else if ( 'private' == $group->status ) {
check_ajax_referer( 'groups_request_membership' );
if ( !groups_send_membership_request( $bp->loggedin_user->id, $group->id ) ) {
_e( 'Error requesting membership', 'buddypress' );
} else {
echo '' . __( 'Membership Requested', 'buddypress' ) . '';
}
}
} else {
check_ajax_referer( 'groups_leave_group' );
if ( !groups_leave_group( $group->id ) ) {
_e( 'Error leaving group', 'buddypress' );
} else {
if ( 'public' == $group->status ) {
echo '' . __( 'Join Group', 'buddypress' ) . '';
} else if ( 'private' == $group->status ) {
echo '' . __( 'Request Membership', 'buddypress' ) . '';
}
}
}
}
add_action( 'wp_ajax_joinleave_group', 'bp_dtheme_ajax_joinleave_group' );
/* AJAX close and keep closed site wide notices from an admin in the sidebar */
function bp_dtheme_ajax_close_notice() {
global $userdata;
if ( !isset( $_POST['notice_id'] ) ) {
echo "-1" . __('There was a problem closing the notice.', 'buddypress') . '
';
} else {
$notice_ids = get_user_meta( $userdata->ID, 'closed_notices', true );
$notice_ids[] = (int) $_POST['notice_id'];
update_user_meta( $userdata->ID, 'closed_notices', $notice_ids );
}
}
add_action( 'wp_ajax_messages_close_notice', 'bp_dtheme_ajax_close_notice' );
/* AJAX send a private message reply to a thread */
function bp_dtheme_ajax_messages_send_reply() {
global $bp;
check_ajax_referer( 'messages_send_message' );
$result = messages_new_message( array( 'thread_id' => $_REQUEST['thread_id'], 'content' => $_REQUEST['content'] ) );
if ( $result ) { ?>
" . __( 'There was a problem sending that reply. Please try again.', 'buddypress' ) . '
';
}
}
add_action( 'wp_ajax_messages_send_reply', 'bp_dtheme_ajax_messages_send_reply' );
/* AJAX mark a private message as unread in your inbox */
function bp_dtheme_ajax_message_markunread() {
global $bp;
if ( !isset($_POST['thread_ids']) ) {
echo "-1" . __('There was a problem marking messages as unread.', 'buddypress' ) . '
';
} else {
$thread_ids = explode( ',', $_POST['thread_ids'] );
for ( $i = 0; $i < count($thread_ids); $i++ ) {
BP_Messages_Thread::mark_as_unread($thread_ids[$i]);
}
}
}
add_action( 'wp_ajax_messages_markunread', 'bp_dtheme_ajax_message_markunread' );
/* AJAX mark a private message as read in your inbox */
function bp_dtheme_ajax_message_markread() {
global $bp;
if ( !isset($_POST['thread_ids']) ) {
echo "-1" . __('There was a problem marking messages as read.', 'buddypress' ) . '
';
} else {
$thread_ids = explode( ',', $_POST['thread_ids'] );
for ( $i = 0; $i < count($thread_ids); $i++ ) {
BP_Messages_Thread::mark_as_read($thread_ids[$i]);
}
}
}
add_action( 'wp_ajax_messages_markread', 'bp_dtheme_ajax_message_markread' );
/* AJAX delete a private message or array of messages in your inbox */
function bp_dtheme_ajax_messages_delete() {
global $bp;
if ( !isset($_POST['thread_ids']) ) {
echo "-1" . __( 'There was a problem deleting messages.', 'buddypress' ) . '
';
} else {
$thread_ids = explode( ',', $_POST['thread_ids'] );
for ( $i = 0; $i < count($thread_ids); $i++ )
BP_Messages_Thread::delete($thread_ids[$i]);
_e('Messages deleted.', 'buddypress');
}
}
add_action( 'wp_ajax_messages_delete', 'bp_dtheme_ajax_messages_delete' );
/* AJAX autocomplete your friends names on the compose screen */
function bp_dtheme_ajax_messages_autocomplete_results() {
global $bp;
$friends = false;
// Get the friend ids based on the search terms
if ( function_exists( 'friends_search_friends' ) )
$friends = friends_search_friends( $_GET['q'], $bp->loggedin_user->id, $_GET['limit'], 1 );
$friends = apply_filters( 'bp_friends_autocomplete_list', $friends, $_GET['q'], $_GET['limit'] );
if ( $friends['friends'] ) {
foreach ( (array)$friends['friends'] as $user_id ) {
$ud = get_userdata($user_id);
$username = $ud->user_login;
echo bp_core_fetch_avatar( array( 'item_id' => $user_id, 'type' => 'thumb', 'width' => 15, 'height' => 15 ) ) . ' ' . bp_core_get_user_displayname( $user_id ) . ' (' . $username . ')
';
}
}
}
add_action( 'wp_ajax_messages_autocomplete_results', 'bp_dtheme_ajax_messages_autocomplete_results' );
?>