37% events-made-easy

Code Review | Events Made Easy

WordPress plugin Events Made Easy scored 37% from 54 tests.

About plugin

  • Plugin page: events-made-easy
  • Plugin version: 2.2.69
  • PHP compatiblity: 7.2+
  • PHP version: 7.4.16
  • WordPress compatibility: 5.2-5.9
  • WordPress version: 5.9.2
  • First release: Nov 6, 2011
  • Latest release: Mar 26, 2022
  • Number of updates: 5,749
  • Update frequency: every 0.7 days
  • Top authors: liedekef (100%)

Code review

54 tests

User reviews

109 reviews

Install metrics

6,000+ active / 892,985 total downloads

Benchmarks

Plugin footprint 29% from 16 tests

Installer Passed 1 test

🔺 Critical test (weight: 50) | Verifying that this plugin installs correctly without errors
This plugin's installer ran successfully

Server metrics [RAM: ▲10.67MB] [CPU: ▼235.29ms] 50% from 4 tests

Server-side resources used by Events Made Easy
Please take the time to fix the following items
  • RAM: You should keep total memory usage under 10MB (currently 14.00MB on /wp-admin/admin.php?page=eme-formfields)
  • Extra RAM: The extra memory usage must be under 5MB (currently 10.67MB on /wp-admin/admin.php?page=eme-formfields)
PageMemory (MB)CPU Time (ms)
Home /14.19 ▲10.68106.33 ▲54.69
Dashboard /wp-admin14.07 ▲10.6687.00 ▲53.65
Posts /wp-admin/edit.php14.36 ▲10.7289.58 ▲53.77
Add New Post /wp-admin/post-new.php17.60 ▲10.63167.75 ▼1,103.28
Media Library /wp-admin/upload.php14.02 ▲10.7294.74 ▲68.94
Categories /wp-admin/admin.php?page=eme-categories14.0088.71
Pending Bookings /wp-admin/admin.php?page=eme-registration-approval14.0076.91
Countries/states /wp-admin/admin.php?page=eme-countries14.0073.27
Memberships /wp-admin/admin.php?page=eme-memberships14.0376.95
Templates /wp-admin/admin.php?page=eme-templates14.0073.49
Approved Bookings /wp-admin/admin.php?page=eme-registration-seats14.0074.13
Cleanup actions /wp-admin/admin.php?page=eme-cleanup14.0074.29
Email management /wp-admin/admin.php?page=eme-emails14.0980.01
Groups /wp-admin/admin.php?page=eme-groups14.0386.16
Custom Fields /wp-admin/admin.php?page=eme-formfields14.0073.48

Server storage [IO: ▲21.19MB] [DB: ▲0.08MB] Passed 3 tests

Filesystem and database footprint
No storage issues were detected
Filesystem: 1,854 new files
Database: 24 new tables, 433 new options
New tables
wp_eme_payments
wp_eme_memberships
wp_eme_countries
wp_eme_states
wp_eme_templates
wp_eme_attendances
wp_eme_formfields
wp_eme_categories
wp_eme_events
wp_eme_members
...
New WordPress options
eme_redir_protected_pages_url
eme_braintree_button_label
eme_cancel_payment_line_format
eme_stay_on_edit_page
eme_cap_categories
eme_gdpr_approve_subject
eme_massmail_popup
eme_location_html_title_format
eme_cancel_rsvp_age
eme_sagepay_button_below
...

Browser metrics Passed 4 tests

An overview of browser requirements for Events Made Easy
Normal browser usage
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /4,087 ▲33317.27 ▲1.2418.42 ▲12.313.17 ▲0.43
Dashboard /wp-admin3,017 ▲1566.02 ▼0.18117.96 ▼26.66180.62 ▲14.47
Posts /wp-admin/edit.php2,807 ▲1193.13 ▼0.1265.46 ▼0.05144.49 ▲2.06
Add New Post /wp-admin/post-new.php1,977 ▲28725.88 ▲4.98469.12 ▲23.11189.49 ▲28.95
Media Library /wp-admin/upload.php1,825 ▲1275.55 ▲0.01129.96 ▼12.53205.26 ▲15.71
Categories /wp-admin/admin.php?page=eme-categories1,3004.2488.82129.69
Pending Bookings /wp-admin/admin.php?page=eme-registration-approval2,4055.77121.26178.73
Countries/states /wp-admin/admin.php?page=eme-countries1,2874.5065.70137.10
Memberships /wp-admin/admin.php?page=eme-memberships1,8177.03124.65149.23
Templates /wp-admin/admin.php?page=eme-templates1,7035.19101.28141.67
Approved Bookings /wp-admin/admin.php?page=eme-registration-seats2,4035.54107.83154.84
Cleanup actions /wp-admin/admin.php?page=eme-cleanup1,5124.2765.68138.19
Email management /wp-admin/admin.php?page=eme-emails4,10111.76265.14216.33
Groups /wp-admin/admin.php?page=eme-groups1,8777.42126.02143.02
Custom Fields /wp-admin/admin.php?page=eme-formfields1,8465.2698.82135.26

