Sprout Invoices 19.9.4

Does Sprout Invoices work with WordPress 5.7.2 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: insignificant.
The plugin didn't make the site noticeably slower.

Environment
WordPress version5.7.2
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=d9c8671537
Aspect after-activation
HTTP status 200
Load time 2.314 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.334 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.171 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.278 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.269 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.327 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.228 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.046 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.213 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.608 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.784 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.409 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.190 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 3.010 s
Memory usage 5.55 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.476 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.2:11:9205)\n    at s.<anonymous> (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:11:8189)\n    at Object.s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:1836)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:11:7706)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:14765)\n    at e.<computed> [as Line] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.2: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.2:11:9205)\n    at s.<anonymous> (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:11:8189)\n    at Object.s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:1836)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:11:7706)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:14765)\n    at e.<computed> [as Line] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.2: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.2:11:790)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:31645)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:14765)\n    at e.<computed> [as Bar] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.2: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.2:2:29039)\n    at l (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils&ver=5.7.2: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.2:11:790)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:31645)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:14765)\n    at e.<computed> [as Bar] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.2: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.2: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.2:11:10914)\n    at s.render (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:11395)\n    at s.resize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:11298)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:29582\n    at s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:1886)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.2:11:790)\n    at s.initialize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:31645)\n    at s.e.Type (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:10855)\n    at new s (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:14765)\n    at e.<computed> [as Bar] (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.2: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.2: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.417 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.2:11:10914)\n    at s.render (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:11395)\n    at s.resize (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:11298)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:29582\n    at s.each (/wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2:10:1886)\n    at /wp-content/plugins/sprout-invoices/resources/admin/plugins/chartjs/chart.min.js?ver=5.7.2: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.370 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.500 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.263 s0.436 s+0.173 s2.82 MiB4.7 MiB+ 1.88 MiB
/wp-admin/edit.php0.184 s0.231 s+0.047 s2.86 MiB4.78 MiB+ 1.92 MiB
/wp-admin/post-new.php0.922 s1.194 s+0.272 s5.02 MiB6.8 MiB+ 1.78 MiB
/wp-admin/upload.php0.454 s0.568 s+0.114 s2.7 MiB4.69 MiB+ 2 MiB
/wp-admin/options-writing.php0.256 s0.206 s-0.050 s2.71 MiB4.67 MiB+ 1.96 MiB
/wp-admin/media-new.php0.217 s0.226 s+0.009 s2.67 MiB4.67 MiB+ 2 MiB
/wp-admin/edit-tags.php?taxonomy=category0.194 s0.241 s+0.047 s2.77 MiB4.7 MiB+ 1.93 MiB
/wp-admin/post-new.php?post_type=page1.169 s0.694 s-0.475 s5.01 MiB6.78 MiB+ 1.77 MiB
/wp-admin/options-discussion.php0.284 s0.271 s-0.013 s2.68 MiB4.67 MiB+ 2 MiB
/wp-admin/edit-comments.php0.237 s0.262 s+0.025 s2.78 MiB4.7 MiB+ 1.93 MiB
/0.317 s0.243 s-0.074 s2.65 MiB4.03 MiB+ 1.38 MiB
Average 0.409 s0.416 s+0.007 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,78638,79719
PHP31.4%32,25311,458264
CSS6.9%7,1224259
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,725 51,140 377

PHP Code Analysis | More results »

Lines of code 25,547
Total complexity 5,342
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

[14-May-2021 18:08:33 UTC] PHP Notice:  Undefined variable: key in /wp-content/plugins/sprout-invoices/views/admin/addons/free-settings.php on line 38
[14-May-2021 18:08:46 UTC] ** Sprout_Invoices Already Loaded **
See also: All tests for this plugin, How to Hide Sprout Invoices Admin Menus and More