56% wp-job-portal

Code Review | WP Job Portal - A Complete Job Board

WordPress plugin WP Job Portal - A Complete Job Board scored56%from 54 tests.

About plugin

  • Plugin page: wp-job-portal
  • Plugin version: 2.0.7
  • PHP version: 7.4.16
  • WordPress compatibility: 4.5-6.3.2
  • WordPress version: 6.3.1
  • First release: Aug 21, 2020
  • Latest release: Nov 3, 2023
  • Number of updates: 50
  • Update frequency: every 23.8 days
  • Top authors: wpjobportal (100%)

Code review

54 tests

User reviews

12 reviews

Install metrics

3,000+ active /82,092 total downloads

Benchmarks

Plugin footprint 65% from 16 tests

Installer Passed 1 test

🔺 Critical test (weight: 50) | Verifying that this plugin installs correctly without errors
The plugin installed gracefully, with no errors

Server metrics [RAM: ▲0.28MB] [CPU: ▲6.76ms] Passed 4 tests

This is a short check of server-side resources used by WP Job Portal - A Complete Job Board
No issues were detected with server-side resource usage
PageMemory (MB)CPU Time (ms)
Home /3.68 ▲0.2253.89 ▲15.68
Dashboard /wp-admin3.60 ▲0.3053.91 ▲2.64
Posts /wp-admin/edit.php3.71 ▲0.3654.68 ▲8.42
Add New Post /wp-admin/post-new.php6.19 ▲0.3188.58 ▲1.56
Media Library /wp-admin/upload.php3.52 ▲0.2944.19 ▲14.40
Email Templates Options /wp-admin/admin.php?page=wpjobportal_emailtemplatestatus4.4049.11
WP Job Portal Slug /wp-admin/admin.php?page=wpjobportal_slug3.9746.64
Experience /wp-admin/admin.php?page=wpjobportal_experience3.4934.88
Salary Range /wp-admin/admin.php?page=wpjobportal_salaryrange3.4937.02
Messages /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures3.5639.01
Cover Letters /wp-admin/admin.php?page=wpjobportal_coverletter3.4636.85
Premium Addon /wp-admin/admin.php?page=message3.4636.31
States /wp-admin/admin.php?page=wpjobportal_state3.5746.04
Premium Addon /wp-admin/admin.php?page=addressdata3.4636.65
Salary Range Types /wp-admin/admin.php?page=wpjobportal_salaryrangetype3.5845.23

Server storage [IO: ▲17.44MB] [DB: ▲0.20MB] Passed 3 tests

Analyzing filesystem and database footprints of this plugin
No storage issues were detected
Filesystem: 1,129 new files
Database: 33 new tables, 9 new options
New tables
wp_wj_portal_currencies
wp_wj_portal_jobstatus
wp_wj_portal_jswjsessiondata
wp_wj_portal_jobseeker_view_company
wp_wj_portal_jobtypes
wp_wj_portal_emailtemplates
wp_wj_portal_resumeinstitutes
wp_wj_portal_salaryrangetypes
wp_wj_portal_cities
wp_wj_portal_fieldsordering
...
New WordPress options
widget_recent-posts
can_compress_scripts
theysaidso_admin_options
widget_wpjobportaljobssearchjobs_widget
db_upgraded
_wpjsjp_session_
widget_recent-comments
widget_theysaidso_widget
wpjobportal_do_activation_redirect

Browser metrics Passed 4 tests