Uninstaller [IO: ▲21.18MB] [DB: ▲0.08MB] 0% from 4 tests

🔸 Tests weight: 35 | All plugins must uninstall correctly, removing their source code and extra database tables they might have created
Please fix the following items
  • This plugin did not uninstall without warnings or errors
    • > Compile error in wp-content/plugins/events-made-easy/events-manager.php+169
    Cannot redeclare eme_plugin_row_meta() (previously declared in wp-content/plugins/events-made-easy/events-manager.php:169)
  • Uninstaller has failed for this plugin, leaving 1,854 files (21.18MB) in the plugin directory
    • (new file) css/jquery-ui-theme-smoothness-1.11.3/images/ui-bg_glass_95_fef1ec_1x400.png
    • (new file) changelog.txt
    • (new file) css/eme.css
    • (new file) css/jquery-ui-theme-smoothness-1.11.3/images/ui-bg_glass_75_dadada_1x400.png
    • (new file) cli_mail.php
    • (new file) ExpressiveDate.php
    • (new file) css/jquery-ui-theme-smoothness-1.11.3/images/ui-bg_glass_55_fbf9ee_1x400.png
    • (new file) credits.txt
    • (new file) css/jquery-ui-theme-smoothness-1.11.3/images/ui-bg_glass_65_ffffff_1x400.png
    • (new file) css/jquery-ui-theme-smoothness-1.11.3/images/ui-bg_glass_75_e6e6e6_1x400.png
    • ...
  • The plugin did not uninstall successfully, leaving 24 tables in the database
    • wp_eme_states
    • wp_eme_answers
    • wp_eme_formfields
    • wp_eme_mqueue
    • wp_eme_countries
    • wp_eme_task_signups
    • wp_eme_events
    • wp_eme_discounts
    • wp_eme_people
    • wp_eme_memberships
    • ...
  • Zombie WordPress options detected upon uninstall: 434 options
    • eme_enable_notes_placeholders
    • eme_stripe_cost
    • eme_task_signup_format
    • eme_registration_userpending_email_body
    • eme_filter_form_format
    • eme_rsvp_mail_SMTPAuth
    • eme_legacypaypal_no_tax
    • eme_mollie_cost2
    • eme_backend_timeformat
    • eme_localize_price
    • ...

Smoke tests 50% from 4 tests

Server-side errors Passed 1 test

🔹 Test weight: 20 | Just a short smoke test targeting errors on the server (in the Apache logs)
Everything seems fine, however this is by no means an exhaustive test

SRP 0% from 2 tests

🔹 Tests weight: 20 | The single-responsibility principle applies for WordPress plugins as well - please make sure your PHP files perform no actions when accessed directly
Please fix the following
  • 84× PHP files perform the action of outputting non-empty strings when accessed directly (only 10 are shown):
    • > /wp-content/plugins/events-made-easy/payment_gateways/Mollie/2.39.0/vendor/mollie/mollie-api-php/examples/payments/update-payment.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/stripe/stripe-php-7.75.0/build.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/Mollie/2.39.0/vendor/mollie/mollie-api-php/examples/profiles/create-profile.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/sagepay/api/lib/classes/token.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/Mollie/2.39.0/vendor/mollie/mollie-api-php/examples/customers/create-customer.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/sagepay/api/lib/classes/server_api.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/stripe/stripe-php-7.75.0/update_certs.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/Mollie/2.39.0/vendor/mollie/mollie-api-php/examples/mandates/revoke-mandate.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/paypal/samples/CaptureIntentExamples/RunAll.php
    • > /wp-content/plugins/events-made-easy/payment_gateways/Mollie/2.39.0/vendor/mollie/mollie-api-php/examples/payments/refund-payment.php
  • 875× GET requests to PHP files have triggered server-side errors or warnings (only 10 are shown):
    • > PHP Fatal error
      Uncaught Error: Class 'Doctrine\\Common\\Cache\\CacheProvider' not found in wp-content/plugins/events-made-easy/payment_gateways/mercadopago/2.3.0/vendor/doctrine/cache/lib/Doctrine/Common/Cache/RedisCache.php:24
    • > PHP Fatal error
      Uncaught Error: Class 'Dompdf\\Positioner\\AbstractPositioner' not found in wp-content/plugins/events-made-easy/dompdf/1.2.0/src/Positioner/ListBullet.php:20
    • > PHP Fatal error
      require_once(): Failed opening required 'vendor/autoload.php' (include_path='.:/usr/share/php') in wp-content/plugins/events-made-easy/payment_gateways/mercadopago/2.3.0/vendor/mercadopago/dx-php/samples/index.php on line 3
    • > PHP Fatal error
      Uncaught Error: Class 'Braintree\\Instance' not found in wp-content/plugins/events-made-easy/payment_gateways/braintree/braintree_php-6.6.0/lib/Braintree/MerchantAccount/FundingDetails.php:12
    • > PHP Fatal error
      Uncaught Error: Class 'Doctrine\\Common\\Collections\\Expr\\ExpressionVisitor' not found in wp-content/plugins/events-made-easy/payment_gateways/mercadopago/2.3.0/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php:26
    • > PHP Fatal error
      Uncaught Error: Class 'Sabberworm\\CSS\\Value\\CSSFunction' not found in wp-content/plugins/events-made-easy/dompdf/1.2.0/lib/php-css-parser/src/Value/CalcFunction.php:9
    • > PHP Fatal error
      Uncaught Error: Class 'MercadoPago\\Entity' not found in wp-content/plugins/events-made-easy/payment_gateways/mercadopago/2.3.0/vendor/mercadopago/dx-php/src/MercadoPago/Entities/InstoreOrder.php:14
    • > PHP Fatal error
      Uncaught Error: Interface 'Doctrine\\Common\\Collections\\Expr\\Expression' not found in wp-content/plugins/events-made-easy/payment_gateways/mercadopago/2.3.0/vendor/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php:5
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\Service\\AbstractService' not found in wp-content/plugins/events-made-easy/payment_gateways/stripe/stripe-php-7.75.0/lib/Service/Terminal/ConnectionTokenService.php:7
    • > PHP Fatal error
      Uncaught Error: Class 'Mollie\\Api\\Endpoints\\CollectionEndpointAbstract' not found in wp-content/plugins/events-made-easy/payment_gateways/Mollie/2.39.0/vendor/mollie/mollie-api-php/src/Endpoints/ShipmentEndpoint.php:10

