GithubHelp home page GithubHelp logo

pronamic / wp-pronamic-pay-gravityforms Goto Github PK

View Code? Open in Web Editor NEW
9.0 6.0 4.0 1.4 MB

Gravity Forms driver for the WordPress payment processing library.

Home Page: http://www.wp-pay.org/extensions/gravityforms/

JavaScript 3.28% PHP 95.27% CSS 0.79% SCSS 0.66%
gravity-forms gravity-forms-driver php wordpress wordpress-plugin wordpress-php-library form forms payment payment-gateway

wp-pronamic-pay-gravityforms's Introduction

WordPress Pay Extension: Gravity Forms

Gravity Forms driver for the WordPress payment processing library.

WordPress Actions

gform_ideal_fulfillment

Description

This hook runs when a transaction is completed successfully for the Pronamic Pay plugin and can be used to fire actions dependent on a successful transaction.

Usage

add_action( 'gform_ideal_fulfillment', 'your_function_name', 10, 2 );

Parameters

$entry | Entry Object

The entry used to generate the transaction.

$feed | Feed Object

The Feed configuration data used to generate the order.

Examples

/**
 * Gravity Forms iDEAL fulfillment hook.
 *
 * @see https://github.com/wp-pay-extensions/gravityforms/blob/1.6.4/src/Extension.php#L750-L751
 * @param array $entry
 * @param Pronamic_WP_Pay_Extensions_GravityForms_PayFeed $feed
 */
function custom_gform_ideal_fulfillment( $entry, $feed ) {
    $payment_id = gform_get_meta( $entry['id'], 'pronamic_payment_id' );

    $payment = get_pronamic_payment( $payment_id );

    error_log( print_r( $payment, true ) );
}

add_action( 'gform_ideal_fulfillment', 'custom_gform_ideal_fulfillment', 10, 2 );
/**
 * Gravity Forms iDEAL fulfillment hook.
 *
 * @see https://github.com/wp-pay-extensions/gravityforms/blob/1.6.4/src/Extension.php#L750-L751
 * @param array $entry
 * @param Pronamic_WP_Pay_Extensions_GravityForms_PayFeed $feed
 */
function gform_ideal_fulfillment_update_entry( $entry, $feed ) {
     $field_id = '';

     $entry[ $field_id ] = 'New value';

     GFAPI::update_entry( $entry );
}

add_action( 'gform_ideal_fulfillment', 'gform_ideal_fulfillment_update_entry', 10, 2 );

WordPress Filters

pronamic_pay_gravityforms_delay_actions

Description

Filters the delay actions to display on the payment feed settings page and to process.

Usage

add_filter( 'pronamic_pay_gravityforms_delay_actions', 'your_function_name' );

Examples

<?php

/**
 * Filter Pronamic Pay delay actions for Gravity Forms.
 *
 * @link https://gist.github.com/rvdsteege/6b0afe10f81b1bc99d335ff484206fa9
 */
\add_filter( 'pronamic_pay_gravityforms_delay_actions', function( $delay_actions ) {
	$delay_actions['gp_unique_id'] = array(
		'active'                      => true,
		'meta_key'                    => '_pronamic_pay_gf_delay_gp_unique_id',
		'delayed_payment_integration' => false,
		'label'                       => \__( 'Wait for payment to create a Gravity Perks Unique ID.', 'text-domain' ),
		'delay_callback'              => function() {
			\add_filter( 'gpui_wait_for_payment', function( $enabled ) {
				$enabled = true;

				return $enabled;
			} );

			\add_filter( 'gpui_wait_for_payment_feed', function( $feed, $form, $entry ) {
				if ( class_exists( '\Pronamic\WordPress\Pay\Extensions\GravityForms\FeedsDB' ) ) {
					$feed = \Pronamic\WordPress\Pay\Extensions\GravityForms\FeedsDB::get_feed_by_entry_id( $entry['id'] );

					if ( null === $feed ) {
						$feeds = \Pronamic\WordPress\Pay\Extensions\GravityForms\FeedsDB::get_active_feeds_by_form_id( $entry['form_id'] );

						$feed = array_shift( $feeds );
					}
				}

				return $feed;
			} );
		},
		'process_callback'            => function( $entry, $form ) {
			\gp_unique_id_field()->populate_field_value( $entry, $form, true );
		}
	);

	return $delay_actions;
} );

Links