A check of browser resources used by WP Job Portal - A Complete Job Board
This plugin renders optimally with no browser resource issues detected
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /3,077 ▲32613.94 ▼0.7710.89 ▲9.2825.34 ▼18.88
Dashboard /wp-admin2,364 ▲1865.85 ▲0.2285.55 ▼31.5696.22 ▲45.08
Posts /wp-admin/edit.php2,167 ▲672.01 ▼0.0538.91 ▲3.1337.21 ▲3.74
Add New Post /wp-admin/post-new.php17,900 ▲16,37424.10 ▲0.881,206.43 ▲520.3842.97 ▼17.37
Media Library /wp-admin/upload.php1,451 ▲484.16 ▲0.0098.37 ▲1.3968.40 ▲23.92
Email Templates Options /wp-admin/admin.php?page=wpjobportal_emailtemplatestatus2,3352.3941.0767.92
WP Job Portal Slug /wp-admin/admin.php?page=wpjobportal_slug2,2182.3943.0179.40
Experience /wp-admin/admin.php?page=wpjobportal_experience8552.2926.6722.31
Salary Range /wp-admin/admin.php?page=wpjobportal_salaryrange8552.2324.4825.08
Messages /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures2,4822.3739.89117.33
Cover Letters /wp-admin/admin.php?page=wpjobportal_coverletter8552.2323.9425.31
Premium Addon /wp-admin/admin.php?page=message8302.0022.9925.12
States /wp-admin/admin.php?page=wpjobportal_state1,9752.3743.0170.02
Premium Addon /wp-admin/admin.php?page=addressdata8362.0022.7222.28
Salary Range Types /wp-admin/admin.php?page=wpjobportal_salaryrangetype2,2192.7948.2186.15

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

🔸 Tests weight: 35 | The uninstall procedure must remove all plugin files and extra database tables
It is recommended to fix the following
  • The plugin did not uninstall successfully, leaving 1 table in the database
    • wp_wj_portal_departments
  • This plugin does not fully uninstall, leaving 9 options in the database
    • widget_recent-posts
    • can_compress_scripts
    • wpjobportal_do_activation_redirect
    • _wpjsjp_session_
    • widget_theysaidso_widget
    • theysaidso_admin_options
    • widget_wpjobportaljobssearchjobs_widget
    • db_upgraded
    • widget_recent-comments

Smoke tests 0% from 4 tests

Server-side errors 0% from 1 test

🔹 Test weight: 20 | A shallow check that no server-side errors were triggered
Smoke test failed, please fix the following
    • > GET request to /wp-admin/admin.php?page=wpjobportal_coverletter
    • > Notice in wp-content/plugins/wp-job-portal/includes/includer.php+348
    Undefined variable: file_path
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=addressdata
    • > Warning in wp-includes/class-wp-hook.php+310
    call_user_func_array() expects parameter 1 to be a valid callback, class 'wpjobportaladmin' does not have a method 'showMissingAddonPage'
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=wpjobportal_state
    • > Notice in wp-content/plugins/wp-job-portal/modules/state/tmpl/views/filter.php+9
    Undefined index: filter
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/admin.php?page=wpjobportal_state
    • > Notice in wp-content/plugins/wp-job-portal/modules/state/tmpl/views/filter.php+9
    Trying to access array offset on value of type null

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 items
  • 445× GET requests to PHP files return non-empty strings (only 10 are shown):
    • > /wp-content/plugins/wp-job-portal/modules/job/tmpl/views/admin/filter.php
    • > /wp-content/plugins/wp-job-portal/modules/state/tmpl/admin_formstate.php
    • > /wp-content/plugins/wp-job-portal/modules/user/tmpl/backups/admin_userstate_resumes.php
    • > /wp-content/plugins/wp-job-portal/includes/tables/systemerror.php
    • > /wp-content/plugins/wp-job-portal/modules/emailtemplate/controller.php
    • > /wp-content/plugins/wp-job-portal/modules/fieldordering/tmpl/admin_searchfields.php
    • > /wp-content/plugins/wp-job-portal/modules/customfield/model.php
    • > /wp-content/plugins/wp-job-portal/modules/jobseeker/tmpl/mystats.php
    • > /wp-content/plugins/wp-job-portal/modules/resume/tmpl/resumebycategory.php
    • > /wp-content/plugins/wp-job-portal/includes/tables/emailtemplateconfig.php
  • 5× PHP files trigger errors when accessed directly with GET requests:
    • > PHP Warning
      Use of undefined constant WPJOBPORTAL_SALARY_NEGOTIABLE - assumed 'WPJOBPORTAL_SALARY_NEGOTIABLE' (this will throw an Error in a future version of PHP) in wp-content/plugins/wp-job-portal/modules/jobsearch/tmpl/salary-field.php on line 7
    • > PHP Fatal error
      Uncaught Error: Call to undefined function wp_enqueue_script() in wp-content/plugins/wp-job-portal/modules/postinstallation/tmpl/admin_stepfour.php:3
    • > PHP Fatal error
      Uncaught Error: Call to undefined function get_option() in wp-content/plugins/wp-job-portal/modules/city/tmpl/views/form-field.php:5
    • > PHP Warning
      Use of undefined constant WPJOBPORTAL_PLUGIN_URL - assumed 'WPJOBPORTAL_PLUGIN_URL' (this will throw an Error in a future version of PHP) in wp-content/plugins/wp-job-portal/modules/postinstallation/tmpl/admin_stepfour.php on line 1
    • > PHP Fatal error
      Uncaught Error: Call to undefined function esc_html() in wp-content/plugins/wp-job-portal/modules/jobsearch/tmpl/salary-field.php:7

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=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/back-icon.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/buy-now.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/image-1.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/add-job.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/gold-feature.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/tell-friend.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/message.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/themes.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/credits-log.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/multi-credits.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/view-resume-detials.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/add-resume.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/credits.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/in.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/suggets-jobs.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/apply-social.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/facebook.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/xing.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/login-social.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/tags.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/applied-jobs.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/job-alert.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/custom-fields.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/career-bulider.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/indeed.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/notifications.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/paypal.png - Failed to load resource: the server responded with a status of 404 (Not Found)
    • > GET request to /wp-admin/admin.php?page=wpjobportal&wpjobportallt=profeatures
    • > Network (severe)
    wp-content/plugins/wp-job-portal/includes/images/pro/woo.png - Failed to load resource: the server responded with a status of 404 (Not Found)

