=== 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.