wp-pronamic-pay-gravityforms's People

Contributors

erwineisinga avatar remcotolsma avatar rvdsteege avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

wp-pronamic-pay-gravityforms's Issues

Feed settings Gravity Forms form JSON encoding problem

We currently encode the Gravity Forms form to JSON for usage in JavaScript:

<input id="gf_ideal_gravity_form" name="gf_ideal_gravity_form" value="<?php echo esc_attr( wp_json_encode( $form_meta ) ); ?>" type="hidden" />
<input id="gf_ideal_feed_id" name="gf_ideal_feed_id" value="<?php echo esc_attr( $post_id ); ?>" type="hidden" />
<input id="gf_ideal_feed" name="gf_ideal_feed" value="<?php echo esc_attr( wp_json_encode( $feed ) ); ?>" type="hidden" />

// Data
var feed = JSON.parse( elements.feed.val() );
var gravityForm = JSON.parse( elements.gravityForm.val() );

A Pronamic Pay user reported a problem with about that the confirmations selection field remained empty.

Scherm­afbeelding 2023-01-17 om 09 19 10

A JavaScript error occurred in the background:

Uncaught SyntaxError: Expected ',' or '}' after property value in JSON at position 19809
    at JSON.parse (<anonymous>)
    at new t (admin.js:40:26)
    at HTMLDivElement.<anonymous> (admin.js:477:17)
    at Function.each (jquery.min.js?ver=3.6.1:2:3003)
    at s.fn.init.each (jquery.min.js?ver=3.6.1:2:1481)
    at d.fn.gravityFormsPayFeedEditor (admin.js:470:15)
    at HTMLDocument.<anonymous> (admin.js:491:30)
    at e (jquery.min.js?ver=3.6.1:2:30038)
    at t (jquery.min.js?ver=3.6.1:2:30340)

One of the Gravity Forms confirmation messages contains a HTML element with also JSON in a data attribute:

Scherm­afbeelding 2023-01-17 om 09 18 31

I think we can move away from the client side filling of the confirmation selection fields:

/**
* Update confirmations
*/
this.updateConfirmationFields = function() {
elements.confirmationSelectFields.empty();
$( '<option>' ).appendTo( elements.confirmationSelectFields );
if ( gravityForm ) {
$.each( elements.confirmationSelectFields, function( index, field ) {
var linkName = $( field ).attr( 'data-pronamic-link-name' );
$.each( gravityForm.confirmations, function( confirmationId, confirmation ) {
var isSelected = false;
if ( 'object' !== typeof feed.links ) {
return;
}
isSelected = false;
if ( 'object' === typeof feed.links[ linkName ] ) {
isSelected = ( feed.links[ linkName ].confirmation_id === confirmation.id );
}
$( '<option>' )
.attr( 'value', confirmation.id )
.text( confirmation.name )
/* jshint eqeqeq: false */
.prop( 'selected', isSelected )
/* jshint eqeqeq: true */
.appendTo( field );
});
} );
}
};

We now encode a lot of unused data to JSON, which makes it error-prone.

https://github.com/pronamic/gravityforms/blob/c92536eedeaa5cb4090f1f15e0bcf4b8cae2dd46/forms_model.php#L6871C25-L6892

$confirmations = \GFFormsModel::get_form_confirmations( $form_id );

@rvdsteege What do you think?

Internal HelpScout ticket: https://secure.helpscout.net/conversation/2124019067/25053?folderId=1425710

Payment feed subscription setting 'Frequency' confusing?

Schermafbeelding 2020-10-02 om 14 09 35

With the new subscription phases in https://github.com/wp-pay/core/ the 'Frequency' is confusing. I think we should rename it 'Total Periods':

https://github.com/wp-pay/core/blob/c31795ca9def574b454947715f5eff0af5eb8068/src/Subscriptions/SubscriptionPhase.php#L67-L82

Also need to check the working of this description:

The number of frequency times excludes the first payment.

https://github.com/wp-pay-extensions/gravityforms/blob/a2d378fb176495d93c25a8ed4352f1fe011fe0fb/views/html-admin-feed-settings.php#L593-L644

Gravity Forms empty amount (`0`) » No payment » Action `gform_ideal_fulfillment` hook

As mentioned in pronamic/wp-pronamic-pay#188 (comment) Gravity Forms does not handle empty payment amounts (0) by default:

