=== Find Blocks, Patterns & Shortcodes ===
Contributors: matthewneilcowan
Tags: gutenberg, blocks, search, admin, content
Requires at least: 5.0
Tested up to: 6.9.4
Requires PHP: 7.0
Stable tag: 1.1.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Find which posts and pages use specific Gutenberg blocks, patterns, and shortcodes with advanced search and CSV export functionality.

== Description ==

Find Blocks, Patterns & Shortcodes locates content containing specific Gutenberg blocks (including options to search by CSS class and HTML anchor attributes), patterns, and shortcodes, with a CSV export feature perfect for audits & analysis.

= Core Features =

* **Progressive search** with batch processing for large sites
* **Post type filtering** - search across posts, pages, or custom post types to find blocks, patterns, and shortcodes
* **CSV export** - export results for reporting, auditing, and analysis
* **Block dropdown** - select from all registered blocks
* **Attribute search** - find blocks by CSS class and HTML anchor attributes
* **Synced pattern search** - find usage of reusable blocks/patterns
* **Sortable results tables** for easy analysis
* **WP-CLI support** for automation

= Performance Optimized =

* Smart caching with 5-minute TTL
* Batch processing (100 posts per batch)
* Query optimization (IDs only fetch)
* Progress indicators for long operations
* Cancellable searches
* Hard limit protection (500-1000 posts)

= Security =

* Enhanced input validation with blacklisting
* Dual-layer rate limiting (user + IP)
* Timeout protection (25-second safeguard)
* Information disclosure prevention
* XSS and injection prevention
* Nonce auto-refresh for long sessions

= Accessibility =

* Screen reader compatible with ARIA live regions
* Full keyboard navigation support
* Visible focus indicators
* Form labels for all inputs
* Results count announcements
* Responsive design with 200% zoom support

== Installation ==

1. Upload the plugin files to `/wp-content/plugins/find-blocks-patterns-shortcodes/`
2. Activate the plugin through the 'Plugins' menu in WordPress
3. Navigate to Tools > Find Blocks, Patterns & Shortcodes
4. Start searching for blocks!

== Frequently Asked Questions ==

= What block name format should I use? =

Block names follow the format `namespace/block-name`. Examples:
* `core/paragraph`
* `core/image`
* `woocommerce/product-price`

= Can I search custom blocks? =

Yes! The plugin works with any registered Gutenberg block, including custom blocks from themes and plugins.

= How do I allow Editors to use this plugin? =

Add this filter to your theme's functions.php:
`add_filter('fbps_allow_editor_access', '__return_true');`

= Can I export the results? =

Yes! Click the "Export CSV" button after searching to download results as a spreadsheet.

= Does it work with WP-CLI? =

Yes! Use `wp block-usage search core/paragraph` for command-line searches.

= How do I search for synced patterns? =

Use the "Search for Synced Pattern Usage" section to find where reusable blocks/patterns are used.

== Screenshots ==

1. Main search interface with block dropdown and post type selection
2. Search results table with sortable columns and export csv button

== Changelog ==

= 1.1.1 =
* Fixed Edit links in search results not opening the post editor (URLs were double-HTML-encoded, leaving a literal `&#038;` in the query string so `action=edit` was never parsed)
* Edit links now open in a new tab, matching the View link behavior, so search results are preserved

= 1.1.0 =
* Added CSS class and HTML anchor search for block attributes
* Search by class/anchor alone or combined with block name
* Added configurable result table columns (Title, Type, Date shown by default; CSS Class and HTML Anchor optional)
* Column visibility toggles re-render results in real-time
* CSV export respects visible column selection
* Improved sorting arrow UX with larger Unicode indicators and hover states
* Refactored display functions to shared table builder for consistency

= 1.0.3 =
* Properly include assets (fixed version number)

= 1.0.2 =
* Properly include assets

= 1.0.1 =
* Refactored asset loading to use WordPress enqueue standards (wp_enqueue_style/wp_enqueue_script)
* Extracted inline CSS to separate file (assets/css/admin.css)
* Extracted inline JavaScript to separate file (assets/js/admin.js)
* Added version constant for consistent cache busting
* Improved code maintainability and browser caching
* Added translator comments for i18n best practices
* WordPress Plugin Review compliant

= 1.0.0 =
* Initial release
* Basic block search functionality
* Added progressive batch search for large sites
* Added post type filtering
* Added CSV export functionality
* Added synced pattern search
* Added WP-CLI support
* Added smart caching (5-minute TTL)
* Added cancel search functionality
* Added sortable results tables
* Enhanced security with IP-based rate limiting
* Performance optimizations

== WP-CLI Commands ==

Search for blocks:
`wp block-usage search core/paragraph --post-type=post,page --format=table`

Clear cache:
`wp block-usage clear-cache`

View security logs:
`wp block-usage logs --limit=100 --format=csv`

== Filters and Hooks ==

= Filters =

* `fbps_query_limit` - Adjust search limit (default: 500, max: 1000)
* `fbps_enable_security_logging` - Toggle security logging (default: true)
* `fbps_allow_editor_access` - Allow Editor role access (default: false)

= Actions =

* `fbps_security_event` - Hook into security event logging

== Privacy ==

This plugin:
* Does not collect any user data
* Does not make external API calls
* Stores security logs locally (last 1000 events)
* Logs include: timestamp, user ID, IP address, event type
* Security logs can be disabled via filter

== Support ==

For support, feature requests, or bug reports, please use the WordPress.org support forums.

== Credits ==

Developed by Matthew Cowan
