10% projectopia-core

Code Review | Projectopia - WordPress Project Management Plugin

WordPress plugin Projectopia - WordPress Project Management Plugin scored10%from 54 tests.

About plugin

  • Plugin page: projectopia-core
  • Plugin version: 5.1.5
  • PHP compatiblity: 5.6+
  • PHP version: 7.4.16
  • WordPress compatibility: 5.3.0-6.2
  • WordPress version: 6.3.1
  • First release: Oct 22, 2021
  • Latest release: Jul 21, 2023
  • Number of updates: 46
  • Update frequency: every 15.9 days
  • Top authors: expresstech (91.3%)infosatech (10.87%)

Code review

54 tests

User reviews

6 reviews

Install metrics

400+ active /10,818 total downloads

Benchmarks

Plugin footprint 56% from 16 tests

Installer 0% from 1 test

🔺 Critical test (weight: 50) | It is important to correctly install your plugin, without throwing errors or notices
The following installer errors require your attention
  • The plugin cannot be installed
    • > User deprecated in wp-includes/functions.php+5453
    Function get_page_by_title is deprecated since version 6.2.0! Use WP_Query instead.

Server metrics [RAM: ▲11.37MB] [CPU: ▲96.46ms] 50% from 4 tests

Analyzing server-side resources used by Projectopia - WordPress Project Management Plugin
Please have a look at the following items
  • RAM: Total memory usage should be kept under 10MB (currently 14.62MB on /wp-admin/admin.php?page=pto-updates)
  • Extra RAM: The extra memory usage must be under 5MB (currently 11.37MB on /wp-admin/admin.php?page=pto-updates)
PageMemory (MB)CPU Time (ms)
Home /14.60 ▲11.14131.06 ▲87.31
Dashboard /wp-admin14.73 ▲11.42154.71 ▲95.92
Posts /wp-admin/edit.php14.82 ▲11.46168.54 ▲111.26
Add New Post /wp-admin/post-new.php17.36 ▲11.47207.48 ▲104.80
Media Library /wp-admin/upload.php14.66 ▲11.44139.87 ▲97.81
Freemius Debug [v.2.5.10] /wp-admin/admin.php?page=freemius14.89127.38
Project Updates /wp-admin/admin.php?page=pto-updates14.62135.39

Server storage [IO: ▲26.89MB] [DB: ▲0.06MB] 67% from 3 tests

Filesystem and database footprint
These are issues you should consider
  • Total filesystem usage should be limited to 25MB (currently using 26.89MB)
Filesystem: 1,511 new files
Database: no new tables, 146 new options
New WordPress options
client_quote_message_email
pto_v5_0_7_compat_complete
cqpim_bounce_subject
pto_support_open_message
cqpim_send_piping_reject
password_reset_subject
cqpim_messages_allow_client
cqpim_create_support_on_email
client_message_subject
team_account_subject
...

Browser metrics Passed 4 tests

A check of browser resources used by Projectopia - WordPress Project Management Plugin
Minimal impact on browser resources
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /3,084 ▲32313.55 ▼0.805.18 ▲3.4428.93 ▼12.24
Dashboard /wp-admin2,335 ▲1615.67 ▲0.0197.15 ▼1.2274.80 ▲36.08
Posts /wp-admin/edit.php2,262 ▲1622.25 ▲0.2434.95 ▼5.0534.98 ▼6.33
Add New Post /wp-admin/post-new.php1,595 ▲5821.02 ▼1.85722.37 ▲38.1651.62 ▼4.51
Media Library /wp-admin/upload.php1,559 ▲1594.29 ▲0.10102.62 ▼10.6080.33 ▲33.48
Freemius Debug [v.2.5.10] /wp-admin/admin.php?page=freemius1,2101.7827.0226.77
Project Updates /wp-admin/admin.php?page=pto-updates1,0021.7429.4933.61

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