User-side errors Passed 1 test

🔹 Test weight: 20 | A shallow check that no browser errors were triggered
Everything seems fine on the user side

Optimizations

Plugin configuration 93% from 29 tests

readme.txt Passed 16 tests

The readme.txt file is important because it is parsed by WordPress.org for the public listing of your plugin
8 plugin tags: events, maps, payment gateways, drip content, locations...

events-made-easy/events-manager.php 85% from 13 tests

The principal PHP file in "Events Made Easy" v. 2.2.69 is loaded by WordPress automatically on each request
It is important to fix the following:
  • Main file name: It is recommended to name the main PHP file as the plugin slug ("events-made-easy.php" instead of "events-manager.php")
  • Description: Keep the plugin description shorter than 140 characters (currently 156 characters long)

Code Analysis 3% from 3 tests

File types 0% from 1 test

🔸 Test weight: 35 | Executable files are not allowed as they can serve as attack vectors
It is important to fix the following items
  • Do not distribute dangerous files with your plugin
    • .crt - Security Certificate in Firefox, IE, Chrome, Safari
      • wp-content/plugins/events-made-easy/payment_gateways/braintree/braintree_php-6.6.0/lib/ssl/api_braintreegateway_com.ca.crt
      • wp-content/plugins/events-made-easy/payment_gateways/stripe/stripe-php-7.75.0/data/ca-certificates.crt
184,405 lines of code in 1,619 files:
LanguageFilesBlank linesComment linesLines of code
PHP1,26725,23960,050138,216
JavaScript1584,7032,78724,494
CSS5238226211,963
Markdown431,72904,256
JSON42402,481
LESS20374971,760
reStructuredText13568705670
XML62217230
YAML11341196
SVG22054
Bourne Shell17536
make19027
HTML10017
INI1003
Ruby1002

PHP code 50% from 2 tests

Cyclomatic complexity and code structure are the fingerprint of this plugin
Please tend to the following items
  • Method cyclomatic complexity should be reduced to less than 100 (currently 651)
Cyclomatic complexity
Average complexity per logical line of code0.36
Average class complexity10.37
▷ Minimum class complexity1.00
▷ Maximum class complexity809.00
Average method complexity2.62
▷ Minimum method complexity1.00
▷ Maximum method complexity651.00
Code structure
Namespaces139
Interfaces70
Traits11
Classes1,070
▷ Abstract classes595.51%
▷ Concrete classes1,01194.49%
▷ Final classes474.65%
Methods6,844
▷ Static methods1,14216.69%
▷ Public methods5,71783.53%
▷ Protected methods6839.98%
▷ Private methods4446.49%
Functions1,322
▷ Named functions1,23693.49%
▷ Anonymous functions866.51%
Constants2,304
▷ Global constants2309.98%
▷ Class constants2,07490.02%
▷ Public constants2,05298.94%

Plugin size Passed 2 tests

Image compression Passed 2 tests

It is recommended to compress PNG files in your plugin to minimize bandwidth usage
68 PNG files occupy 0.34MB with 0.21MB in potential savings
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
images/denied-48.png3.72KB2.67KB▼ 28.31%
css/jquery-ui-theme-smoothness-1.11.3/images/ui-bg_glass_95_fef1ec_1x400.png0.32KB0.15KB▼ 54.82%
js/jtable-2.5.0/themes/basic/close.png3.27KB0.50KB▼ 84.78%
images/payment_gateways/payconiq/logo.png6.20KB3.10KB▼ 50.02%
js/jtable-2.5.0/themes/metro/delete.png3.09KB0.26KB▼ 91.51%