I checked how Gravity Forms handles an empty amount (0) by default:
https://github.com/wp-premium/gravityforms/blob/2.4.20/includes/addon/class-gf-payment-addon.php#L663-L700

By default a payment amount is valid when the amount is greater than zero. Currently we bypass this check and also start a payment for an empty amount (0). For a creditcard subscription payment via Mollie this is desired.

It is possible to initiate a payment via conditional logic only if the amount is greater than 0. However, for this you need to add a hidden number field with a calculation that can be used within the conditional logic.

Schermafbeelding 2021-08-27 om 15 54 18 Schermafbeelding 2021-08-27 om 15 53 40

We could advice users to setup their forms this way if they don't want to trigger the payment feed for payments of € 0.

But this change will likely result in some support tickets.

In Pronamic Pay we have created payments with a 0 amount that were automatically marked as successful. This allowed developers to use the gform_ideal_fulfillment action hook for Gravity Forms entries with amount (> 0), but also for entries without amount (= 0). We will probably change this in the future. Developers using gform_ideal_fulfillment action hook may need to take action. In this issue we can discuss possible future-proof solutions. Some preparations have already been made:

@deprecated Fulfillment of payments without amount (free) will be removed in the future. Use `gform_post_payment_completed` action instead.

The gform_post_payment_completed action will probably not run for entries with an empty amount.

Developers could use the gform_post_payment_completed action for entries where amount > 0 and gform_entry_created for entries where amount = 0.

Perhaps the best solution is to develop a https://docs.gravityforms.com/gffeedaddon/ which executes the code from the gform_ideal_fulfillment action.

Fatal error due to duplicate field registration

When the extension is loaded multiple times, a fatal error occurs:

Fatal error: Uncaught Exception: Field type already registered: ideal_issuer_drop_down in /wp-content/plugins/gravityforms/includes/fields/class-gf-fields.php on line 24

Problem with gravity forms: Missing argument 3 for gf_apply_filters()

Hi. I have a page that has been running with Gravity forms for a couple of years without issues. Now, yesterday I upgraded Wordpress, and now, when I try to download the Excel file, I get these errors:
Warning: Missing argument 3 for gf_apply_filters(), called in /homepages/33/d379022791/htdocs/clickandbuilds/infoclustering/wp-content/plugins/gf-entries-in-excel/src/Repository/FormsRepository.php on line 61 and defined in /homepages/33/d379022791/htdocs/clickandbuilds/infoclustering/wp-content/plugins/Gravityforms.v1.9.4.4/gravityforms.php on line 3131

This appears in the order by area.

But in the end of the page I get this error:
Fatal error: Call to protected method GFAddOn::get_plugin_settings() from context 'GFExcel\Repository\FieldsRepository' in /homepages/33/d379022791/htdocs/clickandbuilds/infoclustering/wp-content/plugins/gf-entries-in-excel/src/Repository/FieldsRepository.php on line 150

I've tried to disable, uninstall and reinstall the plugin, but still found no changes. Any help here? I don't know how to proceed.

Thanks in advance!

Recurring amount dropdown input listing field inputs as options

Since dac3dd6 options of the Recurring amount settings field are added through a new helper function _pronamic_pay_gravityforms_dropdown_input( $form, $args ). This function adds all inputs of a field as separate options:

Scherm­afbeelding 2023-02-15 om 16 51 52

Previously, only the fields could be selected and not the individual inputs.

If the option of an 'input' instead of a 'field' is selected, the subscription payment lines will not be populated in:

// Subscription line.
if (
GravityForms::SUBSCRIPTION_AMOUNT_FIELD === $this->feed->subscription_amount_type
&&
$key === $this->feed->subscription_amount_field
) {
foreach ( $product_lines as $line ) {
$subscription_lines->add_line( $line );
}
}

As this will result in an amount of 0.00, no subscription is created.

Issuer field not handling errors in payment methods

An exception in gateway payment methods can result in fatal errors within the issuers field. For example, with invalid account credentials, the following error can occur on the payment feed page:

Fatal error: Uncaught Exception: application access is denied, Authorization header value is invalid in /wp-content/plugins/pronamic-ideal/repositories/pronamic/wp-pronamic-pay-buckaroo/src/Gateway.php on line 728

Add support for "GP Unique ID" (`gp-unique-id`) plugin (perk)

