Sprout Invoices 19.9.3

Does Sprout Invoices work with WordPress 5.7.1 and PHP 7.4.8? A smoke test was performed on .

Summary

Errors
1PHP notices
1Unrecognized messages in the PHP error log
7JavaScript exceptions
All test pages loaded successfully
No resource errors
Performance

Memory usage: 1.87 MiB
The average PHP memory usage increased by this amount after activating by the plugin.

Page speed impact: 0.104 seconds
The average page load time increased by this amount after activating the plugin.

Environment
WordPress version5.7.1
PHP version7.4.8
MySQL version8.0.21
PHP memory limit256M
Plugin Info
Last updated
Active installs 2,000+
WordPress.org page https://wordpress.org/plugins/sprout-invoices/
Badges

WordPress compatibility badge PHP compatibility badge

Get badge code

Pages 18

Getting Started ‹ Test site — WordPress

Page screenshot: Getting Started ‹ Test site — WordPress
URL /wp-admin/admin.php?page=sprout-invoices
Requested URL /wp-admin/plugins.php?action=activate&plugin=sprout-invoices%2Fsprout-invoices.php&plugin_status=all&paged=1&s&_wpnonce=d2a45d0b29
Aspect after-activation
HTTP status 200
Load time 2.285 s
Memory usage 4.8 MiB
JS errors None
Resource errors None

Invoices

Page screenshot: Invoices
URL /wp-admin/edit.php?post_type=sa_invoice
Aspect menu-item
HTTP status 200
Load time 0.292 s
Memory usage 4.77 MiB
JS errors None
Resource errors None

Invoices → Add Invoice

Page screenshot: Invoices → Add Invoice
URL /wp-admin/post-new.php?post_type=sa_invoice
Aspect menu-item
HTTP status 200
Load time 1.219 s
Memory usage 4.81 MiB
JS errors None
Resource errors None

Invoices → Payments

Page screenshot: Invoices → Payments
URL /wp-admin/edit.php?post_type=sa_invoice&page=sprout-apps%2Finvoice_payments
Requested URL /wp-admin/edit.php?post_type=sa_invoice&page=sprout-apps/invoice_payments
Aspect menu-item
HTTP status 200
Load time 0.340 s
Memory usage 4.68 MiB
JS errors None
Resource errors None

Invoices → Clients

Page screenshot: Invoices → Clients
URL /wp-admin/edit.php?post_type=sa_client
Aspect menu-item
HTTP status 200
Load time 0.358 s
Memory usage 4.77 MiB
JS errors None
Resource errors None

Invoices → Projects

Page screenshot: Invoices → Projects
URL /wp-admin/edit.php?post_type=sa_project
Aspect menu-item
HTTP status 200
Load time 0.214 s
Memory usage 4.77 MiB
JS errors None
Resource errors None

Estimates

Page screenshot: Estimates
URL /wp-admin/edit.php?post_type=sa_estimate
Aspect menu-item
HTTP status 200
Load time 0.213 s
Memory usage 4.77 MiB
JS errors None
Resource errors None

Estimates → Add Estimate

Page screenshot: Estimates → Add Estimate
URL /wp-admin/post-new.php?post_type=sa_estimate
Aspect menu-item
HTTP status 200
Load time 1.088 s
Memory usage 4.8 MiB
JS errors None
Resource errors None

Tools → Sprout Records

Page screenshot: Tools → Sprout Records
URL /wp-admin/tools.php?page=si_records
Aspect menu-item
HTTP status 200
Load time 0.215 s
Memory usage 4.67 MiB
JS errors None
Resource errors None

Sprout Invoices

Page screenshot: Sprout Invoices
URL /wp-admin/admin.php?page=sprout-invoices
Aspect menu-item
HTTP status 200
Load time 0.671 s
Memory usage 4.68 MiB
JS errors None
Resource errors None

Sprout Invoices → General Settings

Page screenshot: Sprout Invoices → General Settings
URL /wp-admin/admin.php?page=sprout-invoices-settings
Aspect menu-item
HTTP status 200
Load time 0.821 s
Memory usage 4.68 MiB
JS errors None
Resource errors None

Sprout Invoices → Payment Settings

Page screenshot: Sprout Invoices → Payment Settings
URL /wp-admin/admin.php?page=sprout-invoices-payments
Aspect menu-item
HTTP status 200
Load time 0.421 s
Memory usage 4.68 MiB
JS errors None
Resource errors None

Sprout Invoices → Notifications

Page screenshot: Sprout Invoices → Notifications
URL /wp-admin/admin.php?page=sprout-invoices-notifications
Aspect menu-item
HTTP status 200
Load time 1.229 s
Memory usage 4.68 MiB
JS errors None
Resource errors None

Sprout Invoices → Add-ons

Page screenshot: Sprout Invoices → Add-ons
URL /wp-admin/admin.php?page=sprout-invoices-addons
Aspect menu-item
HTTP status 200
Load time 1.467 s
Memory usage 5.54 MiB
JS errors None
Resource errors None

Sprout Invoices → Reports

