MDCNA Clean Date Tracker
WordPress plugin for tracking clean dates at the Miami-Dade Convention of Narcotics Anonymous (MDCNA 2026). Integrates with Fluent Forms for registration, stores clean dates, and provides shortcodes for clean time display, leaderboards, and aggregate stats.
by MDCNA Dev · github.com/derekgallardo01/mdcna-clean-date-tracker · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/derekgallardo01/mdcna-clean-date-tracker/archive/refs/heads/master.zipReadme
MDCNA Clean Date Tracker — Plugin Documentation
Version: 1.0.0
For: Miami-Dade Convention of Narcotics Anonymous (MDCNA 2026)
Form: Fluent Forms ID #13
Installation
- Upload the
mdcna-clean-date-tracker/folder to/wp-content/plugins/ - Activate in Plugins → Installed Plugins
- The plugin automatically creates the
wp_mdcna_clean_datesdatabase table on activation
How It Works
Every time someone submits Fluent Form #13, the plugin:
- Captures first name, last name, email, phone, clean date, quantity, donation, merch selections
- Parses the
datetimefield (supportsm/d/y,m/d/Y,Y-m-d, and more) - Stores everything in
wp_mdcna_clean_dates - Matches the registrant to a WordPress user by email (if they have a WP account)
- Emails the admin a new registration notification
- Emails the registrant a confirmation with their clean time
- Logs all activity to
/wp-content/mdcna-cdt.log
Shortcodes
[mdcna_clean_time]
Shows the currently logged-in user's clean time as a styled card.
[mdcna_clean_time show_date="yes"]
[mdcna_clean_time show_date="no"]
Output: A gradient card showing days, formatted time, and clean date.
[mdcna_total_time]
Shows the combined total clean time of all registered attendees.
[mdcna_total_time]
Output: Large number display — total days + combined years + registrant count.
[mdcna_leaderboard]
Shows a ranked list of all attendees by longest clean time.
[mdcna_leaderboard limit="20" anonymous="no"]
[mdcna_leaderboard limit="50" anonymous="yes"]
| Attribute | Default | Description |
|---|---|---|
limit |
20 |
Max registrants to show |
anonymous |
no |
yes = show initials only (A.B.) |
Admin Pages
Navigate to MDCNA Clean Dates in the WordPress admin sidebar.
All Registrations
- Full table of every registrant
- Columns: Name, Email, Phone, Clean Date, Time Clean, Days, Qty, Donation, Merch, Registered
- Live search by name or email
- Pagination (25 per page)
- Export CSV button (top right)
Stats & Reports
- Total registrants, total days clean, average days, combined years
- Total donations + registration revenue
- Milestone breakdown (1yr+, 5yr+, 10yr+, newcomers ≤90 days)
- Breakdown by clean year
View Log
- Last 200 log entries in reverse order
- Shows full path to log file
Notifications
| Event | Recipients |
|---|---|
| New registration | Admin + Registrant |
| Clean date parse error | Admin only |
| DB insert failure | Admin only |
| Annual/milestone achieved | Registrant |
Milestones (checked daily via WP Cron)
30 days, 60, 90, 180, 1 year, 2 years, 3 years, 5 years, 10 years
Database Table: wp_mdcna_clean_dates
| Column | Type | Description |
|---|---|---|
id |
BIGINT | Auto-increment primary key |
entry_id |
BIGINT | Fluent Forms entry ID |
user_id |
BIGINT | WP user ID (0 if no WP account) |
first_name |
VARCHAR(100) | |
last_name |
VARCHAR(100) | |
email |
VARCHAR(200) | Indexed |
phone |
VARCHAR(50) | |
clean_date |
DATE | Parsed & normalized to Y-m-d |
qty |
SMALLINT | Number of registrations purchased |
donation |
DECIMAL | Optional donation amount |
merch_json |
TEXT | JSON of merch items selected |
raw_data |
LONGTEXT | Full raw form submission JSON |
ip_address |
VARCHAR(45) | |
status |
ENUM | active or deleted |
created_at |
DATETIME | Auto-set on insert |
updated_at |
DATETIME | Auto-updated on change |
Error Logging
All events are written to /wp-content/mdcna-cdt.log:
[2026-07-01 14:22:31] [INFO] FF Submission received. entry_id=47
[2026-07-01 14:22:31] [INFO] Record inserted id=23 for john@example.com clean_date=2019-03-15
[2026-07-01 14:22:32] [ERROR] Could not parse clean_date 'not-a-date' for entry 48
Errors also write to the WordPress debug log if WP_DEBUG_LOG is enabled.
Clean Date Field Mapping
The plugin reads the datetime field (Name Attribute from Fluent Forms).
Supported input formats:
04/28/18(m/d/y)04/28/2018(m/d/Y)2018-04-28(Y-m-d)28/04/2018(d/m/Y)- Most other common date strings via
strtotime()
Important: Dates in the future are rejected and logged as errors.
Requirements
- WordPress 5.8+
- PHP 7.4+
- Fluent Forms plugin (free or pro)
- WP Cron enabled (for milestone emails)
Changelog
1.0.0
- Initial release
- Fluent Forms form #13 integration
- Clean date capture, storage, and aggregation
- Admin reporting with search, pagination, CSV export
- Three frontend shortcodes
- Email notifications (admin + registrant)
- Daily milestone cron job
- Full error logging