If I search for "GP Unique ID" within our support system, I get 21 results. Should we consider adding support for the "GP Unique ID" plugin (perk)? Now sometimes we throw the following gist over the fence: https://gist.github.com/rvdsteege/6b0afe10f81b1bc99d335ff484206fa9. According to the FAQ at https://gravitywiz.com/documentation/gravity-forms-unique-id/#can-unique-id-generation-be-delayed-until-after-payment-is-approved I would expect it to be already should work.

Can Unique ID generation be delayed until after payment is approved?

If your form uses a first-party payment add-on (or a third-party payment add-on compatible with the Gravity Forms Payment Add-On Framework) then the unique ID can be generated once payment has been captured. This delay is enabled via the gpui_wait_for_payment filter.

Based on this FAQ you get the impression that it should work automatically, or should a programmer still hook into the gpui_wait_for_payment filter with custom code? A user of the Pronamic Pay plugin may inquire with Gravity Wiz how this works, see following ticket:

Internal HelpScout ticket: https://secure.helpscout.net/conversation/2457184606/26664/

I did see that the "GP Unique ID" plugin is equipped with specific code for the Gravity Forms PayPal add-on:
https://github.com/pronamic/gp-unique-id/blob/main/includes/class-gf-field-unique-id.php#L43-L45

The "GP Unique ID" plugin also doesn't seem to work with Gravity Forms feeds, but with a "Unique ID" field, which is probably why it doesn't work as I would expect.


localhost_8888_wp-admin_admin php_page=gf_edit_forms id=1


localhost_8888_wp-admin_admin-php_page-gf_edit_forms-view-settings-subview-pronamic_pay-id-1-fid-0

CC @rvdsteege

Add support for trial period

From customer:

Ik zou graag dat mijn klanten een 7 dagen proefperiode geven tegen gereduceerd tarief, waarna na die 7 dagen een incasso plaatsvindt tegen het gebruikelijke tarief.

Ik zie echter alleen de mogelijkheid om te kiezen voor een vaste datum of na een vaste periode, zie bijlage. Na een vaste periode betekent dat de incasso altijd plaatsvindt na bv een week of maand.

Internal Help Scout ticket: https://secure.helpscout.net/conversation/2100532305/24939

No merge tag selectors in payment feed settings

The classes merge-tag-support mt-position-right mt-hide_all_fields for the merge tag selector are not working anymore in the order ID and transaction description settings in the payment feed.

<input id="_pronamic_pay_gf_order_id" name="_pronamic_pay_gf_order_id" value="<?php echo esc_attr( $order_id ); ?>" placeholder="{entry_id}" type="text" class="input-text regular-input merge-tag-support mt-position-right mt-hide_all_fields" />

<input id="_pronamic_pay_gf_transaction_description" name="_pronamic_pay_gf_transaction_description" value="<?php echo esc_attr( $transaction_description ); ?>" placeholder="{entry_id}" type="text" class="regular-text merge-tag-support mt-position-right mt-hide_all_fields" />

Scherm­afbeelding 2022-10-18 om 10 19 30

Delaying notifications possible in multiple ways

Notifications can be delayed until the payment has been completed successfully. However, this can currently be done in multiple ways:

  1. via the Event setting of a notification
  2. via the payment feed settings.

The event also makes it possible to send notifications for other events, such as a failed payment. I'd suggest removing the original functionality to delay notifications through the payment feed settings in favour of the notification event.

Fatal error: Uncaught Error: Call to a member function get_next_payment_date() on null

Fatal error: Uncaught Error: Call to a member function get_next_payment_date() on null in /var/www/592efc63-0469-4a44-8b7c-ec7a67f7d09d/public_html/wp-content/plugins/pronamic-pay-with-mollie-for-gravity-forms/packages/wp-pay-extensions/gravityforms/src/Extension.php:1210

Stack trace:

