55% funnelforms-free

Code Review | Interactive Contact Form and Multi Step Form Builder with Drag & Drop Editor - Funnelforms Free

WordPress plugin Interactive Contact Form and Multi Step Form Builder with Drag & Drop Editor - Funnelforms Free scored55%from 54 tests.

About plugin

  • Plugin page: funnelforms-free
  • Plugin version: 3.5.3.1
  • PHP compatiblity: 7.4+
  • PHP version: 7.4.16
  • WordPress compatibility: 5.0-6.3
  • WordPress version: 6.3.1
  • First release: Dec 14, 2022
  • Latest release: Nov 24, 2023
  • Number of updates: 40
  • Update frequency: every 8.6 days
  • Top authors: funnelforms (100%)

Code review

54 tests

User reviews

13 reviews

Install metrics

1,000+ active /11,451 total downloads

Benchmarks

Plugin footprint 64% from 16 tests

Installer Passed 1 test

🔺 Critical test (weight: 50) | All plugins must install correctly, without throwing any errors, warnings, or notices
This plugin's installer ran successfully

Server metrics [RAM: ▲5.93MB] [CPU: ▲38.49ms] 50% from 4 tests

An overview of server-side resources used by Interactive Contact Form and Multi Step Form Builder with Drag & Drop Editor - Funnelforms Free
It is recommended to improve the following
  • CPU: Try to keep total CPU usage under 500.00ms (currently 1,692.57ms on /wp-admin/admin.php?page=funnelforms-free)
  • Extra RAM: Try to keep extra memory usage under 5MB (currently 5.93MB on /wp-admin/admin.php?page=funnelforms-free)
PageMemory (MB)CPU Time (ms)
Home /9.30 ▲5.8472.95 ▲34.30
Dashboard /wp-admin9.28 ▲5.9788.82 ▲38.64
Posts /wp-admin/edit.php9.33 ▲5.9793.90 ▲44.98
Add New Post /wp-admin/post-new.php11.83 ▲5.94127.94 ▲36.10
Media Library /wp-admin/upload.php9.23 ▲6.0078.93 ▲44.90
Contact forms /wp-admin/edit.php?post_type=af2_kontaktformular9.2370.70
First steps /wp-admin/admin.php?page=af2_checklist9.2366.49
Contact forms /wp-admin/admin.php?page=af2_kontaktformulare9.2379.49
Affiliate program /wp-admin/admin.php?page=af2_partnerprogramm9.2362.56
Form preview /wp-admin/admin.php?page=af2_formularbuilder_preview9.2370.74
Demo import /wp-admin/admin.php?page=af2_demo_import9.2381.13
Appointment events /wp-admin/admin.php?page=af2_terminevents9.2471.74
Forms /wp-admin/admin.php?page=af2_formulare9.2372.12
Appointments /wp-admin/admin.php?page=af2_termine9.2371.92
Funnelforms Free /wp-admin/admin.php?page=funnelforms-free9.421,692.57

Server storage [IO: ▲12.44MB] [DB: ▲0.00MB] Passed 3 tests

How much does this plugin use your filesystem and database?
The plugin installed successfully
Filesystem: 437 new files
Database: no new tables, 20 new options
New WordPress options
af2_question_categories
fs_accounts
widget_recent-comments
widget_theysaidso_widget
theysaidso_admin_options
checklist_shortcode
checklist_question
can_compress_scripts
af2_verification_codes
fs_debug_mode
...

Browser metrics Passed 4 tests

Interactive Contact Form and Multi Step Form Builder with Drag & Drop Editor - Funnelforms Free: an overview of browser usage
Normal browser usage
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /2,919 ▲15714.68 ▲0.421.52 ▼0.1929.41 ▼17.01
Dashboard /wp-admin2,300 ▲1205.55 ▼0.0796.79 ▲3.2198.32 ▲50.05
Posts /wp-admin/edit.php2,227 ▲1272.13 ▲0.1238.68 ▼6.7835.62 ▲1.43
Add New Post /wp-admin/post-new.php1,616 ▲9022.13 ▼0.88782.65 ▲131.4148.88 ▼4.58
Media Library /wp-admin/upload.php1,520 ▲1234.19 ▼0.0699.32 ▲0.1476.16 ▲34.10
Contact forms /wp-admin/edit.php?post_type=af2_kontaktformular1,1871.9438.6429.17
First steps /wp-admin/admin.php?page=af2_checklist1,6945.4960.8392.92
Contact forms /wp-admin/admin.php?page=af2_kontaktformulare1,7145.8164.9087.18
Affiliate program /wp-admin/admin.php?page=af2_partnerprogramm2,3125.5673.1182.54
Form preview /wp-admin/admin.php?page=af2_formularbuilder_preview1,0591.8828.5862.86
Demo import /wp-admin/admin.php?page=af2_demo_import1,5732.1328.3276.86
Appointment events /wp-admin/admin.php?page=af2_terminevents1,6596.3452.4766.53
Forms /wp-admin/admin.php?page=af2_formulare1,6466.2748.0142.34
Appointments /wp-admin/admin.php?page=af2_termine1,6706.2952.8264.20
Funnelforms Free /wp-admin/admin.php?page=funnelforms-free1,0771.8826.9464.09

