=== LinkSentry – Broken Content Reporter === Contributors: desk9 Tags: broken links, reports, feedback, downloads, images Requires at least: 6.0 Tested up to: 7.0 Requires PHP: 7.4 Stable tag: 1.0.1 Domain Path: /languages License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html LinkSentry adds a "Report an issue" button (shortcode + block). Readers can report broken links, downloads, or images. == Description == LinkSentry is a lightweight WordPress plugin that allows your blog readers to easily report broken content. Whether it's a broken download link, a dead external link, or a missing image, LinkSentry makes it simple for visitors to notify you. **Features:** * Shortcode `[linksentry]` and Gutenberg block "Report Issue (LinkSentry)" * Accessible modal dialog with keyboard navigation and ARIA labels * Issue type selection (Download, Link, Image, Other) * Optional message and email fields * Stores reports as a custom post type with metadata * Per-IP throttling to prevent spam * Nonce verification and honeypot field for security * Optional email notifications to site administrators * Lightweight: assets only load where the shortcode/block is used * Fully internationalized (ready for translation) **Security:** * Nonce verification on all submissions * Honeypot anti-spam field * Input sanitization and output escaping * Per-IP rate limiting via WordPress transients * IP addresses are hashed before storage **Admin Features:** * View all reports in the WordPress admin * Custom columns: Issue Type, Page URL, Message, Submitted date * Settings page under Settings → LinkSentry * Configure notification email, enable/disable notifications, throttle window * Customizable button and form labels == Installation == 1. Upload the `linksentry-broken-content-reporter` folder to `/wp-content/plugins/` 2. Activate the plugin through the 'Plugins' menu in WordPress 3. Insert the block "Report Issue (LinkSentry)" in any post/page, or use the shortcode `[linkbrco]` (or `[linksentry]` for backward compatibility) 4. Configure settings under Settings → LinkSentry (optional) == Shortcode Usage == The `[linksentry]` shortcode can be used anywhere in your posts, pages, or widgets. **Basic usage:** ``` [linksentry] ``` **With button style options:** ``` [linksentry buttonStyle="button"] [linksentry buttonStyle="text-link"] [linksentry buttonStyle="large-box"] ``` **With custom info text (for large-box style):** ``` [linksentry buttonStyle="large-box" infoText="Found an issue? Let us know!"] ``` **Available button styles:** * `button` - Default button style with icon (default) * `text-link` - Text link with icon, underline on hover * `large-box` - Full-width gray box with info text and button == Frequently Asked Questions == = Can guests submit reports? = Yes. Submissions are protected by nonce verification, honeypot field, and per-IP throttling. No login required. = Where do I see reports? = Reports appear in the WordPress admin sidebar under "Reports". You can view, edit, and manage them like regular posts. = How does throttling work? = By default, each IP address can submit one report per 60 seconds. This can be adjusted in Settings → LinkSentry. = Can I customize the button text? = Yes. Go to Settings → LinkSentry to customize the box title and submit button label. = Are reports deleted when I uninstall the plugin? = No. Reports are kept by default when you uninstall. This prevents accidental data loss. You can manually delete them if needed. == Screenshots == 1. Report button on frontend 2. Modal dialog for submitting reports 3. Reports list in admin 4. Settings page == Changelog == = 1.0.1 = * Fixed: Fatal error when using the `[linksentry]` / `[linkbrco]` shortcode without attributes (strict typing). * Fixed: Wrong page URL on sub-directory installs (duplicated sub-path). * Fixed: Duplicate HTML element IDs when multiple report boxes appear on one page (accessibility/validity). * Fixed: Block alignment selected in the editor is now applied on the front end. * Fixed: Block editor script now declares its dependencies for reliable loading. * Fixed: "Issue Type" admin column is now actually sortable. * Fixed: Notification emails no longer HTML-escape plain-text content. * Improved: Lighter unread-count query for the menu badge (runs once per request). * Removed: Debug logging and brittle third-party mail-plugin detection. * Fixed: Block now uses block API version 3 for WordPress 7.0+ iframe editor compatibility. * Fixed: Dashicons stylesheet is now loaded on the front end so button/modal icons render for logged-out visitors. * Fixed: Unread-count menu badge now uses the native WordPress red bubble and shows correctly on every admin page (previously unstyled outside the Reports screen). * Fixed: Notification email setting — an invalid stored address no longer silently disables notifications; it now falls back to the admin email, the field can be left empty as documented, and invalid input shows a settings error. * Compatibility: Tested up to WordPress 7.0. = 1.0.0 = * Initial release * Custom post type for reports * Shortcode and Gutenberg block * AJAX submission with security features * Email notifications * Admin settings page * Full internationalization support * Multiple button styles (button, text-link, large-box) for block and shortcode * Report content visible in editor with full message display * Report details meta box showing all report information * Menu badge showing count of unread reports * Automatic email notifications to admin on new reports * Delete all reports functionality in settings * Option to delete reports on plugin uninstall * Reports marked as read when viewed * Removed "Add New Report" capability from backend * Improved email notification formatting with report links == Upgrade Notice == = 1.0.1 = Bug-fix and compatibility release: fixes a shortcode fatal error, wrong URLs on sub-directory installs, duplicate IDs, and adds WordPress 7.0 compatibility. Recommended for all users. = 1.0.0 = Initial release of LinkSentry. Install and activate to start collecting broken content reports from your readers.