{"id":365623,"date":"2026-09-19T10:05:47","date_gmt":"2026-09-19T10:05:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/the-bonnie-situation\/"},"modified":"2026-09-19T10:05:33","modified_gmt":"2026-09-19T10:05:33","slug":"the-bonnie-situation","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/the-bonnie-situation\/","author":13653649,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.7","requires_php":"8.1","requires_plugins":null,"header_name":"The Bonnie Situation","header_author":"Red Pocket","header_description":"Store Contact Form 7 submissions, then auto-delete them on a schedule - capture and browse without hoarding PII. Clean it up before Bonnie gets home.","assets_banners_color":"c3c1b9","last_updated":"2026-09-19 10:05:33","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/beforebonnie.com","header_author_uri":"https:\/\/redpocket.hk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":73,"num_ratings":0,"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":"nicksull","date":"2026-09-19 10:05:33","revision":3703186}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3703186,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3703186,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3703186,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3703186,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3703186,"resolution":"1","location":"assets","locale":"","width":3134,"height":1664},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3703186,"resolution":"2","location":"assets","locale":"","width":3130,"height":1660},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3703186,"resolution":"3","location":"assets","locale":"","width":3162,"height":1772}},"screenshots":{"1":"Submissions list with status views, search and filtering.","2":"Single submission detail view.","3":"Privacy &amp; Retention settings."}},"plugin_section":[],"plugin_tags":[5445,1152,6101,131785,396],"plugin_category":[42,54],"plugin_contributors":[281568],"plugin_business_model":[],"class_list":["post-365623","plugin","type-plugin","status-publish","hentry","plugin_tags-cf7","plugin_tags-contact-form-7","plugin_tags-data-retention","plugin_tags-gdpr","plugin_tags-privacy","plugin_category-contact-forms","plugin_category-security-and-spam-protection","plugin_contributors-nicksull","plugin_committers-nicksull"],"banners":{"banner":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/banner-772x250.png?rev=3703186","banner_2x":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/banner-1544x500.png?rev=3703186","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/icon-128x128.png?rev=3703186","icon_2x":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/icon-256x256.png?rev=3703186","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/screenshot-1.png?rev=3703186","caption":"Submissions list with status views, search and filtering."},{"src":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/screenshot-2.png?rev=3703186","caption":"Single submission detail view."},{"src":"https:\/\/ps.w.org\/the-bonnie-situation\/assets\/screenshot-3.png?rev=3703186","caption":"Privacy &amp; Retention settings."}],"raw_content":"<!--section=description-->\n<p>Contact Form 7 does not store submissions: once the email is sent, the data is gone. The usual fix is to bolt on a storage add-on that keeps everything forever, including IP addresses, with no expiry. The moment a form collects personal data, that becomes unbounded risk.<\/p>\n\n<p><strong>The Bonnie Situation<\/strong> captures every Contact Form 7 submission to the database <em>and<\/em> treats stored data as a liability. It suppresses IP storage by default and automatically deletes entries after a configurable number of days, enforced by a scheduled job. Clean it up before Bonnie gets home.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Capture<\/strong> every CF7 submission to a custom table, after mail handling, so it never delays or blocks your email.<\/li>\n<li><strong>Browse, search, sort and filter<\/strong> submissions in a modern DataViews admin, with a per-submission detail view.<\/li>\n<li><strong>Delete<\/strong> individual submissions permanently, on demand.<\/li>\n<li><strong>Delete-only retention:<\/strong> suppress IP storage and automatically delete submissions after a configurable number of days \u2014 enforced daily by WP-Cron, with an audit log of every purge.<\/li>\n<li><strong>Subject-request tooling:<\/strong> integrates with WordPress's Tools \u2192 Export\/Erase Personal Data so requests by email include captured submissions.<\/li>\n<\/ul>\n\n<h4>Privacy-first defaults<\/h4>\n\n<p>IP storage is off, spam is discarded, user agent and referrer are off, and only mapped fields are stored. The plugin provides controls that support GDPR \/ UK GDPR \/ Australian Privacy Act \/ CCPA compliance; lawful basis and configuration remain the site operator's responsibility. This is not legal advice.<\/p>\n\n<h4>Bonnie Pro<\/h4>\n\n<p>This plugin is fully functional on its own: it captures submissions and enforces delete-only retention. <a href=\"https:\/\/beforebonnie.com\/pro\/\">Bonnie Pro<\/a>, a separate add-on distributed off WordPress.org, adds:<\/p>\n\n<ul>\n<li><strong>CSV \/ JSON export<\/strong> of the current view or selected rows.<\/li>\n<li><strong>Address book<\/strong> of deduplicated contacts, with click-through to each contact's submissions.<\/li>\n<li><strong>Trash workflow<\/strong> \u2014 soft-delete with a restore window and a hard cap that force-deletes trashed entries, instead of the free delete-only model.<\/li>\n<li><strong>Bulk delete<\/strong> across selected submissions.<\/li>\n<li><strong>Per-form overrides<\/strong> \u2014 each form sets its own policy, window, IP rule and field mapping on the Contact Form 7 editor.<\/li>\n<li><strong>IP anonymisation<\/strong> \u2014 store a masked address (last octet \/ last 80 bits) instead of the full IP.<\/li>\n<li><strong>WP-CLI<\/strong> \u2014 <code>wp bonnie purge<\/code> runs the retention sweep on demand.<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>Bonnie is free software (GPLv2 or later). The complete, human-readable source \u2014\nincluding the React admin under <code>src\/<\/code> and the build tooling \u2014 is developed in\nthe open:<\/p>\n\n<p>https:\/\/github.com\/nicksull\/the-bonnie-situation<\/p>\n\n<p>That repository holds the un-minified source for every shipped asset \u2014 the\nReact admin entry points <code>src\/index.js<\/code> and <code>src\/settings.js<\/code> that compile to\n    build\/index.js and <code>build\/settings.js<\/code>. Build them with\n<a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>:<\/p>\n\n<pre><code>npm install\nnpm run build\n<\/code><\/pre>\n\n<p>Bonnie Pro is a separate add-on, distributed off WordPress.org. This plugin is\nfully functional without it.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate <strong>Contact Form 7<\/strong> (Bonnie is an add-on for it).<\/li>\n<li>Upload the <code>the-bonnie-situation<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install through the Plugins screen.<\/li>\n<li>Activate Bonnie through the <strong>Plugins<\/strong> screen.<\/li>\n<li>Visit <strong>Bonnie \u2192 Settings<\/strong> to choose your retention policy. Submissions are captured automatically from then on.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20interfere%20with%20contact%20form%207%20sending%20email%3F\"><h3>Does this interfere with Contact Form 7 sending email?<\/h3><\/dt>\n<dd><p>No. Capture runs after mail handling and is wrapped so a storage failure is logged silently rather than breaking the form.<\/p><\/dd>\n<dt id=\"are%20ip%20addresses%20stored%3F\"><h3>Are IP addresses stored?<\/h3><\/dt>\n<dd><p>Not by default. IP storage is off out of the box. Bonnie Pro adds the option to anonymise (mask the last octet \/ last 80 bits) instead of storing the full address.<\/p><\/dd>\n<dt id=\"does%20the%20free%20version%20keep%20a%20trash%20or%20recycle%20bin%3F\"><h3>Does the free version keep a trash or recycle bin?<\/h3><\/dt>\n<dd><p>No. The free core is delete-only: submissions past their retention window are permanently deleted, with no second store to manage. Bonnie Pro adds an optional trash workflow \u2014 soft-delete with a restore window and a hard cap that force-deletes trashed entries.<\/p><\/dd>\n<dt id=\"how%20do%20i%20guarantee%20purge%20timing%20on%20a%20low-traffic%20site%3F\"><h3>How do I guarantee purge timing on a low-traffic site?<\/h3><\/dt>\n<dd><p>Retention runs daily via WP-Cron. On sites with little traffic, trigger <code>wp-cron.php<\/code> from a real system cron so the sweep fires on schedule.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: capture Contact Form 7 submissions to a custom table, a DataViews submissions admin (search\/sort\/filter with a per-submission detail view and permanent delete), delete-only retention with a scheduled daily purge and audit log, IP-storage suppression, and WordPress Personal Data export\/erase integration.<\/li>\n<\/ul>","raw_excerpt":"Store Contact Form 7 submissions and auto-delete them on a schedule \u2014 capture and browse without hoarding PII. Clean it up before Bonnie gets home.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365623","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365623"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nicksull"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365623"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365623"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365623"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365623"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365623"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}