*/ namespace AdvancedAds\Pro\Modules\BuddyPress; use AdvancedAds\Abstracts\Placement; use AdvancedAds\Utilities\Conditional; use AdvancedAds\Framework\Utilities\Params; use AdvancedAds\Framework\Interfaces\Integration_Interface; defined( 'ABSPATH' ) || exit; /** * Class Admin */ class Admin implements Integration_Interface { /** * Hook into WordPress. * * @return void */ public function hooks(): void { add_action( 'advanced-ads-placement-options-after', [ $this, 'placement_options' ], 10, 2 ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_scripts' ] ); add_action( 'wp_ajax_advads-pro-buddyboss-render-xprofile-field', [ $this, 'render_xprofile_field_ajax' ] ); } /** * Register options for the BuddyPress placement * * @param string $slug placement slug. * @param Placement $placement the placement. * * @return void */ public function placement_options( $slug, $placement ) { if ( $placement->is_type( 'buddypress' ) ) { $placement_options = $placement->get_data(); $buddypress_positions = $this->get_buddypress_hooks(); $current = BuddyPress::get_hook_from_placement_options( $placement ); $activity_type = $placement_options['activity_type'] ?? 'any'; $hook_repeat = ! empty( $placement_options['hook_repeat'] ); $index = ( isset( $placement_options['pro_buddypress_pages_index'] ) ) ? \Advanced_Ads_Pro_Utils::absint( $placement_options['pro_buddypress_pages_index'], 1 ) : 1; require AA_PRO_ABSPATH . 'modules/buddypress/views/position-option.php'; } } /** * Load the hooks relevant for BuddyPress/BuddyBoss * * @return array list of hooks for BuddyPress depending on the BP theme */ public function get_buddypress_hooks() { if ( ! BuddyPress::is_legacy_theme() ) { return [ __( 'Activity Entry', 'advanced-ads-pro' ) => [ 'bp_after_activity_entry' => 'after activity entry', ], ]; } // Return legacy hooks. return [ __( 'Activity Entry', 'advanced-ads-pro' ) => [ 'bp_before_activity_entry' => 'before activity entry', 'bp_activity_entry_content' => 'activity entry content', 'bp_after_activity_entry' => 'after activity entry', 'bp_before_activity_entry_comments' => 'before activity entry comments', 'bp_activity_entry_comments' => 'activity entry comments', 'bp_after_activity_entry_comments' => 'after activity entry comments', ], __( 'Group List', 'advanced-ads-pro' ) => [ 'bp_directory_groups_item' => 'directory groups item', ], __( 'Member List', 'advanced-ads-pro' ) => [ 'bp_directory_members_item' => 'directory members item', ], ]; } /** * Enqueue admin scripts. */ public function enqueue_admin_scripts() { if ( ! Conditional::is_screen_advanced_ads() ) { return; } wp_enqueue_script( 'advanced-ads-pro/buddyboss-admin', plugin_dir_url( __FILE__ ) . 'assets/js/admin.js', [ 'jquery' ], AAP_VERSION, true ); } /** * Renders a html field corresponding to the currently selected field type. */ public function render_xprofile_field_ajax() { check_ajax_referer( 'advanced-ads-admin-ajax-nonce', 'nonce' ); $field_name = Params::post( 'field_name' ); $field_type = Params::post( 'field_type' ); if ( ! Conditional::user_can( 'advanced_ads_edit_ads' ) || ! $field_name || ! $field_type ) { die; } self::render_xprofile_field( preg_replace( '/[^a-z0-9\[\]]/', '', $field_name ), preg_replace( '/[^a-z0-9]/', '', $field_type ), '' ); die; } /** * Renders a html field corresponding to the currently selected field type. * * @param string $name Field name. * @param string $field_type type Field type. * @param string $value Field value. */ public static function render_xprofile_field( $name, $field_type, $value = '' ) { if ( function_exists( 'bp_get_active_member_types' ) && BuddyPress::FIELD_MEMBERTYPES === $field_type ) { $bp_active_member_types = \bp_get_active_member_types(); if ( ! empty( $bp_active_member_types ) ) { printf( ''; } } else { printf( '', esc_attr( $name ), esc_attr( $value ) ); } } }