Troubleshooting Issues with Gravity Forms Download and Signature Links

Troubleshooting Issues with Gravity Forms Download and Signature Links

SummaryCauses

Summary

A small number of users have reported an issue with Gravity Forms produced links to download files. This includes links to files in a post, entry, or form submission email notification. This issue only applies to links which contain the gf-download or gf-signature query string parameter. Direct URLs which are stored in the entry within the database are not affected.

Causes

This issue may be caused by one of the following (ordered from most common to less common):

A theme or plugin conflict, such as blank lines after closing PHP tags in .php files. Try running through a full theme/plugin conflict test.An outdated PHP version. Refer to the Gravity Forms System Requirements article for details.A redirection plugin or .htaccess rule conflicting with the download URL.A caching or security module configured on the server.An email service such as SendGrid replacing the functional file URL from the notification with an invalid tracking URL. Deactivating the email services click/open tracking for links has resolved this issue in the past.The salts in the sites wp-config.php file being changed, invalidating the hashes which are included in the links. This can happen if you』ve migrated your site to a different server recently. If that is the case, you can get the new download links from the entry detail page.

Once the above causes have been ruled out and the issue remains, the next step would be to contact your web host so they can check for server side issues.

Troubleshooting Issues with Calculation Results

Troubleshooting Issues with Calculation Results

SummarySolutionsExample Logging Statements

Summary
When the calculation result stored in the entry differs from the result displayed on the front-end, that indicates that one or more field values referenced in the formula were not available.
How calculations work is that the value you see on screen is not included in the submission. For security reasons the calculation is rerun during submission using the field values saved in the entry. If a field hasn』t been saved yet then its value isn』t available to the calculation. The most common cause of this issue is if fields are in the wrong order; a calculation field must always be located after all the fields referenced in the formula.

Note: The Total field type is always the last to be saved so its value is not available for use in calculations.

Another cause is if the field used in the formula has a conditional logic rule based on a choice based field such as checkbox, radio buttons, or multi-select and the choice includes special characters or HTML.
Solutions
The solution to the total field not being available is to use a Number field with a subtotal calculation. Refer to the GravityWiz Subtotal Merge Tag (for Calculations) article for more information.
You can test with logging enabled to determine which field value wasn』t available when the calculation was rerun. See Logging and Debugging for details on how to do so.
Example Logging Statements

