Zapier Change Log

Zapier Change Log

4.1.14.1 | 2021-05-044.0 | 2021-02-233.3 | 2020-05-203.2 | 2019-09-253.1 | 2018-10-223.0 | 2018-05-072.1.7 | 2018-03-202.1.6 | 2018-03-162.1.5 | 2018-01-312.1.4 | 2017-10-022.1.3 | 2017-05-092.1.2 | 2017-04-262.1.1 | 2017-03-122.1 | 2017-01-052.0 | 2016-08-311.9 | 2016-07-011.8 | 2015-08-181.7 | 2015-04-201.6 | 2015-03-301.4 | 2014-02-031.1 | 2013-08-14

4.1.1

Updated the gform_zapier_request_body filter to be called within GF_Zapier::get_body so that it can be applied both when processing feeds and responding to API requests.

4.1 | 2021-05-04

Added support for displaying real entry data for the selected form when configuring a Zap.
Added support for using admin labels instead of front end labels for the entry data returned when configuring a Zap.
Fixed an issue where API instructions are not visible on the add-on settings page when using Gravity Forms 2.5.
Fixed an issue where feeds get deleted and recreated when the Zap is deactivated and reactivated.
Updated the Use Admin Labels setting on the feed configuration page to be disabled. The setting is now configured on zapier.com.
Removed the add new button from the feeds list page.

4.0 | 2021-02-23

Added support for the Gravity Forms Integration App on Zapier v2.0.
Added an add-on setting to toggle the display of Zapier Feeds in the form settings. On sites with legacy feeds created for the Zapier v1.0 integration, this setting is enabled by default, displaying all the feeds. On sites with no legacy feeds, this setting is off by default so the feeds will not be displayed.
Fixed compatibility issues in PHP 8.
Updated the feed settings to restrict editing of feeds created in the Zapier v2.0 integration to Admin Labels and Conditional Logic.
Updated the add-on to use the Gravity Forms Add-On Framework.

3.3 | 2020-05-20

Added translations for Hebrew, Hindi, Japanese, and Turkish.
Fixed an issue where the entry and payment dates were being formatted before being sent to Zapier.

3.2 | 2019-09-25

Added support for triggering Zapier feeds after a successful delayed payment (we originally did it only for PayPal). This fixed an issue where feeds are triggered before payments received when using Stripe Checkout.
Added gform_zapier_request_body filter to allow the request body sent to Zapier to be modified.
Fixed notice in gform_zapier_use_stored_body filter processing.
Fixed the shipping line item being included in the request body when the shipping field is hidden by conditional logic.
Fixed PHP 7.3 warnings when the feed is populating the request body for a form with multiple product fields.

3.1 | 2018-10-22

Added the gform_zapier_products filter.
Updated data sent to Zapier to include extra entry properties and the form ID.
Fixed missing product fields.

3.0 | 2018-05-07

Added line item support for list field and product fields.

2.1.7 | 2018-03-20

Fixed issue when trying to get random choices on an empty array.

2.1.6 | 2018-03-16

Fixed an issue where feeds could, in some situations, be processed following PayPal payment when not selected as delayed on the PayPal feed.

2.1.5 | 2018-01-31

Added GPL to plugin header.
Updated Plugin URI and Author URI to use https.

2.1.4 | 2017-10-02

Fixed feeds not running when the form is embedded in an admin page or a front-end page via an Ajax request.

2.1.3 | 2017-05-09

Added security enhacements.
Fixed code styles.

2.1.2 | 2017-04-26

Added support for the Gravity Forms 2.2+ System Status page.

2.1.1 | 2017-03-12

Added the gform_zapier_use_stored_body filter.

2.1 | 2017-01-05

Added support for the gform_is_delayed_pre_process_feed filter.
Updated strings for translations.
Updated Zapier Feeds table to be responsive.
Fixed issue where Zapier did not appear alphabetical in the Settings list.

2.0 | 2016-08-31

Added the gform_zapier_sample_field_value filter for overriding the sample data sent when configuring the zap or updating the form.
Updated to format entry date.
Fixed an issue with the 'Use Admin Labels' setting on new zaps appearing to reset when saving a valid zap.
Fixed PHP warning which could occur if the multiselect field only had one choice configured.

1.9 | 2016-07-01

Added support for sending the field admin label to Zapier, if available.
Added GFZapier::process_feed( $feed, $entry, $form ) for processing a single feed.
Updated to send the form title, entry id, entry date, user ip and source url.
Updated minimum Gravity Forms version to 1.9.10.
Updated to send dummy values to Zapier when saving the feed/form instead of empty values.
Updated to skip display only fields when preparing the zap body array.
Updated to use the field title when preparing the zap body if the field doesn't have a label.
Updated minimum Gravity Forms version to 1.9.
Updated to support Gravity Forms 2.0 changes to the PayPal Standard integration.
Fixed an issue where field values in the body array would be overridden if another field used the same label.
Fixed PHP notices on the edit feed page related to the conditional logic field and value settings.
Fixed an issue with the feed conditional logic value drop down for choice based fields.
Fixed GF_Field array access/object notation notice with Gravity Forms 2.0.
Fixed an issue with the PayPal Standard integration.