🔸 Tests weight: 35 | Checking the uninstaller removed all traces of the plugin
It is recommended to fix the following
  • This plugin does not fully uninstall, leaving 146 options in the database
    • cqpim_save_dashboard_metabox_filters
    • client_invoice_receipt_email
    • auto_welcome
    • team_account_subject
    • client_invoice_reminder_email
    • cqpim_new_message_subject
    • assignment_response_subject
    • support_status
    • currency_symbol
    • fs_active_plugins
    • ...

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)
Even though no errors were found, this is by no means 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
  • 3× PHP files output non-empty strings when accessed directly via GET requests:
    • > /wp-content/plugins/projectopia-core/assets/dompdf/lib/php-css-parser/tests/quickdump.php
    • > /wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/build.php
    • > /wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/update_certs.php
  • 651× PHP files trigger errors when accessed directly with GET requests (only 10 are shown):
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\ApiResource' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Issuing/CardDetails.php:16
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\Exception\\ApiErrorException' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Exception/InvalidRequestException.php:9
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\Service\\AbstractServiceFactory' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Service/TestHelpers/Terminal/TerminalServiceFactory.php:12
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\ApiResource' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Charge.php:65
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\Service\\AbstractService' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Service/Terminal/ConnectionTokenService.php:7
    • > PHP Fatal error
      Uncaught Error: Class 'Sabberworm\\CSS\\CSSList\\CSSList' not found in wp-content/plugins/projectopia-core/assets/dompdf/lib/php-css-parser/lib/Sabberworm/CSS/CSSList/CSSBlockList.php:16
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\Service\\AbstractService' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Service/ChargeService.php:7
    • > PHP Fatal error
      Uncaught Error: Class 'Stripe\\Service\\AbstractService' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/lib/Service/FileLinkService.php:7
    • > PHP Fatal error
      Uncaught Error: Call to undefined function add_action() in wp-content/plugins/projectopia-core/includes/meta/leadforms/form_details.php:52
    • > PHP Fatal error
      Uncaught Error: Class 'PhpCsFixer\\Finder' not found in wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/.php-cs-fixer.php:3

User-side errors Passed 1 test

🔹 Test weight: 20 | This is a smoke test targeting browser errors/issues
Everything seems fine, but this is not an exhaustive test

Optimizations

Plugin configuration 96% from 29 tests

readme.txt Passed 16 tests

It's important to format your readme.txt file correctly as it is parsed for the public listing of your plugin
2 plugin tags: project, project management

projectopia-core/projectopia-core.php 92% from 13 tests

Analyzing the main PHP file in "Projectopia - WordPress Project Management Plugin" version 5.1.5
Please take the time to fix the following:
  • Description: The description should be shorter than 140 characters (currently 218 characters long)

Code Analysis 0% from 3 tests

File types 0% from 1 test

🔸 Test weight: 35 | An overview of files in this plugin; executable files are not allowed
Please fix the following items
  • You should never include executable (binary) or otherwise dangerous files in your plugin
    • .crt - Security Certificate in Firefox, IE, Chrome, Safari
      • wp-content/plugins/projectopia-core/includes/frontend/stripe-sca/data/ca-certificates.crt
227,349 lines of code in 1,140 files:
LanguageFilesBlank linesComment linesLines of code
PHP79921,30846,165160,371
JavaScript1591,4132,70233,188
JSON170018,811
CSS821,7496278,978
Sass3390142,193
Markdown897402,167
XML630959
SVG6000575
YAML412267
make18023
HTML10017

PHP code 0% from 2 tests

An short overview of logical lines of code, cyclomatic complexity, and other code metrics
Please fix the following
  • Please reduce cyclomatic complexity of classes to less than 1000 (currently 3,073)
  • Method cyclomatic complexity has to be reduced to less than 100 (currently 652)
Cyclomatic complexity
Average complexity per logical line of code0.43
Average class complexity26.22
▷ Minimum class complexity1.00
▷ Maximum class complexity3,073.00
Average method complexity3.89
▷ Minimum method complexity1.00
▷ Maximum method complexity652.00
Code structure
Namespaces61
Interfaces14
Traits8
Classes452
▷ Abstract classes245.31%
▷ Concrete classes42894.69%
▷ Final classes00.00%
Methods4,238
▷ Static methods47011.09%
▷ Public methods3,44081.17%
▷ Protected methods2716.39%
▷ Private methods52712.44%
Functions663
▷ Named functions63295.32%
▷ Anonymous functions314.68%
Constants1,136
▷ Global constants12310.83%
▷ Class constants1,01389.17%
▷ Public constants1,013100.00%

Plugin size 50% from 2 tests

Image compression 50% from 2 tests

Using a strong compression for your PNG files is a great way to speed-up your plugin
119 PNG files occupy 1.72MB with 0.95MB in potential savings
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
includes/css/images/tooltip.png2.36KB0.65KB▼ 72.45%
assets/admin/img/david.png12.39KB4.97KB▼ 59.87%
includes/css/img/reorder.png0.26KB0.25KB▼ 3.01%
img/watching.png47.32KB0.50KB▼ 98.95%
assets/freemius/assets/img/pto-bugs.png9.16KB5.26KB▼ 42.58%