DEBUG –> GFFormsModel::save_input(): Queued field operation: Calculated Subtotal ([field label])(#[field id] – [field type]).
DEBUG –> GFCommon::get_calculation_value(): No value or non-numeric value available for field #[field id]. Returning zero instead.
DEBUG –> GFCommon::calculate(): No result or non-numeric result. Returning zero instead.

Troubleshooting Dropbox Feed Processing

Troubleshooting Dropbox Feed Processing

RequirementsLoggingCommon IssuesBasic AuthenticationcURL Error 28

Requirements
For Dropbox feed processing to work the following requirements must be met:

See the Gravity Forms System Requirements article for more details.
The site needs to be able to send a post request to it』s admin-post.php URL using the WordPress HTTP API to trigger processing of the uploaded files.

Logging
Begin troubleshooting by:
(1) Enable logging on the Forms > Settings page
(2) On the Forms > Settings > Logging page, ensure that Gravity Forms Core and any add-ons are enabled and set to log all messages.
Check our logging and debugging documentation for additional help.
As logging statements are only recorded when the functions they are contained within are run, perform the steps needed to replicate the issue such as submitting the form.
Example logging statements to look for in the add-on log:

DEBUG –> GFFeedAddOn::maybe_process_feed(): Checking for feeds to process for entry #[entry id] for gravityformsdropbox.
DEBUG –> GFFeedAddOn::maybe_process_feed(): Starting to process feed (# – ) for entry #[entry id] for gravityformsdropbox
DEBUG –> GF_Dropbox::initialize_api(): Testing API credentials.
DEBUG –> GF_Dropbox::initialize_api(): API credentials are valid.
DEBUG –> GF_Dropbox::process_feed(): Adding feed #1 to the processing queue.
DEBUG –> GFFeedAddOn::maybe_process_feed(): Marking entry #[entry id] as fulfilled for gravityformsdropbox
DEBUG –> GF_Dropbox::maybe_process_feed_on_shutdown(): Sending processing request for feed #.
ERROR –> GF_Dropbox::maybe_process_feed_on_shutdown(): Aborting. [message here]
DEBUG –> GF_Dropbox::maybe_process_feed_on_post_request(): Nonce verified; preparing to process request.
ERROR –> GF_Dropbox::process_feed_files(): Feed was not processed because API was not initialized.
DEBUG –> GF_Dropbox::process_feed_files(): Checking form fields for files to process.
DEBUG –> GF_Dropbox::process_feed_files(): Processing field: GF_Field_[type] Object(…)
DEBUG –> GF_Dropbox::process_[type]_fields(): Not uploading [type] field #[field id] because field value is empty.
DEBUG –> GF_Dropbox::process_[type]_fields(): Beginning upload of [type] field #[field id].
ERROR –> GF_Dropbox::process_[type]_fields(): Unable to upload file: [file url]
ERROR –> GF_Dropbox::process_[type]_fields(): Unable to create shareable link for file: [message here]
DEBUG –> GF_Dropbox::process_fileupload_fields(): File for lead: [file url]
ERROR –> GF_Dropbox::upload_file(): Unable to upload file because destination folder could not be created.
ERROR –> GF_Dropbox::upload_file(): Unable to upload file because destination is not a folder.
DEBUG –> GF_Dropbox::upload_file(): File [file name] was successfully uploaded.
ERROR –> GF_Dropbox::upload_file(): Unable to upload file: [message here]
DEBUG –> GF_Dropbox::upload_file(): Preparing local file for deletion.
ERROR –> GF_Dropbox::upload_file(): Unable to create shareable link for file: [message here]
DEBUG –> GF_Dropbox::update_entry_links(): Updating entry value for field #[field id] to [file url].
DEBUG –> GF_Dropbox::maybe_delete_files(): Deleting local files => Array(…)

Common Issues
If you find feed processing ends with the following logging statement that indicates something is preventing the WordPress admin-post.php from processing the request.

DEBUG –> GF_Dropbox::maybe_process_feed_on_shutdown(): Sending processing request for feed #.

Basic Authentication
If your site is using basic authentication that would cause the request to fail with a 401 unauthorized error. To resolve this issue you can add the Authorization header to the request using the WordPress http_request_args filter e.g.
add_filter( 'http_request_args', 'http_request_args_basic_auth_admin_post', 10, 2 );
function http_request_args_basic_auth_admin_post( $args, $url ) {
if ( strpos( $url, admin_url( 'admin-post.php' ) ) === 0 ) {
$args['headers']['Authorization'] = 'Basic ' . base64_encode( USERNAME . ':' . PASSWORD );
}

return $args;
}

Note: The above example is based on USERNAME and PASSWORD being constants defined elsewhere (i.e. the wp-config.php file), if not, you can include the values within the quotes e.g. 'USERNAME:PASSWORD'.
cURL Error 28

ERROR –> GF_Dropbox::maybe_process_feed_on_shutdown(): Aborting. cURL error 28: Operation timed out after 1000 milliseconds with 0 bytes received

For assistance resolving cURL timeouts like this please see the cURL error 28 in WordPress article.

Troubleshooting Background (async) Processing Issues

Troubleshooting Background (async) Processing Issues

AboutRequirementsLoggingAdmin Ajax request failscURL error 6cURL error 7cURL error 28cURL error 35Basic AuthenticationCron jobs not runningBasic AuthenticationWP Crontrol PluginCreate a real cron job

About
The background (async) processing feature was introduced in Gravity Forms 2.2. It is currently used by the following:

Feed processing by add-ons which extend the Gravity Forms feed add-on framework (GFFeedAddOn) and have declared that asynchronous feed processing is supported, such as the Webhooks Add-On.
If you are developing a GFFeedAddOn based add-on and want to use background processing see the $_async_feed_processing article.
If you want to use background processing with a GFFeedAddOn based add-on which does not currently support background processing, see the gform_is_feed_asynchronous article.

The Gravity Forms 2.3 database upgrade.
The third-party Gravity PDF add-on, version 5.0+.

Requirements
For background processing to work the following requirements must be met:

The site needs to be able to send a post request to it』s Admin Ajax URL using the WordPress HTTP API to trigger processing of queued tasks.
The site needs to support cron jobs so the background processors healthcheck can restart processing of queued tasks if processing stops for some reason or if the request to Admin Ajax fails.

Visit the Forms > System Status page. See the Checking Your Environment Details article.
In the WordPress Environment section of the report the Background tasks row will indicate if Admin Ajax requests are working and the WordPress Cron or WordPress Alternate Cron rows will indicate if cron jobs are enabled.
Logging
Begin troubleshooting by:
(1) Enable logging on the Forms > Settings page
(2) On the Forms > Settings > Logging page, ensure that Gravity Forms Core and any add-ons are enabled and set to log all messages.
Check our logging and debugging documentation for additional help.
As logging statements are only recorded when the functions they are contained within are run, perform the steps needed to replicate the issue such as submitting the form or running the database upgrade from the system status page.
Example logging statements to look for in the Core log:

GF_Background_Process::dispatch(): Running for [gf_feed_processor or gf_upgrader].
GF_Background_Process::schedule_event(): Scheduling cron event for [gf_feed_processor or gf_upgrader].
GF_Background_Process::dispatch(): Unable to dispatch tasks to Admin Ajax: [message here].
GF_Background_Process::maybe_handle(): Running for [gf_feed_processor or gf_upgrader]. (Only if Admin Ajax triggers processing)
GF_Background_Process::handle_cron_healthcheck(): Running for [gf_feed_processor or gf_upgrader]. (Only if the cron triggers processing)
GF_Background_Process::handle(): Running for [gf_feed_processor or gf_upgrader].
GF_Background_Process::handle(): Processing batch for [gf_feed_processor or gf_upgrader].
GF_Background_Process::handle(): Batch completed for [gf_feed_processor or gf_upgrader].

Example logging statements to look for in the add-on log:

GFFeedAddOn::maybe_process_feed(): Adding feed (# – ) for entry #[entry id] for [add-on slug] to the processing queue.
GF_Feed_Processor::task(): already processed feed (# – ) for entry #[entry id] for [add-on slug]. Bailing.
GF_Feed_Processor::task(): attempted feed (# – ) for entry #[entry id] for [add-on slug] too many times. Bailing.
GF_Feed_Processor::task(): Starting to process feed (# – ) for entry #[entry id] for [add-on slug]. Attempt number: [attempt number here]
GF_Feed_Processor::task(): Unable to process feed due to error: [message here].
GF_Feed_Processor::task(): Marking entry #[entry id] as fulfilled for [add-on slug]

The add-on log will also include other add-on specific logging statements.
Example logging statement to look for in the core log for the 2.3 database upgrade:

GF_Background_Upgrader::task(): Running callback: Array(…)
GF_Background_Upgrader::task(): Callback needs another run: Array(…)
GF_Background_Upgrader::task(): Finished callback: Array(…)
GF_Background_Upgrader::task(): Could not find callback: Array(…)

Admin Ajax request fails
To be able to trigger processing of queued tasks the site needs to be able to send a post request to it』s Admin Ajax URL using the WordPress HTTP API. Here are some common errors which can prevent processing of queued tasks from starting. Most errors will be related to how the server hosting your site is configured so you may need to contact your host for assistance resolving the issue.
cURL error 6

GF_Background_Process::dispatch(): Unable to dispatch tasks to Admin Ajax: cURL error 6: Could not resolve host: [site-domain-here.dev]

This indicates there is an issue on the server hosting your site. Please contact your web host.
cURL error 7
If you find a logging statement like the following in the core log your site is unable to contact itself using the WordPress HTTP API, you may need to contact your web host so they can look into why that is.

GF_Background_Process::dispatch(): Unable to dispatch tasks to Admin Ajax: cURL error 7: Failed to connect to [site-domain-here.dev] port 443: Connection refused

If you are testing locally using the Local by Flywheel app and the site is using HTTPS see the following topic: https://local.getflywheel.com/community/t/curl-error-when-accessing-ssl-local-site/2940/8
cURL error 28

GF_Background_Process::dispatch(): Unable to dispatch tasks to Admin Ajax: cURL error 28: Operation timed out after 1001 milliseconds with 0 bytes received

For assistance resolving cURL timeouts like this please see the cURL error 28 in WordPress article.
cURL error 35

GF_Background_Process::dispatch(): Unable to dispatch tasks to Admin Ajax: cURL error 35: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

This can be caused by an issue on the server hosting your site, your web host may need to update some of the packages on the server.
If your site is using the Cloudflare service their SSL configuration could also cause this error. Temporarily disabling Cloudflare for the site in question has been known to resolve the issue. You may need to contact Cloudflare support for assistance resolving this issue permanently.
Basic Authentication
You may see the following in the System Report

Background tasks: No ✘ Response code: 401

If your site is using basic authentication you can add the Authorization header to the Ajax request using the WordPress http_request_args filter e.g.
add_filter( 'http_request_args', 'http_request_args_basic_auth', 10, 2 );
function http_request_args_basic_auth( $args, $url ) {
if ( strpos( $url, admin_url( 'admin-ajax.php' ) ) === 0 ) {
$args['headers']['Authorization'] = 'Basic ' . base64_encode( USERNAME . ':' . PASSWORD );
}

return $args;
}

Note: The above example is based on USERNAME and PASSWORD being constants defined elsewhere (i.e. the wp-config.php file), if not, you can include the values within the quotes e.g. 'USERNAME:PASSWORD'.
Cron jobs not running
The cron jobs should only run if processing by Admin Ajax can』t be started, or if Admin Ajax stops processing the tasks before the queue has been cleared.
Visit the Forms > System Status page. See the Checking Your Environment Details article.
In the WordPress Environment section of the report, WordPress Cron or WordPress Alternate Cron should be enabled. If both are disabled, try setting DISABLE_WP_CRON to false in the wp-config.php file e.g.
define( 'DISABLE_WP_CRON', false );
Basic Authentication
If your site is using basic authentication that also would prevent cron jobs from running. You can resolve that issue by adding the Authorization header to the cron request using the WordPress cron_request filter e.g.
add_filter( 'cron_request', 'cron_request_basic_auth' );
function cron_request_basic_auth( $cron_request ) {
$cron_request['args']['headers']['Authorization'] = 'Basic ' . base64_encode( USERNAME . ':' . PASSWORD );
return $cron_request;
}

Note: The above example is based on USERNAME and PASSWORD being constants defined elsewhere (i.e. the wp-config.php file), if not, you can include the values within the quotes e.g. 'USERNAME:PASSWORD'.
WP Crontrol Plugin
If you are still having issues, install the WP Crontrol plugin by John Blackbourn.
Visit the Tools > Cron Events page. The plugin will display a warning message at the top of the page if your cron system doesn』t appear to be working (for example if your server can』t connect to itself to fire scheduled cron events).
If you don』t see a warning message check the table to see if any of the following jobs exist:

wp_gf_upgrader_cron
wp_gf_feed_processor_cron

Some sites may use a different prefix instead of the wp prefix shown in the above names.
If you do find the job, try clicking the run now link which is located to the right of the Recurrence column, and then check the logs in a few minutes to see if the tasks were processed.
Create a real cron job
If you find the cron is unreliable your site may not be receiving enough traffic for WordPress to process the cron jobs, you may need to create a real cron job in your hosting control panel. See this article.

Troubleshooting API Key Validation Issues

Troubleshooting API Key Validation Issues

Check Your KeyCheck The Add-On VersionsInstall the Debugging Add-OnEnable Logging

Note: This article refers to issues validating 3rd party API keys in add-ons. If you』re having trouble activating your Gravity Forms license key, contact support.
Check Your Key
This sounds obvious, but is often overlooked. As there are often multiple keys required, be sure that you have the correct key in the correct field. Also be sure that you』re not using an old key that has since been changed.
Check The Add-On Versions
Because services can change how their APIs operate from time to time, be sure that you are using the most recent version of the add-on. If not, you could be attempting to access an API that has since changed.
Install the Debugging Add-On
The Debugging add-on can often reveal a plugin or theme conflict. Be sure to test with the Debugging add-on to ensure that there is not an issue being caused by another plugin or theme.
Enable Logging
If you are continuing to have issues and you are certain that everything is configured properly by following the previous steps, testing with logging enabled is the next step.
Simply enable logging of all messages for the add-on, then try configuring the add-on again. Once done, check the logs within the Forms > Settings > Logging or Forms > System Status pages for any errors; particularly those relating to the response from the external service.
If you』re not able to see an issue within the logs, include the links to the logs in with your support ticket and we will be happy to help.

Troubleshooting a Missing 『Feeds』 Menu Item

Troubleshooting a Missing 『Feeds』 Menu Item

Check that the plugin is activatedCheck your WordPress user capabilitiesCheck for conflictsLook for errors

When trying to create an add-on feed, you』ll need to access the Feeds page. What if you don』t see the menu item? In this article, we』ll show you how to troubleshoot the issue.
Check that the plugin is activated
While it seems crazy, be sure that the add-on is activated by accessing the Plugins page in the WordPress dashboard. It』s fairly common that people install WordPress plugins and simply forget to activate it. Checking that the plugin is activated is a great way to save yourself from a potentially embarrassing support ticket.
Check your WordPress user capabilities
WordPress uses various user roles and capabilities to determine what users are allowed to do. As Gravity Forms strides to seamlessly integrate within WordPress as much as possible, it also uses roles and capabilities.
Your user simply may not have access to a capability that Gravity Forms is checking for. The easiest way to check over your current capabilities, as well as modify them if needed, is the 3rd party User Role Editor plugin.
Check for conflicts
Gravity Forms is developed to avoid plugin conflicts as often as possible, but with millions of WordPress plugins on the market, we can』t possibly test with every one of them.
Deactivating all other WordPress plugins and switching to a default theme such as Twenty Fifteen will help you narrow down if there is a conflict. If the issue resolves itself, slowly begin to re-activate plugins until the issue appears again.
Look for errors
If you』re still not seeing the menu item, look for errors that may be appearing when WP_DEBUG is enabled. These errors can provide more information as to what the issue may be.

Troubleshooting Form Data Not Being Sent to a Service

Troubleshooting Form Data Not Being Sent to a Service

Check Gravity Forms and Add-On versionsCheck Your FeedsEnable Logging

Many of the add-ons that Gravity Forms offers require form data being sent to a 3rd party service, such as Dropbox. If you are having issues, here』s how to troubleshoot it.
Check Gravity Forms and Add-On versions
Be sure that Gravity Forms, as well as the add-on you are trying to use is completely up to date. Because of various changes that could take place either with the add-on or the service, keeping everything up to date ensures that something isn』t deprecated.
Check Your Feeds
Check to ensure that the feed for the add-on using the service exists and is enabled. In addition, be sure that if you are using conditional logic, that the conditions are met. If any of these are incorrect, the data will never be sent to the external service.
Enable Logging
If you are continuing to have issues and you are certain that everything is configured properly by following the previous steps, testing with logging enabled is the next step.
Simply enable logging of all messages for Gravity Forms core and the add-on, then test the form. Once done, check the logs within the Forms > Settings > Logging or Forms > System Status pages for any errors; particularly those relating to the response from the external service.
If you』re not able to see an issue within the logs, include the links to the logs in with your support ticket and we will be happy to help.

Troubleshooting an Empty or Incomplete Settings Page

Troubleshooting an Empty or Incomplete Settings Page

Check Enabled PHP ExtensionsChecking Your PHP EnvironmentFixing Your PHP EnvironmentContacting Support

If you see a settings page that has missing or incomplete content, this article will show you how to resolve the issue.
Check Enabled PHP Extensions
If you are seeing an empty or incomplete settings page, this is often caused by required PHP extensions not being loaded on the server. While these extensions are extremely common on the majority of web servers, it may not be present for one reason or another.
The extensions that are typically required for many Gravity Forms add-ons are mbstring and curl.
Checking Your PHP Environment
To see how PHP is configured on the server, as well as what extensions are loaded, the phpinfo() function exists. To use it, place the following into a PHP file on your server:

On this page, you should see sections titled mbstring and curl. If either of them are missing, they are not loaded within your environment.
Fixing Your PHP Environment
To fix the issue, you will likely need to contact your web host. If you maintain your own server or have root access, steps to installing these PHP extensions will drastically differ based on your specific environment.
Contacting Support
Before contacting support, be sure to follow all of the previous troubleshooting steps. This can often times save you from a bit of an embarrassing ticket where the issue is out of our control, as well as save time.
Upon contacting support, be sure to provide any related output that you have from logging. Often times, this is the first thing you will be asked to do when troubleshooting this issue over a ticket, so sending it ahead of time saves time.

Troubleshooting Dropbox Add-On 「SSL Required」 Messages

Troubleshooting Dropbox Add-On 「SSL Required」 Messages

Use the gform_dropbox_ssl_compatibility HookExample

From time to time, the Dropbox Add-On may incorrectly return a false negative in its checks for an SSL certificate present on the site. Here』s how to fix the issue.
Use the gform_dropbox_ssl_compatibility Hook
The gform_dropbox_ssl_compatibility filter will allow you to override any checks for an SSL certificate that are performed by the Dropbox Add-On. If you』re having issues, but are certain that an SSL certificate is installed correctly, this hook will override the SSL checks; allowing you to continue using the add-on.
Example
1add_filter( 'gform_dropbox_ssl_compatibility', '__return_true' );
Placing this code within your active theme』s functions.php or within its own plugin will override any SSL requirement checks within the Dropbox Add-On.

Troubleshooting 404 Errors on Dropbox Settings Pages

Troubleshooting 404 Errors on Dropbox Settings Pages

Check RequirementsCheck For Updates

When configuring the Dropbox Add-On, you might be experiencing 404 errors within the Settings page for the add-on. In this article, we will show you how to troubleshoot the issue.
Check Requirements
The Dropbox Add-On requires the use of an SSL certificate installed on your site. If you do not have an SSL certificate, you will need to contact your host to get one installed before the add-on can be used.
This is a requirement of the Dropbox API and will not operate correctly without an SSL certificate. Once an SSL certificate is installed, the issues should subside.
Check For Updates
As with any piece of software, you may be experiencing a bug or incompatibility issues in older versions. To eliminate potential issues that are already resolved in a later version, be sure that everything is up to date. This includes Gravity Forms, the Dropbox Add-On, and WordPress.