1.8 | 2015-08-18

Added the gform_zapier_feed_conditional_logic filter enabling the feed conditional logic rule to be overridden during submission, allowing multiple rules to be defined.

1.7 | 2015-04-20

Added text domain/path to header.
Fixed an issue with multi-input fields and the dummy data sent to Zapier when first configuring a zap or updating the form.
Fixed a low severity security vulnerability in the admin area which could be exploited by authenticated users with form administration permissions.
Fixed an issue with conditional logic evaluation when processing feeds delayed by the PayPal Standard add-on.

1.6 | 2015-03-30

Added Spanish (es_ES) translation.
Added ability to delay sending to Zapier until a payment is received if PayPal Standard is also being used.
Updated POT file.
Updated to not send entries marked as spam to Zapier.
Fixed an issue with the zap body being prepared even if the form does not have a feed.
Fixed a warning for multi-row Likert fields when the zap body is being prepared.
Fixed a warning related to how Gravity Forms 1.9 handles inputs for fields such Email, Date and Time.
Fixed notice thrown when using extract in certain PHP versions.
Fixed the functions used by the mwp_premium_update_notification and mwp_premium_perform_update hooks so that the new_version element in the array returns Zapier's version instead of Gravity Forms.
Fixed strict notice thrown when viewing the list of Zaps for a form.

1.4 | 2014-02-03

Added POT file.
Added entry meta to field list.
Added the gform_zapier_field_value hook so the value can be modified before sending to Zapier.
Fixed issue where the anti-spam honeypot being active was causing data to not be passed to Zapier.
Fixed notices.

1.1 | 2013-08-14

Updated how multi-input fields (checkboxes, name, address) are handled so that users can map to the "parent" field (in addition to being able to map to the individual inputs).

Zapier Feed Meta

Zapier Feed Meta

IntroductionUsageProperties

Introduction
The Feed Object meta for the Zapier add-on is an associative array containing the properties which determine how the add-on should process the form submission.
$feed['meta'] = array(
'feedName' => 'Your Feed Name',
'feed_condition_conditional_logic' => true,
'feed_condition_conditional_logic_object' => array(
'conditionalLogic' => array(),
),
);

Usage
We recommend accessing the $feed meta using the rgar() or rgars() functions, e.g.:
$conditional_logic_enabled = rgars( $feed, 'meta/feed_condition_conditional_logic' );

Properties

feedName string
The feed name which appears on the add-ons feeds tab.

zapURL string
The Zapier hosted URL where the entry data will be sent when the feed is processed.

adminLabels string
Indicates if the field admin labels should be sent to Zapier instead of the main labels, if configured. Possible values: 1 or 0.

feed_condition_conditional_logic boolean
Is the feed condition (conditional logic) setting enabled. Default is false.

feed_condition_conditional_logic_object array
An associative array containing the conditional logic rules. See the Conditional Logic Object for more details.

legacy boolean
Indicates if the feed was migrated from the non-framework version of the add-on (pre 4.0).

legacy_id int
The feed ID when it was stored in the legacy rg_zapier table.

Zoho CRM Change Log

Zoho CRM Change Log

2.0 | 2021-10-271.13 | 2021-05-051.12 | 2020-09-231.11 | 2020-07-141.101.9 | 2020-05-141.8 | 2019-08-081.7 | 2019-04-251.6 | 2019-04-151.5 | 2018-03-301.4 | 2017-01-051.3 | 2016-08-311.2 | 2016-02-101.1 | 2015-09-141.0 | 2015-07-30

2.0 | 2021-10-27

Fixed a fatal error that occurs after refreshing authentication tokens with the Zoho API.

1.13 | 2021-05-05

Added a menu icon for Gravity Forms 2.5.
Fixed an issue where the reauthentication notice appears for users who have never authenticated before.
Fixed compatibility issues with PHP 8.
Fixed an issue where authentication may not complete after attempting a connection with Zoho.

1.12 | 2020-09-23

Added support for Gravity Forms 2.5.
Fixed an issue where the add-on would attempt to use deactivated module layouts.

1.11 | 2020-07-14

Added security enhancements.
Fixed an infinite loop which occurred when the record insert error returned by Zoho CRM is missing the api_name.

1.10

Added security enhancements.

1.9 | 2020-05-14