Page screenshot: Sprout Invoices → Reports
URL /wp-admin/admin.php?page=sprout-invoices-reports
Aspect menu-item
HTTP status 200
Load time 0.480 s
Memory usage 4.7 MiB
JS errors
[
    {
        "message": "TypeError: Cannot read property 'length' of undefined\n    at s.buildScale (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:9205)\n    at s.<anonymous> (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:8189)\n    at Object.s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:1836)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:7706)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:14765)\n    at e.<computed> [as Line] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:15107)\n    at payments_chart (/wp-admin/admin.php?page=sprout-invoices-reports:417:32)\n    at Object.success (/wp-admin/admin.php?page=sprout-invoices-reports:458:7)\n    at c (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:28294)",
        "trace": null,
        "code": null
    },
    {
        "message": "TypeError: Cannot read property 'length' of undefined\n    at s.buildScale (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:9205)\n    at s.<anonymous> (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:8189)\n    at Object.s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:1836)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:7706)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:14765)\n    at e.<computed> [as Line] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:15107)\n    at payments_chart (/wp-admin/admin.php?page=sprout-invoices-reports:417:32)\n    at Object.success (/wp-admin/admin.php?page=sprout-invoices-reports:458:7)\n    at c (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:28294)",
        "trace": null,
        "code": null
    },
    {
        "message": "TypeError: Cannot read property 'length' of undefined\n    at s.buildScale (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:790)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:31645)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:14765)\n    at e.<computed> [as Bar] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:15107)\n    at est_invoices_chart (/wp-admin/admin.php?page=sprout-invoices-reports:563:32)\n    at Object.success (/wp-admin/admin.php?page=sprout-invoices-reports:601:7)\n    at c (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:28294)\n    at Object.fireWith [as resolveWith] (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:29039)\n    at l (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:79800)",
        "trace": null,
        "code": null
    },
    {
        "message": "TypeError: Cannot read property 'length' of undefined\n    at s.buildScale (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:790)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:31645)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:14765)\n    at e.<computed> [as Bar] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:15107)\n    at est_invoices_chart (/wp-admin/admin.php?page=sprout-invoices-reports:563:32)\n    at dispatch (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:43090)\n    at v.handle (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:41074)",
        "trace": null,
        "code": null
    },
    {
        "message": "TypeError: Cannot read property 'update' of undefined\n    at s.reflow (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:10914)\n    at s.render (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:11395)\n    at s.resize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:11298)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:29582\n    at s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:1886)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:29532",
        "trace": null,
        "code": null
    },
    {
        "message": "TypeError: Cannot read property 'length' of undefined\n    at s.buildScale (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:790)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:31645)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:14765)\n    at e.<computed> [as Bar] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:15107)\n    at est_invoices_chart (/wp-admin/admin.php?page=sprout-invoices-reports:563:32)\n    at dispatch (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:43090)\n    at v.handle (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.1:2:41074)",
        "trace": null,
        "code": null
    }
]
Resource errors None

Sprout Invoices → Import

Page screenshot: Sprout Invoices → Import
URL /wp-admin/admin.php?page=sprout-invoices-import
Aspect menu-item
HTTP status 200
Load time 0.370 s
Memory usage 4.68 MiB
JS errors
[
    {
        "message": "TypeError: Cannot read property 'update' of undefined\n    at s.reflow (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:11:10914)\n    at s.render (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:11395)\n    at s.resize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:11298)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:29582\n    at s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:1886)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.1:10:29532",
        "trace": null,
        "code": null
    }
]
Resource errors None

Test site – Just another WordPress site

Page screenshot: Test site – Just another WordPress site
URL /
Aspect front-page
HTTP status 200
Load time 0.294 s
Memory usage 4.03 MiB
JS errors None
Resource errors None

Dashboard ‹ Test site — WordPress

Page screenshot: Dashboard ‹ Test site — WordPress
URL /wp-admin/index.php
Aspect new-meta-boxes
HTTP status 200
Load time 0.342 s
Memory usage 4.7 MiB
JS errors None
Resource errors None

Benchmark

URL Load time Memory usage
Inactive Active Change Inactive Active Change
/wp-admin/index.php0.256 s0.501 s+0.245 s2.82 MiB4.7 MiB+ 1.88 MiB
/wp-admin/edit.php0.182 s0.365 s+0.183 s2.86 MiB4.78 MiB+ 1.92 MiB
/wp-admin/post-new.php0.892 s1.057 s+0.165 s5.02 MiB6.8 MiB+ 1.78 MiB
/wp-admin/upload.php0.478 s0.442 s-0.036 s2.7 MiB4.69 MiB+ 2 MiB
/wp-admin/options-writing.php0.170 s0.227 s+0.057 s2.71 MiB4.67 MiB+ 1.96 MiB
/wp-admin/media-new.php0.236 s0.234 s-0.002 s2.67 MiB4.67 MiB+ 2 MiB
/wp-admin/edit-tags.php?taxonomy=category0.187 s0.293 s+0.106 s2.77 MiB4.7 MiB+ 1.93 MiB
/wp-admin/post-new.php?post_type=page1.164 s1.486 s+0.322 s5.01 MiB6.78 MiB+ 1.77 MiB
/wp-admin/options-discussion.php0.305 s0.392 s+0.087 s2.67 MiB4.67 MiB+ 2 MiB
/wp-admin/edit-comments.php0.232 s0.269 s+0.037 s2.78 MiB4.7 MiB+ 1.93 MiB
/0.252 s0.232 s-0.020 s2.65 MiB4.03 MiB+ 1.38 MiB
Average 0.396 s0.500 s+0.104 s3.15 MiB5.02 MiB+ 1.87 MiB