#0 /var/www/592efc63-0469-4a44-8b7c-ec7a67f7d09d/public_html/wp-includes/class-wp-hook.php(310): Pronamic\WordPress\Pay\Extensions\GravityForms\Extension->replace_merge_tags('<p>Hallo, test ...', Array, Array, false, false, true, 'html')
#1 /var/www/592efc63-0469-4a44-8b7c-ec7a67f7d09d/public_html/wp-includes/plugin.php(205): WP_Hook->apply_filters('<p>Hallo, test ...', Array)
#2 /var/www/592efc63-0469-4a44-8b7c-ec7a67f7d09d/public_html/wp-content/plugins/gravityforms/common.php(1568): apply_filters('gform_replace_m...', '<p>Hallo, test ...', Array, Array, false, false, true, 'html')
#3 /var/www/592efc63-0469-4a44-8b7c-ec7a67f7d09d/public_html/wp-content/plugins/gravityforms/common.php(1294): GFCommon::replace_variables_prepopulate('<p>Hallo in /var/www/592efc63-0469-4a44-8b7c-ec7a67f7d09d/public_html/wp-content/plugins/pronamic-pay-with-mollie-for-gravity-forms/packages/wp-pay-extensions/gravityforms/src/Extension.php on line 1210

Internal HelpScout ticket: https://secure.helpscout.net/conversation/2400023938/26349?folderId=1425710

