Gravity Forms Update to PHP 8
We need to test the upgrade to PHP 8 for Gravity Forms and verify that the code and the
Gravity Form plugin features don't break anything after upgrading to this newer PHP version.
Also, if there are any other plugins or systems that interact with Gravity Forms we'd like to
identify them and know if and/or how they may break in this upgrade.
Todo
Run a linter over all the files listed in plugins below to identify fatal errors elicited in static
analysis
Analyze how many sites are using the referenced plugins below. We want to identify
unused (or little used) plugins that can be sunset and removed from our code base.
Analyze linting results and create work breakdown structure for each
○ Gravity-forms-no-captcha-recaptcha (1 task)
○ Gravityforms (37 errors need to be grouped semantically for individual tasks)
Run report of sites using plugins in monorepo, with end goal of identifying plugins that
can be sunset from the monorepo
Sample 6 of the highest used integrated plugins, and analyze how the plugin is using
GF, then write scenarios for test cases
Work Breakdown
Task to remove one-off plugins. Negotiate with business
Gravity forms PHP8 ERROR Remediation
Integration tests for core functionality
○ Over how we consume it
○ Over the core internals implemented by vendor
Work Breakdown Structure
Tests for core functionality
Discussed this possibility for creating tests:
● Create a placeholder “Gravity Forms Tests for Plugin Name” ticket that can be
duplicated as we are working on upgrading each gravityforms plugin. Go one plugin at a
time down the list of 66 plugins that interact with Gravity Forms. Before starting a new
plugin, determine if its gravity forms interactions have already been covered in the tests,
and if not then create a ticket from the placeholder. This would save from creating 66
tickets at the start and from closing tickets for plugins that are already covered.
Integration Tests
Discussed the possibility of using integration tests instead of unit tests.
● In these tests, we can compare the expected results from the database with the received
results from the database after making updates to gravity forms. These tests can be run
locally against the databases of local dev and prod sites to verify the expected results.
These kinds of tests would also not run on an automated pipeline in github.
Meeting Notes on Testing
● Look at adding integration test coverage for the core gravity forms plugin itself (with the
least amount of refactoring possible) and then perhaps couple it with manually testing
the plugins that utilize it to make sure they aren't broken or throw any fatals
○ also a case for NOT doing this and just resolving the issues one-by-one akin to
us doing the snyk remediations
● Maybe gravity forms CLI could aid in the smoke testing after our updates? (this may be
more work than it's worth)
● When looking for usages of Gravity form, we have "gravity", "gform", and "GFAPI", how
do we track down other usages?
○ Look at Tom's SQLlite DB for usages of gravity form hooks across the platform
and try to understand the need for them
○ Rector may be of assistance with PHP migration upgrade to automate refactoring
and find usages. Rector is a static analyzer and automated code refactorer for
PHP.
● Can we lean on QA team to go through QA checklists on sites on 7.4 vs 8.x?
○ This would require a working version of a site on 8.x. There are likely several
plugins besides the known gravity form plugins that will break when updating to
8.x.
● How can we have just gravity forms locally to test on since we'll certainly have other
plugins that will break on php 8.0 +
● Tom's branch and pulling starter seems to address this so we can at least play around
with stuff
● Pull starter site down with php 8.2 locally and see how long it takes to just get the
updated gravity forms to work/display. Not updating Wordpress to the 6.x version may
help to resolve some bugs.
Gravity forms PHP8 ERROR Remediation
Gravity-forms-no-captcha-recaptcha (1 error)
○ Resolve Undefined Variable Error (1 task) S
■ The static code analysis has found an undefined variable. The variable
needs to either be defined in this code or a conditional check on this
variable needs to be added before using this variable in order to resolve
this error.
● ERROR Undefined variable '$NoCaptchaReCaptcha' (at
line 23)
Gravityforms (37 errors, 28 weak warnings)
○ Resolve Return Type must be compatible with parent (1 task) S
■ The static code analysis has found that these functions are missing
a required return type on these functions to be compatible with their
parent. These can be resolved by simply adding the missing return
type on the methods.
● file class‑gf‑field.php 4 weak warnings
○ ERROR Return type declaration must be compatible
with parent (at line 60)
○ ERROR Return type declaration must be compatible
with parent (at line 78)
○ ERROR Return type declaration must be compatible
with parent (at line 54)
○ ERROR Return type declaration must be compatible
with parent (at line 69)
○ Resolve Curly brace access syntax usage inspection (1 task) S
■ The static code analysis has found a curly brace access syntax
error which is deprecated.
● file common.php 1 error
○ ERROR Curly brace access syntax is deprecated
since PHP 7.4 (at line 3328)
○ Resolve Nested ternary operator usage inspection (1 task) S
■ The static code analysis has found a nested ternary operator usage
syntax error which is deprecated.
● file class‑gf‑field‑multiselect.php 1 error
○ ERROR Nested ternary expressions are deprecated
since PHP 7.4 (at line 177)
○ Replace deprecated create_function() (1 task) S
■ The static code analysis has found a create_function() usage error
which is deprecated.
● file common.php 1 error
○ ERROR 'create_function' was removed in 8.0 PHP
version (at line 145)
● file form_display.php 2 errors
○ ERROR 'create_function' was removed in 8.0 PHP
version (at line 1011)
○ ERROR 'create_function' was removed in 8.0 PHP
version (at line 1012)
● file gravityforms.php 2 errors
○ ERROR 'create_function' was removed in 8.0 PHP
version (at line 688)
○ ERROR 'create_function' was removed in 8.0 PHP
version (at line 719)
○ Resolve Probably Undefined Variables (1 task) L
■ The status code analysis has found variables in the code that are
may be undefined. These variables should be initialized before
being used in the code.
● file class‑gf‑feed‑addon.php 4 weak warnings
○ ERROR Variable '$charset_collate' is probably
undefined (at line 93)
○ ERROR Variable '$charset_collate' is probably
undefined (at line 104)
○ ERROR Variable '$value' is probably undefined (at
line 1476)
○ ERROR Variable '$value' is probably undefined (at
line 1473)
● file common.php 1 weak warning
○ ERROR Variable '$src' is probably undefined (at line
715)
● file DIFormDisclaimer.php 1 weak warning
○ ERROR Variable '$settings' is probably undefined (at
line 72)
● file form_detail.php 1 weak warning
○ ERROR Variable '$my_parent' is probably undefined
(at line 2542)
● file form_display.php 1 weak warning
○ ERROR Variable '$field_dependents' is probably
undefined (at line 2048)
● file forms_model.php 7 weak warnings
○ ERROR Variable '$inner_sql' is probably undefined
(at line 3530)
○ ERROR Variable '$inner_sql' is probably undefined
(at line 3524)
○ ERROR Variable '$form' is probably undefined (at
line 3927)
○ ERROR Variable '$lead_ids' is probably undefined (at
line 4027)
○ ERROR Variable '$lead_ids' is probably undefined (at
line 4426)
○ ERROR Variable '$charset_collate' is probably
undefined (at line 5031)
○ ERROR Variable '$charset_collate' is probably
undefined (at line 5028)
● file gravityforms.php 4 weak warnings
○ ERROR Variable '$charset_collate' is probably
undefined
○ ERROR Variable '$charset_collate' is probably
undefined
○ ERROR Variable '$queries' is probably undefined
○ ERROR Variable '$parent' is probably undefined
● file notification.php 1 weak warning
○ ERROR Variable '$is_invalid_rule' is probably
undefined
○ ERROR Variable '$frameYM' is probably undefined
● file upload.php 1 weak warning
○ ERROR Variable '$contentType' is probably undefined
● file webapi.php 2 weak warnings
○ ERROR Variable '$result' is probably undefined
○ ERROR Variable '$result' is probably undefined
○ Resolve Probably Undefined Variables (4 tasks) M
● file class‑gravity‑api.php 1 error
○ ERROR Undefined variable '$response_body'
● file forms_model.php 4 errors
○ ERROR Undefined variable ''start_date''
○ ERROR Undefined variable ''end_date''
○ ERROR Undefined variable ''is_default''
○ ERROR Undefined variable ''is_default''
● file gravityforms.php 3 errors
○ ERROR Undefined variable '$form_id'
○ ERROR Undefined variable '$title'
○ ERROR Undefined variable '$description'
● file phpqrcode.php 3 errors
○ ERROR Undefined variable '$run'
○ ERROR Undefined variable '$hint'
○ ERROR Undefined variable '$ret'
○ Resolve deprecated mcrypt_get_iv_size() (1 task) S-M
● file common.php 2 errors
○ ERROR 'mcrypt_get_iv_size' was removed in 7.2
PHP version
○ ERROR 'mcrypt_get_iv_size' was removed in 7.2
PHP version
○ Resolve deprecated MCRYPT_RIJNDAEL_256
● file common.php 4 errors (1 task) S-M
○ ERROR 'MCRYPT_RIJNDAEL_256' was removed in
7.2 PHP version
○ ERROR 'MCRYPT_RIJNDAEL_256' was removed in
7.2 PHP version
○ ERROR 'MCRYPT_RIJNDAEL_256' was removed in
7.2 PHP version
○ ERROR 'MCRYPT_RIJNDAEL_256' was removed in
7.2 PHP version
○ Resolve deprecated MCRYPT_MODE_ECB (1 task) S-M
● file common.php 4 errors
○ ERROR 'MCRYPT_MODE_ECB' was removed in 7.2
PHP version
○ ERROR 'MCRYPT_MODE_ECB' was removed in 7.2
PHP version
○ ERROR 'MCRYPT_MODE_ECB' was removed in 7.2
PHP version
○ ERROR 'MCRYPT_MODE_ECB' was removed in 7.2
PHP version
○ Resolve deprecated mcrypt_encrypt (1 task) S-M
● file common.php 1 error
○ ERROR 'mcrypt_encrypt' was removed in 7.2 PHP
version
○ Resolve deprecated mcrypt_decrypt (1 task) S-M
● file common.php 1 error
○ ERROR 'mcrypt_decrypt' was removed in 7.2 PHP
version
○ Resolve deprecated mcrypt_encrypt (1 task) S-M
● file common.php 2 errors
○ ERROR 'mcrypt_create_iv' was removed in 7.2 PHP
version
○ ERROR 'mcrypt_create_iv' was removed in 7.2 PHP
version
○ Resolve deprecated MCRYPT_RAND (1 task) S-M
● file common.php 2 errors
○ ERROR 'MCRYPT_RAND' was removed in 7.2 PHP
version
○ ERROR 'MCRYPT_RAND' was removed in 7.2 PHP
version
○ Resolve deprecated get_magic_quotes_gpc (1 task) S-M
● file forms_model.php 1 error
○ ERROR 'get_magic_quotes_gpc' was removed in 8.0
PHP version
○ Resolve deprecated MCRYPT_MODE_CBC (1 task) S-M
● file recaptchalib.php 1 error
○ ERROR 'MCRYPT_MODE_CBC' was removed in 7.2
PHP version
○ Resolve deprecated MCRYPT_RIJNDAEL_128 (1 task) S-M
● file recaptchalib.php 1 error
○ ERROR 'MCRYPT_RIJNDAEL_128' was removed in
7.2 PHP version
Spike Gravity Forms Update
https://github.com/carsdotcom/di-websites-platform/pull/3462
List of Gravity Form Plugins and Plugin Addons
The identified PHP 8.2 errors are located in the included directory link below. Each plugin that
has errors has a detailed file that can be downloaded and opened in a browser to view the
errors and the links show exactly where the errors are located in the files in Github. The plugins
have also been analyzed and show the total number of sites that are using each plugin on both
dev and prod. The linked spreadsheet has the exact details of which sites are using the plugins.
Directory: PHP 8.2 Errors
Spreadsheet: List of Sites using Gravity Form Plugins
1. di-gravityforms
○ Compatible with PHP 8.2. No breaking changes found.
○ Dev: 12581
○ Prod: 6668
2. di-gravityforms-multilingual
○ Compatible with PHP 8.2. No breaking changes found.
○ Dev: 426
○ Prod: 286
3. gravity-forms-google-analytics-event-tracking
○ This plugin may not be relevant any longer. It was found on my local
di-websites-platform plugins but no longer exists on the Github repo main branch.
○ Here’s a link to this plugin from an older branch in the repo.
○ Compatible with PHP 8.2. No breaking changes found.
○ Dev: 1
○ Prod: 0
4. gravity-forms-iframe
○ Identified Errors
○ Dev: 9
○ Prod: 1
5. gravity-forms-no-captcha-recaptcha
○ Identified Errors
○ Dev: 2397
○ Prod: 3054
6. gravity-forms-stripe
○ Identified Errors
○ Dev: 0
○ Prod: 1
7. gravityforms
○ Identified Errors
○ Dev: 12588
○ Prod: 6669
8. gravityforms-hubspot
○ Compatible with PHP 8.2. No breaking changes found.
○ Dev: 1
○ Prod: 1
9. gravityforms-mailchimp
○ Identified Errors
○ Dev: 11
○ Prod: 9
10.gravityforms-zapier
○ Identified Errors
○ Dev: 1
○ Prod: 1
11.gravityformspaypal
○ Compatible with PHP 8.2. No breaking changes found.
○ Dev: 9
○ Prod: 11
12.gravityformssignature
○ Identified Errors
○ Dev: 2
○ Prod: 1
13.gravityformszapier
○ Identified Errors
○ Dev: 1
○ Prod: 1
Common Updates Required for PHP 8 in Gravity Forms
● Unsetting non-variable references
○ unset($object->property) or complex expressions such as
unset($array[$index]()['property']) should be set to null instead like
$object->property = null; or $array[$index]()['property'] =
null;
● Replace deprecated functions like create_function()
○ set_error_handler(create_function('', 'return 0;'), E_ALL);
should be updated to set_error_handler(function() { return 0; },
E_ALL);
● Return type declarations should be compatible with parent
○ The return types should be added where required:
■ public function count() { should be updated to public
function count(): int {
PHP 8 Upgrade Guide Helpful Tips / Links
● Pay attention to any breaking changes listed by your IDE!
○ PHPStorm
■ Breaking code: The breaking code is underlined in red and lists the error
when hovering over the offending code. The error window pane also lists
the breaking changes. Each error listed can be clicked on to go to the
area in the code that needs to be fixed.
■ Inspecting Code By PHP Version: You can select your active PHP
version in the IDE, then right-click on any file or directory and select
“Inspect Code” to get a full breakdown of all the warnings and errors for
that version of PHP on that code.
■ Exporting Inspected Code: The list of errors and warnings from the
inspected code analysis that you ran can be exported by clicking on the
Problems Pane, clicking on the Inspections tab that you ran against a file
or a directory, then clicking the Export button. It can be exported in either
HTML, XML, or Sarif. The HTML option produces a clean, easy to read
visual page.
● https://www.zend.com/blog/upgrading-php-8-2
● https://kinsta.com/blog/php-8-2/
List of Some of the Many Areas that Interact with Gravity Forms
There’s at least 1800 references to Gravity Forms throughout our codebase. Many repos or
plugins implement GF classes, APIs, or tests. The list below is not guaranteed to be an
exhaustive list and does not contain all the many ways that each one interacts with Gravity
Forms. As places are identified in the codebase that touch GF in some way, those should be
added to this list.
Note: There are many different kinds of interactions in the list below. Interaction types include,
but are not limited to: Wordpress plugins, DI WP infrastructure (such as dealerinspire-core),
external repositories (DI Training repos), and external systems (such as DI Dashboard).
Note: The WP Plugins that interact with gravityforms AND are contained in the
di-websites-platform repo in GitHub will be grouped in a separate spreadsheet in order to find
the number of sites using those plugins.
Interacts with Gravity Forms AND in DI Websites Platform in Github
Spreadsheet: List of Sites with Gravity Form Plugin Interactions
1. dealerinspire-mbca-integration
2. inventory
3. dealerinspire-gm-canada-integration
4. dealerinspire-conversations-v3
5. dealer-inspire-leaseoffer-plugin
6. dealerinspire-maserati-integration
7. gravity-forms-stripe
8. wpml-string-translation
9. dealerinspire-dealerrater
10.dealerinspire-lead-manifold
11.dealerinspire-infiniti-integration
12.dealerinspire-accutrade
13.gravityformssignature
14.di-roxanne
15.di-fixed-ops
16.di-special-offers
17.di-toyota-slp
18.dealerinspire
19.dealerinspire-volvo-ca-integration
20.di-ignition-one
21.dealerinspire-vw-canada-integration
22.di-gravityforms-multilingual
23.gravity-forms-no-captcha-recaptcha
24.dealerinspire-elead
25.kg-armada
26.gravityforms
27.di-google-events-plugin
28.dealerinspire-assets
29.dealerinspire-genesis-integration
30.vessel
31.wpml-translation-management
32.dealerinspire-audioeye
33.dealer-inspire-national-incentives-plugin
34.di-gravityforms
35.di-floodlight-tags
36.dealerinspire-jellyfish
37.dealerinspire-ford-integration
38.dealerinspire-image-library-plugin
39.dealerinspire-cookie-consent
40.dealerinspire-searchoptics-plugin
41.dealerinspire-admin-builder
42.di-glovebox
43.popup-maker
44.di-toyota-integration
45.dealerinspire-conversations
46.dealerinspire-inventory-display
47.di-shift-digital
48.di-group-garber
49.di-omniture-plugin
50.dealerinspire-subaru-integration
51.dealerinspire-marketo
52.di-porsche-integration
53.dealerinspire-gm-lead-routing
54.dealerinspire-mazda-integration
55.di-auditor
56.dealerinspire-lexus-integration
57.gravityforms-hubspot
58.dealerinspire-hyundai-integration
59.di-fca-integration
60.dealerinspire-alexbot
61.dealerinspire-mini-integration
62.gravity-forms-iframe
63.di-vehicle-configurator-plugin
64.tpreferral
65.dealerinspire-radar
66.Dealerinspire-marketplace
Interacts with Gravity Forms AND NOT in DI Websites Platform in Github
1. team_shell_scripts
2. dealerinspire-wp-plugin
3. di-training-wp-core
4. dealerinspire-harley-davidson-integration
5. dealer-inspire-plugin-scaffold
6. roxanne-core-api
7. dealerinspire-translation-management
8. form-assembly
9. roxanne-schema
10.dealerinspire-common-theme
11.dealerinspire-dashboard
12.dealerinspire-showroomlogicplugin
13.dealerinspire-pippityplugin
14.thedash-www
15.di-training-wp-plugins
16.dealerinspire-cypress-demo
17.caas-platform-wp-core
18.di-quiver-notebooks
19.dealerinspire-core
Full List of Known Interactions
The plugins in the list below that are highlighted in yellow are six high use plugins that are
installed on most dealer websites.
Some Gravity Forms Test Cases
1. dealerinspire/caas-platform-wp-core
○ GF API Class
○ GF CSS
2. dealerinspire/dealer-inspire-gm-lead-routing
○ GF Hooks
3. dealerinspire/dealer-inspire-glovebox
○ Reads GF fields
○ GF filters
4. dealerinspire/dealer-inspire-gravity-forms-multilingual
○ GF classes
5. dealerinspire/dealer-inspire-plugin-scaffold
○ Displays GF forms
6. dealerinspire/dealer-inspire-special-offers
○ GF modifications
7. dealerinspire/dealerinspire-admin-builder
○ 51 references
○ GF Tests
○ GF Data Source
○ GF Traits
○ GF Audit
○ Displays GF forms
8. dealerinspire/dealerinspire-accutrade
○ Displays GF forms
9. dealerinspire/dealerinspire-alexbot
○ Reads forms from GF
10.dealerinspire/dealerinspire-assets
○ GF SCSS
11. dealerinspire/dealerinspire-audioeye
○ Displays GF forms
12.dealerinspire/dealerinspire-common-theme
○ GF translations
○ GF Filters
13.dealerinspire/dealerinspire-conversationsplugin
○ GF classes
14.dealerinspire/dealerinspire-conversationsplugin-v3
○ GF classes
15.dealerinspire/dealerinspire-core
○ Not a WP plugin. This is part of the DI WP infrastructure.
○ GF migrations
○ Dev: All Sites
○ Prod: All Sites
16.dealerinspire/dealerinspire-cookie-consent
○ Displays GF forms
17.dealerinspire/dealerinspire-cypress-demo
○ GF tests
18.dealerinspire/dealerinspire-dashboard
○ Reads from submitted GF data on the websites in OEM Reports and APIs
19.dealerinspire/dealerinspire-dealerinspire-plugin
○ GF Tests
○ GF functions
20.dealerinspire/dealerinspire-dealerrater
○ GF classes
21.dealerinspire/dealerinspire-di-auditor
○ 10 references
○ Implements GF Hooks
○ GF Notifications
○ GF Hooks
22.dealerinspire/dealerinspire-elead
○ Displays GF forms
23.dealerinspire/dealerinspire-fca-integration
○ Reads GF data
24.dealerinspire/dealerinspire-ford-integration
○ Reads GF data
25.dealerinspire/dealerinspire-di-fixed-ops
○ GF classes
26.dealerinspire/dealerinspire-di-gravityforms
○ 12 references
○ GF tests
○ GF classes
27.dealerinspire/dealerinspire-genesis-integration
○ Reads GF data
28.dealerinspire/dealerinspire-gm-canada-integration
○ Reads GF data
29.dealerinspire/dealerinspire-gravityforms
○ Main GF plugin
30.dealerinspire/dealerinspire-harley-davidson-integration
○ Reads GF data
31.dealerinspire/dealerinspire-hyundai-integration
○ Reads GF data
32.dealerinspire/dealerinspire-image-library-plugin
○ GF tests
33.dealerinspire/dealerinspire-infiniti-integration
○ Reads GF data
34.dealerinspire/dealerinspire-inventory-display
○ 60 references
○ GF Tests
○ Reads GF Data
○ GF Traits
35.dealerinspire/dealerinspire-inventory-plugin
○ 43 references
○ Validates GF Feeds
○ GF Templates
○ GF Tests
○ GF CLI commands
36.dealerinspire/dealerinspire-jellyfish
○ GF Class and filters
37.dealerinspire/dealerinspire-lead-manifold
○ GF Tests
○ GF classes
38.dealerinspire/dealerinspire-leaseoffer-plugin
○ GF classes
39.dealerinspire/dealerinspire-lexus-integration
○ Reads GF data
40.dealerinspire/dealerinspire-marketo
○ GF class
○ GF Tests
41.dealerinspire/dealerinspire-marketplace
○ GF tests
○ Processes GF leads
42.dealerinspire/dealerinspire-maserati-integration
○ Reads GF data
43.dealerinspire/dealerinspire-mazda-integration
○ Reads GF data
44.dealerinspire/dealerinspire-mbca-integration
○ Reads GF data
45.dealerinspire/dealerinspire-mini-integration
○ Reads GF data
46.dealerinspire/dealerinspire-national-incentives-plugin
○ GF classes
47.dealerinspire/dealerinspire-omniture-plugin
○ GF form mapping
48.dealerinspire/dealerinspire-pippityplugin
○ Reads GF data
○ GF JS
49.dealerinspire/dealerinspire-porsche-integration
○ Reads GF data
50.dealerinspire/dealerinspire-radar
○ 3 references
○ Displays GF forms
51.dealerinspire/dealerinspire-roxanneplugin
○ GF actions
○ GF filters
52.dealerinspire/dealerinspire-searchoptics-plugin
○ Reads GF confirmation pages
53.dealerinspire/dealerinspire-showroomlogicplugin
○ Outputs GF JS
54.dealerinspire/dealerinspire-subaru-integration
○ Reads GF data
55.dealerinspire/dealerinspire-translation-management
○ Displays GF forms
56.dealerinspire/dealerinspire-volvo-canada-integration
○ Reads GF data
57.dealerinspire/dealerinspire-vw-canada-integration
○ Reads GF data
58.dealerinspire/dealerinspire-wp-plugin
○ Includes GF iframe ZIP file
59.dealerinspire/di-ignition-one
○ GF classes
60.dealerinspire/di-floodlight-tags
○ GF JS
61.dealerinspire/di-google-events-plugin
○ GF tests
62.dealerinspire/di-group-garber
○ GF classes
63.dealerinspire/di-quiver-notebooks
○ GF JS and JSON
64.dealerinspire/di-shift-digital
○ GF Tests
○ GF class
65.dealerinspire/di-toyota-integration
○ Reads GF data
66.dealerinspire/di-toyota-slp
○ GF tests
○ GF classes
67.dealerinspire/di-training-wp-core
○ GF Helper classes
○ GF API Class
○ GF Theme CSS
68.dealerinspire/di-training-wp-plugins
○ GF API Class
69.dealerinspire/di-vehicle-configurator-plugin
○ GF tests
70.dealerinspire/form-assembly
○ GF classes
○ Creates GF forms
71.dealerinspire/gravity-forms-no-captcha-recaptcha
○ GF classes
72.dealerinspire/kg-armada
○ GF filters
○ Gets GF forms
73.dealerinspire/roxanne-core-api
○ GF JS
74.dealerinspire/roxanne-schema
○ Has a GF schema
75.dealerinspire/team_shell_scripts
○ Adds GF patches for filters
76.dealerinspire/thedash-www
○ GF functions
○ GF translations
○ GF CSS
○ GF classes
77.dealerinspire/tp-referral-plugin
○ GF filters / hooks
78.dealerinspire/vessel
○ Uses GF forms
79.dealerinspire/wpml-string-translation
○ Translates GF
80.dealerinspire/wpml-translation-management
○ Translates GF
81.popup-maker
○ GF Classes
82.gravity-forms-stripe
○ GF classes
83.Gravityformssignature
○ GF classes
84.gravity-forms-iframe
○ GF classes
85.gravityforms-hubspot
○ GF classes