Uninstaller [IO: ▲0.00MB] [DB: ▲0.00MB] 50% from 4 tests

🔸 Tests weight: 35 | Verifying that this plugin uninstalls completely without leaving any traces
You still need to fix the following
  • Uninstall procedure validation failed for this plugin
    • > Notice in wp-content/plugins/funnelforms-free/freemius/includes/class-freemius.php+8486
    Undefined property: stdClass::$plugins
  • This plugin does not fully uninstall, leaving 20 options in the database
    • fs_active_plugins
    • checklist_form
    • fs_debug_mode
    • af2_free_version
    • af2_version
    • theysaidso_admin_options
    • af2_categories
    • widget_recent-posts
    • widget_recent-comments
    • af2_verification_codes
    • ...

Smoke tests 0% from 4 tests

Server-side errors 0% from 1 test

🔹 Test weight: 20 | A shallow check that no server-side errors were triggered
These server-side errors were triggered
    • > GET request to /wp-admin/admin.php?page=af2_checklist
    • > Notice in wp-content/plugins/funnelforms-free/admin/Healthcheck.php+125
    Undefined variable: currentPluginVersion
    • > GET request to /wp-admin/admin.php?page=af2_kontaktformulare
    • > Notice in wp-content/plugins/funnelforms-free/admin/views/menu/menu_types/table.php+226
    Undefined property: Fnsf_Af2Kontaktformulare::$pagination
  • 4 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=af2_formularbuilder_preview
    • > Notice in wp-content/plugins/funnelforms-free/admin/views/builder_templates/formularbuilder/preview.php+3
    Undefined index: id
    • > GET request to /wp-admin/admin.php?page=af2_terminevents
    • > Notice in wp-content/plugins/funnelforms-free/admin/views/menu/menu_types/table.php+226
    Undefined property: Fnsf_Af2Terminevent::$pagination
    • > GET request to /wp-admin/admin.php?page=af2_formulare
    • > Notice in wp-content/plugins/funnelforms-free/admin/views/menu/menu_types/table.php+226
    Undefined property: Fnsf_Af2Formulare::$pagination
    • > GET request to /wp-admin/admin.php?page=af2_termine
    • > Notice in wp-content/plugins/funnelforms-free/admin/views/menu/menu_types/table.php+226
    Undefined property: Fnsf_Af2Termine::$pagination

SRP 0% from 2 tests

🔹 Tests weight: 20 | SRP (Single-Responsibility Principle) - PHP files must act as libraries and never output text or perform any action when accessed directly in a browser
Almost there! Just fix the following items
  • 10× GET requests to PHP files return non-empty strings:
    • > /wp-content/plugins/funnelforms-free/admin/Admin.php
    • > /wp-content/plugins/funnelforms-free/admin/views/menu/custom_menus/demoimport.php
    • > /wp-content/plugins/funnelforms-free/admin/views/menu/snippets/action_buttons.php
    • > /wp-content/plugins/funnelforms-free/admin/views/menu/snippets/hooks.php
    • > /wp-content/plugins/funnelforms-free/admin/views/menu/custom_menus/integrationen.php
    • > /wp-content/plugins/funnelforms-free/admin/views/builder_templates/fragenbuilder/multiselect.php
    • > /wp-content/plugins/funnelforms-free/admin/views/builder_templates/kontaktformularbuilder/general.php
    • > /wp-content/plugins/funnelforms-free/admin/views/builder_templates/fragenbuilder/textrow.php
    • > /wp-content/plugins/funnelforms-free/admin/views/builder_templates/fragenbuilder/textarea.php
    • > /wp-content/plugins/funnelforms-free/admin/views/builder_templates/fragenbuilder/general.php
  • 182× PHP files trigger errors when accessed directly with GET requests (only 10 are shown):
    • > PHP Warning
      Use of undefined constant AF2F_PLUGIN_DIR - assumed 'AF2F_PLUGIN_DIR' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/misc/constants.php on line 74
    • > PHP Warning
      Use of undefined constant AF2F_PLUGIN_DIR - assumed 'AF2F_PLUGIN_DIR' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/misc/constants.php on line 35
    • > PHP Warning
      Use of undefined constant FNSF_AF2_MENU_PARENTS_CLASS - assumed 'FNSF_AF2_MENU_PARENTS_CLASS' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/admin/menus/physical_menus/Formularbuilder_settings.php on line 3
    • > PHP Warning
      Use of undefined constant AF2F_PLUGIN_DIR - assumed 'AF2F_PLUGIN_DIR' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/misc/constants.php on line 23
    • > PHP Warning
      Use of undefined constant AF2F_PLUGIN_DIR - assumed 'AF2F_PLUGIN_DIR' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/misc/constants.php on line 98
    • > PHP Warning
      Use of undefined constant AF2F_PLUGIN_DIR - assumed 'AF2F_PLUGIN_DIR' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/misc/constants.php on line 19
    • > PHP Warning
      Use of undefined constant FNSF_AF2_MENU_PARENTS_CLASS - assumed 'FNSF_AF2_MENU_PARENTS_CLASS' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/admin/menus/physical_menus/Import.php on line 3
    • > PHP Warning
      Use of undefined constant FNSF_AF2_MENU_PARENTS_CLASS - assumed 'FNSF_AF2_MENU_PARENTS_CLASS' (this will throw an Error in a future version of PHP) in wp-content/plugins/funnelforms-free/admin/menus/physical_menus/Kontaktformularbuilder_settings.php on line 3
    • > PHP Fatal error
      require_once(): Failed opening required 'FNSF_AF2_MENU_PARENTS_CLASS' (include_path='.:/usr/share/php') in wp-content/plugins/funnelforms-free/admin/menus/physical_menus/Kontaktformulare.php on line 3
    • > PHP Fatal error
      require_once(): Failed opening required 'FNSF_AF2_MENU_PARENTS_CLASS' (include_path='.:/usr/share/php') in wp-content/plugins/funnelforms-free/admin/menus/physical_menus/Fragen.php on line 3

