{"id":351684,"date":"2026-09-05T01:55:13","date_gmt":"2026-09-05T01:55:13","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pvq-dashboard\/"},"modified":"2026-09-05T01:40:06","modified_gmt":"2026-09-05T01:40:06","slug":"pvq-dashboard","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/pvq-dashboard\/","author":21037769,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"5.0.37","stable_tag":"trunk","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"PVQ Dashboard","header_author":"Learn and Permits, LLC","header_description":"PVQ Dashboard for native WordPress users. Includes PVQ setup, verification modal, admin dashboard, question library, users, reports, settings, and extension hooks.","assets_banners_color":"","last_updated":"2026-09-05 01:40:06","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":[],"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[22649,2195,1932,5613,712],"plugin_category":[58],"plugin_contributors":[279257],"plugin_business_model":[],"class_list":["post-351684","plugin","type-plugin","status-publish","hentry","plugin_tags-identity","plugin_tags-lms","plugin_tags-membership","plugin_tags-questions","plugin_tags-verification","plugin_category-user-management","plugin_contributors-nitinguptaji","plugin_committers-nitinguptaji"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/pvq-dashboard.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>PVQ Dashboard is a WordPress plugin for user portals, LMS sites, membership sites, eCommerce sites, and client dashboards. It lets administrators create a question bank, lets users complete PVQ setup by saving their own answers, and then displays a blocking verification modal when a user's verification has expired.<\/p>\n\n<p>This version is packaged as a standalone PVQ Dashboard plugin with its own slug, settings, database tables, hooks, REST route, AJAX actions, and shortcodes.<\/p>\n\n<p>Core features:<\/p>\n\n<ul>\n<li>Admin Dashboard with PVQ setup, verification, failure, lockout, and activity stats.<\/li>\n<li>Questions screen with create, edit, delete, archive, and duplicate actions.<\/li>\n<li>Users screen with PVQ setup status, last verified date, failed attempts, lockout status, reset, unlock, and require PVQ reset actions.<\/li>\n<li>Reports screen with CSV export, date\/user\/role\/result filters, pass\/failure stats, average completion time, and most failed question IDs.<\/li>\n<li>Settings screen for verification rules, popup content, logging, exclusions, cache duration, support email, and role exclusions.<\/li>\n<li>Top-tab admin navigation across Dashboard, Questions, Users, Reports, Settings, Help, and Professional Options.<\/li>\n<li>Help tab feedback\/question form that emails the configured support email.<\/li>\n<li>PVQ setup screen through [dashboard_pvq_manage].<\/li>\n<li>Verification modal through automatic expiration checks or [dashboard_pvq_verify].<\/li>\n<li>Status screen through [dashboard_pvq_status].<\/li>\n<li>Standalone aliases: [dashboard_pvq_setup] and [dashboard_pvq_check].<\/li>\n<li>REST scaffold at \/wp-json\/dashboard-pvq\/v1\/status.<\/li>\n<li>Answers are hashed and never stored as plaintext.<\/li>\n<\/ul>\n\n<h3>Shortcodes<\/h3>\n\n<p>[dashboard_pvq_manage] - PVQ setup and answer management.\n[dashboard_pvq_status] - User verification status.\n[dashboard_pvq_verify] - Force a verification modal on the current page.\n[dashboard_pvq_setup] - Standalone alias for [dashboard_pvq_manage].\n[dashboard_pvq_check] - Standalone alias for [dashboard_pvq_verify].<\/p>\n\n<h3>Security Notes<\/h3>\n\n<p>PVQ answers are normalized and hashed using WordPress password hashing. They are not stored as plaintext. The plugin uses nonces, capability checks, prepared SQL statements, input sanitization, and output escaping.<\/p>\n\n<h3>Upgrade Notes<\/h3>\n\n<p>This build retains the existing dashboard_pvq_* option, user-meta, table, hook, and shortcode identifiers for backward compatibility while using the WordPress.org translation text domain pvq-dashboard.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the ZIP file from Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate PVQ Dashboard.<\/li>\n<li>Go to PVQ Dashboard &gt; Questions and configure the PVQ question bank for your site.<\/li>\n<li>Go to PVQ Dashboard &gt; Settings and enable the plugin after reviewing verification rules.<\/li>\n<li>Create a front-end page and add [dashboard_pvq_manage] for PVQ setup.<\/li>\n<li>Optionally add [dashboard_pvq_status] to a dashboard page.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>5.0.37<\/h4>\n\n<ul>\n<li>Updated WordPress.org Tested up to metadata to 7.1.<\/li>\n<li>Passed the filtered report query directly through wpdb::prepare() into get_results() so Plugin Check can verify the prepared SQL path.<\/li>\n<\/ul>\n\n<h4>5.0.34<\/h4>\n\n<ul>\n<li>Added WordPress.org owner username to Contributors.<\/li>\n<li>Corrected gettext text domain to pvq-dashboard.<\/li>\n<li>Added nonce validation to CSV report exports.<\/li>\n<li>Renamed localized JavaScript globals with a distinct PVQ Dashboard prefix.<\/li>\n<li>Replaced stale plan-gating language with Professional Options wording.<\/li>\n<\/ul>\n\n<h4>5.0.33<\/h4>\n\n<ul>\n<li>Removed outdated Questions-tab promotional controls and simplified question management.<\/li>\n<li>Fixed the General settings timezone dropdown using WordPress native timezone choices and matching validation.<\/li>\n<li>Removed the Verification settings free-version cap message and license-based question cap.<\/li>\n<\/ul>\n\n<h4>5.0.32<\/h4>\n\n<ul>\n<li>Fixed Plugin Check errors from the uploaded report.<\/li>\n<li>Added GPL license headers, updated Tested up to, removed distributable test application files, replaced direct CSV filesystem output, and added translator comments for placeholder strings.<\/li>\n<\/ul>\n\n<h4>5.0.31<\/h4>\n\n<ul>\n<li>Renamed the plugin to PVQ Dashboard.<\/li>\n<\/ul>\n\n<h4>5.0.29<\/h4>\n\n<ul>\n<li>Removed Setup complete and Setup incomplete stat cards from the Dashboard tab.<\/li>\n<\/ul>\n\n<h4>5.0.28<\/h4>\n\n<ul>\n<li>Improved Professional Options page readability and feature-card presentation.<\/li>\n<\/ul>\n\n<h4>5.0.27<\/h4>\n\n<ul>\n<li>Removed legacy question-count gating so included question management remains unrestricted.<\/li>\n<li>Added User ID to the Users table and expanded user search to support name, email, or user ID.<\/li>\n<li>Added AJAX refresh for Reports summary cards so changing the period updates the cards without a full page reload.<\/li>\n<li>Limited the Settings timezone dropdown to a curated list of 39 timezone choices.<\/li>\n<li>Polished the Professional Options page with a more visual card layout.<\/li>\n<\/ul>\n\n<h4>5.0.26<\/h4>\n\n<ul>\n<li>Replaced customer-facing and admin-facing Enrollment terminology with PVQ Setup terminology.<\/li>\n<li>Renamed setup status labels to Setup complete and Setup incomplete.<\/li>\n<li>Updated Users actions from Force Re-enrollment to Require PVQ reset.<\/li>\n<\/ul>\n\n<h4>5.0.25<\/h4>\n\n<ul>\n<li>Tightened LearnDash checkpoint detection so earlier lessons and topics remain accessible before the setup shortcode checkpoint.<\/li>\n<li>Changed course-sequence gating to fail open when the plugin cannot confidently determine course order, preventing accidental lockouts of earlier content.<\/li>\n<\/ul>\n\n<h4>5.0.24<\/h4>\n\n<ul>\n<li>Improved shortcode checkpoint gating so content after the PVQ setup checkpoint is blocked until setup is complete, while earlier content remains accessible.<\/li>\n<li>Changed PVQ setup gating to shortcode checkpoint mode by default, so earlier course lessons\/pages can stay accessible until users reach the setup shortcode.<\/li>\n<li>Added a Settings option to choose shortcode-only or sitewide setup protection.<\/li>\n<li>Reloads a gated page after setup so the original content appears immediately after setup.<\/li>\n<\/ul>\n\n<h4>5.0.22<\/h4>\n\n<ul>\n<li>Removed the PVQ setup popup gate.<\/li>\n<li>Required PVQ setup now uses the static setup form and replaces protected content until setup is complete.<\/li>\n<li>Users cannot view protected page content until they complete the static PVQ setup form.<\/li>\n<\/ul>\n\n<h4>5.0.21<\/h4>\n\n<ul>\n<li>Updated Help tab intro wording.<\/li>\n<li>Help form now explicitly pre-fills name and email from the logged-in WordPress user when available.<\/li>\n<li>Added FAQ guidance explaining shortcodes and how to use them.<\/li>\n<\/ul>\n\n<h4>5.0.19<\/h4>\n\n<ul>\n<li>Converted Settings into General, Verification, PVQ Setup Page, and Popup subtabs.<\/li>\n<li>Added settings validation that blocks invalid saves and shows a clear error message.<\/li>\n<li>Added seconds\/minutes\/hours unit selectors for time-based settings.<\/li>\n<li>Changed timezone to a dropdown, removed Category IDs and the separate Exclude administrators option.<\/li>\n<li>Renamed Required correct answers to Questions required per validation.<\/li>\n<\/ul>\n\n<h4>5.0.17<\/h4>\n\n<ul>\n<li>Matched the Reports Filters header size to the Most failed questions header.<\/li>\n<li>Doubled the vertical spacing between Reports filters and the Summary cards controls.<\/li>\n<\/ul>\n\n<h4>5.0.16<\/h4>\n\n<ul>\n<li>Added a Filters heading on the Reports tab.<\/li>\n<li>Increased spacing between report filters and summary cards selector.<\/li>\n<li>Renamed Last Year to Last year in the summary period dropdown.<\/li>\n<\/ul>\n\n<h4>5.0.15<\/h4>\n\n<ul>\n<li>Horizontally aligned Users total count with the Search Users field.<\/li>\n<li>Restyled Users total count as header text with no bubble background.<\/li>\n<li>Moved Reports Apply Filters and Export CSV controls inline with the main filters.<\/li>\n<li>Improved Summary cards label\/dropdown vertical alignment.<\/li>\n<li>Renamed the Reports summary period from Year to Last Year.<\/li>\n<\/ul>\n\n<h4>5.0.14<\/h4>\n\n<ul>\n<li>Cleaned up Users tab display count so it only appears once.<\/li>\n<li>Restyled Users total count without a white bubble background.<\/li>\n<li>Updated Reports filters to support Email or User ID search.<\/li>\n<li>Converted Reports Role filter to a dropdown of available WordPress roles.<\/li>\n<li>Changed Reports button text to Apply Filters.<\/li>\n<li>Replaced IP Address column with User ID in Reports.<\/li>\n<li>Added Summary Cards period selector with Last 24 hours, Last 7 days, Last 30 days, Year, and Lifetime options.<\/li>\n<li>Reports summary cards now default to the past 7 days.<\/li>\n<\/ul>\n\n<h4>5.0.13<\/h4>\n\n<ul>\n<li>Updated Users tab pagination to show 30 users per page.<\/li>\n<li>Added total user count and current display count to the Users tab.<\/li>\n<li>Added numbered Users pagination with arrows.<\/li>\n<li>Updated Last Verified in the Users tab to use the latest successful PVQ check instead of setup time.<\/li>\n<\/ul>\n\n<h4>5.0.12<\/h4>\n\n<ul>\n<li>Updated Dashboard Plugin Status to save through AJAX and immediately show Enabled or Disabled.<\/li>\n<li>Styled the Professional Options tab with the primary blue accent.<\/li>\n<li>Removed the Dropdown question type; questions are now Multiple choice or Free response.<\/li>\n<li>Refined the Questions screen controls and layout.<\/li>\n<li>Added an Archived Questions section with Un-archive and Delete actions.<\/li>\n<li>Reworded free response matching language for clarity.<\/li>\n<li>Tightened Questions tab section spacing.<\/li>\n<\/ul>\n\n<h4>5.0.11<\/h4>\n\n<ul>\n<li>Converted the Dashboard Plugin Status control to a simple inline auto-saving switch.<\/li>\n<li>Removed the Apply button from the Plugin Status toggle.<\/li>\n<li>Removed the white card\/bubble background around the Plugin Status control.<\/li>\n<\/ul>\n\n<h4>5.0.10<\/h4>\n\n<ul>\n<li>Updated Dashboard stat labels for consistency.<\/li>\n<li>Removed Plugin Version and Plugin Status stat cards.<\/li>\n<li>Added a top Dashboard enable\/disable toggle.<\/li>\n<li>Added Recent Activity pagination with five pages and an All Activity link to Reports.<\/li>\n<li>Limited Dashboard Recent Activity to 10 entries per page.<\/li>\n<li>Display PVQ setup + passed as Completed and updated setup notes to PVQ setup complete.<\/li>\n<\/ul>\n\n<h4>5.0.9<\/h4>\n\n<ul>\n<li>Added a repeatable testing suite for static package checks, WP-CLI smoke tests, optional Playwright browser tests, QA scenarios, and a manual release checklist.<\/li>\n<\/ul>\n\n<h4>5.0.8<\/h4>\n\n<ul>\n<li>Enforced the free-version cap of 5 PVQ questions in settings, frontend setup, and AJAX validation.<\/li>\n<\/ul>\n\n<h4>5.0.7<\/h4>\n\n<ul>\n<li>Updated the frontend setup required-question counter so it turns green once the minimum number of PVQ questions has been selected.<\/li>\n<\/ul>\n\n<h4>5.0.4<\/h4>\n\n<ul>\n<li>Hid saved PVQ questions and answers from users after setup.<\/li>\n<li>Replaced the setup form immediately after successful save so users cannot continue viewing selected setup details.<\/li>\n<li>Added a secure setup-complete message for users with completed setup instead of showing the setup form.<\/li>\n<\/ul>\n\n<h4>5.0.3<\/h4>\n\n<ul>\n<li>Applied visual styling refinements based on the reference PVQ plugin, including rounded cards, blue #0A369D accent states, refined modal styling, and improved admin dashboard spacing.<\/li>\n<\/ul>\n\n<h4>5.0.2<\/h4>\n\n<ul>\n<li>Changed user setup to dropdown-based PVQ question selection with a required-question counter.<\/li>\n<li>Improved verification modal JavaScript responsiveness and double-submit protection.<\/li>\n<li>Matched frontend PVQ fonts to the native WordPress admin font stack.<\/li>\n<li>Added more spacing between dashboard card numbers and labels.<\/li>\n<\/ul>\n\n<h4>5.0.1<\/h4>\n\n<ul>\n<li>Changed plugin navigation to top WordPress-style tabs across all PVQ Dashboard admin screens.<\/li>\n<li>Added Help tab feedback\/question form with Question, Feedback, Bug Report, and Feature Request message types.<\/li>\n<li>Kept submenu pages hidden from the left admin menu so the plugin feels like a tabbed settings application.<\/li>\n<\/ul>\n\n<h4>5.0.0<\/h4>\n\n<ul>\n<li>Repositioned plugin as generic PVQ Dashboard for native WordPress users.<\/li>\n<li>Added top-level PVQ Dashboard admin menu: Dashboard, Questions, Users, Reports, Settings, Help, and Professional Options.<\/li>\n<li>Added custom question table and verification log table.<\/li>\n<li>Added open-ended, dropdown, and multiple-choice question support.<\/li>\n<li>Added [dashboard_pvq_manage], [dashboard_pvq_status], and [dashboard_pvq_verify] shortcodes.<\/li>\n<li>Added blocking verification modal with timer, progress, retries, and lockout.<\/li>\n<li>Added CSV reports and REST status scaffold.<\/li>\n<\/ul>\n\n<h4>5.0.6<\/h4>\n\n<ul>\n<li>Polished dashboard\/report stat card typography, added Questions navigation link, removed Role filter description, tightened Most Failed Questions spacing, and increased Settings section headings.<\/li>\n<\/ul>\n\n<h4>5.0.5<\/h4>\n\n<ul>\n<li>Updated visual accent to #0A369D with lighter blue supporting states.<\/li>\n<li>Renamed Customers tab to Users.<\/li>\n<li>Reduced dashboard\/report card corner radius and improved number\/label spacing.<\/li>\n<li>Added explanatory text for Reports role filtering and Settings excluded user roles.<\/li>\n<li>Moved Export CSV controls lower on Reports and tightened Help section spacing.<\/li>\n<\/ul>","raw_excerpt":"PVQ Dashboard periodically verifies logged-in WordPress users with Personal Validation Questions.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351684"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nitinguptaji"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351684"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351684"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351684"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351684"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351684"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}