Benchmarks
Plugin footprint 65% from 16 tests
Installer Passed 1 test
🔺 Critical test (weight: 50) | The install procedure must perform silently
The plugin installed gracefully, with no errors
Server metrics [RAM: ▲0.22MB] [CPU: ▼2.64ms] Passed 4 tests
An overview of server-side resources used by Double Opt-In (Avada, Contact Form 7) - GDPR Ready
No issues were detected with server-side resource usage
Page | Memory (MB) | CPU Time (ms) |
---|---|---|
Home / | 3.67 ▲0.21 | 42.41 ▼1.85 |
Dashboard /wp-admin | 3.52 ▲0.22 | 50.69 ▲2.12 |
Posts /wp-admin/edit.php | 3.63 ▲0.28 | 49.38 ▲0.74 |
Add New Post /wp-admin/post-new.php | 6.12 ▲0.24 | 85.83 ▼5.86 |
Media Library /wp-admin/upload.php | 3.44 ▲0.22 | 34.16 ▼3.60 |
OptIn View /wp-admin/admin.php?page=f12-cf7-doubleoptin_optin_view | 3.38 | 33.31 |
Categories /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories | 3.41 | 32.63 |
Settings /wp-admin/admin.php?page=f12-cf7-doubleoptin_settings | 3.41 | 31.39 |
Database /wp-admin/admin.php?page=f12-cf7-doubleoptin_database | 3.41 | 31.63 |
Category View /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories_view | 3.38 | 32.15 |
Dashboard /wp-admin/admin.php?page=f12-cf7-doubleoptin | 3.50 | 30.87 |
Server storage [IO: ▲0.55MB] [DB: ▲0.00MB] Passed 3 tests
How much does this plugin use your filesystem and database?
This plugin installed successfully
Filesystem: 64 new files
Database: 2 new tables, 8 new options
New tables |
---|
wp_f12_cf7_doubleoptin_categories |
wp_f12_cf7_doubleoptin |
New WordPress options |
---|
widget_theysaidso_widget |
widget_recent-posts |
f12-cf7-doubleoptin_version |
widget_recent-comments |
theysaidso_admin_options |
can_compress_scripts |
db_upgraded |
recovery_mode_email_last_sent |
Browser metrics Passed 4 tests
An overview of browser requirements for Double Opt-In (Avada, Contact Form 7) - GDPR Ready
This plugin renders optimally with no browser resource issues detected
Page | Nodes | Memory (MB) | Script (ms) | Layout (ms) |
---|---|---|---|---|
Home / | 2,865 ▲130 | 13.43 ▼1.03 | 1.78 ▼0.08 | 44.81 ▼4.22 |
Dashboard /wp-admin | 2,268 ▲77 | 5.23 ▼0.65 | 111.96 ▼13.43 | 42.53 ▼4.67 |
Posts /wp-admin/edit.php | 2,151 ▲62 | 2.31 ▲0.31 | 39.82 ▼0.52 | 36.62 ▲0.34 |
Add New Post /wp-admin/post-new.php | 1,569 ▲36 | 23.01 ▲0.02 | 639.49 ▼60.10 | 34.63 ▼24.74 |
Media Library /wp-admin/upload.php | 1,447 ▲62 | 4.49 ▲0.32 | 99.96 ▼4.65 | 43.70 ▼1.94 |
OptIn View /wp-admin/admin.php?page=f12-cf7-doubleoptin_optin_view | 787 | 1.53 | 10.44 | 22.65 |
Categories /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories | 946 | 1.84 | 27.90 | 28.76 |
Settings /wp-admin/admin.php?page=f12-cf7-doubleoptin_settings | 1,346 | 1.87 | 27.49 | 29.61 |
Database /wp-admin/admin.php?page=f12-cf7-doubleoptin_database | 942 | 1.82 | 24.17 | 25.86 |
Category View /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories_view | 785 | 1.53 | 9.47 | 19.59 |
Dashboard /wp-admin/admin.php?page=f12-cf7-doubleoptin | 1,071 | 1.83 | 22.80 | 28.47 |
Uninstaller [IO: ▲0.00MB] [DB: ▲0.00MB] 50% from 4 tests
🔸 Tests weight: 35 | Verifying that this plugin uninstalls completely without leaving any traces
These items require your attention
- The uninstall procedure failed, leaving 2 tables in the database
- wp_f12_cf7_doubleoptin
- wp_f12_cf7_doubleoptin_categories
- Zombie WordPress options were found after uninstall: 8 options
- theysaidso_admin_options
- widget_theysaidso_widget
- widget_recent-comments
- widget_recent-posts
- f12-cf7-doubleoptin_version
- recovery_mode_email_last_sent
- can_compress_scripts
- db_upgraded
Smoke tests 50% from 4 tests
Server-side errors 0% from 1 test
🔹 Test weight: 20 | A shallow check that no server-side errors were triggered
Smoke test failed, please fix the following
- 8 occurences, only the last one shown
- > GET request to /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories_view
- > Warning in wp-includes/pluggable.php+1438
Cannot modify header information - headers already sent by (output started at wp-includes/script-loader.php:2838)
- > GET request to /wp-admin/admin.php?page=f12-cf7-doubleoptin_optin_view
- > Notice in wp-content/plugins/double-opt-in/ui/UIOptinView.class.php+61
Undefined index: hash
- > GET request to /wp-admin/admin.php?page=f12-cf7-doubleoptin_optin_view
- > Error in wp-content/plugins/double-opt-in/ui/UIOptinView.class.php+76
Uncaught Error: Call to a member function get_hash() on null in wp-content/plugins/double-opt-in/ui/UIOptinView.class.php:76
Stack trace:
#0 wp-content/plugins/double-opt-in/core/UIPage.class.php(121): forge12\contactform7\CF7DoubleOptIn\UIOptinView->theContent()
#1 wp-includes/class-wp-hook.php(310): forge12\contactform7\CF7DoubleOptIn\UIPage->renderContent()
#2 wp-includes/class-wp-hook.php(334): WP_Hook->apply_filters()
#3 wp-includes/plugin.php(517): WP_Hook->do_action()
#4 wp-content/plugins/double-opt-in/core/UI.class.php(298): do_action()
#5 wp-content/plugins/double-opt-in/core/UI.class.php(240): forge12\contactform7\CF7DoubleOptIn\UI->render()
#6 wp-includes/class-wp-hook.php(310): forge12\contactform7\CF7DoubleOptIn\UI->forge12\contactform7\CF7DoubleOptIn\{closure}()
#7 wp-includes/class-wp-hook.php(334): WP_Hook->apply_filters()
#- > GET request to /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories_view
- > Notice in wp-content/plugins/double-opt-in/ui/UICategoriesView.class.php+80
Undefined index: id
- > GET request to /wp-admin/admin.php?page=f12-cf7-doubleoptin_categories_view
- > Error in wp-content/plugins/double-opt-in/ui/UICategoriesView.class.php+110
Uncaught Error: Call to a member function get_id() on null in wp-content/plugins/double-opt-in/ui/UICategoriesView.class.php:110
Stack trace:
#0 wp-content/plugins/double-opt-in/core/UIPage.class.php(121): forge12\contactform7\CF7DoubleOptIn\UICategoriesView->theContent()
#1 wp-includes/class-wp-hook.php(310): forge12\contactform7\CF7DoubleOptIn\UIPage->renderContent()
#2 wp-includes/class-wp-hook.php(334): WP_Hook->apply_filters()
#3 wp-includes/plugin.php(517): WP_Hook->do_action()
#4 wp-content/plugins/double-opt-in/core/UI.class.php(298): do_action()
#5 wp-content/plugins/double-opt-in/core/UI.class.php(240): forge12\contactform7\CF7DoubleOptIn\UI->render()
#6 wp-includes/class-wp-hook.php(310): forge12\contactform7\CF7DoubleOptIn\UI->forge12\contactform7\CF7DoubleOptIn\{closure}()
#7 wp-includes/class-wp-hook.php(334): WP_Hook->apply_fi
SRP 50% from 2 tests
🔹 Tests weight: 20 | It is important to ensure that your PHP files perform no action when accessed directly, respecting the single-responsibility principle
Please take a closer look at the following
- 2× PHP files trigger server errors when accessed directly:
- > PHP Fatal error
Uncaught Error: Call to undefined function esc_attr_e() in wp-content/plugins/double-opt-in/templates/list-optins.php:11
- > PHP Fatal error
Uncaught Error: Call to undefined function maybe_unserialize() in wp-content/plugins/double-opt-in/templates/view-optin.php:6
- > PHP Fatal error
User-side errors Passed 1 test
🔹 Test weight: 20 | This is a smoke test targeting browser errors/issues
No browser issues were found
Optimizations
Plugin configuration 86% from 29 tests
readme.txt 81% from 16 tests
Often overlooked, readme.txt is one of the most important files in your plugin
These attributes need to be fixed:
- Requires php: Version format is invalid
- Screenshots: These screenshots lack descriptions #1, #2, #3, #4, #5, #6, #7, #8 in double-opt-in/assets to your readme.txt
- Requires at least: Version format is invalid
double-opt-in/CF7DoubleOptIn.class.php 92% from 13 tests
The primary PHP file in "Double Opt-In (Avada, Contact Form 7) - GDPR Ready" version 2.15 is used by WordPress to initiate all plugin functionality
The following require your attention:
- Main file name: The principal plugin file should be the same as the plugin slug ("double-opt-in.php" instead of "CF7DoubleOptIn.class.php")
Code Analysis Passed 3 tests
File types Passed 1 test
🔸 Test weight: 35 | Executable files are not allowed as they can serve as attack vectors
Good job! No executable or dangerous file extensions detected6,292 lines of code in 51 files:
Language | Files | Blank lines | Comment lines | Lines of code |
---|---|---|---|---|
PHP | 35 | 788 | 1,399 | 4,065 |
PO File | 2 | 256 | 304 | 760 |
JavaScript | 6 | 45 | 29 | 621 |
HTML | 4 | 57 | 30 | 445 |
CSS | 4 | 84 | 46 | 401 |
PHP code Passed 2 tests
A brief analysis of cyclomatic complexity and code structure for this plugin
No complexity issues detected
Cyclomatic complexity | |
---|---|
Average complexity per logical line of code | 0.33 |
Average class complexity | 12.52 |
▷ Minimum class complexity | 1.00 |
▷ Maximum class complexity | 45.00 |
Average method complexity | 2.60 |
▷ Minimum method complexity | 1.00 |
▷ Maximum method complexity | 12.00 |
Code structure | ||
---|---|---|
Namespaces | 2 | |
Interfaces | 0 | |
Traits | 0 | |
Classes | 33 | |
▷ Abstract classes | 2 | 6.06% |
▷ Concrete classes | 31 | 93.94% |
▷ Final classes | 0 | 0.00% |
Methods | 242 | |
▷ Static methods | 18 | 7.44% |
▷ Public methods | 176 | 72.73% |
▷ Protected methods | 21 | 8.68% |
▷ Private methods | 45 | 18.60% |
Functions | 12 | |
▷ Named functions | 6 | 50.00% |
▷ Anonymous functions | 6 | 50.00% |
Constants | 3 | |
▷ Global constants | 3 | 100.00% |
▷ Class constants | 0 | 0.00% |
▷ Public constants | 0 | 0.00% |
Plugin size Passed 2 tests
Image compression Passed 2 tests
Using a strong compression for your PNG files is a great way to speed-up your plugin
6 PNG files occupy 0.11MB with 0.07MB in potential savings
Potential savings
Compression of 5 random PNG files using pngquant | |||
---|---|---|---|
File | Size - original | Size - compressed | Savings |
mails/newsletter_en_3.png | 28.52KB | 10.18KB | ▼ 64.32% |
mails/blank.png | 3.24KB | 0.73KB | ▼ 77.36% |
core/assets/logo-forge12.png | 10.04KB | 3.91KB | ▼ 61.10% |
core/assets/logo-forge12-dark.png | 18.66KB | 6.28KB | ▼ 66.37% |
mails/newsletter_en_2.png | 20.38KB | 8.76KB | ▼ 57.01% |