User-side errors 0% from 1 test

🔹 Test weight: 20 | This is just a short smoke test looking for browser issues
These are user-side errors you should fix
    • > GET request to /wp-admin/admin.php?page=af2_kontaktformulare
    • > Other (warning) in unknown
    /wp-admin/admin.php?page=af2_kontaktformulare 274 Allow attribute will take precedence over 'allowfullscreen'.
    • > GET request to /wp-admin/admin.php?page=af2_terminevents
    • > Other (warning) in unknown
    /wp-admin/admin.php?page=af2_terminevents 264 Allow attribute will take precedence over 'allowfullscreen'.
    • > GET request to /wp-admin/admin.php?page=af2_formulare
    • > Other (warning) in unknown
    /wp-admin/admin.php?page=af2_formulare 266 Allow attribute will take precedence over 'allowfullscreen'.
    • > GET request to /wp-admin/admin.php?page=af2_termine
    • > Other (warning) in unknown
    /wp-admin/admin.php?page=af2_termine 269 Allow attribute will take precedence over 'allowfullscreen'.

Optimizations

Plugin configuration 93% from 29 tests

readme.txt Passed 16 tests

The readme.txt file describes your plugin functionality and requirements and it is parsed to prepare the your plugin's listing
5 plugin tags: quiz, funnel, form, multi step form, contact form

funnelforms-free/Funnelforms-free.php 85% from 13 tests

This is the main PHP file of "Interactive Contact Form and Multi Step Form Builder with Drag & Drop Editor - Funnelforms Free" version 3.5.3.1, providing information about the plugin in the header fields and serving as the principal entry point to the plugin's functions
Please take the time to fix the following:
  • Main file name: Even though not officially enforced, the main plugin file should be the same as the plugin slug ("funnelforms-free.php" instead of "Funnelforms-free.php")
  • Description: Please keep the plugin description shorter than 140 characters (currently 455 characters long)

Code Analysis 97% from 3 tests

File types Passed 1 test

🔸 Test weight: 35 | A short review of files and their extensions; it is not recommended to include executable files
Good job! No executable or dangerous file extensions detected92,692 lines of code in 272 files:
LanguageFilesBlank linesComment linesLines of code
PHP1879,35517,68143,440
PO File87,5174,23315,182
CSS392,81113912,524
JavaScript301,5691,12811,561
SVG3009,552
Markdown31070324
JSON210109

PHP code 50% from 2 tests

An short overview of logical lines of code, cyclomatic complexity, and other code metrics
Please tend to the following items
  • Class cyclomatic complexity should be reduced to less than 1000 (currently 3,073)
Cyclomatic complexity
Average complexity per logical line of code0.52
Average class complexity63.04
▷ Minimum class complexity1.00
▷ Maximum class complexity3,073.00
Average method complexity4.26
▷ Minimum method complexity1.00
▷ Maximum method complexity94.00
Code structure
Namespaces0
Interfaces0
Traits0
Classes80
▷ Abstract classes67.50%
▷ Concrete classes7492.50%
▷ Final classes00.00%
Methods1,566
▷ Static methods21013.41%
▷ Public methods93559.71%
▷ Protected methods25015.96%
▷ Private methods38124.33%
Functions161
▷ Named functions15696.89%
▷ Anonymous functions53.11%
Constants264
▷ Global constants21782.20%
▷ Class constants4717.80%
▷ Public constants47100.00%

Plugin size 50% from 2 tests

Image compression 50% from 2 tests

Often times overlooked, PNG files can occupy unnecessary space in your plugin
33 PNG files occupy 0.58MB with 0.29MB in potential savings
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
res/images/question_types/text_area.png3.30KB1.13KB▼ 65.85%
res/images/menu_icon.png1.72KB1.05KB▼ 39.15%
freemius/img/plugin-icon.png9.16KB5.26KB▼ 42.58%
res/images/contact_form_types/email_type.png3.35KB1.23KB▼ 63.38%
res/images/logo-white.png18.92KB11.16KB▼ 41.00%