Added translations for Hebrew, Hindi, Japanese, and Turkish.
Added support for the Australia (AU) data center.
Added license key to authorization url.
Added the gform_zohocrm_record filter to modify the record arguments before they are sent to Zoho CRM.
Fixed the width of the Feed Name setting on the feed configuration page.
Fixed an issue where PHP notices thrown after gform_zohocrm_record introduced.
Fixed an issue where PHP notices thrown when the contact or lead has no Email but doesn't allow duplicate in the settings.
Updated a few labels on the settings page related to connecting and disconnecting the add-on with Zoho CRM.

1.8 | 2019-08-08

Added security enhancements.
Added gform_zohocrm_post_create_lead, gform_zohocrm_post_create_contact and gform_zohocrm_post_create_task, to allow custom actions to be performed after creating a lead, contact or task.
Updated Authenticate With options. After switching to OAuth Authentication, remove the other old options.
Updated the feed configuration page to support mapping checkbox (boolean) type Zoho fields.
Fixed an issue when a Zoho account used a non-English language, some module fields couldn't be updated with REST API.
Fixed an issue when Contacts, Leads or Tasks module is missing, REST API couldn't work at all.
Fixed an issue where Blueprints weren't triggered when adding Contacts/Leads in Workflow Mode with v2 API.
Fixed an issue where fields (especially Last Name and Email fields) missing from the feed settings for non-English Zoho accounts users.
Fixed an issue where values mapped to checkbox type Zoho fields would not be passed to the API.
Fixed the "Field cannot be found at Zoho CRM" issue with v2 API.

1.7 | 2019-04-25

Added support for multiple data center when authenticating with v2 API.

1.6 | 2019-04-15

Added supports for Zoho CRM v2 REST API.
Added supports for Approval Process if "Approval Mode" is checked in feed settings, when authenticated with REST API.
Fixed feed settings not saving when selecting a choice containing an ampersand.
Fixed the setting for delaying feed processing until after payment not being added to the PayPal Standard feed configuration page.
Fixed issue when using special characters to create contacts.

1.5 | 2018-03-30

Added security enhancements.
Added logging statements.
Added GPL to plugin header.
Updated Plugin URI and Author URI to use https.
Updated module field map to allow for custom fields to be used.
Updated strings for translations.
Fixed a PHP fatal error which can occur on the feeds page if the Zoho account user does not have permission to access the contacts or leads modules.
Fixed the settings page not showing an error when the maximum number of allowed auth tokens has been exceeded.
Fixed an issue with the response code logging statement.
Fixed an issue with a few strings using the wrong text domain for translations.
Fixed an issue which prevented files being sent to Zoho.
Fixed owner not being set on the created contact/lead.
Fixed an issue retrieving the ID of the created contact from the API response which also caused contact task creation to fail.

1.4 | 2017-01-05

Updated contact, lead and task creation error reporting.
Fixed module fields not importing in certain scenarios.
Fixed strings for translations.

1.3 | 2016-08-31

Added hook to allow API URL to be changed.
Updated not to force standard fields to be required. The required state of the field on the feed will match the required state of the field in the Zoho account.
Fixed issue where checking for duplicate leads did not correctly update duplicate leads.
Fixed an issue where Zoho was unable to parse the XML data if the value contained special characters.
Fixed an issue with the request failed message if a WP_Error occurs.

1.2 | 2016-02-10

Added support for configuring a task description.
Added feed duplication support.
Added support for delaying feed processing until payment by PayPal Standard is successfully completed.
Added some additional logging.
Updated the task due date setting to support merge tags. The merge tag value must be numeric for the due date to be set.
Updated to display an error for the password field on the settings page if Zoho returns a WEB_LOGIN_REQUIRED error.
Fixed an issue with the request failed message if a WP_Error occurs.
Fixed an issue with the text domain for some of the translatable strings.
Fixed an issue with how multiple choices in multi select and checkbox type field values are separated when being sent to Zoho.
Fixed module field choices return "Array" as an option.
Fixed fatal error that occurs during 1.1.5 upgrade routine.
Fixed contacts and leads not being created when Zoho CRM account language is not set to English.
Fixed module field loading to support foreign languages.

1.1 | 2015-09-14

Added authentication option for third party services (Google Apps, Facebook, Yahoo).
Added options to allow for duplicate contacts and feeds.
Added option to manually clear custom fields cache.
Changed custom fields cache from 24 hours to 12 hours.
Fixed an issue where only some of the uploaded files were attached.
Updated available field types for mapping to the contact/lead email.

1.0 | 2015-07-30

It's all new!

Zoho CRM Feed Meta

Zoho CRM Feed Meta

IntroductionUsagePropertiesContact PropertiesLead PropertiesTask PropertiesCustom Field Properties

