setup_globals(); $this->setup_actions(); } /** * Set extension variables * * @since Achievements (3.2) */ private function setup_globals() { $this->component = 'achievements'; $this->achievement_unlocked = 'dpa_unlocked'; } /** * Setup the actions * * @since Achievements (3.2) */ private function setup_actions() { // Register the activity stream actions add_action( 'bp_register_activity_actions', array( $this, 'register_activity_actions' ) ); // Hook into the achievement unlocked action add_action( 'dpa_unlock_achievement', array( $this, 'achievement_unlocked' ), 10, 3 ); // Hook into the achievement deleted action add_action( 'dpa_before_achievement_deleted', array( $this, 'achievement_deleted' ), 10, 1 ); // Append filters in site wide activity streams add_action( 'bp_activity_filter_options', array( $this, 'activity_filter_options' ), 10 ); // Append filters in single member activity streams add_action( 'bp_member_activity_filter_options', array( $this, 'activity_filter_options' ), 10 ); // Append filters in single group activity streams add_action( 'bp_group_activity_filter_options', array( $this, 'activity_filter_options' ), 10 ); } /** * Register our activity actions with BuddyPress * * @since Achievements (3.2) */ public function register_activity_actions() { bp_activity_set_action( $this->component, $this->achievement_unlocked, __( 'Unlocked achievements', 'dpa' ) ); } /** * Wrapper for adding Achievements actions to the BuddyPress activity stream. * * @param array $args Optional. Array of arguments for bp_activity_add(). * @return int|bool Activity ID if successful, false if not. * @since Achievements (3.2) */ private function record_activity( $args = array() ) { $activity = dpa_parse_args( $args, array( 'action' => '', 'component' => $this->component, 'content' => '', 'hide_sitewide' => false, 'id' => false, 'item_id' => false, 'primary_link' => '', 'recorded_time' => bp_core_current_time(), 'secondary_item_id' => false, 'type' => false, 'user_id' => get_current_user_id(), ), 'record_activity' ); return bp_activity_add( $activity ); } /** * Wrapper for deleting Achievements actions from the BuddyPress activity stream. * * @param array $args Array of arguments for bp_activity_add(). * @return int|bool Activity ID if successful, false if not. * @since Achievements (3.2) */ public function delete_activity( $args = array() ) { $activity = dpa_parse_args( $args, array( 'component' => $this->component, 'item_id' => false, 'secondary_item_id' => false, 'type' => false, 'user_id' => false, ), 'delete_activity' ); bp_activity_delete_by_item_id( $activity ); } /** * Append Achievements' options to activity filter select box * * @since Achievements (3.2) */ function activity_filter_options() { ?> ID ); $achievement_title = get_post_field( 'post_title', $achievement->ID, 'raw' ); $achievement_link = sprintf( '%2$s', esc_url( $achievement_permalink ), esc_html( $achievement_title ) ); // Activity action & text $activity_text = sprintf( __( '%1$s unlocked the achievement: %2$s', 'dpa' ), bp_core_get_userlink( $user_id ), $achievement_link ); $activity_action = apply_filters( 'dpa_activity_achievement_unlocked', $activity_text, $achievement->ID, $user_id, $progress_id ); // Record the activity $activity = array( 'action' => $activity_action, 'content' => '', 'item_id' => $achievement->ID, 'hide_sitewide' => false, 'primary_link' => $achievement_permalink, 'recorded_time' => get_post_time( 'Y-m-d H:i:s', true, $achievement->ID ), 'type' => $this->achievement_unlocked, 'user_id' => $user_id, ); $activity_id = $this->record_activity( $activity ); } /** * Delete Achievements' activity stream entries when an achievement is deleted. * * @param int $achievement_id Achievement post ID being deleted * @since Achievevements (3.2) */ public function achievement_deleted( $achievement_id ) { // "Achievement unlock" activities bp_activity_delete( array( 'component' => $this->component, 'item_id' => $achievement_id, 'type' => $this->achievement_unlocked, ) ); } } endif;