/** * bp_example_send_high_five() * * Sends a high five message to a user. Registers an notification to the user * via their notifications menu, as well as sends an email to the user. * * Also records an activity stream item saying "User 1 high-fived User 2". */ function bp_example_send_highfive($to_user_id, $from_user_id) { global $bp; check_admin_referer('bp_example_send_high_five'); /** * We'll store high-fives as usermeta, so we don't actually need * to do any database querying. If we did, and we were storing them * in a custom DB table, we'd want to reference a function in * bp-example-classes.php that would run the SQL query. */ delete_user_meta($to_user_id, 'high-fives'); /* Get existing fives */ $existing_fives = maybe_unserialize(get_user_meta($to_user_id, 'high-fives', true)); /* Check to see if the user has already high-fived. That's okay, but lets not * store duplicate high-fives in the database. What's the point, right? */ if (!in_array($from_user_id, (array) $existing_fives)) { $existing_fives[] = (int) $from_user_id; /* Now wrap it up and fire it back to the database overlords. */ update_user_meta($to_user_id, 'high-fives', serialize($existing_fives)); // Let's also record it in our custom database tables $db_args = array('recipient_id' => (int) $to_user_id, 'high_fiver_id' => (int) $from_user_id); $high_five = new BP_Example_Highfive($db_args); $high_five->save(); } /*** * Now we've registered the new high-five, lets work on some notification and activity * stream magic. */ /*** * Post a screen notification to the user's notifications menu. * Remember, like activity streams we need to tell the activity stream component how to format * this notification in bp_example_format_notifications() using the 'new_high_five' action. */ bp_core_add_notification($from_user_id, $to_user_id, $bp->example->slug, 'new_high_five'); /* Now record the new 'new_high_five' activity item */ $to_user_link = bp_core_get_userlink($to_user_id); $from_user_link = bp_core_get_userlink($from_user_id); bp_example_record_activity(array('type' => 'rejected_terms', 'action' => apply_filters('bp_example_new_high_five_activity_action', sprintf(__('%s high-fived %s!', 'bp-example'), $from_user_link, $to_user_link), $from_user_link, $to_user_link), 'item_id' => $to_user_id)); /* We'll use this do_action call to send the email notification. See bp-example-notifications.php */ do_action('bp_example_send_high_five', $to_user_id, $from_user_id); return true; }