WooCommerce::class, 'contact-form-7' => ContactForm7::class, 'wpforms-lite' => WPForms::class, 'fluentform' => FluentForms::class, 'forminator' => Forminator::class, 'kadence-blocks' => KadenceBlocks::class, 'ninja-forms' => NinjaForms::class, 'ameliabooking' => Booking::class, 'fluent-booking' => FluentBooking::class, 'booking' => BookingCalendar::class, 'uncanny-automator' => Automator::class, 'ultimate-member' => UltimateMember::class, ); /** * Logos of the integrations' plugins (smsportal/assets/integrations/), for the rule editor's plugin tiles. */ const ICONS = array( 'woocommerce' => 'woocommerce.png', 'contact-form-7' => 'contact-form-7.png', 'wpforms-lite' => 'wpforms.png', 'fluentform' => 'fluent-forms.png', 'forminator' => 'forminator.png', 'kadence-blocks' => 'kadence-blocks.png', 'ninja-forms' => 'ninja-forms.png', 'ameliabooking' => 'amelia.png', 'fluent-booking' => 'fluent-booking.png', 'booking' => 'wp-booking-calendar.png', 'ultimate-member' => 'ultimate-member.png', ); /** * Plugin tiles of the active integrations that offer events (Uncanny Automator only adds an action), * also when they have no events yet (e.g. no form created). * * @return array */ public static function event_groups(): array { $groups = array(); foreach ( self::active() as $slug ) { $class = self::INTEGRATIONS[ $slug ]; if ( ! defined( $class . '::GROUP' ) || ! isset( self::ICONS[ $slug ] ) ) { continue; } $groups[] = array( 'name' => (string) constant( $class . '::GROUP' ), 'icon' => SMSPORTAL_URL_BASE . 'assets/integrations/' . self::ICONS[ $slug ], ); } return $groups; } /** * Register hooks. * * @return void */ public static function register(): void { // After every plugin is loaded, so the checks below see them. add_action( 'plugins_loaded', array( self::class, 'boot' ), 20 ); } /** * Switch on the active integrations. * * @return array Slugs of the integrations switched on. */ public static function boot(): array { $active = self::active(); foreach ( $active as $slug ) { call_user_func( array( self::INTEGRATIONS[ $slug ], 'register' ) ); } return $active; } /** * Integrations whose plugin is active. * * @return array Plugin slugs. */ public static function active(): array { $active = array(); foreach ( self::INTEGRATIONS as $slug => $integration ) { /** * Filters whether a built-in integration is on. Default: whether its plugin is active. * * @param bool $active Whether the plugin is active. * @param string $slug Plugin slug: woocommerce, contact-form-7, wpforms-lite, fluentform, forminator, kadence-blocks, ninja-forms, ameliabooking, fluent-booking, booking (WP Booking Calendar), uncanny-automator, ultimate-member. */ if ( apply_filters( 'smsportal_integration_active', call_user_func( array( $integration, 'available' ) ), $slug ) ) { $active[] = $slug; } } return $active; } }