Optimizations

Plugin configuration 90% from 29 tests

readme.txt 88% from 16 tests

You should put a lot of thought into formatting readme.txt as it is used by WordPress.org to prepare the public listing of your plugin
Attributes that need to be fixed:
  • Screenshots: Add a description for screenshot #21 in wp-job-portal/assets to your readme.txt
  • Tags: Please delete some tags, you are using 28 tag instead of maximum 10
You can look at the official readme.txt

wp-job-portal/wp-job-portal.php 92% from 13 tests

"WP Job Portal - A Complete Job Board" version 2.0.7's main PHP file describes plugin functionality and also serves as the entry point to any WordPress functionality
Please take the time to fix the following:
  • Description: Please don't use more than 140 characters for the plugin description (currently 142 characters long)

Code Analysis 97% from 3 tests

File types Passed 1 test

🔸 Test weight: 35 | A short review of files and their extensions; it is not recommended to include executable files
Good job! No executable or dangerous file extensions detected198,252 lines of code in 528 files:
LanguageFilesBlank linesComment linesLines of code
PO File1750,8400103,081
PHP4365,8509,74780,923
CSS245088515,887
JavaScript194385724,822
SVG2002,959
JSON1690496
SQL2761082
HTML2002

PHP code 50% from 2 tests

A brief analysis of cyclomatic complexity and code structure for this plugin
These items need your attention
  • Cyclomatic complexity of methods should be reduced to less than 100 (currently 190)
Cyclomatic complexity
Average complexity per logical line of code0.36
Average class complexity63.63
▷ Minimum class complexity1.00
▷ Maximum class complexity816.00
Average method complexity6.79
▷ Minimum method complexity1.00
▷ Maximum method complexity190.00
Code structure
Namespaces0
Interfaces0
Traits0
Classes142
▷ Abstract classes00.00%
▷ Concrete classes142100.00%
▷ Final classes00.00%
Methods1,536
▷ Static methods1278.27%
▷ Public methods1,49697.40%
▷ Protected methods30.20%
▷ Private methods372.41%
Functions80
▷ Named functions7897.50%
▷ Anonymous functions22.50%
Constants93
▷ Global constants9096.77%
▷ Class constants33.23%
▷ Public constants3100.00%

Plugin size Passed 2 tests

Image compression Passed 2 tests

Using a strong compression for your PNG files is a great way to speed-up your plugin
475 compressed PNG files occupy 1.16MB
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
includes/images/add-on-list/featured-job.png3.27KB3.27KB0.00%
includes/images/control_panel/dashboard/edit.png0.34KB0.32KB▼ 6.10%
includes/images/colorpicker_overlay.png8.25KB8.23KB0.23%
includes/images/colorpicker_hex.png0.34KB0.32KB▼ 4.65%
includes/images/control_panel/admin-widgets/companies-2.png0.80KB0.76KB▼ 5.60%