Code Statistics

Note: Third-party libraries and minified JS/CSS files are excluded from these statistics where possible, so the numbers you see here may be lower than those reported by other tools.

PO File
PHP
Language % Lines of code Comment lines Files
PO File58.2%59,78038,79319
PHP31.4%32,25211,458264
CSS6.9%7,1014239
JavaScript2.3%2,33344962
Sass0.5%532613
HTML0.5%50512
Markdown0.1%6703
Bourne Shell0.1%5941
SVG0.0%3201
JSON0.0%2202
XML0.0%1401
Total 102,697 51,134 377

PHP Code Analysis | More results »

Lines of code 25,546
Total complexity 5,341
Median class complexity 26.5
Median method complexity 2.0
Most complex class SI_Notifications
Most complex function SA_Init_Addon_Processors::load_bundled_payment_processor()
Classes 104
Methods 1,471
Functions 237

Additions

Things that the plugin adds to the site. This section is not intended to be comprehensive. The test tool only looks for a few specific types of added content.

Options wp_options 7

Custom Post Types 7

ID Name
sa_recordRecords
sa_notificationNotifications
sa_invoiceInvoices
sa_estimateEstimates
sa_clientClients
sa_paymentPayments
sa_projectProjects

Meta Boxes

{
    "dashboard": {
        "invoice_dashboard": {
            "title": "Invoices Dashboard",
            "context": "normal"
        },
        "estimates_dashboard": {
            "title": "Estimates Dashboard",
            "context": "side"
        }
    },
    "sa_notification": {
        "si_notification_submit": {
            "title": "Update",
            "context": "side"
        },
        "si_notification_shortcodes_send_estimate": {
            "title": "Estimate Available Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_send_invoice": {
            "title": "Invoice Available Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_deposit_payment": {
            "title": "Deposit Payment Received Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_payment_cleared": {
            "title": "Payment Cleared Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_final_payment": {
            "title": "Invoice Paid Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_reminder_payment": {
            "title": "Payment Reminder Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_accepted_estimate": {
            "title": "Estimate Accepted Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_declined_estimate": {
            "title": "Estimate Declined Shortcodes",
            "context": "normal"
        },
        "si_notification_shortcodes_payment_notification": {
            "title": "Payment Received Shortcodes",
            "context": "normal"
        }
    },
    "sa_client": {
        "si_client_information": {
            "title": "Information",
            "context": "normal"
        },
        "si_client_advanced": {
            "title": "Advanced",
            "context": "normal"
        },
        "si_client_history": {
            "title": "History",
            "context": "normal"
        },
        "si_client_submit": {
            "title": "Update",
            "context": "side"
        }
    },
    "sa_invoice": {
        "si_invoice_line_items": {
            "title": "Management",
            "context": "normal"
        },
        "si_invoice_update": {
            "title": "Information",
            "context": "normal"
        },
        "si_invoice_history": {
            "title": "Invoice History",
            "context": "normal"
        },
        "si_doc_send": {
            "title": "Send Notification",
            "context": "normal"
        },
        "si_invoice_payment": {
            "title": "Admin Payment",
            "context": "normal"
        },
        "si_invoice_notes": {
            "title": "Terms & Notes",
            "context": "normal"
        }
    },
    "sa_estimate": {
        "si_estimate_line_items": {
            "title": "Management",
            "context": "normal"
        },
        "si_estimate_update": {
            "title": "Information",
            "context": "normal"
        },
        "si_estimate_history": {
            "title": "Estimate History",
            "context": "normal"
        },
        "si_doc_send": {
            "title": "Send Notification",
            "context": "normal"
        },
        "si_estimate_notes": {
            "title": "Terms & Notes",
            "context": "normal"
        }
    },
    "sa_project": {
        "si_project_information": {
            "title": "Information",
            "context": "normal"
        },
        "si_project_history": {
            "title": "History",
            "context": "normal"
        },
        "si_project_submit": {
            "title": "Update",
            "context": "side"
        },
        "psp_project_info": {
            "title": "Project Panorama",
            "context": "side"
        }
    }
}

Roles 1

ID Name
sa_clientClient

Capabilities 8

PHP Error Log 2 lines

[16-Apr-2021 21:40:58 UTC] PHP Notice:  Undefined variable: key in /wp-content/plugins/sprout-invoices/views/admin/addons/free-settings.php on line 38
[16-Apr-2021 21:41:12 UTC] ** Sprout_Invoices Already Loaded **
See also: All tests for this plugin, How to Hide Sprout Invoices Admin Menus and More