52% all-in-one-event-calendar

Code Review | Timely All-in-One Events Calendar

WordPress plugin Timely All-in-One Events Calendar scored52%from 54 tests.

About plugin

  • Plugin page: all-in-one-event-...
  • Plugin version: 3.0.1
  • PHP compatiblity: 7.2+
  • PHP version: 7.4.16
  • WordPress compatibility: 5.0-6.3
  • WordPress version: 6.3.1
  • First release: Sep 9, 2011
  • Latest release: Sep 12, 2023
  • Number of updates: 454
  • Update frequency: every 9.7 days
  • Top authors: calvinyeh (49.78%)jbutkus (17.4%)yani.iliev (12.33%)theseed (11.89%)nicola.peluchetti (4.85%)

Code review

54 tests

User reviews

1657 reviews

Install metrics

70,000+ active /3,799,549 total downloads

Benchmarks

Plugin footprint 65% from 16 tests

Installer Passed 1 test

🔺 Critical test (weight: 50) | It is important to correctly install your plugin, without throwing errors or notices
The plugin installed successfully, without throwing any errors or notices

Server metrics [RAM: ▲0.74MB] [CPU: ▲191.21ms] Passed 4 tests

This is a short check of server-side resources used by Timely All-in-One Events Calendar
This plugin has minimal impact on server resources
PageMemory (MB)CPU Time (ms)
Home /4.18 ▲0.7247.59 ▲4.84
Dashboard /wp-admin4.05 ▲0.75306.86 ▲252.56
Posts /wp-admin/edit.php4.16 ▲0.81300.47 ▲245.25
Add New Post /wp-admin/post-new.php6.65 ▲0.77362.60 ▲262.18
Media Library /wp-admin/upload.php3.97 ▲0.75814.05 ▲781.16
Sign In /wp-admin/admin.php?page=timely_signin3.95287.06

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

Filesystem and database footprint
There were no storage issued detected upon installing this plugin
Filesystem: 1,588 new files
Database: no new tables, 6 new options
New WordPress options
widget_recent-posts
db_upgraded
widget_recent-comments
theysaidso_admin_options
can_compress_scripts
widget_theysaidso_widget

Browser metrics Passed 4 tests

A check of browser resources used by Timely All-in-One Events Calendar
Minimal impact on browser resources
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /2,982 ▲22114.66 ▲0.0441.80 ▲40.0843.77 ▲2.49
Dashboard /wp-admin2,220 ▲465.56 ▼0.0884.95 ▼7.8270.22 ▲27.09
Posts /wp-admin/edit.php2,140 ▲401.98 ▲0.0137.35 ▼1.3133.90 ▼2.56
Add New Post /wp-admin/post-new.php1,564 ▲3323.28 ▲0.35692.89 ▲53.9855.94 ▲5.58
Media Library /wp-admin/upload.php1,437 ▲404.21 ▼0.0099.01 ▼6.5677.42 ▲30.77
Sign In /wp-admin/admin.php?page=timely_signin92117.53398.5920.67

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

🔸 Tests weight: 35 | Checking the uninstaller removed all traces of the plugin
These items require your attention
  • Uninstall procedure validation failed for this plugin
    • > Notice in wp-content/plugins/all-in-one-event-calendar/uninstall.php+26
    Trying to get property 'term_id' of non-object
  • Zombie WordPress options detected upon uninstall: 6 options
    • theysaidso_admin_options
    • widget_recent-comments
    • widget_theysaidso_widget
    • db_upgraded
    • widget_recent-posts
    • can_compress_scripts

Smoke tests 25% from 4 tests

Server-side errors Passed 1 test

🔹 Test weight: 20 | A shallow check that no server-side errors were triggered
Even though everything seems fine, this is not an exhaustive test

