{"id":303834,"date":"2026-05-03T12:47:04","date_gmt":"2026-05-03T12:47:04","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/psbdx-smart-report-management\/"},"modified":"2026-09-22T04:09:43","modified_gmt":"2026-09-22T04:09:43","slug":"psbdx-smart-report-management","status":"publish","type":"plugin","link":"https:\/\/pe.wordpress.org\/plugins\/psbdx-smart-report-management\/","author":23400334,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.1","stable_tag":"1.5.1","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"PSBDx Smart Report Management","header_author":"PSBDx","header_description":"AJAX-powered smart report management system for e-commerce orders, products, and online courses. HPOS compatible. Includes rate limiting, order auto-linking, and an admin dashboard widget.","assets_banners_color":"434b7c","last_updated":"2026-09-22 04:09:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/dev.psbdx.xyz\/documentations\/psbdx-smart-report-managment\/","header_author_uri":"https:\/\/dev.psbdx.xyz\/author\/mf-hamim\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":1087,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"atwfarhan","date":"2026-05-04 07:34:24","revision":3522034},"1.0.1":{"tag":"1.0.1","author":"psbdx","date":"2026-05-04 14:25:30","revision":3522466},"1.1.0":{"tag":"1.1.0","author":"psbdx","date":"2026-05-28 17:01:45","revision":3552539},"1.2.0":{"tag":"1.2.0","author":"psbdx","date":"2026-05-28 17:01:45","revision":3552539},"1.3.0":{"tag":"1.3.0","author":"psbdx","date":"2026-06-04 11:48:20","revision":3560853},"1.3.1":{"tag":"1.3.1","author":"psbdx","date":"2026-06-11 07:10:55","revision":3568416},"1.4.0":{"tag":"1.4.0","author":"psbdx","date":"2026-07-12 13:50:25","revision":3604859},"1.4.1":{"tag":"1.4.1","author":"psbdx","date":"2026-07-20 05:18:48","revision":3614213},"1.4.2":{"tag":"1.4.2","author":"psbdx","date":"2026-07-31 04:15:29","revision":3629359},"1.4.3":{"tag":"1.4.3","author":"psbdx","date":"2026-08-02 13:11:04","revision":3631789},"1.4.4":{"tag":"1.4.4","author":"psbdx","date":"2026-08-04 11:10:59","revision":3634088},"1.4.5":{"tag":"1.4.5","author":"psbdx","date":"2026-08-10 04:52:44","revision":3639958},"1.4.6":{"tag":"1.4.6","author":"psbdx","date":"2026-08-12 09:47:36","revision":3643140},"1.4.7":{"tag":"1.4.7","author":"psbdx","date":"2026-08-15 10:59:32","revision":3648476},"1.4.8":{"tag":"1.4.8","author":"psbdx","date":"2026-08-23 10:33:39","revision":3661663},"1.4.9":{"tag":"1.4.9","author":"psbdx","date":"2026-08-29 05:37:09","revision":3671123},"1.5.0":{"tag":"1.5.0","author":"psbdx","date":"2026-09-19 16:06:25","revision":3703448},"1.5.1":{"tag":"1.5.1","author":"psbdx","date":"2026-09-22 04:09:43","revision":3706586}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3521480,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3521480,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3521480,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3521480,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3706586,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/edit.php?post_type=psbdx_report_form\",\"login\":{\"username\":\"admin\",\"password\":\"password\"},\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"siteOptions\":{\"blogname\":\"PSBDx SRM Demo\",\"blogdescription\":\"Smart Report Management \\u2014 live preview\",\"permalink_structure\":\"\\\/%postname%\\\/\",\"timezone_string\":\"Asia\\\/Dhaka\"},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"psbdx-smart-report-management\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php require '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/\\\/ One published, in-stock product so there's something real to report on.\\n$product = new WC_Product_Simple();\\n$product->set_name( 'Demo Bluetooth Speaker' );\\n$product->set_regular_price( '39.99' );\\n$product->set_status( 'publish' );\\n$product->set_stock_status( 'instock' );\\n$product_id = $product->save();\\n\\n\\\/\\\/ One completed order against that product, so the frontend \\\"Report Issue\\\"\\n\\\/\\\/ button on an order page has something to attach to.\\n$order = wc_create_order();\\n$order->add_product( wc_get_product( $product_id ), 1 );\\n$order->set_address( array( 'first_name' => 'Jane', 'last_name' => 'Doe', 'email' => 'admin@example.com' ), 'billing' );\\n$order->set_status( 'completed' );\\n$order->calculate_totals();\\n$order->save();\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.1.0","1.2.0","1.3.0","1.3.1","1.4.0","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7","1.4.8","1.4.9","1.5.0","1.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3664965,"resolution":"1","location":"assets","locale":"","width":1536,"height":565},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3521486,"resolution":"2","location":"assets","locale":"","width":1920,"height":1028},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3664965,"resolution":"3","location":"assets","locale":"","width":1536,"height":565},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3664965,"resolution":"4","location":"assets","locale":"","width":1536,"height":565},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3664965,"resolution":"5","location":"assets","locale":"","width":1536,"height":565},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3664965,"resolution":"6","location":"assets","locale":"","width":1536,"height":565}},"screenshots":{"1":"Frontend report button and modal form on a product page.","2":"Admin dashboard showing Report Form Management Screen.","3":"Admin Report Logs list table with status badges, reporter, and order link columns.","4":"Admin Report Form configuration screen.","5":"Admin dashboard widget showing report customization screen."}},"plugin_section":[262246],"plugin_tags":[2353,261728,4049,11996,286],"plugin_category":[59],"plugin_contributors":[261729,261731,261730],"plugin_business_model":[],"class_list":["post-303834","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-ai","plugin_tags-complaint","plugin_tags-helpdesk","plugin_tags-support-ticket","plugin_tags-woocommerce","plugin_category-utilities-and-tools","plugin_contributors-atwfarhan","plugin_contributors-mfhamim","plugin_contributors-psbdx","plugin_committers-psbdx","plugin_support_reps-mfhamim"],"banners":{"banner":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/banner-772x250.png?rev=3521480","banner_2x":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/banner-1544x500.png?rev=3521480","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/icon-128x128.png?rev=3521480","icon_2x":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/icon-256x256.png?rev=3521480","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/screenshot-1.png?rev=3664965","caption":"Frontend report button and modal form on a product page."},{"src":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/screenshot-2.png?rev=3521486","caption":"Admin dashboard showing Report Form Management Screen."},{"src":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/screenshot-3.png?rev=3664965","caption":"Admin Report Logs list table with status badges, reporter, and order link columns."},{"src":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/screenshot-4.png?rev=3664965","caption":"Admin Report Form configuration screen."},{"src":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/screenshot-5.png?rev=3664965","caption":"Admin dashboard widget showing report customization screen."},{"src":"https:\/\/ps.w.org\/psbdx-smart-report-management\/assets\/screenshot-6.png?rev=3664965","caption":""}],"raw_content":"<!--section=description-->\n<p><strong>PSBDx Smart Report Management<\/strong> turns any WordPress site into a lightweight support desk. Customers report a problem \u2014 with an order, a product, a course, or anything else \u2014 through a fast AJAX modal that never reloads the page, and every submission lands in a clean, organized admin inbox your team actually enjoys working from.<\/p>\n\n<p>No support-ticket plugin bloat, no separate helpdesk to learn, no per-agent pricing. Just a focused, fast, genuinely useful report and complaint management system that plugs straight into WooCommerce and LearnPress \u2014 and, when you want it, hands the busywork of sorting and prioritizing incoming reports to AI.<\/p>\n\n<p><strong>Why site owners choose it<\/strong><\/p>\n\n<ul>\n<li><strong>It's instant.<\/strong> Reports submit over AJAX with no page reload, so customers actually finish the form instead of abandoning it.<\/li>\n<li><strong>It sorts itself.<\/strong> Turn on AI-assisted classification and every new report gets a suggested category and priority (Low \/ Medium \/ High) automatically \u2014 you triage a full inbox in minutes, not hours.<\/li>\n<li><strong>It gives customers a reference.<\/strong> Every report gets its own unique, human-readable Ticket ID, so a customer can follow up by email or phone and your team can find the exact report instantly.<\/li>\n<li><strong>It already knows your store.<\/strong> Reports from a WooCommerce order page auto-link to that order; reports from LearnPress courses, lessons, and quizzes are just as seamless.<\/li>\n<li><strong>It fits your workflow, not the other way around.<\/strong> Custom statuses, custom categories, per-form rate limiting, captcha, and a drag-and-drop form builder mean the plugin adapts to how you already work.<\/li>\n<\/ul>\n\n<p><strong>Key Features<\/strong><\/p>\n\n<ul>\n<li>AJAX-powered modal report form \u2014 no page reload, works anywhere via shortcode<\/li>\n<li>Optional AI-assisted triage (WordPress 7.0+): automatically suggests a category and priority for every new report using the built-in WordPress AI Client \u2014 gracefully disabled with no impact on the rest of the plugin if you're on an older WordPress version or haven't connected a provider<\/li>\n<li>\"Summarize with AI\" on the report edit screen \u2014 a plain-language explanation of what the customer is actually reporting, for reports that are long or vaguely worded<\/li>\n<li>AI Response Log: a rolling 3-hour audit trail of every AI request and response, so you can see exactly what the AI decided and why<\/li>\n<li>Unique, human-readable Ticket ID on every report \u2014 the customer's reference for following up, shown in their confirmation and report history<\/li>\n<li>Admin-defined report Categories and Low\/Medium\/High Priority, settable manually or by AI, editable any time from the report edit screen<\/li>\n<li>Drag-and-drop Form Builder: ten field types (name, email, phone, text, paragraph, number, select, radio, checkboxes, captcha), fully reorderable, mobile-friendly<\/li>\n<li>Five built-in report statuses with colour-coded badges (Processing, Contacting, Waiting, Solved, Failed), plus unlimited custom statuses<\/li>\n<li>E-commerce order auto-link \u2014 reports from an order page are automatically linked to that order in the admin, HPOS-compatible<\/li>\n<li>Per-form cooldown \/ rate limiting enforced on both the frontend and the server, so the same user can't spam a form<\/li>\n<li>Captcha support: Google reCAPTCHA, hCaptcha, and Cloudflare Turnstile<\/li>\n<li>Admin dashboard widget and admin-bar shortcut with live, at-a-glance unsolved-report counts<\/li>\n<li>Built-in FAQ builder with a <code>[psbdx_faq]<\/code> accordion shortcode for your own site's visitors<\/li>\n<li>Mobile-first responsive design throughout, including iOS safe-area support and a touch-friendly admin experience<\/li>\n<li>LearnPress course, lesson, and quiz page support, alongside WooCommerce<\/li>\n<li>Reporter identity (name and email) collected server-side from the WordPress session \u2014 never editable by the user, so it can't be spoofed<\/li>\n<li>Shortcodes: <code>[psbdx_report id=\"X\"]<\/code>, <code>[psbdx_user_reports]<\/code>, and <code>[psbdx_faq]<\/code><\/li>\n<\/ul>\n\n<p><strong>Also configurable, per form<\/strong><\/p>\n\n<ul>\n<li>Fully custom report reasons (comma-separated, \"Other\" always appended)<\/li>\n<li>Optional extra fields (e.g. Transaction ID, Coupon Code)<\/li>\n<li>Contact field with a required\/optional toggle<\/li>\n<li>Show or hide the reporter identity card in the form<\/li>\n<li>Auto-display on all products\/orders\/courses, or assign a form per item<\/li>\n<\/ul>\n\n<p><strong>Perfect for<\/strong><\/p>\n\n<ul>\n<li>WooCommerce stores that need a fast, structured way for customers to report an order or product problem<\/li>\n<li>Online course sites (LearnPress) fielding student questions about a specific course, lesson, or quiz<\/li>\n<li>Any WordPress site that wants a lightweight complaint\/report\/support-ticket system without a heavyweight external helpdesk<\/li>\n<\/ul>\n\n<p><strong>Shortcodes<\/strong><\/p>\n\n<pre><code>[psbdx_report id=\"X\"]\n<\/code><\/pre>\n\n<p>Display a report button and modal form. Replace X with the Report Form post ID shown in the Shortcode box.<\/p>\n\n<pre><code>[psbdx_user_reports]\n<\/code><\/pre>\n\n<p>Display a paginated table of the currently logged-in user's report history, including their ticket IDs.<\/p>\n\n<pre><code>[psbdx_faq]\n<\/code><\/pre>\n\n<p>Display your admin-managed FAQ as a clean accordion, anywhere on your site.<\/p>\n\n<h3>Developer Hooks<\/h3>\n\n<p>For developers building integrations or extensions on top of this plugin.<\/p>\n\n<p><strong>Report status changes<\/strong><\/p>\n\n<p>Instead of polling the database, listen for these action hooks \u2014 they fire from the one place in the plugin that ever writes a report's status, so they're guaranteed to fire exactly once per real change:<\/p>\n\n<pre><code>psbdx_srm_report_status_changed( $report_id, $old_status, $new_status, $context )\n<\/code><\/pre>\n\n<p>Fires for every status change, whatever the new status is.<\/p>\n\n<pre><code>psbdx_srm_report_status_changed_to_{$new_status}( $report_id, $old_status, $context )\n<\/code><\/pre>\n\n<p>Fires only for one specific new status (status run through <code>sanitize_key()<\/code>), e.g. <code>psbdx_srm_report_status_changed_to_solved<\/code>. Use this instead of the generic hook if you only care about one transition.<\/p>\n\n<pre><code>$context is an associative array:\n<\/code><\/pre>\n\n<ul>\n<li><code>report_id<\/code> (int) \u2014 same as the first hook argument, included for convenience.<\/li>\n<li><code>ticket_id<\/code> (string) \u2014 the report's human-readable ticket ID.<\/li>\n<li><code>submitter_id<\/code> (int) \u2014 numeric WP user ID of whoever filed the report, or <code>0<\/code> for a guest.<\/li>\n<li><code>submitter_email<\/code> (string) \u2014 the reporter's email address, if one was collected.<\/li>\n<li><code>old_status<\/code> (string|null) \u2014 the previous status key, or <code>null<\/code> if this report never had one before (i.e. this is the very first status it's ever had, from a brand-new submission).<\/li>\n<li><code>new_status<\/code> (string) \u2014 the new status key.<\/li>\n<li><code>changed_by<\/code> (int) \u2014 numeric WP user ID of whoever triggered the change (typically the logged-in admin editing the report), or <code>0<\/code> for a guest's own submission or an automated process.<\/li>\n<li><code>updated_at<\/code> (string) \u2014 MySQL datetime in GMT\/UTC.<\/li>\n<li><code>updated_at_local<\/code> (string) \u2014 MySQL datetime in the site's local timezone.<\/li>\n<li><code>source<\/code> (string) \u2014 where the change came from: <code>submission<\/code> (a brand-new report), <code>admin<\/code> (the report edit screen), or another value a specific integration may pass.<\/li>\n<\/ul>\n\n<p>Example:<\/p>\n\n<pre><code>add_action( 'psbdx_srm_report_status_changed', function( $report_id, $old_status, $new_status, $context ) {\n    error_log( sprintf(\n        'Ticket %s (user #%d): %s -&gt; %s',\n        $context['ticket_id'],\n        $context['submitter_id'],\n        $context['old_status'] ?? '(new)',\n        $new_status\n    ) );\n}, 10, 4 );\n<\/code><\/pre>\n\n<p>Note: bulk\/maintenance operations that write status directly to the database (CSV import, and the Repair &amp; Reset page's \"fix invalid status values\" tool) intentionally do not fire these hooks, since they're bulk restores rather than individual live status changes.<\/p>\n\n<h3>Upcoming Features<\/h3>\n\n<p>The following features are planned for future releases:<\/p>\n\n<ul>\n<li><strong>Email Notifications<\/strong> \u2014 Notify the admin on new submissions, and send a confirmation email to the reporter.<\/li>\n<li><strong>Status Change Emails<\/strong> \u2014 Email the reporter automatically when their report status is updated.<\/li>\n<li><strong>CSV Export<\/strong> \u2014 Export all report logs as a CSV file from the admin screen.<\/li>\n<li><strong>File \/ Screenshot Attachment<\/strong> \u2014 Let users attach a screenshot or file to their report. (Added \u2705)<\/li>\n<li><strong>Internal Admin Notes<\/strong> \u2014 Private notes on each report log, visible only to admins.<\/li>\n<li><strong>Report Categories \/ Tags<\/strong> \u2014 Organise reports with admin-defined categories for easier filtering. (Added \u2705)<\/li>\n<li><strong>Guest Email Verification<\/strong> \u2014 Allow non-logged-in users to submit with email verification before saving. (Added \u2705)<\/li>\n<li><strong>Duplicate Detection<\/strong> \u2014 Alert admins when a new report closely matches an existing open one. (Added \u2705)<\/li>\n<li><strong>Report Priority Levels<\/strong> \u2014 Assign Low \/ Medium \/ High priority to reports, manually or via AI. (Added \u2705)<\/li>\n<li><strong>REST API Endpoints<\/strong> \u2014 Query and manage reports programmatically via the WordPress REST API.<\/li>\n<li><strong>AI Knowledgebase Suggestions<\/strong> \u2014 Recommend existing help-article answers to reporters based on their report content. (Settings \u2192 AI \u2192 Knowledgebase \u2014 coming soon)<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>psbdx-smart-report-management<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through <strong>Plugins &gt; Installed Plugins<\/strong>.<\/li>\n<li>Go to <strong>Report Forms<\/strong> in the admin sidebar and click <strong>Add New Form<\/strong>.<\/li>\n<li>Configure the form, then copy the shortcode from the <strong>Shortcode<\/strong> meta box.<\/li>\n<li>Paste the shortcode on any page, post, or widget area.<\/li>\n<\/ol>\n\n<p>Alternatively, enable global auto-display in the form settings to show the report button on all product or order pages automatically.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20use%20ai%3F\"><h3>Does this plugin use AI?<\/h3><\/dt>\n<dd><p>Optionally, yes. If you're on WordPress 7.0+ and have an AI provider connected under Settings \u2192 Connectors, you can turn on AI-assisted classification (Settings \u2192 AI) so every new report automatically gets a suggested category and priority, and you can click \"Summarize with AI\" on any report for a plain-language explanation of the issue. It's entirely opt-in \u2014 the plugin works fully without it.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%27m%20on%20an%20older%20wordpress%20version%20or%20don%27t%20have%20ai%20set%20up%3F\"><h3>What happens if I'm on an older WordPress version or don't have AI set up?<\/h3><\/dt>\n<dd><p>Nothing breaks. The AI controls are automatically greyed out and disabled if your WordPress version is below 7.0 or no AI provider is connected. You (and your admins) can still set a Category and Priority manually on every report, exactly as if AI were never part of the plugin.<\/p><\/dd>\n<dt id=\"what%20is%20the%20ticket%20id%2C%20and%20who%20sees%20it%3F\"><h3>What is the Ticket ID, and who sees it?<\/h3><\/dt>\n<dd><p>Every submitted report gets a unique, human-readable Ticket ID (e.g. \"PSRM-20260714-8K3F2A\"). The reporting user sees it in their submission confirmation and their report history, so they have something concrete to reference if they follow up by email or phone. Admins can search for a ticket ID an user gives them to jump straight to that report.<\/p><\/dd>\n<dt id=\"can%20i%20set%20my%20own%20report%20categories%3F\"><h3>Can I set my own report categories?<\/h3><\/dt>\n<dd><p>Yes. Add your own categories under Settings \u2192 Categories. They'll appear in the manual Category dropdown on every report, and \u2014 if AI is enabled \u2014 the AI will be constrained to pick from that exact list instead of inventing its own.<\/p><\/dd>\n<dt id=\"can%20i%20add%20a%20faq%20section%20for%20my%20own%20site%27s%20visitors%3F\"><h3>Can I add a FAQ section for my own site's visitors?<\/h3><\/dt>\n<dd><p>Yes. Go to the FAQ admin page, add your questions and answers, and drop the <code>[psbdx_faq]<\/code> shortcode anywhere on your site to display them as a clean accordion.<\/p><\/dd>\n<dt id=\"can%20guests%20submit%20reports%3F\"><h3>Can guests submit reports?<\/h3><\/dt>\n<dd><p>Yes. Guest reports are logged without a user association. The reporter name defaults to \"Guest\".<\/p><\/dd>\n<dt id=\"can%20i%20disable%20the%20reporter%20identity%20card%20shown%20in%20the%20form%3F\"><h3>Can I disable the reporter identity card shown in the form?<\/h3><\/dt>\n<dd><p>Yes. Each form has an \"User Identity Display\" toggle in its configuration. When turned off, the read-only name and email card is hidden from the form \u2014 but identity is still collected server-side for the admin log.<\/p><\/dd>\n<dt id=\"how%20does%20rate%20limiting%20work%3F\"><h3>How does rate limiting work?<\/h3><\/dt>\n<dd><p>Each form has a configurable cooldown (in minutes, default 30). Once a logged-in user submits a report via a form, they cannot submit again through that same form until the cooldown expires. The cooldown is enforced both on the frontend (form is hidden) and in the AJAX handler (server rejects the request even if the UI is bypassed).<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20require%20any%20other%20plugins%3F\"><h3>Does the plugin require any other plugins?<\/h3><\/dt>\n<dd><p>No. PSBDx Smart Report Management works as a standalone plugin. E-commerce and LearnPress integrations activate automatically when those plugins are present.<\/p><\/dd>\n<dt id=\"what%20is%20the%20order%20auto-link%20feature%3F\"><h3>What is the order auto-link feature?<\/h3><\/dt>\n<dd><p>When a user submits a report from an order page (e.g. My Account &gt; Orders &gt; View Order), the plugin automatically detects and stores the order ID. The admin Report Log shows a direct link to the order, and the user's report history table shows the order number instead of a URL.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Is it compatible with High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares HPOS compatibility and uses <code>wc_get_order()<\/code> with <code>get_edit_order_url()<\/code> for all order links.<\/p><\/dd>\n<dt id=\"is%20it%20mobile-friendly%2C%20for%20both%20visitors%20and%20admins%3F\"><h3>Is it mobile-friendly, for both visitors and admins?<\/h3><\/dt>\n<dd><p>Yes. The report form and modal are mobile-first with iOS safe-area support, and the admin screens (report list, response view, AI Response Log, settings) are all built with responsive breakpoints so you can manage reports comfortably from a phone.<\/p><\/dd>\n<dt id=\"from%20where%20i%20can%20read%20all%20the%20documentations%3F\"><h3>From where I can read all the documentations?<\/h3><\/dt>\n<dd><p>We are happy to see that you are interested to read the documentations. Please visit https:\/\/dev.psbdx.xyz\/documentations\/psbdx-smart-report-managment\/<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fix: the auto-inserted Report button could fail to appear at all on a WooCommerce product page using the newer block-based Single Product template \u2014 WooCommerce doesn't reliably fire <code>woocommerce_single_product_summary<\/code> (or populate the current product) on those templates unless a specific block is present, which a customised template may not include. Added a fallback hook and a more defensive way of resolving the current product so the button shows up either way.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: a \"Customer Rating Link\" for support agents \u2014 when a report is marked Solved, a one-time link inviting the reporter to rate the agent is generated automatically (once per report, never regenerated) and emailed to them if an address was collected; their star rating is applied directly to that agent's rating. The rating question lives in its own protected form \u2014 fully editable (wording, extra fields, star count) but the rating field itself, and the form as a whole, can't be deleted, only turned off entirely under Support Agents \u2192 Settings.<\/li>\n<li>New: Conditional logic on Select and Radio fields (Form Builder \u2192 field settings \u2192 \"Enable conditional logic\"). Two modes:\n\n<ul>\n<li>Conditional Sections \u2014 pick, per answer, which section the Next button jumps to (or whether it submits the form immediately), overriding that page's own default next-section behavior. If more than one field on a page has this enabled, the first one (in field order) whose answer has a rule wins.<\/li>\n<li>Conditional Fields \u2014 instantly show another field the moment a specific answer is chosen, with no Next click needed \u2014 the same idea as Google Forms' show\/hide-based-on-answer. Fully enforced server-side too, not just hidden by CSS: a field that was never actually revealed is never treated as required on submit, no matter what its own settings say.<\/li>\n<\/ul><\/li>\n<li>New field types: Website \/ URL (validated), Hidden Field (a fixed value, the page URL, or today's date \u2014 invisible to visitors, useful for tracking context), and Agreement \/ Consent (a single checkbox with its own label text and an optional link, e.g. to a Terms of Service page).<\/li>\n<li>Fix: when a Conditional Section rule pointed at \"Submit the form\" on a page that still had sections after it, the button correctly submitted when clicked but kept showing \"Next\" right up until then \u2014 misleading. The button now updates live to say the right thing (Next vs Submit) as soon as an answer changes, not just at click time.<\/li>\n<li>New: a customizable Success Message (Form Builder \u2192 Settings \u2192 Success Message), shown to the visitor right after they submit. Uses the same rich-text editor as a normal post, so formatting (bold, links, lists, line breaks) is fully supported and survives saving intact \u2014 WordPress's sanitization on save is deliberately the same permissive, safe rule set it trusts for post content itself (<code>wp_kses_post()<\/code>), not the stricter plain-text rule that would otherwise strip it. Comes with a sensible default; supports a <code>{ticket_id}<\/code> placeholder to show the ticket ID inline instead of (or in addition to) the automatic line underneath.<\/li>\n<li>Fix: a duplicate array key in the email settings meant the \"Report Assigned\" email template's description was silently overridden by a near-identical second copy \u2014 harmless in practice (the second copy was the more complete one) but cleaned up while working nearby.<\/li>\n<\/ul>\n\n<h4>1.4.9<\/h4>\n\n<ul>\n<li>Fix: the \"Next\" button on multi-section forms could silently do nothing on some mobile browsers (iOS Safari in particular) when a required field on that page was empty \u2014 it was relying entirely on the browser's own native validation popup, which those browsers can fail to show inside a scrolling modal. It now shows its own clear, always-visible error message and highlights the field instead. While fixing this we also found and fixed a related gap: a required Checkboxes field could never actually be enforced (no supported way existed to require \"at least one checked\" via plain HTML) \u2014 it now blocks the same way as every other required field.<\/li>\n<li>New: the \"Reporting: {page title}\" bar shown at the top of popup forms can now be hidden per-form (Form Builder \u2192 Settings \u2192 Button Settings).<\/li>\n<li>New: five more field types, matching everything Google Forms offers \u2014 Date, Time, Linear Scale, Multiple Choice Grid, and Checkbox Grid. All fully validated server-side (dates\/times must be real, scale answers must be within the configured range, grid answers must be one of that field's own defined columns).<\/li>\n<li>New: Date fields can be limited to a selectable range (earliest\/latest date) with specific blocked dates within that range (e.g. holidays or fully-booked days). Time fields get the same range + blocked-times controls, plus a 12-hour or 24-hour display format setting \u2014 all enforced server-side, not just in the picker.<\/li>\n<li>Fix: Date and Time fields now use fully custom popups (a real calendar for Date, a scroll-wheel picker for Time) instead of the native browser inputs. This fixes blocked-date\/time range filtering not actually being enforced in the picker itself, and fixes a native-date-picker quirk where a blocked date in the middle of an allowed range could make an unrelated, perfectly valid day next to it behave oddly. The Time picker also gained a time zone selector, defaulting to the visitor's own device time zone.<\/li>\n<li>Fix: scrolling inside the Time picker's hour\/minute wheel could get mistaken for scrolling the page and close the picker \u2014 fixed so only scrolling outside it closes it. Also fixed the Date picker's Prev\/Next month buttons appearing to do nothing (they were navigating correctly, then immediately closing) and a case where picking a hour could leave an already-blocked minute looking selected.<\/li>\n<li>New: the calendar popup's month\/year heading is now clickable and opens a year picker, for quickly jumping to a specific year instead of clicking through months one at a time. The year range now defaults to 120 years back (enough for a date-of-birth field) instead of a narrow \u00b110 years, and a \"type a year\" box lets you jump straight there instead of scrolling.<\/li>\n<li>Fix: tapping that \"type a year\" box on mobile opened the keyboard and immediately closed it again \u2014 the popup was set to close on <code>resize<\/code>, and opening the on-screen keyboard shrinks the visible viewport, which triggers a resize the instant you tap in. It now stays open while you're actually typing in it.<\/li>\n<li>New: Time zone restriction for Time fields \u2014 allow only specific zones, or block specific zones. If a visitor's own time zone isn't in the allowed list, the form tries the site's own default time zone first, then an admin-set fallback zone, and shows a small note next to the field explaining that a default was auto-selected.<\/li>\n<li>New: every report form now shows a small \"Powered by PSBDx\" line underneath it.<\/li>\n<\/ul>\n\n<h4>1.4.8<\/h4>\n\n<ul>\n<li>New: Title \/ Heading and Section Break field types in the Form Builder. Title is a read-only heading (with optional subtext) you can drop anywhere in a form. Section splits the form into pages \u2014 same idea as a Google Forms section: everything after a Section field becomes a new page shown after a \"Next\" button, each section has its own optional title\/description, and a per-section \"After this section\" setting controls whether it continues to the next section or submits the form immediately. A thin progress line appears below the button on multi-section forms.<\/li>\n<li>New: every field type (not just Title\/Section) can now have optional help text shown underneath it, set from the field's settings panel in the Form Builder.<\/li>\n<li>New: the popup form's icon can now be replaced with any image from the Media Library (Form Builder \u2192 Settings \u2192 Button Settings \u2192 Modal Icon). Leave it empty to keep the default warning icon.<\/li>\n<li>Fix: the \"Reporting: {page title}\" context bar was showing on inline-embedded forms (<code>mode=\"inline\"<\/code>), which reads oddly when the form is already sitting on that page's own content. Popup and popup-link forms still show it.<\/li>\n<li>Fix: the captcha script (reCAPTCHA\/hCaptcha\/Turnstile) now loads with the <code>async<\/code> strategy, matching every provider's own recommended embed snippet \u2014 browsers increasingly block or delay third-party-cookie-dependent scripts that aren't loaded this way, which could leave the widget stuck blank.<\/li>\n<li>Improved: server-side validation for v2 form submissions is significantly stricter \u2014 Email fields must be a valid address, Number fields must be numeric, Mobile fields must look like a phone number, and Select\/Radio\/Checkbox submissions are now checked against that field's own defined choices (and its \"Other\" setting) instead of accepting any posted value. Also fixed a related edge case where a crafted value could trigger \"Other\" handling on field types that don't support it.<\/li>\n<li>Removed: the old v1 flat-settings Form Builder and its \"legacy form\" migration prompt are gone \u2014 every form now uses the v2 builder exclusively. Any form still on v1 is converted to an equivalent v2 field list automatically the moment its edit screen is opened; nothing is lost, there's just no more manual \"migrate\" step or admin nag about it.<\/li>\n<\/ul>\n\n<h4>1.4.7<\/h4>\n\n<ul>\n<li>New: Form themes now live in their own \"Themes\" tab in the Form Builder (moved out of Settings) with a Light (default) and Dark theme built in \u2014 pick a different look, including field styling and the ticket response\/view page, per form.<\/li>\n<li>New: per-form \"Disable theme animations\" toggle in the Themes tab, for accessibility, slower devices, or a calmer look \u2014 a theme's colours\/layout still apply, only motion is turned off.<\/li>\n<li>New: \"Add More Themes\" button opens the PSBDx theme marketplace; installing the free \"PSRM Themes by PSBDx\" addon adds one-click premium themes to the same picker.<\/li>\n<li>New: <code>psbdx_srm_theme_sources<\/code> filter lets addons\/integrations register their own theme folders without ever touching this plugin's files.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>New: Support Agents system \u2014 add users as support agents from a dedicated admin submenu, set their work hours, and let the plugin auto-assign new reports to a free agent (notifying only that agent) when replies are enabled. An abandoned report is automatically handed to another free agent instead of sitting unassigned.<\/li>\n<li>New: Administrators are added as agents automatically; a plugin-level Super Administrator designation is the only one that can manage\/edit\/remove other administrators from the agent list.<\/li>\n<li>New: <code>[psbdx_user_reports]<\/code> now shows a full agent portal (My Reports, Assigned Reports, Search Ticket, and Manage Agents for admins) to any support agent or administrator, with per-report reply\/status\/abandon\/handover tools and an admin-only activity log.<\/li>\n<li>New: Agent Rating \u2014 a 2.5-star starting score per agent, shown in Agent Management, that rises with completed tickets and falls when a report is abandoned or left for an admin to reassign.<\/li>\n<li>New: once a report is marked Solved, neither the reporter nor any agent can send another message until someone reopens it (a \"Reopen This Report\" button for the reporter; agents just change the status). Reports from a form with replies disabled are marked Solved automatically.<\/li>\n<li>Fix: mobile layout of the report view &amp; reply page \u2014 agent tools and reply buttons had no dedicated styling (inherited unstyled wp-admin button classes on the frontend), causing cramped padding and unreliable taps on small screens; now use the plugin's own responsive button\/row styles.<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>New: Setup Wizard for first-time installs (mailing setup, starter form, reopenable anytime via the \"Setup Wizard\" action link or Repair &amp; Reset).<\/li>\n<li>New: inline form embedding (<code>mode=\"inline\"<\/code>) and URL popup links (append <code>?&lt;form id&gt;<\/code> to any page).<\/li>\n<li>New: Attachment field (admin-configurable file types\/size limits) and Review (star rating) field types.<\/li>\n<li>New: file attachments in reply threads, a full \"Attachments\" management box (manual delete anytime), and optional auto-delete on Solved per field.<\/li>\n<li>New: optional real email attachments for reply notifications (Settings \u2192 Email), off by default.<\/li>\n<li>Fix: popup links now work on hosts that inject extra query parameters (e.g. some free hosts).<\/li>\n<li>Fix: asset cache-busting no longer depends on the plugin version number, so CSS\/JS fixes reach browsers immediately.<\/li>\n<li>Improved: mobile touch targets and layout across PSBDx's own admin screens.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>New: \"Always require a verified email\" option for API submissions.<\/li>\n<li>Security: API brute-force lockout, peppered secret hashing, OTP send throttling.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>New: External API for programmatic report submission \u2014 API keys, domain\/IP whitelisting, OTP-verified email, session-based <code>\/start<\/code> \u2192 <code>\/field<\/code> \u2192 <code>\/verify-otp<\/code> \u2192 <code>\/submit<\/code> flow.<\/li>\n<li>Critical fix: report\/reply submission could fatal on hosts with short execution-time limits; AI classification\/auto-reply\/notifications now run after the response is sent.<\/li>\n<li>New: Sender name &amp; email under Settings \u2192 Email.<\/li>\n<li>Fix: email template saving no longer strips literal backslashes.<\/li>\n<li>New: automatic detection of hosts that block the API (e.g. the InfinityFree family), with a self-test and clear admin notice.<\/li>\n<li>Fix: CSV form import no longer uses a deprecated WordPress function.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>New: reply threads on reports (frontend + admin), with an optional automatic AI reply.<\/li>\n<li>New: \"Improve with AI\" \/ \"Generate AI Reply\" tools for admins.<\/li>\n<li>New: email notifications (5 events, fully editable), CSV import\/export, dedicated report detail page.<\/li>\n<li>New: report status change hooks (<code>psbdx_srm_report_status_changed<\/code>) for developers.<\/li>\n<li>Improved: redesigned FAQ with live search.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>New: unique ticket IDs, AI-assisted report classification (WordPress 7.0+), AI Response Log.<\/li>\n<li>New: Report Categories, manual Category &amp; Priority override, Summarize with AI.<\/li>\n<li>Improved: \"Report Logs\" renamed to \"Responses\"; redesigned response view; mobile-responsive admin.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: Field Settings is now a popup (drawer on desktop, bottom sheet on mobile) at every viewport.<\/li>\n<li>New: fully functional mobile Form Builder.<\/li>\n<li>Fixed: several Form Builder layout\/overflow\/touch bugs on mobile and in-between viewport widths.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Improved: security scan system, Repair &amp; Reset status banner, admin bar reports shortcut, Support submenu page.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: v2 drag-and-drop Form Builder with a 10-field Field Library, legacy form migration, and a v2-aware submission handler \u2014 fully backward compatible with v1 forms.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: Captcha support (reCAPTCHA, hCaptcha, Turnstile). Bug fixes.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: PSBDx Reports admin menu, custom statuses, per-form\/global rate limiting, Repair &amp; Reset diagnostics, conflict guard, multisite support.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>New: admin review-notice prompt, Documentation link, improved multisite activation handling.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: AJAX report modal, per-form rate limiting, WooCommerce\/LearnPress integration, admin dashboard widget, <code>[psbdx_report]<\/code> \/ <code>[psbdx_user_reports]<\/code> shortcodes.<\/li>\n<\/ul>\n\n<p>Full release notes for every version: https:\/\/dev.psbdx.xyz\/<\/p>","raw_excerpt":"AI-assisted support ticket &amp; complaint system for WordPress \u2014 instant AJAX forms, smart triage, ticket IDs, deep WooCommerce\/LearnPress support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/303834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=303834"}],"author":[{"embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/psbdx"}],"wp:attachment":[{"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=303834"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=303834"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=303834"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=303834"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=303834"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pe.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=303834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}