From 6e550f5774863d0fbb54478269f7bc4a9c7d0cdf Mon Sep 17 00:00:00 2001 From: Saif Sultan Date: Wed, 29 Jan 2025 21:00:57 +0530 Subject: [PATCH 1/2] `gw-delay-feed-till-user-registration.php`: Added snippet to delay a feed until the User Registration feed had its user activated. --- .../gw-delay-feed-till-user-registration.php | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 gravity-forms/gw-delay-feed-till-user-registration.php diff --git a/gravity-forms/gw-delay-feed-till-user-registration.php b/gravity-forms/gw-delay-feed-till-user-registration.php new file mode 100644 index 000000000..7657253b9 --- /dev/null +++ b/gravity-forms/gw-delay-feed-till-user-registration.php @@ -0,0 +1,72 @@ +_args = wp_parse_args( $args, array( + 'form_id' => false, + 'feed_slug' => $args['feed_slug'], + ) ); + + add_filter( 'gform_is_delayed_pre_process_feed', array( $this, 'maybe_delay_feed' ), 10, 4 ); + add_action( 'gform_user_registered', array( $this, 'process_feed' ), 10, 4 ); + add_filter( 'gform_is_feed_asynchronous', array( $this, 'make_feed_async' ), 10, 4 ); + + } + + // Delays the feed until user registration is complete. + public function maybe_delay_feed( $is_delayed, $form, $entry, $slug ) { + + if ( $slug == $this->_args['feed_slug'] && function_exists( 'gf_user_registration' ) ) { + $user_id = gf_user_registration()->get_user_by_entry_id( rgar( $entry, 'id' ), true ); + + // Delay feed if user is not registered (user_id is blank). + return rgblank( $user_id ); + } + + return $is_delayed; + } + + // Processes the feed after the user is registered + public function process_feed( $user_id, $feed, $entry, $user_pass ) { + + // Feed slug is converted to function name. + $feed_slug = str_replace( '-', '_', $this->_args['feed_slug'] ); + if ( function_exists( $feed_slug ) ) { + $feed_class = call_user_func( $feed_slug ); + + // Process the feed for the specified form or for all forms if no form_id is passed. + if ( $feed_class && ( empty( $this->_args['form_id'] ) || rgar( $feed, 'form_id' ) == $this->_args['form_id'] ) ) { + $feed_class->maybe_process_feed( $entry, $form ); + } + } + } + + // Ensure the feed is async, so it can be trigerred when our conditions are met (User Registration). + public function make_feed_async( $is_asynchronous, $feed, $entry, $form ) { + if ( rgar( $feed, 'addon_slug' ) == $this->_args['feed_slug'] && $feed['form_id'] == $this->_args['form_id'] ) { + return false; + } + return $is_asynchronous; + } +} + +# Configuration: Pass feed_slug (mandatory) and form_id (optional) +new GW_Delayed_Feed_Processing( array( + 'feed_slug' => 'gc-notion', // Specify the feed_slug (mandatory) + 'form_id' => 6, // Optional: Specify the form_id (or apply to all forms). +) ); From ea29dc75f567e17339aca0ae39b487c663a44e51 Mon Sep 17 00:00:00 2001 From: saifsultanc Date: Tue, 4 Feb 2025 11:16:36 +0530 Subject: [PATCH 2/2] `gw-delay-feed-till-user-registration.php`: Added snippet to delay a feed until the User Registration feed had its user activated. --- gravity-forms/gw-delay-feed-till-user-registration.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gravity-forms/gw-delay-feed-till-user-registration.php b/gravity-forms/gw-delay-feed-till-user-registration.php index 7657253b9..4531779cf 100644 --- a/gravity-forms/gw-delay-feed-till-user-registration.php +++ b/gravity-forms/gw-delay-feed-till-user-registration.php @@ -7,7 +7,7 @@ * Delay a specified feed until user registration is complete. * This is useful when you have a feed that needs to be processed after user registration is complete. */ -class GW_Delayed_Feed_Processing { +class GW_Delayed_Feed_Processing_Till_User_Registration { private $_args = array(); @@ -66,7 +66,7 @@ public function make_feed_async( $is_asynchronous, $feed, $entry, $form ) { } # Configuration: Pass feed_slug (mandatory) and form_id (optional) -new GW_Delayed_Feed_Processing( array( +new GW_Delayed_Feed_Processing_Till_User_Registration( array( 'feed_slug' => 'gc-notion', // Specify the feed_slug (mandatory) 'form_id' => 6, // Optional: Specify the form_id (or apply to all forms). ) );