Introduction
The Feed Object meta for the Zoho CRM add-on is an associative array containing the properties which determine how the add-on should process the form submission.
12345678$feed['meta'] = array(    'feedName'                                => 'Zoho CRM Feed 1',    'message'                                 => '',    'feed_condition_conditional_logic'        => true,    'feed_condition_conditional_logic_object' => array(        'conditionalLogic' => array(),    ),);
Usage
We recommend accessing the $feed meta using the rgar() or rgars() functions, e.g.:
1$conditional_logic_enabled = rgars( $feed, 'meta/feed_condition_conditional_logic' );

Properties

feedName string
The feed name which appears on the add-ons feeds tab.

action string
The action which will occur when this feed is processed. Possible values: contact or lead.

feed_condition_conditional_logic boolean
Is the feed condition (conditional logic) setting enabled. Default is false.

feed_condition_conditional_logic_object array
An associative array containing the conditional logic rules. See the Conditional Logic Object for more details.

Contact Properties
The following properties are only applicable when the action is set to contact.

contactStandardFields_Email string
The ID of the form field containing the contact』s email.

contactStandardFields_First_Name string
The ID of the form field containing the contact』s first name.

contactStandardFields_Last_Name string
The ID of the form field containing the contact』s last name.

contactCustomFields array
A multidimensional array containing the contact custom fields. See Custom Field Properties.

contactOwner string
The Zoho CRM user ID to be assigned to this contact.

contactLeadSource string
The source from which the contact is created. Default values: Advertisement, Cold Call, Employee Referral, External Referral, OnlineStore, Partner, Public Relations, Sales Mail Alias, Seminar Partner, Seminar-Internal, Trade Show, Web Download, Web Research, and Chat.

contactDescription string
The contact description. Merge tags supported.

contactAttachments array
1234array(    '10' => true,    '11' => false,);
An array of file upload fields. The field ID is the key with a boolean value indicating if the files for that field should be attached.

contactApprovalMode boolean
Is approval mode enabled? Default is false.

contactWorkflowMode boolean
Should workflow rules be triggered when this contact is added? Default is false.

contactEmailOptOut boolean
Remove contact from your mailing list so that they will not receive any emails from your Zoho CRM account. Default is false.

contactUpdate boolean
Update contact if existing? Default is false.

Lead Properties
The following properties are only applicable when the action is set to lead.

leadStandardFields_Company string
The ID of the form field containing the lead』s company.

leadStandardFields_Email string
The ID of the form field containing the lead』s email.

leadStandardFields_First_Name string
The ID of the form field containing the lead』s first name.

leadStandardFields_Last_Name string
The ID of the form field containing the lead』s last name.

leadCustomFields array
A multidimensional array containing the lead custom fields. See Custom Field Properties.

leadOwner string
The Zoho CRM user ID to be assigned to this lead.

leadRating string
The lead rating. Default values: Acquired, Active, Market Failed, Project Cancelled, and ShutDown.

leadSource string
The source from which the lead is generated. Default values: Advertisement, Cold Call, Employee Referral, External Referral, OnlineStore, Partner, Public Relations, Sales Mail Alias, Seminar Partner, Seminar-Internal, Trade Show, Web Download, Web Research, and Chat.

leadStatus string
The lead status. Default values: Attempted to Contact, Contact in Future, Contacted, Junk Lead, Lost Lead, Not Contacted, and Pre Qualified.

leadDescription string
The lead description. Merge tags supported.

leadAttachments array
1234array(    '10' => true,    '11' => false,);
An array of file upload fields. The field ID is the key with a boolean value indicating if the files for that field should be attached.

leadApprovalMode boolean
Is approval mode enabled? Default is false.

leadWorkflowMode boolean
Should workflow rules be triggered when this contact is added? Default is false.

leadEmailOptOut boolean
Remove lead from your mailing list so that they will not receive any emails from your Zoho CRM account. Default is false.

leadUpdate boolean
Update lead if existing? Default is false.

Task Properties

createTask boolean
Should a task be created? Default is false.

taskSubject string
The task subject. Merge tags supported.

taskDueDate integer
The number of days until the task is due.

taskOwner string
The Zoho CRM user ID to be assigned to this contact.

taskStatus string
The task status. Default values: Not Started, Deferred, In Progress, Completed, and Waiting on someone else.

Custom Field Properties
1234array(    'key'   => 'title',    'value' => '3',)
Each custom field is an associative array containing the following properties:

key string
The field name. Possible values: the Zoho field name or gf_custom.

Zoho CRM Contacts Module Fields
Zoho CRM Leads Module Fields
Zoho CRM Tasks Module Fields

value string
The ID of the form field or entry meta item containing the value for this custom field.

custom_key string
The custom key. Only used when the custom field key is set to gf_custom.