/**
* Replace merge tags
*
* @param string $text The text in which merge tags are being processed.
* @param array|false $form The Form object if available or false.
* @param array|false $entry The Entry object if available or false.
* @param boolean $url_encode Indicates if the urlencode function should be applied.
* @param boolean $esc_html Indicates if the esc_html function should be applied.
* @param boolean $nl2br Indicates if the nl2br function should be applied.
* @param string $format The format requested for the location the merge is being used. Possible values: html, text or url.
*
* @return string
*/
public function replace_merge_tags( $text, $form, $entry, $url_encode, $esc_html, $nl2br, $format ) {
$subscription_amount = '';
$subscription_cancel_url = '';
$subscription_renew_url = '';
$subscription_renewal_date = '';
$subscription_id = gform_get_meta( rgar( $entry, 'id' ), 'pronamic_subscription_id' );
if ( ! empty( $subscription_id ) ) {
$subscription = get_pronamic_subscription( $subscription_id );
$next_payment_date = $subscription->get_next_payment_date();
if ( $next_payment_date ) {
$subscription_renewal_date = date_i18n( get_option( 'date_format' ), $next_payment_date->getTimestamp() );
}
// Get amount from current phase.
$current_phase = $subscription->get_current_phase();
$subscription_amount = null;
if ( null !== $current_phase ) {
$subscription_amount = $current_phase->get_amount()->format_i18n();
}
$subscription_cancel_url = $subscription->get_cancel_url();
$subscription_renew_url = $subscription->get_renewal_url();
}

No check if $subscription is not null.

$subscription = get_pronamic_subscription( $subscription_id ); 
  
$next_payment_date = $subscription->get_next_payment_date(); 

Error on conditional logic checkbox toggle in payment feed

When the checkbox for conditional logic is checked in the payment feed settings (Advanced tab), the following error occurs:

TypeError: undefined is not an object (evaluating 'e.conditionalLogic.actionType')

This results in the conditional logic options not showing up.

GravityForms v2.5.1
Pronamic Pay v6.7.1
WordPress v5.7.2

No other plugins are active.

Screenshot 2021-05-17 at 13 52 34

Merge tag for subscription ID

From customer:

For subscriptions, a merge tag {pronamic_subscription_payment_id} is available for notifications that corresponds to the ID of the payment (PAYMENTS in back-end).

The corresponding subscription does not necessarily have the same ID. Does there also exist a merge tag for this (eg {pronamic_subscription_id})? I can't find them in the list of available merge tags.

Apparently, there is no {pronamic_subscription_id} merge tag yet for use in notifications.

Internal Help Scout ticket: https://secure.helpscout.net/conversation/2252404810/25683/

PHP Fatal error processing creditcard field

Reported by a user:

We experience a fatal error with the Pronamic Pay plugin.
Our site is ●●●●●●.nl and is running PHP 8.1 and we use Pronamic Pay in combination with Gravity Forms.

The error we receive is the following:

[12-Jan-2023 12:08:39 UTC] PHP Fatal error: Uncaught TypeError: array_shift(): Argument #1 ($array) must be of type array, null given in /home/●●●●●●●●●●/domains/●●●●●●.nl/public_html/wp-content/plugins/pronamic-ideal/vendor/wp-pay-extensions/gravityforms/src/PaymentData.php:211

Internal HelpScout ticket: https://secure.helpscout.net/conversation/2122885365/25045?folderId=1425710

/**
* Get credit card.
*
* @return CreditCard|null
*/
public function get_credit_card(): ?CreditCard {
$credit_card = null;
$credit_card_fields = GFCommon::get_fields_by_type( $this->form, [ 'creditcard' ] );
$credit_card_field = array_shift( $credit_card_fields );
if ( $credit_card_field ) {
// phpcs:disable WordPress.Security.NonceVerification.Missing
$credit_card = new CreditCard();
// Number.
$variable_name = sprintf( 'input_%s_1', $credit_card_field['id'] );
$number = \array_key_exists( $variable_name, $_POST ) ? \sanitize_text_field( \wp_unslash( $_POST[ $variable_name ] ) ) : null;
$credit_card->set_number( $number );
// Expiration date.
$variable_name = sprintf( 'input_%s_2', $credit_card_field['id'] );
$expiration_date = filter_input( INPUT_POST, $variable_name, FILTER_VALIDATE_INT, FILTER_FORCE_ARRAY );
$month = array_shift( $expiration_date );
$year = array_shift( $expiration_date );
$credit_card->set_expiration_month( $month );
$credit_card->set_expiration_year( $year );
// Security code.
$variable_name = sprintf( 'input_%s_3', $credit_card_field['id'] );
$security_code = \array_key_exists( $variable_name, $_POST ) ? \sanitize_text_field( \wp_unslash( $_POST[ $variable_name ] ) ) : null;
$credit_card->set_security_code( $security_code );
// Name.
$variable_name = sprintf( 'input_%s_5', $credit_card_field['id'] );
$name = \array_key_exists( $variable_name, $_POST ) ? \sanitize_text_field( \wp_unslash( $_POST[ $variable_name ] ) ) : null;
$credit_card->set_name( $name );
// phpcs:enable WordPress.Security.NonceVerification.Missing
}
return $credit_card;
}

It is rare that a user uses the credit card field, many payment providers do not support this. It's also disabled by default in Gravity Forms plugin, we activate it for i think Ingenico/Ogone DirectLink integration.

https://github.com/search?q=repo%3Apronamic%2Fgravityforms%20gform_enable_credit_card_field&type=code

Nevertheless, we can improve the handling of the creditcard form input.

Warning: Missing argument 3 for gf_apply_filters()

I'm seeing the following error in Gravity Forms version 1.9.14:

Warning: Missing argument 3 for gf_apply_filters(), called in /public_html/wp-content/plugins/pronamic-ideal/vendor/wp-pay-extensions/gravityforms/views/html-admin-feed-settings.php on line 745 and defined in /public_html/wp-content/plugins/gravityforms/gravityforms.php on line 3279

https://github.com/wp-pay-extensions/gravityforms/blob/1.6.2/views/html-admin-feed-settings.php#L745

https://github.com/wp-premium/gravityforms/blob/1.9.18/gravityforms.php#L3314-L3347

It looks like the gf_apply_filters was changed in version 1.9.15:
https://github.com/wp-premium/gravityforms/blob/2.0.1/change_log.txt#L366

Before: https://github.com/wp-premium/gravityforms/blob/1.9.13.26/gravityforms.php#L3266-L3288
After: https://github.com/wp-premium/gravityforms/blob/1.9.15/gravityforms.php#L3309-L3342

@rvdsteege is the following line required?

$js_form = gf_apply_filters( array( 'gform_admin_pre_render', $form_id ), $js_form );

Payment status confirmation visibility below the fold

The payment status confirmation is not visible if a Gravity Forms form is rendered below the fold. This issue was reported by a user (in Dutch):

Nog een andere vraag: ik toon via jullie plugin andere bedankberichten afhankelijk van de status.
Alleen lukt het me niet om na terugkomen betaling naar het formulier/bedankbericht in de pagina te scrollen.
https://docs.gravityforms.com/gform_confirmation_anchor/

Een bedankpagina kan natuurlijk ook, maar dat is in dit geval niet handig, het is gebruiksvriendelijker om op de cursuspagina te blijven waar je net het formulier hebt ingevuld.

https://secure.helpscout.net/conversation/2254350579/25696?folderId=1425710


https://github.com/pronamic/gravityforms/blob/1cfc9915415b88c626fa6ffa8e8501e37d75b421/form_display.php#L4719-L4749


Scherm­afbeelding 2023-05-31 om 10 56 46
Scherm­afbeelding 2023-05-31 om 10 58 45
Scherm­afbeelding 2023-05-31 om 10 58 51

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.