Bp_Tokens
Class Bp_Tokens
Source Source
File: src/integrations/buddypress/tokens/bp-tokens.php
class Bp_Tokens { /** * Integration code * * @var string */ public static $integration = 'BP'; public function __construct() { add_filter( 'automator_maybe_trigger_bp_tokens', [ $this, 'bp_possible_tokens' ], 20, 2 ); add_filter( 'automator_maybe_parse_token', [ $this, 'parse_bp_token' ], 20, 6 ); } /** * Only load this integration and its triggers and actions if the related * plugin is active * * @param $status * @param $code * * @return bool */ public function plugin_active( $status, $code ) { if ( self::$integration === $code ) { if ( function_exists( 'buddypress' ) && isset( buddypress()->buddyboss ) && buddypress()->buddyboss ) { $status = true; } else { $status = false; } } return $status; } /** * @param array $tokens * @param array $args * * @return array */ public function bp_possible_tokens( $tokens = array(), $args = array() ) { $trigger_integration = $args['integration']; $trigger_meta = $args['meta']; $fields = [ [ 'tokenId' => 'BPUSER', 'tokenName' => 'AVATAR URL', 'tokenType' => 'text', 'tokenIdentifier' => 'BPUSERAVATAR', ], ]; // Get BP xprofile fields from DB. global $wpdb; $fields_table = $wpdb->prefix . "bp_xprofile_fields"; $xprofile_fields = $wpdb->get_results( "SELECT * FROM {$fields_table} WHERE parent_id = 0 ORDER BY field_order ASC" ); if ( ! empty( $xprofile_fields ) ) { foreach ( $xprofile_fields as $field ) { if ( 'socialnetworks' === $field->type ) { $child_fields = $wpdb->get_results( "SELECT * FROM {$fields_table} WHERE parent_id = {$field->id} ORDER BY field_order ASC" ); if ( ! empty( $child_fields ) ) { foreach ( $child_fields as $child_field ) { $fields[] = [ 'tokenId' => 'BPUSER', 'tokenName' => $field->name . ' - ' . $child_field->name, 'tokenType' => 'text', 'tokenIdentifier' => 'BPXPROFILE:' . $field->id . '|' . $child_field->name, ]; } } } elseif ( 'membertypes' === $field->type ) { $fields[] = [ 'tokenId' => 'BPUSER', 'tokenName' => $field->name, 'tokenType' => 'text', 'tokenIdentifier' => 'BPXPROFILE:' . $field->id . '|membertypes', ]; } else { $fields[] = [ 'tokenId' => 'BPUSER', 'tokenName' => $field->name, 'tokenType' => 'text', 'tokenIdentifier' => 'BPXPROFILE:' . $field->id, ]; } } } if ( isset( $args['triggers_meta']['code'] ) && 'BPACTIVITYSTRM' === $args['triggers_meta']['code'] ) { $fields[] = [ 'tokenId' => 'ACTIVITY_ID', 'tokenName' => __( 'Activity ID', 'uncanny-automator' ), 'tokenType' => 'text', 'tokenIdentifier' => 'BPUSERACTIVITY', ]; $fields[] = [ 'tokenId' => 'ACTIVITY_CONTENT', 'tokenName' => __( 'Activity content', 'uncanny-automator' ), 'tokenType' => 'text', 'tokenIdentifier' => 'BPUSERACTIVITY', ]; } $tokens = array_merge( $tokens, $fields ); return $tokens; } /** * @param $value * @param $pieces * @param $recipe_id * @param $trigger_data * * @return mixed */ public function parse_bp_token( $value, $pieces, $recipe_id, $trigger_data, $user_id, $replace_args ) { if ( $pieces ) { if ( in_array( 'BPUSERAVATAR', $pieces ) ) { // Get Group id from meta log if ( function_exists( 'get_avatar_url' ) ) { $value = get_avatar_url( $user_id ); } } elseif ( in_array( 'BPXPROFILE', $pieces ) ) { if ( isset( $pieces[2] ) && ! empty( $pieces[2] ) ) { $value = $this->get_xprofile_data( $user_id, $pieces[2] ); } } elseif ( in_array( 'BPUSERACTIVITY', $pieces ) ) { if ( $trigger_data ) { foreach ( $trigger_data as $trigger ) { $trigger_id = $trigger['ID']; $trigger_log_id = $replace_args['trigger_log_id']; $meta_key = $pieces[2]; $meta_value = Automator()->helpers->recipe->get_form_data_from_trigger_meta( $meta_key, $trigger_id, $trigger_log_id, $user_id ); if ( ! empty( $meta_value ) ) { $value = $meta_value; } } } } } return $value; } /** * @param $user_id * @param $field_id * * @return mixed|string */ public function get_xprofile_data( $user_id, $field_id ) { global $wpdb; if ( empty( $field_id ) ) { return ''; } $field_token = explode( '|', $field_id ); if ( count( $field_token ) > 0 ) { $field_id = $field_token[0]; } $meta_value = $wpdb->get_var( $wpdb->prepare( "SELECT value FROM {$wpdb->prefix}bp_xprofile_data WHERE user_id = %d AND field_id = %s LIMIT 0,1", $user_id, $field_id ) ); if ( ! empty( $meta_value ) ) { $meta_data = maybe_unserialize( $meta_value ); if ( empty( $meta_data ) ) { return ''; } if ( is_array( $meta_data ) ) { if ( isset( $field_token[1] ) ) { return isset( $meta_data[ $field_token[1] ] ) ? $meta_data[ $field_token[1] ] : ''; } return implode( ', ', $meta_data ); } if ( isset( $field_token[1] ) && 'membertypes' === $field_token[1] ) { return get_the_title( $meta_data ); } return $meta_data; } return ''; } }
Expand full source code Collapse full source code View on Github
Methods Methods
- __construct
- bp_possible_tokens — BuddyPress possible tokens.
- get_xprofile_data — Get xprofile data.
- parse_bp_token — Parse BuddyPress Token.
- plugin_active — Only load this integration and its triggers and actions if the related plugin is active