Zoho CRM Potential Data Errors

Zoho CRM Potential Data Errors

SummaryError NotesData FormatData SizeContact/Lead Already Exists

Summary
When data is sent to Zoho CRM for processing, errors may occur. Some errors are related to the data format or size. If an error does occur, the error message will be saved into a note on the entry. Data format or size errors do not prevent the contact/lead from being created in Zoho CRM. The bad data is simply not saved with the contact/lead. A few errors that may occur are listed below.
Error Notes
Data Format
If the data sent is in the wrong format, such as including the @ with the Twitter handle, a message similar to below will be saved as an entry note.

Data Size
Some fields have set field sizes, and if the data sent exceeds the limit, a message like below is sent. To prevent this issue, a Maximum Characters size limit may be set for the field in the Form Editor.

Contact/Lead Already Exists
When creating a feed, there is the setting Update Contact/Lead if contact/lead already exists for email address. If this setting is not checked, the contact/lead is not updated and a message like below is added as a note on the entry.

Zoho CRM European Hosted Accounts

Zoho CRM European Hosted Accounts

Sample IssuesIssue Sample 1Issue Sample 2

As of Zoho CRM version 1.7, it is no longer necessary to use the filters below if your account is hosted in the EU.

Only follow the directions below if you are using a version previous to Zoho CRM Add-On 1.7. It is highly recommended that the latest version of Zoho CRM is downloaded, because along with the changes to handle accounts hosted in the EU, the update uses Zoho CRM』s new API Version 2.0. API Version 1.0 is deprecated and its end-of-life date is 12/31/2019.

If your Zoho CRM account is hosted in the EU you will need to configure the add-on to use different endpoints by adding some code snippets to your theme functions.php file or a custom functionality plugin.
1234567add_filter( 'gform_zoho_accounts_api_url', function() {return 'https://accounts.zoho.eu';} ); add_filter( 'gform_zoho_api_url', function() {return 'https://crm.zoho.eu/crm/private/';} );
Sample Issues
Issue Sample 1
Hi, I am trying to Authenticate the Zoho CRM addon and using my Zoho login details. Everytime I save my email and password, it says 「the user does not exist.」 Even when I try to use the Authentication token option, it has a red 『x』 next to the field and doesn』t register the token. This is not allowing me to create a feed and keeps bringing me back to the settings.
Issue Sample 2
I』m experiencing some trouble with setting up the Zoho CRM add-on. I』ve downloaded and activated the add-on one site within a multisite. When I enter the credentials for Zoho I get an error that the user doesn』t exist. I』m certain the user does exist in Zoho, because I』m able to login to Zoho with this user. I』ve enabled debugging and debugged the code locally, but I keep getting this response. I』ve updated the Gravity Forms plugin in the local environment, but this didn』t help.

Using the Gravity Forms 「gform_validation」 Hook

Using the Gravity Forms 「gform_validation」 Hook

The PremiseGetting StartedThe Validation ResultGetting the Current PageLooping Through the FieldsFind Field by CSS ClassGetting the Field Page NumberIs the Field Hidden?Skip Field If…Retrieve & Validate the Submitted ValueCheck If the Field Value is ValidUh, oh! It Failed Validation!Assign the Modified Form Back to the Validation ResultReturn the Validation Result

The Premise
Let』s imagine that we』re building some sort of car related website. On this fictional website we have a Gravity Form that allows you to register cars you own and part of that registration is a field for the VIN number of the vehicle. So how do we ensure that the user is entering a valid VIN number? Yup. The gform_validation hook.
Getting Started
The first step is to tie our custom validation function to the gform_validation filter.
// 1 - Tie our validation function to the 'gform_validation' hook
add_filter( 'gform_validation_9', 'validate_vin' );

This line is just us telling Gravity Forms that whenever it validates the form submission, we』d like it to also run our custom validate_vin function as well. In addition, since this is a filter and not an action (read more about the difference here) we』re also telling Gravity Forms that we』d like to modify the validation result and continuing processing the rest of the validation with those modifications preserved.

Note: You』ll notice we』ve appended a 『9』 to the end of the 『gform_validation』 filter name. This means that we only want to trigger our custom validation function from form ID 9. No sense in running an extra function on every form submission if we only need it on one specific form. Just replace the 9 with the ID of the form you』d like to target.*

The Validation Result
When Gravity Forms calls our custom function it will pass an array containing two important items for form validation.

$validation_result[『is_valid』] This property will be either true or false and indicates whether or not the form has failed any of Gravity Forms』 default validation checks. You』ll see this again on step 13.
$validation_result[『form』] This property contains the Form Object which itself contains an array of all the fields created for this form.

// 2 - Get the form object from the validation result
$form = $validation_result['form'];