SRP 0% 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
Almost there! Just fix the following items
  • 8× PHP files output text when accessed directly:
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/save_successful.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/subscription_button.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/plugins/general_plugin_settings.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/add_new_event_meta_box.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/box_inline_warning.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/admin_notices.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/plugins/render_opening_div.php
    • > /wp-content/plugins/all-in-one-event-calendar/public/admin/save_error.php
  • 1612× GET requests to PHP files have triggered server-side errors or warnings (only 10 are shown):
    • > PHP Notice
      Undefined variable: msg in wp-content/plugins/all-in-one-event-calendar/public/admin/admin_notices.php on line 8
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 1472
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 431
    • > PHP Fatal error
      Uncaught Error: Class 'Composer\\Installers\\BaseInstaller' not found in wp-content/plugins/all-in-one-event-calendar/apiki/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php:4
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 2538
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 6432
    • > PHP Fatal error
      Uncaught Error: Interface 'Twig_TokenParserInterface' not found in wp-content/plugins/all-in-one-event-calendar/vendor/twig/TokenParser.php:17
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 2766
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 1047
    • > PHP Warning
      Use of undefined constant AI1EC_PATH - assumed 'AI1EC_PATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/all-in-one-event-calendar/lib/bootstrap/loader-map.php on line 4797

User-side errors 0% from 1 test

🔹 Test weight: 20 | Just a short smoke test targeting errors on the browser (console and network errors and warnings)
Please take a look at the following user-side issues
    • > GET request to /wp-admin/admin.php?page=timely_signin
    • > Security (severe) in unknown
    https://app.time.ly/main-es2015.771cfb7e6e69c244c2dd.js 0 Blocked autofocusing on a element in a cross-origin subframe.

Optimizations

Plugin configuration 93% from 29 tests

readme.txt 94% from 16 tests

Often overlooked, readme.txt is one of the most important files in your plugin
These attributes need to be fixed:
  • Screenshots: These screenshots require images: #13 (Events admin creation), #14 (Filters: categories, tags, venues and organizers), #15 (Import Events: calendar feed, upload and event finder), #16 (RSVP/Ticket Add-On: Reports for Tickets & Invoices)
The official readme.txt might help

all-in-one-event-calendar/all-in-one-event-calendar.php 92% from 13 tests

The main PHP file in "Timely All-in-One Events Calendar" ver. 3.0.1 adds more information about the plugin and also serves as the entry point for this plugin
It is important to fix the following:
  • Description: Please keep the plugin description shorter than 140 characters (currently 147 characters long)

Code Analysis 3% from 3 tests

File types 0% from 1 test

🔸 Test weight: 35 | This is an overview of programming languages used in this plugin; dangerous file extensions are not allowed
Almost there! Just fix the following issues
  • Do not distribute dangerous files with your plugin
    • .bat - Batch File in Windows
      • wp-content/plugins/all-in-one-event-calendar/public/admin/less/build-css.bat
182,995 lines of code in 1,239 files:
LanguageFilesBlank linesComment linesLines of code
PHP7928,99830,83775,490
PO File4133,24435,89770,110
LESS821,6451,98012,641
CSS27831678,770
HTML2738468,294
Twig7714952,636
Markdown1437601,786
SVG400998
JSON1000883
JavaScript1702732,083642
Sass910139552
XML44092
YAML49066
Bourne Shell261329
DOS Batch1006

PHP code 50% from 2 tests

This is a very shot review of cyclomatic complexity and code structure
It is recommended to fix the following
  • Method cyclomatic complexity should be reduced to less than 100 (currently 144)
Cyclomatic complexity
Average complexity per logical line of code0.43
Average class complexity13.22
▷ Minimum class complexity1.00
▷ Maximum class complexity424.00
Average method complexity3.78
▷ Minimum method complexity1.00
▷ Maximum method complexity144.00
Code structure
Namespaces40
Interfaces52
Traits60
Classes613
▷ Abstract classes487.83%
▷ Concrete classes56592.17%
▷ Final classes20.35%
Methods3,414
▷ Static methods2316.77%
▷ Public methods2,73179.99%
▷ Protected methods57516.84%
▷ Private methods1083.16%
Functions341
▷ Named functions17952.49%
▷ Anonymous functions16247.51%
Constants247
▷ Global constants7630.77%
▷ Class constants17169.23%
▷ Public constants171100.00%

Plugin size Passed 2 tests

Image compression Passed 2 tests

It is recommended to compress PNG files in your plugin to minimize bandwidth usage
88 compressed PNG files occupy 0.82MB
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
public/admin/img/timely-logo.png6.81KB3.91KB▼ 42.57%
public/themes-ai1ec/journey/img/stream-view.png0.44KB0.34KB▼ 23.74%
public/themes-ai1ec/vortex/img/select2.png0.60KB0.99KB0.00%
public/themes-ai1ec/vortex/img/date-icon.png0.52KB0.57KB0.00%
public/themes-ai1ec/gamma/screenshot.png33.53KB35.12KB0.00%