With that said, all we』re doing here is setting the form object from the validation result to a local variable that will be easier to read and use.
Getting the Current Page
// 3 - Get the current page being validated
$current_page = rgpost( 'gform_source_page_number_' . $form['id'] ) ? rgpost( 'gform_source_page_number_' . $form['id'] ) : 1;

If you aren』t using multi-page forms, this step doesn』t apply to you but it wouldn』t hurt to know how it works.
When you submit a page on a multi-page form, Gravity Forms will populate some additional info in the $_POST global (read more here if you』re unfamiliar with the $_POST). One of those helpful bits of information is the source page number (aka the current page you are validating). We』ll use the rgpost function to retrieve the source page number from the $_POST.
So why is this important? Because if the field we want to validate is on page 2 of our form and the user just submitted page 1, that field will be blank and will fail the validation for the entire form preventing the user form progressing to the next page.
Looping Through the Fields
// 4 - Loop through the form fields
foreach( $form['fields'] as &$field ) {

As mentioned earlier, the Form Object contains an array of fields created for that form. Using a loop we can go through each field one by one and run a series of checks and conditions to determine if it is a field that should be validated for a VIN number.

Note: You』ll see continue in a couple places in the code within the loop. This means that we want to skip the rest of the loop for whatever field we are on and move on to the next field.*

Find Field by CSS Class
// 5 - If the field does not have our designated CSS class, skip it
if ( strpos( $field->cssClass, 'validate-vin' ) === false ) {
continue;
}

In this example, we』re looking for a specific string based on the field』s CSS class property. We could change this to check by field ID or any other field property, but I』ve found that the CSS class is a user friendly way of quickly adding custom validation functionality to most fields. Basing this check on field ID would have the drawback of requiring a code change if you ever needed to remove the field and apply the custom validation to a different field. With the CSS class technique, you can simply add the designated CSS class to the new field from the Gravity Form editor. The designated class we』re using here is validate-vin.
If validate-vin CSS class is not present on the current field, we will skip it and move on to the next field. If the field does have the validate-vin class, we know that this is a field we』ve marked for VIN validation and we』ll proceed to the next step.
Getting the Field Page Number
// 6 - Get the field's page number
$field_page = $field->pageNumber;

This step is also multi-page form specific.
When using the multi-page functionality, each field has a pageNumber property which stores the page number on which that field is displayed. We』ll be using this variable on step 8.
Is the Field Hidden?
// 7 - Check if the field is hidden by GF conditional logic
$is_hidden = RGFormsModel::is_field_hidden( $form, $field, array() );

It』s important to know whether or not the field we are validating is hidden by Gravity Form』s conditional logic. Hidden fields should not be validated because they are not part of the form submission.
Gravity Forms provides a handy public function that you can use to determine if a field is hidden: RGFormsModel::is_field_hidden(). To use this function all you need is a Form Object and a field to check.
Skip Field If…
// 8 - If the field is not on the current page OR if the field is hidden, skip it
if ( $field_page != $current_page || $is_hidden ) {
continue;
}

The previous two steps we gathered some information about the current field. Now we』re putting that information to use. If the field is not on the current page OR if the field is hidden, we don』t want to run our VIN validation function on it. Instead, we』ll continue on to the next field in the loop.
Retrieve & Validate the Submitted Value
// 9 - Get the submitted value from the $_POST
$field_value = rgpost( "input_{$field['id']}" );

// 10 - Make a call to your validation function to validate the value
$is_valid = is_vin( $field_value );

So… if the field gets to this point we know that it:

has the designated validation CSS class
is on the current page being validated
and is not hidden

We』re now ready to retrieve and validate the submitted value for this field. Let』s retrieve the value of of the field using the rgpost function (which is a clean way of retrieving values from the $_POST). The string we』re passing to this function would look something like 「input_48」 if we weren』t dynamically populating the field ID using the current field』s ID property.

Note: This method for retrieving the field value will work for most fields. Known exceptions are checkboxes and fields with multiple inputs. We will cover those later as an addition to this walk-through.*

Next, we create an $is_valid variable and assign it the result of our VIN validation function. We pass is_vin() our field value and it returns a true/false value indicating whether the submitted value is a valid VIN number.
Check If the Field Value is Valid
// 11 - If the field is valid we don't need to do anything, skip it
if ( $is_valid ) {
continue;
}

If the submitted value is valid, then we don』t need to update any of the validation properties for this field. It』s good to go!
If you are only validating one field for the VIN number (which is likely the case) you could technically stop here and return the unmodified validation result; however, for the sake of explanation and making this code sample as useful as possible, let』s assume that you』re validating multiple fields. That means we』d skip the rest of the code for this field and start back with the next field at the very top of the loop.
Uh, oh! It Failed Validation!
Ok, so we made it all the back to the is_vin() validation function on the next VIN field… but this one failed validation. What do we do now?
// 12 - The field field validation, so first we'll need to fail the validation for the entire form
$validation_result['is_valid'] = false;

// 13 - Next we'll mark the specific field that failed and add a custom validation message
$field->failed_validation = true;
$field->validation_message = 'The VIN number you have entered is not valid.';

Well, first since we know that there is a validation error on the form, let』s make sure we mark the $validation_result is_valid property as false. When we return our modified validation result, this property is how Gravity Forms knows to look for validation errors on the individual fields.
Next, we』re going to mark the $field failed_validation property as true, because, well… it did! In addition, we』ll want to provide a custom validation message so the user filling out the form will know what the problem is.
Assign the Modified Form Back to the Validation Result
// 14 - Assign our modified $form object back to the validation result
$validation_result['form'] = $form;

This step is super important! We』ve updated a field of this form with validation failure details but if we don』t assign the Form Object back to the form property of the $validation_result, Gravity Forms won』t know which field had the error.
Return the Validation Result
// 15 - Return the validation result
return $validation_result;

And finally, we return the modified (or perhaps unmodified if no validation errors were found) $validation_result back to Gravity Forms. Assuming that a field did fail validation, Gravity Forms will now prevent the form from submitting successfully and mark each field that has a validation error with its corresponding validation message.

Using the Mollie Add-on

Using the Mollie Add-on

IntroductionPrerequisitesSetup MollieSetup Your FormSetting up a Mollie FeedViewing Sales ResultsImportant NotesMollie Add-On HooksAdd-On Framework Hooks

Introduction
The official Gravity Forms Mollie Add-On allows you to quickly and easily capture one-time credit card payments with WordPress and your Mollie account.
Prerequisites

You will of course need Gravity Forms and the official Gravity Forms Mollie Add-On installed and activated.
SSL Certificate Installed and Configured
Publicly Accessible Website (for installation and testing)
A Mollie account

Because of the secure nature of capturing credit card information, you will be required to install an SSL certificate on your web site if you have not already done so. You will also need to configure your WordPress site to work properly with SSL.
Contact your web host if you need assistance purchasing and configuring an SSL certificate.
If you need assistance configuring your WordPress site to work with SSL, we recommend the WordPress HTTPS (SSL) Plugin which you can find here: http://wordpress.org/extend/plugins/wordpress-https/
Setup Mollie
Learn how to setup the Mollie Add-on in our Setting Up the Mollie Add-on article.
Setup Your Form
Refer to the Setting up a Mollie Compatible Form article for detailed instructions on how to setup your form to be compatible with the Mollie Add-on.
Setting up a Mollie Feed
Now that you have configured the Mollie Add-on to work with your Mollie account, and you have a form configured, it』s time to bring it all together by configuring the form to send it』s submissions to Mollie. Just like all of our Gravity Forms Add-ons, this is done by creating a feed.
Review our Creating a Feed for the Mollie Add-on article for step-by-step instructions.
Note that a pre-configured feed will be created in the Form Settings > Mollie area when a form containing a Mollie Field is saved, and a feed does not already exist.

Viewing Sales Results
After creating a feed and making your first sale, you can view the results on the Sales Results page.  Review Viewing Sales Results article for more information.

Important Notes

Only one-time credit card payments (Products and Services transaction type) are supported with the Mollie Add-on. Recurring payments (Subscriptions) are not supported in our Mollie Add-On at this time. Let us know how important creating subscriptions is to you on our roadmap.
The currency setting for your Mollie Account must match your Gravity Forms Currency Setting. Whichever Currency setting you have configured in Gravity Forms will define the payment methods available in the Mollie Field.
You cannot refund the same amount twice from Mollie. This is a known issues with the Mollie Dashboard: the refund modal will remain with a spinner and no errors message displayed. This isn』t really a Gravity Forms Add-on Issue, but an issue with refunds from within Mollie and the Refund Webhook communication.
Credit Card payments without 3D Secure do not receive a refund webhook. This means the payment status of entries won』t be updated if the payment is refunded from Mollie.

Mollie Add-On Hooks
The Mollie Add-On provides hooks that can be used to modify the default functionality or extend it. For more information, review the Mollie Add-On Hooks.
Add-On Framework Hooks
Because the Mollie Add-On is built using the Add-On Framework it also inherits any hooks available in the framework methods it uses such as:
gform_{$SHORT_SLUG}_field_value for changing a field value before it is passed to Mollie.

Using the Quiz Add-On

Using the Quiz Add-On

IntroductionPre-RequisitesOverviewAdding a Quiz FieldDefine Quiz Field SettingsConfigure Your Form-level Quiz SettingsDisplay Your QuizQuiz ResultsQuiz Merge Tags

Introduction

The Gravity Forms Quiz Add-On allows you to quickly create quizzes that are automatically scored and graded when the form is submitted.

The Quiz Add-On provides the special Quiz Field which is the building block of your quiz. A quiz to be graded either on a simple Pass/Fail scale or using a letter-grade system that you can customize. And remember, the Quiz Add-On allows you to add as many Quiz Fields as you would like to ANY form you choose!

Pre-Requisites

Download and install the Quiz Add-On (you may require the appropriate type of Gravity Forms license to access the add-on, refer to this page).Have a target form ready for where your quiz will go.

Overview

To get a quiz up and running, you will need to complete the following steps:

Add a quiz field to your form.Define all the required settings for your Quiz fieldRepeat steps 1 and 2 to add all the Quiz fields you require.Configure the form level quiz-related settings you want. Embed your Quiz form on a page or post. Check the Quiz results

Once you have your form with Quiz fields up and running, your attention will shift to

Adding a Quiz Field

If you have met the pre-requisites, the Quiz field is available under the Advanced Fields section within the Field Library on the Form Editor. Drag it onto the Layout Space.

Define Quiz Field Settings

The Quiz field comes with a lot of settings to help you define different question types, answer scoring and the behaviors. Refer to the Quiz Field User Guide for a full list of the available settings.

Configure Your Form-level Quiz Settings

There are form level settings that control the behavior of all quiz fields on your form.

Such as randomizing the presentation of quiz questions, and what type of grading you would like to use. When you add a Quiz Field to your form, a new section will automatically be added to the Form Settings that introduces Quiz Settings related to grading. Visit the Configure Quiz Settings article for details.

Display Your Quiz

The Gravity Forms Quiz Add-On offers a few methods to display your quiz form, such as the standard form shortcode, function, and a widget. Check out this list of articles for more information on adding a form to your site.

The Quiz Confirmation messages that you configure in the Quiz Settings will automatically be displayed after the Form Confirmation message when the form is submitted.

Quiz Results

This article reviews quiz results and where to find them.

Quiz Merge Tags

You can view quiz-specific merge tags in this article. For more information on the general use of merge tags, refer to these articles.

Using real form entries as Zapier test data

Using real form entries as Zapier test data

SummaryBackgroundCode Snippet

Summary
This article provides a code snippet that you can use to fetch actual form submissions from your entries table to see when you are testing out your Zapier Zap. This is to address a need that some Zapier users have requested with the release of the official Gravity Forms Zapier Add-On v4.
Background
It may seem like this ability existed before version 4, but in actual fact it was a somewhat happenstance. There was no way for Zapier to fetch sample data on demand so they listened for it instead. The Gravity Forms Zapier Add-On would send sample data to the zap URL when you saved the feed or when you saved changes to the form.
While the integration was never designed to use form submissions (entries) as sample data it was possible that if the form happened to be submitted at the time Zapier was listening for the sample data they would also pick up the real entry data as well.
The new version of the Gravity Forms app that is available on Zapier.com does not listen for incoming sample data. We have setup a registered API endpoint where the app can request the sample data on demand, but both the Zapier app and Gravity Forms add-on require updates to utilize it. This code snippet is a work around in the meantime.
Code Snippet
Add this to your theme』s functions.php file, or within any custom functions plugin you may be using.
This code snippet will override the response of the REST API request which gets the sample data with the latest real form entry.
/**
* Replaces the Gravity Forms Zapier sample entry response with the latest real entry, if available.
*
* @param WP_REST_Response $response The response to be returned.
* @param WP_REST_Server $server The current instance of the REST API server.
* @param WP_REST_Request $request The request which is currently in progress.
*/
add_filter( 'rest_post_dispatch', function ( $response, $server, $request ) {
if ( ! function_exists( 'gf_zapier' )
|| $response->get_status() !== 200
|| $request->get_method() !== 'GET'
|| empty( $request['form_id'] )
|| $request->get_route() !== "/gf/v2/forms/{$request['form_id']}/sample-entry"
|| ! GFAPI::current_user_can_any( 'gravityforms_view_entries' )
) {
return $response;
}

$entries = GFAPI::get_entries( $request['form_id'], array( 'status' => 'active' ), array(), array( 'page_size' => 1 ) );
if ( empty( $entries[0]['id'] ) ) {
return $response;
}

$form = GFAPI::get_form( $request['form_id'] );
$feed = array( 'meta' => array( 'adminLabels' => false ) );

return rest_ensure_response( gf_zapier()->get_body( $entries[0], $form, $feed ) );
}, 10, 3 );

If you need the entry data to use the field admin labels change 'adminLabels' => false to 'adminLabels' => true.